الخوارزميات العددية في لغة Pascal: حساب القواسم والمضاعفات والأعداد الأولية والعوامل (Factoriel) مع تمارين محلولة
📌 الأهداف التعليمية:
- كتابة خوارزميات لحساب القواسم والمضاعفات في Pascal
- اختبار الأعداد الأولية باستخدام الخوارزميات
- حساب العوامل (Factoriel) لعدد صحيح
- تطبيق الحلقات التكرارية في حل مسائل عددية
📖 الشرح النظري:
1. حساب العوامل (Factoriel – Factorial) :
عامل العدد n (يكتب n!) هو حاصل ضرب الأعداد من 1 إلى n.
صيغته: n! = 1 × 2 × 3 × … × n
مثال: 5! = 1 × 2 × 3 × 4 × 5 = 120
خوارزمية حساب n! :
Function Factoriel(n: Integer): LongInt;
Var i: Integer; f: LongInt;
Begin
f := 1;
For i := 1 To n Do
f := f * i;
Factoriel := f;
End;
2. اختبار العدد الأولي (Nombre premier – Prime Number) :
العدد الأولي هو عدد طبيعي أكبر من 1 يقبل القسمة فقط على 1 وعلى نفسه.
خوارزمية اختبار الأولية (الطريقة البسيطة):
Function EstPremier(n: Integer): Boolean;
Var i: Integer;
Begin
EstPremier := True;
If n < 2 Then
EstPremier := False
Else
For i := 2 To n Div 2 Do
If n Mod i = 0 Then
Begin
EstPremier := False;
Break;
End;
End;
3. حساب القاسم المشترك الأكبر (PGCD) بطريقة إقليدس :
خوارزمية إقليدس: PGCD(a,b) = PGCD(b, a Mod b) مع التكرار حتى يصبح الباقي صفراً.
Function PGCD(a, b: Integer): Integer;
Var r: Integer;
Begin
While b <> 0 Do
Begin
r := a Mod b;
a := b;
b := r;
End;
PGCD := a;
End;
4. حساب المضاعف المشترك الأصغر (PPCM) :
PPCM(a,b) = (a * b) / PGCD(a,b)
Function PPCM(a, b: Integer): Integer; Begin PPCM := (a * b) Div PGCD(a, b); End;
5. إيجاد جميع قواسم عدد :
Procedure AfficherDiviseurs(n: Integer);
Var i: Integer;
Begin
Write('Les diviseurs de ', n, ' sont: ');
For i := 1 To n Do
If n Mod i = 0 Then
Write(i, ' ');
WriteLn;
End;
📝 تمارين بكالوريا محلولة:
تمرين 1: اكتب برنامجاً كاملاً يقرأ عدداً صحيحاً موجباً n ويحسب قيمة n! (عامله).
الحل:
Program CalculFactoriel;
Var n, i: Integer; f: LongInt;
Begin
Repeat
Write('Donnez un entier positif: '); ReadLn(n);
Until n >= 0;
f := 1;
For i := 1 To n Do
f := f * i;
WriteLn(n, '! = ', f);
ReadLn;
End.
تمرين 2: اكتب برنامجاً يقرأ عددين صحيحين موجبين ويطبع PGCD و PPCM لهما.
الحل:
Program PGCD_PPCM;
Var a, b, x, y, r, p: Integer;
Begin
Write('a = '); ReadLn(a);
Write('b = '); ReadLn(b);
x := a; y := b;
While y <> 0 Do
Begin
r := x Mod y;
x := y;
y := r;
End;
p := (a * b) Div x;
WriteLn('PGCD(', a, ',', b, ') = ', x);
WriteLn('PPCM(', a, ',', b, ') = ', p);
ReadLn;
End.
تمرين 3 (بكالوريا): اكتب برنامجاً يقرأ عدداً صحيحاً N ويطبع جميع الأعداد الأولية الأصغر من أو تساوي N.
الحل:
Program NombresPremiers;
Var N, i, j: Integer; estPremier: Boolean;
Begin
Write('N = '); ReadLn(N);
WriteLn('Les nombres premiers <= ', N, ' sont:');
For i := 2 To N Do
Begin
estPremier := True;
For j := 2 To i Div 2 Do
If i Mod j = 0 Then
Begin
estPremier := False;
Break;
End;
If estPremier Then
Write(i, ' ');
End;
WriteLn;
ReadLn;
End.
🔗 دروس مشابهة:
- المصفوفات (الجداول) في لغة Pascal: تعريفها وأنواعها ومعالجتها
- الدوال والإجراءات (Subroutines) في لغة Pascal
مدونة التربية و التعليم في الجزائر – دروس، فروض، نتائج امتحانات مدونة التربية والتعليم في الجزائر | تحضير الدروس، فروض واختبارات، نتائج البكالوريا وBEM، مسابقات التوظيف، والتوجيه المدرسي للطلاب وأولياء الأمور.