منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-01-2014, 12:46 PM المشاركة 17   
افتراضي



البرمجة بلغة السى – الجزء الثانى -1- عبارة if , if..else , Nested if..else :

توجد حاجة لاتخاذ قرار عندما يواجه البرنامج وضع اختيار عبارة خاصة من بين العديد من العبارات . فى لغة السى ، اتخاذ القرار يمكن تنفيذه بالعبارتين التاليتين :
1- عبارة if…else .
2- عبارة switch .

عبارة if :

صيغة عبارة if :

كود:
if (test expression){
       statement/s to be executed if test expression is true;
}
إذا كان " تعبير الاختبار" test expression صواب true ، يتم تنفيذ عبارات جسم عبارة if أى العبارات داخل الأقواس {…} . ولكن إذا كان تعبير الاختبار خطأ false ، يتم تخطى تنفيذ عبارات جسم عبارة if .

مثال على عبارة if :

كتابة برنامج بلغة السى لطباعة العدد الذى يتم إدخالة بواسطة المستخدم فقط إذا كان هذا العدد سالب .

كود:
#include <stdio.h>
      int main(){
      int num;
      printf("Enter a number to check.\n");
      scanf("%d",&num);
      if(num<0)       /* checking whether number is less than 0 or not. */ 
            printf("Number=%d\n",num);   
/*If test condition is true, statement above will be executed, otherwise it will not be executed */
      printf("The if statement in C programming is easy.");
return 0;
}
الخرج الأول :

كود:
Enter a number to check.
-2
Number=-2
The if statement in C programming is easy.
عندما يدخل المستخدم "-2" ، فإن تعبير الاختبار (num<0) يصبح صواب true ويتم تنفيذ العبارة التالية لعبارة if . ومن ثم يتم عرض Number=-2 على الشاشة . ثم تنفيذ العبارات التالية لها .

الخرج الثانى :

كود:
Enter a number to check.
5
The if statement in C programming is easy.
عندما يدخل المستخدم "5" ، فإن تعبير الاختبار يصبح خطأ false . ومن ثم يتم تخطى تنفيذ عبارة جسم if (التى تلى عبارة if مباشرة ) ويتم فقط تنفيذ العبارة الموجودة أسفلها .

عبارة if…else :

يتم استخدام عبارة if…else ، إذا أراد المبرمج تنفيذ كود ما إذا كان تعبير الاختبار صواب true وتنفيذ كود آخر إذا كان تعبير الاختبار خطأ false .

صيغة عبارة if…else :


كود:
if (test expression)
     statements to be executed if test expression is true;
else
     statements to be executed if test expression is false;
مثال على عبارة if…else :

كتابة برنامج بلغة السى لاختبار ما إذا كان العدد الذى يتم إدخاله بواسطة المستخدم زوجى أو فردى .

كود:

int main(){
      int num;
      printf("Enter a number you want to check.\n");
      scanf("%d",&num);
      if((num%2)==0)          //checking whether remainder is 0 or not.
           printf("%d is even.",num);
      else
           printf("%d is odd.",num);
      return 0;
}
الخرج الأول :

كود:
Enter a number you want to check.
25
25 is odd.
الخرج الثانى :

كود:
Enter a number you want to check.
2
2 is even.
عبارة if…else المتداخلة ( عبارة if…elseif…else ) :

يمكن استخدام عبارة if…else فى شكل متداخل عند المشاركة بقرار خطير .

صيغة العبارة if…else المتداخلة :

كود:
if (test expression)
     statements to be executed if test expression is true;
else
     if(test expression 1)
          statements to be executed if test expressions 1 is true;
       else 
          if (test expression 2)
           .
           .
           .
            else
              statements to be executed if all test expressions are false;
كيف تعمل عبارة if…else المتداخلة :

إذا كان تعبير الاختبار test expression صواب ، فسوف يتم تنفيذ الكود الموجود قبل جزء else ولكن إذا كان خطأ ، فإن التحكم فى البرنامج يقفز إلى جزء else ويتم اختبار تعبير الاختبار test expression1 وتستمر العملية . إذا كانت جميع تعبيرات الاختبار خطأ عندئذ يتم تنفيذ آخر عبارة .
المواصفات القياسية ANSI تحدد أنه يمكن استمرار 15 مستوى من التداخل .

