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

أين الخطأ في هذا الكود

بدأه yahya91 في 19 فبراير 2010 · 8 رد · 996 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم إخواني في المنتدى

أرغب أن تساعدوني في كشف الخطأ في هذا الكود فقد حاولت فيه عدة مرات و مع ذلك يظهر معي الناتج خطأ و هو برنامج يطلب من المستخدم إدخال عددين صحيحين و في حال كان الثاني صفر يسمح للمستخدم إدخال الأرقام من جديد و لمرة أخرى فقط و ينتهي البرنامج عندما يدخل المستخدم حرف q

و هذا الكود :

#include<iostream.h>
void main()
{
	int i,a,b;float r ;
	for(i=1;i<=2;i++) 
	{cout<<"enter 2 numbers"<<endl ;
	cin>>a>>b;
	if(b=!0)
	{

	break;
	}
	else if(b==0)
	{
		cout<<"error.enter another 2 numbers "<<endl ; 
		continue ; 
	}
	else if((a=='q')||(b=='q'))
		break ;
	}
	r=a/b;
	cout<<"result="<<r<<endl ;
}
#2

السلام عليكم

اتفضل اخي هذا الحل بس بلغة السي ان شاء الله يساعدك

#include<stdio.h>
main()
{
        int a,b;
        float r;
        int i;
        for(i=0;i<=2;i++)
        {
         printf("enter 2 numbers\n");
         scanf("%d %d",&a,&b);
         if(b=='0') 
         { continue; }
         else if(b!=0){ break;} 
         else if((a=='q') || (b=='q'))
         { break; }

}
printf("result=%d",a/b);
}

تم تعديل هذه المشاركة بواسطة حازم مفيد في 19 فبراير 2010 في 19:10

tvquran_7.gif

Secur1ty-Area

#3

شكراً جزيلاً إخي حازم مفيد

شكراً جزيلاً لك و بارك الله فيك

لقد فهمت ما كتبتَ بلغة السي رغم أني أتعلم الآن لغة السي بلس بلس و لكن ذلك بسبب التشابه الكبير بينهما و لكن ما لم أفهمه من السطور البرمجية هو هذا السطر

scanf("%d %d",&a,&b);

والأمر الآخر

لم أعرف ما الخطأ في حلي فخطواتي و خطواتك متشابهة و لكن لم تظهر لي النتيجة الصحيحة بالرغم أني وضعت ثلاث احتمالات الأول في حال b كانت 0 و ضعت عندهاا continue

و عندما b لا يساوي الصفر break و عندما يدخل المستخدم q وضعت break فما الخطأ لدي

#4

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

scanf("%d %d",&a,&b);

السطر السابق يقابله السطر التالي في لغة السي++ :

cin>>a>>b;

لأن الدالة scanf يقابلها الكائن cin في لغة السي++ وبالنسبة للعلامتين %d فهما للدلالة على أن العددين a وb من النوع int و فائدة العلامة & هي تخزين قيمة العدد المقابل لها في عنوانه ,لاحظ أن عدد %d يساوي عدد & .

حل التمرين الذي طلبته :


using namespace std;
int main()
{
float a,b;
char choix;
debut:
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
if(b==0)
{
cout<<"erreur !\a operation incorrect."<<endl;
goto debut;
}
else
{
cout<<a<<"/"<<b<<"="<<a/b;
do
{
cout<<endl<<"vous voulez quitter le programme ? (O/N):";
cin>>choix;
}while(choix!='o' && choix!='O' && choix!='n' && choix!='N');
if(choix=='n' || choix=='N')
goto debut;
if(choix=='o' || choix=='O')
system("exit");
}
return 0;
}



#include<iostream>

o اختصار لـ oui أي نعم و n اختصار لـ non أي لا.

إذا رغبت في تعلم لغة السي و السي++ معا فبإمكانك الإلتحاق بالدورة الموجودة في هذا القسم.

تحياتي العطرة

