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

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات الهندسة العكسية - Reverse Engineering Forums (https://www.at4re.net/f/forum-4.html)
+--- قسم : الأسئلة والإستفسارات، حلول المشاكل و تبادل الخبرات - Expert Exchange Newbie Questions Answers (https://www.at4re.net/f/forum-36.html)
+--- الموضوع : برمجة آلة حاسبة متكاملة بلغة c (/thread-3347.html)



برمجة آلة حاسبة متكاملة بلغة c - anti man - 30-09-2022

السلام عليكم ورحمة الله وبركاته
انا عضو جديد في المنتدى 
ارجو منكم مساعدتي في صناعة برنامج بلغة 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;
}
 
 



RE: برمجة آلة حاسبة متكاملة بلغة c - siddigss - 08-10-2022

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

بعض الاقتراحات:
أولا، حاول كتابة آلة حاسبة بدون أقواس وبدون أسس. بعد ذلك حاول التعميم إلى حالة الأسس ومن ثم الأقواس (مثلا باستخدام ال 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 تبدو غريبة، ما الشرط الذي أردته؟