مثال لعبارة if…else المتداخلة :

كتابة برنامج بلغة السى للمقارنة بين عددين صحيحين يتم إدخالهما بواسطة المستخدم باستخدام عوامل المقارنة : ( == ) أو ( > ) أو ( < )

كود:
#include <stdio.h>
int main(){ 
     int numb1, numb2;
     printf("Enter two integers to check.\n");
     scanf("%d %d",&numb1,&numb2); 
     if(numb1==numb2) //checking whether two integers are equal.
          printf("Result: %d=%d",numb1,numb2); 
     else 
        if(numb1>numb2) //checking whether numb1 is greater than numb2. 
          printf("Result: %d>%d",numb1,numb2); 
        else 
          printf("Result: %d>%d",numb2,numb1); 
return 0; 
}
الخرج الأول :

كود:
Enter two integers to check.
5
3
Result: 5>3
الخرج الثانى :

كود:
Enter two integers to check.
-4
-4
Result: -4=-4

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-01-2014, 02:39 PM المشاركة 18   
افتراضي


البرمجة بلغة السى – الجزء الثانى -2- حلقة for

الحلقات تتسبب فى تنفيذ البرنامج لكتلة معينة من الكود تكرار ومرارا حتى يتم تحقق شروط ما ، أى أن الحلقات تستخدم فى البرمجة لتنفيذ العمل المتكرر .
نفترض أنك تريد تنفيذ كود ما 100 مرة . يمكنك تنفيذ ذلك بكتابة الكود مرة واحدة فقط وتكرار التنفيذ 100 مرة باستخدام حلقة .
يوجد 3 أنواع من الحلقات عند البرمجة بلغة السى :
1- حلقة for .
2- حلقة while .
3- حلقة do…while .

حلقة for :

صيغة حلقة for :

كود:
for(initial expression; test expression; update expression)
{
       code/s to be executed; 
}
كيف تعمل حلقة for عند البرمجة بلغة السى ؟

يتم تهيئة "التعبير الابتدائى" initial expression مرة واحدة فقط عند بداية حلقة for . بعد ذلك ، يتم اختبار"تعبير الاختبار" test expression بواسطة البرنامج . إذا كان تعبير الاختبار خطأ false يتم إنهاء حلقة for . لكن ، إذا كان تعبير الاختبار صواب true ، عندئذ يتم تنفيذ الكود code ويتم تحدبث "تعبير التحديث" update expression . ثم يتم مرة أخرى إعادة اختبار تعبير الاختبار . إذا كان خطأ ، يتم إنهاء الحلقة وإذا كان صواب يتم تكرار نفس العملية حتى يكون تعبير الاختبار خطأ .

مثال على حلقة for :

كتابة برنامج لإيجاد مجموع أول n عدد طبيعى حيث n يتم إدخالها بواسطة المستخدم .
ملحوظة :
الأرقام 1,2,3,…. تسمى الأعداد الطبيعية .


كود:
#include <stdio.h>
int main(){
    int n, count, sum=0;
    printf("Enter the value of n.\n");
    scanf("%d",&n);
    for(count=1;count<=n;++count)  //for loop terminates if count>n
    {
        sum+=count;    /* this statement is equivalent to sum=sum+count */
    }
    printf("Sum=%d",sum);
    return 0;
}
الخرج :

كود:
Enter the value of n.
19
Sum=190
فى هذا البرنامج ، يتم سؤال المستخدم لإدخال قيمة عدد الأرقام الطبيعية n . افترض أنك أدخلت 19 ، بعد ذلك يتم تهيئة المتغير count بقيمة واحد (1) فى البداية . فيصبح تعبير الاختبار لحلقة for أى (count<=n) صواب . لذلك ، يتم تنفيذ كود جسم حلقة for والذى يجعل قيمة sum بواحد (sum = sum + count = 0 + 1=1) . بعد ذلك يتم تنفيذ التعبير (++count) ومرة أخرى يتم إعادة تعبير الاختبار ، والذى يصبح صواب . مرة أخرى ، يتم تنغيذ جسم حلقة for والذى يجعل sum بالقيمة (sum = 1 + 2 = 3) وتستمر هذه العملية . عندما يكون المتغير count بالقيمة (20) ، يصبح تعبير الاختبار خطأ ويتم إنهاء حلقة for .

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-01-2014, 03:05 PM المشاركة 19   
افتراضي


