لبيان الحلقة. المهام النموذجية


لنحاول كتابة برنامج لحل المشكلة التالية:
أوجد مجموع كل الأعداد الصحيحة بين 100 و 500. & nbsp؛

عند حل هذه المشكلة ، يصعب إيجاد المجموع. إذا كتبنا ببساطة نتيجة الإضافة إلى المتغير s ، على سبيل المثال ، كـ

s = 100 + 101 + 102 + 103 + ... + 500

سيستغرق التسجيل نفسه وقتًا طويلاً ، لأن الكمبيوتر لن يفهم كيفية استخدام علامة القطع في التعبير الحسابي وسيتعين علينا كتابة جميع الأرقام من 100 إلى 500 في هذا المجموع. وستكون قيمة مثل هذا البرنامج ضئيلة. خاصة إذا أردنا تغيير أرقامنا واتخاذ نطاق مختلف.

ماذا يجب أن نفعل؟

إذا انتبهنا إلى الإدخال أعلاه ، فإننا نستخدم باستمرار الإضافة & quot؛ + & quot ؛.
يمكنك محاولة إضافة أرقام إلى المتغير s تدريجيًا. على سبيل المثال ، باستخدام هذا الترميز
s: = s + i؛
ماذا فعلنا هنا:
1) على اليمين ، نضع التعبير s + i ، ، أي أننا نأخذ قيمة المتغير s ، الذي لدينا الآن في الذاكرة ونضيف القيمة للمتغير i <إليه / strong>
2) على اليسار نقوم بتعيين اسم المتغير & nbsp؛ s ، أي سيتم تخزين نتيجة الحساب على اليمين بالكامل في هذا المتغير ، لذلك سنقوم بتغيير قيمة المتغير s. نبسب ؛

من أين يمكننا الحصول على الأرقام من مجموعتنا؟

يجب أن تقع الأرقام من 100 إلى 500 التي تنتمي إلى النطاق الخاص بنا في المتغير i واحدًا تلو الآخر. ويمكن القيام بذلك باستخدام حلقة
المعروفة جيدًا على سبيل المثال ، بهذه الطريقة <قبل> ق: = 0 ؛ // في البداية ، من الضروري إعادة ضبط المتغير s ، بحيث تتم إضافة الرقم 100 إلى الصفر في الخطوة الأولى ، وليس إلى ما هو موجود في الذاكرة! بالنسبة إلى i: = 100 إلى 500 do // رأس الحلقة ، حيث يغير المتغير i قيمته من 100 إلى 500 بزيادات قدرها 1 s: = s + i ؛ // جسم الحلقة ، حيث نضيف تدريجياً قيمة المتغير المتغير i إلى المتغير s // ويتم تخزين النتيجة مرة أخرى في المتغير s هذا الحل مشابه جدًا لحساب المجموع بالأفعال
نبسب ؛ ق = 0 + 100 = 100
نبسب ؛ ق = 100 + 101 = 201
نبسب ؛ ق = 201 + 102 نبسب ؛ = 303
إلخ.

أقصى رقم بين أرقام معينة عند دراسة المعامل الشرطي ، تطرقنا إلى موضوع إيجاد العدد الأقصى من عدة أرقام تم إدخالها. في مشكلة "الحد الأقصى أربعة أرقام" استخدمنا الخوارزمية التالية:
1. قم بتعيين قيمة للمتغير M لأول المتغيرات الأربعة ؛
2. إذا كانت قيمة المتغير الثاني أكبر من قيمة المتغير M ، فاستبدل قيمة المتغير M & nbsp؛ بقيمة المتغير الثاني ؛
3. إذا كانت قيمة المتغير الثالث أكبر من قيمة المتغير M ، فاستبدل قيمة المتغير M بقيمة المتغير الثالث ؛ < ر /> 4. إذا كانت قيمة المتغير الرابع أكبر من قيمة المتغير M ، فاستبدل قيمة المتغير M & nbsp؛ بقيمة المتغير الرابع.

يمكن ملاحظة أن كل & nbsp؛ الرقم & nbsp؛ (دعنا نشير إليه بواسطة X ) قمنا بمقارنته بالمتغير M ، على النحو التالي:
نبسب ؛

