📘 بطاقة الدرس
| المادة | الإعلام الآلي |
|---|---|
| المستوى | الثانية ثانوي (شعبة تقني رياضي) |
| الوحدة | الخوارزميات والبرمجة — هياكل التحكم في Pascal |
| المدة الزمنية | حصتان (ساعتان) |
🎯 أهداف التعلم
- التعرف على مفهوم هياكل التحكم في البرمجة
- التفريق بين البنية الشرطية والبنية التكرارية
- استخدام If و Case لاتخاذ القرارات
- استخدام For و While و Repeat لإنشاء الحلقات التكرارية
- حل تمارين بكالوريا باستخدام هياكل التحكم
🔍 تمهيد
في الدرس السابق تعلمنا كتابة برامج بسيطة بلغة Pascal. لكن ماذا لو أردنا اتخاذ قرارات بناءً على قيم المدخلات؟ أو تكرار نفس العملية عدة مرات؟ هنا تأتي أهمية هياكل التحكم (Control Structures) التي تسمح للبرنامج باتخاذ مسارات مختلفة حسب الشروط وتكرار تنفيذ الأوامر.
🔀 أولاً: البنية الشرطية (Conditional Structures)
1.1. التعليمات الشرطية البسيطة: If … Then
If (شرط) Then
أمر;
// أو بصيغة الكتلة:
If (شرط) Then
Begin
أمر1;
أمر2;
End;
📝 مثال 1: تحديد أكبر عدد
Program MaxTwo;
Var
a, b: Integer;
Begin
Write('أدخل العدد الأول: '); ReadLn(a);
Write('أدخل العدد الثاني: '); ReadLn(b);
If a > b Then
WriteLn('العدد الأكبر هو: ', a)
Else
WriteLn('العدد الأكبر هو: ', b);
ReadLn;
End.
1.2. If … Then … Else
If (شرط) Then
أمر1
Else
أمر2;
📝 مثال 2: تحديد هل العدد زوجي أم فردي
Program EvenOdd;
Var
n: Integer;
Begin
Write('أدخل عدداً صحيحاً: '); ReadLn(n);
If n Mod 2 = 0 Then
WriteLn(n, ' عدد زوجي')
Else
WriteLn(n, ' عدد فردي');
ReadLn;
End.
1.3. If المتداخلة (Nested If)
📝 مثال 3: تقدير المعدل
Program Grade;
Var
moy: Real;
Begin
Write('أدخل المعدل: '); ReadLn(moy);
If moy >= 10 Then
If moy >= 16 Then
WriteLn('ممتاز')
Else If moy >= 14 Then
WriteLn('جيد جداً')
Else If moy >= 12 Then
WriteLn('جيد')
Else
WriteLn('مقبول')
Else
WriteLn('راسب');
ReadLn;
End.
1.4. البنية الشرطية المتعددة: Case … Of
تستخدم عندما يكون لدينا عدة احتمالات لنفس المتغير:
Case (متغير) Of
قيمة1: أمر1;
قيمة2: أمر2;
قيمة3, قيمة4: أمر3;
Else أمر;
End;
📝 مثال 4: أيام الأسبوع
Program WeekDay;
Var
day: Integer;
Begin
Write('أدخل رقم اليوم (1-7): '); ReadLn(day);
Case day Of
1: WriteLn('السبت');
2: WriteLn('الأحد');
3: WriteLn('الإثنين');
4: WriteLn('الثلاثاء');
5: WriteLn('الأربعاء');
6: WriteLn('الخميس');
7: WriteLn('الجمعة');
Else WriteLn('رقم غير صحيح');
End;
ReadLn;
End.
🔄 ثانياً: البنية التكرارية (Loop Structures)
2.1. الحلقة For (عندما نعرف عدد التكرارات)
// تصاعدي:
For i := قيمة_بداية To قيمة_نهاية Do
أمر;
// تنازلي:
For i := قيمة_بداية DownTo قيمة_نهاية Do
أمر;
📝 مثال 5: طباعة الأعداد من 1 إلى 10
Program CountUp;
Var
i: Integer;
Begin
For i := 1 To 10 Do
WriteLn(i);
ReadLn;
End.
📝 مثال 6: حساب مجموع الأعداد من 1 إلى N
Program SumN;
Var
i, n, sum: Integer;
Begin
Write('أدخل العدد N: '); ReadLn(n);
sum := 0;
For i := 1 To n Do
sum := sum + i;
WriteLn('مجموع الأعداد من 1 إلى ', n, ' = ', sum);
ReadLn;
End.
2.2. الحلقة While (التكرار بشرط مقدم)
تكرّر طالما الشرط محقق. تُستخدم عندما لا نعرف عدد التكرارات مسبقاً.
While (شرط) Do
Begin
أوامر;
End;
📝 مثال 7: قراءة أعداد حتى إدخال الصفر
Program ReadUntilZero;
Var
x, sum: Integer;
Begin
sum := 0;
Write('أدخل عدداً (0 للخروج): '); ReadLn(x);
While x <> 0 Do
Begin
sum := sum + x;
Write('أدخل عدداً (0 للخروج): '); ReadLn(x);
End;
WriteLn('المجموع = ', sum);
ReadLn;
End.
2.3. الحلقة Repeat … Until (التكرار بشرط مؤخر)
تنفّذ الأوامر مرة واحدة على الأقل ثم تكرّر حتى يتحقق الشرط.
Repeat
أوامر;
Until (شرط);
📝 مثال 8: التحقق من إدخال صحيح (بين 0 و 20)
Program ValidInput;
Var
n: Integer;
Begin
Repeat
Write('أدخل عدداً بين 0 و 20: '); ReadLn(n);
If (n < 0) Or (n > 20) Then
WriteLn('خطأ! حاول مرة أخرى.');
Until (n >= 0) And (n <= 20);
WriteLn('تم الإدخال الصحيح: ', n);
ReadLn;
End.
📊 جدول مقارنة الحلقات التكرارية
| البنية | متى نستخدمها | عدد التكرارات معروف مسبقاً؟ | تتكرر 0 مرات على الأقل؟ |
|---|---|---|---|
For |
عند معرفة عدد التكرارات | نعم | لا |
While |
عند عدم معرفة عدد التكرارات | لا | نعم (قد لا تنفذ أبداً) |
Repeat |
عند عدم معرفة عدد التكرارات مع ضمان تنفيذ واحد على الأقل | لا | لا (تنفذ مرة واحدة على الأقل) |
✏️ تمرين بكالوريا
(بكالوريا 2019 – تقني رياضي) اكتب برنامجاً بلغة Pascal يقرأ عدداً صحيحاً موجباً N ثم يقوم بحساب وعرض:
- مجموع الأعداد الزوجية من 1 إلى N
- عدد الأعداد الفردية من 1 إلى N
🟢 انقر هنا لرؤية الحل
Program Bac2019;
Var
i, n, sumEven, countOdd: Integer;
Begin
Repeat
Write('أدخل عدداً موجباً: '); ReadLn(n);
If n <= 0 Then WriteLn('خطأ! العدد يجب أن يكون موجباً.');
Until n > 0;
sumEven := 0;
countOdd := 0;
For i := 1 To n Do
Begin
If i Mod 2 = 0 Then
sumEven := sumEven + i // عدد زوجي → نجمعه
Else
countOdd := countOdd + 1; // عدد فردي → نعدّه
End;
WriteLn('مجموع الأعداد الزوجية من 1 إلى ', n, ' = ', sumEven);
WriteLn('عدد الأعداد الفردية من 1 إلى ', n, ' = ', countOdd);
ReadLn;
End.
✏️ تمرين إضافي
اكتب برنامجاً يقرأ 10 أعداد صحيحة ويحسب أكبر عدد وأصغر عدد والمعدل.
🟢 انقر هنا لرؤية الحل
Program MinMaxAvg;
Var
i, x, min, max: Integer;
sum: LongInt;
avg: Real;
Begin
sum := 0;
Write('أدخل العدد 1: '); ReadLn(x);
min := x; max := x; sum := x;
For i := 2 To 10 Do
Begin
Write('أدخل العدد ', i, ': '); ReadLn(x);
sum := sum + x;
If x < min Then min := x;
If x > max Then max := x;
End;
avg := sum / 10;
WriteLn('أكبر عدد: ', max);
WriteLn('أصغر عدد: ', min);
WriteLn('المعدل: ', avg:0:2);
ReadLn;
End.
📌 ملخص الدرس
- هياكل التحكم تقسم إلى: شرطية (If, Case) وتكرارية (For, While, Repeat).
If ... Then ... Elseلاتخاذ قرار بناءً على شرط.Case ... Ofللاختيار من بين عدة قيم محددة.Forللتكرار بعدد مرات معروف مسبقاً.Whileللتكرار بشرط يُفحص قبل التنفيذ (قد لا يتكرر أبداً).Repeat ... Untilللتكرار بشرط يُفحص بعد التنفيذ (يتكرر مرة على الأقل).
📍 دروس مشابهة:
- الخوارزميات — مفهومها وطرق تمثيلها (المخطط الانسيابي والشيفرة الوصفية) — الأولى ثانوي (شعبة تقني رياضي) — الإعلام الآلي
- الخوارزميات المتقدمة: المصفوفات والدوال في البرمجة – الثالثة ثانوي (بكالوريا) إعلام آلي
مدونة التربية و التعليم في الجزائر – دروس، فروض، نتائج امتحانات مدونة التربية والتعليم في الجزائر | تحضير الدروس، فروض واختبارات، نتائج البكالوريا وBEM، مسابقات التوظيف، والتوجيه المدرسي للطلاب وأولياء الأمور.