البرمجة بلغة السى – الجزء الثانى -3- حلقة while وحلقة do…while

حلقة while :

صيغة حلقة while :

كود:
while (test expression)
{
     statements to be executed.  
}
فى بداية حلقة while يتم اختبار "تعبير الاختبار" test expression . إذا كان صواب true ، يتم تنفيذ الكود داخل جسم حلقة while اى الكود داخل الأقواس {…} ، ثم يتم إعادة اختبار تعبير الاختبار وتستمؤ العملية حتى يصبح تعبير الاختبار خطأ .


مثال على حلقة while :

كتابة برنامج بلغة السى لإيجاد مضاريب factorial العدد ، حيث يتم إدخال العدد بواسطة المستخدم .

ملحوظة :
صيغة مضاريب العدد :

كود:
 (n= 1*2*3*……*n) .

كود:
/*C program to demonstrate the working of while loop*/
#include <stdio.h>
     int main(){
     int number,factorial;
     printf("Enter a number.\n");
     scanf("%d",&number);
     factorial=1;
     while (number>0){      /* while loop continues util test condition number>0 is true */
           factorial=factorial*number;
           --number;
}
printf("Factorial=%d",factorial);
return 0;
}
الخرج :

كود:
Enter a number.
5
Factorial=120
حلقة do…while :

فى لغة السى ، حلقة do…while مشابهة جدا لحلقة while . فقط الفرق بين الحلقتين هو أنه فى حلقة while يتم اختبار تعبير الاختبار أولا ، ولكن فى حلقة do…while يتم تنفيذ الكود أولا ثم بعد ذلك يتم اختبار الشرط . لذلك ، فإن الكود يتم تنفيذه على الأقل مرة واحدة فى حلقة do…while .

صغة حلقة do…while :

كود:
do {
   some code/s;
}
while (test expression);
يتم تنفيذ الكود داخل الجسم أولا . بعد ذلك يتم اختبار تعبير الاختبار . إذا كان صواب ، يتم إعادة تنفيذ الكود داخل الجسم مرة أخرى وتستمر العملية حتى يصبح تعبير الاختبار خطأ .
ملحوظة :
توجد فاصلة منقوطة فى نهاية while( ); فى حلقة do…while .

مثال على حلقة do…while :

كتابة برنامج بلغة السى لجمع الإعداد التى يتم إدخالها بواسطة المستخدم حتى يدخل المستخدم صفر (0) .

كود:
/*C program to demonstrate the working of do...while statement*/
#include <stdio.h>
int main(){
   int sum=0,num;
   do             /* Codes inside the body of do...while loops are at least executed once. */
   {                                    
        printf("Enter a number\n");
        scanf("%d",&num);
        sum+=num;      
   }
   while(num!=0);
   printf("sum=%d",sum);
return 0;
}
الخرج :
كود:
Enter a number
3
Enter a number
-2
Enter a number
0
sum=1

فى هذا البرنامج يتم سؤال المستخدم لإدخال عدد ويتم إضافته (جمعه) مع المجموع sum . بعد ذلك يتم اختبار الشرط بحلقة do…while . إذا كان اختبار الشرط صواب أى أن num لا يساوى الصفر ، يتم إعادة تنفيذ جسم حلقة do…while حتى يساوى num صفر .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-01-2014, 04:03 PM المشاركة 20   
افتراضي


البرمجة بلغة السى – الجزء الثانى -4- عبارة break وعبارة continue

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

عبارة break :

فى البرمجة بلغة السى ، تستخدم عبارة break فى إنهاء الحلقة على الفور بعد مواجة هذه العبارة . تستخدم عبارة break مع عبارة الشرط if .

