Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

Leksion 3 : Instruksionet baze

Ne kete leksion:
1. Struktura e perzgjedhjes if/else
2. Operatoret
a. llogjik
b. kushtezimit
c. vleredhnies
d. zbirtjes dhe rritjes me nje

1. Struktura e perzgjedhjes if/else


Ne jeten e perditshme na shoqerojne raste kur duhet te marrim nje vendim. Ne varesi te
vendimit te marr percaktohet dhe veprimi qe do kryhet. Nese moti eshte I mire nuk do marr
cader perndryshe do marr.
Si duket dhe nga shembulli, vendimi qe merret, varet nga kushti ne fillim (moti I mire) .
Gjuha C ofron mjete per te mundesuar blloqe te ndryshme veprimesh te kryhen ne varesi te
vendimit te marr.
Gjuha C ka 3 stuktura te medha vendimarrese qe jane if,if-else,switch (do e trajtojme ne lexionet
me tej).
Kujtojme se gjate ekzektutimit te nje progami ne gjuhen C, leximi I kodit behet nga e majta ne te
djathte dhe nga lart poshte. Pra, leximi I kodit burim behet e menyre sekuenciale, dhe po keshtu
behet dhe ekzekutimi I cdo instruksioni ( rreshti perfundon me pikepresje ). Por ne shume
problematika reale duhet te ekzekutohet nje bllok veprimesh kur plotesohet nje kusht dhe nje
tjeter bllok kur plotesohet nje kusht tjeter. Dhe situate te tilla I zgjidhin strukturat if dhe if-else.

Struktura if
Ne kete structure eshte fjala kyce if qe perdoret per te marr vendim. Forma e pergjithshme e
struktures if eshte si me poshte:
If(kusht eshte I vertet)
Ekzektuto veprimin 1;
Struktura if shoqerohet nga kushti I cili vendoset brenda kllapave (,). Nese kushti, cilido qofte ai
eshte I vertet do te ekzekutohet veprimi, ne te kundert ai kalohet dhe program nuk ben asgje.
Por si shprehet vet kushti ne gjuhen C? Dhe si e verifikohet vertetesia ose jot e tij? Si rregull i
pergjithshem kushti ne gjuhen C shprehet permes operatoreve relacional.Operatoret relacional
bejne te mundur te krahasojne 2 vlera duke kontrolluar keshtu nese vlerat jane te barabarta, te

ndryshme,me e madhe(baraz),me e vogel(baraz).Me poshte jepet nje program I thjeshte qe


tregon perdorimin e if-it dhe operatoreve relacional.

/* Shembull per perdorimin e struktures if*/


int main( )
{
int num ;
printf("Jepni nje numer me te vogel se 10 ");
scanf ("%d", &num ) ;
if ( num <= 10 )
printf("Numri qe shkruat ploteson kushtin!");
getch();
return 0;
}

Programi kerkon perdoruesit te fus nje vlere me te vogel se 10. Nese programi do ekzekutohet
do vini re se, nese vlera e dhene nga tastjera eshte me e vogel se 10 ne ekran do te afishohet mesazhi
brenda kllapave te instruksionit printf().Nese do te jepni nje numer tjeter cfaredo programi nuk do te
afishoj asgje. Bllokskema me poshte ndihmon per te kuptuar rrjedhen e kontrollit te programit.
Fillimi

Afisho mesazh dhe lexo vleren e num

num<=10

Afisho mesazh

Fund

Ne situate te ndryshme per probleme reale mund te duhet te kryhen disa veprime (bllok veprimesh) kur
plotesohet nje kusht ose shprehje caktuar brenda if-it. Ne rast se duhet te ekzekutohen disa veprime kur
nje kush plotesohet perdorim kllapat gjarperueshe hapese dhe mbyllese {,} per te grupuar ato.
Shembulli me poshte ilustron perdorimin e kllapave {,}.

/* Shembull per perdorimin e bllokut te veprimeve brenda kllapave */


