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

بعض التحويرات في الحلقة for

مغلق
بدأه - a l t - في 1 مايو 2005 · 20 رد · 2,902 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

أحببت أن اشارك معكم في هذا الصرح بهذه المعلومة المتواضعه ،

وهي عن جملة ال for ، فهي تسمح بعدة تحويرات منها

1 - استخدام عدة متغيرات للتحكم بالحلقة

w6w_w6w_20050501222239bb9caf96.jpg

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

ويبدوا انه كلما زاد هذا العدد زادت حلقة الـ for صعوبة.

2- الأجزاء الناقصة

من الممكن ترك بعض أجزاء تعريف الحلقة فارغ

سواء كان جزء البداية أو الشرط أو التكرار

في المثال التالي جعلنا التكرار داخل الحلقة

w6w_w6w_200505012225510ceebb9d.jpg

ومن الممكن أيضا جعل بداية التكرار خارج حلقة for

ولا كن لا ننسى أن الفاصلة المنقوطة شيء أساسي في الحلقة سواء كانت أجزائها فارغة أو غيره

w6w_w6w_20050501222710d7a3bcb2.jpg

ما رأيكم بتجربة بسيط جداً .... وهي أن تجعل حلقة الفور جميعها فارغة

( ; ; ) for

:)

11_03_06_12_48_57_1142110137Image(_66).jpg

#2

شي حلو شكراً لك و لكن هل جربت أنت الحلقة الفارغة

الحياة كلها وقفة عز فقط

------------------------------------------

المجتمع معرفة و المعرفة قوة

#3

بصراحة أول مرة أعرف عن رقم 1!!!! بارك الله فيك. الآن عرفت كيف يمكنني فعل الكثير من الأشياء التي في خاطري بسهولة!!!

شرحك باستعمال الصور شيء رائع!!

استعمال الطريقة الأخيرة يؤدي إلى الدوران إلى مالا نهاية.

أقترح عليك متابعة شرح أوامر متعلقة بجملة for. مثل break و continue.

#4

اهلين اخوي هاني ، ايوه جربتها و اظن انها من افكار صناعة الفيروسات

==============================

اسعدنى تعليقك يا ابو مازن و مرورك السامي

اقتباس
أقترح عليك متابعة شرح أوامر متعلقة بجملة for. مثل break و continue.

بأخذ اقتراحك بعين الاعتبار مع اني أعتقد ان مثل

هذي الموضوعات تناسب المبتدئين امثالي

وهم يندرون في المنتدى

على كل حال سأحاول ان اقدم ما اقدر عليه ..

11_03_06_12_48_57_1142110137Image(_66).jpg

#5

شكرا حزيلا اخي العزيز و فعلا نحن بحاجة الى هكذا شروحات بسيطة و مختصرة و بالصور لكي نثري بها الارشيف ...

اذا اردت اضافة المزيد فاضيف و سوف انسقه و اضعه بالارشيف...

هههه صار شعر

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#6

يستخدم كثير من المبرمجين حلقة التكرار اللامنتهية لأن لها فوائد ولكن تنهى هذه الحلقة بسوأل شرطي معين ثم اعطاْْء الأمر بالخروج من الحلقه

int i=0;
double sum=0.0;

double ak=1.0;

for(;;)
{
  ak*=(1.0/++i);
  if(ak <0.0000001)
     break;
 else
   sum+=ak; 
 }

System.out.println(" sum ="+sum  +", i="+i);

تم تعديل هذه المشاركة بواسطة khwlani في 2 مايو 2005 في 22:54

اللهم انا نسألك علما نافعا ونعوذ بك من حماقة الجهلاء
#8

السلام عليكم

إن كل تعليمات التكرار العادية for, while ,do-while مشكلتها ان شرط التكرار اما ان يكون ببداية التكرار او بنهايته وفي بعض الاحيان نريد انهاء التكرار في وسط التعليمات المكررة لذلك يتم اللجوء الى استعمال التكرار اللامتناهي وهذا لا يعني ان المشكلة لا تحل بالتكرارات العادية

يمكن اجراء اشياء كثيرة مع التكرار فما يطبع التكرار التالي إن كان صحيحا:

	for (int i = 5, j =3 , k = 1; i >= j+k; i++, j+=3, k--);
	{
  System.out.println("i="+i+"\tj="+j+"\tk="+k);	
	}

جربه يدويا وفكر ان كان صحيحا قبل ذلك وقم بتصحيحه أن كان يصدر اخطاء

