Top Banner
Instruksionet ciklike (të përsëritjes) 1) Instruksionet ciklike 2) Instruksioni ciklik while 3) Instruksionet e kapërcimit break continue return
20

Algoritmika Leks While

Apr 12, 2016

Download

Documents

Ylli Frroku

Algoritmika Leks While
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Algoritmika Leks While

Instruksionet ciklike (të përsëritjes)

1) Instruksionet ciklike

2) Instruksioni ciklik while

3) Instruksionet e kapërcimit

•break

•continue

•return

Page 2: Algoritmika Leks While

Instruksionet ciklike në gjuhën C++

Ekzekutimi i instruksioneve një herë të vetme

mund të mos japë zgjidhje të problemit.

Shpesh herë ato duhen ekzekutuar me shumë

se një herë.

Mekanizëm i përsëritjes së ekzekutimit të

instruksioneve quhet “cikël”.

Përdoren tre struktura ciklesh në C++: cikli

“while”, cikli “for” dhe cikli “do while”, me

të cilët do të njihemi në këtë leksion.

Page 3: Algoritmika Leks While

Supozojmë se duam të afishojmë 100 herë shprehjen:

"Pershendetje studente!“

Do të ishte shumë e mërzitshme të shkruajmë 100 herëinstruksionin:

cout<<"Pershendetje studente"<<endl;cout<<"Pershendetje studente!“<<endl;……………………………………………………………..………..cout<<"Pershendetje studente!“<<endl;cout<<"Pershendetje studente!“<<endl;

Me instruksion ciklik afishimi i 100 përshëndetjeve përstudentët do të shprehej mjaft shkurt:

int nr = 0; while (nr < 100) {

cout<<"Pershendetje studente!“<<endl;++nr;

}

Page 4: Algoritmika Leks While

Sintaksa:

while(<kusht>) {instruksion1;.....................

}

Semantika:• Kur programi arrin fjalën çelës “while”,

kontrollohet kushti.

• Nëse kushti është i vërtetë ekzekutohet dhevazhdon të ekzekutohet trupi i ciklit, derisakushti të bëhet false.

• Një instruksion i trupit të ciklit ndryshonvariablin e ciklit.

• Kur kushti bëhet false, trupi i ciklit kapërcehetdhe kalohet në instruksionin pasues.

Instruksioni “while”

Page 5: Algoritmika Leks While

Të llogaritet shuma e N numrave të dhënë nga tastiera

Trupi iciklit

#include <iostream>#include <cstdlib>using namespace std;int main() {

int vl, i; int N; // numri i vlerave qe do te mblidhenint S = 0;cout<<"Sa vlera do te mblidhni?"<<endl;cin>>N;i = 0;while (i < N ){

cout<<"Jepni numrin:"<<endl;cin>>vl;S = S + vl; i = i + 1;

} cout<<"shuma S = "<<S<<endl; system ("PAUSE");return 0;

}

Page 6: Algoritmika Leks While

Llogarisim mesataren e një sërë numrash të futur nga tastiera dukepërdorur ciklin while:

#include <cstdlib>#include <iostream>using namespace std;int main() {

int n; // numri i notaveint nr_note; //variabli i ciklitdouble note; // notatdouble Sh = 0, nmes;cout << "Sa nota? " << endl;cin >> n;nr_note = 1;while (nr_note <= n) {

cin>>note; //lexon nje noteSh = Sh + note;//shuma e notavenr_note = nr_note + 1; //variabli i ciklit + 1

}nmes = Sh/n;cout<<"nmes ="<<nmes<<endl; system("PAUSE");return 0; }

Page 7: Algoritmika Leks While

Kujdes!! Mos bëni këto gabime:1) Pikpresje tek koka e ciklit

int i=0; while (i < 10);{cout<<“i = " << i; //trupi i ciklit shkëputet nga ciklii++;

}

2) Trup cikli që nuk ekzekutohet asnjëherë:Kur shprehja e kushtit të instruksionit while është false që në testin e parë, trupi i ciklit nuk ekzekutohet asnjëherë. P.sh. Instruksionet e ciklit të mëposhtëm:

int num = 100;

