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

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

مغلق
بدأه drwatson في 30 أغسطس 2005 · 6 رد · 845 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم أخواني الكرام ممكن توضيح أين الخطأ في هذا الكود ولماذا نضع قيمه أبتدائيه أحيانا 1 أو 0 وارجو منكم شرح الكود بالتفصيل الممل حتى أفهمه جيدا يعني كل تعليمه يتم شرح عليها أذا مافيها ثقل عليكم وشكرا لكم

 
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::fixed;

#include <iomanip>
using std::setprecision;
int main ()
{
int total;
int grade;
int gradecounter;

double average;
total = 0;
gradecounter = 0;

cout <<"enter grade ,-1 to end";
cin >>grade;
while (grade != -1) {
	total=total+grade;
	gradecounter=gradecounter + 1;
	cout <<"enter grade , -1 to end";
	cin >>grade;
}
if (gradecounter != 0){
	average = static_cast <double> (total)/gradecounter;
	cout <<"class average is" <<setprecision( 2 ) <<fixed <<average <<endl;
}

else 
cout <<"no grades were entread"<<end;
return 0;

}

أيضا وماذا تعني هذه fixed يعني بصراحه بدي شرح من أول شيئ :(

#2

الخطأ هو لم تضع حرفLلدالة endl في السطر قبل الأخير

قبل return

معليش أخوي أذا كان عندي وقت أشرح لك كل نقطة

لكن fixed على كلام الدكتور اللي درسني

هي مثلا عندي الرقم 2.3255 تجعله 2.00 يعني

تصفر الرقم اللي بعد الفاصلة

وشكرااا

#3

مشكوووووووووووووووور وخطأ بسيط وقاتل متشكر وصلت المعلومه ولكن ياجماعه لماذا نعطي قيم أبتدائيه كل هذا الشيئ موضوعي صعب حتى لم يجاوب عليه سوى شخص واحد شكرا لك أخي **programme** وكثر الله من أمثالك -waf

#4

المتغيرات التى تعلن عنها يحجز لها مكان فى الذاكرة . من الممكن ان يكون برنامج آخر استخدم هذا الموقع فى الذاكرة وترك به قيمة ما.

إذا استعملت هذا المكان (عن طريق اعلانك لمتغير بدون اعطاءه قيمة ابتدائية) سوف تحصل على القيمة التى تركها البرنامج الآخر.

مثال للتوضيح

#include <iostream>

using std::cout;
using std::cin;
using std::endl;


int main()
{
	int a;
	cout << a;

	return 0;

}

فى هذا المثال تم اعلان متغير ولم تحدد له قيمة ابتدائية عند تشغيل البرنامج حصلت على النتيجة الآتية

-858993460

هذه القيمة تركها برنامج سابق استعمل هذا المكان فى الذاكرة.

عموماً لو هتستخدم المتغير على طول (فى الجمع مثلاً ) لازم تديله قيماً ابتدائية مثل التغير توتال فى مثالك

لو ما اديتوش قيمة ابتدائية هتجمع على القيمة اللى كانت موجودة فيه زمان!! مما يؤدى إلى نتائج خاطئة.

ملحوظة كان فى موضوع حديث نسبياً اسمه مخلفات الذاكرة تحدث فيه الاعضاء عن هذه المشكلة بس انا لخصتلك الحكاية .

اتمنى انك تكون فهمت.

لو كانت الرجولة بالشوارب لكان الصرصار أكثرنا رجولة.

#5

جزاك الله خير وعلى راسي ياشيخ بس سؤال بسيط أنت تفضلت وقلت أذا لم اضع قيمه أبتدائيه يأخذ غير قيمه من ذاكره طيب حد هذه لحظه كل شيئ تمام ولكن أحيانا نضيف 0 وأحيانا 1 أنا شاهدت برنامج مضاف في الاول 0 وبعدين 1 شنهووو الفرق بين الاثنين واذا عطيت تابع مثلا قيمه 10 أو 20 يعني أي رقم ماذا يحصل هل سوف يخرج ناتج الحساب خطأ

5+5=10 يعني لما أعطي قيمه يتغير ناتج أو أنه في أمر أخر أرجو توضيح هذه نقطه حتى أفهم جيدا وشكرا لك

#6

القيمة الابتدائية التى تضعها للمتغير تختلف وفقاً لظروف البرنامج.

هأديك مثالين فى المثال الاول القيمة الابتدائية صفر و المثال التانى القيمة الابتدائية 1.

#include <iostream>


using std::cout;
using std::cin;
using std::endl;

int main()
{
	int total = 0; // variable to sum numbers from 1 to 5
	for(int i = 1;i<=5;i++)
  total+=i;

	cout << total;

	return 0;

}

لو اعطينا المتغير توتال القيمة 1 بدل من صفر ده اللى هيحصل

1+1+2+3+4+5 = 16

نتيجة خاطئة .

شوف بقى المثال التانى

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
	int total = 1; // variable to sum numbers from 1 to 5
	for(int i = 1;i<=4;i++)
  total*=i;

	cout << total;

	return 0;

}

فى المثال التانى لو اعطينا المتغير توتال القيمة الابتدائية صفر ده اللى هيحصل:

0*1*2*3*4 = 0

وهى نتيجة خطأ مية فى المية.

اتمنى انك تكون فهمت لو فى حاجة تانية عايزها قول وانا تحت امرك.

لو كانت الرجولة بالشوارب لكان الصرصار أكثرنا رجولة.

#7

أخي الكريم مشكوور وأنا فهمت ولكن لماذا لانقول نضع مثلا 0 أذا كانت حالت جمع و 1 أذا كانت حالت ضرب أوقسمه هل هذه هي نقطه في وضع 0 أو 1 وشكرا لك

هذا الموضوع مغلق.

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