ارجو الاستفادة

بالتوفيق

#9

حياك الله اخوي العزيز رامي العيساوي

اسعدني مرورك كثيرا ، والله يوفقني لتقديم ما يكون مفيد للجميع ...

+++++++++++++++

khwlani

مشكور عزيزي على المداخلة الطيبة

++++++++++++++

حياك الله اخوي eng_ibr

مشكور على مرورك ...

11_03_06_12_48_57_1142110137Image(_66).jpg

#10

اخوي الفاضل kkhalil2005

جربت الكود يدويا كما أشترت ، وكانت النتائج :

i=5        j=3        k=1
i=6       j=6        k=0

ولما استخدمت الكود في ال JCreator أعطاني رسالة ERROR (( ما أدري شو السبب )) فصححت الخطأ بتعريف

المتغيرات التلاثة i , j , k خارج حلقة الـ for فعمل البرنامج ،

لكن أعطاني النتاتج التالية :wacko:

i = 7       j = 9      k = -1

مع انه في هذه الخطوه الشرط غير متحقق

يا ليت توضح لنا السبب ....... وتفصل في خطوات سير الكمبايل ولك جزيل الشكر

11_03_06_12_48_57_1142110137Image(_66).jpg

#11

السلام عليكم

احببت فقط التنويه إلى امرين من خلال التكرار الذي وضعته وهو

for (int i = 5, j =3 , k = 1; i >= j+k; i++, j+=3, k--);

{

System.out.println("i="+i+"\tj="+j+"\tk="+k);

}

الأمر الأول هو أن المتغيرات المعرفة داخل التكرار (في التعبير الأول التمهيدي للتكرار) تكون محلية للتكرار وتنتهي بانتهاء التكرار ولا تعد موجودة عند الخروج من التكرار

الامر الثاني هو قضية الفاصلة منقوطة التي تحدد نهاية كل تعليمة وهنا تم وضعها قصدا في نهاية السطر الأول

);

{

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

أود ان انوه إلى أن ننتبه كي لا نضع بنهاية كل سطر فاصلة منقوطة فتودي إلى الخطأ

كل ما في الامر هنا هو حذف الفاصلة منقوطة ويصبح التكرار عادي واعتقد يعطي النتائج الذي ذكرها الأخ alt حيث أعتقد أنه لم ينتبه عندما قام بالتنفيذ يدويا لأمر الفاصلة منقوطة.

وتم اكتشاف الخطأ مع التطبيق على jcreator

هذا ما اردت التنبيه إليه فقط

والسلام

#12

انا فعلا ما أنتبهة للفاصله المنقوطه نهائياً ..

:angry: ليه وضعت الفاصلة المنقوطة بعد ال for مباشره .. وليه خدعتني بالاقواس { } في جملة الطباعة

على كل حال مشكور يا kkhalil2005 على مشاركتك القيم، :) .

11_03_06_12_48_57_1142110137Image(_66).jpg

#13

شكر لـــ alt على الموضوع

ولكن حببت لو يتم تغيير العنوان إلى

بعض التحويرات في حلقات التكرار

إذ لا يكمن تجاهل الـ while & do...while

لأن هدوله دورهم زي

[كان وأخواتها :rolleyes: ]

#14

السلام عليكم ورحمة الله وبركاته

لم انوي خداعك أخي - a l t - ولكن اردت ان انبه لبعض النقاط فقط

على فكرة هناك تكافؤ فعلي بين تكرار for وتكرار while حيث أذا كتبنا التعليمة العامة for كالتالي:

for(<initialization>; <condition>; <update>)
<statement>

فيمكن كتابة التعليمة while التي توازيها كالتالي:

<initialization>; 
while(<condition>) {
<statement>
<update>;
}

ولكن تستعمل for إذا كان عدد مرات التكرار محددة ونستعمل عداد (تنازلي أو تصاعدي) للتحكم بالتكرار، إذا كانت قيم العداد كل تستعمل لغرض آخر داخل التكرار فيمكن التحوير فيه كيفها شئنا شرط أن يتم التكرار بالعدد المطلوب مثل

إذا أردنا طباعة الكلمة Hello عدد محدد من المرات n فيمكن اجراء

n=5; // for example
for(int i=1; i<=n; i++)
System.out.println("Hello");

أو إجراء التالي :

n=5; // for example
for(int i=n; i>=0; i--)
System.out.println("Hello");