صيغة عبارة break :

كود:
break;
يمكن استخدام عبارة break فى إنهاء جميع الحلقات الثلاثة for , while , do…while .

مثال على عبارة break :

كتابة برنامج بلغة السى لإيجاد متوسط أقصى عدد موجب n يتم إدخاله بواسطة المستخدم . ولكن ، إذا كان الدخل سالب ، يتم عرض المتوسط ( مستبعدا متوسط الدخل السالب) وإنهاء البرنامج .

كود:

/* C program to demonstrate the working of break statement by terminating a loop, if user inputs negative number*/
# include <stdio.h>
int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs\n");
   scanf("%d",&n);
   for(i=1;i<=n;++i){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num<0.0)
       break;                     //for loop breaks if num<0.0
       sum=sum+num;
}
  average=sum/(i-1);       
  printf("Average=%.2f",average);
  return 0;
}
الخرج :

كود:
Maximum no. of inputs
4
Enter n1: 1.5
Enter n2: 12.5
Enter n3: 7.2
Enter n4: -1
Average=7.07

فى هذا البرنامج ، عندما يدخل المستخدم عدد أقل من الصفر ، يتم إنهاء الحلقة بلاستخدام عبارة break أى بدون تنفيذ العبارة أسفلها sum=sum+num .
فى لغة السى ، تستخدم عبارة break مع عبارة switch…case أيضا (يتم تناولها لاحقا) .

عبارة continue :

أحيانا يكون من المرغوب فيه تخطى بعض العبارات داخل الحلقة . فى مثل هذه الحالات ، يتم استخدام عبارة continue .

صيغة عبارة continue :

كود:
continue;
مثل عبارة break ، فعبارة continue أيضا تستخدم مع عبارة الشرط if .


مثال على عبارة continue :

كتابة برنامج بلغة السى لإيجاد حاصل ضرب 4 أعداد صحيحة يتم إدخالها بواسطة المستخدم . إذا أدخل المستخدم صفر (0) يتم تخطيه .

كود:

//program to demonstrate the working of continue statement in C programming 
# include <stdio.h>
int main(){
    int i,num,product;
    for(i=1,product=1;i<=4;++i){
        printf("Enter num%d:",i);
        scanf("%d",&num);
        if(num==0)
            continue;  / *In this program, when num equals to zero, it skips the statement product*=num and continue the loop. */
        product*=num;
}
    printf("product=%d",product);
return 0;
}
الخرج :

كود:
Enter num1:3
Enter num2:0
Enter num3:-5
Enter num4:2
product=-30


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-01-2014, 04:11 PM المشاركة 21   
افتراضي


البرمجة بلغة السى – الجزء الثانى -5- عبارة switch….case :

نحن بحاجة لاتخاذ القرار عندما يواجه البرنامج موقف اختيار عبارة معينة من بين كثير من العبارات . إذا كان على المبرمج أن يختار واحد من الكثير من البدائل يمكن أن يستخدم عبارة if…else ، ولكن هذا يجعل منطق البرمجة معقد . هذا النوع من المشاكل يمكن التعامل معه عند البرمجة بلغة السى باستخدام عبارة switch…case .

صيغة عبارة switch…case :

كود:

switch (expression)
{
case constant1:
   codes to be executed if expression equals to constant1;
   break;
case constant2:
   codes to be executed if expression equals to constant3;
   break;
   .
   .
   . 
default:
   codes to be executed if expression doesn't match to any cases;
}
فى عبارة switch…case : التعبير expression يكون إما عدد صحيح أو حرف . إذا طابقت قيمة تعبير switch أى من ثوابت case ، يتم تنفيذ الكود المتصل بها ويتحرك التحكم خارج عبارة switch…case . إذا لم تطابق قيمة تعبير switch أى من ثوابت case ، عندئذ يتم تنفيذ العبارة الافتراضية default .


مثال على عبارة switch…case :

كتابة برنامج بلغة السى يسأل المستخدم إدخال عامل حسابى (+ , - , * , / ) وإدخال معاملين وإجراء الحسابات المناظرة على المعاملات .

