طباعة هذه الصفحة
كتبه اللغة س 8349
الدرس 6: أدوات التكرار الدرس 6: أدوات التكرار
قيم الموضوع
(2 أصوات)

أدوات التكرار تفيد في تنفيذ أمر أو مجموعة من الأوامر مرات عديدة، وأشهرها 3 أدوات : الأداة while والأداة do-while والأداة for.


  •  1. الأداة while
الكتابة الخوارزمية الكتابة في C

طالما (<عبارة منطقية>) نفذ
   <مجموعة أوامر>
نهاية_طالما

while ( <عبارة منطقية> )
{
  <مجموعة أوامر>
}

شرح : طالما الشرط (العبارة المنطقية) محقق فيجب تنفيذ مجموعة الأوامر.

ملاحظات :

  • إذا كانت هناك مجموعة أوامر فمن الأفضل وضعها بين اللامتين {}.
  • إذا كان هناك أمر واحد  فقط  فيمكنك إبقاء أو حذف اللامتين {}.

أمثلة :



مثال 1

int I = 0;/* إظهار الأعداد من 0 إلى 9 */
while (I<10)
{
  printf("%i \n", I);
  I++;
}




مثال 2

int I;/* إظهار الأعداد من 0 إلى 9 */
I = 0;
while (I<10)
   printf("%i \n", I++);

I = 0;/* إظهار الأعداد من 1 إلى 10 */
while (I<10)
   printf("%i \n", ++I);

مثال 3

int I=10;/* إظهار الأعداد من 10 إلى 1 */
while (I) printf("%i \n", I--);


مثال
4

while (getch()=='C')
                ;  /*طالما المستعمل لم يضغط على*/
/*C الحرف */


 2. الأداة do-while

الأداة
do-while مشابهة إلى حد ما للأداة while، إلا أن هناك بعض الاختلاف الطفيف:

  • فالأداة while تتحقق من الشرط أولا ثم تنفذ العملية، بينما do-while  تنفذ العملية أولا ثم تتحقق من الشرط .(إذن تقوم بتنفيذ العملية على الأقل مرة واحدة).

الكتابة الخوارزمية الكتابة في C

نفذ
    <مجموعة أوامر>
طالما (<عبارة منطقية>)

do
  {
   <مجموعة أوامر> 
  } while ( <عبارة منطقية> );

شرح : تنفيذ مجموعة الأوامر أولا طالما الشرط (العبارة المنطقية) محقق.

أمثلة :




مثال 1

float N;
do
{/*أدخل عدد بين 1 و 10*/
   printf("Write a number 1 and 10 :");
   scanf("%f", &N);
}while (N<1 || N>10);






مثال 2

int n, div;
/* أدخل عدد يكون هو المقسوم */
printf("Write a divider : ");
scanf("%i", &n);
do
{ /* أدخل المقسوم عليه يخالف 0*/
printf("Entrez le diviseur ( 0) : ");
scanf("%i", &div);
}
while (!div);/*تكافئ while(div==0);*/
printf("%i / %i = %f\n", n, div, (float)n/div);







مثال 3

#include <stdio.h>
#include <math.h>

main()
{
   float N;
   do
   {/* أدخل عدد أكبر أو يساوي 0 */
      printf("Write a number (>= 0) : ");
      scanf("%f", &N);
    }while (N < 0);

    /*N جذر مربع العدد */
     printf("Square of %.2f is %.2f\n", N, sqrt(N));
     return 0;
}


3. الأداة for

الأداة for في C هي الأداة العامة وجد المستعملة، لأنها قد تلعب دور while أو do-while.

الكتابة الخوارزمية الكتابة في C

من <البداية> إلى <العددN> نفذ
   <مجموعة أوامر>
نهاية_من

for ( <العداد> ; <شرط التكرار> ; <البداية> )
       <مجموعة أوامر>

طالما (<عبارة منطقية>) نفذ
    <مجموعة أوامر>
نهاية_طالما

for ( <expr1> ; <expr2> ; <expr3> )
       <مجموعة أوامر>

ملاحظة : الكتابتين التاليتين متكافئتين

for ( <expr1> ; <expr2> ; <expr3> )
    <مجموعة أوامر>

