1 / 45

الفصل السادس جملة الدوران

الفصل السادس جملة الدوران. مقدمة : لقد عرفنا من الدروس السابقة مفهوم الدوران ومعناه الذي يتلخص في اعادة تنفيذ جملة أو اكثر عدداً من المرات وقد أوردنا في الفصل السابق مجموعة من الامثلة على مفهوم الدوران بصورة غير مباشرة وذلك باستخدام جمل التحكم والسيطرة

mindy
Download Presentation

الفصل السادس جملة الدوران

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. الفصل السادس جملة الدوران مقدمة : لقد عرفنا من الدروس السابقة مفهوم الدوران ومعناه الذي يتلخص في اعادة تنفيذ جملة أو اكثر عدداً من المرات وقد أوردنا في الفصل السابق مجموعة من الامثلة على مفهوم الدوران بصورة غير مباشرة وذلك باستخدام جمل التحكم والسيطرة مثال (1) :اكتب برنامج لإيجاد قيمة y في التعبير الحسابي ؟   إذا علمت أن قيم x هي على التوالي : 0.1، 0.2، 0.3، ...، 9.7، 9.8 ، 9.9 ، 10.0 الحل : K = 0 x = k / 10 15 K = k + 1 Y =x**2 - 3.0*x + 1.0 Print*, y, x If (k.lt.100)go to 15 Stop End

  2. 6.2جملة الدوران والتكرار do statement ويعبر عنها بالشكل العام التالي : do n, index = m1, m2, m3 ………… ………… N continue حيث : n : يمثل رقم حلقة الدوران ، كما يمثل رقم آخر جملة في حلقة do ، وهي continue هنا، كما في الشكل . Index : يمثل دليل عداد مرات التكرار لحلقة الدوران do M1 : يمثل القيمة الابتدائية للعداد index M2 : يمثل القيمة النهائية للعداد index M3 : وتتولى جملة do مهام تنفيذ مجموعة الجمل حتى جملة رقم n ،وهي آخر جملة في كل حلقة دوران ، يتم ذلك بصورة أوتوماتيكية ، وتعرف مجموعة الجمل داخل حلقة الدوران بمدى حلقة الدوران . المثال التالي يوضح ميكانيكية عمل جملة do

  3. مثال (2): اكتب برنامج لحساب الوسط الحسابي لمجموعة من القيم عددها n الحل : لبرنامج هو : real sum, x integer mean read *,n sum = 0.0 do 12, I = 1,n read *, x sum = sum + x 12 continue mean = sum / float (n) print *, mean stop end ملحوظة مهمة : في المثال السابق ، تم زيادة قيمة العداد بمقدار 1 ، في كل حلقة دوران ، بصورة أوتوماتكية ،نظراً لعدم ذكر قيمة الزيادة m3 في جملة do . أما إذا كانت الزيادة المطلوبة ،في قيمة العداد ، أكثر من 1 ،فيجب ذكرها في جملة do وإلا اعتبر قيمتها 1 ، بصورة أوتوماتكية

  4. مثال (3) : أعد كتابة البرنامج الوارد في المثال (1) باستخدام جملة do : البرنامج : do 15, k = 1, 100 x = k / 10.0 y = x **2 - 3. * x + 1.0 print *, x, y 15 continue stop end ويمكن توضيح عمل البرنامج كما يأتي : تقوم جملة do ، بحساب قيمة y وفقاً للمعادلة : y = x2 – 3x +1 حيث : تحسب قيمة x ، من العلاقة x = k/10 ، حيث تأخذ 1 ، القيمة من 1 إلى 100 ، وبزيادة مقدارها 1 ، في كل حلقة دوران ، ثم تطبع قيمة x وy لكل حلقة . وباستخدام x كعداد يمكن إعادة حل المسألة نفسها وبشكل مختصر كالآتي : do 15, x = 0.1, 10.0, 0.1 y = x **2 - 3. *X + 1.0 print *, x, y 15 continue end

  5. مثال (4) :اكتب برنامجاً لطبع الأعداد الزوجية من 8 إلى 80 البرنامج : Do 30, j = 8, 80, 2 30 Print*, j Stop End في هذا البرنامج : تقوم جملة do ، بطباعة قيم j ، التي تبدأ بالقيمة الابتدائية 8 وتزداد في كل حلقة دوران ، بمقدار 2 ، (قيمة m3 ) النهائية 80 مثال (5 ) N =60 Do 10, m = 1,n ……………... ……………. ……………10 نلاحظ في هذا المثال ، أن القيمة الابتدائية ،أو النهائية يمكن أن تكون متغيرات عددية مثل n, m …الخ ،غير أنه يشترط تعريفها وتحديد قيمتها العددية ، قبل جملة do

  6. 6.3  قواعد استخدام جملة do في فورتران 77 : (1) بعض صور فورتران 77 تسمح بحذف الفارزة بعد الرقم في جملة do (2) ليس من الضروري أن تكون آخر جملة في حلقة الدوران هي جملة continue إذ يمكن إنهاء حلقة الدوران بالجملة التي تسبق continue (3) يجوز أن تكون قيمة m1 صفراً كما يجوز أن تكون قيمة كل من m3, m2, m1 كسرية أو سالبة ، وإذا كانت قيمةm1 أكبر منm2 فإن جملةdo لا تنفذ إذا كانت m3 موجبة فمثلاً جملة الدوران do 10, j =15, 5, 3 لا يمكن تنفيذها . ((4 إذا كانت قيمة الزيادة m3 سالبة فينبغي أن تكون m1 > m2 لضمان تنفيذ جملة do (5 ) لا يجوز أن تكون m3 صفراً . (6) يجوز الانتقال من داخل حلقة الدوران إلى خارجها باستخدام جملة انتقال قبل استكمال مرات الدوران إذا لزم الأمر. (7) لا يجوز الانتقال من خارج حلقة الدوران إلى داخلها . (8) لا يجوز أن تستخدم أي جملة في مدى حلقة الدوران لتغيير قيمة دليل المتغير index فمثلاً : الاستعمال التالي غير صحيح بسبب إعطاء 1 قيم جديدة مختلفة ،داخل حلقة الدوران : Do 20, I =1,100 X (I) = a (I) ** 2 If (I. Gt. 50) I = I +4 Continue20

  7. تنبيه : مع جواز استخدام قيم كسرية العدد لكل من :m3, m2, m1 ، فإنه ينصح بتجنب هذا الاستخدام وذلك بسبب ما قد يقع من أخطاء تقريبية ، فمثلاً خذ الجملة التالية : do 10, a = 0.2,3.2,0.5 التي تعطي a القيم التالية :00.2, 0.7, 1.2, 1.7, 2.2, 2.7, 3.2 وحيث إن عدد مرات تنفيذ جملة الدوران يمكن حسابها من القاعدة التالية : عدد المرات = ويعتبر العدد 6 اقرب عدد صحيح له وعند إضافة 1 إلى هذه القيمة نجد أن عدد المرات المتوقعة لتنفيذ جملة do هي 7 مرات وحيث إنه يحدث عادة تقريب ، في العمليات الحسابية في الحساب فإنه من غير المضمون أن يعطي الفرق (3.2 - 0.2) القيمة 3.0 بالضبط فلحدوث أن هذا العدد كان أقل من 3.0 بقليل فإن نتيجة القسمة على 0.5 تعطي رقماً أقل من 6.0 (قل مثلاً5.9999 ) والذي عندما يقرب لأقرب عدد صحيح يعطينا 5 ، فيصبح عدد مرات تنفيذ جملة do حينئذ 6 وهذا غير صحيح . do 20,I = 1, 200 ……… ……… If (n.le.100) go to 25 continue29 ……… (9) كذلك يمكن الانتقال من جملة إلى أخرى داخل حلقة الدوران (10) لا يجوز أن تنتهي حلقة الدوران بأي من الجمل الآتية : جملة التوقف النهائي أو اللحظي pause , stop جمل السيطرة والتحكم مثل if بأنواعها أو go to بنوعيها جملة العودة return من البرنامج الفرعي (انظر الفصل الثامن ) إلى البرنامج الرئيسي .

  8. المثال التالي يوضح كيفية حساب عدد مرات تنفيذ جملة الدوران : مثال (6) : جملة do عدد المرات Do 10, I =1,13,2 7 Do 20, j = 2,9,5 2 Do 30, k = 5,10,20 1 Do 40, l = 6,6,2 1 Do 50, m = 3,100,1010 Do 60, n = 15,90 76   جملة الاستمرار continue statement قد نحتاج إلى استعمال بعض جمل التحكم مثل : stop, goto, if لتكون آخر جملة في حلقة الدوران ، إلا أن ذلك يتعارض وبشكل صريح مع القاعدة رقم 10 آنفة الذكر ولتلا في مثل هذا التعارض يمكن أن نستعمل جملة الاستمرار continue بعد جملة if وتكون آخر جملة في حلقة الدوران .ولتوضيح أهمية مثل هذه الجملة إليك المثال التالي :  مثال (7) do 20, j =1, 100 read *, a If (a .gt. 5.) y = a**3 + 1.0 If (a .le. 0.0) stop 20 continue في هذا المثال نود حساب y = x3 + 1 عندما تكون A أكبر من أو تساوي 5 أو التوقف عندما تكون A سالبة أو صفراً وبعد الانتهاء من عمليات الحساب هذه داخل حلقة الدوران نجد آن آخر جملة في الحلقة هي جملةIF المنطقية ، وبما أن هذا لا يجوز حسب القاعدة رقم 10 آنفة الذكر لذا كان علينا أن ننهي حلقة الدوران بجملة الاستمرار رقم 20 والجدير بالذكر هنا أن جملة الاستمرار يجب أن تكون مرقمة وتحمل رقم حلقة الدوران نفسه .

  9. 6.5 حلقات الدوران المتداخلة nested do loops  من الممكن أن تحتوي حلقة دوران جملة do على حلقات دوران أخرى داخلها وذلك عند الحاجة لتنفيذ مجموعة من العمليات الداخلية المتكررة وتكون هذه جزءا" من إعادة عمليات أخرى وبصورة متداخلة لكنها غير متشابكة وتسمى أصغر حلقات الدوران بحلقات الدوران الداخلية inner do loops في حين تسمى الحلقات الأخرى بحلقات الدوران الخارجية Outer do loops ومن الممكن لأكثر من حلقة دوران أن تنتهي بالجملة نفسها كما سيأتي بيانه بإذن الله والشكل التالي يوضح فكرة حلقات الدوران المتداخلة : do 1, I = 1,50 do 2, j = 1, 100 do 3, k = 1, 10 continue3 ………. continue2 ………. continue1

  10. قواعد استخدام حلقات الدوران المتداخلة بالإضافة إلى القواعد المذكورة سابقاً بخصوص جملة do الواحدة فإن هناك قواعد أخرى خاصة بحلقات الدوران المتداخلة وهذه هي : (1) تعتبر جملة حلقة الدوران الداخلية جزءاً من جملة حلقة الدوران الخارجية مثال (8) do 1, I = 1, 20 do 2, j = 1, 10 k = I + j2 print *, k1 stop end نلاحظ هنا أن جملة رقم 2 هي جزء من حلقة الدوران الداخلية وفي الوقت نفسه تعتبر جزءاً من حلقة الدوران الخارجية (2) يمكن لأكثر من حلقة دوران الانتهاء بجملة واحدة : مثال (9) : do 1, I = 1, 5 do 1, j = 1,10 do 1, k = 1,5 print1 من هذا المثال نلاحظ أن الجملة رقم 1 هي آخر جملة تنتهي عندها جميع حلقات الدوران وينبغي التنبيه إلى أن جميع جمل do هنا تحمل قيمة n واحدة وهي : 1 .

  11. (3) عند استخدام جملتي do متداخلتين فينبغي أن يكون دليل كل جملة (index) مختلفاً عن دليل الأخرى فلو كان دليل الأولى I مثلاً ، فان دليل الثانية يجب أن يختلف I ، قل a, k, j, .. الخ . والأشكال التالية توضح بعض حالات حلقات الدوران المتداخلة وكيفيات الانتقال فيما بينها بصورة صحيحة مع بيان الأسباب للحالات غير الصحيحة التي تتعارض مع القواعد المشار إليها آنفاً . أولاً : الحالات الصحيحة : أ- do 45, I =…. ….. do 45, j =… … continue45 ب- do 5, I = … … do 10, j =… … do 15, k =… … continue15 … continue10 … continue5 … 0

  12. ثانيا": الحالات الخاطئة : أ- بسبب التقاطع بين الحلقتين do 10, I =… … do 20, j =… … continue10 … continue20  ب- بسبب استعمال index واحد I في جملتي do do 10, I =… … do 20, I =… … print *, I20 … 10 continue ج- do 30, I = … do 20, j =… لا يجوز … do 20, k =… … continue20 لا يجوز … continue30

  13. 6.6 تمارين محلولة 6.1) ) جد الأخطاء أن وجدت في كل من الجمل الآتية : do 25, I = 5,30,I do 10, t = 0.2,10.4,0.2 do 13, n = 1, m +2 do 24, k = 25, 88 do 50, l, 1, 120 do 17, m = 1, j**2 do n, k = 2,25 do 14, a = 1.0, 200.0 do 15, I = n, t do 18, j = 0,5 Do 20, b = x, y, 3. Do 28, I, 1, 208 d o 15, m = 1,n do 52, mansour = 1,10 do 20, j = 1, 25 do 70, k = -10,20 do 100, m = 20,50 do 102, p = 1.0, 10.5 15 cont inue do 16,n = 30, 6,-2

  14. الحل : لا يجوز استعمال I للزيادة وللمتغير index في آن واحد لا يوجد أخطاء لا يجوز أن يكون m2 تعبيراً حسابياً لا يوجد أخطاء لا يجوز استعمال فارزة بعد l لا يجوز أن يكون m2 تعبيراً حسابياً لا يجوز أن يكون n متغيراً حقيقياً بل رقماً صحيحاً لا يوجد أخطاء لا يجوز أن يكون m2 متغيراً حقيقياً بينماm1 متغيراً صحيحاً بل ينبغي لكليهما أن يكونا من جنس الindex لا يوجد أخطاء لا يوجد أخطاء لا يجوز أن يكون بعد الindex فارزة بل إشارة مساواة لا يجوز أن يكون هناك فراغ بين رموز الكلمة do عدد الحروف في الindex : (mansour) أكثر من ستة حروف لا يوجد أخطاء لا يوجد أخطاء لا يوجد أخطاء لا يوجد أخطاء يوجد فراغ بين حروف continue وينبغي أن تكون كلمة واحدة متصلة الجملة صحيحة

  15. بين الأخطاء التالية من البرنامج : (أ)do 10, I = n, l, k n = n + 1 y = x ** 2 – 5.10 (ب) do 23, k = 1, 100 w = w ** 3 / k continue 100  (ج) do 18, m = 1, 20 Print *, m c Job 15 complete 18 (د) do 27, I = 1, 6 y = a * x +b z = x ** 2 + y ** 2 If (y. Gt. z) stop27 (هـ) 14 y = x ** 8 – 8 do 14, m = 1,50 z = (u + v) / 2 print *, z continue14

  16. (و) go To 10 do 10, I = 5, 35 y = y +I10 (ز) if (x) 20, 30,40 y = x + 5.020 do 14, I = 1,5 y = x ** 2 + 5.030 Continue14 (ح) real x, y do 10, I = 1, 20 *,xread y = sqrt (x + 1.) continue10 (ط) do 18, I = 1, n y = sin (x) If (y .eq. 2. * x) go to 18 do 18, j = 1, m 18 y = ALOG (x)

  17. (ي) do 60, k = 1, 24 m = k +1 stop60 (ك) do 12, I = 1,99 read *, r a = 3.14 * r*r do 16, j = 1, 612 n = j + 216 (ل) do 17 n = 2, 45 do 18 n = 3, 39 x = x / (n + 2)18 print *, x17

  18. الحل : لا يجوز أن يتغير m1 داخل حلقة الدوران من خلال أية جملة تنفيذية . يجب أن يكون رقم جملة continue هو 23 لإغلاق حلقة الدوران انتهت حلقة الدوران بالجملة رقم 18 ، وهي جملة غير تنفيذية وهذا لا يجوز لا يجوز أن تنتهي حلقة الدوران بجملة if لا يجوز أن تحمل جملتان مختلفتان رقماً واحداً في البرنامج في آن واحد لا يجوز الانتقال إلى داخل حلقة الدوران من خارجها دون المرور بجملة do كما في (و) لا يوجد أخطاء لا يجوز الانتقال إلى داخل حلقة الدوران الثانية عندما يكون جواب جملة if صحيحاً لا يجوز أن تنتهي حلقة الدوران بجملة stop لا يجوز أن تنتهي حلقة الدوران بجملة do أخرى لا يجوز استخدام index واحد لأكثر من جملة do واحدة في حلقات الدوران المتداخلة

  19. 6.3 جد عدد المرات التي تنفذ فيها كل من جمل do الآتية : (أ)do 16, m= 1, 5 (ب) do 13, l = 6, 19, 2 (ج) do 16, k = 1, 25 (د) do 16, n = 1, 5 (هـ) do 80, j = 10, 5 (و) do 4, I = 5, 50 (ز) do 4, j = 8, 2 الحل : 5 مرات 7 مرات تتكرر جملة 25:k مرة وجملة 125 : n مرة مرة واحدة تتكرر جملة 46 : I مرة وجملة 46 : j مرة كذلك

  20. 6.4 اكتب برنامجاً بلغة فورتران لقراءة العدد الموجب n ثم حساب المجموع sum حسب العلاقة : البرنامج باستعمال جمل الشرط فهو : Read *, n Sum = 0.0 I = 1. 4 sum = sum + 1. /float (I) If (I .ge. n) goto 8 I = I +1. goto 4 8 print *, n. sum stop end ويمكن إعادة كتابة البرنامج باستخدام جملة الدوران do فيكون على النحو التالي read *, n sum = 0.0 do 4, I = 1,n sum = sum + 1. / Float (I) 4 print *, n, sum stop end

  21. 6.5 اكتب برنامجاً بلغة فورتران لحساب الوسط الحسابي mean لمجموعة من القراءاتx1 إلى xn الحل : لحساب الوسط الحسابي ، فإننا نستخدم القانون التالي : ولكتابة البرنامج فإننا نبدأ بقراءةn ثم نعطي sum قيمة أولية تساوي صفرا" ثم نستخدم جملة do لقراءة قيم x وجمعها إلى n, sum من المرات ثم نحسب النتيجة mean بقسمة sum على n ثم نكتب النتيجة ونتوقف . البرنامج : read *, n sum = 0.0 do 30, I = 1, n read *, x sum = sum + x 30 continue mean = sum / float (n) print *, mean stop end

  22. 6.6 اكتب برنامجاً بلغة فورتران لحساب الانحراف المعياري (sd) لمجموعة القراءات الواردة في المثال السابق . الحل : لحساب الانحراف المعياري فإننا نستخدم القانون التالي : البرنامج : read *, n sum1 = 0.0 sum2 = 0.0 do 30, I = 1, n read *, x sum1 = sum1 + x sum2 =sum2 + x ** 2 30 continue mean = sum1 / n sd = sqrt (sum2 /n – mean **2) print *, mean, SD stop end

  23. 6.7أعد كتابة برنامج المسألة 5.6 الواردة في الفصل السابق وذلك باستخدام جملة الدوران do الحل : الاقتران المطلوبة حسابه هو :y = x + x3 + x5 + x7 من الملاحظ أن قيمة x هنا تتراوح بين -3 و 3 وبما أنها تبدأ سالبة فإننا نحتاج إلى ترتيب القيم على النحو التالي لإيجاد علاقة تصف تغيرx داخل حلقة الدوران مع index جملة do كما في الجدول التالي : X : -3. –2.3 –2.0 –1.5 –1 –0.5 0.0 0.5 …3 , I : 1, 2, 3, 4, 5, 6, 7, 8, ……..,13 من الجدول أعلاه ، نلاحظ أن العلاقة بين x و I تأخذ الشكل :x = 3.0 + 0.5 * ( I – 1) وفي ضوء ذلك يمكننا إعادة كتابة البرامج على النحو التالي : real x, y do 40, I = 1, 13 x = -3. + 0.5 * float (I – 1) y = x + x ** 3 + x ** 5 + x ** 7 print *, x, y40 stop end حل آخر : يمكن إعادة كتابة البرنامج على الصورة التالية : real x, y do 40, x = -3.0, 3, 0.5 y = x + x ** 3 + x ** 5 + x ** 7 print *, x, y40 stop end

  24. 6.8اكتب برنامجا" لحساب قيمة الاقتران :Z = F(X, Y) = X2 + XY + - Y2  بحث تتراوح قيمة كل من x و y بين -3 و 3 وبحيث تكون الزيادة تساوي 0.5 في كل حلقة دوران . ثم اطبع قيمة x و y و z لكل حالة من حالات X و y . الحل : من المثال السابق وجدنا أن I تأخذ القيم 1 إلى 4332 13 في مدى x بين -3 و3 وكذلك الأمر هنا فتكون العلاقة بين x وهي X = -3.0 + 0.5 (I – 1) وكذلك الأمر بالنسبة للمتغير y فإن العلاقة بينة وبين الindex ، j هي : Y = -3 + 0.5 (J -1)  وعلية فإن البرنامج يظهر على الصورة التالية : real x, y, z do 40, I = 1, 13 x = -3. + 0.5 * float (I-1) do 40, j = 1, 13 y = -3. + 0.5 * float (j – 1) z = x * x + x * y + y * y print *, x, y, z40 end ويمكن كتابة البرنامج بطريقة أخرى على النحو التالي : real x, y, z do 40, x = -3., 3., 0.5 do 40, y = -3., 3., 0.5 z = x * x + x * y + y * y print *, x, y, z40 end

  25. 6.9اكتب برنامجا" لإيجاد المضروب! N الحل : من المعلوم أن N! = N (n-1) (n –2) ….(3) (2) (1) والذي يمكن كتابته أيضا" على الشكل التالي : N! = (1) (2) (3) ….(n-2) (n-1) (n) ويكون البرنامج كما يأتي : integer n, fact read *, n fact = 1 do 10, I = 1, n fact = fact * I10 print *, n, fact stop end

  26. 6.10اكتب برنامجاً لحساب مجموع N من حدود مفكوك sin x التي يمكن كتابتها على النحو التالي : ثم قارن بعد حساب عشرة حدود جوابك مع الجواب الناتج من استخدام الاقتران المكتبي sin (x) الحل : read *, n, x sum = 0.0 do 15, I = 1, n, 2 fact = 1 do 20, j = 1, I 20 fact = fact * j n1 = fact * (I + 1) * (I + 2) sum = sum + (x **I/float (fact)-x**(I+2)/float (n1)) 15 continue y = sin (x) prpnt *, "for I=", I, "sum =",sum, "sin (n) =", y stop end

  27. 6.11حل آخر باستخدام السلسلة n = 10 read *, x f = 1 sum = x do 20 I = 1, n m = 2*I –1 f = f * m * (m-1) term = x **m/f sum = sum +(-1)**(I+1)* term continue20 y = sin (x) print *,’series sum =’ ,sum , ‘sin (x) = ‘, y stop end

  28. (6.1)بين الأخطاء في كل من الجمل الآتية: (أ) do 1, I = 2, n +1 (ب ) do 2, m = 6, r (ج) do 3, n = 1, n (د) do 4, l = 2., 20. (هـ) do 18, I = 5 (و) do 23, k = 0, 11 (ز) do 25, l = 18, 2, -2 (ح) do 27, x = 1, 10 (ط) do 22, I = 1, j (ي) do kk = 2, 15 (ك) do rx, ex = 1, 100 (ل) do 24, j = -8, 8 (م) do, 26, m = 10, 90 (ن) 60 go on (س) do 5, j = 2.5, 20. (ع) do 6, k.l.m. = 1, 80 (ف) do 7, kouter = 1, 50 (ص) do 8, n = 1 to n = 40 (ض) do 9, j = j, j +1 (غ) do 10, I = 1, 200, 5 (ط) do 5, k = 2, 40, 2, 5

  29. 6.2بين الأخطاء فيما يأتي من الجمل : (أ) if (a . Gt. 0.) Do 2, I = 1, 30 S = r ** 2 + 10. Continue 2 (ب) do 5, j = 1, n Do 6, k = 1, 100 Sum = sum + j 5 Continue 6 (ج) read *,x Do 10, m = 1, 50 Y = sqrt (x + 50.0 Print *, y 10 (د) read *, a, n Do 60, I = I, n N = n +5 10 Speed =a **3-2. Print *, speed 60 (هـ) do 18, j = 1, 1000 X = t ** 2-a **2 If (a.lt.0.) stop 18 Print *, x

  30. (و) do 22, I = 1, n I = I +1 Y = x ** I22 (ز) if (y) 16, 16, 17 Do 4, j = 6, 24, 2 Z = COs (sqrt (y +1.))16 Stop 17 Continue 4 (ح) do 20, I = 1, 321 Do 30, I = 2, 49 N = I *130 N = I * 320 (ط) do 25, l = 1, m V = sqrt(l) Stop25 (ي) do 1, k = 1, 10 W = 5. * U –3*v Continue10 (ك) do 80, I =2, n If (I .eg. 1) y = 10. Goto 90 Continue80 Y = (x – I) ** 3.90 (ل) real mass Do 11, j = 1, 20 Mass = row * volume Do 12, k = 1, 2011 Dist = 0.5 * mass * v **2 Print *, dist12

  31. 6.3جد عدد مرات تنفيذ جملة do الآتية : (أ) do 2, kount = 1, 1000 (ب) do 8, I = 2, 99, 3 (ج) do 77, j = 5, 20, 5 (هـ) do 77, m = 1, 10 (د) do 50, n = 1, 20, 15 (و) do 91, l = 1, m, 6 6.4جد نتيجة البرنامج التالي ،إن أمكن : do 8, I = 1, 4 do 7, j = 1, 5 7 print *, j 8 continue end (6.5) جد النتيجة المطلوبة في البرنامج التالي إن أمكن: c your name x =1.0 do 4, n = 3,28,5 print *, n, x x = x +1.04 end أعد كتابة البرنامج، بحيث يمثل x متغير حلقة الدوران .

  32. 6.6البرنامج التالي مصمم لطباعة قيم كل من و x2 + 1 لقيم x الآتية : x = 1.0, 1.5, 2.0, 2.5, …, 5.0 لكنه يحتوي على أخطاء ، جد هذه الأخطاء ثم صححها . x = 1 do 17 n = 1, 10, 1 y = sin (x) y = y / 3 z = x * x + 1. print *, x, y, z x = x + 0.517 end  (6.7)إذا علمت أن اقتران جاما f(x): (gamma function) ، معرف على النحو التالي : فاكتب برنامجاً تحسب فيه اقتران جاما عندما تكون قيمة x تساوي 0.5 (6.8) اكتب برنامجاً لحساب مجموع حدود السلسلة التالية : 13 + 33 + 53 + … + 993 (6.9) افرض أن القراءات(x, y) ، يمكن أن تمثلها المعادلة الخطية التالية: y = ax + b  حيث ، أ) اكتب برنامجاً لحساب a و b بدون استخدام جملة do . ب) اكتب البرنامج المذكور باستخدام جملة do .

  33.  (6.10) اكتب برنامجاً لترتيب n من الأعداد : أ- ترتيباً تصاعداً. ب- ترتيباً تنازلياً. (6.11) اكتب برنامجاً لحساب مجموعة المتوالية الهندسية التالية : بحيث تكون قيم كل من a و r هي 10.5 و 0.5 على التوالي : (6.12) اكتب برنامجاً لحساب مجموع n من حدود مفكوك الاقترانات الآتية، ثم قارن جوابك مع الجواب الناتج من استخدام الاقترانات المكتبية في نهاية كل حلقة دوران : أ- ب- ج- د- و- بحيث تكون x أكبر من صفر. (6.13) اكتب برنامجاً لحساب عدد التوافيق ( c ) التي يتم فيها اختيار r عينة من بضاعة بين n من العينات إذا علمت أن قانون التوافيق في الإحصاء هو : جرب برنامجك بوضع قيمة 4 للمتغير n , 2 للمتغير r ، بالمقارنة مع الجواب الحسابي اليدوي .

  34. الفصل السابعالمتغيرات المؤشرةsubscripted variables 7.1 مقدمة. 7.2 التغيرات المؤشرة ذات البعد الواحد. 7.3 المتغيرات المؤشرة متعددة الأبعاد. 7.4 أمثلة محلولة. 7.5 تمارين. 7.1 مقدمه من ميزات لغة فورتران ، أنها تستخدم المصفوفات ، ذات الأبعاد المختلفةARRAYS ، وفي حالة استخدام مجموعة من الأعداد ، كالجداول في البرمجة ، حيث يمكن خزنها في وحدة الذاكرة تحت اسم واحد جماعي ، للسهولة. يسمى هذا الاسم ، باسم المصفوفة ،أو المتغير المؤشر subscripted variable ومن الممكن أن يحوي هذا المتغير المؤشر ، على مجموعة كبيرة من الأعداد ، حسب الحاجة .

  35. 7.2 المتغيرات المؤشرة ذات البعد الواحد ONE DIMINTIONAL SUBSCRIPTED VARIABLE مفهوم المتغيرات المؤشر: في حالة المصفوفة ذات البعد الواحد: (x1, x2, x3, x4, … , x10) يمكن أن نعبر عنها بواسطة المتغير x(I) حيث يأخذ I : القيم من 1 الى 10 ، فالعنصر x1 في المصفوفة يعبر عنه بـx(1) والعنصر الثاني x2 يعبر عنه بـx(2) ، وهكذا إلى العنصر العاشر x(10) . وتخزن هذه المتغيرات في وحدة الذاكرة واحداً بعد الأخر، في مواضع متتالية ، وبشكل تصاعدي كما في الشكل التالي : أي تخزن في المواضع ذات العناوين: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 وعندما يكون اسم المتغير صحيحاً، فإنه يجب أن تكون جميع عناصر هذا المتغير المؤشر صحيحة أيضاً. مثال (1):num(I) متغير مؤشر دون بعد واحد يحتوي على عناصر صحيحة. وعندما يكون اسم المتغير المؤشر حقيقياً ، فإنه يجب أن تكون جميع عناصره حقيقة. مثال (2):x(I) متغير مؤشر ذو بعد واحد ،يحتوي على عناصر حقيقة. ويسمى المتغير I ، المدون بين القوسين بالمؤشر في حين يسمى الاسم الرمزي X متغيراً مؤشراً.

  36. مثال (3): num(10) تعني العنصر العاشر للمتغير المؤشر num S (m+2) تعني أن المؤشر (m+2) لهذا المتغير المؤشر s ، هو تعبير حسابي ،لأن قيمته تخزن في المخزن s الحقيقي. Mass (4*I-3) تعني أن المؤشر لهذا المتغير المؤشر هو أيضا" تعبير حسابي صحيح ،لأن قيمته تخزن في المخزنmass الصحيح. وبشكل عام فإن المتغير الحسابي المستخدم كمؤشر للمتغير المؤشر يقتصر على الأشكال الآتية : الشكل الاستعمال n y =1.0 +x(10) k print *, x(k) K+m k(k3+2) = n K-m x(j) = x(j-1) N*k ABC(3 * jj) = 0. N*k+m print *, I, a(2 * k + 1) N*k-k if (nv(4 * I-3).eq. 0)stop والأمثلة الآتية غير صحيحة للأسباب المبينة إزاء كل منها: B (-10) المؤشر السالب غير مسموح به. B (0) المؤشر الصفر غير مسموح به في بعض أشكال فورتران. B (I*30 المؤشر يكتب على النحو (3*I) . B (I**2) المؤشر غير مسموح به بهذا الشكل. B (. true.) لا يسمح أن يكون المؤشر ثابتا منطقياً. B (2*j (4)) لا يجوز للمؤشر أن يتضمن داخله مؤشرا" آخر. غير أنه يجب ملاحظة ، أن بعض الحاسبات ذات الحجم الكبير يمكن أن تأخذ أشكالا" أخرى إضافة لما سبق.

  37. 7.2.2 جملة البعاد :dimension statement عند استعمال المتغيرات المؤشرة ،يجب استعمال جملة الأبعاد لحجز العدد المطلوب ، من المخازن في وحدة الذاكرة الرئيسية ، لخزن قيم العناصر فيها ، وتعتبر هذه الجملة ن جملة غير تنفيذية. مثال(4) : جملة الأبعاد dimension x(100) تعتبر دليلاً لمترجم الحاسب compiler , لحجز 100 موقع في وحدة الذاكرة ، لعناصر المتغير المؤشرx المئة وهذه العناصر هي: X (1), x (2), x (3)…x (100) والشكل العام لجملة الأبعاد هو: Dimension name1 (size1)…name n (size n) حيث تمثل :name1….name2….name n أسماء المتغيرات المؤشرة : بينما تمثل:size1, size2,….size n عدد المواقع ،والمطلوب حجزها في وحدة الذاكرة. والجدير بالذكر أن size n هو الحد الأعلى ، لعدد العناصر التي يمكن أن يتكون منها المتغير المؤشر name I مثال(5) :جملة البعاد dimension x(10), abc(200), y(50) تحجز في وحدة الذاكرة : 10 مواقع للمتغير المؤشرx 200 موقع للمتغير المؤشر abc 50 موقعاً للمتغير المؤشر y ويجب ملاحظة أن جملة الأبعاد، يجب أن تكون في مقدمة البرنامج ،لحجز العدد المطلوب من المواقع في وحدة الذاكرة .

  38. 7.2.3 قواعد استعمال جملة الأبعاد والمتغيرات المؤشرة : (1)يمكن لأي برنامج أن يحتوي على أكثر من جملة dimension واحدة. (2)لا يجوز أن يظهر اسم المتغير في أكثر من جملةdimension واحدة. (3) جملة (جمل) dimension يجب أن تسبق أية جملة تنفيذية في البرنامج. (4)لا يجوز لأية جملة من جمل التحكم والسيطرة أن تنقل سير تنفيذ البرنامج ، إلى جملة dimension . (5)إذا كان اسم المتغير المؤشر صحيحاً ، فإن جميع عناصر المتغير تكون صحيحة . كذلك إذا كان الاسم حقيقيا" فإن جميع عناصره تكون حقيقية . (6) مؤشر المتغير المؤشر ، يكون بين قوسين، ويكون إما عددا" صحيحا" أو تعبيرا" حسابياً كما سبق ذكره. (7) لا يجوز أن يكون المؤشر، في جملة الأبعاد ،متغيراً ، بل عدداً صحيحاً ، كما سيأتي بيانه، بإذن الله . (8) قيمة المؤشر ،في أية جملة تنفيذية، في البرنامج ، يجب أن تكون أكبر من أو تساوي1 ،وأصغر من أو تساوي قيمة المؤشر في جملة dimension .

  39. مثال(6):اكتب برنامجاً لحساب متوسط average أعمارages صف عدد طلابه 40 طالباً. الحل: لحساب المتوسط فإننا نستخدم العلاقة : البرنامج: dimension a (40) sum = 0. do 20, I = 1, 40 read *, a (I) sum = sum + a (I)20 average = sum / 40. print *, average stop end في هذا البرنامج نلاحظ ما يأتي: 1- تحدد جملة الأبعاد dimension عدد المخازن المطلوبة للمتغير a وهو 40 2- تقوم جملة القراءة، بقراءة قيمة المتغيرات المؤشرة a(40)…a(2), a(1) ،على التوالي وتخزينها في المخازن المخصصة لها، بموجب جملة الأبعاد. 3- تقوم جملة الجمع التالية ، بإيجاد مجموع أعمار الطلاب 4- تحسب النتيجة average ثم تطبع.

  40. 7.2.4 جمل الإدخال للمتغيرات المؤشرة: إذا فرضنا أن x هو اسم لمتغير مؤشر، مؤلف من 4 عناصر، وبما أن المتغيرات المؤشرة، يمكن أن تظهر في جمل الإدخال والإخراج فإنها تعامل كالمتغيرات العددية العادية تماماً ، ففي جملة القراءة التالية . Read*, x (2), y يقرأ الحاسب قيمة المتغير المؤشر x(2) ، وقيمة المتغير العددي الحقيقيy زفي الجملة التالية: Read*, x (1), x (2), x (3), x (4) يقرأ الحاسب جميع عناصر المتغير المؤشرx ،الأربعة على التوالي. ولكن الملاحظ ، أن هذا الأسلوب للقراءة غير مناسب، إذا ازداد عدد العناصر للمتغير x بحيث يصبح عدداً كبيراً ولمعالجة مثل هذا الموقف، يمكن إعادة كتابة جملة القراءة السابقة، بصورة مكافئة على النحو التالي: Read*, (x (I), I = 1,4) وطريقة القراءة هذه، تسمى بجملة التكرار الضمنية ، والتي تستخدم بشكل خاص للمتغيرات المؤشرة. وجملة القراءة السابقة، تقوم بقراءة العناصر x(4), x(3), x(2), x(1) على الترتيب. والصيغة العامة لجملتي القراءة والطباعة الضمنية هي: عند القراءة: وعند الطباعة:

  41. حيث: Array name :هو اسم المتغير المؤشر المشار إلية في جملة dimension Index : مؤشر الابتدائية للمؤشر. M1 : القيمة الابتدائية للمؤشر. M2 : القيمة النهائية للمؤشر. M3 : الزيادة في قيمة المؤشر.  مثال(7): Dimension x (10) Read*, (x (I), I = 1, 10, 2)  في هذا المثال ،نطلب إلى الحاسب قراءة قيم عناصر المتغير المؤشرx(I) ، حيث تأخذا القيم من (m1 =1) إلى (m2 =10) ، وبزيادة (m3 = 2) في كل مرة ، وعلية تكون العناصر المقروءة هي، على التوالي: X (1), x (3), x (5), x (7) x (9) مثال(8): Dimension a (100) … … M = 10 Print *, (a (I), I = 1, m) … … في هذا المثال، نطلب إلى الحاسب ،طباعة قيم عناصر المتغير المؤشر a(I) الآتية: A (1), a (2)…a (10)

  42. مثال(9): Dimension b (20), c (30) … … Read *, (( b (I), I = 1, 10), c(I), I = 1, 10) … ... في هذا المثال ، نطلب إلى الحاسب، قراءة قيم عناصر المتغير المؤشر b(I) العشرة بموجب التعبير : (B(I), I = 1 , 10) و بعد ذلك قراءة عناصر C(I) العشرة بموجب التعبير (C(I), I = 1 , 10) ويمكننا إعادة كتابة جملة القراءة السابقة، للمتغيرين المؤشرين في جملة تكرار واحدة ،كما هو موضح في المثال التالي: مثال (10): Dimension b (20), c (30) … …. Read *, (b (I), c (I), I = 1, 10) … … والفرق بين المثالين(9) و(10) هو في طريقة القراءة ، ففي مثال (9) ، نقرأ العناصر على النحو التالي: B (1), b (2)…b (10), c (1), c (2)…c (10) في حين تقرأ العناصر في مثال(10) على النحو التالي: B (1), c (1), b (2), c (2)…b (10), c (10)

  43. المتغيرات المؤشرة متعددة الابعاد Multi-dimensional subscripted variable  7.3.1 مقدمـــة: كثيراً ما نحتاج، في تطبيقاتنا العلمية والعملية، إلى ترتيب المعطيات أو النتائج في صورة تساعدنا على الوصول إليها، والتعامل معها بسهولة ، وفي أقل وقت ممكن . يكون هذا الترتيب ، عادة على هيئة مصفوفات ذوات بعدين أو ثلاثة أبعاد….الخ. خذ مثلاً ، الترتيب التالي ،لعدد الطلاب في جامعة ما، حسب الكلية والسنة. وباستخدام المصفوفات، يمكن إعادة صياغة الجدول السابق ، على شكل مصفوفة ، ذات بعدين على النحو التالي:

  44. وبشكل عام ، فإن المصفوفات يعبر عنها ، بالمتغير المؤشر ، متعدد الأبعاد وبناء على ذلك ، فإن المصفوفة السابقة ذات البعدين، يمكن التعبير عنها بالمتغير المؤشر ذي البعدين: حيث : تمثل 1 : رقم (السنة) ، وتأخذ القيم من : 1 إلى 4 وتمثل j : رقم العمود (الكلية) وتأخذ القيم من : 1 إلى 4 أيضاً. والمصفوفة السابقة a يمكن تخزين عناصرها على الصورة التالية : ويمكن أن نلاحظ بسهولة أن عدد المخازن التي تحتاجها المصفوفة a يساوي 4*4 .وبشكل عام يمكن القول : أن عدد المخازن ،لأية مصفوفة ذات بعدين= عدد الصفوف* عدد الأعمدة 7.3.2 جملة الأبعاد : تأخذ جملة الأبعاد لمتغير مؤشر ذي بعدين الصورة العامة التالية: حيث : يمثل n1 عدد الصفوف للمتغير المؤشر name1 ويمثل: m1 عدد الأعمدة للمتغير المؤشر name1  مثال(11): جملة الأبعاد dimension a(2,3) تعني آن عدد الصفوف الأقصى للمصفوفة a ،هو 2نوان عدد الأعمدة الأقصى لهل ، هو 3، فتكون عدد المخازن للمصفوفةa ،بموجب جملة الأبعاد هذه=3*2،وهي مرتبة كما يلي: a(1,1) a(2,1) a(1,2) a(2,2) a(1,3) a(2,3)

  45. مثال(12) اكتب برنامجاً لقراءة عناصر المصفوفة، a ، ثم إيجاد حاصل ضربهما في ثابت عددي k .  الحل : لنفرض أن المصفوفة a هي : وأن ناتج ضرب a في k هو المصفوفة b التالية : إذ افرضنا أن عدد الصفوف، n =6 وعدد الأعمدة،m =5 فإن البرنامج يمكن كتابته على النحو التالي : dimension a (10, 10), b (10, 10) read *, k do 15, I = 1,6 do 15, j = 1, 5 read *, a (I, j) B (I, j) = k * a (I, j) continue15 do 25, I = 1,6 Print *, (b (I, j), j = 1, 5) Continue End

More Related