الفريق العربي للهندسة العكسية

نسخة كاملة : برمجة آلة حاسبة متكاملة بلغة c
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته
انا عضو جديد في المنتدى 
ارجو منكم مساعدتي في صناعة برنامج بلغة c يحاكي الآلة الحاسبة التي تباع في المتاجر مع بعض الإضافات الخاصة بي 
هذه محاولي ارجو مساعدتي في النقطة التي سأشير لكم فيها في المحاولة  
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
int sconvert(int h)
 
{if (h==48)
 return 0;
if(h==49);
 return 1;
if(h==49)
 return 1;
 if(h==50)
 return 2;
  if(h==51)
 return 3;
  if(h==52)
 return 4;
  if(h==53)
 return 5;
  if(h==54)
 return 6;
  if(h==55)
 return 7;
  if(h==56)
 return 8;
 
  if(h==57)
 return 9;
  if(h==40)
 return 101;//(
  if(h==41)
 return 102;//)
  if(h==42)
 return 103;//*
  if(h==47)
 return 104;// /
  if(h==43)
 return 105;// +
  if(h==45)
 return 106;// -
  if(h==94)
 return 107;// ^
  if(h==120)
 return 108;// x
  return 10;
 }
int main()
{
 int num[21]={0},i=0,h,t;//num عبارة عن مصفوفة تحمل كل العمليات الحسابية على شكل أرقام والاعداد بالترتيب  
 printf("please dont make mistake ..prese enter for result .. thanks\n");
 for (i=0;i<251;i++)
 {h = getche(); // h عبارة عن وسيط لا أكثر 
  if (h==10)/وتبدأ المعالجة/ عند الانتهاء ينفر enter  
  break;
  num[i]=sconvert(h);
  //محاولتي ارجو تصحيحها
  i=0;
if (num[i]==101/*(*/&& num[i+1]==106/*-*/&& num[i+2]<10&&num[i+3]<10&&num[i+4]==103/* * */&&num[i+5]<10&&num[i+6]==102)
printf("%d",(-(num[i+2]*10+num[i+3])*num[i+5]));
}
  
 return 9;
}
 
 
وعليكم السلام ورحمة الله وبركاته أخي، أهلا بك في المنتدى.

بعض الاقتراحات:
أولا، حاول كتابة آلة حاسبة بدون أقواس وبدون أسس. بعد ذلك حاول التعميم إلى حالة الأسس ومن ثم الأقواس (مثلا باستخدام ال recursion).
ثانيا، الدالة sconvert يمكنك كتابتها كالتالي
int sconvert(char c)
{
    // إذا كان عددا
    if (c >= 48 && c <= 57) {
        return (int)c - 48;
    }

    if (c == 40)
        return 101;// (
    if (c == 41)
        return 102;// )
    if (c == 42)
        return 103;// *
    if (c == 47)
        return 104;// /
    if (c == 43)
        return 105;// +
    if (c == 45)
        return 106;// -
    if (c == 94)
        return 107;// ^
    if (c == 120)
        return 108;// x
    return 10;
}

ثالثا، آخر عبارة if في بداخل دالة ال main تبدو غريبة، ما الشرط الذي أردته؟