اذهب إلى المحتوى

السؤال

Recommended Posts

  • -1
نشر (معدل)

الخطأ في التصريح عن المتغير x داخل الدوران وأيضا من النوع int

الحل هو التصريح عن المتغير x خارج الدوران ومن النوع long

// long long x=0; //32bit
long x=0; // 64bit
for(int I=1; I>0; I++){
  x+=I;
}

 

تم التعديل في بواسطة Hamada Sayed
  • 1
نشر
بتاريخ 7 ساعات قال Nadia الجهني:

مانوع الخطا هنا مع التصحيح

(++for (int I=1; I > 0, I

{

;int x=0;

     ;x+=I

}

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

التصريح عن المتغير x خارج الدوران

مع العلم ان الفيضان سيحدث للمتغير x اكثر من مره

int x=0;
for(int I=1; i>0; i++){
  x+=1;
}

 

  • 1
نشر
بتاريخ 48 دقائق مضت قال Nadia الجهني:

هل يعني ان الخطا منطقي ولا يجب ان نضع الصفر لانه سا يتكرر الى مالانهايه ؟

وشكرا لك على ردك 

هل يعني ان الخطا منطقي ولا يجب ان نضع الصفر لانه سا يتكرر الى مالانهايه ؟

وشكرا لك على ردك 

السلام عليكم @Nadia الجهني

 

يوجد خطا بما ذكره hamada 

لا يوجد خطا في تعريف المتغير x داخل ال for loop بالعكس هذا افضل اجراء يجب ان يتم تعريف المتغير الى جنب الوظيفة التي يؤديها ,اي داخل اللووب لان اللووب بسيط ولا يقوم باي عمليات حسابية معقدة ليحدث فيضان او overflow ,لكن متى يحدث فيضان او خطا هو عند اسناد قيمة لمتغير داخل اللووب اي مثلا اعطاء قيمة لمتغير x من متغير اخر  هذا يسمى اسناد وخطأ ان يتم داخل اللووب  بينما في المثال الخاص بك  لا يوجد اسناد قيمة لمتغير x فقط عرفنا المتغير بقيمة افتراضية وهي 0 اي مستحيل ان يحدث فيضان او Over Flow 

 

اتمنى ان تكون قد وصلت المعلومة :) 

 

تحياتي

شكرا لكم

  • 0
نشر (معدل)
بتاريخ 54 دقائق مضت قال Nadia الجهني:

مانوع الخطا هنا مع التصحيح

(++for (int I=1; I > 0, I

{

;int x=0;

     ;x+=I

}

اهلا بك الخطا بسيط هو بدل (,) يجب استخدام (;) 

هنا 
 

for (int I=1; I > 0; I++)

بعد الصفر  والتصحيح هكذا 

for (int I=1; I > 0; I++)

{

int x=0;

     x+=I;

}

تحياتي

تم التعديل في بواسطة Mohamd Imran
  • 0
نشر

هل يعني ان الخطا منطقي ولا يجب ان نضع الصفر لانه سا يتكرر الى مالانهايه ؟

وشكرا لك على ردك 

بتاريخ 18 دقائق مضت قال Hamada Sayed:

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

التصريح عن المتغير x خارج الدوران

مع العلم ان الفيضان سيحدث للمتغير x اكثر من مره


int x=0;
for(int I=1; i>0; i++){
  x+=1;
}

 

هل يعني ان الخطا منطقي ولا يجب ان نضع الصفر لانه سا يتكرر الى مالانهايه ؟

وشكرا لك على ردك 

  • 0
نشر

الهدف من الدوران هو الحصول علي مجموع الارقام من 1 إلي 0x7fffffff

وللحصول علي مجموع الارقام يجب التصريح عن المتغير x خارج الfor والنوع int لا يكفي لتخزين مجموع الارقام من 1 إلي 0x7fffffff فيجب التصريح عن المتغير x من النوع long 

  • 0
نشر
بتاريخ 14 دقائق مضت قال Hamada Sayed:

الهدف من الدوران هو الحصول علي مجموع الارقام من 1 إلي 0x7fffffff

وللحصول علي مجموع الارقام يجب التصريح عن المتغير x خارج الfor والنوع int لا يكفي لتخزين مجموع الارقام من 1 إلي 0x7fffffff فيجب التصريح عن المتغير x من النوع long 

لكن اللووب نتيجته غير الذي ذكرته ,لاحظ اللووب

for (int I=1; I > 0; I++)

اللووب لن يصل الى الى صفر  يوجد 

I++

وايضا

I > 0

اي انه لن يصل الى الصفر ويتم طباعة النتيجة الاكبر من صفر 

وبالنسبة لتعريف المتغير

long

فهو خطا لان I من نوع int لاحظ اللووب 

  ويتم طباعة القيمة هكذا 

x+=I;

تحياتي

 

  • 0
نشر
بتاريخ 3 دقائق مضت قال Mohamd Imran:

اي انه لن يصل الى الصفر ويتم طباعة النتيجة الاكبر من صفر 

متغير الindex في الfor من النوع int وليس unsigned int وبالتالي فالرقم 0x80000000 أصغر من صفر وسيتم انهاء عمل الدوران بعد الوصول لهذا الرقم وجمع كل الارقام التي سبقته في متغير x والنوع long يقبل جمع النوع int

والسبب هو ان int حجمه 4byte وlong حجمه 8byte

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...