 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:
|
|
21-02-2013, 03:03 AM
المشاركة 32
|
|
1-7-4 عبارات if / else :
تستخدم عبارات if / else فى تفريع عمل البرنامج بناء على تقييم "عبارة شرط" .
عبارة if :
عبارة if تكون بالشكل التالى :
كود:
if (expression)
statement ;
or
if (expression)
{
statement1 ;
statement2 ;
…………
}
إذا كانت نتيجة تقييم التعبير expression "صواب" TRUE (غير صفرى) , عندئذ يتم تنفيذ العبارة أو مجموعة العبارات . وإلا , إذا كانت نتيجة تقييم التعبير expression "غير صواب" FALSE عندئذ يتم تخطى التعليمة أو مجموعة التعليمات .
عبارة if / else :
عبارة if / else تكون بالشكل التالى
كود:
if (expression)
statement1 ;
else
statement2 ;
or
if (expression)
{
statement1 ;
statement2 ;
…………
}
else
{
statement3 ;
statement4 ;
…………
}
عبارة else تضيف ميزة محددة لسريان البرنامج وهى أن العبارة أو مجموعة العبارات المرتبطة مع else سوف يتم تنفيذها فقط إذا كانت نتيجة التعبير expression "غير صواب" FALSE . سوف يتم تخطى مجموعة العبارات إذا كانت نتيجة التعبير expression "صواب"TRUE . عبارة else يجب أن تلى عبارة if المرتبطة معها .
الصيغة التالية تبين تقنية البرمجة الشائعة لعبارات if / else "المتتالية أو المتعاقبة" لأنشاء شجرة (هيكل) اختيار :
كود:
if (expr1)
statement1;
else if (expr2)
statement2;
else if (expr3)
statement3;
else
statement4;
هذا التتابع من عبارات if / else سوف "يختار وينفذ" عبارة واحدة فقط . إذا كان تقييم التعبير الأول expr1 "صواب" TRUE, عندئذ سوف يتم تنفيذ العبارة الأولى statement1 وتمرير العبارات الأخرى . إذا كانت تقييم التعبير الأول expr1 "غير صواب" FALSE , عندئذ يتم تنفيذ العبارة التالية وهى if(expr2) . وإذا كان تقييم التعبير الثانى expr2 "صواب" TRUE , عندئذ يتم تنفيذ العبارة الثانية statement2 وتمرير العبارات الأخرى , وهكذا . إذا كانت جميع التعبيرات expr1 , exper2 , exper3 "غير صواب" FALSE , عندئذ يتم تنفيذ العبارة statement4 .
مثال يبين عمل if / else :
كود:
#include <16F877.h> //register definition file for
#fuses HS,NOWDT //a Microchip PIC16F877
#use delay(clock=10000000 //setup the RS232 port for standard output
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=RS232,bits=8)
#include <stdio>
void main(void)
{
char c;
printf("Start of program \n") ;
for(c = 0; c < 100; c++) //while c less than 100 then
{
if (c < 33)
printf("0<c<33 "); //use if/else to show the rang of
else if( ( c>32) && (c < 66 ) ) //numbers that c is in
printf("32<c<66 " ) ;
else
printf("66<c<100 ");
printf("c= %d\n",(int)c; //print c's value each time
//through the loop
}
printf(" End of program \n") ; // indicate that the program is finished
while(1) //because 1 is always TRUE , then just sit here
;
}
فى هذا البرنامج : يتم طباعة النص "Start of program" وتهيئة المتغير "c" بالصفر "0" داخل بناء حلقة for . بعد ذلك يتم تنفيذ حلقة for , لطباعة قيمة المتغير "c" عند كل تكرار كلما تزايد المتغير "c" من "0" إلى "100", أيضا داخل بناء حلقة for .
إذا كانت قيمة المتغير "c" أقل من "33" , عندئذ يتم طباعة النص "0<c<33" . إذا كانت قيمة المتغير "c" بين "33" و "66" يتم طباعة النص "32<c<66" . إذا لم تكن قيمة المتغير "c" فى أى من الحالتين السابقتين , يتم طباعة النص "66<c<100" .
عندما تصل قيمة المتغير "c" إلى "100" , فإنها لم تعد بعد أقل من "100" , ويتم تمرير (تخطى) حلقة for . بعد ذلك يتم طباعة النص " End of program" , ويبقى البرنامج إلى الأبد فى عبارة while(1) .
باستخدام الأبنية والتقنيات التى تم تناولها حتى الآن , من الممكن إنشاء برنامج يختبر بكفاءة كل بت من منفذ الدخل وطباعة رسالة تفيد بحالة البت :
كود:
#include <16F877.h> //register definition file for
#fuses HS,NOWDT //a Microchip PIC16F877
#use delay(clock=10000000 //setup the RS232 port for standard output
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=RS232,bits=8)
#include <stdio>
#define test_port input_b()
void main(void)
{
unsigned char cnt , bit_mask ; // variables
port_b_pullups(TRUE);
set_tris_b (0xFF) ; // set port B for all input
bit_mask = 1 ; //start with lowest bit
for (cnt=0;cnt<8;cnt++) //for loop to test 8 bits
{
// the instructions below test port bits
// and print result
If(test_port & bit_mask)
printf("Bit %d is high.\n",(int)cnt);
else
printf("Bit %d is low.\n') , (int)cnt);
bir_mask <<= 1 ; // shift bit to be tested
}
while(1) // because 1 is always TRUE , then just sit here …
;
}
هذا البرنامج يستخدم حلقة for والتى يتم تحديدها لعمل تكرار لثمانى مرات , مرة لكل بت يراد إختبارها . المتغير bit_mask يبدأ بالقيمة "1" ويستخدم لإخفاء جميع البتات ما عدا البت المراد اختبارها . بعد استخدام هذا المتغير كقناع , يتم إزاحته بواحد بت إلى جهة اليسار , باستخدام التخصيص المركب "<<= 1" , لاختبار البت التالية خلال التكرار التالى لحلقة for . خلال كل حلقة يستخدم بناء if/else لطباعة العبارة الصحيحة لكل بت . عبارة الشرط ببناء if هى عملية AND"&" الخاص بالتعامل مع البت bitwise لاستخدام المتغير bit_mask لإحفاء البتات الغير مرغوب فيها خلال الاختبار .
1-7-5 بناء switch / case :
|