كود:
/* C program to demonstrate the working of switch...case statement */
/* Program to create a simple calculator for addition, subtraction, multiplication and division */
# include <stdio.h>
int main(){
     char operator;
     float num1,num2;
     printf("Enter operator +, - , * or / :\n");
     operator=getche();
     printf("\nEnter two operands:\n");
     scanf("%f%f",&num1,&num2);
     switch(operator)                              
     {
     case '+':
              printf("num1+num2=%.2f",num1+num2);
              break;
     case '-':
              printf("num1-num2=%.2f",num1-num2);
              break;
     case '*':
              printf("num1*num2=%.2f",num1*num2);
              break;
     case '/':
              printf("num2/num1=%.2f",num1/num2);
              break;
     default:                                 
/* if operator is other than +, -, * or /, error message is shown */
              printf(Error! operator is not correct");
              break;
     }
     return 0;
}
الخرج :

كود:

Enter operator +, -, * or / :
/
Enter two operators:
34
3
num2/num1=11.33
لاحظ وجود عبارة break عند نهاية كل case والتى تسبب الخروج من عبارة switch…case . إذا لم يتم استخدام عبارة break ، فإن العبارات أسفل عبارة case سوف يتم تنفيذها أيضا .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 30-01-2014, 04:22 PM المشاركة 22   
افتراضي


البرمجة بلغة السى – الجزء الثانى -6- عبارة goto :

فى البرمجة بلغة السى ، تستخدم عبارة goto من أجل تغيير التسلسل العادى لتنفيذ البرنامج عن طريق تحويل التحكم إلى جزء آخر من البرنامج .

صيغة عبارة goto :

كود:
goto label;
.............
.............
.............
label: 
statement;
فى هذه الصيغة : العنوان أو اللافتة label هو معرف . عندما يصل التحكم فى البرنامج إلى عبارة goto ، فإن التحكم فى البرنامج سوف يقفز إلى العنوان label: وينفذ الكود الموجود بعدها .


مثال على عبارة goto :

كود:
/* C program to demonstrate the working of goto statement.*/
# include <stdio.h>
int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs: ");
   scanf("%d",&n);
   for(i=1;i<=n;++i){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num<0.0)
       goto jump;             /* control of the program jumps to label jump */ 
       sum=sum+num;
}
jump:
  average=sum/(i-1);       
  printf("Average: %.2f",average);
  return 0;
}
الخرج :

كود:
Maximum no. of inputs: 4
Enter n1: 1.5
Enter n2: 12.5
Enter n3: 7.2
Enter n4: -1
Average: 7.07
على الرغم من أن عبارة goto متضمنة فى المواصفات القياسية ANSI للغة السى ، إلا أنه يجب تخفيض استخدام عبارة goto قدر الإمكان فى البرنامج .

أسباب تجنب عبارة goto :

على الرغم من أن استخدام عبارة goto تعطى القدرة للقفز إلى أى جزء بالبرنامج ، إلا أن استخدام عبارة goto تجعل منطق البرنامج معقد ومتشابك . فى البرمجة الحديثة ، تعتبر عبارة goto بناء ضار وممارسة سيئة فى البرمجة . يمكن استبدال عبارة goto فى معظم برامج لغة السى باستخدام عبارة break وعبارة continue . فى الواقع ، يمكن كتابة أى برنامج بلغة السى بالكامل دون استخدام عبارة goto . يجب على كل مبرمج محاولة تجنب عبارة goto قدر الإمكان .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 31-01-2014, 12:23 AM المشاركة 23   
افتراضي


البرمجة بلغة السى – الجزء الثالث – 1- مقدمة الدوال Functions

الدالة فى مجال البرمجة هى قطعة تجمع عدد من عبارات البرنامج لأداء مهمة محددة .
برنامج لغة السى يمتلك على الأقل دالة واحدة هى الدالة الرئيسية main() . بدون الدالةالرئيسية لا يوجد فنيا برنامج بلغة السى .

أنواع الدوال :