الكود الزائف <قبل> إدخال X إذا (M
الشيء الرئيسي في هذا الكود هو تحديد القيمة الأولية التي سيحصل عليها المتغير M .
عادة ، عند حل مشكلة إيجاد حد أقصى أو أدنى ، يتم تعيين القيمة الأولية للمتغير M مساوية للرقم الأول.
وبالتالي ، يجب تنفيذ الكود أعلاه مرة واحدة أقل من عدد الأرقام (لأنه يجب إدخال الرقم الأول وتخزينه كقيمة أولية للمتغير M ).
إذا كان لدينا عدد من الأرقام التي تم تعيينها من لوحة المفاتيح (على سبيل المثال ، في المتغير n ) ، فيمكننا تنظيم دورة ( من 2 إلى n ) ، باستخدام نفس الرقم لتخزين متغير الرقم.

حاول كتابة البرنامج بنفسك.

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

على سبيل المثال ، إذا كنا نبحث عن الحد الأقصى للرقم السالب ، فحينئذٍ يكون لدينا مجموعة البيانات: \ (\ {5، -2، 4، 2، -1، -3 \} \ ) سنحصل على الرقم 5 في القيمة الأولية للحد الأقصى ، وهو رقم موجب وأكبر من أي قيمة سالبة. ومن هنا الشرط X & GT. سيظل M خطأ دائمًا.

لذلك ، لا يكفي إضافة فحص واحد فقط لرقم سالب إلى الخوارزمية من المشكلة السابقة ، بل من الضروري أيضًا مراعاة حقيقة أن الرقم الأول قد لا يفي بالشرط المطلوب (في هذه الحالة ، يكون سالبًا ).

يمكنك إصلاح ذلك عن طريق إضافة الشرط التالي داخل الحلقة:

الكود الزائف <قبل> إذا كانت X سالبة ، إذن إذا M & gt ؛ = 0 أو M & lt ؛ X إذن م = س
في الكود المحدد ، يسمح لك الشرط & nbsp؛ M & gt؛ = 0 بتنفيذ الإجراء & nbsp؛ M = X حتى إذا كان M & nbsp؛ يحتوي المتغير في البداية على قيمة أكبر بشكل واضح من الباقي (في مثالنا ، القيمة تساوي 5).

نلاحظ أيضًا أنه إذا كان نطاق الأرقام معروفًا ، فيمكن اعتبار الحد الأدنى (الحد الأقصى) للرقم من النطاق المحدد كقيمة أولية للحد الأقصى (الحد الأدنى).

مهمة يتم إعطاء أرقام N. أوجد ثاني أكبر عنصر في تسلسل.

هذه المسألة تسمح بتفسيرين.
على سبيل المثال ، إذا حصلنا على مجموعة من الأرقام: \ (10 ​​\ 15 \ 20 \ 35 \ 14 \ 35 \ 10 \) ، فماذا يجب أن تكون الإجابة ؟
تحت "ثاني أكبر عنصر" أو ببساطة "الحد الأقصى الثاني" ، يمكن فهمها على النحو التالي:
1) القيمة التي ستكون في المكان قبل الأخير إذا رتبنا (فرزنا) جميع القيم بترتيب غير تنازلي (كل قيمة تالية أكبر من القيمة السابقة أو مساوية لها). ثم بالنسبة لمجموعة الأرقام المدروسة ، ستكون الإجابة هي القيمة 35 ؛
2) قيمة العنصر وهي أكبر من الحد الأقصى فقط. ثم الجواب هو 20.
إذا كان هناك عنصر واحد فقط كحد أقصى في مجموعة الأرقام (كل العناصر الأخرى أقل) ، فسيكون كلا التفسيرين متماثلين ، وستكون الإجابة واحدة لكلتا الحالتين ، وإلا ستكون الإجابة مختلفة.

ضع في اعتبارك الحالة الأولى (سنكتب الخوارزمية في pseudocode ).
للعثور على الإجابة ، سنستخدم متغيرين:
1) max1 - القيمة القصوى (الحد الأقصى الأول) ؛
2) max2 - الثانية القصوى (إجابتنا).

إذا كان نطاق تغيير القيم معروفًا ، فحينئذٍ كقيم أولية نأخذ رقمًا من الواضح أنه أقل من الحد الأدنى للنطاق (على سبيل المثال ، مع نطاق من -1000 إلى 1000 - خذ الرقم -1001 )
إذا كان نطاق القيم غير معروف ، فيمكنك كتابة أول رقمين للإدخال في القيم الأولية للمتغيرين max1 و max2 ، ثم المقارنة بينهما متغيرين. <قبل> إدخال N // عدد الأرقام المدخلات أ ، ب max1 = أ max2 = ب إذا ب & GT. أ ، إذن نبسب ؛ نبسب ؛ max1 = ب نبسب ؛ نبسب ؛ max2 = أ
بعد ذلك ، نأخذ في الاعتبار جميع العناصر الأخرى (تم عرض أول 2 بالفعل ، لذلك سنبدأ من الثالث) <قبل> nc لأني من 3 إلى n إدخال أ إذا أ & GT. max1 // كانت هناك قيمة أكبر من max1 الذي - التي max2 = max1 // القمة الأولى السابقة تصبح الثانية max1 = a // سيكون العنصر الجديد هو الحد الأقصى الأول خلاف ذلك // العنصر التالي لا يزيد عن max1 // يجب مقارنتها بالقيمة القصوى 2 إذا أ & GT. بحد أقصى 2 الذي - التي max2 = a // اعتبرها على أنها القيمة الجديدة max2 // لا يتغير max1 في هذه الحالة الجميع الجميع kts
حاول تنفيذ هذه الخوارزمية بنفسك.