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

سؤال عن المؤثرات الحسابية (مؤثر الزيادة)

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

السلام عليكم

انا استخدمت مؤثر الزيادة واعرف انة يزود رقم واحد عن الذي يلية وكتبت برنامج يطلب من المستخدم رقم ويزيدة عشر مرات ولكن ظهر لي نتائج انا اشوفها غير منطقية وهذا الكود المستخدم

#include <stdio.h>

int main()
{
	int inc;
	printf("enter your inc:");
	scanf("%d",&inc);
	printf("0-inc=%d\n",inc++);
	printf("1-inc=%d\n",inc++);
	printf("2-inc=%d\n",++inc);
	printf("3-inc=%d\n",++inc);
	printf("4-inc=%d\n",inc++);
	printf("5-inc=%d\n",inc++);
	printf("6-inc=%d\n",++inc);
	printf("7-inc=%d\n",inc++);
	printf("8-inc=%d\n",++inc);
	printf("9-inc=%d\n",inc++);
	return 0;
}

و الناتج

enter your inc:0
0-inc=0
1-inc=1
2-inc=3
3-inc=4
4-inc=4
5-inc=5
6-inc=7
7-inc=7
8-inc=9
9-inc=9

ما هي الطريقة المثلى لمثر الزيادة و ما الخطا الذي وقعت فية ؟

تم تعديل هذه المشاركة بواسطة faisal-alsubaie في 18 مايو 2012 في 10:11

#2

أعتقد أنّ النتيجة التي عرضها الكود منطقيّة ( معرفتي ب ++C سطحيّة ) ... على كل أعتقد أني فهمت قصدك و عليه سأشرح :

هناك فرق بين X++ و ++X ( يمكنك استبدال X بالحرف أو الجملة المحببة laugh.gif ) ...

سأقوم بالشرح على نصك البرمجي :

printf("0-inc=%d\n",inc++);
printf("1-inc=%d\n",inc++);

في السطر الأول ( حيث وضعت إشارتي الجمع بعد المتغيّر ) سيتم تمرير قيمة inc الأصلية التي أدخلتها إلى printf و من ثمّ سيتم الإضافة على قيمة inc بمقدار 1..

حيث أنّه سيقوم بعرض النتيجة الأولى ( وهي 0 كونه تمر تمرير قيمة inc قبل الزيادة إلى print f ) و بعدها سيتم إسناد القيمة 1 إلى inc .

نفس الموضوع يحصل في السطر الثاني حيث أن قيمة inc أصبحت هنا = 1, يتم تمرير القيمة ل printf قبل الزيادة و من ثم يتم القيام بعمليّة الزيادة لتصبح قيمة inc تساوي 2 ...

printf("2-inc=%d\n",++inc);
printf("3-inc=%d\n",++inc);

في السطرين التالي ( حيث وضعت إشارتي الجمع قبل المتغيّر ) سيتم تمرير قيمة inc ( و هي 2 هنا ) و زيادتها بمقدار 1 و ثمّ تمريرها إلى printf , و كذلك يحصل في السطر الذي بعده له ...

النتيجة :

- الحاسوب جهاز ينفّذ ما تأمره به لا ما تتوقعه منه , في حال حصول شيء برأيك أنّه خاطئ, فاحتمال أن يكون الخطأ خطأك كبير جدّاً ... في حالتك فالحاسوب قام بما طلبته منه تماماً ..

- الانتباه إلى الأمور الصغيرة مفيد دائماً

الطريقة المثلى البسيطة لعمل الزيادة هي عن طريق حلقة if بسيطة ( ستوفّر 7 أسطر على الأقل ).. أترك لك حريّة التجريب و التعلّم ...

تحياتي

تم تعديل هذه المشاركة بواسطة عبد العـزيز في 18 مايو 2012 في 10:52

? Which came first : The Stupid Question or The Incomprehensible Answer

some people just want to watch the world burn

#3

يعطيك العافية عبد العزيز وشكر على توضيح مكان الاشاره انا كنت اعتقد انة ما تفرق بس طلع العكس :)

#4

أهلا أخ فيصل ...

رُبَّ ضارة نافعة ... أخطاء صغيرة كهذه تتيح لك أن تصبح مبرمجاً أفضل ... في حال لم تخطئ فأنت بالتأكيد لا تحاول أنّ تتعلّم happy.gif ...

أتمنّى لك التوفيق

? Which came first : The Stupid Question or The Incomprehensible Answer

some people just want to watch the world burn

#5

صحيح :happy:

#6
faisal-alsubaie كتب:

السلام عليكم

انا استخدمت مؤثر الزيادة واعرف انة يزود رقم واحد عن الذي يلية وكتبت برنامج يطلب من المستخدم رقم ويزيدة عشر مرات ولكن ظهر لي نتائج انا اشوفها غير منطقية وهذا الكود المستخدم

#include <stdio.h>

int main()
{
	int inc;
	printf("enter your inc:");
	scanf("%d",&inc);
	printf("0-inc=%d\n",inc++);
	printf("1-inc=%d\n",inc++);
	printf("2-inc=%d\n",++inc);
	printf("3-inc=%d\n",++inc);
	printf("4-inc=%d\n",inc++);
	printf("5-inc=%d\n",inc++);
	printf("6-inc=%d\n",++inc);
	printf("7-inc=%d\n",inc++);
	printf("8-inc=%d\n",++inc);
	printf("9-inc=%d\n",inc++);
	return 0;
}

و الناتج

enter your inc:0
0-inc=0
1-inc=1
2-inc=3
3-inc=4
4-inc=4
5-inc=5
6-inc=7
7-inc=7
8-inc=9
9-inc=9

ما هي الطريقة المثلى لمثر الزيادة و ما الخطا الذي وقعت فية ؟

بإمكانك تفادي كل هذا التكرار بعمل دوارة

#include <stdio.h>

int main()
{
    	int inc=0 , i=0;
    	printf("enter your inc:");
    	scanf("%d",&inc);
    	for(; i<10;i++)
    	printf("%d-inc=%d\n",i,inc+i);
    	return 0;
}

ونسأل الله لنا و لك التوفيق

i love you mama

#7

يعطيك العافية مومو ما قصرت

بس بيت اعدل علاشان تجي مثل ما ابي :happy:

#include <stdio.h>

int main()
{
	int inc=0, i=0, c=1;
	printf("enter your inc: ");
	scanf("%d" , &inc);
	for(; i<10;i++)
	printf("%d""-inc=%d\n",c++,inc++);
	return 0;
}

تم تعديل هذه المشاركة بواسطة faisal-alsubaie في 18 مايو 2012 في 22:25

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