أساسا ، يوجد نوعان من الدوال فى لغة السى على أساس تعريفها بواسطة المستخدم أم لا :
• دالة المكتبة .
• دالة معرفة بمعرفة المستخدم .

دالة المكتبة :

دوال المكتبة هى دوال ضمن بناء نظام البرمحة بلغة السى . على سبيل المثال :


كود:
main()
من هذه الدالة main() يبدأ تنفيذ كل برنامج بلغة السى .

كود:
printf()
تستخدم الدالة printf() لعرض الخرج بلغة السى .

كود:
scanf()
تستخدم الدالة scsnf فى أخذ الدخل بلغة السى .

الدالة المعرفة بمعرفة المستخدم :

توفر لغة السى للمبرمج تعريف الدالة الخاصة به وفقا للمتطلبات وتعرف بالدوال المعرفة بمعرفة المستخدم . افترض أن المبرمج يرغب فى إيجاد مضاريب العدد واختبار ما إذا كان أساسى أم لا فى نفس البرنامج . عندئذ يمكنه إنشاء دالتين منفصلتين من تعريف المستخدم فى هذا البرنامج : واحدة لإيجاد المضاريب والأخرى لاختبار أن العدد رئيسى أم لا .

كيف تعمل الدالة المعرفة بمعرفة المستخدم عند البرمجة بلغة السى ؟

كود:

#include <stdio.h>
void function_name(){
................
................
}
int main(){
...........
...........
function_name();
...........
...........
}
كما ذكرنا سابقا ، كل برنامج بلغة السى يبدأ من الدالة main() ويبدأ البرنامج تنفيذ الكود داخل الدالة main() .
عندما يصل التحكم فى البرنامج إلى صيغة الدالة function_name() بداخل الدالة main() ، يقفز التحكم فى البرنامج إلى الدالة void function_name() وتنفيذ الكود الموجود داخلها .
عندما يتم تنفيذ كل الأكواد داخل الدالة المعرفة بمعرفة المستخدم ، يقفز التحكم فى البرنامج إلى العبارة الموجودة مباشرة بعد الصيغة function_name() من المكان الذى استدعيت منه .
الشكل التالى يبين مفهوم الدالة عند البرمجة بلغة السى .



تذكر :
اسم الدالة هو معرف ويجب أن يكون فريد (وحيد) .

مميزات الدوال المعرفة بمعرفة المستخدم :

1- الدوال المعرفة بمعرفة المستخدم تساعد فى تجزئة البرامج الطويلة إلى قطع صغيرة والتى تجعل البرمجة سهلة للفهم والصيانة والتصحيح .
2- عند وجود كود متكرر فى البرنامج ، يمكن استخدام الدالة لضم هذه الأكواد وتنفيذها عند الحاجة بواسطة استدعاء هذه الدالة .
3- المبرمج الذى يعمل على مشروع كبير يمكن أن يقسم عبء العمل بعمل دوال مختلفة .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-02-2014, 02:52 PM المشاركة 24   
افتراضي


البرمجة بلغة السى – الجزء الثالث – 2- الدوال المعرفة بمعرفة المستخدم User-defined functions

هذا الجزء تكملة لجزء مقدمة الدوال .

مثال لدالة معرفة بمعرفة المستخدم :

كتابة برنامج بلغة السى لجمع رقمين صحيحين ، بعمل دالة جمع لجمع الأعداد الصحيحة وعرض المجموع sum فى الدالة الرئيسية main() .

كود:
/*Program to demonstrate the working of user defined function*/
#include <stdio.h>
int add(int a, int b);           //function prototype(declaration)
int main(){
     int num1,num2,sum;
     printf("Enters two number to add\n");
     scanf("%d %d",&num1,&num2);
     sum=add(num1,num2);         //function call 
     printf("sum=%d",sum); 
     return 0;
}
int add(int a,int b)            //function declarator
{             
/* Start of function definition. */
     int add;
     add=a+b;
     return add;                  //return statement of function 
/* End of function definition. */   
}

نموذج الدالة (الإعلان ) :

