📘 بطاقة الدرس
| المادة | الإعلام الآلي |
|---|---|
| المستوى | الثالثة ثانوي (بكالوريا — شعبة تقني رياضي) |
| الوحدة | الخوارزميات والبرمجة — تمارين بكالوريا محلولة |
| المدة الزمنية | حصتان (ساعتان) |
🎯 أهداف التعلم
- تطبيق المفاهيم الخوارزمية في حل مسائل بكالوريا
- التمكن من كتابة الخوارزميات والمخططات الانسيابية
- تحويل الخوارزميات إلى برامج بلغة Pascal
- الاستعداد الجيد لامتحان البكالوريا في الإعلام الآلي
🔍 تمهيد
تعتبر مادة الإعلام الآلي في البكالوريا (شعبة تقني رياضي) من المواد الأساسية التي تتطلب فهماً عميقاً للخوارزميات والقدرة على تحويلها إلى برامج. في هذا الدرس، نقدم مجموعة من التمارين المحلولة التي تغطي أنماط الأسئلة المتكررة في امتحانات البكالوريا.
📝 التمرين الأول: الأعداد الأولية (بكالوريا 2018)
اكتب خوارزمية ومخطط انسيابي وبرنامجاً بلغة Pascal يقرأ عدداً صحيحاً موجباً N ثم يتحقق مما إذا كان عدداً أولياً أم لا. (العدد الأولي هو عدد يقبل القسمة على 1 وعلى نفسه فقط).
🟢 الحل الكامل
1. التحليل:
- المدخلات: عدد صحيح N
- المخرجات: رسالة “أولي” أو “ليس أولياً”
- الخوارزمية: نقسم N على الأعداد من 2 إلى N-1، إذا وجدنا قاسماً فليس أولياً
2. الشيفرة الوصفية (Pseudo-code):
خوارزمية Prime_Check
المتغيرات:
N, i: صحيح
isPrime: منطقي
البداية:
اكتب("أدخل عدداً: ")
اقرأ(N)
إذا كان N <= 1 فإن
اكتب("ليس أولياً")
وإلا
isPrime ← صحيح
بالنسبة i من 2 إلى N-1
إذا كان N Mod i = 0 فإن
isPrime ← خطأ
اخرج من الحلقة
نهاية إذا
نهاية بالنسبة
إذا كان isPrime = صحيح فإن
اكتب(N, " عدد أولي")
وإلا
اكتب(N, " ليس أولياً")
نهاية إذا
نهاية إذا
نهاية الخوارزمية
3. برنامج Pascal:
Program PrimeCheck;
Var
N, i: Integer;
isPrime: Boolean;
Begin
Write('أدخل عدداً صحيحاً موجباً: ');
ReadLn(N);
If N <= 1 Then
WriteLn(N, ' ليس عدداً أولياً')
Else
Begin
isPrime := True;
For i := 2 To N-1 Do
If N Mod i = 0 Then
Begin
isPrime := False;
Break;
End;
If isPrime Then
WriteLn(N, ' عدد أولي')
Else
WriteLn(N, ' ليس عدداً أولياً');
End;
ReadLn;
End.
4. تحسين الكفاءة:
يمكن تحسين الخوارزمية بالاقتصار على القسمة على الأعداد حتى √N بدلاً من N-1:
For i := 2 To Trunc(Sqrt(N)) Do
If N Mod i = 0 Then
Begin
isPrime := False;
Break;
End;
📝 التمرين الثاني: البحث عن أكبر عنصر في مصفوفة (بكالوريا 2017)
اكتب خوارزمية وبرنامجاً بلغة Pascal يقوم بالآتي:
- قراءة عدد صحيح N (10 ≤ N ≤ 50)
- ملء مصفوفة T بعدد N من الأعداد الصحيحة
- إيجاد وعرض أكبر عنصر في المصفوفة مع موقعه (الرقم الترتيبي)
🟢 الحل الكامل
1. التحليل:
- نستخدم مصفوفة أحادية البعد (One-dimensional array)
- نفترض أن أول عنصر هو الأكبر، ثم نقارن مع باقي العناصر
- كلما وجدنا عنصراً أكبر، نحدّث القيمة القصوى والموقع
2. برنامج Pascal:
Program MaxElement;
Var
T: Array[1..50] Of Integer;
N, i, max, pos: Integer;
Begin
// التحقق من صحة الإدخال
Repeat
Write('أدخل عدد العناصر (10-50): ');
ReadLn(N);
If (N < 10) Or (N > 50) Then
WriteLn('خطأ! العدد يجب أن يكون بين 10 و 50.');
Until (N >= 10) And (N <= 50);
// ملء المصفوفة
For i := 1 To N Do
Begin
Write('T[', i, '] = ');
ReadLn(T[i]);
End;
// إيجاد أكبر عنصر
max := T[1];
pos := 1;
For i := 2 To N Do
If T[i] > max Then
Begin
max := T[i];
pos := i;
End;
// عرض النتيجة
WriteLn('أكبر عنصر هو ', max, ' في الموقع ', pos);
ReadLn;
End.
3. سؤال إضافي (للمتفوقين):
عدّل البرنامج ليجد أصغر عنصر أيضاً.
📝 التمرين الثالث: حساب المضروب (Factorial) — بكالوريا 2016
المضروب (Factorial) لعدد صحيح موجب N هو جداء الأعداد من 1 إلى N. يرمز له بـ N!.
مثال: 5! = 5 × 4 × 3 × 2 × 1 = 120
اكتب خوارزمية وبرنامجاً بلغة Pascal:
- يقرأ عدداً صحيحاً N (N > 0)
- يحسب ويعرض N!
- يتأكد من صحة الإدخال (N يجب أن يكون موجباً)
🟢 الحل الكامل
1. برنامج Pascal:
Program Factorial;
Var
N, i: Integer;
fact: LongInt;
Begin
Repeat
Write('أدخل عدداً صحيحاً موجباً: ');
ReadLn(N);
If N <= 0 Then
WriteLn('خطأ! الرجاء إدخال عدد موجب.');
Until N > 0;
fact := 1;
For i := 1 To N Do
fact := fact * i;
WriteLn(N, '! = ', fact);
ReadLn;
End.
2. التوسّع: حساب N! باستخدام While:
Program FactorialWhile;
Var
N, i: Integer;
fact: LongInt;
Begin
Repeat
Write('أدخل عدداً صحيحاً موجباً: ');
ReadLn(N);
Until N > 0;
fact := 1;
i := 1;
While i <= N Do
Begin
fact := fact * i;
i := i + 1;
End;
WriteLn(N, '! = ', fact);
ReadLn;
End.
📝 التمرين الرابع: التحقق من تناظر عدد (Palindrome) — بكالوريا 2020
العدد المتناظر (Palindrome) هو عدد يبقى كما هو عند قراءته من اليسار إلى اليمين أو العكس.
أمثلة: 121, 1331, 12321
اكتب خوارزمية وبرنامجاً بلغة Pascal:
- يقرأ عدداً صحيحاً موجباً N
- يختبر إذا كان N عدداً متناظراً أم لا
- يعرض النتيجة
🟢 الحل الكامل
1. التحليل:
- لعكس عدد: نأخذ باقي قسمة العدد على 10 لنحصل على آخر رقم
- نضيف الرقم إلى العدد المعكوس (نضرب المعكوس في 10 ثم نجمع الرقم)
- نقسم العدد الأصلي على 10 (نتجاهل الرقم الأخير)
- نكرر حتى يصبح العدد 0
2. برنامج Pascal:
Program Palindrome;
Var
N, original, reversed, remainder: Integer;
Begin
Write('أدخل عدداً صحيحاً موجباً: ');
ReadLn(N);
original := N;
reversed := 0;
While N > 0 Do
Begin
remainder := N Mod 10;
reversed := reversed * 10 + remainder;
N := N Div 10;
End;
If original = reversed Then
WriteLn(original, ' عدد متناظر')
Else
WriteLn(original, ' ليس عدداً متناظراً');
ReadLn;
End.
3. اختبار البرنامج:
- المدخل: 121 → original=121, reversed=121 → “متناظر” ✅
- المدخل: 123 → original=123, reversed=321 → “ليس متناظراً” ✅
- المدخل: 1221 → original=1221, reversed=1221 → “متناظر” ✅
📝 التمرين الخامس: متوسط الأعداد الفردية في مصفوفة (سؤال بكالوريا مركب)
اكتب برنامجاً بلغة Pascal يقوم بالآتي:
- قراءة عدد صحيح N (5 ≤ N ≤ 30)
- ملء مصفوفة T بـ N من الأعداد الصحيحة
- حساب وعرض متوسط الأعداد الفردية الموجودة في المصفوفة
- إذا لم توجد أعداد فردية، اعرض رسالة “لا توجد أعداد فردية”
🟢 الحل الكامل
Program OddAverage;
Var
T: Array[1..30] Of Integer;
N, i, sum, count: Integer;
avg: Real;
Begin
Repeat
Write('أدخل عدد العناصر (5-30): ');
ReadLn(N);
Until (N >= 5) And (N <= 30);
For i := 1 To N Do
Begin
Write('T[', i, '] = ');
ReadLn(T[i]);
End;
sum := 0;
count := 0;
For i := 1 To N Do
If T[i] Mod 2 <> 0 Then
Begin
sum := sum + T[i];
count := count + 1;
End;
If count > 0 Then
Begin
avg := sum / count;
WriteLn('عدد الأعداد الفردية: ', count);
WriteLn('متوسطها: ', avg:0:2);
End
Else
WriteLn('لا توجد أعداد فردية في المصفوفة');
ReadLn;
End.
💡 نصائح لبكالوريا الإعلام الآلي
- افهم الخوارزمية أولاً قبل كتابة الكود: ارسم مخططاً انسيابياً أو اكتب pseudo-code.
- التحقق من صحة المدخلات (Validation) — استخدم Repeat … Until مع شرط مناسب.
- انتبه لأنواع البيانات: استخدم Integer للأعداد الصحيحة و Real للأعداد العشرية و LongInt للأعداد الكبيرة.
- اختبار الحالات الحدية: اختبر برنامجك بـ N=0, N=1, N سالب (إن أمكن).
- التهيئة الصحيحة: لا تنس تهيئة المتغيرات قبل استخدامها (مثل sum := 0).
📌 ملخص التمارين
- التمرين 1: الأعداد الأولية — استخدام الحلقات و If مع Mod.
- التمرين 2: أكبر عنصر في مصفوفة — المصفوفات أحادية البعد والمقارنة.
- التمرين 3: حساب المضروب — الحلقات التكرارية مع الجداء.
- التمرين 4: الأعداد المتناظرة — عكس الأرقام باستخدام While و Mod و Div.
- التمرين 5: متوسط الأعداد الفردية — المصفوفات مع الشرط والتراكم.
📍 دروس مشابهة:
- خوارزميات الفرز: Bubble Sort و Selection Sort و Insertion Sort – الثالثة ثانوي (بكالوريا) إعلام آلي – شعبة تقني رياضي
- البرمجة الهيكلية والدوال في لغة C++ – الثالثة ثانوي (بكالوريا) إعلام آلي
مدونة التربية و التعليم في الجزائر – دروس، فروض، نتائج امتحانات مدونة التربية والتعليم في الجزائر | تحضير الدروس، فروض واختبارات، نتائج البكالوريا وBEM، مسابقات التوظيف، والتوجيه المدرسي للطلاب وأولياء الأمور.