( لغات البرمجة ** باسكال ** )
1- لغات البرمجة
من المعروف أن الحاسوب يتكون من مكونين أساسين هما :
أ/ العتاد ( Hard ware) :- و هي المكونات المحسوسة و المرئية كالشاشة و لوحة المفاتيح
ب/ البرمجيات ( soft ware ) :- و هي مجموعة من البرامج التي تدير العتاد من ضمنها لغات البرمجة و نظم التشغيل .
الشكل العام لباسكال :-
Ý) رأس البرنامج :-
ويبدأ بكلمة programو يليها اسم البرنامج ثم بين قوسين عبارتي Input و Output تفصلها فاصلة ( ‘) و ينتهي الرأس بفاصلة منقوطة ( ; ) .
Program circle (input , output ) ;
Program Summation (I , O ) ;
ورأس البرنامج جزء غير أساسي يمكن أن لا يكتب ( اختياري ) 0
ب) جزء التعريفات أو الإعلانات :-
و يتم فيه الإعلان جملة البيانات و الأشياء التي سوف تستخدم في البرنامج ( مدخلات و مخرجات ) و هي علي الترتيب :-
1- أسماء الوحدات :-
وهي التي تمكن من استخدام الدوال المتاحة في باسكال ( Dos ; Crt ; Graph ويبدأ تعريفها بالكلمة Uses 0
Uses
graph, dos;
2- الثوابت :-
و نعني بها العناوين التي لا تقبل تغيير في بياناتها في الذاكرة وتبدأ بالكلمة Const 0
Const
pi =3.14;
3- التعريفات الجديدة :-
و تبدأ بالكلمة Type ويعرف فيها البيانات ذات المدي المحدد مثل أيام الأسبوع و أشهر السنة و كذلك تعرف السجلات .
Type number = 0 .. 60 ( الأعداد المحددة من 0 إلي 60 )
Type اسم السجل = Record
حقل1 و نوع بياناته
حقل2 و نوع بياناته
End ;
Var
اسم السجل : مصفوفة [ أبعادها ] نوع البيانات ;
مثال لتعريف سجل اسمه عناوين يتكون من الحقول ( الاسم ( Name)، الشارع ( Street )، المدينة ( City ) ) .
Type
Address =Record
Name : char;
Street :integer;
City : char
End ;
Var
Student : array [ 1..30 ] of address ;
4-اللافتات :-
و تبدأ بكلمة ( Label )
Label stop, L1;
5– المتغيرات :-
و تبدأ بكلمة ( Var) و يعلن فيها عن البيانات التي تخزن في مواقع و عناوين تقبل التغيير في قيم بياناتها ، إذا كانت بسيطة كالمتغيرات البسيطة أو المركبة كالمصفوفات .
Var
X , Y : Integer ;
Var
St – score : array [ 1 .. 100 ] of Integer ;
6- الإجراءات و تبدأ بكلمة Procedure .
7- الدوال و تبدأ بكلمة Function .
و الدوال و الإجراءات هما عبارة عن مجموعة من البرمجيات الصغيرة ضمن البرنامج الأصلي .
ج) جســـم البرنامج :-
و يحتوي علي مجموعة من الجمل و العبارات تنحصر بين كلمتي ( Begin ) و ( End. )
معالجة البيانات في باسكال
(1) الأعـــــداد ( رقمية و حقيقية ) :-
أ/ المؤثرات الحسابية :-
العملية الوظيفة المدخلات المخرجات
الجمع
رقمية أو حقيقية
رقمي إذا كان المدخلات رقمية و إلا حقيقية
الطرح
الضرب
القسمة
حقيقية
حاصل القسمة الصحيح
رقمية
رقمية
باقي القسمة
رقمية
رقمية
ب / الدوال الحسابية :-
الدالة
الوظيفة
المدخلات
المخرجات
تطبيق
Abs
القيمة المطلقة للعدد
رقمي أو حقيقي
رقمي أو حقيقي
Abs (10);=10
Abs(-3) ;=3
Abs (-4.6) =4.6
مربع العدد
رقمي أو حقيقي
رقمي أو حقيقي
Sqr(10);=100
Sqr(h);=h*h
الجذر التربيعي
حقيقي
حقيقي
Sqrt(100);=10
Sqrt (2.25);=1.5
كشط الحقيقي لرقمي
حقيقي
رقمي
Trunc(2.99);=2
Trunc(88.88);=88
تقريب الحقيقي لرقمي
رقمي أوحقيقي
رقمي
Round(5.1);=5
Round(7.7);=8
جا
رقمي أو حقيقي
حقيقي
جتا
ظا
لو
القوة
(2) الدوال الحرفية :-
Ord
ترتيب الحرف في جدول Ascii
حرفية
رقمية
ord ( ‘A’) = 65
CHR
الحرف المقابل في ِAscii
رقمية
حرفية
Chr ( 65) = A
Succ
القيمة التالية للمدخل
حرفية
حرفية
Succ( ‘a’) = b
Succ( 14) = 15
Pred
القيمة السابقة للمدخل
حرفية
حرفية
Pred( ‘B’) = A
Pred ( 20) = 19
Upcase
الحرف الكبير
حرفية
حرفية
Upcase (‘e’) = E
(3) أدوات المنطقية :-
الأداة في باسكال = = ***8800; < > > > < < ***8805; = > ***8804; = <
IN
بعض الدوال المنطقية :-
Odd ( التحقق من فردية المدخل ، و مخرجها منطقي ( Odd(X) ) .
Eol التحقق من منطقية نهاية سطر ( End of Line ) .
Eof التحقق من منطقية نهاية ملف ( End Of File ) .
بالإضافة لـ And ، Or ، Not .
تطبيق البرمجة بلغة باسكال
ýالغرض من كتابة برنامج هو الحصول علي مخرج أو مخرجات تفي لحاجة معينة .
ýكتابة أي برنامج تمر بثلاثة مراحل :-
1)كتابة البرنامج بلغة البرمجة المختارة ( باسكال ) .
2)تصويب الأخطاء ( الترجمة ) .
3)تنفيذ البرنامج للحصول علي المخرجات .
ýيتكون البرنامج من ثلاثة مكونات :-
1) المدخلات :- و لها عبارة خاصة في باسكال هي ( Read و Readln ) ، و الفرق بينها أن Read تقوم بالادخال مع إبقاء مؤشر الإدخال في نفس السطر ، بعكس Read يتحرك مؤشر الادخال للسطر التالي .
2) المدخلات : و تستخدم لها العبارة write ) و writeln ) و الاختلاف في أن writeln يتحرك مؤشر الاخراج للسطر التالي .
3) المعالجات ( المعادلات ) :
ý تكتب الملاحظات و التعليقات بالشكل التالي :-
1) (* التعلـــــــــــــــــــــــــيق *) .
2) { التعلــــــــــــــــــــــــــــــيق }
ý كل سطر في باسكال ينتهي بفاصلة منقوطة ( ; ) .
ý أي عبارة محصورة بين علامتي تنصيص مفردة ( ‘My Name Is Adam’ ) تخرج كما هي .
ý عبارة writeln عندما تكون خالية من جملة إخراجية ، بقصد منها ( ترك سطر فارغ ) .
أمثلة تطبيقية بسيطة علي البرمجة بباسكال :-
1) برنامج يقوم بإخراج جملة نحن طلاب السودان ( We are the student of Sudan )
Program sent ( output ) ;
Begin
Write ( ‘ We are the student of Sudan ‘ ) ;
End .
2) برنامج يستقبل رقم ، و يخرجه مصحوبا برسالة ( الرم المفضل favorite number ) .
Program favorite ( input ‘ output );
Var
Num : integer ;
Begin
Readln ( Num ) ;
Write ( Num , ‘favorite number’ ) ;
End .
3) وضح شكل مخرجات البرنامج التالي :
Program I only ( Input ,output ) ;
I 5 I
————–
I = 5
Const
I = 5 ;
Begin
Write ( ‘ I ‘ ) ;
Write ( I ) ;
Writeln ( ‘ I ‘ ) ;
Writeln ;
Write ( ‘ I = ‘ , I ) ;
End .
4) برنامج يقرأ نصف قطر ( r ) و يقوم بحساب مساحة الدائرة ( Ar ) .
Program circle ( input , output ) ;
Const
Pi = 3.14 ;
Var
R : integer ;
Ar : real ;
Begin
Readln ( r ) ;
Ar := Pi * sqr ( r ) ;
Writeln ( Ar ) ;
End .
(5) –
برنامج يحسب مساحة المثلث الذي أضلاعه (A ، B ، C ) وفق المعادلة (Ar = ***8730;s(s-A)(s-B)(s-C) )
و ( s =(A + B + C)/2 ) .
Program triangle ( input ; output );
Var
A , B , C , s , Ar : real ;
Begin
Readln ( A , B , C ) ;
S := ( A + B + C ) / 2 ;
Ar := sqrt ( s * ( s – A ) * ( s – B ) * ( s – C ) ) ;
Writeln( Ar ) ;
End .
(6) برنامج يستقبل عدد من الأيام و يحسب منها عدد السنوات و الشهور و الأيام ، بافتراض أن عدد أيام الشهر 30 يوم و السنة 360 يوم ؟
Program day ( input , output ) ;
Var
Days , year , month , rem day : integer ;
Begin
Readln ( days );
Year := days Div 360 ;
rem := days Mod 360 ;
month := rem Div 30 ;
day := rem Mod 30 ;
write ( year ,’ ‘, month ,’ ‘ , day ) ;
End .
عبارات التحكم
( 1 ) عبارة ( IF )
تستخدم عندما يكون تنفيذ الجمل مرتبط بشرط أو تعبير منطقي ، مثلا عندما يقرأ برنامج رقما و يحدد إن كان زوجي أم لا .
الصيغة العامة :-
IF < متغير > ( تعبير منطقي ) Then
جملة أو جمل ;
Else
جملة أو جمل ;
End .
تنفذ الجملة بعد IF في حالة التعبير المنطقي صواب و إلا تنفذ الجملة بعد Else .
ملاحظة :-
( الجملة التي تسبق Else لا تنتهي بفاصلة منقوطة ( ; ) .
أمثلة تطبيقية علي البرمجة بعبارة ( IF ) :-
1) أكتب برنامج يستقبل رقم و يخرج رسالة توضح أنه فردي ( odd ) أم زوجي ( even ) ؟
Program odd ( I , O ) ;
Var
X : integer ;
Begin
Readln ( X ) ;
IF X Mod 2 <> 0 Then
Write ( ‘ odd ‘ )
Else
Write ( ‘ even ‘ ) ;
End .
2) البرنامج السابق لكن يوضح إن كان الرقم موجب ( positive ) أم سالب ( negative ) .
Program positive ( I , O ) ;
Var
X : integer ;
Begin
Readln ( X ) ;
IF X > 0 Then
Write ( ‘ positive ‘ )
Else
Write ( ‘ negative ‘ ) ;
End .
3) برنامج يستقبل رقم ثم يطبعه إذا كان يقبل القسمة علي 2 و 7 ؟
Var
S : integer ;
Begin
Readln ( S ) ;
IF ( S Mod 2 = 0 ) And ( S Mod 7 = 0 ) Then
Write ( ‘ done ‘ ) ;
End .
4) برنامج يقرأ رقمين و يطبع ( they do ) إذا كانا يقبلان القسمة علي 6 ؟
Var
S , X : integer ;
Begin
Readln ( S , X ) ;
If ( S Mod 6 = 0 ) And ( X Mod 6 = 0 ) Then
Write ( ‘ they do ‘ ) ;
End.
5) برنامج يقرأ حرف و يطبع vowel letter إن كان الحرف من الحروف الإنجليزية المتحركة ( علة )
Var
C : char ;
Begin
Readln ( C ) ;
C := Upcase ( c ) ;
IF ( c = ‘A’ ) or ( c = ‘E’) or ( c = ‘I’ ) or ( c = ‘O’ ) or ( c = ‘U’) Then
Write ( ‘ vowel letter ‘ )
Else
Write ( ‘ not vowel letter ‘ ) ;
End .
ملاحظـــة : – ( استخدام المؤثر ينتمي ( IN ) :-
6) برنامج يقرأ رقم ، إذا كان يقع بين صفر و 50 يطبع ( right ) ؟
Var
Z : integer ;
Begin
Readln ( z ) ;
IF z IN [ 1 .. 49 ] Then
Write ( ‘ right ‘ )
Else
Write ( ‘ not right ‘ ) ;
End .
7) حل آخر للسؤال رقم (5) باستخدام IN ؟
Var
C : char ;
Begin
Readln ( C ) ;
C := Upcase ( c ) ;
IF C IN [ ‘A ‘ , ‘E ‘ , ‘ I ‘ , ‘ O ‘ , ‘ U ‘ ] Then
Write ( ‘ vowel letter ‘ )
Else
Write ( ‘ not vowel letter ‘ ) ;
End .
الحلقات التكرارية
(1) حلقة ( For ….. Do )
تستخدم عندما تكون عدد مرات التكرار معلوم مسبقا .
الصيغة العامة :-
For < متغير > := < قيمة ابتدائية > To ( Downto ) < قيمة نهائية > Do
جملة أو جمل ;
ملاحظات :-
· عدد مرات التكرار = الفرق القيمة الابتدائية و النهائية + 1 .
· تستخدم To عندما تكون القيمة الابتدائية أصغر من النهائية ، و العكس Downto عند النهائية أصغر من الابتدائية .
· إذا كانت جملة For مركبة أكثر من جملة ) تحصر بين كلمتي Begin و End; .
تطبيق علي هذه الملاحظات :-
** For s := 5 To 11 Do
Write ( s ) ;
** For s := 11 Downto 5 Do
write ( s ) ;
** For s := 7 To 14 Do
Begin
write ( s + s ) ;
write ( s * s ) ;
End ;
End .
تطبيق علي حلقة For … Do :-
1) برنامج يطبع جملة ربي ( My God ) مائة مرة ؟
Var
I : integer ;
Begin
For I := 1 To 100 Do
Write ( ‘ My God ‘ ) ;
End .
2) برنامج بطبع الأرقام من 19 إلي 39 ؟
Var
s : integer ;
Begin
For s := 19 To 39 Do
Writeln ( s ) ;
End .
3) برنامج يطبع الحروف من a إلي I ؟
Var
s : char ;
Begin
For s := ‘a’ To ‘i’ Do
Writeln ( s ) ;
End .
4) برنامج بطبع مربعات الأرقام من 19 إلي 39 ؟
Var
s : integer ;
Begin
For s := 19 To 39 Do
Write ( sqr( s )) ;
End .
5) برنامج يحسب و يطبع حاصل جمع الأرقام ن 13 إلي 99 ؟
Var
S , sum : integer ;
Begin
Sum := 0 ;
For s := 13 To 99 Do
Sum := sum + s ;
Write ( sum ) ;
End .
6) برنامج يحسب و يطبع حاصل ضرب الأرقام من 5 إلي 12 ؟
Var
Mut : longint ;
S : integer ;
Begin
Mut := 1 ;
For s := 5 To 12 Do
Mut := Mut * s ;
Write ( Mut ) ;
End .
7) برنامج يحسب مجموع مربعات الأرقام من 8 إلي 18 و متوسطها ؟
Var
I , sumsqr : integer ;
Avg : real ;
Begin
Sumsqr := 0 ;
For I := 8 To 18 Do
Sumsqr := sumsqr + sqr ( I ) ;
Writeln ( sumsqr ) ;
Avg := sumsqr / 11;
Write ( avg ) ;
End.
8) برنامج يحسب و يطبع مضروب أي رقم ( X ) ؟
Var
Fact : longint ;
X , I : integer ;
Begin
Fact := 1 ;
Readln ( X ) ;
For I := X Downto 1 Do
Fact := fact * I ;
Write ( fact ) ;
End .
9) برنامج يحسب و يطبع مجموع مربعات و متوسط أي أرقام في مدي محدد يبدأ بالرقم A و ينتهي بالرقم B) ؟
Var
A , B , sum : integer ;
Avg : real ;
Begin
Sum := 0 ;
Readln ( A , B ) ;
For I := A To B Do
Sum := sum + sqr ( I ) ;
Avg := sum / ( B – A + 1 ) ;
Writeln ( sum ;
Write ( Avg ) ;
End .
** تستخدم عندما تكون مرات التكرار غير معلومة .
** بالضرورة أن تبدأ بقيمة ابتدائية .
** المخطط أدناه يوضح خطوات عمل حلقة while … Do .
قارن
نفذ
غير القيمة
النهاية
[IMG]file:///C:/DOCUME~1/0000/LOCALS~1/Temp/msohtmlclip1/01/clip_image005.gif[/IMG][IMG]file:///C:/DOCUME~1/0000/LOCALS~1/Temp/msohtmlclip1/01/clip_image006.gif[/IMG]
أمثلة تطبيقية :-
1) مستخدما حلقة while أكتب برنامج لطباعة الأرقام من 1 – 10 ؟
Var
X : integer ;
Begin
X := 0 ;
While X < 10 Do
Begin
X := X + 1 ;
Write ( X ) ;
End ;
End .
حل آخر :
Var
X : integer ;
Begin
X := 1 ;
While X <= 10 Do
Begin
Write ( X ) ;
X := X + 1 ;
End ;
End .
2) برنامج يحسب حاصل جمع الأرقام من -30 إلي 95 و يطبعه ؟
Var
X , sum : integer ;
Begin
Sum := 0 ;
X := -30 ;
While X <= 95 Do
Begin
Sum := sum + X ;
X := X + 1 ;
End ;
Write ( sum ) ;
End .
3) يطبع الأرقام 10 ، 20 ، 30 ، 40 و يتوقف عند 100 ؟
Var
X : integer ;
Begin
X := 0 ;
Begin
While X < 100 Do
Begin
X := X + 10 ;
Writeln ( X ) ;
End ;
End .
4) طباعة الأرقام التي تقبل القسمة علي 3 في المدى من 1 إلي 50 ؟
Var
X , C : integer ;
Begin
X := 0 ;
C := 0 ;
While X <= 50 Do
Begin
X := X + 1 ;
If X Mod 3 = 0 Then
C := C + 1 ;
End :
End .
هي كحلقة while ، لكن ليس بالضرورة وجود قيمة ابتدائية ، لأنها تنفذ قبل المقارنة .
مخطط يوضح عمل حلقة Repeat .. until :—
قارن
نفذ
غير القيمة
النهاية
[IMG]file:///C:/DOCUME~1/0000/LOCALS~1/Temp/msohtmlclip1/01/clip_image005.gif[/IMG][IMG]file:///C:/DOCUME~1/0000/LOCALS~1/Temp/msohtmlclip1/01/clip_image006.gif[/IMG]
الصيغة العامة :-
Repeat < جملة > Until
تعبير منطقي
أمثلة تطبيقية :-
1) برنامج يقرأ مجموعة من الأرقام ، يطبع مجموعها و يتوقف بإدخال رقم سالب ؟
Var
X , Sum : integer ;
Begin
Sum := 0 ;
Repeat
Sum := sum + X ;
Readln ( X ) ;
Until X < 0 ;
Write ( sum ) ;
End .
ملاحظة :- ( الجمل المركبة في Repeat لا تحصر بين Begin و End ; .
مثال ( 2 ) طباعة الأرقام من 1 – 10 ؟
Var
X : integer ;
Begin
X := 0 ;
Repeat
X := X + 1 ;
Writeln ( x ) ;
Until
X > 9 ;
End.
3) طباعة حاصل جمع الأرقام من -30 إلي 95 ؟
Var
X , sum : integer ;
Begin
Sum := 0 ;
X := -30 ;
Repeat
Sum := Sum + X ;
X := X + 1 ;
Until
X > 95 ;
Write ( sum ) ;
End .
4) يطبع الأرقام 10 ، 20 ، 30 و يتوقف عند 100 ؟
Var
X : integer ;
Begin
X := 10 ;
Repeat
Write ( X ) ;
X := X + 10 ;
Until
X > 100 ;
End .
5) طباعة الأرقام من 1 إلي 50 و التي تقبل القسمة علي 3 ؟
Var X : integer ; Begin X := 0 ; Repeat X := X + 1 ; If X Mod 3 = 0 Then Writeln ( X ) Until X >= 50 ; End .