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

استفسار عن برنامج الحاسبة

بدأه faisal-alsubaie في 19 مايو 2012 · 11 رد · 747 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

#include<stdio.h>
int main()
{
	int num1, num2;
	char Char;
	printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: ");
	scanf("%c", &Char);

	printf("Enter the first number: ");
	scanf ("%d", &num1);

	printf("Enter the second number: ");
	scanf("%d", &num2);

	if(Char == '+' || Char == '1')
	printf("%d + %d = %d\n", num1, num2, num1+num2);

	else if(Char == '-' || Char == '2')
	printf("%d - %d = %d\n", num1, num2, num1-num2);

	else if(Char == '/' || Char == '3')
	printf("%d / %d = %d\n", num1, num2, num1/num2);

	else if(Char == '*' || Char == '4')
	printf("%d * %d = %d\n", num1, num2, num1*num2);

	else
	printf("Error in choice!\nExiting...\n");

	return 0;
}

بس فية مشكلة انة اذا دخلة رقم العملية من 5 الى 9 يستمر في عمل الخطوات و من ثم يظهر خطاء

و المشكلة الثانية انة اذا ادخل رقم العملية اكبر من 9 مثلا 13 يعتبر البرنامج اني مدخل رقمين الرقم الاول هو رقم العملية و الرقم الثاني رقم المدخل الاولى ومن ثم يطلب مني ادخال الرقم الثاني

ولكم جزيل الشكر

#2

بالنسبة للمشكلة الأولى, يمكنك كتابة دالة للتحقق من صحة المحرف :

bool IsOperator(char C) {
	 return (C == '+' || C == '-' || C == '*' || C == '/' || C == '1' || C == '2' || C == '3' || C == '4' );
}

و يكون استدعاء IsOperator في الــ main هكذا :

if(!IsOperator(Char)) { // IsOperator(Char) == 0
		  printf("Error in choice!\nExiting...\n");
		  return 0;
}

المشكلة الثانية يمكنك معالجتها عن طريق الدالة isalpha الموجودة في ctype.h.

بالتوفيق.

#3

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

وين اخط هل الداله

وشكرا لكم

#4

ألا تعتقد أنه من الأفضل استعمال switch لتفادي تكرار ال if-else

#include<stdio.h>
#define  error1 default: puts("error");break;

int main(void)
{
    	int num1=0, num2=0; char Char=0;

    	printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%c", &Char);
    	printf("Enter the first number: "); scanf ("%d", &num1);
    	printf("Enter the second number: "); scanf("%d", &num2);

    	switch(Char)

    	{
            	case '1':case '+': printf("%d + %d = %ld\n", num1, num2, (long)num1+num2);break;
            	case '2':case '-': printf("%d - %d = %d\n", num1, num2, num1-num2);break;
            	case '3':case '/': printf("%d / %d = %.3f\n", num1, num2, (float)num1/num2);break;
            	case '4':case '*': printf("%d * %d = %ld\n", num1, num2, (long)num1*num2);break;
            	error1;
    	}

    	return 0;
}

وفقك الله

تم تعديل هذه المشاركة بواسطة مومو (momo) في 20 مايو 2012 في 14:50

i love you mama

#5
مومو (momo) كتب:

ألا تعتقد أنه من الأفضل استعمال switch لتفادي تكرار ال if-else

#include<stdio.h>
#define  error1 default: puts("error");break;

int main(void)
{
    	int num1=0, num2=0; char Char=0;

    	printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%c", &Char);
    	printf("Enter the first number: "); scanf ("%d", &num1);
    	printf("Enter the second number: "); scanf("%d", &num2);

    	switch(Char)

    	{
   		case '1':case '+': printf("%d + %d = %ld\n", num1, num2, (long)num1+num2);break;
   		case '2':case '-': printf("%d - %d = %d\n", num1, num2, num1-num2);break;
   		case '3':case '/': printf("%d / %d = %.3f\n", num1, num2, (float)num1/num2);break;
   		case '4':case '*': printf("%d * %d = %ld\n", num1, num2, (long)num1*num2);break;
   		error1;
    	}

    	return 0;
}

وفقك الله

يعطيك العافية اخوي بس ما زالت المشكلة موجودة :sad:

#6
#include<stdio.h>
int main()
{
    int num1, num2;
    char Char;
    printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: ");
    scanf("%c", &Char);

    if (Char < '1' || Char > '4')
    {
        printf("Error in choice!\nExiting...\n");
        return 1;
    }

    printf("Enter the first number: ");
    scanf ("%d", &num1);

    printf("Enter the second number: ");
    scanf("%d", &num2);

    if(Char == '+' || Char == '1')
        printf("%d + %d = %d\n", num1, num2, num1+num2);

    else if(Char == '-' || Char == '2')
        printf("%d - %d = %d\n", num1, num2, num1-num2);

    else if(Char == '/' || Char == '3')
        printf("%d / %d = %d\n", num1, num2, num1/num2);

    else
        printf("%d * %d = %d\n", num1, num2, num1*num2);

    return 0;
}

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#7
v → s كتب:

