الدرس الرابع: الجمل الشرطية و حلقات التكرار (دورة الـphp)
09-08-2009, 07:43 PM
4.1) الجمل الشرطية و حلقات التكرار:
وصلنا بفضل الله إلى الدرس الرابع الذي نشرع فيه على بركة الله.سنتكلم اليوم عن الجمل الشرطية و حلقات التكرار، هذا الدرس من أسهل الدروس، بسيط للغاية لكن جد مهم للمتابعة.
لكن عليكم التحلي بالصبر و قراءته كاملا رغم طوله فهو جد مهم أيضا.
أولا: الجمل الشرطية:
نستعملها عندما نكون بصدد دراسة قيمة ما أو شرط ما، فإن تحقق الشرط نفعل كذا و إن لم يتحقق نفعل كذا.
أكاد أجن، ما هو الشرط، و ما هو كذا، وضح وضح كفانا كلاما مبهما.
لا باس أعرف أنك لا تحب إلا الأمثلة، كما تريد.
إذا أردنا أن نقارن بين رقمين الشرط يكون هكذا:
إذا كان س < ع إذن
نكتب "س أكبر من ع"
و إلا
نكتب "س ليس أكبر من ع"
لكن PHP لا يفهم العربية، فنكتبها بالإنجليزية:
كود PHP:
<html dir=rtl>
<head>
<title>الشروط </title>
</head>
<body>
<?php
$x=10;$y=20;
If ($x>$y)
{
echo "x est supérieur à y";
}
else
{
echo "x n'est pas supérieur à y";
}
?>
</body>
</html>
إذن كما رأينا البناء يكون كالتالي:
if (condition)i
{
Instruction 1;
}
else
{
Instruction 2;
}
{
Instruction 1;
}
else
{
Instruction 2;
}
مثال ثان:
نريد أن نكتب إسم اليوم بالحصول على رقمه، يمكننا القيام بذلك بطرق عديدة.
طريقة 1:
كود PHP:
<?php
$num_day=2;
if($num_day == 1)
{echo "c\'est Samedi";}
if($num_day == 2)
{echo "c\'est Dimanche";}
if($num_day == 3)
{echo "c\'est Lundi";}
if($num_day == 4)
{echo "c\'est Mardi";}
if($num_day == 5)
{echo "c\'est Mercredi";}
if($num_day == 6)
{echo "c\'est Jeudi";}
if($num_day == 7)
{echo "c\'est Vendredi";}
?>
سهل نكتب في النهاية else و هي تعني إذا لم يتحقق الشرط، و نخبره أن رقمه خاطئ..........
لكن أن نكتب else في النهاية و هي تعني (إن لم يتحقق الشرط الأخير) سيكون هنالك مشكل.
يمكنك أن تجرب:
كود PHP:
<?php
$num_day=2;
if($num_day == 1)
{echo "c\'est Samedi";}
if($num_day == 2)
{echo "c\'est Dimanche";}
if($num_day == 3)
{echo "c\'est Lundi";}
if($num_day == 4)
{echo "c\'est Mardi";}
if($num_day == 5)
{echo "c\'est Mercredi";}
if($num_day == 6)
{echo "c\'est Jeudi";}
if($num_day == 7)
{echo "c\'est Vendredi";}
else{echo "Le numero est faux";}
?>
لذلك نستعمل الطريقة الثانية أفضل.
طريقة 2:
كود PHP:
<?php
$num_day=2;
if($num_day == 1)
{echo "c\'est Samedi";}
elseif($num_day == 2)
{echo "c\'est Dimanche";}
elseif($num_day == 3)
{echo "c\'est Lundi";}
elseif($num_day == 4)
{echo "c\'est Mardi";}
elseif($num_day == 5)
{echo "c\'est Mercredi";}
elseif($num_day == 6)
{echo "c\'est Jeudi";}
elseif($num_day == 7)
{echo "c\'est Vendredi";}
else
{echo "le numero est faux";}
?>
و بذلك else الأخيرة ستنفي كل الشروط و لن تعمل حتى يكون الرقم المختار غير موجود في القائمة كلها.
لم أفهم جيدا لماذا يحدث هذا ؟؟؟؟
صدقني لا أستطيع أن أشرح أبسط من هذا، ما عليك سوى المحاولة بالأمثلة و بالطريقتين و مع تغيير الأرقام فتفهم من النتائج، هيا حاول.
على أي حال هناك طريقة أسهل عندما يتعلق الأمر بتغير قيمة متغير (كما في المثال السابق) و ليس بشرط مقارنة (كما في المثال الأول (أكبر و أصغر) و هي كالتالي:
طريقة 3:
كود PHP:
<?php
$x=2;
switch($x)
{
case 1 : echo"c\'est Samedi"; break;
case 2 : echo"c\'est Dimanche"; break;
case 3 : echo"c\'est Lundi"; break;
case 4 : echo"c\'est Mardi"; break;
case 5 : echo"c\'est Mercredi"; break;
case 6 : echo"c\'est Jeudi"; break;
case 7 : echo"c\'est Vendredi"; break;
default: echo"Le numero est faux";
}
?>
لكنها تعمل مع القيم الثابتة للمتغيرات و ليس مع شروط المقارنة، و أتمنى أن أرى الأسئلة في حالة الإبهام.
شرح كيفية العمل:
وفقا لقيمة (س)
{
في حالة القيمة 1 : أكتب "السبت"، كسر سلسلة الأوامر،
في حالة القيمة 2 : أكتب "الأحد"، كسر سلسلة الأوامر،
....
....
....
في حالة قيمة لم نذكرها : أكتب "رقم خطأ"،
}
break; تعني أن يكسر سلسلة الأوامر بمعنى ينفذ الأمر الذي قبلها و يتوقف.
مثال عكسي للفهم:
إذا لم نكتب break و نختار الرقم 4
النتيجة سيكتب MardiMercrediJeudiVendredi
يعني يكتب الأمر الرابع و السلسلة التي بعده.
لكن Break يكسر سلسلة الأوامر فينفذ الأمر الرابع و يتوقف.
لكن عليك التجريب بنفسك.
أظن أن هذا يكفي الآن، رأينا المبادئ و يبقى التطبيقات فيما بعد.
ثانيا حلقات التكرار:
حلقات التكرار هي نظام يسمح لنا بتكرار الأوامر عدة مرات بدل كتابتها و إعادة كتابتها.
يمكننا أن نكرر الأوامر لعدد معين من المرات أو نتوقف إذا تحقق شرط ما.
توجد العديد من أنظمة التكرار، while(مادام)، for (من أجل)، do while (إفعل كذا حتى ...)، foreach (من أجل عناصر تنتمي لجدول)
هذه الأخيرة (foreach) لن نتطرق إليها الآن حتى ندرس الجداول.
مثلا أريد أن أكتب الأرقام الطبيعية بدءا من 0 إلى 10. يمكن أن أكتب أمر echo 11 مرة، لكن PHP يمكنه أن يكرر الكتابة بأمر واحد و حلقة تكرار واحدة دون أن يتعبني.
الحلقة while:
تقوم بالعمل التالي:
نفرض في البداية س=0
مادام المتغير س أصغر من أو يساوي 10
{
أكتب س
ثم أضف 1 لقيمة س
}
هكذا باختصار و ترجمتها إلى PHP تعطينا التالي:
كود PHP:
<?php
$x=0;
while ($x<=10)
{
echo $x."<br/>";
$x=$x+1;
}
?>
إذن نستعمل هذه الحلقة إذا كان التوقف عن التكرار متعلقا بشرط ما.
الحلقة for:
عمله كالآتي:
من أجل قيم من 0 إلى 10 للمتغير س
{
أكتب س
}
هذه أبسط هاه. نترجمها إذن:
كود PHP:
<?php
for ($x=0;$x<=10;$x++)
{
echo $x."<br/>";
}
?>
$x++ معناها $x+=1 و معناها أيضا: $x=$x+1
أي في كل مرة نضيف 1 للمتغير. و هذا يعني أن الخطوة بين القيم ستكون 1.
هذه الحلقة نستعملها عندما يكون عندنا عدد معلوم من مرات التكرار.
قد تظهر الحلقتين متماثلتين لكن لكل منهما دور مختلف لا تؤديه الأخرى إلا في حالات خاصة كمثالنا هذا.
الحلقة do while:
تقوم بنفس عمل while لكن الفرق الوحيد هو أن while تتحقق من الشرط قبل العمل أي إذا بدأنا بشرط خاطئ فإنها لا تعمل أبدا، لكن do while تعمل ثم تتحقق من الشرط أي إذا بدأنا بشرط خاطئ فستعمل مرة واحدة.
و هما تستعملان حسب الحاجة و سنرى فيما بعد كيف نحتاج لواحدة دون الأخرى.
كود PHP:
<?php
$x=0;
do
{
echo $x."<br/>";
$x++;
}while($x<=10)
?>
أعلم أن الدرس أتعبكم لكنه مهم جدا جدا بالإضافة إلى درس المتغيرات.
باستعمال هذه الأدوات (المتغيرات، الجمل الشرطية، حلقات التكرار) سيكون في مقدورنا عمل أشياء كثيرة لذلك فضلت أن نثبت هذه المفاهيم بإمتحان بسيط في المرة المقبلة فتجهزوا.
سيكون كل واحد مطالب بالقيام بتطبيقات وحده، ثم نصححها في الأخير.
و في الإنتظار تمعنوا في التمرين التطبيقي التالي:
باستعمال هذه الأدوات (المتغيرات، الجمل الشرطية، حلقات التكرار) سيكون في مقدورنا عمل أشياء كثيرة لذلك فضلت أن نثبت هذه المفاهيم بإمتحان بسيط في المرة المقبلة فتجهزوا.
سيكون كل واحد مطالب بالقيام بتطبيقات وحده، ثم نصححها في الأخير.
و في الإنتظار تمعنوا في التمرين التطبيقي التالي:
التمرين:
نريد صفحة PHP تطلب من الزائر أن يعطينا عددين طبيعيين مختلفين فنكتب له جميع الأعداد الأولية بينهما.
نريد صفحة PHP تطلب من الزائر أن يعطينا عددين طبيعيين مختلفين فنكتب له جميع الأعداد الأولية بينهما.
يمكنك القيام بالتطبيق مباشرة.
إن لم تكن لديك أي فكرة عن كيفية العمل تابع التحليل.
التحليل:
التحليل مهم جدا في البرمجة و هو التفكير في مراحل القيام بالعمل و هو خارج عن لوحة المفاتيح بل نقوم به بورقة و قلم لترتيب الأفكار.
أولا علينا معرفة المعطيات و المطلوب و مراحل الوصول إلى المطلوب انطلاقا من المعطيات.
المعطيات عددان طبيعيان مختلفان (أي أكيد سيكون أحدهما أكبر من الآخر)
المطلوب جميع الأعداد الأولية بين العددين المعلومين.
العدد الأولي هو العدد الذي يقبل القسمة على نفسه و على 1 فقط.
إذن لمعرفة إن كان عدد أولي أو لا علينا أن ننشئ قواسمه و نرى إن كانت الرقم 1 و العدد نفسه فقط.
الآن كيف ننشئ قواسم عدد ؟؟
نعلم أن قسمة عدد على أحد قواسمه تعطينا عددا صحيحا (بدون فاصلة)
إذن باقي قسمة عدد على أحد قواسمه هو 0
جيد و جدنا مراحل العمل و رتبنا الأفكار.
نسمي العددين المعطيين س و ع مثلا، ثم ننشئ قواسم الأعداد بين س و ع، و إذا وجدناه أوليا نكتبه.
حاول الآن بمفردك، هيا حاول قليلا.
إذا كنت غير قادر أبدا على العمل وحيدا لابأس أنظر الحل.
الحل المفصل:
ليكن عدد س نريد أن نعرف عن كان أوليا.
نقوم بتجريب قسمته على الأرقام من واحد إلى س (بحلقة تكرار) و نتوقف عند أول قاسم له (أي عندما يكون باقي القسمة 0)
إذا كان القاسم ليس س إذن فالعدد س ليس أولي (لأن س يقبل القسمة على هذا القاسم)
و إلا فـ س أولي.
جرب التالي:
إذن الآن يمكننا أن نعرف إن كان عدد أولي أو لا.
الآن نضع هذا الكود في حلقة تكرار أخرى، تبدأ من رقم المعطيات الأصغر و تنتهي عند رقم المعطيات الأكبر.
فنحصل على الكود التالي:
هيا جرب.
إنتهينا من الكود إذا.
بقي المعطيات بما أن الزائر هو من يختار، سنضعها في صفحة و نبعثها إلى صفحة الكود بطريقة POST.
إذن هذه هي الصفحة : donnes.php
هذه هي الصفحة verif.php
إن لم تكن لديك أي فكرة عن كيفية العمل تابع التحليل.
التحليل:
التحليل مهم جدا في البرمجة و هو التفكير في مراحل القيام بالعمل و هو خارج عن لوحة المفاتيح بل نقوم به بورقة و قلم لترتيب الأفكار.
أولا علينا معرفة المعطيات و المطلوب و مراحل الوصول إلى المطلوب انطلاقا من المعطيات.
المعطيات عددان طبيعيان مختلفان (أي أكيد سيكون أحدهما أكبر من الآخر)
المطلوب جميع الأعداد الأولية بين العددين المعلومين.
العدد الأولي هو العدد الذي يقبل القسمة على نفسه و على 1 فقط.
إذن لمعرفة إن كان عدد أولي أو لا علينا أن ننشئ قواسمه و نرى إن كانت الرقم 1 و العدد نفسه فقط.
الآن كيف ننشئ قواسم عدد ؟؟
نعلم أن قسمة عدد على أحد قواسمه تعطينا عددا صحيحا (بدون فاصلة)
إذن باقي قسمة عدد على أحد قواسمه هو 0
جيد و جدنا مراحل العمل و رتبنا الأفكار.
نسمي العددين المعطيين س و ع مثلا، ثم ننشئ قواسم الأعداد بين س و ع، و إذا وجدناه أوليا نكتبه.
حاول الآن بمفردك، هيا حاول قليلا.
إذا كنت غير قادر أبدا على العمل وحيدا لابأس أنظر الحل.
الحل المفصل:
ليكن عدد س نريد أن نعرف عن كان أوليا.
نقوم بتجريب قسمته على الأرقام من واحد إلى س (بحلقة تكرار) و نتوقف عند أول قاسم له (أي عندما يكون باقي القسمة 0)
إذا كان القاسم ليس س إذن فالعدد س ليس أولي (لأن س يقبل القسمة على هذا القاسم)
و إلا فـ س أولي.
جرب التالي:
كود PHP:
<?php
$x=10;
$i=2;
while($x%$i!=0)
{
$i++;
}
if ($i==$x)
{
echo "$x أولي";
}
else
{
echo"$x ليس أولي";
}
?>
الآن نضع هذا الكود في حلقة تكرار أخرى، تبدأ من رقم المعطيات الأصغر و تنتهي عند رقم المعطيات الأكبر.
فنحصل على الكود التالي:
كود PHP:
<?php
$don1=5;
$don2=35;
for ($x=$don1;$x<=$don2;$x++)
{
$i=2;
while($x%$i!=0)
{
$i++;
}
if ($i==$x)
{
echo "$x<br/>";
}
}
?>
إنتهينا من الكود إذا.
بقي المعطيات بما أن الزائر هو من يختار، سنضعها في صفحة و نبعثها إلى صفحة الكود بطريقة POST.
كود PHP:
<html dir=rtl>
<head>
<title>التمرين التطبيقي الأول</title>
</head>
<body>
<h1>يرجى إدخال عددين طبيعيين مختلفين:</h1>
<form action="verif.php" method="POST">
العدد الأول:
<input type="test" name="num1"><br/>
العدد الثاني:
<input type="test" name="num2"><br/>
<input type="submit" value="OK"><br/>
</form>
</body>
</html>
كود PHP:
<html dir=rtl>
<head>
<title> التمرين التطبيقي الأول </title>
</head>
<body>
<?php
if ($_POST['num1']== $_POST['num2'] or ($_POST['num1']<2) or ($_POST['num2']<2)or ($_POST['num1']>1000) or ($_POST['num2']>1000))
{echo 'les deux nombre doivent être inegaux<br/>et entre 2 et 1000<br/> <a href="donnes.php"> retour</a>'}
else{
if ($_POST['num1']> $_POST['num2'])
{
$sup=$_POST['num1'];
$inf=$_POST['num2'];
}
else
{
$sup=$_POST['num2'];
$inf=$_POST['num1'];
}
echo "<h1>الأعداد الأولية بين $inf و $sup هي :</h1>";
for ($x=$don1;$x<=$don2;$x++)
{
$i=2;
while($x%$i!=0)
{
$i++;
}
if ($i==$x)
{
echo "$x<br/>";
}
}
}
?>
</body>
</html>
تعمدت عدم شرح بعض الأمور حتى تسألوا.
في الإنتظار. bye1









