المتحكمات والتكرار

الفصل الثالث

Pascal بتقدملك طرق للتحكم فى برنامج وإختبارات -مثل كل اللغات- خلال البرنامج مثل if, then ,elseif, else, case, .. etc.

if then
if_suite

تابع المثال التالى فى حال إذا كان الName الذى هيدخله المستخدم قيمته ahmed سينفذ الBlock -مجموعة الأسطر-التالية ل then وإلا لن يتم تنفيذ شئ -لأننا لم نخبر برنامجنا إن يعمل شئ معين لو Name قيمته ليست احمد 🙂

 var
  Name: String;
  
begin
  Write('Enter your name: ');
  ReadLn(name);

  if name = 'ahmed' then
   WriteLn('Access Granted.');
  {else
   WriteLn('Access Denied.');
  }
  ReadLn();

end.

ملحوظة:
:= -> لإسناد قيمة
= -> لإختبار قيمة

 X := 5;

هنا اعطينا المتغير X ال 5

 x = 5;
 x = 5 

هنا بنختبر هل ال او لأ!

if then
if_suite
else
else_suite

var
  Name: String;
  
begin
  Write('Enter your name: ');
  ReadLn(name);

  if name = 'ahmed' then
   WriteLn('Access Granted.')
  else
   WriteLn('Access Denied.');

  ReadLn();

end. 

لاحظ دور else هنا .. إن إذا تم إدخال اى قيمة غير ahmed هيتنفذ الBlock التابع ل else وهو Access Denied!

var
  age: Integer;
  
begin

  WriteLn('Enter your age: ');
  ReadLn(age);
  
  if age < 18 then
     WriteLn('Not old enough for driving test.');
  else
     WriteLn('GOOD LUCK!');
end. 
 &#91;/sourcecode&#93;

لو العمر اقل من 18 سينفذ هذا الblock
&#91;sourcecode lang="delphi"&#93;WriteLn('Not old enough for driving test.'); &#91;/sourcecode&#93;

لو لأ سيتنفذ 
&#91;sourcecode lang="delphi"&#93;WriteLn('GOOD LUCK!');
 &#91;/sourcecode&#93;
    



<strong>if/else if/ else</strong>

if  then
<em>if_suite</em>
elseif  then
<em>elseif_suite</em>
else
<em>else_suite</em>

تابع المثال التالى

 var
  Number: Integer;
  
begin
     Write('Enter a number in range 1, 5: ');
     ReadLn(Number);
     
     if Number=1 then
        WriteLn('One!')
     else if Number=2 then
        WriteLn('Two!')
     else if Number=3 then
        WriteLn('Three!')
     else if Number=4 then
        WriteLn('Four!')
     else if Number=5 then
        WriteLn('Five!')
     else
        WriteLn('It is not in range 1 to 5');

     ReadLn();
end.

لاحظ طالما نقوم بعمل Fall فالأفضل نستخدم switch statement كالتالى

var
   dayNum: Integer;
   
begin
     Write('Enter: ');
     ReadLn(dayNum);
     
     case dayNum of
          1: WriteLn('Sunday');
          2: WriteLn('Monday');
          3: WriteLn('Tuesday');
          4: WriteLn('Wednesday');
          5: WriteLn('Thursday');
          6: WriteLn('Friday');
          7: WriteLn('Saturday');
          else //default
               begin
                    WriteLn('U R on EARTH!');
               end;

     end;
          
     ReadLn;
end. 

لاحظ هنا اننا نعمل check على dayNum ونرى اى حالة ستتوافق معاه…
نقدر نستخدم case مع ranges -واضح من كلامنا ان range معناها range 😀
ال range هو الفترة (مثلا 1..5 هو الأرقام من 1 الى 5)

var
   Age: Integer;
   
begin
     Write('Age? ');
     ReadLn(Age);
     
     case Age of
          1..5 : WriteLn('Cute Baby!');
          6..10: WriteLn('Mean kid!');
          11..14: WriteLn('Boy!');
          15..18: WriteLn('Teen!');
          19..23: WriteLn('Adult!');
          24..40: WriteLn('Regular guy');
          41..60: WriteLn('Gettin older!');
          else
              begin
                   WriteLn('R U Human?');
              end;
     end;


التكرار
اى Loop عبارة عن تكرار suite او مجموعة من ال statements ل
1 – عدد من المرات
2- حتى يتحقق شرط ما

طبعا كلام عجيب 🙂

التكرار لعدد من المرات معناه اقرب مثال .. نفذ 100 تمرين ضغط !
تكرار لحد ما شرط يتحقق مثلا
طالما جائع كلّ

while do
loop_suite

   while i = 0 do
           begin
                WriteLn(i);
                Dec(i); // i := i - 1;
           end; 

طالما i اكبر من او تساوى صفر سينفذ ال Block التالى

begin
                WriteLn(i);
                Dec(i); // i := i - 1;
           end; 

فى loop تانية وهى

 repeat
        loop_suite
until ;

الفرق هو إن ال loop_suite بتتنفذ قبل مايتم إختبارها.. فعشان كدا ال loop_suite لازم تتنفذ ولو مرة واحدة على الأقل!

فى loop هنشوفها كتير وهى ال for loop وهى كالتالى
تصاعدية

for  to  do
for_suite 

تنازلية

for  downto  do
for_suite 
 var
   counter: Integer;
   
begin
     for counter := 0 to 10 do
         begin
              WriteLn('Counter: #', counter);
         end;

         ReadLn;
end.

تنبيه: إذا معتاد على

for(start; cond; inc){
        for_suite
} 

فالأفضل هنا إنك تستخدم ال while loop لتكون اسهل فى التحكم فى مقدار ال step -الخطوة-

الأوسمة: , , ,

رد واحد to “المتحكمات والتكرار”

  1. mrf3 Says:

    اشكرك اخي الكريم على التدوينة … الرائعة …

    و من أهم الأمور فهم المتحكمات .. افدتنا ..

    بارك الله فيك ..

أضف تعليق