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

خطأ في جملة while (شرط محقق دائما)(C++)

مغلق
بدأه golden man في 4 نوفمبر 2006 · 5 رد · 853 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

إخواني أنا جديد على c++ و تظهر لي مشاكل غريبة جدا فأرجو المساعدة

في الكود التالي يتم عمل حلقة تكرارية يتم تنفيذها طالما الشرطان محققان و لكن المشكلة عندما لا يتحقق الشرط الأول تبقى الحلقة مستمرة و لا تتوقف

الكود :

#include<iostream.h>

void main()
{

	double decnum=0.4;
	double tknum=0;
	bool firstcounter=1;
	int ls=2;


	while(decnum!=tknum && decnum!=0)//  لماذا الشرط الأول محقق دائما مع أن المتغيرين يساويان 0.4 في دورة من الدورات
				{
					decnum*=ls;
					cout<<tknum;
					cout<<decnum;

					if(firstcounter==1)
					{
						tknum=decnum/2;
						firstcounter=0;
					}
					else
					{ 
						decnum=decnum-long(decnum);		
					}
					if(decnum==tknum) //و هنا لا يتحقق الشرط أبدا 
					cout<<"	  tk	   ";
				}

}

حيث يتم ضرب المتحول decnum بـ 2 و طرح القسم الصحيح منه في كل دورة و ذلك حتى يصبح مساويا للمتحول tknum و لكن المشكلة أنه حتى عندما يساويه تبقى الحلقة مستمرة

ملاحظة : إذا استبدلنا سطر الحلقة بالتالي : تتوقف الحلقة من بدايتها

while(decnum!=0.4&& decnum!=0)
#2

أنت تراهم متساويين و لكن الكمبايلر له رأي آخر لأنه لا يراهم متساوين

4.0 لا تساوي 4.000000000000001

ان كنت فهمت قصدي ...

#3

جزاك الله خيرا على مشاركتك

و لكني لا أظن أنك جربت البرنامج لأن البرنامج يعرض قيم كل من المتغيرين و يوجد دورة يصبح كلا المتغيرين بنفس القيمة (0.4) مع ملاحظة أن المتغيرين من نفس النوع أي لهما نفس المجال و لتأكيد كلامي فقد عدلت البرنامج لتصبح إظهاراته بشكل أفضل للتنقيح

#include<iostream.h>

void main()
{

	double decnum=0.4;
	double tknum=0;
	bool firstcounter=1;
	int ls=2;


	while(decnum!=tknum && decnum!=0)
				{
					decnum*=ls;
					cout<<"tknum = "<<tknum<<endl;
					cout<<"decnum = "<<decnum<<endl;

					if(firstcounter==1)
					{
						tknum=decnum/ls;
						firstcounter=0;
					}

					decnum=decnum-long(decnum);		

					if(decnum==tknum) 
					cout<<"	  tk	   ";
				}

}

وهذه صورة للخرج

post-64751-1162630112_thumb.jpg

#4

كلام الاخ يوسف صحيح,

بس انا مالي عارف لش كل كمبايلر بطلع اجوبه مختلفه عن الاخر

ENG. IMAD, Programing is a way of life, It's in the air, we breath It's pumps through our veines, Without it, we soon crumble to dust

#5

يا شباب بما أنكم عرفتو شو المشكلة اقترحو الحل و أنا ما بظن أنو السي بتوقف عند هيك مشكلة بسيط

و كمان كيف الكمبايلر بيفهم القيمة شي و بيطبع شي تاني يعني معقول يطبع 0.4 و يفهم 0.40000001

#6

golden man

حاول انك تعطي المتغيرات نقس ال type

يعني لا تضع int مع double

و لا تضع long مع double

اجعل المتغيرات من نوع واحد و شوف النتيجه

لو استخدمت doube غير ال 2 الى 2.0

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

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