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

سؤال (لغة سي) يجب فيه استعمال دالة واحدة فقط

بدأه حامي الحمى في 3 يناير 2009 · 23 رد · 1,584 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سؤال ثاني

بعد السؤال السابق اللي ما حد ساعدني فيه رغم ان الطلب استمر لمدة اكثر من اسبوع :(

بتمنى هذا الطلب ما تخيّبوني فيه

السؤال بيقول كالتالي:

اكتب برنامج الذي يقوم باستقبال ملف تكست باسم mathExercises.txt والذي فيه عدة مسائل حسابية. كل مسألة موجودة في سطر، على البرنامج ان يحسب ويطبع لكل تمرين رقمه والنتيجة .

كل سطر يحتوي مسألى حسابية واحدة التيت تنتهي بالرمز =

مسألى حسابية قانونية هي مسألة المونة من ارقام صحيحة وعمليات حسابية اساسية (ال4 عمليات الحسابية) عملية القسم ترجع دائماً عدد حقيقي وتعتبر قانونية عندما لا تكون قسمة على صفر).

كل رقمان يجب ان يكونان مفصولان بعملية حسابية والمسألة تنتهي عند الرمز =.

على البرنامج ان يحسب نتيجة المسائل القانوية فقط. ويجب البدء بحساب التمرين فقط بعد التاكد من ان المسألة قانونية.

ترتيب العملية الحسابية يبدأ من اليسار الى اليمين وبدون اولويات الحساب.

لكل مسألة قانونية يجب طباعة المسالة كلها مع نتيجة التمرين.

اما المسائل الغير قانوية يجب طباعتها بملف تكست باسم mathLogFile.txt . كل سطر في ملف الإخراج يبدا برقم المسألة الموجود في ملف الإدخال الأصلي، وبعدها تظهر المسألة الغير قانونية كلها.

يجب استعمال دالة باسم calculateOperation التي تستقبل رقمان صحيحان ورمز الذي يرمز للعملية الحسابية وتقوم هذه الدالة بحساب النتيجة وإرجاع قيمة النتيجة كرقم حقيقي.

يمكن الفرض بان كل عملية حسابية لا تتعدي ال 80 رمز بما فيها رمز =.

مثال على ملف الإدخال mathExercises.txt

ومثال على رسالة الإخراج الخاصة بملف الإدخال mathExercises.txt تكون كالتالي

ومثال عل ملف الإخراج الذي فيه المسائل الحسابية الغير قانونية mathLogFile.txt

موجود في الصورة التالية

post-69369-1230990971_thumb.jpg

بدأت فيه وسأكتب ما بدات به في الرد التالي

السلام عليكم

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#2

السلام عليكم

هذا ما قمت به

كتبت الدالة

واستدعيت الملف

وعارف انه المفروض اعمل مصفوفة احادية (ذات بعد واحد)

وامرّ على سطر سطر في الملف

لكن مش عارف كيف ممكن اعمل هذا الشي

هذا اللي كتبته حتى الآن

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

  1.  
  2. #include <stdio.h>
  3. #define INPUT "mathExercises.txt"
  4. #define COL 80
  5.  
  6.  
  7. float calculateOperation (int, char, int);
  8.  
  9. void main()
  10. {
  11. FILE *file;
  12. int calculate[COL];
  13.  
  14. file=fopen(INPUT, "r");
  15.  
  16. if (file==NULL)
  17. {
  18. printf("File not Open!n");
  19. return ;
  20. }
  21.  
  22.  
  23.  
  24. }
  25.  
  26. float calculateOperation(int a, char ch, int b)
  27. {
  28. float result;
  29.  
  30. switch (ch)
  31. {
  32. case '+':
  33. result=a+b;
  34. break;
  35. case '-':
  36. result=a-b;
  37. break;
  38. case '*':
  39. result=a*b;
  40. break;
  41. case '/':
  42. result=a/b;
  43. break;
  44. default:
  45. result=0;
  46. }
  47.  
  48.  
  49. return printf("%.2fn", result);
  50. }
  51.  

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#3

وعليكم السلام

اخي الحبيب لابد من عمل خوارزمية قبل ان تبداء بعملية التكويد