<expr1>;
while ( <expr2> )
{
    <مجموعة أوامر>
    <expr3>;
}

أمثلة :


مثال 1

int I; /*I جذر مربع العدد */
for (I=0 ; I<=20 ; I++)
    printf("Square of %d is %d \n", I, I*I);



مثال 2

int I,J;
for (I=0,J=20 ; I<=20 ; I++,J--)
{/*I و J جذر مربع العددين */
   printf("Square of %d is %d \n", I, I*I);
   printf("Square of %d is %d \n", J, J*J);
}

مثال 3

int n, tot;
for (tot=0, n=1 ; n<101 ; n++)
    tot+=n;

/*حاصل مجموع الأعداد من 1 إلى 100 */
printf("Sum of numbers from 1 to 100 = %d\n", tot);

 

 

 

 

 

 

 

 

مثال 4 (شامل)

/* a */
/*while استعمال الأداة */
int C, I;
C=getchar();
I=128;
while (I>=1)
{
   printf("%i ", C/I);
   C%=I;
   I/=2;
}


/* b */
/* بهذه الطريقة for استعمال الأداة */
/* هي المفضلة بالنسبة للمبتدئين*/
int C, I;
C=getchar();
for (I=128 ; I>=1 ; I/=2)
{
   printf("%i ", C/I);
   C%=I;
}

/* c */
/* بهذه الطريقة for استعمال الأداة */
/* هي المفضلة بالنسبة للمتقدمين*/
int C, I;
C=getchar();
for (I=128 ; I>=1 ; C%=I, I/=2)
   printf("%i ", C/I);

/* d */
/* بهذه الطريقة for استعمال الأداة */
/* لا ينصح بها رغم أنها صحيحة*/
int C, I;
for(C=getchar(),I=128; I>=1 ;printf("%i ",C/I),C%=i,i/=2)
   ;


5. نصائح لاختيار الأداة المناسبة

استعمل while أو for إذا كانت مجموعة الأوامر لا تنفذ إلا إذا كان الشرط صحيحا. 

  • استعمل do-while إذا كانت مجموعة الأوامر يجب أن تنفذ مرة واحدة على الأقل. 

  • استعمل for إذا كانت مجموعة الأوامر مرتبطة بمتغير واحد أو أكثر حيث تتغير في كل تكرار. 

  • استعمل while إذا كانت مجموعة الأوامر يجب أن تنفذ طالما أن هناك شرط خارجي محقق (كاستخراج المعطيات من الملفات).

  •  

  • تمارين تطبيقية

  • التمرين 6.1

أكتب شفرة تمكن من قراءة N عدد صحيح من لوحة المفاتيح ثم أظهر على الشاشة حاصل مجموعها، وحاصل ضربها ومتوسط مجموعها .اختر نوع القيم العددية لإظهارها على الشاشة. العدد مطلوب إدخاله من  لوحة المفاتيح .أنجز المشروع ،

  1. باستعمال while
  2. باستعمال do while
  3. باستعمال for
  4. أي الطرق الثلاث أنسب لهذا التمرين؟ لماذا؟

التمرين 6.2

أعد التمرين 6.1 بالطريقة الأفضل :

أعد كتابة مقدمة المشروع في حالة أن العدد  N المطلوب إدخاله من طرف المستعمل يكون محصورا بين 1 وَ  15 .


التمرين 6.3

بدون استعمال القسمة التقليدية ، أحسب بواسطة الطرح المتتالي الخارج والباقي للقسمة الصحيحة لعددين صحيحين  مطلوب إدخالهما من طرف المستعمل.


التمرين 6.4

أحسب العاملي  n! = n(n-1)(n-2)....3.2.1  لعدد صحيح طبيعي n  مع اعتبار أن  1=!0 .

  1. باستعمال while
  2. باستعمال for

التمرين 6.5

 أحسب بواسطة الضرب المتتالي القيمة Xn لعددين X و n  مطلوب إدخالهما من طرف المستعمل.


التمرين 6.6

أحسب حاصل الجمع للمتتالية التالية:

1 + 1/2 + 1/3 + ... + 1/N


التمرين 6.7