while (num < 100) { // testi është false që herën e parë

cout<<“num = " << num;

num = num + 1; }

nuk do të ekzekutohen asnjëherë, pasi 100 <100 është false.

Page 8: Algoritmika Leks While

3)Trup cikli që ekzekutohet numër infinit herësh:

Kur ndërtohet një instruksion ciklik, duhet patjetër që një ngavariablat në shprehjen e testit të ndryshojë vlerë, në mënyrë që pasnjë numri përsëritjesh kushti të bëhet false. Në të kundërt, vlera etestit do të mbetet gjithnjë e vërtetë dhe trupi i ciklit do tëpërsëritet (teorikisht) në infinit.

int num = 0;while (num < 100) {

cout<<“num= “ << num; // përsëritet pa fundnum = num * 1;

} //OOPS! Variabli ciklik mbetet 0

ose

int num = 0;while (num < 100) {

cout<<“num= “ << num; // përsëritet pa fund} //OOPS ! Variabli ciklik harrohet të ndryshohet

Page 9: Algoritmika Leks While

•Shprehja e kushtit në një cikël while jo gjithnjë duhet të jetë njëshprehje relacionale, mund të jetë dhe një variabël i vetëm, si nëshembullin më poshtë:

OUTPUT:

Vlera e vjeter j = 4, Vlera e re j = 3, S = 4Vlera e vjeter j = 3, Vlera e re j = 2, S = 7Vlera e vjeter j = 2, Vlera e re j = 1, S = 9Vlera e vjeter j = 1, Vlera e re j = 0, S = 10

#include <iostream>#include <cstdlib>using namespace std;int main(){int j = 4, s = 0;while( j ) {cout<<" Vlera e vjeter j = " <<j ;s = s + j;j = j - 1;cout<<", Vlera e re j = " << j << ", S = " << s <<endl;}system ("PAUSE");return 0;}

Kujtojmë që në C++ njëvlerë integer = 0konsiderohet si vlerë FALSEne kushtin e while dheTRUE ne rastet e tjera.

Page 10: Algoritmika Leks While

#include <iostream>#include <cstdlib>using namespace std; int main(){

int num = 0; char c;cout<<"\nShkruani nje fjali:"<<endl; while ( (c=getchar()) != ‘\n’ ) {

num++; cout<<"c="<<c<<", num="<<num<<endl;

} cout<<"\nNumri i karaktereve = "<<num<<endl;system ("PAUSE");return 0;

}

Më poshtë paraqitet shembulli i vendosjes në kushtin einstruksionit while i funksionit getchar() që shërben për futjen enjë karakteri nga tastjera. Kur karakteri i shtypur është Return,kushti konsiderohet false dhe dilet nga cikli.

Page 11: Algoritmika Leks While

#include <iostream>#include <cstdlib>using namespace std; int main(){

int num = 0 , char c; // deklarojmë c një variabël karakterc = '#'; // i japim c vetë një vlerë që të hyjmë në cikëlcout<<"\nShkruani nje fjali:"<<endl; while ( c != '\n') {

c=getchar(); cout<<"c="<<c<<", num="<<num<<endl;num++; }

cout<<"\nNr.karaktereve = "<<num<<endl;system ("PAUSE");return 0;}

Modifikojmë ushtrimin e mëparshëm për ta bërë më të qartë.

Nga rezultati shihet se kësaj here numri i karaktereve është 10, pasi numrritet herën e fundit që cikli përsëritet e pastaj testohet kushti false se shtypetReturn.

Page 12: Algoritmika Leks While

Kapërcimi i strukturuarInstruksionet që lejojnë ndryshimin e rregullt të fluksit tëinstruksioneve dhe në rastin e cikleve janë:

• break : provokon daljen e menjëhershme nga cikli për të vazhduar në instruksionin që pason ciklin.

• continue: kapërcen instruksionet e mbetura të ciklit korrent dhe vazhdon me ciklin pasardhës.

while ( kusht ) {instruksione;...break;instruksione

}

while ( kusht ) {instruksione;...continue;instruksione

}

Page 13: Algoritmika Leks While

Instruksioni break

#include <cstdlib>#include <iostream>using namespace std;int main() {