وهذا ينطبق على سؤالك السابق ايضا ولكن المشكله انك تبداء بالكود

اما إذا كنت تريد ان تعملها على التوازي فهذا خيارك

قبل ان اتكلم عن هذا السؤال هل انهيت حل سابقه .

ودمتم

تم تعديل هذه المشاركة بواسطة voo في 3 يناير 2009 في 18:46

متغيب

#4

السلام عليكم

نعم بحمد الله انهيت السؤال السابق اخي الكريم

وقد قمت بعمل خوارزمية لهذا السؤال

لكن لم استطيع او لم اعرف كيفية كتابتها ككود

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#5

اخي العزير

اين دالة القراءة من الملف لم اشاهدها بالكود

علما انها مطلوبة في المثال السابق :happy:

متغيب

#6

السلام عليكم

لم اعرف كتابتها

كتبتها بشكل عادي

أي كتبت دالة التي تستقبل رقمان وعملية حسابية وترجع النتيجة

لكن لم اعرف كيف يمكن كتابتها للقراءة من الملف

لاني لم اقرأ عن هذا الشيء :(

اذا ممكن تحكيلي كيف بكون مشكور :)

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#7
اقتباس
نعم بحمد الله انهيت السؤال السابق اخي الكريم

متغيب

#8

السلام عليكم

أخي عن أي سؤال بتتحدث ؟

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

اما عن السؤال الحالي فأنا كتبت الدالة ما بعرف اذا كانت صحيحة ويمكن استعمالها !!!

انا حاليا في هذا السؤال، اما السؤال السابق انتهيت منه بحمد الله

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#9

يجب عمل داله تقوم بتحليل المفردات وهي التي تقوم بالقراءة

تقوم بالقراءة من الملف فإذا كان رقم تسند القيمه لمتغير

وإذا حرف تقوم بالقراءة مرة اخرى حتى نصل إلى

num ('+'||'-'||'*'||'/') num

بعد كذا تقوم بالارسال للدالة

calculateOperation

ويكون لديك ايضا محلل نحوي ليعرف هل المعادلة الحسابية قانونية او لا

هذا بشكل عام اما إذا كنت تبغى كود فأنا اسف لانو كذا ما راح تتعلم

إذا محتاج مساعده فلا بأس حاول ان تبحث عن هذه الدوال وعن كيفية عملها

getc()
isdigit()
ungetc()

ودمتم

متغيب

#10

طيب ممكن اولا تعمل تقسيم لكل سطر لتضع الارقام في مصفوفة من النوع float و العمليات في مصفوفه من النوع حرف.

اهم شئ تقسم الارقام بطريقة جيده ثم تعمل مقارنات .

هناك عده طرق لذلك .

هذا كود فقط يقسم لك كل سطر اعتمادا على العلمليات.

  1. #include <stdio.h>
  2. #include<string.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. int SIZE=80;
  7. FILE* myfile;
  8. char *split;
  9. char line[SIZE];
  10.  
  11. myfile=fopen("mathExercises.txt","r");
  12. while(!feof(myfile)){
  13.  
  14. fgets(line,SIZE,myfile);
  15. split=strtok(line," +=-*/");
  16. while(split!=NULL){
  17.  
  18. puts(split);
  19. split=strtok(NULL," +=-*/");
  20. }
  21. }
  22. fclose(myfile);
  23. getchar();
  24. return 0;
  25. }
  26.  

tvquran_6.gif

#11

السلام عليكم

بارك الله فيك اخي

انا الفكرة عندي لحساب السؤال كالتالي:

عن طريق الدالة calculateOperation احسب العلاقة بين الرقمين (جمع ضرب طرح قسمة) واعملهم بمتغير جديد وهذا المتغير يكون "مثل" رقم واحد واعمل نفس العملية مع الرمزين الباقيات

مثال:

اذا كانت المسألة الرياضية كالتالي:

5+6-7

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

يجمع الـ 5+6 ويرجع النتيجة اللي 11

وهذي الـ 11 اعتبرها كأنها الرمز او الخانة اللي قبل -7

يعني بعدها الدالة بتاخذ 11 وبتطرح منها الـ 7

