الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اخطا منطقية عند تنفيذ دالة السحب من الطابور

بدأه المـــــاسة في 11 أبريل 2012 · 2 رد · 551 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الدالة

int Dequeue (int queue[],int *front,int *rear)
{
	int value;
	if (*front != -1 || *front<*rear)
	{

		value=queue[*front];
		*front=*front+1;
		return value;
	}
	else if (*front==*rear)
		{
			value=queue[*front];
			*front=-1;
			*rear=-1;
			return value;
	}
		else if (*front>*rear)
			return -1;
}

الماين

value=Dequeue(queue,&front,&rear);
		if(value!=-1)cout<<"the value Dqueue is "<<value<<endl;
		else cout<<"queue is empty\n";

الكود كاملا بالمرفقات

queue operations.txt

تم تعديل هذه المشاركة بواسطة المـــــاسة في 11 أبريل 2012 في 20:52

#2

السلام عليكم

الخطأ هو أن هذا الشرط دائماً متحقق ما دام تم إدخال قيمة فى queue

if (*front != -1 || *front<*rear)

ولتحقيق الشرط الصحيح للسحب من queue يجب إستخدام معامل "و &&" وليس" أو ||" أو الإستغناء عن شرط التحقق من front بأنها تساوى -1 والإكتفاء بالشرط الأخر فقط .

1

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#3

لقد قمت بتعديل البرنامج حتى استفيد منه أنا وكل أخوانى واخواتى بالمنتدى .

لقد أضفنا علية خيار طباعة طابور البيانات وخيار انهاء البرنامج

وان كان اى تعليق يمكننا استقباله على الرحب والسعة.

كود البرنامج بعد التعديل:

/*
 * File:   main.cpp
 * Author: Mohammed Abu Zayed
 *
 * Created on April 12, 2012, 12:17 PM
 */
#include <cstdlib>
#include<iostream>
#include <string>
using namespace std;
const int MAX = 100;

void Enqueue(int queue[], int *front, int *rear, int value)
{
    if (*rear < MAX)
    {
        *rear = *rear + 1;
        queue[*rear] = value;
        if (*front == -1)
            *front = 0;
    }
    else
        cout << "Queue is full\n";
}

int Dequeue(int queue[], int *front, int *rear)
{
    int value;
    if (*front == -1)
        return -1;
    else if (*front == 0)
    {
        value = queue[*front];
        *front = *front -1;
        *rear = -1;
        return value;
    }

    else
    {
        value = queue[*front];
        *front = *front + 1;
        return value;
    }
}

int main()
{
    int queue[MAX], front = -1, rear = -1, value, choice;
    string answer;

    while (1)
    {
        cout << "1. To Enqueue element" << endl
             << "2. To Dequeue element" << endl
             << "3. To print out the Queqe" << endl
             << "4. To Quite" << endl;

        cout << "Enter your choise: ";
        cin >> choice;

        switch (choice)
        {
        case 1:
        {
            do
            {
                cout << "Enter the value to Enqueue: ";
                cin >> value;
                Enqueue(queue, &front, &rear, value);
                cout << "Want to try (y/n): ";
                cin >> answer;
            }
            while (answer == "y");
            break;
        }

        case 2:
        {
            do
            {
                value = Dequeue(queue, &front, &rear);
                if (value != -1)
                    cout << "The value Dqueue is: " << value << endl;
                else
                    cout << "Dueue is empty" << endl;
                cout << "Want to Delete anther one (y/n): ";
                cin >> answer;
            }
            while (answer == "y");
            break;
        }

        case 3:
        {
            if (rear != -1)
            {
                for (int i = front; i < rear; i++)
                    cout << " : "<< queue << " ";
                cout << endl;
            }
            else
                cout << "Queue is Empty.\n";

            break;
        }

        case 4:
            exit(0);
            break;

        default:
            cout << "invalid choise.\n";
        }
    }
    return 0;
}

المخرجات:

1. To Enqueue element
2. To Dequeue element
3. To print out the Queqe
4. To Quite
Enter your choise: 1
Enter the value to Enqueue: 4
Want to try (y/n): y
Enter the value to Enqueue: 5
Want to try (y/n): y 
Enter the value to Enqueue: 777
Want to try (y/n): n
1. To Enqueue element
2. To Dequeue element
3. To print out the Queqe
4. To Quite
Enter your choise: 3
 : 4  : 5  : 777 
1. To Enqueue element
2. To Dequeue element
3. To print out the Queqe
4. To Quite
Enter your choise: 2
The value Dqueue is: 4
Want to Delete anther one (y/n): n
1. To Enqueue element
2. To Dequeue element
3. To print out the Queqe
4. To Quite
Enter your choise: 3
 : 5  : 777 
1. To Enqueue element
2. To Dequeue element
3. To print out the Queqe
4. To Quite
Enter your choise: 4

RUN SUCCESSFUL (total time: 2m 11s)

تقبلو تحياتى والله ولى التوفيق.

تم تعديل هذه المشاركة بواسطة AudaNix في 12 أبريل 2012 في 17:12

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

مواضيع مشابهة