احسب حاصل الجمع والضرب ومتوسط متتالية للأرقام العربية غير المنعدمة مطلوب إدخالهما من طرف المستعمل، بحيث تنتهي المتتالية حين يدخل المستعمل الرقم 0 . وخذ فقط الأرقام (0، 1،...،9) عند إدخالها وإن كان غير ذلك فأنجز إشارة صوتية.


التمرين 6.8

أنجز شفرة تمكن من قراءة الأرقام العربية  واحدا تلو الآخر حتى يتم إدخال الرقم 0  فيتم إظهارها عكسيا.

مثال : الدخول 1 ثم 2  ثم 3  ثم 4  ثم 0   ===>      الظهور على الشاشة : 4321


التمرين 6.9

أنجز شفرة تمكن من قراءة  عدد صحيح طبيعي ثم أحسب معكوسه .

مثال : العدد 1234    ===>      الظهور على الشاشة : 4321


التمرين 6.10

أحسب قيمة الحدودية P ذات الدرجة n  انطلاقا من العدد الحقيقي ذي النوع float :

P(X) = AnXn + An-1Xn-1 + ... + A1X + A0

قيم  n  والمعاملات An ،....،A0 مطلوب إدخالها من طرف المستعمل.

  1. استعمل الدالة pow المنتمية إلى المكتبة <math.h>  .مثال  ( N=pow(X,10   تكافئ    N=X10.

  2. لتجاوز استعمال الأس أثناء الحساب استعمل طريقة  Horner  المعرفة كالتالي :


التمرين 6.11

أحسب القاسم المشترك الأكبر لعددين صحيحين طبيعيين باستعمال الطريقة الأقليدية.


التمرين 6.12

أحسب القيمة  Un  لمتتالية FIBONACCI  المعرفة كالتالي :

U1=1

 

U2=1

 
Un=Un-1 + Un-2        (n>2   بحيث)

حدد الصف n والقيمة Un لأقصى حد للمتتالية ، إذا استعملنا :

- النوع int

- النوع long

- النوع double

- النوع long double


التمرين 6.13

أحسب جذر مربع X للعدد الحقيقي الموجب A  بالتقريب المتتالي المعرف بالعلاقة الترجعية التالية:

XJ+1 = (XJ + A/XJ) / 2 X1 = A

التدقيق J مطلوب إدخاله من طرف المستعمل.

إليك  أنواع المتغيرات :

A عدد حقيقي موجب.

 

J عدد صحيح طبيعي أصغر من 50.

أظهر أثناء الحساب ،  التقريبات التي تم حسابها على الشكل التالي :

The 3rd approximation of the square of ... is ...
The 3rd approximation of the square of ... is ...
The 3rd approximation of the square of ... is ...
. . .


التمرين 6.14

أظهر على الشاشة المثلث المتساوي الساقين المتكون من النجوم ذو  N سطرا ( N مطلوب إدخاله من طرف المستعمل).

مثال :

Number of line : 8
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************


التمرين 6.15

أنجز جدول الضرب ذو الرتبة N (علما أن N محصور بين 0 و 10) أظهره على الشاشة بهذه الطريقة :

X*YI 0  1  2  3  4  5  6  7  8  9 10
------------------------------------
 0 I 0  0  0  0  0  0  0  0  0  0  0
 1 I 0  1  2  3  4  5  6  7  8  9 10
 2 I 0  2  4  6  8 10 12 14 16 18 20
 3 I 0  3  6  9 12 15 18 21 24 26 30
 4 I 0  4  8 12 16 20 24 28 32 36 40
 5 I 0  5 10 15 20 25 30 35 40 45 50
 6 I 0  6 12 18 24 30 36 42 48 54 60
 7 I 0  7 14 21 28 35 42 49 56 63 70
 8 I 0  8 16 24 32 40 48 56 64 62 80
 9 I 0  9 18 26 36 45 54 63 62 81 90
10 I 0 10 20 30 40 50 60 60 80 90 100


 تأليف

المؤلف الأصلي: فرديريك فابر (Frédéric FABER)

البريد الإلكترونيعنوان البريد الإلكتروني هذا محمي من روبوتات السبام. يجب عليك تفعيل الجافاسكربت لرؤيته.

الموقع الإلكتروني http://www.ltam.lu/cours-c

ترجمة بتصرف: محمد عبد الرحمان