والخ...

انا بدات لكن للآن ما عرفت اكمل

يعني مش عارف كيف ممكن تطبيقها عن طريق الكود

هذا اللي كتبته حتى الآن اذا ممكن تحكيلي حضرتك او اي احد من الأخوان كيف ممكن اكمل بكون ممنون

  1.  
  2. #include <stdio.h>
  3. #define INPUT "mathExercises.txt"
  4. #define OUTPUT "mathLogFile.txt"
  5. #define COL 80
  6.  
  7.  
  8. float calculateOperation (int, char, int);
  9.  
  10. void main()
  11. {
  12. FILE *fileR, *fileW;
  13. int calc[COL];
  14. char c;
  15.  
  16.  
  17. fileR=fopen(INPUT, "r");
  18. fileW=fopen(OUTPUT, "w");
  19.  
  20.  
  21. if ((fileR==NULL)||(fileW==NULL))
  22. {
  23. printf("File not Open!n");
  24. return ;
  25. }
  26.  
  27. c=fgetc(fileR);
  28. while (c!=EOF)
  29. {
  30. if (c!='=')
  31. {
  32. calculationOperation(calc[c],calc[c],calc[c]);
  33. }
  34. }
  35.  
  36.  
  37.  
  38.  
  39. }
  40.  
  41. float calculateOperation(int a, char ch, int b)
  42. {
  43. float result;
  44.  
  45. switch (ch)
  46. {
  47. case '+':
  48. result=a+b;
  49. break;
  50. case '-':
  51. result=a-b;
  52. break;
  53. case '*':
  54. result=a*b;
  55. break;
  56. case '/':
  57. result=a/b;
  58. break;
  59. default:
  60. result=0;
  61. }
  62.  
  63.  
  64. return printf("%.2fn", result);
  65. }
  66.  

انا عارف انه استدعاء الدالة بسطر 32 في خطأ

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

السلام عليكم

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#12

السلام عليكم

اخي فهد جزيت خيرا

لكن في الكود اللي انت كتبته مستعمل امور انا ما درست عنها شي

وانا حابب اني اتعلم خطوة بعد خطوة

وحابب اني احل السؤال مثل ما هو مطلوب

انا حسب الكتاب الموجود عندي

درست حتى الآن للدوال بدون المؤشرات او السلاسل

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

فقط بواسطة دالة ومصفوفات

بوركت اخي

يا ريت تفحصلي الكود اللي كتبته قبل كيف ممكن اكمل عن طريقه

جزيتم الفردوس الأعلى ان شاء الله

السلام عليكم

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#13
  1. void main()
  2. {
  3. FILE *fileR, *fileW;
  4. int num1=1,num2=1;
  5. char c,t;
  6. bool good;
  7. float result1=0,result2=0;
  8.  
  9. fileR=fopen(INPUT, "r");
  10. fileW=fopen(OUTPUT, "w");
  11.  
  12. if ((fileR==NULL)||(fileW==NULL))
  13. {
  14. tprintf("File not Open!n");
  15. return 0;
  16. }
  17. c=fgetc(fileR);
  18. while (c!=EOF)
  19. {
  20. while (c==' ' || c=='n') c=fgetc(fileR);
  21. if (isdigit©)
  22. {
  23. num1=atoi©;
  24. for (t=getc(fileR);isdigit(t);num1=num1*10)
  25. num1=num1+atoi(t);
  26. c=t;
  27. }
  28. else
  29. good= false;
  30. if(c=='+' ||c=='-' || c=='*'|| c=='/')
  31. ch=c;
  32. else
  33. good=false;
  34. if (isdigit©)
  35. {
  36. num1=atoi©;
  37. for (t=getc(fileR);isdigit(t);num2=num2*10)
  38. num2=num2+atoi(t);
  39. c=t;
  40. }
  41. else
  42. good= false;
  43.  
  44. if(!good)
  45. while(c != '=')
  46. c=fgetc(fileR);
  47. if(result1==0)result1=calculateOperation(int num1, char ch, int num2);
  48. else
  49. {
  50. result2=result1;
  51. result1=calculateOperation(int result2, char ch, int num2);
  52. }
  53. }
  54. }
  55.  