char c;while (1) { // kusht gjithnjë true

cout << “Jepni një karakter!" << endl; cin >> c;if (c != 'a')

cout << c << endl;else

break; // dilet nga cikli kur shtypet a }

system("PAUSE");return 0;

}

Page 14: Algoritmika Leks While

#include <cstdlib>#include <iostream>using namespace std;int main(){

int vl, s = 0;cout<<"Jepni vlerat qe do te mblidhni: "<<endl;while (cin >> vl) { // kusht i ciklit është një vlerë int që lexohet me cin

if (vl == 0) {

cout<<"Shtypet 0, Dolet nga cikli."<<endl;break; // dilet nga cikli kur shtypet numri 0

}s = s + vl;

} // mbyllet ciklicout<<"s="<<s<<endl; system("PAUSE");return 0;

}

Llogaritet shuma e disa vlerave int që jepen nga tastiera, derisa tështypet 0.

Page 15: Algoritmika Leks While

Instruksioni continue#include <cstdlib>#include <iostream>using namespace std;int main(){

int x=0 ;while(x <10){

++x;if (x == 7) continue;cout<<"x=" << x<<endl;

} system("PAUSE");return 0;

}

Dalloni që numri 7 nuk është shtypur se instruksioni continue kabërë kapërcimin në ciklin pasardhës, duke penguar ekzekutimin eafishimit të tij e kaluar në ciklin pasardhës.

Page 16: Algoritmika Leks While

Ciklet e ndërfutura while

Ciklet while mund të përfshihen brenda njëri tjetrit duke formuarkështu ciklet e ndërfutur, si shihet në shembullin më poshtë:

#include <cstdlib>#include <iostream>using namespace std;int main() {int i = 1;

while(i <= 10){ // cikli i jashtëmint j =1;while(j <=10){ // cikli i brendshëm

cout<<i*j<<"\t";++j;

} // mbyllet cikli i brendshëmcout<<endl;++i;

} // mbyllet cikli i jashtëmsystem("PAUSE");return 0;}

Page 17: Algoritmika Leks While

OUTPUT: TABELA E SHUMËZIMIT

•Në këtë program cikli i brendshëm ( var j) shërben për të lëvizursipas kolonave, kurse i jashtmi (var i ) sipas rreshtave.•Për çdo rresht, ekzekutohet cikli i brendshëm, i cili lëviz në dhjetëkolonat dhe afishon vlerat, dhe më pas bëhet kalimi në rreshtin e ri.

Page 18: Algoritmika Leks While

#include <cstdlib>#include <iostream>using namespace std;int main() {

long faktorial;int num = 1;while(num != 0) { //cikli i jashtëm

cout<<“Shkruani nje numer: ";cin>>num;faktorial = 1;while(num > 1) //cikli i brendshëm

faktorial = faktorial * num--;cout<<"Faktoriali= “ <<faktorial<<endl;}system("PAUSE");

return 0;}

• Llogariten Faktorialet e disanumrave.• Cikli jashtëm përseritet përnumra të ndryshëm, derisatë shtypet 0.• Cikli i brendshëm llogaritfaktorialin e një numri

Llogaritje e faktorialit

Page 19: Algoritmika Leks While

Tipe strukturash të ndërfutura

• Mënyra e kombinimit të cikleve varet së pari nga problemi qëduhet zgjidhur.

• Modelet e ndërfutjes së cikleve mund të jenë të ndryshme, sip.sh. në figurat më poshtë:

Page 20: Algoritmika Leks While

#include <cstdlib>#include <iostream>using namespace std;int main() {

int n; // numri i notaveint nr_note; //variabli i ciklitdouble note; // notatdouble Sh, nmes;cout << "Sa nota? " << endl;cin >> n;int nr_stud =1;while(nr_stud <= 3) {

Sh = 0;nr_note = 1;while (nr_note <= n) {

cin>>note; //lexon nje noteSh = Sh + note; //shuma e notave

++nr_note;// ndryshon variabli i ciklit}

nmes = Sh/n;cout<<"nmes = "<<nmes<<endl; ++nr_stud;

}system("PAUSE");

return 0; }

Llogaritja e mesatares për nr lëndë për 20 studentë.