أما إذا أردنا طباعة الاعداد من 1 إلى عدد محدد n فهنا نستعمل نفس العداد للتحكم بالتكرار ولإنتاج القيم التي ستطبع فيكون مجال العداد ثابت.

يمكن أيضا أن نستعمل عدادين الاول للتحكم بالتكرار ونعمل معه كالسابق والثاني ينتج القيم التي ستطبع

n=5; // for example
for(int i=1; i<=n; i++)
System.out.println(i);

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

يمكن قراءة الدرجات من لوحة المفاتيح

بالنسبة للتكرار do-while فيتكرر على الاقل مرة واحدة لأن الشرط يأتي بعد تعليمة التكرار بعكس for و while حيث يمكن أن لا تنفد تعليمة التكرار معهما ولا أي مرة

وتستعمل do-while عادة للتأكد من القيم المدخلة بأن نكرر عملية الادخال حتي ادخال قيمة تحقق شرط معين أو للعمل على القوائم في تطبيقات الconsol

ارجو الاستفادة من هذه المعلومات

والسلام عليكم

تم تعديل هذه المشاركة بواسطة kkhalil2005 في 6 مايو 2005 في 18:52

#15

globaljava

kkhalil2005

شكرا لكم على تواصلكم

11_03_06_12_48_57_1142110137Image(_66).jpg

#16

السلام عليكم

تتمة للموضوع هذه نماذج أخرى لستخدام حلقة for

1. for(int i = 0; i<10; i++, System.out.println(i));
2. for(int i = 1; i<=10; System.out.println(i++));
3. for(int i = 0; i++<10;) System.out.println(i);

من رقم 1 و 2 نلاحظ  أن الجزء الأخير في الحلقة for   (جزء الإزادة incrementation) يسمح بإضافة تعليمات (أوامر) تفصل بينها بفواصل عادية ، كما يمكن أن يكون فارغا

من رقم 3 نلاحظ أن الزيادة تمت في جزء الاختبار(test or condition)  والاستغناء عن جزء الازادة

for(int i = 1; i<10; i++( {
      System.out.println(i);
       i--;
}

نلاحظ في هذه الشفرة (code) أمكانية تعديل متحولات تكرار الحلقة داخل الحلقة نفسها، فهذه الشفرة تعمل عمل الحلقات الغير منتهية

سؤال للتفكير: لماذا الشفرة التالية لا تظهر رسالة خطأ

عند التنفيذ ، علما أن مجال قيم byte من -128 إلى +127؟

[CODE] for(byte b = 0; true; b++( {
      System.out.println(B);
 }

بالتوفيق

تم تعديل هذه المشاركة بواسطة رامي العيساوي في 11 مايو 2005 في 17:45

#17

عذراً

الاكواد لم تظهر بالشكل المطلوب

الرجاء من المشرفين بتعديلها ولكم جزيل الشكر

#18

وضع أوامر أخرى في جملة التكرار غير الزيادة جديدة علي....

أما بالنسبة للبايت.... فلا أدري!!

#19

السلام عليكم

لكل نوع بيانات مجال محدد من القيم مثل نوع البيانات byte مجال قيمه من -128 إلى 127 ، فهذه هي القيم التي يمكن أن تأخذها المتغيرات من النوع byte أما وإذا ما تم الخروج عن نطاق هذه القيم فإننا ننتقل إلى الجهة الاخرة من القيم ونتابع من عندها كأن الامر يسير في دوران على القيم. أي مثلا اذا خزنا القيمة 128 فهي ستتحول إلى -128 والقيمة 129 تصبح -127 والقيمة 130 تصبح -126 وهكذا

لذلك في التكرار لا يصدر خطأ ونبقى ندور ضمن مجال قيم النوع byte

بالنسبة للتكرار for فإننا نستطيع ان نضع أي تعبير مناسب داخل مناطقة الثلاثة ومنه استدعاء طرق

#20

السلام عليكم

أولاً أشكر أبومازن على مروره.....كما يتواصل الشكر إلى الأخ kkhalil2005 على نشاطه الملحوظ :D

ثانياً أن ما قاله الأخ kkhalil2005

هو عين الصواب

بالتوفيق

#21

وعليكم السلام

اشكركم على اثرائكم الموضوع بالمعلومات القيمه

الله لا يحرمنا منكم جميعا

11_03_06_12_48_57_1142110137Image(_66).jpg

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

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