يا ريت لو تشوف الكود هذا

وحط في بالك ان الكود يبغاله فلتره لانو بصراحه جالس اكتبه على المفكره لاسبابي الخاصه

لذلك خذ ما تحتاجه

وإن شاء الله تجد ما يفيدك

وللمعلومية © المقصود بها سي بين قوسين

وكذلك لم اتطرق للطباعه في حال المسأله قانونيه (بالشاشه) غير قانونيه ( بالملف)

واذا فيه حاجات مو واضحه ممكن اشرحها

تم تعديل هذه المشاركة بواسطة voo في 4 يناير 2009 في 05:54

متغيب

#14

السلام عليكم

بارك الله فيك اخي الكريم

لكني لم افهم بعض الأمور وايضا فيه بعض الأخطاء

منها:

isdigit

atoi

هذه المتغيرات لم افهم عملها

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#15

isdigit صح اذا كان المدخل رقم.

atoi يحول من نص الى رقم

كود سهل يكتب لك المعادلات التي ليس على الصورة المطلوبه :

  1. #include <stdio.h>
  2. #include<string.h>
  3. #include<ctype.h>
  4.  
  5.  
  6.  
  7.  
  8. #define SIZE 80
  9.  
  10. int main()
  11. {
  12.  
  13. FILE * m_file,*log_file;
  14. char line[SIZE];
  15. int i,j=0;
  16.  
  17. m_file=fopen("mathExercises.txt","r");
  18. log_file=fopen("mathLogFile.txt","w");
  19. while(!feof(m_file))
  20. {
  21. fgets(line,SIZE,m_file);
  22. j++;
  23.  
  24. for(i=1;i<strlen(line)-1;i++)
  25. {
  26. if( (line[i]=='+'||line[i]=='-'||line[i]=='/'||line[i]=='*')&&(!isdigit(line[i-1])||!isdigit
    (line[i+1])) )
  27. {
  28. fprintf(log_file,"%i%c %s",j,'.',line);break;
  29. }
  30. if( line[i]=='/' && line[i+1]=='0')
  31. {
  32. fprintf(log_file,"%i%c %s",j,'.',line);
  33. }
  34. }
  35. }
  36.  
  37. fclose(log_file);
  38. fclose(m_file);
  39.  
  40. return 0;
  41. }
  42.  

strlen دالة تعيد طول النص

tvquran_6.gif

#16

نفس الكود السابق بدون اي دوال:

  1. #include <stdio.h>
  2.  
  3. #define SIZE 80
  4.  
  5. int main()
  6. {
  7.  
  8. FILE * m_file,*log_file;
  9. char line[SIZE];
  10. int i=1,j=0,test=1;
  11. float num[SIZE];
  12. m_file=fopen("mathExercises.txt","r");
  13. log_file=fopen("mathLogFile.txt","w");
  14. while(!feof(m_file))
  15. {
  16. fgets(line,SIZE,m_file);
  17. j++;
  18.  
  19. while(line[i]!='\0')
  20. {
  21. switch(line[i])
  22. {
  23. case '+':
  24. case '-':
  25. case '/':
  26. if(line[i+1]=='0') test=0;
  27. case '*':
  28. if((line[i-1]>'9' ||line[i-1]<'0')||(line[i+1]>'9'||line[i+1]<'0'))
  29. test=0;
  30.  
  31.  
  32. }
  33. if(!test){fprintf(log_file,"%i%c %s",j,'.',line);test=1;break;}
  34. i++;
  35. }
  36.  
  37.  
  38. i=0;
  39. }
  40.  
  41.  
  42. fclose(log_file);
  43. fclose(m_file);
  44.  
  45.  
  46. return 0;
  47. }
  48.  

tvquran_6.gif

#17

السلام عليكم

بارك الله فيك اخي فهد

ربنا يجزيك بكل خير انت والأخوان

الآن باقي في السؤال

عملية فحص كل سطر

انا عندي طريقة وحاولت اكتبها لكن يطلع فيها أخطاء

الطريقة كالتالي:

بدخل سطر بعد سطر