int main( )
{
int num ;
printf("Jepni nje
scanf ("%d", &num
if ( num > 10 )
{
printf("Numri qe
printf("Duhet te
}
getch();
return 0;
}

numer me te vogel se 10 ");


);
shkruat ploteson kushtin!");
jepnit nje numer me te vogel se 10 ");

Struktura if-else
Si edhe permendem me siper, vet struktura if, ne momentin qe kushti/shprehja qe ajo vlereson eshte e
vertet, ekzekuton nje instruksion te vetem ose nje bllok instruksionesh.Dhe nese kushti nuk plotesohet
atehere nuk ben asgje. Po nese kushti nuk eshte I vertet a mund te percaktojme nje instruksion ose nje
bllok instruksionesh? Patjeter qe po. Per kete vlen struktura if-else, e cila permban strukturen else
pikerisht per rastin kur kushti/shprehja ne if nuk plotesohet. Shembulli me poshte ilustron perdorimin e
structures if-else.

/* Shembull per perdorimin e struktures if-else */


int main( )
{
int num ;
printf("Jepni nje numer me te vogel se 10 ");
scanf ("%d", &num ) ;
if ( num <= 10 )
printf("Numri qe shkruat ploteson kushtin!");
else
printf("Numri qe shkruat NUK ploteson kushtin!");
getch();
return 0;
}

Si edhe ne rastin e structures if programi kerkon perdoruesit te fus nje vlere me te vogel se 10.
Kur programi ekzekutohet do vini re se, nese vlera e dhene nga tastjera eshte me e vogel baraz se 10
ne ekran do te afishohet mesazhi brenda kllapave te instruksionit printf(Numri qe shkruat ploteson
kushtin) ndersa nese vlera eshte me e madhe se 10 ne ekran do te afishohet mesazhi brenda kllapave
te instruksionit printf(Numri qe shkruat NUK ploteson kushtin) . Me poshte jepet bllokskema per
shembullin e marr me siper.
Fillimi

Afisho mesazh dhe lexo vleren e num

num<=10

Afisho mesazh 2

Afisho mesazh 1

Fund

Ne te njeten menyre qe mund te kemi bllok veprimesh kur plotesohet kushti brenda if, kemi dhe ne
momentin kur kontrolli programit kalon per ekzektutim te veprimeve te else. Edhe ne kete rast mund te
kemi bllok veprimesh te cilat I vendosim brenda kllapave {,}. Shembulli me poshte ilustron bllokun else.

/* Shembull per perdorimin e bllokut te veprimeve brenda kllapave */


int main( )
{
int num ;
printf("Jepni nje
scanf ("%d", &num
if ( num > 10 )
{
printf("Numri qe
printf("Duhet te
}

numer me te vogel se 10 ");


);
shkruat ploteson kushtin!");
jepnit nje numer me te vogel se 10 ");

else {
printf("Numri qe shkruat NUK ploteson kushtin!");
printf("Duhet te jepnit nje numer me te madhe se 10 ");
}
getch();
return 0;
}

If-else te nderfutura
Struktura if/else konsiderohet e nderfutur kur brenda bllokut te nje if-i ose else-i ndertojme nje tjeter ifelse. Shembulli me poshte tregon perdorimin e kesaj forme kombinimi if-esh.

/* Shembull per perdorimin e if-else te nderfutura */


int main( )
{
int num ;
printf("Jepni nje numer te plote!");
scanf ("%d", &num );
if ( num < 10 )
{
if(num <5)
printf("Numri qe shkruat eshte me I vogel se 5!");
else
{
if(num>3)
printf("Numri qe shkruat eshte me I < se 3! ");
else
printf("Numri qe shkruat eshte me I > se 3 dhe me I < se 5!");
}
}
getch();
return 0;
}

Vini re ne shembullin me siper se nese if-I I pare plotesohet kontrolli programit kalon ekzekutimin en ifin e dyte brenda tij, i cili eshte nje if-else I nderfutur brenda nje if-I te thjeshte. Ndersa kemi dhe rastin
nje if-else te nderfutur brenda bllokut else te if-it te dyte.

Format e if-eve
Struktura if ose if-else mund te shfqet ne cdonje prej trajtave te me poshtme:
a) if ( kusht )
Bej kete ;
(b) if ( kusht )
{
Bej kete ;
Dhe kete;
}
(c) if ( kusht )
Bej kete ;
else
bej kete;
(d) if ( kusht )
{
Bej kete ;
Dhe kete;
}
else
{
Bej kete ;
Dhe kete;
}
(e) if ( kusht )
Bej kete ;
else
{
if ( kusht )
bej kete ;
else
{
Bej kete ;
Dhe kete;
}
}

(f) if ( kusht )
{
if ( kusht )
bej kete;
else
{
Bej kete ;
Dhe kete;
}
}
else
Bej kete ;

2. Operatoret
Si edhe pame me siper strukturat if-else ndertojne kushtin e tyre si nje shprehje llogjike e cila
mbeshetet ne operatoret relacional dhe llogjike.
Ne lidhje me operatoret relacional kemi pare se ata jane plot gjashte: * ,/ ,% ,+ ,-,= .

a. Operatoret llogjik
Por te te plotesuar njekohesisht dy shprehje qe perdorin operator relacional asnje prej
operatoreve me siper nuk na vjen ne ndihme.
(x > 0)

and

(x < 1)

Zgjidhja me e mire ne kete rast jane operatoret llogjike.


Operatoret llogjik kombinojne disa kushte ne nje kusht llogjik te vetem.
Gjuha C lejon perdorimin e operatoreve llogjik te identifikuar si &&,||,! .
Respektivisht keto operator lexohen si AND,OR,NOT.
Per keta operator do te theksojme disa vecori.
Se pari duhet te mbajm parasysh se operatoret llogjik AND dhe OR shprehen duke dublikuar
simbolet & ne && dhe | ne || dhe jo &,|.
Operatoret &,| kane nje kuptim ne gjuhen C te ndryshem nga AND dhe OR.
Ne shembullin me poshte do te vleresojme situaten kur pika me koordinatat x dhe y, te cilat I
jep perdoruesi nga tastjera jane brenda katrorit me brinje me gjatesi 1 dhe qender piken(0,0).
Y
1

-1

1
-1

#include <stdio.h>
#include <conio.h>
int main()

b. Operatori kushtezimit

{
float x,y;
printf("Jepni koordinaten x te pikes P: \n");
scanf("%f",&x);
printf("Jepni koordinaten y te pikes P: \n");
scanf("%f",&y);
if(x>=-1 && x <=1 && y>=-1 && y<=1)
printf("Pika P eshte brenda katrorit!");
else
printf("Pika P nuk eshte brenda katrorit!");
getch();
return 0;
}

Ne menyre qe pika te jete brenda katrorit duhet qe koordinatat x, y te pikes te jene ne vlere midis
intervalit -1 dhe 1. Pra kushtet qe duhet koordinata x te plotesoj jane x>=-1 dhe x<=1, ndersa koordinata
y duhet te plotesoj y>=-1 dhe y <=1. Te dyja keto kushte duhet te plotesohen njekohesisht. Operatori
llogjik AND eshte I vertet vetem kur dy ose me shume shprehjet qe ai bashkon jane te verteta. Pra
kushti llogjik per strukturen if te problemit do ishte si me poshte:
if(x>=-1 && x <=1 && y>=-1 && y<=1)
Ne rast se do te na kerkohej qe te pakten nje nga koordinatat e pikes te jete brenda intervalit [-1 1].
Atehere kushti jone llogjik do te shnderrohej ne formen :
If ((x>=-1 && x <=1) ||( y>=-1 && y<=1))
Qe vlera e nje koordinate te jete brenda intervalit [-1,1] per ne do te thot per rastin e koordinates x :
x>=-1 && x<=1 dhe per rastin e koordinates y : y>=-1 && y <=1. Pra kemi 2 kushte te mundshme duke
qene se kerkesa nuk percakton se per cilen koordinat behet fjale. Gjithashtu ne kete situate specifikohet
se te pakten nje prej koordinatave duhet te plotesoj kushtin e dhene. Kjo do te thot se ose x ose y ose
dhe ted y bashk mund te plotesojne kushtin. Per kete do te perdorim operatorin OR I cili eshte I vertet

kur te pakten nje prej shprehjeve eshte e vertet. Kjo eshte dhe aryesja pse shprehjet x>=-1 && x<=1,
dhe y>=-1 && y<=1 jane bashkuar me operatorin OR (||).
Tabelat e vertetsise per operatoret AND,OR,NOT:
Operatori AND (&&) eshte I vertet vetem kur te dy shprehjet jane te verteta.
A
False
False
True
True

B
False
True
False
True

A&&B
False
False
False
True

Operatori OR (||) eshte I vertet vetem kur te pakten nje nga dy shprehjet eshte e vertete.
A
False
False
True
True

B
False
True
False
True

A||B
False
True
True
True

Operatori NOT (!) vepron mbi nje shprehje duke I mohuar vleren e asaj.
A
False
True

!A
True
False

b. Operatoret e kushtezimit

Operatori kushtezimit konsiston ne 2 simbolet ? dhe : qe vendosen midis 3 shprehjeve, duke e bere ate
nje operator trinar. Operatori kushtezimit dhe 3 shprehjet qe ai lidh fromojne ate qe do quajme
shprehje te kushtezuar.
Operatori kushtezimit ka formen e meposhteme:
Kusht ? shprehje 1 : shprehje 2
Kusht eshte nje shprehje llogjike e cila vleresohet si e vertete ose si e gabuar ndersa shprehje 1 dhe
shprehje 2 jane vlera ose shprehje qe kane nje vlere te cakuar. Operatori funksionon ne kete menyre:
fillimisht vleresohet kushti nese ai eshte I vertete atehere gjthe shprehja e kushtezuar merr vleren e
shprehjes 1 ne te kudert merr vleren e shprehjes2. Kjo vlere mund ti kaloj dhe variablave te tjere, si ne
shembullin me poshte:

Max = (num1>num2)?num1:num2;
Qellimi kesaj shprehje eshte gjetja e maximumit ted y numrave num1 dhe num2 dhe vendosja e ketij
max ne variablin max. Ndaj nese kushti num1>num2 eshte I vertet max merr vleren e num1 ne te
kundert max=num2.
Shprehja eshte ekuivalente me instruksionin if-else:
If( num1>num2 )
Max=num1;
else
Max = num2;
Por operatori I kushtezimit kete qe struktura if e ben me 4 rreshta e perfundon me 1 rresht te vetem.

c. Operatoret e vleredhenies

Nese do krahasonim programet ne gjuhen C me ato ne nje gjuhe me te vjeter do vinit re se programet
ne gjuhen C jane me te shkruter dhe kjo fal operatoreve te veacnte qe ajo perdor. Le te shqytojme
shprehjen:
total = total + numer;
Ne kete instruksion kemi pare qe vlera e variablit numer I shtohet vleres se variablit total dhe shuma e
marr vendoset serish ne variablin total. Ne gjuhen C ky instruksion mund te shkruhet
total+=numer;
Rezultati eshte po ai por paraqitja e ketij instruksioni eshte shume me konciz.
Shembull:
int main() {
int total=0; int num=10;
printf(Totali=%d,total);
total+=nr;

printf(Totali=%d,total);

total+=nr;

printf(Totali=%d,total);

getch(); return 0; }

Pas ekzekutimit ne ekran do te shofim


Totali=0 Totali=10 Totali=20
Ne te njejten menyre si kombinojme operaotrin + me = mund te kombinojme seicilin prej operatoreve
aritmetik:
+= operator I kombinuar I mbledhjes dhe vleredhenies
-= operator I kombinuar I zbritjes dhe vleredhenies
*= operator I kombinuar I shumezimit dhe vleredhenies
/= operator I kombinuar I pjestimit dhe vleredhenies
%= operator I kombinuar I mbetjes dhe vleredhenies
d. Operatoret e shtimit dhe zvogelimit me nje
Gjuha C perdor dhe nje tjeter operator qe nuk eshte I zakonshem me gjuhet e tjera ai eshte operatori I
shtimit me nje. Le te shohim shembbullin meposhte:
Shembull:
int main() {
int num=0;
printf(Numri=%d,num);
printf(Numri=%d,num++);
printf(Numri=%d,num);
getch(); return 0; }
I cili kur ekzekutohet afishon ne ekran:
Numri =0 Numri=0 Numri=1
Si arrin program te shtoj vleren e variablit num me 1? Kjo pjese realizohet nga operatori (++) I cili rrit
vleren e variablit mbi te cilin aplikohet me 1,dhe ne rastin tone per variablin num.
Funksioni I pare printf afishon vleren qe ka variabli pra 0. Funksioni I dyte gjithashtu afishon vleren
fillestare 0 dhe vetem pasi ka bere afishimin e rrit vleren e variablit num me nje nga veprimi ++. Dhe
funksioni I tret printf do te afishoj ne ekran vleren e ndryshuar te variablit num.

Efekti I shprehjes num ++ eshte I njejte me shprehjen :


num = num + 1;
Nese do te rishkruanim programin me nje ndryshim te vogel:
int main() {
int num=0;
printf(Numri=%d,num);
printf(Numri=%d,++num);
printf(Numri=%d,num);
getch(); return 0; }
I cili kur ekzekutohet afishon ne ekran:
Numri =0 Numri=1 Numri=1
Veme re se vetem fakti qe operatori ++ perdoret para variablit num ben qe fillimisht te rritet vlera e
variablit dhe vetem pasi eshte rritur me nje kjo vlere te afishohet. Pra ne ted y heret kemi rritje
nderkohe qe nese ++ vendoset para variablit behet njer rritja para se vlera te perdoret ndersa ne rastin
kur ++ vendoset pas variablit do te behet njehere veprimet me ted he me pas rritet vlera.
Ne te njejten menyre si funksionon rritja e nje vlere veprojme dhe me zbritjen e saj.

Le te ilustrojme me shembull kete rast:

int main() {
int num=0;
printf(Numri=%d,num);
printf(Numri=%d, num--);
printf(Numri=%d,num);
getch(); return 0; }
I cili kur ekzekutohet afishon ne ekran:
Numri =0 Numri=0 Numri=-1

Pra efekti I shprehjes num - - eshte I njejte me ate num=num-1


Fuqia me e madhe e ketyre operatoreve eshte mundesia qe te japin per te ndryshuar vlere perpara se
ata te perdoren.

You might also like