#include<stdio.h>
int main()
{
    int num1, num2;
    char Char;
    printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: ");
    scanf("%c", &Char);

    if (Char < '1' || Char > '4')
    {
        printf("Error in choice!\nExiting...\n");
        return 1;
    }

    printf("Enter the first number: ");
    scanf ("%d", &num1);

    printf("Enter the second number: ");
    scanf("%d", &num2);

    if(Char == '+' || Char == '1')
        printf("%d + %d = %d\n", num1, num2, num1+num2);

    else if(Char == '-' || Char == '2')
        printf("%d - %d = %d\n", num1, num2, num1-num2);

    else if(Char == '/' || Char == '3')
        printf("%d / %d = %d\n", num1, num2, num1/num2);

    else
        printf("%d * %d = %d\n", num1, num2, num1*num2);

    return 0;
}

و الله ولي التوفيق

1337517858982.jpg

i love you mama

#8

faisal-alsubaie كتب:

يعطيك العافية اخوي بس ما زالت المشكلة موجودة :sad:

المشكلة أنننا وقعنا كلنا في نفس الخطأ

لكن الحمد لله تداركنا الأمر

الكود بعد التعديل


#include<stdlib.h>
#include<string.h>
#define x {puts("error"); exit(1);}
#define MAX 1000


int main(void)
{


int num1=0,num2=0,TRUE=0,n=0; char Char[MAX]={0},*t="+-*/1234",z=0;

printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%s",Char);

n=strlen(Char); z=Char[0];

for(;*t;t++)

{
if(z== (*t)) {TRUE=0 ; break;}
else TRUE=1;
}

if(TRUE==1||n>1) x


printf("Enter the first number: "); scanf ("%d", &num1);
printf("Enter the second number: "); scanf("%d", &num2);

switch(z)

{
case '1':case '+': printf("%d + %d = %ld\n", num1, num2, (long)num1+num2); break;
case '2':case '-': printf("%d - %d = %d\n", num1, num2, num1-num2); break;
case '3':case '/': printf("%d / %d = %.3f\n", num1, num2, (float)num1/num2); break;
case '4':case '*': printf("%d * %d = %ld\n", num1, num2, (long)num1*num2); break;
}

return 0;
}
#include<stdio.h>

المخرجات

1337517858801.jpg

faisal-alsubaie كتب:

بس فية مشكلة انة اذا دخلة رقم العملية من 5 الى 9 يستمر في عمل الخطوات و من ثم يظهر خطاء

طبعا سيستمر في عمل الخطوات لأنك و ضعت ال if-else بعد خطوة إدخال العددين !!!

faisal-alsubaie كتب:

و المشكلة الثانية انة اذا ادخل رقم العملية اكبر من 9 مثلا 13 يعتبر البرنامج اني مدخل رقمين الرقم الاول هو رقم العملية و الرقم الثاني رقم المدخل الاولى ومن ثم يطلب مني ادخال الرقم الثاني

هنا وقعت في خطأ إدخال حرفين عوض حرف واحد

scanf("%c",&Char);

لاحظ جيدا الخطأ الذي وقعت فيه قمت بإدخال حرفين كقيمة ل char في حين أن char لا تقبل إلا حرفا واحدا وفقط كقيمة في هذه الحالة "%c"

بالتوفيق

تم تعديل هذه المشاركة بواسطة مومو (momo) في 21 مايو 2012 في 14:46

i love you mama

#9

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

وشكرا لاني القى منكم اهتمام لسؤال واحد مبتدى مثلي شكرا :happy:

#10

معليش اثقلت عليكم بس لو ابي اخلي البرنامج يقبل اعداد حقيقية و صحيحة

#11

قم بتحويل int إلى float و %d إلى %f

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

بالتوفيق.

1
#12
faisal-alsubaie كتب:

معليش اثقلت عليكم بس لو ابي اخلي البرنامج يقبل اعداد حقيقية و صحيحة

الكود بعد التعديل

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define x  {puts("error"); exit(1);}
#define MAX 1000


int main(void)
{


            	int TRUE=0,n=0; char Char[MAX]={0},*t="+-*/1234",z=0; float num1=0,num2=0;

            	printf("1:(+)\n2:(-)\n3:(/)\n4:(*)\nEnter a choice: "); scanf("%s",Char);

            	n=strlen(Char);   z=Char[0];

    	for(;*t;)

            	{
            	if(z== (*t++)) {TRUE=0 ; break;}
            	else TRUE=1;
            	}

    	if(TRUE==1||n>1) x


                    	printf("Enter the first number: "); scanf ("%f", &num1);
                    	printf("Enter the second number: "); scanf("%f", &num2);

            	switch(z)

            	{
                    	case '1':case '+': printf("%f + %f = %.3lf\n", num1, num2, (double)num1+num2); break;
                    	case '2':case '-': printf("%f - %f = %.3f\n", num1, num2, num1-num2);  break;
                    	case '3':case '/': if(num2==0) x  else  printf("%f / %f = %.3f\n", num1, num2, num1/num2);  break;
                    	case '4':case '*': printf("%f * %f = %.3lf\n", num1, num2, (double)num1*num2);  break;
            	}

            	return 0;
}

دعواتك لي بالشفاء و لجميع مرضى المسلمين

تم تعديل هذه المشاركة بواسطة مومو (momo) في 22 مايو 2012 في 18:10

i love you mama

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