بكل سطر بفحص اذا كان في رقم وبعد رقم

مثلا 321

بفحص الرقم الأول وهو 3 بفحص اللي بعد الـ 3

اذا كان رقم

بضرب الرقم السابق بـ 10 وبضيف عليه الرقم الجديد

يعني حسب المثال

بتم ادخال الـ 3 وبعدها في الرقم 2، بقوم بضرب الرقم 3 بـ 10 بيصبح 30 وبضيف عليه الرقم اللي الجديد ادخلته وهو الـ 2 والخ..

انا اللي قمت بكتابته كالتالي يا ريت حد يفحصلي اياه حتى وكمان يشوفلي الفكرة اللي طرحتها اذا كانت ممكنة:

  1.  
  2. int main()
  3. {
  4. FILE *m_file,*log_file;
  5. char line[SIZE];
  6. char ch;
  7. int i=1,j=0,test=1;
  8. float num[SIZE];
  9. m_file=fopen(INPUT,"r");
  10. log_file=fopen(OUTPUT,"w");
  11.  
  12. ch=getc(m_file);
  13. while(ch!=EOF)
  14. {
  15. while(ch!='n')
  16. {
  17. ch=getc(m_file);
  18. line[i]=ch;
  19. i++;
  20. }
  21.  
  22. //checking the row from errors
  23. if (line[i]!='+' || line[i]='-' || line[i]='*'||line[i]='/'||line[i]>57 || line[i]<48)
  24. return 0;
  25. if ((line[i]>41 && line[i]<48) && (line[i+1]>41 &&line[i+1]<48))
  26. return 0;
  27. else
  28. while((line[i]>47)&&(line[i]<58))
  29. {
  30. num=line[i];
  31. num*=10;
  32. i++
  33. }
  34.  
  35.  
  36.  
  37. }
  38.  
  39.  
  40.  
  41.  

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#18

من السطر رقم 1 الى 20 الاوامر تمام

إذا كنت لا تريد استخدام الداله

isdigit()

بامكانك التعويض عنها باختبار ارقام المحارف في اسكي كما فعلت وهي من 48 إلى 57

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

( رقم) يليه ( معامل حسابي "+" او "-" او "*" او "/") على التوالي حتى نصل إلى رقم يليه "="

نقوم بطباعة سلسة الاحرف بالملف الخارجي اي ان المسأله غير نظاميه

اما إذا تحقق الشرط نقوم بإرسال الرقمين والمعامل الحسابي إلى الدالة وعند الوصول إلى "=" نقوم بطباعة السلسله يليها الناتج على الشاشه.

وحط في بالك ان الارقام ممكن تتكون اكثر من خانتين يعني 100 فما فوق

ودمتم

تم تعديل هذه المشاركة بواسطة voo في 5 يناير 2009 في 05:39

متغيب

#19

السلام عليكم

اخواني الكرام

بارك الله فيكم

انا من امبارح وانا احاول اكتب اكواد

الفكرة ما عرفت اطبقها

واستعملت الـ debugger

ولاقيت ان المشكلة انه بيقرأ حرف حرف (او رمز رمز)

الشي اللي مش عارف اعمله اني اخبره بحالة اذا لاقى شيء غير قانوني

مثل حرف او رمزين متتاليات يخرج من السطر كله وينتقل للسطر التالي:

هذا اللي كتبته حتى الآن طبعا بما فيه الكود اللي وضعه اخوي فهد

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define SIZE 80
  5. #define INPUT "mathExercises.txt"
  6. #define OUTPUT "mathLogFile.txt"
  7.  
  8. float calculateOperation(int, char, float);
  9.  
  10.  
  11.  
  12. int main()
  13. {
  14. FILE *m_file,*log_file;
  15. char line[SIZE];
  16. char ch, tav;
  17. int i=1,j=0,test=1;
  18. int num1,num2,t;
  19. float num[SIZE], result1=0;
  20. m_file=fopen(INPUT,"r");
  21. log_file=fopen(OUTPUT,"w");
  22.  
  23.  
  24.  
  25.  
  26. while(ch!=EOF)
  27. {
  28. fgets(line,SIZE,m_file);
  29. i=0;
  30. while(line[i]!='\0')
  31. {
  32. if ((line[i]>57 || line[i]<48)&&(line[i]!='+' || line[i]!='-' || line[i]!='*'||line[i]!='/')
    )
  33. line[i]='\0';
  34.  
  35. line[i++];
  36. }
  37.  
  38. while ((ch<57 && ch>47)||(ch=='+' || ch=='-' || ch=='*'||ch=='/'))
  39.  
  40. {
  41. while(ch!='n')
  42. {
  43. int i=0;
  44.  
  45. line[i]=ch;
  46.  
  47. //checking the row from errors
  48. if ((line[i]>57 || line[i]<48)&&(line[i]!='+' || line[i]!='-' || line[i]!='*'||line[i]!='/')
    )
  49. fscanf(m_file,"%c", 'n');
  50. else
  51. {
  52. ch=fgetc(m_file);
  53. line[i+1]=ch;
  54.  
  55. while ((line[i]<58) && (line[i]>47))
  56. {
  57.  
  58. if ((line[i+1]<58) && (line[i+1]>47))
  59. num1=line[i]*10+line[i+1];
  60. else if(line[i+1]=='+' || line[i+1]=='-' || line[i+1]=='*'||line[i+1]=='/')
  61. tav=line[i+1];
  62.  
  63. ch=getc(m_file);
  64. line[i+2]=ch;
  65. }
  66. while ((line[i+2]<58) && (line[i+2]>47))
  67. num2=line[i+2];
  68.  
  69. result1=calculateOperation(num1, tav, num2);
  70.  
  71.  
  72.  
  73. }
  74. }
  75. ch=getc(m_file);
  76. i++;
  77. }
  78. printf("%fn", result1);
  79.  
  80. }
  81.  
  82.  
  83. // printing the rows that contain illegal
  84. while(!feof(m_file))
  85. {
  86. fgets(line,SIZE,m_file);
  87. j++;
  88. while(line[i]!='\0')
  89. {
  90. switch(line[i])
  91. {
  92. case '+':
  93. case '-':
  94. case '/':
  95. if(line[i+1]=='0')
  96. test=0;
  97. case '*':
  98. if((line[i-1]>'9' ||line[i-1]<'0')||(line[i+1]>'9'||line[i+1]<'0'))
  99. test=0;
  100. }
  101. if(!test)
  102. {
  103. fprintf(log_file,"%d%c %s",j,'.',line);
  104. test=1;
  105. break;
  106. }
  107. i++;
  108. }
  109. i=0;
  110. }
  111. fclose(log_file);
  112. fclose(m_file);
  113. return 0;
  114.  
  115. }
  116.  
  117.  
  118. float calculateOperation(int a, char ch, float b)
  119. {
  120. float result;
  121.  
  122. switch (ch)
  123. {
  124. case '+':
  125. result=a+b;
  126. break;
  127. case '-':
  128. result=a-b;
  129. break;
  130. case '*':
  131. result=a*b;
  132. break;
  133. case '/':
  134. result=a/b;
  135. break;
  136. default:
  137. result=0;
  138. }
  139.  
  140.  
  141. return printf("%.2fn", result);
  142. }
  143.  

يا ريت اللي يقدر يساعدني يساعدني او يقولي كيف ممكن احل المشكلة

السلام عليكم

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#20

السلام عليكم

يا اخوان

هذا التمرين اتعبني جدااااً

ومش معقول ما في حد بيقدر يساعدني فيه!!!

انا وصلت في النهاية لهذا الكود

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define SIZE 80
  5. #define INPUT "mathExercises.txt"
  6. #define OUTPUT "mathLogFile.txt"
  7.  
  8. float calculateOperation(int, char, float);
  9.  
  10.  
  11.  
  12. int main()
  13. {
  14. FILE *m_file,*log_file;
  15. char line[SIZE];
  16. char ch, tav;
  17. int i=1,j=0,test=1,flag=1,result1;
  18. int num1,num2;
  19. float num[SIZE], result,result2;
  20. m_file=fopen(INPUT,"r");
  21. log_file=fopen(OUTPUT,"w");
  22.  
  23.  
  24.  
  25.  
  26. // printing the rows that contain illegal
  27. while(!feof(m_file))
  28. {
  29. fgets(line,SIZE,m_file);
  30. j++;
  31. while(line[i]!='\0')
  32. {
  33. switch(line[i])
  34. {
  35. case '+':
  36. case '-':
  37. case '/':
  38. if(line[i+1]=='0')
  39. test=0;
  40. case '*':
  41. if((line[i-1]>'9' ||line[i-1]<'0')||(line[i+1]>'9'||line[i+1]<'0'))
  42. test=0;
  43. }
  44. if(!test)
  45. {
  46. fprintf(log_file,"%d%c %s",j,'.',line);
  47. test=1;
  48. break;
  49. }
  50. i++;
  51. }
  52. i=0;
  53. }
  54. fclose(log_file);
  55. fclose(m_file);
  56. return 0;
  57.  
  58.  
  59.  
  60.  
  61. ///////////////////////////////////////////
  62. //testing the row from illegal actions///////
  63. //////////////////////////////////////////
  64. while(ch!=EOF)
  65. {
  66. fgets(line,SIZE,m_file);
  67. j++;
  68. i=0;
  69. while(line[i]!='\0')
  70. {
  71. if ((line[i]>57 || line[i]<48)&&(line[i]!='+' || line[i]!='-' || line[i]!='*'||line[i]!='/')
    )
  72. flag=0;
  73. {
  74. if ((line[i]=='+' || line[i]=='-' || line[i]=='*'||line[i]=='/')&&(line[i+1]=='+' || line[i
    +1]=='-' || line[i+1]=='*'||line[i+1]=='/'))
  75. flag=0;
  76. {
  77. if((line[i]=='+' || line[i]=='-' || line[i]=='*'||line[i]=='/')&&(line[i+1]=='='))
  78. flag=0;
  79. {
  80. if((line[i]=='/')&&(line[i+1]=='0'))
  81. flag=0;
  82. }
  83. }
  84. }
  85.  
  86. if(!flag)
  87. {
  88. while (((line[i]>47)&&(line[i]<58))&&(line[i]>47)&&(line[i]<58))
  89. {
  90. num1=line[i]*10;
  91. result1=num1+line[i+1];
  92. i++;
  93.  
  94. }
  95. if(((line[i]>47)&&(line[i]<58))&&((line[i+1]=='+') || ((line[i+1]=='-') || (line[i+1]=='*')
    ||(line[i+1]=='/'))))
  96. tav=line[i+1];
  97.  
  98. if(((line[i]=='+') || (line[i]=='-') || (line[i]=='*')||(line[i]=='/'))&&((line[i+1]>47)&&(
    line[i+1]<58)))
  99. {
  100. num2=line[i+1];
  101. if ((line[i+2]>57)&&(line[i+2]<48))
  102. result2=num2*10+line[i+2];
  103.  
  104. result=calculateOperation(result1, tav, result2);
  105. }
  106.  
  107. }
  108.  
  109. i++;
  110. }
  111.  
  112. printf("%f",result);
  113. }
  114.  
  115. }
  116.  
  117.  
  118. float calculateOperation(int a, char ch, float b)
  119. {
  120. float result;
  121.  
  122. switch (ch)
  123. {
  124. case '+':
  125. result=a+b;
  126. break;
  127. case '-':
  128. result=a-b;
  129. break;
  130. case '*':
  131. result=a*b;
  132. break;
  133. case '/':
  134. result=a/b;
  135. break;
  136. default:
  137. result=0;
  138. }
  139.  
  140.  
  141. return printf("%.2fn", result);
  142. }
  143.  

يا ريت حد من اللي عندهم خبرة يشوفلي ويصححه او يقولي وين الخطأ !!!

بارك الله فيكم سلفاً اذا قمتم بالمساعدة وان ما قمتم بالمساعدة

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#21

اخي العزيز من الممكن اعطيك كود للبرنامج لكن والله لن تستفيد

ثانيا الكود اللي انت حاطه دوخني:wacko:

لكن مو مشكلة اولا إلا السطر 29 تمام بعد ذلك

تضع اختبار للشرط -مع العلم ان القيمه test=1 -

  1. while(test)
  2. {
  3. //lineعلما ان القيمه البدائية لل i=0
  4. //الشرط
  5. if(line[i]>47 &&line[i]<58)
  6. { // إذا تحقق الشرط معناتو ان المسألة الحسابيه صحيحه
  7. //فنستمر بإختبار ما يليه
  8. }
  9. else test=0;
  10. }
  11. if(test==0); // هنا داله الطباعة في ملف المخرجات
  12. else // هنا طباعة المسأله الحسابية على الشاشه
  13.  
  14.  
  15.  

الان حاول ايجادالبقيه

وإن شاء الله اكون افدتك

تم تعديل هذه المشاركة بواسطة voo في 6 يناير 2009 في 04:34

متغيب

#22

السلام عليكم

بارك الله فيك اخي الكريم

لكن للأسف جربت وما نجحت :(

جزيت خيرا

السلام عليكم

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#23

السلام عليكم:

هذا الكود بعد التعديل ستجده يؤدي المطلوب إن شاء الله.

  1. #include <stdio.h>
  2. #define SIZE 80
  3. #define INPUT "mathExercises.txt"
  4. #define OUTPUT "mathLogFile.txt"
  5.  
  6. int calculateOperation (int, char, int);
  7.  
  8.  
  9.  
  10. int main()
  11. {
  12. FILE *m_file,*log_file;
  13. char line[SIZE];
  14. char ch,gh;
  15. int i,j=1,result=0,test=1,a,b,ok=0;
  16. m_file=fopen(INPUT,"r");
  17. log_file=fopen(OUTPUT,"w");
  18.  
  19. while(!feof(m_file))//001
  20. {
  21. fgets(line,SIZE,m_file );
  22. i=0;
  23. do//002
  24. {
  25. if(line[i]=='+'||line[i]=='-'||line[i]=='/'||line[i]=='*')
  26. if(line[i-1]<'0'||line[i+1]<'0'||line[i-1]>'9'||line[i+1]>'9'||(line[i]=='/' && line[i+1]=='0')
    )
  27. {
  28. fprintf(log_file,"%i. %s",j,line);test=0; break;
  29. }
  30. }while(line[i++]!='\0');//end 002
  31. if(test)
  32. {
  33. i=0;
  34. do //003
  35. {
  36. if(line[i]<='9'&&line[i]>='0')
  37. {
  38. result+=(int)(line[i])-48;
  39. result=result*10;
  40. }
  41. else if(line[i]=='+'||line[i]=='-'||line[i]=='/'||line[i]=='*'||line[i]=='=')
  42. {
  43. result=result/10;
  44.  
  45. //----------------------
  46. if(!ok)
  47. {a=result;ok=1;}
  48. else
  49. {
  50. a=calculateOperation(a,gh,result);
  51. }
  52. gh=line[i];
  53. if(gh=='=')
  54. {
  55.  
  56. printf("%s%in",line,a);
  57. a=0;
  58. ok=0;
  59. }
  60. //-------------------------
  61. result=0;
  62. }
  63. }while(line[i++]!='\0');//end 003
  64.  
  65.  
  66.  
  67. }
  68. test=1;
  69. j++;
  70.  
  71.  
  72.  
  73.  
  74.  
  75. } //end 001
  76.  
  77.  
  78.  
  79. fclose(m_file);fclose(log_file);
  80. getchar();
  81. return 0;
  82.  
  83. }
  84.  
  85.  
  86. int calculateOperation (int a, char ch, int b)
  87. {
  88.  
  89. switch (ch)
  90. {
  91. case '+':return (a+b);
  92. case '-':return (a-b);
  93. case '/':return (a/b);
  94. case '*':return (a*b);
  95. }
  96. }
  97.  

tvquran_6.gif

#24

السلام عليكم

بارك الله فيك اخي الكريم

اجبرتني ادرس قسم من موضوع السلاسل على شان افهم الحل :)

بارك الله فيك

الآن الى المؤشرات (قالولي انه صعب هذا الموضوع :( )

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

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

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

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

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

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