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

أرجو المساعدة يا إخواني فقد أصبت بعقدة من هذا البرنامج

مغلق
بدأه الماجد التميمي في 16 أبريل 2002 · 4 رد · 501 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

فكرة البرنامج أنه كراج للسيارات وهو عبارة عن ممر ضيق وله مدخل ومخرج واحد فقط ، وعند دخول كل سيارة يتم إعطائها رقم ثم تدخل ، ( والفكرة عموما تعتمد على المكدسات Stack ) ، سيتم إدخال السيارة باستخدام الدالة Push ويتم إخراجالسيارة باستخدام الدالة Pop ، لكن عند خروج أحد السيارات وبحكم أن الممر ضيق فسيتم إخراج جميع السيارات التي امامها عند المخرج ثم يتم إخراج السيارة وبعدها تعود جميع السيارات المخرجة إلى الكراج مرة أخرى وبنفس الترتيب ، وعند خروج السيارة يتم حساب عدد المرات التي تم فيها تحريك السيارة حتى تخرج السيارة الأخرى ، وهذا هو نص البرنامج :

#include

#include

#include

#define stacksize 10

struct stack

{

int top ;

int car [stacksize];

};

struct stack Parking ;

void menu();

void push ( struct stack * , int , int * );

int empty ( struct stack * );

void pop ( struct stack * , int * , int * );

void print_stack_list ( struct stack * );

void main()

{

Parking.top= -1;

int choico=0 , carnum , x , overflow , underflow ;

while (choico != 10 )

{

menu();

printf ("Enter your choico : ");

scanf ("%d" , &choico ) ;

switch ( choico )

{

case 1 :

{

printf ("Enter car to Enter " );

scanf ("%d", &carnum);

push (&Parking , x , &overflow);

if ( overflow )

{

printf ("%s" , "Parking overflow.");

printf ("Can't Enter car ..Please comeback in other time");

}

else

printf ("Car %d is Entered Successfully onto Parking." , carnum );

break ;

}

case 2 :

{

pop (&Parking , &x , &underflow);

if ( underflow )

{

printf ("nn%snn" , "Parking underflow...");

printf ("Can't pop a Car . Parking is Emoty ! ..");

}

else

printf ("Car %d is exited Successfully from Parkiing." , x );

break ;

}

case 3 :

{

print_stack_list ( &Parking ) ;

break ;

}

} // End switch

getch();

} //end while

return ;

}

/*********** Push Function ***********/

void push ( struct stack *ps , int x , int *poverfl )

{

if ( ps->top == stacksize-1 )

*poverfl = 1 ;

else

{

ps->car[++(ps->top)] = x ;

*poverfl = 0 ;

}

/*********** Empty Function ***********/

int empty ( struct stack *ps )

{

if ( ps->top == -1 )

return (1) ;

else

return (0) ;

//return ( ps->top == -1 ) ;

}

/*********** Pop Function ***********/

void pop ( struct stack *ps , int *px , int *underflow )

{

if ( empty (ps) )

{

*underflow = 1 ;

return;

}

*underflow = 0 ;

*px = ps ->car[ps->top--];

return;

}

/*********** Print Function ***********/

void print_stack_list ( struct stack * pl );

{

printf ("The Parking list : n") ;

for ( int i =0 ; i<=pl->top ;++i )

printf ("%dn" , pl->car ) ;

return ;

}

/*********** Menu Function ***********/

void menu ()

{

printf ("ttt nnn") ;

printf ("ttt Main menu of Parkingn") ;

printf ("ttt ____________________nnn") ;

printf ("ttt1. Push a car to stack.n") ;

printf ("ttt2. Pop a car to stack.n") ;

printf ("ttt3. Print car of Parking.n") ;

printf ("ttt4. Exit.n") ;

return ;

}

وعند التنفيذ يعطيني الأخطاء التالية :

C:Cpp1.cpp(83) : error C2601: 'empty' : local function definitions are illegal

C:Cpp1.cpp(93) : error C2601: 'pop' : local function definitions are illegal

C:Cpp1.cpp(108) : error C2065: 'pl' : undeclared identifier

C:Cpp1.cpp(108) : error C2227: left of '->top' must point to class/struct/union

C:Cpp1.cpp(109) : error C2227: left of '->car' must point to class/struct/union

C:Cpp1.cpp(115) : error C2601: 'menu' : local function definitions are illegal

C:Cpp1.cpp(125) : fatal error C1004: unexpected end of file found

Error executing cl.exe.

أرجوكم أعطوني أي حل للبرنامج فقد سئمت من محاولة حله ، والتسليم غدا ولم أفلح في الحل وحاولت فيه مرات وكرات لكن بدون فائدة

#2

لقد سألني أحدهم عن هذا السؤال و قد قمت بحله له في منتدى

آخر :

اخي ستجد هذا الحل في هذا اللنك :

هنا

مع تحياتي ,,,

#3

لكن حاولت أغير ال A & D إلى char

لكن يعطيني

you have the ID NO . -858993460

ويهنق معي وش المشكلة يا ترى ..

وعموما أشكرك وبعنف ويبدو لي أن السائل في المنتدى الثاني أحد الزملاء :) ...

