algoritmika leks while

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

Upload: ylli-frroku

Post on 12-Apr-2016

24 views

Category:

Documents


2 download

DESCRIPTION

Algoritmika Leks While

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ë.