أخوك المتألق elmoute2eli9

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 19 فبراير 2010 في 20:37

#5

شكر جزيلاً لك أخي أحمد بالفعل حلّك صحيح 100% و فهمته و لكن هل يمكنك أن تفهمني عمل الترميزة

debut:

لأنا لم نأخذها بعد في الجامعة و الأمر الآخر هل يمكنك أن توضح لي ما الخطأ في كتابتي في هذا الجزء فقط

for(i=1;i<=2;i++) 
        {cout<<"enter 2 numbers"<<endl ;
        cin>>a>>b;
        if(b=!0)
        {
         r=a/b;
        cout<<"result="<<r<<endl ;
        break;
        }
        else if(b==0)
        {
                cout<<"error.enter another 2 numbers "<<endl ; 
                continue ; 
        }

أعلم أني قد أكثرت عليك الطلبات و لكن أريد الاستزادة من علمك

تم تعديل هذه المشاركة بواسطة yahya91 في 19 فبراير 2010 في 21:03

#6

عذراً أخي لقد اكتشفت أخي خطأي فلقد أوردت في حلي الترميز التالي:

if(b=!

و الصحيح

if(b!=0)

و أما بالنسبة للخروج عن طباعة q يكون باستخدام while

و هذا هو الكود بشكل صحيح إن شاء الله :

#include<iostream.h>
void main()
{
        int i,a,b;float r ;char e ; 
        for(i=1;i<=2;i++) 
        {cout<<"enter 2 numbers"<<endl ;
        cin>>a>>b;
        if(b!=0)
        {

        break;
        }
        else if(b==0)
        {
                cout<<"error.enter another 2 numbers "<<endl ; 
                continue ; 
        }
        else if((a=='q')||(b=='q'))
                break ;
        }
        r=a/b;
        cout<<"result="<<r<<endl ;
cout<<"do you want to exit?(q)"<<endl ; 
cin>>e;
while(e=='q')
break;
}

تم تعديل هذه المشاركة بواسطة yahya91 في 19 فبراير 2010 في 21:18

#7

اقتباس
هل يمكنك أن تفهمني عمل الترميزة

debut:

لأنا لم نأخذها بعد في الجامعة

الكلمة المحجوزة goto تُستخدم للتنقل من مكان إلى آخر في مصدر البرنامج (الكود).

طريقة استعمال الجملة goto:

نكتب اسم المكان الذي نريد الانتقال إليه, هكذا:

the_name_of_place:

و إذا أردنا الانتقال إلى المكان الذي حددناه سابقا نكتب:

goto the_name_of_place;

تم تعديل هذه المشاركة بواسطة أحمد المتألق في 19 فبراير 2010 في 23:53

#8

السلام عليكم

اخي، لماذا استخدمت for من 1 الى 2 ؟ ليس لها مكان في الحل!!

الحل هو بحلقة while لا نهائية - تنتهي فقط عندما يدخل المستخدم الحرف q,

اذا ادخل المستخدم في الرقم المقسوم عليه 0 تعاد الكره لإدخال مقسوم عليه جديد:

#include<iostream>
using namespace std;

int main()
{
	int a,b;
	char choice;
	while(1)
	{
		cout<<"Enter first number"<<endl;
		cin>>a;
		cout<<"Enter secund number"<<endl;
		cin>>b;
		if(b!=0)
		cout<<a<<"/"<<b<<"= "<<(double)a/b<<endl;
		else{
			cout<<"error Devide by zero!"<<endl;
			continue;}

		cout<<"Enter letter : Q -quit , any other letter to continue"<<endl;
	cin>>choice;
	if(choice == 'Q' ||choice == 'q')
	break;
	}




return 0;

}

#9

أساسا ما ينفعش تقول

int a,b;
if (a=='q')||(b=='q')

لأنهما متغيران من نوع int .. هاتقارنهم إزاي ب char

قبل ما تسأل جرب تجوجل!!!

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