السلام عليكم و رحمة الله و بركاته اساتذتي الكرام
لقد طلب منا كتابة برنامج يطلب من المستخدم ادخال عبارة حرفية مثل /ab+c فيقراها و يطلب منه قيم كل متغير اي حد و يقوم بحفظها في قائمة بها نوعين حرفي لاسم الحد و رقمي لقيمة الحد ثم يقوم البرنامج بانشاء جدول له هيكلة خاصة اي كل خانة فيها نوعين حرفي للمتغيرات التي ادخلها و رقمي لنوعها 0 معناه حد و 1 معناه عملية ثم استنادا لتلك القائمة يقوم بانشاء pile رقمية فيستخدم الدالة empiler للاظافة و يتوقف عندما يصل الى عملية هنا يستخدم الدالة depiler من اجل الاحتفاظ بالقيم في متغير ترجعه و تقوم بحذفها من الـ pile و في الاخير يطبع البرنامج العبارة بعد ان يعوض كل متغير بقيمته فيكون شكل العبارة رقميا و بشكل عادي اي مثلا (3+2)/2 و يظهر النتيجة
انا المشكلة التي واجهتني في الكود المبدئي هي الدالة depiler فهي لا تعمل و لم اعلم لماذا فهل لكم اساتذتي الكرام ان توجهونني الى الخطا الذي ارتكبته و كيفية اصلاحه و ساكون لكم شاكرة
هذا هو الكود الذي كتبته للىن هو لم يكتمل فجزء طباعة العبارة غير موجود
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct val_liste{ char var; int val; struct val_liste *ptrn;}val_l;typedef struct pile{ int val_p; struct pile *ptrn_p;}val_pi;typedef struct tab_type{ char op; int typ;}tab_t;val_pi *empiler(val_l *liste,val_pi *sommet){ val_pi *n_pile; int x; while(liste!=NULL) { n_pile=(val_pi*)malloc(sizeof(val_pi)); x=liste->val; liste=liste->ptrn; n_pile->val_p=x; printf("\n"); printf("| %d |\t",(n_pile->val_p)); n_pile->ptrn_p=sommet; sommet=n_pile; } return sommet;}val_pi *empiler_vleur(int x,val_pi *sommet){ val_pi *n_pile; n_pile=(val_pi*)malloc(sizeof(val_pi)); n_pile->val_p=x; printf("\n"); printf("| %d |\t",(n_pile->val_p)); n_pile->ptrn_p=sommet; sommet=n_pile; return sommet;}int depiler(val_pi *pile,val_pi *sommet){ int x; val_pi *d_pile; pile=sommet; while(pile) { x=pile->val_p; printf("\nx : %d",x); d_pile=sommet; sommet=sommet->ptrn_p; free(d_pile); } return x;}val_l *criation_l(char *t){ int n,valeur,i=0; val_l *n_val,*n_val1,*tete; tete=NULL; n=strlen(t); while(i<n) { if(t>='a' && t<='z' || t>='A' && t<='Z') { n_val=(val_l*)malloc(sizeof(val_l)); printf("%c : ",t); scanf("%d",&valeur); n_val->var=t; n_val->val=valeur; n_val->ptrn=NULL; if(tete!=NULL) { n_val1->ptrn=n_val; } else { tete=n_val; } n_val1=n_val; } i=i+1; }return tete;}void aff(val_l *tete){ val_l *P; P=tete; if(!tete) printf("la liste n'existe pas\n"); else { while (P!=NULL) { printf("| %c | %d |\t",(P->var),(P->val)); P=P->ptrn; } printf("\n------------------------\n"); }}main(){ char exp[20]; int i,lenth,x,y,z; val_l *valeur_l,*tete_v_l; val_pi *valeur_p,*sommet_v_p; tab_t etat[40]; sommet_v_p=NULL; printf("entrez votre exp SVP\n"); gets(exp); lenth=strlen(exp); valeur_l=criation_l(exp); aff(valeur_l); for(i=0;i<lenth;i++) { if(exp>= 'a' && exp<='z' || exp>='A' && exp<='Z') { etat.op=exp; etat.typ=0; } else if(exp=='+'|| exp=='-'|| exp=='*'|| exp=='/') { etat.op=exp; etat.typ=1; } printf("| %c : %d |",etat.op,etat.typ); } i=0; if(etat.typ==0) { valeur_p= empiler(valeur_l,sommet_v_p);i++; } for(i=0;i<lenth;i++) { if(etat.typ==1) { x= depiler(valeur_p,sommet_v_p); printf("\nx : %d",x); y= depiler(valeur_p,sommet_v_p); printf("\ny : %d",y); switch(etat.op) { case '+': z=y+x;break; case '-': z=y-x;break; case '*': z=y*x;break; case '/': z=y/x;break; } z= depiler(valeur_p,sommet_v_p); valeur_p=empiler_vleur(z,sommet_v_p); } }}جزاكم الله عني كل خير و وفقكم الى كل خير
لكم فائق احترامي و تقديري