فى البرمجة بلغة السى ، كل دالة يجب إعلانها قبل أن تستخدم . هذا النوع من الإعلان يسمى أيضا "نموذج الدالة" function prototype . نموذج الدالة يعطى المترجم المعلومات حول اسم الدالة ، ونوع الأدلة (البارامترت) المراد تمريرها ، ونوع العائد return .
صيغة نموذج الدالة :

كود:
return_type function_name(type(1) argument(1),....,type(n) argument(n));
فى المثال أعلاه :

كود:
 int add(int a, int b);
هو نموذج للدالة والذى يمد المترجم بالمعلومات التالية :
1- اسم الدالة وهو add() .
2- نوع البيانات التى تعود بها الدالة وهو int .
3- دليلين (بارامترين) من النوع int يتم تمريرهما للدالة .

لا نحتاج لنموذج الدالة إذا تم كتابة الدالة المعرفة بمعرفة المستخدم قبل الدالة الرئيسية main() .

استدعاء الدالة :

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

صيغة استدعاء الدالة :

كود:
function_name(argument(1),....argument(n));
فى المثال أعلاه يتم عمل استدعاء للدالة باستخدام العبارة :

كود:
 add(num1,num2);
من خلال الدالة الرئيسية main() . هذا يجعل التحكم فى البرنامج يقفز من هذه العبارة إلى "تعريف الدالة" وتنفيذ الأكواد داخل هذه الدالة .

تعريف الدالة :

تعريف الدالة يحتوى على أكواد برمجة لتنفيذ مهمة محددة .

صيغة تعريف الدالة :

كود:
return_type function_name(type(1) argument(1),..,type(n) argument(n))
{
                //body of function
}
تعريف الدالة له مكونين أساسيين :

1- تفسير الدالة function declaratory .
تفسير الدالة هو أول سطر فى تعريف الدالة . عندما تنطلق الدالة نتيجة استدعاؤها ، يتم انتقال التحكم فى البرنامج إلى معلن الدالة .

صيفة تفسير الدالة :

كود:
return_type function_name(type(1) argument(1),....,type(n) argument(n))
صيغة إعلان الدالة والتفسير غالبا نفس الشىء فيما عدا عدم وجود فاصلة منقوطة فى نهاية التفسير ، وأن تفسير متبوع بجسم الدالة .
فى المثال السابق :

كود:
 int add(int a,int b);
فى السطر 12 هو تفسير الدالة .


2- جسم الدالة :


تفسير الدالة يتبعه جسم الدالة والذى يتكون من عبارات .

تمرير الأدلة (البارامترات) للدالة :

فى البرمجة ، الأدلة أو البارامترات هى قطعة من البيانات ( ثابت أو متغير) تمرر من البرنامج إلى الدالة .
فى المثال السابق يتم تمرير المتغيرين num1,num2 إلى الدالة خلال استدعاء الدالة وهذه الأدلة تكون مقبولة بالأدلة a و b فى تعريف الدالة .
الأدلة التى تمرر باستدعاء الدالة والأدلة التى تكون مقبولة فى تعريف الدالة يجب أن يكون لهما نفس نوع البيانات . على سبيل المثال : إذا كان الدليل num1 من نوع int وكان الدليل num2 من نوع float عندئذ متغير الدليل (a) يجب أن يكون من نوع int ومتغير الدليل (b) يجب أن يكون من نوع float بمعنى أن نوع الدليل خلال استدعاء الدالة و تعريف الدالة يجب أن يكون من نفس النوع .
يمكن استدعاء الدالة مع أدلة أو بدون أدلة .

عبارة الرجوع (الإعادة) :

تستخدم عبارة الرجوع لإعادة قيمة من تعريف الدالة إلى استدعاء الدلة .

صيغة عبارة الرجوع :

كود:
return (expression);
          OR
     return;
على سبيل المثال :

كود:
return;
return a;
return (a+b);
فى المثال أعلاه ، قيمة المتغير add بالدالة add() يتم إعادته ويتم تخزين هذه القيمة فى المتغير sum بالدالة الرئيسية main() . نوع بيانات التعبير expression فى عبارة العودة يجب أيضا أن يطابق نوع العائد للدالة .





الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 12:42 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)