الشي الأخر الحل اللي وضعته أعلاه ماهي المشكلة يا ترى ؟؟

علما أنني سأتبع حلك وأنسف خزعبلاتي السابقة ، وأشكرك مقدما

#4

على فكرة بقيت مشكلة عويصة ، وهي أنه عند خروج العنصر فإنه يجب أن يكون هناك عداد يبين فيها عدد المرات التي تم فيها تحريك العنصر قبل أن يخرج

بمعنى لو أدخلت العناصر 1 ، 2 ، 3 ، 4 فيكون ترتيبها في المكدس

4

3

2

1

إذا حذفنا العنصر 2 فسيتحرك العنصر 4 ، 3 حتى يخرج العنصر 2 .

ويكون شكل المكدس كما يلي :

4

3

1

وعند حذف العنصر 3 فسيتحرك العنصر 4

ويطبع العنصر الذي خرج وهو 3 وعدد مرات تحركه 1 وذلك عندما خرج العنصر 2 .

وعند حذف العنصر 4 فسيطبع العنصر 4 وعدد مرات تحركه 2 وذلك عندما خرج العنصران 2 ، 3 ...

هل عندك حل لهذه المشكلة ، وأيضا الإخوة بقية الأعضاء من لديه حل فليفدنا ...

والكود الذي كتبه الأخ طلال في منتدى الموسوعة العربية كما يلي :-

#include"stdio.h"

#include"conio.h"

#include"stdlib.h"

#define MAX 10

typedef struct

{

int A, D; // الدخول و الخروج

int ID;

}car; // تعريف سجل السيارة

car stack[MAX];

int topPosition=0;

void push(car);

car pop(void);

void display(void);

void read_car(car *);

main()

{

int ch;

car c;

while(ch!=4)

{

system("cls");

printf("n1- push...n2- pop...,",n3- display...n4- Exit...");

scanf("%d",&ch);

switch(ch)

{

case 1:

read_car(&c);

push©;

break;

case 2:

c=pop();

display();

getch();

break;

case 3:

display();

break;

}

}

printf("n BYE BYE ....");

}

//------------------------------------

void push(car c)

{

if(topPosition >= MAX)

{

printf("Full.n");

}

else

{

stack[topPosition].A = c.A ;

stack[topPosition].D = c.D ;

stack[topPosition].ID = c.ID ;

topPosition++;

}

}

//-------------------------------------

car pop(void)

{

car temp;

topPosition--;

if(topPosition < 0)

{

printf("Empty.n");

temp.A = 0 ;

temp.D = 0 ;

temp.ID = 0 ;

}

else

{

temp.A = stack[topPosition].A ;

temp.D = stack[topPosition].D ;

temp.ID = stack[topPosition].ID ;

}

return temp;

}

//--------------------------------------

void display(void)

{

int i;

for( i=0 ; i

printf("n %-4d %-4d %-4d "

,stack.A, stack.D, stack.ID);

getch();

}

//--------------------------------------

void read_car(car *c)

{

printf("nPlease Enter The A: ");

scanf("%d",&©->A);

printf("nPlease Enter The D: ");

scanf("%d",&©->D);

printf("nPlease Enter The car ID: ");

scanf("%d",&©->ID);

}

#5

لالالالالالا أخوي أنت أخذت البرنامج الغلط :)

هذا البرنامج هو الستاك عن طريق المصفوفات :)

خذ الحل الثاني هو اللي مطلوب عليكم :)

أخوي الماجد بالنسبة للـ a , b هما على صيغة int فإذا حولتها إلى char سيحدث اللي قلت عليه !!

خلها int وش ضارك ؟! :D

وومكن تغيرها إلى char بس لازم تغير كم شي في البرنامج :)

عموماً والله حبيت أساعدك بس كمبيوتري مريض الله يشفية

بيتصلح :)

أخوي بالنسبة للبرنامج اللي عطيتك شغال 100% و أنا ما سويت

بالعداد سويت بنفس الفكرة ولكن من غير عداد شف الدالة main_pop

أوكي

مع تحياتي ,,,;)

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…