You are on page 1of 399

Fakulteti i Shkencave dhe i Teknologjive t Komunikimit

Universiteti i Europs Juglindore

Agni Dika

Bazat e Programimit n C++

2005

U lejua pr botim nga Komisioni pr Botime pran Universitetit t Europs Juglindore n Tetov. Ndalohet ribotimi dhe kopjimi i librit, ose edhe i pjesve t tij, pa plqimin e autorit.

Parathnie
Libri t ciln e keni n dor, s pari u dedikohet studentve t vitit t par t cilt studjojn n Fakultetin e Shkencave dhe t Teknologjive t Komunikimit n Universitetin e Europs Juglindore n Tetov. Por, sigurisht, ai mund t shfrytzohet edhe nga student t universiteteve t tjera, ose edhe nga t gjith ata q dshirojn ta prvetsojn teknikn e programimit me kompjuter. Materiali i prfshir n libr sht shkruar ashtu q lexuesi t'i bj hapat e par n msimin e gjuhs programuese C++, e cila gjendet n prbrje t pakos me programe Microsoft Visual Studio .NET. Gjat ksaj, nj dije paraprake lidhur me algoritmet q shfrytzohen gjat zgjidhjes s problemeve t ndryshme me kompjuter, sigurisht se mund ta lehtsoi kuptimin e programeve t shumt t cilt jepen si shembuj. Lexuesi mund komunikoj me autorin prmes adresave elektronike agnidika@yahoo.com dhe a.dika@see-university.edu.mk , ose edhe prmes lidhjes q ofrohet n faqen e internetit www.agnidika.net. Autori

Prmbajtja
1. Hapat e par n C++ Aktivizimi i Visual Studios 3 Hapja e nj projekti t ri 4 Hapsira punuese e programit 8 Shkruarja e programit 10 Kompajlimi i programit 12 Krijimi i programit ekzekutiv 13 Ekzekutimi i programit 14 Gabimet n kompajlim 16 Shtimi i numrave rendor para rreshtave 17 Ruajtja e programit n disk 18 Rihapja e projektit 19 Rihapja e programit 21 Ekzekutimi i programeve prmes nj projekti 22 Ruajtja e fajllave burimor n nj folder 22 Ekzekutimi i programeve nga projekti i prbashkt 24 Prfundimi i puns n C++ 26 2. Elementet e gjuhs C++ T dhnat standarde 30 Numrat e plot 31 Numrat dhjetor 32 T dhnat karakter 32 Vlerat kufitare 34 Hapsira memoruese q shfrytzohet 35 Stringjet 36 Vlerat logjike 38 Identifikatort 39 Variablat 41

Bazat e programimit n C++ Deklarimi i variablave t zakonshme 41 Deklarimi i fushave 42 Deklarimi i vektorve 42 Deklarimi i matricave 43 Deklarimi dhe inicializimi 44 Deklarimi dhe inicializimi i vektorve 46 Deklarimi dhe inicializimi i matricave 48 Konstantet 51 Pointert 52 Operatort 54 Operatori i shoqrimit 54 Operatort aritmetikor 54 Shprehjet aritmetikore 56 Forma t shkurtuara t shprehjeve 57 Radha e ekzekutimit t operatorve 60 Konvertimi i tipit t t dhnave numerike 62 Operatort relacional 62 Operatort logjik 64 Operatori && 64 Operatori || 65 Operatori ! 66 Operatori i kushtzuar 67 Komentet 68 Komentet brenda nj rreshti 68 Komente brenda bllokut 70 Zbrazsirat brenda programit 70 3. Leximi dhe shtypja Leximi dhe shtypja e zakonshme 74 Prfshirja e teksteve n rezultate 76 Shtypja e teksteve gjat leximit 78 Leximi dhe shtypja e disa vlerave 79 Leximi me komanda t veanta 79 Leximi me vetm nj komand 81 Shtypja n nj hapsir t caktuar 82 Manipulatori setw 83 Komanda cout.width 85 Karakteri pr tabelim horizontal 87 Vendosja e titullit 89 Mbushja e hapsirs me mostr 90 Shtypja majtas dhe djathtas 94 Shtypja e parashenjs 96

vi

vii Mundsi t tjera t shtypjes s parashenjs 97 Shtypja me precizitet t caktuar 98 Shtypja n sisteme t tjera numerike 102 Shtypja decimale dhe eksponenciale 103 Leximi dhe shtypja e vektorve 104 Prcaktimi gjat deklarimit t tipit 104 Shtypja e antarve t vektorit 105 Prcaktimi prmes deklarimit si konstante 109 Prcaktimi prmes leximit 110 Leximi dhe shtypja e matricave 112 Prcaktimi gjat deklarimit t tipit 112 Prcaktimi prmes deklarimit si konstante 114 Prcaktimi prmes leximit 116 Leximi dhe shtypja e teksteve 116 Prcaktimi i gjatsis s tekstit q lexohet 117 Leximi i fjalive 119 Leximi i komplet rreshtit 120 Shtypja e kushtzuar 122 4. Degzimet Komanda pr degzim if 124 Degzime t zakonshme 124 Me nj deg 124 Me dy deg 129 Me komanda t prbra 134 Me nj deg 134 Me dy deg 139 Dega e par e prbr 139 Dega e dyt e prbr 144 T dy degt t prbra 148 Degzime t ndrthurura 151 Degzimet gjat komunikimit interaktiv 155 Kaprcimi pa kusht 158 Krijimi i unazs 161 Prsritja e leximit t vlerave hyrse 162 Dalja nga programi 165 Degzime me komandn switch 167 Versioni bazik i komands switch 167 Kaprcimi pr disa vlera n nj deg 171 Kaprcimi pr vlerat e fardoshme 172 Kaprcimi prmes vlerave t tipit karakter 173

Prmbajtja

Bazat e programimit n C++ 5. Unazat Unazat for 176 Unazat e zakonshme 176 Komand e prbr 182 Unaza t ndrthurura 190 Variabla e unazs e tipit karakter 195 Unazat gjat operimit me fusha 197 Operimi me vektor 197 Operimi me matrica 203 Operimi me m shum fusha 218 Kaprcimi i komandave brenda unazs 222 Dalja nga unaza 228 Dalja prmes komands goto 228 Dalja prmes komands break 231 Unazat while 235 Variabla e unazs e tipit karakter 243 Unaza t ndrthurura 245 Unazat gjat operimit me fusha 250 Operimi me vektor 250 Operimi me matrica 255 Kaprcimi i komandave brenda unazs 262 Dalja nga unaza 264 Dalja prmes komands goto 264 Dalja prmes komands break 268 Unazat do-while 271 Unaza t ndrthurura 275 Kaprcimi i komandave brenda unazs 281 Dalja nga unaza 284 6. Funksionet Definimi dhe thirrja e funksioneve 288 Llogaritje komplekse brenda funksionit 296 Funksioni pa rezultat dals 300 Funksioni pa parametra formal 302 M shum thirrje t nj funksioni 303 Disa nnprograme njkohsisht 310 Vektort n nnprograme 315 Llogaritjet me vektor 315 Llogaritje duke shfrytzuar disa vektor 325 Formimi i vektorit n nnprogram 328 Shfrytzimi i disa vektorve 333

viii

ix Matricat n nnprograme 335 Funksionet inline 344 Makro funksionet 350 Funksionet matematikore 353 Thirrja e funksioneve brenda nnprogrameve 355 Funksionet pr pun me stringje 359 Gjatsia e stringut 359 Kopjimi i stringut 360 Kopjimi i komplet stringut 360 Kopjimi i nj pjese t stringut 363 Bashkimi i dy stringjeve 365 Shtimi i pjess s stringut 367 Dukshmria e variablave 368 Variablat lokale 368 Variablat globale 369 Rekursioni 373 Literatura Shtes

Prmbajtja

1
Hapat e par n C++
Aktivizimi i Visual Studios 3 Hapja e nj projekti t ri 4 Hapsira punuese e programit 8 Shkruarja e programit 10 Kompajlimi i programit 12 Krijimi i programit ekzekutiv 13 Ekzekutimi i programit 14 Gabimet n kompajlim 16 Shtimi i numrave rendor para rreshtave 17 Ruajtja e programit n disk 18 Rihapja e projektit 19 Rihapja e programit 21 Ekzekutimi i programeve prmes nj projekti 22 Prfundimi i puns n C++ 26

2 Bazat e programimit n C++

Pr shkruarje t programeve t ndryshme n kompjuter, aktualisht shfrytzohen disa gjuh programuese. Por, njra ndr gjuht programuese m t prhapura sht gjuha programuese C++. Ktu, me qllim t prvetsimit t tekniks s programimit n kt gjuh, do t shfrytzohet versioni 7.0 i saj, q gjendet n prbrje t pakos me programe Visual Studio .NET, i kompanis softverike Microsoft. N kuadr t pakos n fjal gjendet edhe e ashtuquajtura Rrethin Zhvilluese e Microsoftit (ang. Microsoft Development Environment, ose shkurt MDE), prmes s cils programet n kt gjuh shkruhen, editohen, kompajlohen, ekzekutohen, ruhen n disk, thirren nga disku etj. Programi i shkruar n gjuhn programuese C++ paraqet program burimor dhe si i till ruhet n nj fajll burimor. Me procesin e kompajlimit, kontrollohet saktsia e komandave t shkruara dhe nse nuk ka gabime, programi burimor prkthehet n program objektiv, gj q shihet edhe n paraqitjen skematike t dhn n Fig.1.1.

Programi burimor

Kompajleri

Programi objektiv

Linkeri

Programi ekzekutiv

Fajllat e ballins

Fajlla t tjer objektiv

Fig.1.1 Procesi i krijimit t programit ekzekutiv nga programi burimor Njkohsisht, gjat procesit t kompajlimit, n program insertohen edhe fajllat e ballins, t cilt shnohen n fillim t programit burimor. N fund, pr ta fituar programin ekzekutiv, prmes linkerit fajllit objektiv i shtohen edhe fajlla t tjer objektiv, t marr nga biblioteka standarde ose edhe nga biblioteka t tjera me fajlla. Programi ekzekutiv ruhet n nj fajll ekzekutiv.

Hapat e par n C++ 3 N gjuhn programuese C++, fajllat burimor zakonisht e kan prapashtesn .cpp, fajllat e ballins - prapashtesn .h, ose jan pa prapashtes, fajllat objektiv - .obj, kurse fajllat ekzekutiv dallohen me prapashtesn .exe.

Aktivizimi i Visual Studios


Pr aktivizimin e Visual Studios, n desktopin e kompjuterit duhet t klikohet ikona prkatse. Nse kjo ikon nuk sht e vendosur n desktop, pr aktivizimin e Visual Studios, si edhe gjat aktivizimit t programeve t tjera, mund t shfrytzohet pulla Start e Windowsit dhe pastaj n menyn rritse prkatse opcioni Programs si dhe nnopcioni Microsoft Visual Studio .NET. Pavarsisht se cila nga dy mundsit e prmendura shfrytzohet pr aktivizimin e Visual Studios, si rezultat do t hapet ekrani kryesor i tij, i cili fillimisht mund ta ket pamjen e dhn n Fig.1.2.

Fig.1.2 Pamja fillestare e ekranit kryesor

N rreshtin e par t ekranit kryesor gjendet menya kryesore, e cila n versionin fillestar t saj duket si n Fig.1.3.

Fig.1.3 Menya kryesore Si zakonisht, opcionet e veanta t menys kryesore mund t zgjedhen duke i klikuar ato me mi. Por, ato mund t zgjedhen edhe pasi paraprakisht t pozicionohemi n kt meny, duke e shfrytzuar n tastier tastin Alt. Pastaj,

4 Bazat e programimit n C++ prmes tasteve me shigjeta pr lvizje majtas e djathtas, pozicionohemi n opcionin e dshiruar, kurse pr aktivizimin e tij duhet t shtypet tasti Enter. Opcioni i dshiruar zgjedhet edhe pasi n tastier t mbahet i shtypur tasti Alt dhe njkohsisht shtypet tasti i shkronjs s nnvizuar tek ai opcion. Kshtu, p.sh., pr zgjedhje t opcionit Tools, pasi n tastier t mbahet i shtypur tasti Alt, duhet t shtypet tasti me shkronjn T, gj q shkurt shkruhet edhe si Alt+T.

Hapja e nj projekti t ri
Programimi n gjuhn C++ fillon me hapjen e nj projekti t ri. Pr kt qllim, n menyn kryesore zgjedhet opcioni File, pr ti fituar nnopcionet e menys rnse prkatse ashtu si shihet n Fig.1.4.

Fig.1.4 Nnopcioni New i menys rnse t opcionit File

Pastaj, n menyn rnse t opcionit New, zgjedhet nnopcioni Project... (zgjedhja mund t bhet edhe prmes kombinimit t tasteve Ctrl+Shift+N n tastier), pas s cils si rezultat hapet dritarja New Project, e cila shihet n Fig.1.5.

Hapat e par n C++ 5

Fig.1.5 Dritarja New Project

N pjesn e majt t dritares duhet t zgjedhet gjuha n t ciln do t realizohet projekti i ri, ku, mes t tjerash, si opcione ofrohen gjuht Visual Basic, Visual C# dhe Visual C++. Kurse, n pjesn e djatht t dritares, meq duam t shkruajm programe t zakonshme n gjuhn C++, e zgjedhim opcionin Win32Project. N fund t dritares duhet t prcaktohet emri i projektit, duke e shkruar at n kornizn para s cils sht shnuar teksti Name:. Njkohsisht, n kornizn Location: zgjedhet edhe folderi i diskut n t cilin do t ruhet projekti. Ktu, si shembull, projekti sht quajtur me emrin Dita dhe vendoset n folderin C:\Cpp.NET. Zgjedhja e folderit t dshiruar mund t bhet duke e klikuar pulln Browse..., pas s cils n ekran paraqitet pema e folderve n diskun aktual, ku mund t zgjedhet njri prej tyre. Pasi t zgjedhet emri i projektit dhe folderi ku ai do t ruhet, procedura e hapjes s nj projekti t ri mund t vazhdoj, nse klikohet pulla OK. Si rezultat, aktivizohet magjistari pr gjenerim t projektit t zgjedhur, me dritaren e cila shihet n Fig.1.6.

6 Bazat e programimit n C++

Fig.1.6 Dritarja e magjistarit pr projektin e ri Pr zgjedhje t tipit t projektit, n dritare duhet t klikohet pulla Application Settings, pas s cils fitohen opcionet q shihen n Fig.1.7.

Fig.1.7 Zgjedhja e tipit t projektit

Kompjuteri, pr tipin e projektit (shih pjesn mbi t ciln shkruan Application type:) na e propozon opcionin Windows application. Por, meq duam ti bjm hapat e par n shkruarje t programeve n gjuhn C++, duhet ta zgjedhim opcionin Console application. Njkohsisht, n pjesn mbi t ciln shkruan Additional options: duhet ta zgjedhim opcionin Empty project. N fund, pasi t klikohet pulla Finish, aktivizimi i nj projekti t ri prfundon dhe si rezultat hapet ekrani kryesor i gjuhs C++, ashtu si shihet n Fig.1.8.

Hapat e par n C++ 7

Fig.1.8 Ekrani kryesor i nj projekti t ri n gjuhn C++

Ktu, n fakt, dritarja Class View, e cila gjendet n pjesn e djatht t ekranit bhet dritare aktive. Por, sipas nevojs, kjo dritare dhe dritarja Output n fund t ekranit, mund t eliminohen nga ekrani, ose atyre mund t'u ndryshohet pozita n ekran si dhe dimensionet, duke i shfrytzuar procedurat q shfrytzohen gjat puns nn Windows. Pr kto arsye, pamja e dritareve n ekranin kryesor t gjuhs C++, prkatsisht pamja e ekranit kryesor, mund t jet edhe ndryshe nga ajo q sht dhn n Fig.1.8. Zakonisht, ekrani kryesor mund ta ket pamjen edhe pa dy dritaret q u prmendn m sipr. Pas hapjes s projektit, menya kryesore m nuk sht ajo q u dha n Fig.1.3, por tani duket si n Fig.1.9.

Fig.1.9 Menya kryesore pas hapjes s projektit Pr hapje t nj projekti t ri, si u tha edhe m sipr, mund t shfrytzohet kombinimi i tasteve Ctrl+Shift+N, ose edhe pulla New Project, e cila gjendet n fillim t shiritit me vegla dhe duket ashtu si sht treguar majtas.

8 Bazat e programimit n C++

Hapsira punuese e programit


Shkruarja e nj programi n kuadr t projektit fillon me hapjen e hapsirs punuese prkatse. Pr kt qllim, n menyn rnse t opcionit File zgjedhet nnopcioni Add New Item..., ashtu si shihet n Fig.1.10.

Fig.1.10 Hapja e hapsirs punuese pr nj program t ri

Si rezultat i opcionit t zgjedhur, n ekran do t paraqitet dritarja Add New Item, e dhn n Fig.1.11.

Fig.1.11 Dritarja Add New Item

Hapat e par n C++ 9 Pas ksaj, n pjesn e majt t dritares duhet t zgjedhet opcioni Visual C++, kurse n pjesn e djatht t saj opcionin C++ File (.cpp). Njkohsisht, n kornizn para s cils gjendet teksti Name:, duhet shnuar emrin e programit t ri, p.sh., Prg1, i cili do t vendoset n prbrje t projektit Dita. N fund, pasi t klikohet pulla Open, hapet hapsira punuese e programit mbi t ciln shkruan Prg1.cpp (shih Fig.1.12), ku mund t filloj shkruarja e programit.

Fig.1.12 Pamja e ekranit me hapsirn punuese t programit Prg1.cpp

Hapsira punuese e nj programi t ri mund t hapet edhe duke e zgjedhur nnopcionin Add New Item..., n menyn rnse t opcionit Project, gj q shihet n Fig.1.13.

Fig.1.13 Opcioni pr hapje t hapsirs punuese pr shkruarje t programit

Por, procedura e hapjes s hapsirs punuese t programit q shkruhet n kuadr t projektit mund t startohet edhe prmes kombinimit t tasteve Ctrl+Shift+A, ose duke e klikuar n shiritin me vegla pulln Add New Item, e cila shihet majtas.

10 Bazat e programimit n C++

Shkruarja e programit
do program n gjuhn C++ patjetr duhet ta prmbaj funksionin main(), t cilit n fund t programit i shoqrohet edhe komanda return 0. Programi m i thjesht n gjuhn C++ mund t shkruhet vetm me kto dy komanda dhe do t duket:
int main() { return 0; }

Komanda return 0 e paraqet komandn e fundit t funksionit main(), kurse vlera 0 e shnuar n vazhdim t ksaj komande shfrytzohet pr t treguar se programi ka prfunduar pa gabime. Nse ekzekutohet programi i dhn, si rezultat nuk do t fitohet asgj, sepse n pjesn ku shkruhen komandat, prkatsisht n bllokun brenda kllapave t mdha, ose si thuhet - brenda trupit t programit, nuk ka asnj komand q jep ndonj rezultat. Programi n fjal fizikisht mund t shkruhet m shkurt: int main() {return 0;} ose edhe vetm n nj rresht: int main() {return 0;} Pr shkak t dukshmris m t mir, n gjuhn C++ praktikohet q programet t shkruhen si n formn e par, ku do komand shkruhet n nj rresht. Shembull Programi prmes s cilit n ekran shtypet teksti Programi i par n C++.

Hapat e par n C++ 11 // Programi Prg1 #include <iostream> using namespace std; int main() { cout << "Programi i par n C++" << endl; return 0; } Ktu, brenda trupit t programit (nn kllapat e mdha) gjendet komanda cout, prmes s cils n ekran shtypet fjalia: Programi i par n C++ q sht shnuar nn thonjza. I shkruar n hapsirn punuese prkatse, programi Prg1 do t duket si n Fig.1.14.

Fig.1.14 Programi Prg1 i shkruar n hapsirn punuese t ekranit N ekran, komandat e shkruara sakt kompjuteri i ngjyros me ngjyr t kaltr. Brenda trupit t programit, n fund t do komande shnohet pikpresja (;) pr t treguar fundin e saj, prkatsisht ajo shrben si terminator i komands. Me dy vijat e pjerrta // n rreshtin e par t programit, kompjuteri njoftohet se nuk kemi t bjm me ndonj komand, por me koment t cilin e shfrytzon vet prpiluesi i programit.

12 Bazat e programimit n C++ Komanda n rreshtin e dyt t programit fillon me simbolin # (shenja pr numr) dhe paraqet nj direktiv paraprocesorike (ang. preprocessor directive). Kjo komand i jepet pjess s kompajlerit (ang. compiler), e cila quhet paraprocesor (ang. preprocessor), pr ta insertuar (ang. include) n fillim t programit fajllin iostream, para se t filloj kompajlimi i tij. Ky fajll bn pjes n fajllat e ballins (t cilt prpunohen nga procesori para se t kompajlohet programi) dhe lidhet me komandat pr lexim dhe shtypje (nga Input-Output-Stream), p.sh., si sht n program komanda pr shtypje cout. Direktiva using, e cila gjendet n rreshtin e tret t programit, e njofton kompjuterin se komandat q shfrytzohen n program gjenden n hapsirn me emra std. Nse nuk shfrytzohet direktiva using, para do komande duhet t shnohet std::, p.sh., kshtu: std::cout << "Programi i par n C++" << endl; gj q ndikon n optimizimin e hapsirs memoruese n t ciln ruhet programi. Me pjesn endl (nga end of line) t komands cout, e cila gjendet n rreshtin e dyt t ksaj komande, kompjuterit i urdhrohet q pas shtypjes n ekran t fjalis s dhn m sipr t kalohet n rreshtin vijues.

Kompajlimi i programit
Pr ta kompajluar programin e shkruar, n menyn kryesore duhet t zgjedhet opcioni Build dhe pastaj nnopcioni Compile, ashtu si shihet n Fig.1.15.

Fig.1.15 Zgjedhja e opcionit Compile pr kompajlim t programit Pas dhnies s komands pr

Hapat e par n C++ 13 kompajlim, kompjuteri e prpunon s pari direktivn paraprocesorike, e cila n kodin burimor fillon me simbolin #, si dhe komandat q kan t bjn me kt direktiv. Pas ksaj, vazhdon kompajlimi i programit, duke i shfrytzuar edhe rezultatet q fitohen nga paraprocesimi. Rezultati i procesit t kompajlimit shihet n dritaren Output, e cila gjendet n fund t ekranit. Nse kompajlimi sht pa asnj gabim, n kt dritare do t paraqitet mesazhi: Build: 1 succeeded, 0 failed, 0 skipped ashtu si shihet n Fig.1.16.

Fig.1.16 Rezultati i kompajlimit

Procesi i kompajlimit t nj programi mund t aktivizohet edhe prmes tastiers, duke e shtypur kombinimin e tasteve Ctrl+F7.

Krijimi i programit ekzekutiv


Nse n menyn rnse t opcionit Build (shih Fig.1.15) zgjedhet njri nga nnopcionet Build ose Rebuild, nga programi burimor do t fitohet programi ekzekutiv. Gjat ksaj, kompjuteri fillimisht e kompajlon programin, plotsisht njlloj si edhe me zgjedhjen e opcionit Compile dhe pastaj, nse nuk ka gabime, vazhdon me procesin e linkimit t tij. Nga kjo shihet se zgjedhja e opcionit Compile nuk sht e domosdoshme. Meq ktu kemi t bjm me projektin i cili prmban vetm nj fajll (nj program), nuk ka rndsi se cili nga 4 nnopcionet e menys rnse t opcionit Build zgjedhet (qofshin opcionet Build ose ato Rebuild).

14 Bazat e programimit n C++ N pjesn vijuese t ktij teksti, pr krijimin e fajllit ekzekutiv, n menyn rnse t opcionit Build do t shfrytzohet nnopcioni Build Solution, direkt, ose prmes tastiers, me kombinimin e tasteve Ctrl+Shift+B.

Ekzekutimi i programit
Pr ta fituar rezultatin e nj programi, fajlli ekezutiv i tij duhet t ekzekutohet duke e zgjedhur nnopcionin Start, ose Start Without Debugging, ashtu si shihet n Fig.1.17.

Fig.1.17 Nnopcionet pr ekzekutim t programit

Komandat pr ekzekutim t fajllit ekzekutiv t programit, si sht ai i cili ruhet n fajllin e krijuar Prg1.exe, mund t jepen edhe prmes tastiers, duke e shtypur tastin F5, ose kombinimin e tasteve Ctrl+F5. Pavarsisht se cili nga opcionet e prmendur m sipr zgjedhet pr ekzekutim t programit, n ekran do t paraqitet dritarja e rezultateve, ashtu si shihet n Fig.1.18.

Hapat e par n C++ 15

Fig.1.18 Dritarja e rezultateve

N dritaren e rezultateve t dhn n Fig.1.18, si rezultat sht shkruar fjalia: Programi i par n C++ q shnohet nn thonjza n vazhdim t komands pr shtypje cout. Si shihet edhe n figurn e dhn, n vend t shkronjs shqipe sht gjeneruar nj simbol tjetr. Pr ta eliminuar kt problem, n program gjat gjenerimit t shkronjs , duhet t shfrytzohet shkurtesa Alt+0137 n vend t asaj Alt+137. Si rezultat, n komandn pr shtypje t tekstit n fjal, n vend t shkronjs do t paraqitet simboli , prkatsisht komanda do t duket kshtu:
cout << "Programi i par n C++" << endl;

Nse pas ksaj ekzekutohet programi n fjal, n ekran do t shkruhet fjalia: Programi i par n C++ Njkohsisht, menjher nn kt fjali, paraqitet edhe mesazhi: Press any key to continue me 'rast kompjuteri njofton se pr ta eliminuar ekranin e rezultateve, prkatsisht pr t kaluar n hapsirn punuese t programit, n tastier duhet t shtypet nj tast.

16 Bazat e programimit n C++

Gabimet n kompajlim
Nse gjat shkruarjes s programit nuk u jemi prmbajtur rregullave pr shkruarje t komandave t veanta, gjat kompajlimit kompjuteri do ti lajmroj gabimet prmes mesazheve n dritaren n fund t ekranit. Kshtu, p.sh., nse n programin Prg1, komanda pr shtypje n ekran cout shkruhet pa pikpresje n fund t rreshtit t dyt t saj, n kt mnyr: cout << "Programi i par n C++" << endl gjat kompajlimit t programit, n dritaren Output, e cila gjendet n fund t ekranit, kompjuteri do ta shtyp mesazhin: Build: 0 succeeded, 1 failed, 0 skipped pr t na njoftuar se e ka detektuar 1 gabim. Njkohsisht, n ekran paraqitet edhe dritarja n t ciln tregohet vendi dhe lloji i gabimit, ashtu si sht treguar n Fig.1.19.

Fig.1.19 Dritarja me informata pr vendin dhe llojin e gabimit

Pr ta gjetur rreshtin me gabim, duhet t shfrytzohet numri i rreshtit, t cilin kompjuteri e jep n kolonn e fundit t mesazhit pr gabim (kolona mbi t cilin sht shnuar titulli Line). Kshtu, n shembullin e gabimit t msiprm kompjuteri tregon se gabimi sht n rreshtin e 8, bn pjes n grupin e gabimeve sintaktike dhe n baz t pjess s mesazhit: missing ';' before 'return'

Hapat e par n C++ 17

detektohet plotsisht ky gabim. Kur n program ka m shum gabime, shpesh ngjet q gabime t caktuara t jen si rezultat i gabimeve t tjera, ashtu q, pas eliminimit t nj pjese t tyre, gabimet q ndrlidhen me to eliminohen automatikisht.

Shtimi i numrave rendor para rreshtave


Me qllim t lehtsimit t gjetjes s rreshtave n t cilt kompjuteri gjat kompajlimit ka zbuluar gabime, rreshtave mund t'u shtohen automatikisht edhe numrat rendor. Pr kt qllim, te menya rnse e opcionit Tools n menyn kryesore duhet t zgjedhet nnopcioni Options. Si rezultat n ekran hapet dritarja Options, e cila shihet n Fig.1.20.

Fig.1.20 Dritarja Options me opcionin Line numbers t zgjedhur N pjesn e majt t dritares n fjal duhet t zgjedhet fillimisht opcioni Text Editor dhe pastaj te nnopconi C/C++ i saj, edhe opcionin General. N fund, te pjesa e djatht e dritares (shih Fig.1.20), te katrori para opcionit Line numbers, me klikim duhet t vendoset simboli pr selektim. Pas ksaj, me klikimin e pulls OK, n ekran do ta kemi pamjen e dhn n Fig.1.21, ku para do rreshti t programit shihet numri rendor prkats.

18 Bazat e programimit n C++

Fig.1.21. Pamja e programit pas shtimit t numrave rendor t rreshtave

Ruajtja e programit n disk


Si pam edhe m par, gjat hapjes s hapsirs punuese pr shkruarje t programit, e prcaktojm edhe emrin e programit. Kshtu, pr shembullin e shkruar m sipr e zgjodhm emrin Prg1.cpp, ku, nse nuk e shnojm prapashtesn, kompjuteri fajllit ia shton prapashtesn cpp (meq kemi t bjm me program t shkruar n C++). Njkohsisht, programi ruhet n disk, n folderin aktual ose n folderin q e kemi zgjedhur pr vendosje t projektit (ktu u shfrytzua folderi C:\Cpp.NET). Pas shkruarjes s nj pjese t programit, ose edhe t komplet programit, ai mund t ruhet n disk duke shkuar n opcionin File t menys kryesore dhe pastaj duke zgjedhur n menyn rnse prkatse nnopcionin Save Prg1.cpp, ashtu si shihet n Fig.1.22.

Fig.1.22 Ruajtja e programit n disk Pr zgjedhje t opcionit Save mund t shfrytzohet edhe kombinimi i tasteve n tastier Ctrl+S, ose pulla q shihet majtas, e cila sht vendosur n shiritin me vegla q gjendet nn menyn kryesore. Nse programin e shkruar duam ta ruajm me ndonj emr tjetr, n menyn rnse t opcionit File t menys kryesore e zgjedhim opcionin Save Prg1.cpp As....

Hapat e par n C++ 19

Por, kur njkohsisht kemi punuar n shkruarjen ose ndryshimin e disa programeve, pr ruajtjen e tyre n disk, n menyn rnse t opcionit File t menys kryesore mund t shfrytzohet nnopcioni Save All. Efekt t njjt n ruajtjen e m shum programeve n disk ka edhe shfrytzimi i pulls, q shihet majtas, e cila gjendet n menyn kryesore, ose edhe i shkurtess Ctrl+Shift+S.

Rihapja e projektit
Nse e kemi ndrprer punn n nj projekt, prkatsisht n programet e prfshir n projekt, p.sh., gjat ndrprerjes s puns s kompjuterit, rihapja e programeve fillon me rihapjen e projektit. Pr kt qllim, pasi t jet aktivizuar gjuha programuese C++, te menya rnse e opcionit File t menys kryesore, zgjedhen nnopcionet Open dhe Project..., ashtu si shihet n Fig.1.23.

Fig.1.23 Zgjedhja e nnopcioneve pr hapje t nj projekti ekzistues

Pas ksaj, duhet ta zgjedhim folderin n t cilin sht ruajtur projekti q duam ta hapim. Nse, p.sh., sht zgjedhur folderi Cpp.NET, n ekran do t shihet prmbajtja e tij, ashtu si sht dhn n Fig.1.24.

20 Bazat e programimit n C++ Fig.1.24 Prmbajtja e folderit Cpp.NET

Pr ta hapur projektin q duam, folderi prkats zgjedhet me mi dhe pastaj klikohet pulla Open, ose n tastier shtypet tasti Enter, pr ta fituar n fund programin prkats n ekran, p.sh., ashtu si shihet n Fig.1.14 programi Prg1. Projekti n t cilin jemi duke punuar mund t hapet edhe direkt, duke e zgjedhur nnopcionin Recent Projects n menyn rnse t opcionit File. Pas ksaj, n ekran do t paraqitet lista e projekteve n t cilat sht punuar s fundi, p.sh., ashtu si shihet n Fig.1.25.

Fig.1.25 Lista e projekteve n t cilt sht punuar s fundi

Rihapja e programit
Nse sht i hapur vetm projekti, pr ta hapur fajllin e programit t mbyllur, n menyn rnse t opcionit File t menys kryesore zgjedhet nnopcioni Open dhe pastaj edhe nnopcioni File..., ashtu si shihet n Fig.1.26.

Hapat e par n C++ 21

Fig.1.26 Hapja e programit t shkruar m par

Pas ksaj, n ekran hapet dritarja me folderin aktiv dhe fajllat q prfshihen brenda tij. Nse, p.sh., aktiv sht folderi i projektit Prg1, prmbajtja e tij do t duket si n Fig.1.27.

Fig.1.27 Prmbajtja e folderit Prg1 N fund, duke e klikuar pulln Open, ose duke e shtypur n tastier tastin Enter, do t hapet programi Prg1.cpp, ashtu si shihet n Fig.1.14. Edhe gjat hapjes s fajllave mund t shfrytzohet nnopcioni Recent Files i opcionit File, plotsisht njlloj si edhe gjat hapjes s projekteve ekzistuese.

22 Bazat e programimit n C++

Ekzekutimi i programeve prmes nj projekti


Hapja e m shum programeve, t cilat nuk bjn pjes n nj projekt t prbashkt, p.sh., t programeve t cilat i shkruajm me qllim t msimit t gjuhs C++, nuk lejohet, sepse, n nj projekt, funksioni main mund t paraqitet vetm nj her. Prandaj, pr do program q shkruhet duhet patjetr t hapet projekti prkats. Por, ekziston mundsia q fajllat burimor t m shum programeve t ruhen n nj folder dhe t ekzekutohen sipas dshirs, duke e shfrytzuar vetm nj projekt t hapur, gj q sht shpjeguar n vijim.

Ruajtja e fajllave burimor n nj folder


Nse duam q t gjith fajllat e programeve burimor, t krijuar m par, t'i ruajm n folderin prkats t nj projekti t prbashkt, shkojm dhe i hapim ata nj nga nj. Pastaj, fajllat e programeve burimore i ruajm n folderin e projektit t prbashkt, duke e shfrytzuar opcionin Save emri.cpp As..., t menys rnse t opcionit File, ku me emri duhet nnkuptuar emrin e fajllit q ruhet. Nse, p.sh., e marrim si t prbashkt projektin Shembuj, pasi t hapet si projekt i ri, n disk do t krijohet folderi prkats, si edhe pr do projekt tjetr t hapur. Pr ta vendosur n kt folder programin Prg1.cpp t shkruar m par, duhet t hapet projekti prkats, pasi m par t jet mbyllur projekti Shembuj. N menyn rnse t opcionit File, e zgjedhim nnopcionin e prmendur m sipr, ashtu si shihet n Fig.1.28.

Hapat e par n C++ 23

Fig.1.28 Nnopcioni Save As...

Pas ksaj, n vend t folderit Prg, i cili na ofrohet nga kompjuteri (shih Fig.1.29), duke e klikuar shigjetn n fund t dritares prkatse, nga pema e folderve, duhet ta zgjedhim folderin Shembuj.

Fig.1.29 Folderi Prg1 i cili ofrohet nga kompjuteri

N fund, nse zgjedhet folderi Shembuj, q t prfundoj procesi i ruajtjes s programit Prg1.cpp n folderin e projektit t prbashkt, duhet t klikohet pulla Save, q sht vendosur n kndin e djatht-posht t dritares.

Ekzekutimi i programeve nga projekti i prbashkt

24 Bazat e programimit n C++ Procedura e ekzekutimit t programeve q ruhen n projektin e prbashkt fillon me hapjen e projektit t prbashkt, ashtu si sht shpjeguar m par pr hapje t nj projekti. Nse ky sht projekti Shembuj, q e prmendm m sipr, p.sh., si rezultat mund ta kemi pamjen e dhn n Fig.1.30.

Fig.1.30 Hapja e projektit Shembuj Programi Shuma1, i cili shihet n hapsirn punuese t projektit t prbashkt Shembuj, n fakt sht programi i cili sht shfrytzuar gjat hapjes s fundit t tij. Pas ksaj, n menyn rnse t opcionit File e zgjedhim nnopcionin Add Existing Item..., ashtu si shihet n Fig.1.31.

Fig.1.31 Nnopcioni Add Existing Item...

Hapat e par n C++ 25 Me zgjedhjen e nnopcionit n fjal, p.sh., si rezultat do t hapet dritarja me listn e fajllave burimor t programeve q jan vendosur n folderin Shembuj, ashtu si sht treguar n Fig.1.32.

Fig.1.32 Lista e programeve t vendosur n folderin Shembuj

Nse nga lista e ofruar, p.sh., e zgjedhim programin Prg1.cpp, q ta shohim shtimin e tij n prbrje t projektit Shembuj, duhet zgjedhur nnopcionin Solution Explorer t opcionit View n menyn kryesore, ashtu si shihet n Fig.1.33.

Fig.1.33 Nnopcioni Solution Explorer

Si rezultat, n ekran paraqitet dritarja me listn e programeve burimore q jan prfshir n kuadr t projektit Shembuj, ashtu si shihet n Fig.1.34.

26 Bazat e programimit n C++

Fig.1.34 Lista e programeve burimor n kuadr t projektit Shembuj

Ktu, fillimisht, duhet t fshihet fajlli Shuma1.cpp. Meq automatikisht, pas hapjes s dritares n fjal, ky fajll sht i selektuar, pr fshirje t tij n tastier duhet t shtypet tasti Delete. Pas ksaj, nse klikohet dy her fajlli i mbetur Prg1.cpp, ai do t hapet dhe do t vendoset n hapsirn prkatse n ekran. N fund, duke e shfrytzuar procedurn e zakonshme, fajlli i programit Prg1.cpp mund t kompajlohet dhe t ekzekutohet.

Prfundimi i puns n C++


Para se t ndrpritet puna n kompjuter, duhet t mbyllen t gjith programet, prfshir edhe Visual Studion, n prbrje t t cilit gjendet edhe gjuha programuese C++. Pr kt qllim, fillimisht duhet t mbyllet programi (ose programet, nse jan t hapur m shum programe) dhe pastaj edhe projekti prkats. Pr mbyllje t programit shfrytzohet opcioni File i menys kryesore dhe pastaj n menyn rnse prkatse zgjedhet nnopcioni Close, pas s cilit mbyllet programi. Pastaj, n t njjtn meny rnse zgjedhet nnopcioni Close Solution, pr ta mbyllur edhe projektin. Por, nse para mbylljes s programit dhe projektit, n menyn rnse t opcionit File zgjedhet nnopcioni Close Solution, do t mbyllet projekti dhe fajlli i hapur i programit q prfshihet brenda tij.

Hapat e par n C++ 27 N fund, pas mbylljes s projektit mund t ndrpritet komplet puna e Visual Studios, duke shkuar n nnopcionin Exit t menys rnse t opcionit File n menyn kryesore.

28 Bazat e programimit n C++

2
Elementet e gjuhs C++
T dhnat standarde 30 Identifikatort 39 Variablat 41 Konstantet 51 Pointert 52 Operatort 54 Shprehjet aritmetikore 56 Operatort relacional 62 Operatort logjik 64 Operatori i kushtzuar 67 Komentet 68 Zbrazsirat brenda programit 70

30 Bazat e programimit n C++

Shkruarja e programeve n njrn nga gjuht programuese mbshtetet n rregulla t caktuara. Para se t jepen njohuri t prgjithshme mbi rregullat e shkruarjes s programeve n gjuhn programuese C++, duhet t prcaktohen elementet e ksaj gjuhe, si jan: t dhnat, identifikatort, konstantet, variablat, pointert, operatort dhe shprehjet aritmetikore. N pjesn vijuese t librit, me qllim t qartsimit m t mir t materialit q shpjegohet, jepen shembuj t programeve komplete, pavarsisht se brenda tyre paraqiten komanda t cilat do t msohen m von.

T dhnat standarde
Informatat t cilat i jepen kompjuterit n nj form t kuptueshme pr t, quhen t dhna (ang. data). Varsisht nga natyra dhe kufijt e vlerave t tyre, n gjuhn programuese C++ shfrytzohen tipe t ndryshme t t dhnave. N kolonn e par t tabels e cila shihet n Fig.2.1 jan numruar t dhnat standarde q shfrytzohen n gjuhn C++. Tipi Rangu i vlerave Bajt short -32768..32767 2 short int -2147483648..2147483647 int 4 long -2147483648..2147483647 4 long int unsigned short 0..65535 2 unsignet short int unsigned 0..4294967295 4 unsigned int unsigned long 0..4294967295 4 unsigned long int 1.2e-38..3.4e+38 float 4 1.7e-308..1.7e+308 double 8 3.4e-4932..1.1e+4932 long double 10 -128..127 char 1 0..255 unsigned char 1 -128..127 signed char 1 0..65535 wchar_t 2 true, false bool 1 Fig.2.1 Tipe t ndryshme t t dhnave

Elementet e gjuhs C++ 31 Pr disa nga tipet e t dhnave, gjat deklarimeve shfrytzohen edhe sinonime, ashtu si shihet n kolonn e par t tabels n fjal. N kolonn e dyt t saj shihen diapazonet e vlerave t mundshme pr tipet e veanta t t dhnave, kurse n kolonn e tret t tabels jan dhn madhsit e lokacioneve memoruese t shprehura n bajt, ku vendosen vlerat prkatse. Kshtu, p.sh., pr vendosje n memorie t t dhnave t tipit float, ku prfshihen vlerat numerike me pik dhjetore, shfrytzohen 4 bajt, kurse vlerat e tyre numerike mund t lvizin mes vlers 1.2e-38 dhe 3.4e+38, prkatsisht mes vlerave 1.2 x 10-38 dhe 3.4 x 10+38.

Numrat e plot
Tipet e t dhnave, te t cilat paraqitet shkurtesa int, u prkasin numrave t plot, prkatsisht numrave pr t cilt thuhet se jan numra intexher (ang. integer). T dhnat, tipet e t cilave fillojn me fjaln unsigned, paraqesin numra t plot pa parashenj. Kshtu, p.sh., n grupin e t dhnave unsigned short bjn pjes numrat e plot: 35 2458 54397 N kt grup t dhnash nuk bjn pjes, p.sh., numrat: 74895 -27 i pari, sepse sht m i madh se numri 65535, kurse i dyti, sepse ka parashenj. Si t dhna t tipit short, p.sh., llogariten numrat: 3479 -22581 por jo edhe numrat: 34827 -47915 sepse jan jasht diapazonit prkats, i cili sht dhn n tabeln e Fig.2.1.

32 Bazat e programimit n C++

Numrat dhjetor
T dhnat e tipeve float dhe double u prkasin numrave dhjetor (numrave jo t plot), ose, si thuhet ndryshe, numrave real (ang. real). Kta numra mund t shkruhen si numra me pik fikse dhe si numra me pik t lvizshme. Numra real me pik fikse jan numrat t cilt prmbajn pik decimale. T till jan, p.sh., numrat: 35.62 -8549.528 Kurse, numrat me pik t lvizshme jan numrat real t cilt shkruhen n form eksponenciale. Kshtu, p.sh., numrat t cilt n matematik shkruhen: 3.85 105 -74.3 1012 6345.3961 10-8 n gjuhn C++ shkruhen si numra me pik t lvizshme, n kt mnyr: 3.85e5 -74.3e12 6345.3961e-8 Ktu, eksponentve me vler pozitive mund t'u shtohet edhe parashenja, prkatsisht ata mund t shkruhen edhe n kt form: 3.85e+5 -74.3e+12

T dhnat karakter
T dhnat tekstuale, t cilat prmbajn shkronja, shifra numerike ose simbole t tjera, n kompjuter ruhen si t dhna t tipit karakter, duke u deklaruar si t dhna t tipit char, unsigned char dhe signed char. Pr t dhnat e tilla n gjuhn C++ shfrytzohet 1 bajt dhe n t ruhet kodi prkats i karakterit n baz t kodit ASCII (nga American Standard Code for Information Interchange). Shembull Programi prmes s cilit n ekran gjenerohen kodet e karaktereve t cilat shfrytzohen n kodin ASCII.

Elementet e gjuhs C++ 33


// Programi Kodi #include <iostream> #include <iomanip> using namespace std; int main() { int i; char a; for (i=33;i<=255;i++) { a=i; cout << setw(2) << a << setw(6) << i; } cout << endl; return 0; }

Rezultati q fitohet n ekran pas ekzekutimit t programit Kodi do t duket si n Fig.2.2.

Fig.2.2 Kodi ASCII i cili fitohet pas ekzekutimit t programit Kodi Nga rezultati i dhn shihet se, p.sh., shkronjs D si kod i sht ndar ekuivalenti i numrit decimal 68, kurse kodi i shkronjs s gjuhs shqipe sht ekuivalenti i numrit decimal 137. Me program nuk sht prfshir shtypja e karaktereve me kode mes vlerave decimale 0 dhe 32, sepse me shtypjen e tyre jepen komanda t ndryshme. Kshtu, p.sh., me shtypjen e kombinimit t karaktereve \n, t cilit kombinim i prket kodi me vler decimale 10,

34 Bazat e programimit n C++ kompjuterit i urdhrohet q shtypjen ta vazhdoj n rresht t ri. Duke e shfrytzuar kt kombinim karakteresh, komanda cout e shfrytzuar te programi Kodi:
cout << endl;

mund t shkruhet edhe n kt mnyr:


cout << "\n";

Kombinimet dykaraktershe, te t cilat si karakter i par paraqitet vija e pjerrt mbrapsht \, paraqesin sekuenca dalse (ang. escape sequences). Ngjashm shfrytzohen edhe disa sekuenca dalse t tjera, te t cilat si simbol i par paraqitet simboli \ (shih tabeln n fund t librit - shtesa B). T dhnat e tipit char, prkatsisht karakter, kompjuterit i jepen duke i shkruar nn thonjza t njfishta, p.sh., kshtu: 'a' '*' '5' Edhe zbrazsira llogaritet si e dhn e tipit karakter dhe ajo njlloj mund t shnohet nn thonjza t njfishta ' '. Tipi wchar_t (nga wide character type), i dhn n rreshtin e parafundit t tabels n Fig.2.1, mund t shfrytzohet pr karakteret e kodit 16-bitsh Unicode, i cili aktualisht prmban kode pr 24 gjuh me rreth 39000 simbole t ndryshme, prej t cilve rreth 21000 shfrytzohen pr ideogramet kineze (ky kod gjithsej mund t prmbaj 65536 simbole).

Vlerat kufitare
Variablat e tipeve t ndryshme, t cilat shfrytzohen n gjuhn programuese C++, i kan vlerat e tyre kufitare. Kto vlera kufitare jan dhn n tabeln e cila shihet n Fig.2.1. Por, kto vlera kufitare ruhen edhe si konstante t caktuara, t cilat sipas nevojs mund t shfrytzohen, p.sh., me qllim t kontrollimit t mostejkalimit t vlerave prkatse. Shembull Programi prmes s cilit n ekran shtypen vlerat kufitare pr variablat q jan deklaruar si variabla t tipit int, char dhe unsigned int.

Elementet e gjuhs C++ 35


// Programi Prg2 #include <iostream> #include <climits> using namespace std; int main() { cout << "Vlera minimale int: " << INT_MIN << endl; cout << "Vlera maksimale int: " << INT_MAX << endl; cout << "Vlera minimale char: " << CHAR_MIN << endl; cout << "Vlera maksimale char: " << CHAR_MAX << endl; cout << "Vlera maksimale unsigned int: " << UINT_MAX << endl; return 0; }

Si shihet n program, vlerat n fjal fitohen duke i urdhruar kompjuterit q t'i shtyp vlerat e konstanteve prkatse t cilat ruhen n fajllin climits, i cili vendoset n ballinn e programit, prmes komands paraprocesorike #include <climits>. Vlerat e konstanteve, t cilat do t shtypen n ekran, jan vlerat e tipeve prkatse t dhna n tabeln e Fig.2.1, kurse rezultati n ekran do t duket si n Fig.2.3.

Fig.2.3 Rezultati i programit Prg2

Hapsira memoruese q shfrytzohet


Pr ruajtje t t dhnave t tipit t caktuar, kompjuteri shfrytzon nj hapsir memoruese t caktuar, ashtu si shihet n kolonn e fundit t tabels s dhn n Fig.2.1. Vlerat e ktyre hapsirave memoruese mund t merren edhe me program, duke e shfrytzuar operatorin sizeof.

36 Bazat e programimit n C++ Shembull Programi prmes s cilit n ekran shtypet madhsia e hapsirs memoruese n bajt, t ciln kompjuteri e shfrytzon pr vendosjen e t dhnave t tipit int dhe double.

// Programi Prg3 #include <iostream> using namespace std; int main() { cout << "\nHapsira pr int: " << sizeof(int) << " bajt" << endl; cout << "\nHapsira pr double: " << sizeof(double) << " bajt" << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.2.4.

Fig.2.4 Rezultati i programit Prg3

Stringjet
Vargjet e simboleve t ndryshm (shkronjave, numrave dhe simboleve speciale), prkatsisht tekstet e fardoshme t shkruara brenda thonjzave, quhen stringje dhe llogariten si t dhna t tipit string (ang. string). Kshtu, p.sh., t dhna t tipit string jan: "Gjuha programuese C++" "Jeta" "y=3*x+4" Meq stringjet formohen si vargje t karaktereve, pr kto t dhna thuhet edhe se paraqesin stringje t karaktereve (ang. character string), sepse n memorien

Elementet e gjuhs C++ 37 e kompjuterit ruhen si vargje karakteresh, t cilave kompjuteri n fund ua shton edhe karakterin zero (ang. null character) '\0' pr ta prcaktuar fundin e tyre. Kshtu, p.sh., stringu "Jeta", n memorien e kompjuterit vendoset si varg karakteresh, n kt mnyr: J e t a \0

duke shfrytzuar nj bajt pr do karakter. N fakt, vlerat e fushave prkatse n memorie mbushen me vlerat binare t ekuivalentve decimale t kodeve prkatse n kodin ASCII, ku pr karakterin zero n fund t stringut ruhet ekuivalenti binar i numrit 0. Shembull Programi prmes s cilit n ekran shtypen kodet e shkronjave t stringut "Jeta", ashtu si ruhen n memorie n kodin ASCII.

// Programi Prg4 #include <iostream> using namespace std; int main() { int i,k; char A[5]="Jeta"; for (i=0;i<5;i++) { k=A[i]; cout << A[i] << " ... " << k << endl; } return 0; }

Rezultati i cili fitohet pas ekzekutimit t programit n kompjuter duket si n Fig.2.5.

Fig.2.5 Rezultati i programit Prg4

38 Bazat e programimit n C++ Si shihet edhe nga Fig.2.5, kodi i karakterit zero \0, i cili automatikisht vendoset n fund t stringut, sht numri decimal 0. Duhet pasur kujdes gjat operimit me stringje, kur si karakter paraqitet shifra decimale 0, sepse kodi i ktij karakteri n ASCII sht i barabart me numrin decimal 48, kurse njkohsisht si kod i karakterit zero \0 shfrytzohet numri decimal 0. Stringu i cili nuk prmban asnj karakter quhet string i zbrazt (ang. empty string) dhe prcaktohet me dy thonjza t shnuara njra pas tjetrs, kshtu "". N memorien e kompjuterit ky string ruhet n nj bajt, sepse edhe stringut t zbrazt kompjuteri ia shton karakterin zero \0.

Vlerat logjike
N gjuhn C++ prdoren dy vlera logjike, true (e vrtet) dhe false (e pavrtet), t shkruara vetm me shkronja t vogla. Vlerat logjike kryesisht u ndahen variablave gjat krahasimeve t ndryshme me qllim t ruajtjes s informatave pr plotsim ose mosplotsim t kushteve. Kompjuteri, n memorien e tij, kto dy vlera i ruan si numra t plot pozitiv, 0 dhe 1. Variablat, t cilat shfrytzohen pr ruajtjen e t dhnave logjike, n program deklarohen si variabla t tipit bool. Shembull Programi prmes s cilit kompjuteri prgjigjet n pyetjen se a sht vlera e variabls x m e madhe se vlera e variabls y. Kto dy vlera kompjuterit i jepen prmes tastiers.

// Programi logjike1 #include <iostream> using namespace std; int main() { bool z; double x,y; cout << "Vlera pr variabln x: "; cin >> x; cout << "Vlera pr variabln y: "; cin >> y; cout << "\nA sht x>y?: "; z=(x>y); if (z==true) cout << "Po"; else cout << "Jo"; cout << endl; return 0; }

Elementet e gjuhs C++ 39 Nse ekzekutohet programi i dhn dhe pr variablat x dhe y kompjuterit i jepen vlerat hyrse 3 dhe 7 (prkatsisht), rezultati q fitohet n ekran do t duket si n Fig.2.6. Fig.2.6 Rezultati i programit logjike1

Identifikatort
Njsit elementare memoruese n t cilat vendosen t dhnat dhe rezultatet e programeve emrohen duke prdorur identifikator (ang. identifier). Kshtu, identifikatort prdoren pr emrat e konstanteve, variablave, nnprogrameve dhe strukturave t tjera t prfshira n program. Identifikatort formohen si kombinim i shkronjave (a, b, ..., z, A, B, ..., Z), numrave (0, 1, 2, ..., 9) dhe nnviza (_). Simboli i par n identifikator mund t jet shkronj ose nnviz. Kshtu, p.sh., si identifikator mund t merren:
dita Koha5 distanca_mes_rreshtave TemperaturaDitore _Fillimi a234b35 P8

Nuk lejohet q simboli i par n identifikator t jet numr, ose identifikatori t prmbaj simbole speciale (simbole q nuk jan shkronja ose numra), p.sh., si jan: !, $, %, +, > etj. Kshtu, p.sh., gabim do t zgjedhen si identifikator kombinimet e simboleve:
4muaj

nata+dita
ab jeta US$ Libri#Rend %fitimi

Fillon me numr E prmban simbolin Prmban zbrazsir E prmban simbolin E prmban simbolin E prmban simbolin

+ $ # %

Shkronjat e alfabetit shqip , , dhe nuk mund t prdoren gjat formimit t identifikatorve.

40 Bazat e programimit n C++ N gjuhn C++ gjatsia e identifikatorve nuk sht e kufizuar. Por, prdorimi i identifikatorve t gjat sht jopraktik e ndonjher edhe me probleme gjat kompajlimit. Fjalt kye t cilat prdoren n gjuhn C++ (fjalt e rezervuara nga gjuha C++, shif shtesn A), nuk lejohet t prdoren si identifikator. Kshtu, p.sh., si identifikator nuk mund t prdoren fjalt:
else cout if while

sepse jan fjal t rezervuara nga gjuha C++. Kombinimet q fillojn me simbolin pr nnvizim n gjuhn C++ kan nj prdorim t veant, pr kt arsye sht e preferueshme q gjat formimit t identifikatorve t zakonshm kto kombinime t mos prdoren. Por, simboli pr nnvizim mund t prdoret si lidhs gjat formimit t identifikatorve m t gjat, p.sh., kshtu:
koha_e_bukur vlera_fillestare_e_perimetrit distanca_mes_dy_pikave_te_vecanta

Praktikohet edhe kjo form e formimit t identifikatorve t dhn n shembullin e msiprm:


kohaebukur vlerafillestareeperimetrit distancamesdypikavetevecanta

ose edhe forma:


KohaeBukur VleraFillestareePerimetrit DistancaMesDyPikaveTeVecanta

Kompajleri i gjuhs C++ gjat formimit t identifikatorve i dallon shkronjat e vogla dhe shkronjat e mdha. Kjo, d.m.th. se, p.sh., nuk merren si identifikator t njjt kombinimet:
dita Dita DITA ditA

Elementet e gjuhs C++ 41 Me qllim t evitimit t gabimeve t mundshme pr shkak t dallimit n madhsi t shkronjave, gjat programimit n gjuhn C++ kryesisht shfrytzohen shkronjat e vogla.

Variablat
T dhnat dhe rezultatet q fitohen gjat llogaritjeve t ndryshme ruhen n hapsirn e memories s kompjuterit si vargje t shifrave binare. Meq gjat ekzekutimit t programit n kompjuter, n nj lokacion memorues mund t vendosen vlera t ndryshme, prkatsisht vlerat brenda tyre mund t jen variabile, lokacionet memoruese paraqesin variabla (ang. variable). Prmbajtja e nj lokacioni njihet edhe si vler e variabls (ang. variable value), kurse emri simbolik q i shoqrohet e paraqet identifikatorin e variabls (ang. variable identifier), ose emrin e variabls (ang. variable name). Vlerat e variablave, varsisht nga tipi i tyre, ruhen n numr t caktuar bajtsh, ashtu si sht treguar n kolonn e fundit t tabels s dhn n Fig.2.1.

Deklarimi i variablave t zakonshme


Pr do variabl, para se t shfrytzohet, duhet t deklarohet tipi i saj. Ky deklarim, p.sh., bhet kshtu:
int a; double x; float z; short int koha; char g;

Brenda nj deklarimi mund t prfshihen edhe m shum variabla, duke i ndar me presje, p.sh., kshtu:
int x,y; long int dita,e,f3;

M shum deklarime t variablave mund t shkruhen n nj rresht, p.sh., kshtu:


double x,h; int g; float a,p; ku, si shihet, deklarimet e tipeve t veanta jan ndar mes vete me pikpresje.

42 Bazat e programimit n C++


Deklarimi i tipit t njjt brenda nj programi mund t paraqitet edhe m shum her, p.sh., kshtu: int i,j; int s; gj q mund t bhet edhe m shkurt n kt mnyr: int i,j,s;

Deklarimi i fushave
Vektort, matricat ose fushat shumdimensionale deklarohen si variabla t indeksuara, duke i shkruar indekset brenda kllapave t mesme. N gjuhn C++ indekset fillojn me vlern zero.

Deklarimi i vektorve
Fushat njdimensionale ndryshe quhen edhe vektor. N program ato deklarohen si variabla me nj indeks. Kshtu, p.sh., deklarimi i vektorit D me 5 antar duket:
int D[5];

Meq, si u tha m sipr, indekset fillojn me vlern zero, pas deklarimit t msiprm, indekset e 5 antarve t vektori D jan: D[0], D[1], ..., D[4]. Shembull Programi prmes s cilit formohet vektori A(m), duke i marr vlerat e antarve t veant t barabart me katrort e indekseve prkats.

// Programi Vektori2 #include <iostream> using namespace std; int main() { const m=5; int i,A[m]; cout << "Vektori i formuar\n\n"; for (i=0;i<m;i++) { A[i]=i*i; cout << " A[" << i

Elementet e gjuhs C++ 43


<< "]=" << A[i] << endl; } cout << endl; return 0; }

Ktu, gjat deklarimit t vektorit A, numri i antarve t tij sht prcaktuar prmes konstantes m, s cils vlera 5 i sht shoqruar prmes deklarimit const. Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.2.7.

Fig.2.7 Rezultati i programit Vektori2

Deklarimi i matricave
Ngjashm me vektort deklarohen edhe matricat. Por, meq matricat paraqesin fusha dydimensionale, ato deklarohen si variabla me dy indekse. Kshtu, p.sh., pr matricn Z me 3 rreshta dhe me nga 5 antar n do rresht, deklarimi prkats bhet kshtu:
double Z[3][5];

Edhe dimensionet e matricave mund t prcaktohen prmes deklarimit const. Shembull Programi prmes s cilit formohet matrica A(m,n), duke i llogaritur vlerat e antarve t veant prmes prodhimit t indekseve prkatse, por t rritur pr 1.

// Programi Matrica1 #include <iostream> #include <iomanip> using namespace std; int main()

44 Bazat e programimit n C++


{ const m=4,n=5; int i,j,A[m][n]; cout << "\nMatrica e formuar A\n" << endl; for (i=0;i<m;i++) { for (j=0;j<n;j++) { A[i][j]=i*j+1; cout << setw(3) << A[i][j]; } cout << "\n\n"; } return 0; }

Si shihet nga programi i dhn, edhe te matrica indekset fillojn me vlerat i=0 dhe j=0. Vlerat e indekseve shkojn deri te vlerat m-1 dhe n-1, gj q prcaktohet me shprehjet i<m dhe j<n te komandat prkatse for. Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.2.8.

Fig.2.8 Rezultati i programit Matrica1

Deklarimi dhe inicializimi


Gjat deklarimit t tipeve t variablave, ato mund edhe t inicializohen, prkatsisht atyre mund tu ndahen vlera. Vlerat u ndahen variablave duke e shfrytzuar shenjn e barazimit, p.sh., kshtu: int i=5; double a=5.3;

Elementet e gjuhs C++ 45

Shembull

Programi prmes s cilit llogaritet shuma s e katrorve t numrave natyror mes 1 dhe m, si dhe prodhimi p i ktyre numrave.

// Programi Natyror1 #include <iostream> #include <math.h> using namespace std; int main() { int i,m; cout << "Vlera e variabls m: "; cin >> m; double s=0,p=1; for (i=1;i<=m;i++) { s=s+pow(i,2); p=p*i; } cout << "\nShuma s=" << s << endl; cout << "\nProdhimi p=" << p << "\n\n"; return 0; }

N program, vlerat fillestare t shums s dhe t prodhimit p jan prcaktuar gjat deklarimit t tipit t tyre, prmes deklarimit:
double s=0,p=1;

Nse ekzekutohet programi i dhn dhe prmes tastiers si vler hyrse pr variabln m kompjuterit i jepet vlera 6, rezultati q fitohet n ekran do t duket si n Fig.2.9.

Fig.2.9 Rezultati i programit Natyror1

46 Bazat e programimit n C++ Vlerat e variablave q inicializohen gjat deklarimit t tyre mund t shnohen edhe brenda kllapave, p.sh., kshtu: char z('b'); int k(175); gj q sht e njjt me deklarimin: char z='b'; int k=175;

Deklarimi dhe inicializimi i vektorve


Njlloj mund t deklarohen dhe t inicializohen edhe vektort. Kshtu, p.sh., deklarimi dhe inicializimi i vektorit R me 5 antar t tipit intexher duket: int R[5]={7,2,4,1,3}; Shembull Programi prmes s cilit n ekran shtypet vektori A(m), i cili gjat deklarimit edhe inicializohet me vlera.

// Programi Vektori1 #include <iostream> using namespace std; int main() { const m=8; int i; double A[m]={-5.3,4.77,1.92,-3.8,22.5}; cout << "Vektori A" << "\n\n"; for (i=0;i<m;i++) cout << A[i] << " "; cout << "\n\n"; return 0; }

Ktu, edhe pse vektori sht deklaruar se formohet prej m=8 antarve, inicializohen vetm 5 antart e par t tij. Prandaj, kompjuteri 3 antarve t tjer u ndan vlera zero. Nse programi i dhn ekzekutohet, rezultati i cili shtypet n ekran do t duket si n vijim.

Elementet e gjuhs C++ 47

Fig.2.10 Rezultati i programit Vektori1 Deklarimi dhe inicializimi i vektorve mund t bhet edhe pa i prcaktuar dimensionet e tyre. Kshtu, p.sh., pr vektorin R, q u prmend n fillim, mund t shkruajm: int R[]={7,2,4,1,3}; N kt rast, duke i pasur parasysh vlerat e shkruara brenda kllapave, kompjuteri pr vektorin R automatikisht i rezervon 5 vende, sa edhe jan shnuar antar brenda kllapave. Nse gjat inicializimit rezervohen m shum vende se sa q ka vlera vektori, si pam edhe m lart, kompjuteri antart e painicializuar i mbush me vlerat zero. P.sh., nse shkruajm: int F[9]={3,5,2,7,4}; prmbajtja e vektorit F n memorien e kompjuterit sht: F={3,5,2,7,4,0,0,0,0} Gjendje t njjt do t kemi edhe nse vektori F deklarohet kshtu: int F[]={3,5,2,7,4,0,0,0,0}; Deklarimi dhe inicializimi i vektorve, vlerat e antarve t t cilve jan t tipeve t tjera t mundshme, bhet plotsisht njlloj. P.sh., vektori Z me 6 antar t tipit karakter deklarohet dhe inicializohet kshtu: char Z[7]={'d','4','*','a','G','$'}; Ktu, gjat deklarimit t vektorit Z jan rezervuar 7 antar, sepse n vendin e 7 t tij vendoset karakteri zero ('\0'). Vektori i msiprm m thjesht mund t inicializohet edhe duke i shfrytzuar thonjzat ift, kshtu: char Z[7]={"d4*aG$"};

48 Bazat e programimit n C++

Shembull

Programi prmes s cilit n ekran shtypet teksti Libri, i cili ruhet n vektorin B t tipit karakter.

// Programi tekst1 #include <iostream> using namespace std; int main() { const k=6; int i; char B[k]="Libri"; cout << "\n"; for (i=0;i<k;i++) cout << " " << B[i]; cout << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.2.11. Fig.2.11 Rezultati i programit tekst1

Deklarimi dhe inicializimi i matricave


Matricat deklarohen dhe inicializohen plotsisht njlloj si edhe vektort. P.sh., deklarimi dhe inicializimi i matrics K, e cila prmban 4 rreshta dhe 3 kolona, mund t bhet: int K[4][3]={{7,4,1}, {2,5,8}, {3,6,2}, {8,1,3}}; Ktu, gjat inicializimit me vlera sht ruajtur edhe struktura fizike e matrics. Por, pr kompjuterin kjo nuk ka rndsi, sepse plotsisht njlloj e kupton edhe deklarimin: int K[4][3]={{7,4,1},{2,5,8},{3,6,2},{8,1,3}};

Elementet e gjuhs C++ 49 ose edhe deklarimin te i cili antart e rreshtave t veant nuk dallohen duke i prfshir n kllapa plotsuese:
int K[4][3]={7,4,1,2,5,8,3,6,2,8,1,3};

Shembull

Programi prmes s cilit llogaritet shuma e antarve t matrics katrore R(m,m), t cilt gjenden nn diagonaln kryesore t saj.

// Programi matrica2 #include <iostream> using namespace std; int main() { const m=5; int i,j,R[m][m]={{5,8,-2,6,1}, {3,-7,4,2,9}, {8,1,4,7,-2}, {-3,4,7,6,5}, {4,2,1,-3,5}}; double s=0; for (i=1;i<m;i++) for (j=0;j<m;j++) if (i>j) s=s+R[i][j]; cout << "\nShuma e krkuar sht s=" << s << "\n\n"; return 0; }

N fillim t programit t dhn sht deklaruar dhe sht inicializuar matrica katrore R (quhet katrore, sepse ka numr t njjt rreshtash dhe kolonash). Pastaj, nn t sht deklaruar shuma s dhe njkohsisht sht inicializuar me vlern fillestare t saj 0. Nse ekzekutohet programi i dhn, si rezultat do t shtypet shuma e antarve t matrics R, t cilt gjenden nn diagonalen kryesore (pr t cilat raporti i indekseve prkatse sht i>j), kshtu: Fig.2.12 Rezultati i programit matrica2 Deklarimi dhe inicializimi i matricave tekstuale bhet ngjashm. Shembull Programi prmes s cilit inicializohet matrica S n t ciln ruhen

50 Bazat e programimit n C++ stint e vitit dhe pastaj edhe shtypet prmbajtja e saj.
// Programi tekst2 #include <iostream> using namespace std; int main() { const m=4,n=9; int i,j; char S[m][n]={"Pranvera", "Vera", "Vjeshta", "Dimri"}; cout << "\nStint e vitit\n\n"; for (i=0;i<m;i++) { cout << " "; for (j=0;j<n;j++) cout << S[i][j]; cout << "\n"; } cout << endl; return 0; }

N program, matrica sht deklaruar me m=4 rreshta, kurse n do rresht ruhen nga n=9 karaktere (aq sa sht gjatsia e emrit t stins s par, prfshir edhe karakterin zero '\0', i cili vendoset n fund t do rreshti). Pas ekzekutimit t programit t dhn, n ekran shtypen 4 stint e vitit, ashtu si shihet n Fig.2.13.

Fig.2.13 Rezultati i programit tekst2

Njlloj deklarohen edhe fushat shumdimensionale, me 3 e m shum indekse.

Elementet e gjuhs C++ 51

Konstantet
Vlerat fikse, prkatsisht vlerat t cilat brenda programit nuk ndryshohen, kompjuterit mund t'i jepen duke i deklaruar si konstante. Pr ruajtjen e konstanteve n memorien e kompjuterit, gjat deklarimit t tyre shfrytzohen identifikatort e t gjitha tipeve t mundshme si edhe te variablat. Kshtu, p.sh., me deklarimin: const double pi=3.1415926; kompjuteri njoftohet se pi duhet t merret si konstante dhe t inicializohet me vlern 3.1415926. Shembull Programi prmes s cilit llogaritet siprfaqja dhe perimetri i rrethit me rreze r.

// Programi rrethi #include <iostream> using namespace std; int main() { const double pi=3.1415926; double r,s,p; cout << "\nRrezja e rrethit: "; cin >> r; s=pi*r*r; cout << "\nSiprfaqja e rrethit s=" << s << endl; p=2*pi*r; cout << "\nPerimetri i rrethit p=" << p << "\n\n"; return 0; }

Ktu, konstanta sht deklaruar n fillim t programit si konstante dhe njkohsisht sht inicializuar me vlern prkatse. Nse ekzekutohet programi i dhn dhe prmes tastiers, pr rrezen e rrethit kompjuterit i jepet vlera 5, rezutltati q shtypet n ekran do t duket si n Fig.2.14.

52 Bazat e programimit n C++

Fig.2.14 Rezultati i programit rrethi Pas inicializimit, konstantet mund t shfrytzohen edhe gjat deklarimit t dimensioneve t vektorve, p.sh., kshtu: const int m=5; int A[m]={7,2,4,1,3}; ose edhe matricave, p.sh., kshtu: const int m=4,n=3; int K[m][n]={{7,4,1}, {2,5,8}, {3,6,2}, {8,1,3}}; Si konstante mund t deklarohen edhe vektort, p.sh., kshtu: const double A[6]={2.3, -4.7, 9, -1, 7.3, 5.44}; ose edhe matricat, p.sh., kshtu: const int K[4][3]={{2,-4,3}, {5,6,-7}, {-3,9,1}, {0,-1,4}}; Me deklarimin e vektorve dhe t matricave si konstante kompjuteri e bllokon do ndryshim t vlerave t antarve t tyre brenda programit. Me kt, jemi t sigurt se n program operohet me vlera fikse t vektorve dhe t matricave, sepse do tentim i ndryshimit t ktyre vlerave bllokohet nga kompjuteri.

Pointert
Adresat e hapsirs memoruese mund t ruhen duke shfrytzuar variabla treguese, prkatsisht variabla t tipit pointer (ang. pointer). Para se t shfrytzohen variablat e tipit pointer, ato duhet t deklarohen. Deklarimi bhet njlloj si edhe deklarimi i variablave, por, pr t treguar se kemi t bjm me pointer, ktu para

Elementet e gjuhs C++ 53 variabls shnohet nj yll. Rekomandohet q gjat deklarimit t variablave t tipit pointer t bhet edhe inicializimi i tyre me nj vler, e cila kryesisht merret t jet zero, p.sh., kshtu: int *adr=0; Mosinicializimi i pointerit me nj vler t caktuar paraqet rrezik dhe prandaj si zgjidhje rekomandohet q ky inicializim t bhet me vlern zero. Adresa e nj variable merret nse para saj shnohet simboli &. Kshtu, p.sh., pr ta marr adresn e variabls k dhe pr ta ruajtur at te pointeri adr t deklaruar dhe t inicializuar si m sipr, shkruajm: adresa=&k; Shembull Programi prmes s cilit tregohet prdorimi i pointerit.

// Programi prg5 #include <iostream> using namespace std; int main() { int dita; int *adita=0; dita=25; cout << "\nVlera e variabls: " << dita << endl; adita=&dita; cout << "Adresa e variabls: " << adita << "\n\n"; return 0; }

N program, fillimisht sht deklaruar si intexher variabla dita dhe sht deklaruar e inicializuar me vler zero pointeri adita. Pastaj, variabls dita i sht ndar vlera 25 dhe prmes komands cout sht shtypur vlera e ksaj variable. N fund, prmes shprehjes: adita=&dita; adresa e variabls dita ruhet te pointeri adita. Nse ekzekutohet programi i dhn, rezulteti q shtypet n ekran mund t duket si n Fig.2.15.

54 Bazat e programimit n C++

Fig.2.15 Rezultati i programit prg5 Adresa e shtypur paraqet nj vler heksadecimale dhe nuk sht e njjt nse programi i dhn ekzekutohet n kompjuter t ndryshm.

Operatort
Gjat shkruarjes s shprehjeve pr operim me t dhna, n gjuhn C++ shfrytzohen operator t ndryshm. M kryesort mes tyre jan: operatori i shoqrimit, operatort aritmetikor, operatort relacional dhe operatort logjik.

Operatori i shoqrimit
Prmes operatorit t shoqrimit = (barazimit), variabls s shkruar n ann e majt t operatorit i shoqrohet vlera e cila gjendet n ann e djatht t ktij operatori. Kshtu, p.sh., prmes shprehjeve: z=5; a=2.384; beta=-37.4; variablave z, a dhe beta u shoqrohen vlerat e shnuara n ant e djathta t barazimeve prkatse. Para se t shkruhen n program shprehjet e dhna m sipr, pr variablat q figurojn n ann e majt t barazimit duhet patjetr t deklarohen tipet varsisht nga vlerat q u shoqrohen atyre. Vlera q i sht shoqruar nj variable ngel e pandryshuar derisa nuk i shoqrohet nj vler e re.

Operatort aritmetikor
Shprehjet e ndryshme aritmetikore n gjuhn C++ shkruhen duke i shfrytzuar operatort aritmetikor q shihen n kolonn e par t tabels s dhn n Fig.2.16.

Elementet e gjuhs C++ 55

Operatori + * / %

Operacioni Mbledhja Zbritja Shumzimi Pjestimi Moduli

Shembull 3+4 9-6 5*4 8/5. 8%5

Rezultati 7 3 20 1.6 3

Fig.2.16 Operatort aritmetikor Prdorimi i katr operatorve t par (+, -, * dhe /) sht i njjt me prdorimin e operatorve prkats aritmetikor. Kurse operatori % si rezultat e jep mbetjen, prkatsisht modulin nga pjestimi i plot i dy numrave t plot. Nga shembulli i marr n tabel, pr operatorin % shihet se mbetja nga pjestimi i plot i numrit 8 me numrin 5 sht 3. Shembull Programi prmes s cilit tregohet prdorimi i operatorit %, gjat pjestimit t plot t numrave x me numrin k, ku x ndryshohet mes vlerave 1 dhe 10, kurse vlera e variabls k kompjuterit i jepet si vler hyrse prmes tastiers.

// Programi moduli #include <iostream> #include <iomanip> using namespace std; int main() { int k,x,y; cout << "\nVlera hyrse k: "; cin >> k; cout << "\nTabela e rezultateve\n\n"; for (x=1;x<=10;x++) { y=x%k; cout << setw(3) << x << " %" << setw(2) << k << " =" << setw(2) << y << endl; } cout << endl; return 0;

56 Bazat e programimit n C++


}

Nse pas ekzekutimit t programit, pr variabln k kompjuterit i jepet vlera 4, rezultati q paraqitet n ekran do t duket si n Fig.2.17.

Fig.2.17 Rezultati i programit moduli1 Duhet pasur kujdes gjat prdorimit t operatorit t pjestimit, kur dy vlerat q pjestohen jan deklaruar si numra t plot, sepse edhe rezultati i pjestimit do t jet nj numr i plot.

Shprehjet aritmetikore
Me kombinimin e variablave dhe t operatorve aritmetikor mund t shkruhen shprehje t ndryshme aritmetikore, ngjashm si edhe n matematik. Kshtu, p.sh., shprehja matematikore: 3x+4y-5az n gjuhn C++ shkruhet: 3*x+4*y-5*a*z Brenda shprehjeve aritmetikore t shkruara n gjuhn C++, sipas nevojs mund t prdoren kllapat e vogla, plotsisht njlloj si edhe n matematik. P.sh., shprehja matematikore: 3(2x-1)-2(y+3a+b)-x/(y+2) n gjuhn C++ shkruhet: 3*(2*x-1)-2*(y+3*a+b)-x/(y+2)

Elementet e gjuhs C++ 57 Prdorimi i kllapave sht i domosdoshm veanrisht gjat pjestimit, pr ta prcaktuar plotsisht t pjestuarin dhe pjestuesin, sepse shum leht mund t ndodhin gabime. Kllapat duhet t prdoren edhe n rastet kur paraqiten dy operator aritmetikor njri pas tjetrit. P.sh., nse duam ta shumzojm me numrin 5 me vlern negative t variabls x, shprehja prkatse duhet t shkruhet: 5*(-x) ku, duke i shfrytzuar kllapat eliminohet prdorimi i operatorit pr shumzim dhe atij pr zbritje njri pas tjetrit. Duke e shfrytzuar operatorin e shoqrimit (barazimin), vlerat q fitohen nga shprehjet aritmetikore mund t'u ndahen variablave t cilat shnohen para operatorit t barazimit. Kshtu, p.sh., me shprehjen e shkruar n gjuhn C++: y=2*a+3*b-c variabls y i shoqrohet vlera e cila llogaritet prmes shprehjes, e cila sht shnuar n ann e djatht t barazimit. Gjat shkruarjes s programeve n gjuhn C++, si edhe n gjuht e tjera programuese prdoren edhe shprehje t cilat n matematik jan t palogjikshme, si sht, p.sh., shprehja: i=i+1 me t ciln n gjuhn C++ nnkuptohet rritja pr 1 e vlers s variabls i. Kompjuteri, shprehjet e tilla i kupton drejt, sepse prmes tyre urdhrohet q vlera numerike e shprehjes n ann e djatht t barazimit t'i ndahet variabls, e cila figuron n ann e majt t barazimit.

Forma t shkurtuara t shprehjeve


N gjuhn C++, pr dallim nga gjuht e tjera programuese, prdoren disa forma t shkurtuara t shkruarjes s shprehjeve, t cilat jan shpjeguar n vijim. Nse duam q vlern e nj variable ta rrisim pr 1, variabln e shkruajm duke shnuar pas saj ++. Kshtu, p.sh., me shprehjen: c++; vlera e variabls c rritet pr 1. Ngjashm shkruhet edhe pr zvoglimin e variabls pr 1, p.sh., kshtu: c--;

58 Bazat e programimit n C++ Pr rritjen ose zvoglimin e vlers s nj variable v mund t prdoren edhe shprehjet t cilat n form t prgjithshme duken kshtu: v += h; ose v -= h; ku h sht hapi me t cilin rritet ose zvoglohet vlera e variabls v. Kshtu, p.sh., pr ta rritur pr 1 vlern e variabls c shkruajm: c += 1; kurse pr ta zvogluar pr 1, ngjashm shkruajm: c -= 1; Variablat mund t rriten ose t zvoglohen edhe me nj hap t fardoshm. P.sh., vlera e variabls t do t rritet pr 5.5, nse shkruajm: t += 5.5; ose do t zvoglohet pr 3.2, nse shkruajm: t -= 3.2; Plotsisht njlloj sikurse q prdoren operatort += (plus-barazi) dhe -= (minus barazi), prdoren edhe kombinimet e 3 operatorve t tjer aritmetikor: *=, /= dhe %=. Variabla v dhe operatori pr rritje (++), ose operatori pr zvoglim (--), mund t shkruhen n dy forma: forma prefikse: ++v ose --v forma postfikse: v++ ose v-Ktu, te verzioni me prefiks, vlera e variabls v rritet (zvoglohet) dhe pastaj prdoret. Kurse te verzioni me postfiks, vlera e variabls v prdoret dhe pastaj rritet (zvoglohet). Kshtu, p.sh., nse variabla x e ka vlern 5 dhe n program shkruajm: a = ++x;

Elementet e gjuhs C++ 59 meq kemi t bjm me formn prefikse t shprehjes, kompjuteri e nnkupton se s pari duhet ta rris vlern e variabls x pr 1 dhe at t'ia shoqroj variabls a. Prfundimisht, pas ksaj shprehje vlera e variabls a do t jet 6, sa sht edhe vlera e variabls x. Nse shprehja e msiprme shkruhet n formn postfikse, n kt mnyr: a = x++; vlera e variabls x s pari do t'i ndahet variabls a dhe pastaj do t rritet pr 1. Si rezultat i ksaj shprehje, variabls a i ndahet vlera 5, t ciln fillimisht e ka variabla x, pas s cils vlera e variabls x rritet pr 1 dhe bhet 6. Shembull Programi prmes s cilit tregohet prdorimi i formave t shkurtuara t shprehjeve me operatorin e mbledhjes +.

// Programi Operator #include <iostream> using namespace std; int main() { int a=5,b=3,c=6,d=4,x=7; cout << "\nVlera fillestare a=" << a << endl; a++; cout << "Vlera e llogaritur a=" << a << endl; cout << "\nVlera fillestare b=" << b << endl; b += 6; cout << "Vlera e llogaritur b=" << b << endl; cout << "\nVlera fillestare c=" << c << endl; c = ++x; cout << "Vlera e llogaritur c=" << c << endl; cout << "\nVlera fillestare d=" << d << endl; d = x++; cout << "Vlera e llogaritur d=" << d << endl; cout << endl; return 0; }

Programi i dhn sht shkruar ashtu q, pr do variabl, s pari t shtypet vlera me t ciln ajo inicializohet gjat deklarimit t tipit t saj dhe pastaj edhe vlera q fitohet pas llogaritjes prmes formave t shkurtuara t shkruarjes s shprehjeve. Rezultatet q fitohen n ekran do t duken si n Fig.2.18.

60 Bazat e programimit n C++

Fig.2.18 Rezultati i programit operator

Me qllim q disa variablave t'u shoqrohet nj vler e caktuar, n gjuhn C++ mund t shfrytzohen, p.sh., edhe shprehje t forms: a=b=c=d=55;

Radha e ekzekutimit t operatorve


Gjat llogaritjes s vlerave numerike t shprehjeve aritmetikore, kompjuteri e ka parasysh listn e prioritetit t ekzekutimit t tyre, e cila pr operatort aritmetikor duket kshtu: 1. 2. * + / %

ku me prioritet m t madh jan 3 operatort e par, kurse mbledhja dhe zbritja ekzekutohen pas tyre. Kshtu, p.sh., gjat ekzekutimit t shprehjes: y=3*a+b/c-2; s pari kryhet shumzimi, pastaj pjestimi, mbledhja dhe n fund zbritja. Nse, p.sh., variablat e veanta i kan vlerat: a=5, b=10, c=2.5, llogaritja e vlers s variabls y n hapat e veant do t rrjedh kshtu: 1. 2. 3. 4. 3 b 1 3 * / + a c 2 2 = = = = 3 * 5 = 15 10 / 2.5 = 4 15 + 4 = 19 19 - 2 = 17

ku me numra t nxier jan paraqitur hapat e veant, kurse vlera q fitohet n hapin e fundit (numri 17) sht vlera e llogaritur pr variabln y.

Elementet e gjuhs C++ 61 Nse n shprehje paraqiten m shum operator t rangut t njjt, ata ekzekutohen duke shkuar prej ans s majt kah ana e djatht e shprehjes. Kshtu, p.sh., nse jan dhn vlerat: y=5, a=2.5, b=4, c=9 e d=2, pr shprehjen: z=2*y/a-3*b+c/2*d+4 radha e ekzekutimit t operatorve t veant dhe vlerat prkatse jan: 1. 2. 3. 4. 5. 6. 7. 8. 2*y=2*5=10 1/a=10/2.5=4 3*b=3*4=12 c/2=9/2=4.5 4*d=4.5*2=9 2-3=4-12=-8 6+5=-8+9=1 7+4=1+4=5

Nga shembulli i dhn shihet se, p.sh., s pari kryhen operacionet e shumzimit dhe pjestimit. Por, n hapin e 1. kryhet shumzimi, sepse ai gjendet i pari kur shkohet prej ans s majt t shprehjes dhe pastaj n hapin e 2. kryhet pjestimi, meq kur shkohet djathtas takohet menjher pas shumzimit. Nse n shprehje paraqiten kllapa, ngjashm si edhe n matematik, s pari do t kryhen pjest e shprehjes t shkruara brenda kllapave. Nse n shprehje ka m shum kllapa, pr kryerjen e tyre shkohet prej ans s majt kah ana e djatht e shprehjes. Gjat ekzekutimit t shprehjeve brenda kllapave ato merren si shprehje t veanta dhe pr operatort e rangut t njjt shkohet gjithashtu prej ans s majt kah ana e djatht e shprehjes brenda kllapave. Kshtu, p.sh., nse na sht dhn shprehja: g=3*(2*a-3*b)+2*(x+6/a)-4*b+1 dhe nse pr variablat e veanta jan dhn kto vlera: a=4, b=2 dhe x=4, ekzekutimi i operatorve do t rrjedh n kta hapa: 1. 2. 3. 4. 5. 6. 7. 2*a=2*4=8 3*b=3*3=6 1-2=8-6=2 6/a=6/4=1.5 x+4=4+1.5=5.5 3*3=3*2=6 2*5=2*5.5=11

62 Bazat e programimit n C++ 8. 4*b=4*2=8

9. 6+7=6+11=17 10. 9-8=17-8=9 11. 10+1=9+1=10 Vlera 10 q fitohet n hapin e fundit e paraqet vlern e shprehjes n ann e djatht t barazimit, e cila i shoqrohet variabls g. Kur kllapat prfshihen brenda kllapave t tjera, prparsi n kryerje kan pjest e shprehjeve q gjenden n kllapat e brendshme.

Konvertimi i tipit t t dhnave numerike


Nse n nj shprehje aritmetikore paraqiten t dhna t tipeve t ndryshme, kompjuteri tenton t'i konvertoj n t dhna t tipit t njjt. Gjat ksaj, konvertimi do t jet i suksesshm, nse n shprehje paraqiten vetm t dhna t natyrs s njjt. Pr shprehjet me t dhna numerike, n procesin e konvertimit merret parasysh rangimi vijues i t dhnave: char short int long float double long double sipas s cilit lejohet konvertimi n t dhna t rangut m t lart. Kshtu, p.sh., lejohet konvertimi i t dhnave long, n t dhna t tipit float, double dhe long double. Por, gjat konvertimeve t kundrta, p.sh., prej t dhnave long, n t dhna t tipit int, short, ose char, rezultati do t jet me gabime. Lejimi ose moslejimi i nj konvertimi lidhet me hapsirat memoruese q shfrytzohen nga t dhnat e tipeve t ndryshme.

Operatort relacional
N grupin e operatorve relacional bjn pjes operatort t cilt prdoren pr krahasimin e t dhnave, prkatsisht pr testimin e raporteve mes tyre. Pas krahasimit prmes operatorve relacional, si rezultat fitohen vlerat logjike true ose false. Nse nj relacion sht i vrtet, rezultati i tij sht true, kurse pr relacionet e pavrteta rezultati sht false.

Elementet e gjuhs C++ 63 Operatort relacional, t cilt prdoren n gjuhn C++, jan dhn n tabeln e Fig.2.19, ku pr variablat a dhe b jan marr vlerat 4 dhe 7. Operatori < <= == > >= != Domethnia M i vogl se M i vogl se, ose barazi me Barazi me M i madh se M i madh se, ose barazi me Jobarazi me Shembull (a+1) < b (3*a-2) <= (a+2*b) (a+3)==7 (b+2*a)>(3*a) (a+3*b-1) >= (4*b) (8*a-2*b) != (3*a+2) Rezultati true false true true false true

Fig.2.19 Operatort relacional Shembull Programi prmes s cilit krahasohen vlerat numerike t variablave x dhe y, t cilat kompjuterit i jepen prmes tastiers.

// Programi relacioni1 #include <iostream> using namespace std; int main() { bool a; int x,y; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls y: "; cin >> y; if (x == y) a=true; else a=false; cout << "\nRezultati:\n"; if (a != true) cout << "\nNumrat nuk jan t barabart\n"; else cout << "\nNumrat jan t barabart\n"; cout << "Vlera e variabls logjike sht a=" << a << "\n\n"; return 0; }

N program, fillimisht variabla a sht deklaruar si variabl logjike. Pastaj, kompjuterit i urdhrohet q t'i lexoj vlerat numerike t variablave x dhe y, t cilat gjat ekzekutimit t programit duhet t'i jepen prmes tastiers. Nse, p.sh.,

64 Bazat e programimit n C++ kompjuterit i jepen vlerat hyrse x=5 dhe y=7, rezultati n ekran do t duket si n Fig.2.20.

Fig.2.20 Rezultati i programit relacioni1

Ktu, meq vlerat e variablave x dhe y jan t ndryshme, pas krahasimit variabla logjike a do ta marr vlern false. Por, kur shtypet, kompjuteri pr vlern logjike false e shtyp numrin 0 (kurse pr true do ta shtyp numrin 1, ose ndonj numr tjetr t plot, por m t madh se 0).

Operatort logjik
Pr krahasimin e m shum shprehjeve njkohsisht prdoren operatort logjik t dhn n tabeln e Fig.2.21. Operatori && || ! Operacioni Konjuksioni, AND Disjunksioni, OR Negacioni, NOT Shembull (x < 7) && (y ==5) (x != 2) || (x > 3) !(y > 4) Rezultati true false false

Fig.2.21 Operatort logjik Ktu, rezultatet n kolonn e fundit t tabels fitohen nse, p.sh., pr variablat x dhe y merren vlerat 2 dhe 5.

Operatori &&
Pr paraqitje t operacionit logjik AND (DHE) shfrytzohet operatori &&. Rezultati i kryerjes s operacionit AND mbi dy operand do t jet true, nse vlerat e t dy operandve jan true. Shembull Programi prmes s cilit tregohet prdorimi i operatorit logjik &&.

// Programi And #include <iostream> using namespace std;

Elementet e gjuhs C++ 65


int main() { int a=5, b=3; bool x; x=(a > b) && (a == (b+2)); cout << "Vlera e variabls x=" << x << endl; return 0; }

Nse ekzekutohet programi i dhn, n ekran si rezultat do t shtypet mesazhi: Vlera e variabls x=1 sepse sht e sakt (true) vlera e shprehjes relacionale:
x=(a > b) && (a == (b+2))

Gjat llogaritjes s vlers s ksaj shprehje, fillimisht llogariten vlerat e dy pjesve t saj: (a > b) dhe (a == (b+2)) t cilat, n baz t vlerave t variablave a dhe b, jan t sakta (true). N fund, rezultati i operatorit == sht true, sepse vlerat e t dy operandve t saj jan true (jan t barabarta).

Operatori ||
Pr paraqitje t operacionit logjik OR (OSE) shfrytzohet operatori ||. Rezultati i kryerjes s operacionit logjik OR mbi dy operand do t jet true, nse s paku vlera e njrit operand sht true.

Shembull

Programi prmes s cilit tregohet prdorimi i operatorit logjik ||.

66 Bazat e programimit n C++


// Programi Or #include <iostream> using namespace std; int main() { int a=5, b=3; bool x; x=(a < 8) || (a <= (b+1)); cout << "Vlera e variabls x=" << x << endl; return 0; }

Nse ekzekutohet programi i dhn, n ekran si rezultat do t shtypet mesazhi: Vlera e variabls x=1 sepse sht e sakt vlera e shprehjes relacionale: x=(a < 8) || (a <= (b+1)); meq pr vlerat e marra t variablave a dhe b n fillim t programit sht e sakt njra prej dy shprehjeve relacionale t cilat paraqiten si operand, prkatsisht sht e sakt shprehja (a < 8).

Operatori !
Pr paraqitje t operacionit logjik NOT (JO) shfrytzohet operatori !. Rezultati i kryerjes s operacionit logjik JO mbi nj operand do t jet true, nse vlera e operandit sht false, ose zero. Shembull Programi prmes s cilit tregohet prdorimi i operatorit logjik !.

// Programi Not #include <iostream> using namespace std; int main() { int a=5, b=3; bool x; x=!(a > b); cout << "Vlera e variabls x=" << x << endl;

Elementet e gjuhs C++ 67


return 0; }

Nse ekzekutohet programi i dhn, n ekran si rezultat do t shtypet mesazhi: Vlera e variabls x=0 sepse vlera e shprehjes logjike: x=!(a > b); sht 0 (false), meq operandi i cili sht shnuar pas operatorit !, prkatsisht shprehja relacionale (a > b) sht e sakt (true).

Operatori i kushtzuar
N gjuhn C++ prdoret nj operator i veant dypjessh ?:, pr llogaritje t kushtzuar. Shprehjet q formohen duke e shfrytzuar operatorin e kushtzuar n form t prgjithshme duken kshtu: y = k ? a : b; Kompjuteri, sa her q i takon shprehjet e ksaj forme, nse kushti k sht i sakt, variabls y ia ndan vlern e shprehjes a, prndryshe ia ndan vlern e shprehjes b, gj q n matematik shprehet kshtu:
a y = b pr k = true pr k = false

Shembull

Programi prmes s cilit tregohet prdorimi i operatorit t kushtzuar ?:.

// Programi Kusht #include <iostream> using namespace std; int main() {

68 Bazat e programimit n C++


int a=8, b=2; int y; y=(a>b) ? (2*a+1) : (3*b-2); cout << "Vlera e variabls y=" << y << endl; return 0; }

N program, operatori i kushtzuar sht shfrytzuar gjat prcaktimit t vlers s shprehjes y. Prmes ksaj shprehje, merret se y=2*a+1, nse a>b, prndryshe merret se y=3*b-2. Meq, n baz t vlerave t variablave a dhe b plotsohet kushti a>b, kompjuteri si rezultat do t shtyp: Vlera e variabls y=17 sepse llogaritet prmes shprehjes y=2*a+1.

Komentet
Q programi t jet i kuptueshm, qoft edhe pas nj kohe m t gjat, ose edhe nga shfrytzues t tjer, n pjes t ndryshme t tij mund t shkruhen tekste, t cilat njihen edhe si komente (ang. comment). N gjuhn C++ komentet mund t shkruhen n dy mnyra: komente brenda nj rreshti (ang. end-of-line comment) dhe komente brenda nj blloku (ang. block comment). Gjat kompajlimit t programit, kompjuteri komentet i eliminon, sepse ato shfrytzohen vetm nga prpiluesi i programit.

Komentet brenda nj rreshti


Komentet brenda nj rreshti fillojn me dy vija t pjerrta //, dikund pas komands s shkruar n at rresht dhe vazhdojn deri n fund t rreshtit. Shembull Programi prmes s cilit gjendet vlera e antarit m t vogl n vektorin e dhn A(m).

// Programi Koment1 #include <iostream> using namespace std; int main() {

Elementet e gjuhs C++ 69


const int m=5; int i, b; int A[m]={7,-3,4,9,-2}; b=A[0]; for (i=0;i<m;i++) if (A[i] < b) b=A[i]; cout << "Antari m i vogl: " << b << endl; return 0; }

Nse ekzekutohet programi i dhn, si rezultat do t shtypet: Antari m i vogl: -3 meq n mesin e vlerave t antarve t vektorit A, vlera m e vogl sht -3. N fillim t programit sht dhn nj rresht me koment, i cili fillon me dy vijat e pjerrta: // Programi Koment1 ku sht shnuar emri Koment1, me t cilin emr njkohsisht programi sht ruajtur edhe n disk. N program mund t shkruhen edhe komente t tjera, p.sh., ashtu si shihet n vijim.
// Programi Koment2 // prmes ktij programi gjendet antari // m i vogl n vektorin e dhn A(m) #include <iostream> using namespace std; int main() { const int m=5; int i, b; // Deklarimi i variablave int A[m]={7,-3,4,9,-2}; // Vlerat e vektorit b=A[0]; // Vlera fillestare for (i=0;i<m;i++) if (A[i] < b) b=A[i]; // Ndrrimi i vlers cout << "Antari m i vogl: " << b << endl; return 0; }

70 Bazat e programimit n C++

Komente brenda bllokut


Shpesh pr komente nevojiten tekste m t gjata. Pr kt qllim komentet shkruhen brenda bllokut i cili fillon me /* dhe prfundon me */. N kt mnyr mund t shkruhen edhe komentet brenda nj rreshti. N vijim sht dhn programi Koment3, tek i cili komentet jan shnuar brenda blloqeve.
/* Programi Koment3 prmes ktij programi gjendet antari m i vogl n vektorin e dhn A(m) */ #include <iostream> using namespace std; int main() { const int m=5; int i, b; /* Deklarimi i variablave */ int A[m]={7,-3,4,9,-2}; /* Vlerat e vektorit */ b=A[0]; /* Vlera fillestare */ for (i=0;i<m;i++) if (A[i] < b) b=A[i]; /* Ndrrimi i vlers */ cout << "Antari m i vogl: " << b << endl; return 0; }

Zbrazsirat brenda programit


Me qllim t rritjes s dukshmris s programit, prkatsisht coptimit t tij n pjes, t cilat paraqesin trsi t veanta, n program mund t shtohen rreshta t zbrazt. Shembull Programi prmes s cilit n vektorin e dhn A(m)numrohen antart negativ (n), antart me vler zero (z) dhe antart pozitiv (p).

// Programi Numrimi #include <iostream> using namespace std; int main() { const int m=9;

Elementet e gjuhs C++ 71


int i,n,z,p; int A[m]={3,-8,0,-4,5,9,-6,0,2}; n=0; z=0; p=0; cout << "\nR e z u l t a t i\n\n"; for (i=0;i<m;i++) { if (A[i]<0) n=n+1; else if (A[i]==0) z=z+1; else p=p+1; } cout << "Numri i antarve negativ n=" << n << endl; cout << "Numri i antarve zero z=" << z << endl; cout << "Numri i antarve pozitiv p=" << p << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t shihet si n Fig.2.22.

Fig.2.22

72 Bazat e programimit n C++ Rezultati i programit Numrimi Edhe komandat e veanta mund t shkruhen duke ln zbrazsira brenda tyre, ose mund t shkruhen edhe n m shum rreshta. Kshtu, p.sh., shprehja: y=3*a-2*b+4*(a+2*x-c); mund t shkruhet n kt mnyr: y = 3*a - 2*b + 4*(a+2*x-c); ose edhe kshtu: y = 3*a - 2*b + 4*(a+2*x-c); gj q, kur kemi t bjm me shprehje t gjata, mund ta rrisim kontrollin mbi saktsin e shkruarjes s tyre.

3
Leximi dhe shtypja
Leximi dhe shtypja e zakonshme 74 Leximi dhe shtypja e disa vlerave 79 Shtypja decimale dhe eksponenciale 103 Leximi dhe shtypja e vektorve 104 Leximi dhe shtypja e matricave 112 Leximi dhe shtypja e teksteve 116 Shtypja e kushtzuar 122

74 Bazat e programimit n C++

T dhnat t cilat shfrytzohen gjat llogaritjeve n programe t ndryshm kompjuterit i jepen duke i deklaruar ato si konstante, ose duke ua ndar variablave prkatse prmes operatorit t shoqrimit. Por, vendosja e till e t dhnave n memorien e kompjuterit sht jopraktike, sepse shfrytzuesi i programit, pr t'i ndryshuar t dhnat q prpunohen, duhet t ket qasje n verzionin burimor t programit. Pr kt qllim, n rast t prgjithshm, kompjuterit t dhnat i jepen prmes tastiers, e cila llogaritet si njsi hyrse standarde. Gjat ksaj, n program duhet t shkruhen komandat prkatse pr leximin e t dhnave. Rezultatet e fituara kompjuterit mund t'i urdhrohet t'i shtyp n ekran, duke i vendosur komandat pr shtypje brenda programit. N fillim t do programi t shkruar n C++, n t cilin shfrytzohen komandat pr lexim dhe shtypje, patjetr duhet t vendoset komanda paraprocesorike: #include <iostream> prmes s cils mundsohet leximi i t dhnave t cilat i jepen kompjuterit, si dhe shtypja e rezultateve.

Leximi dhe shtypja e zakonshme


Forma m e thjesht e komands pr leximin e vlers s variabls v duket kshtu: cin >> v; Pas ekzekutimit t ksaj komande, kompjuteri ndalet dhe pret q prmes tastiers t'i jepet vlera e variabls v. Q kompjuteri ta marr vlern, pasi ajo t jet, n tastier duhet t shtypet edhe tasti Enter. Komanda pr shtypje t vlers s variabls v, n formn e saj m t thjesht, shkruhet kshtu: cout << v;

Leximi dhe shtypja 75 Shembull Programi prmes s cilit lexohet vlera numerike e variabls x dhe pastaj e njjta edhe shtypet n ekran.

// Programi Lexo1 #include <iostream> using namespace std; int main() { int x; cin >> x; cout << x; return 0; }

Nse ekzekutohet programi i dhn, fillimisht n ekran do t paraqitet kursori n form t nj vize pr nnvizim, me ka kompjuteri na njofton se sht duke e pritur vlern e variabls x q t'ia shkruajm prmes tastiers. Pastaj, p.sh., nse prmes tastiers e shkruajm numrin 15 dhe e shtypim tastin Enter, n ekran do t shtypet numri 15. Por, n vazhdim t numrit t shtypur do t shkruhet edhe mesazhi t cilin kompjuteri e gjeneron automatikisht, kshtu: 15Press any key to continue Me qllim t eliminimit t ksaj pamje, kompjuterit duhet t'i urdhrojm q pas shtypjes s vlers s variabls x t kaloj n rresht t ri. Pr kt qllim, n program duhet t shtohet edhe nj komand pr shtypje, n kt mnyr:
cout << x; cout << endl;

pas s cils programi do t duket kshtu:


// Programi Lexo2 #include <iostream> using namespace std; int main() { int x; cin >> x; cout << x; cout << endl; return 0; }

76 Bazat e programimit n C++ N kt rast, pas shtypjes s vlers s variabls x, me ekzekutimin e komands s dyt pr shtypje, prmes manipulatorit endl, kompjuterit i urdhrohet kalimi n rresht t ri. Rezulati q fitohet pas shtimit t komands n fjal, nse prmes tastiers kompjuterit i jepet vlera 15, do t duket kshtu: 15 Press any key to continue

Prfshirja e teksteve n rezultate


Rezultatet q shtypen rregullisht shoqrohen edhe me tekste t ndryshme. Tekstet q duhet t shtypen n ekran shkruhen n kuadr t komands pr shtypje cout, duke i vendosur ato brenda thonjzave ("). Kshtu, p.sh., nse n programin lexo1 t dhn m sipr, shkruhen dy komanda pr shtypje: cout << "Vlera e lexuar x="; cout << x; gj q n program duket kshtu:
// Programi Lexo3 #include <iostream> using namespace std; int main() { int x; cin >> x; cout << "Vlera e lexuar x="; cout << x; return 0; }

rezultati q shtypet n ekran do t duket: Vlera e lexuar x=15 N kt rast, kompjuteri s pari e ekzekuton komandn e par pr shtypje, prmes s cils teksti i shkruar nn thonjza prshkruhet n ekran: Vlera e lexuar x= Pastaj, me komandn e dyt, n vazhdim t tekstit shtypet vlera e lexuar e variabls x.

Leximi dhe shtypja 77 Dy komandat pr shtypje q u dhan m sipr mund t shkruhen si nj komand, kshtu: cout << "Vlera e lexuar x=" << x; ose, me qllim t pamjes m t mir edhe n kt mnyr: cout << "Vlera e lexuar x=" << x; gj q do t praktikohet n vijim t ktij teksti. Gjat ekzekutimit t programit t msiprm, prve rezultatit i cili shtypet prmes komandave pr shtypje, n vazhdim kompjuteri automatikisht e shtyp edhe mesazhin: Press any key to continue Nse n program komanda e msiprme pr shtypje shkruhet n kt mnyr: cout << "Vlera e lexuar x=" << x << endl; prkatsisht nse programi duket kshtu:
// Programi Lexo4 #include <iostream> using namespace std; int main() { int x; cin >> x; cout << "Vlera e lexuar x=" << x << endl; return 0; }

rezultati q shtypet n ekran, si dhe mesazhi i prmednur m sipr, do ta ken kt pamje: Vlera e lexuar x=15 Press any key to continue

78 Bazat e programimit n C++ Urdhri pr kalim n rresht t ri, me efekt t njjt, mund t jepet prmes shtypjes s karakterit pr rresht t ri (ang. newline character) \n, i cili shnohet nn thonjza: cout << "Vlera e lexuar x=" << x << "\n"; Gjat ksaj, n vend t thonjzave t zakonshme "\n", karakteri pr rresht t ri mund t shkruhet edhe nn thonjza t njfishta '\n'.

Shtypja e teksteve gjat leximit


Me qllim q shfrytzuesi i programit t informohet pr vlern q kompjuterit duhet t'i jepet prmes tastiers, para komands pr lexim cin, prmes komands cout mund t shtypet nj tekst prcjells. Kshtu, p.sh., nse te programi i msiprm, para komands pr lexim, shtohet komanda: cout << "Vlera hyrse x: "; programi do t duket si n vijim.
// Programi Lexo5 #include <iostream> using namespace std; int main() { int x; cout << "Vlera hyrse x: "; cin >> x; cout << "Vlera e lexuar x=" << x << "\n"; return 0; }

Nse pas ksaj ekzekutohet programi, n ekran fillimisht do t paraqitet teksti: Vlera hyrse x: dhe kompjuteri do t pres q prmes tastiers t shkruhet vlera prkatse e variabls x. Nse, p.sh., n tastier shkruhet numri 9, ai do t vendoset n vazhdim t tekstit t siprm, kshtu: Vlera hyrse x: 9

Leximi dhe shtypja 79

N fund, pas shtypjes s tastit Enter n tastier, prmes komands dalse cout do t shtypet edhe rezultati, pr ta fituar n ekran pamjen prfundimtare e cila shihet n Fig.3.1. Fig.3.1 Rezultati i programit Lexo5 ku, si tham edhe m sipr, rreshti i par lidhet me komandn e par cout dhe komandn cin, kurse rreshti i dyt me komandn e dyt cout.

Leximi dhe shtypja e disa vlerave


Nse njkohsisht duhet t lexohen vlerat e disa variablave, leximi mund t bhet me komanda t veannta pr lexim, ose me vetm nj komand.

Leximi me komanda t veanta


Kur n program paraqiten m shum komanda pr lexim, kompjuteri pas ekzekutimit t secils prej tyre do t pres q prmes tastiers t'i jepen vlerat e variablave prkatse q lexohen. Shembull Programi prmes s cilit lexohen dhe shtypen vlerat numerike t variablave a dhe b.

// Programi Lexo6 #include <iostream> using namespace std; int main() { int a,b; cin >> a; cout << "Vlera e lexuar a=" << a << "\n"; cin >> b; cout << "Vlera e lexuar b=" << b << "\n"; return 0; }

80 Bazat e programimit n C++ Gjat ekzekutimit t programit t dhn, kompjuteri do t ndalet pas secils komande cin, pr t'ia dhn prmes tastiers vlerat e variablave t shnuara n vazhdim t ktyre komandave. Nse, p.sh., kompjuterit i jepen vlerat 5 dhe -3, duke e shtypur pas secils vlere tastin Enter, si rezultat i komandave cout, n ekran do t shtypen 2 rreshta me rezultate, kshtu: Vlera e lexuar a=5 Vlera e lexuar b=-3 N fakt, duke i pasur parasysh edhe vlerat t cilat ia japim kompjuterit prmes tastiers, n ekran do ta kemi pamjen e dhn n Fig.3.2.

Fig.3.2 Rezultati i programit Lexo6 Gjat leximit t vlerave pr variablat a dhe b, q t prcaktohet sakt se ciln vler sht duke e pritur kompjuteri, paraprakisht jepet komanda pr shtypje t tekstit prcjells. Kshtu, p.sh., programi i dhn m sipr mund t shkruhet si n vijim.
// Programi Lexo7 #include <iostream> using namespace std; int main() { int a,b; cout << "Shtype n tastier numrin a: "; cin >> a; cout << "Vlera e lexuar a=" << a << "\n"; cout << "Shtype n tastier numrin b: "; cin >> b; cout << "Vlera e lexuar b=" << b << "\n"; return 0; }

Leximi dhe shtypja 81 Ktu, para se kompjuterit t'i jepen prmes tastiers vlerat e variablave a dhe b, n ekran do t paraqiten mesazhet prcjellse, s pari: Shtype n tastier numrin a: dhe pastaj edhe mesazhi i dyt: Shtype n tastier numrin b: Nse prmes tastiers kompjuterit i jepen vlerat e prmendura m sipr, pas prfundimit t ekzekutimit t programit, n ekran do ta kemi pamjen e dhn n Fig.3.3. Fig.3.3 Rezultati i programit Lexo7

Leximi me vetm nj komand


Kompjuteri mund t urdhrohet q me nj komand cin t'i lexoj vlerat e m shum variablave. Kshtu, pr leximin e vlerave t variablave v1, v2, ..., vn, komanda prkatse cin do ta ket pamjen: cin >> v1 >> v2 ..... >> vn; Gjat ekzekutimit t programit, n t cilin paraqitet nj komand e till, kompjuterit duhet t'i jepen prmes tastiers njkohsisht vlerat e t gjitha variablave, duke ln mes do vlere s paku nj zbrazsir. Shembull Programi prmes s cilit lexohen vlerat numerike t variablave a, b dhe c.

// Programi Lexo8 #include <iostream> using namespace std; int main()

82 Bazat e programimit n C++


{ int a,b,c; cin >> a >> b >> c; cout << "Vlera e lexuar a=" << a << "\n"; cout << "Vlera e lexuar b=" << b << "\n"; cout << "Vlera e lexuar c=" << c << "\n"; return 0; }

Gjat ekzekutimit t programit, kompjuteri do t ndalet dhe do t pres q prmes tastiers t'ia shkruajm vlerat e t tri variablave q lexohen, t ndara mes vete me zbrazsir, p.sh., kshtu: 5 -3 9 N fund, kur t shkruhen vlerat dhe t shtypet tasti Enter, n ekran do ta kemi pamjen e dhn n Fig.3.4.

Fig.3.4 Rezultati i programit Lexo8

Shtypja n nj hapsir t caktuar


Gjat shtypjes s rezultateve shpesh nevojitet q paraprakisht t prcaktohet numri i vendeve q do t shfytzohen pr shtypje t tyre, prkatsisht hapsira n t ciln shtypet rezultati. Pr kt qllim brenda komands cout mund t shfrytzohet manipulatori setw, komanda cout.width ose sekuenca dalse me karakterin pr tabelim horizontal \t.

Leximi dhe shtypja 83

Manipulatori setw
N form t prgjithshme, manipulatori setw shkruhet kshtu: setw(k) ku k sht numri i vendeve q shfrytzohen pr shtypjen e rezultatit. Kshtu, p.sh., pr ta shtypur vlern e variabls x n 8 vende, komanda cout, bashk me manipulatorin setw brenda saj, duhet t shkruhet n kt mnyr: cout << setw(8) << x; Rezultati i cili fitohet pas ekzekutimit t ksaj komande, nse x e ka vlern 15, n ekran do t duket kshtu: 15 ku me simbolin jan shnuar zbrazsirat t cilat mbesin para numrit gjat shtypjes s tij n hapsirn e rezervuar prmes manipulatorit setw. Shembull Programi prmes s cilit gjendet siprfaqja s dhe perimetri p i katrorit me brinjn a, duke marr pr a vlera t ndryshme mes 1 dhe 10.

// Programi Katrori1 #include <iostream> #include <iomanip> using namespace std; int main() { float a,s,p; for (a=1;a<=10;a++) { s=a*a; p=4*a; cout << setw(5) << a << setw(7) << s << setw(6) << p << endl; }

84 Bazat e programimit n C++


return 0; }

Ktu, pr 3 vlerat q shtypen jan prcaktuar numra t ndryshm vendesh pr shtypjen e tyre. Rezultati q shtypet n ekran pas ekzekutimit t programit do t duket si n Fig.3.5.

Fig.3.5 Rezultati i programit Katrori1

Si shihet nga rezultati i dhn, pr shtypjen e vlerave t brinjs a jan shfrytzuar 5 vende, gj q prcaktohet me manipulatorin setw(5), kurse siprfaqja s dhe perimetri p jan shtypur n 7 dhe 6 vende - prkatsisht, duke i shfrytzuar manipulatort prkats. N fillim t programit t dhn m sipr sht vendosur komanda paraprocesorike: #include <iomanip> sepse brenda fajllit iomanip sht prcaktuar manipulatori setw. Manipulatori setw shfrytzohet edhe gjat shtypjes s teksteve. Shembull Programi prmes s cilit n ekran shtypet teksti Lapsi dhe libri, duke e shkruar do shkronj n nj rresht t ri dhe n nj hapsir, madhsia e s cils sht e barabart me pozitn e shkronjs n tekst.

// Programi Tekst3 #include <iostream> #include <iomanip> using namespace std; int main() { const m=16; int i;

Leximi dhe shtypja 85


char T[m]="Lapsi dhe libri"; for (i=0;i<m;i++) cout << setw(i+1) << T[i] << endl; return 0; }

Nse ekzekutohet programi i dhn, rezultati i cili fitohet n ekran do do t duket si n Fig.3.6.

Fig.3.6 Rezultati i programit Tekst3

N program, hapsira e cila rezervohet pr shtypje prmes manipulatorit setw sht e ndryshueshme, ashtu si ndryshojn edhe vlerat e variabls i.

Komanda cout.width
Pr prcaktimin e vendeve n t cilat do t shtypet nj numr, mund t shfrytzohet edhe komanda: cout.width(k); ku k sht numri i vendeve q do t shfrytzohen pr shtypje. Kshtu, p.sh., nse variabls x i sht ndar vlera -65 dhe brenda nj programi ekzekutohen komandat: cout.width(8); cout << x;

86 Bazat e programimit n C++ vlera n fjal do t shtypet n 8 vende, duke i ln 6 zbrazsira para numrit, n kt mnyr: -65 ku, si tham edhe m par, me simbolin jan shnuar zbrazsirat. Nga kjo q u dha m sipr shihet se efekti i komands cout.width sht i njjt me at t manipulatorit setw. Prmes komands cout.width mund t prcaktohet edhe numri i vendeve n t cilat shtypen tekstet. Shembull Programi prmes s cilit n ekran shtypet teksti Koha e bukur, duke e vendosur komandn cout.width pr prcaktimin e numrit t vendeve n t cilat shtypet, ashtu q t ndryshohet madhsia e hapsirs shtypse.

// Programi Shtypja2 #include <iostream> using namespace std; int main() { int i; for (i=1;i<=10;i++) { cout.width(11+i); cout << "Koha e bukur" << endl; } return 0; }

Nse ekzekutohet programi i dhn, n ekran do t shtypet teksti i shnuar nn thonjza, ashtu si shihet n Fig.3.7.

Fig.3.7 Rezultati i programit Shtypja2

Leximi dhe shtypja 87 Shtypja e ktill sht rezultat i rritjes s hapsirs n t ciln shtypet teksti n fjal, ashtu si rritet vlera e variabls i n unaz, prmes komands: cout.width(11+i);

Karakteri pr tabelim horizontal


Pr kaprcim t nj hapsire t caktuar vendesh gjat shtypjes, mund t shfrytzohet sekuenca dalse me karakterin pr tabelim horizontal \t. Sa her q kompjuteri e takon kt sekuenc dalse, i kaprcen 8 vende (kjo sht vler e nnkuptuar, nse nuk sht ndryshuar nga shfrytzuesi) n rreshtin q sht duke shtypur dhe pastaj e vazhdon shtypjen. Shembull Programi prmes s cilit n ekran shtypet fjala Dita, me zbrazsira mes shkronjave t veanta t fjals, duke e shfrytzuar manipulatorin pr tabelim horizontal \t.

// Programi Tekst5 #include <iostream> #include <iomanip> using namespace std; int main() { const m=5; int i; char F[m]="Dita"; for (i=0;i<m;i++) cout << "\t" << F[i]; cout << endl; return 0; }

Nse ekzekutohet programi i dhn, n ekran do t shtypet fjala Dita kshtu: D i t a

Ktu, me paraqitjen e par t karakterit pr tabelim horizontal \t n komandn cout (pr i=0), kaprcehet fusha prej 8 vendesh (lihen 8 zbrazsira) dhe pastaj shtypet shkronja D. N ciklin e dyt (pr i=1), me shtypjen e manipulatorit n fjal jepet komanda pr kaprcim t fushs prej 8 vendesh, prfshir edhe vendin n t cilin sht shtypur shkronja D dhe pastaj shtypet shkronja e dyt i. N kt mnyr procesi

88 Bazat e programimit n C++ vazhdon derisa t shtypen t gjitha shkronjat e fjals Dita, gj q n ekran duket si n Fig.3.8. Fig.3.8 Rezultati i programit Tekst5 Karakteri pr tabelim horizontal \t mund t shfrytzohet edhe gjat shtypjes s vlerave numerike. Shembull Programi prmes s cilit n ekran shtypen shumat parciale t numrave natyror ift mes 2 dhe n, n t cilt zbrazsirat mes vlerave t shtypura prcaktohen duke e shfrytzuar karakterin pr tabelim horizontal \t.

// Programi Shuma1 #include <iostream> using namespace std; int main() { const n=9; int i,s; s=0; for (i=2;i<=n;i=i+2) { s=s+i*i; cout << '\t' << i << '\t' << s << endl; } return 0; }

Rezultati q fitohet pas ekzekutimit t programit Shuma1 do t duket si n Fig.3.9.

Fig.3.9 Rezultati i programit Shuma1

Leximi dhe shtypja 89

Si shihet edhe n Fig.3.9, n kolonn e par jan shtypur numrat natyror ift, kurse n kolonn e dyt shumat parciale t tyre. Kshtu, p.sh., pr numrin natyror i=4 shuma parciale sht: s=2*2 + 4*4 = 4 + 16 = 20

Vendosja e titullit
Gjat shtypjes s rezultateve n form t tabelave, n fillim t tabels duhet t vendoset titulli prkats. Pr kt qllim shfrytzohet komanda cout, n vazhdim t s cils titulli shkruhet nn thonjza, ashtu q pjest e tij t prputhen me kolonat prkatse t tabels. Shembull Programi prmes s cilit llogariten katrort dhe kubet e numrave natyror mes 1 dhe n.

// Programi Titulli1 #include <iostream> #include <iomanip> using namespace std; int main() { const n=5; int i; cout << " Numri Katrori Kubi" << endl << "-------------------------" << endl; for (i=1;i<=n;i++) { cout << setw(4) << i << setw(8) << i*i << setw(8) << i*i*i << endl; } return 0; }

Nse ekzekutohet programi i dhn, rezultati do t duket si n Fig.3.10.

90 Bazat e programimit n C++

Fig.3.10 Rezultati i programit Titulli1 Si shihet nga figura e dhn, n fillim t tabels jan shkruar dy rreshta. N rreshtin e par sht titulli i tabels, kurse rreshti i dyt prmban viza pr kufizim t titullit nga vlerat e tabels. Rreshti me viza mund t shtypet edhe n fund t tabels, duke e vendosur nj komand pr shtypje para komands return 0, t shkruar n kt mnyr:
cout << "-------------------------" << endl;

Pas vendosjes s komands n fjal, rezultati q fitohet n ekran do t duket si n Fig.3.11.

Fig.3.11 Pamja e tabels pas shtypjes s rreshtit me viza n fund t saj

Mbushja e hapsirs me mostr


Pjesa e zbrazt e hapsirs, e cila sht rezervuar pr shtypje, prmes komands: cout fill('s'); mund t mbushet me simbolin s, i cili zgjidhet sipas dshirs.

Leximi dhe shtypja 91

Shembull

Programi prmes s cilit n ekran shtypen vlerat numerike t variablave a dhe b, duke i mbushur hapsirat prkatse, t rezervuara pr shtypje t tyre, me simbolet * dhe ^.

// Programi Mostra1 #include <iostream> #include <iomanip> using namespace std; int main() { int a=6547,b=-7392; cout << "Vlera a="; cout.width(8); cout.fill('^'); cout << a << endl; cout << "Vlera b="; cout.width(10); cout.fill('*'); cout << b << endl; return 0; }

Rezultati q fitohet n ekran, pas ekzekutimit t programit t dhn, duket kshtu: Vlera a=^^^^6547 Vlera b=*****-7392 Komandat cout.width dhe cout.fill duhet t vendosen para shtypjes s do vlere, prkatsisht nuk vlejn pr t gjitha shtypjet q vijojn pas tyre. Gjat mbushjes me mostr, hapsira pr shtypje mund t prcaktohet edhe prmes manipulatorit setw. Shembull Programi prmes s cilit n ekran shtypet vlera numerike e variabls x, n hapsirn e cila prcaktohet prmes manipulatorit setw, duke e mbushur hapsirn para vlers q shtypet me simbolin *.

92 Bazat e programimit n C++

// Programi Mostra2 #include <iostream> #include <iomanip> using namespace std; int main() { int x=3725; cout << "Rezultati x="; cout.fill('*'); cout << setw(8) << x << endl; return 0; }

Nse ekzekutohet programi i dhn, n ekran do t shtypet: Rezultati x=****3725 Simboli s, i cili shfrytzohet pr mbushje, mund t prcaktohet edhe prmes manipulatorit: setfill('s') i cili shkruhet brenda komands cout. Gjat shfrytzimit t ktij manipulatori nuk ka rndsi si prcaktohet madhsia e hapsirs pr shtypje (qoft prmes komands cout.width ose prmes manipulatorit setw). Shembull Programi prmes s cilit gjat shtypjes s vlers s distancs s kaluar, pr mbushjen e hapsirs s zbrazt para numrit me simbolin # shfrytzohet manipulatori setfill.

// Programi Mostra3 #include <iostream> #include <iomanip> using namespace std; int main() { double d=327.56; cout << "Distanca e kaluar: "; cout << setw(10)

Leximi dhe shtypja 93


<< setfill('0') << d << " Km\n"; return 0; }

Si rezultat, pas ekzekutimit t programit t dhn, n ekran fitohet: Distanca e kaluar: 0000327.56 Km Mbushjet mund t shfrytzohen edhe gjat shtypjes s teksteve. Shembull Programi prmes s cilit n ekran shtypet 10 her teksti Gjuha C++, ngjashm si edhe teksti i shtypur prmes programit Shtypja2 t dhn m par, por ktu zbrazsirat para tekstit plotsohen me pika. Ktu, njkohsisht shtypet numri i rreshtave i, n fillim t do rreshti t shtypur.

// Programi shtypja3 #include <iostream> #include <iomanip> using namespace std; int main() { int i; for (i=1;i<=10;i++) { cout << left << "i=" << setw(2) << setfill(' ') << i << setw(8+i) << right << setfill('.') << "Gjuha C++" << endl; } return 0; }

Rezultati q shtypet n ekran pas ekzekutimit t programit t dhn do t duket si n Fig.3.12.

94 Bazat e programimit n C++

Fig.3.12 Rezultati i programit Shtypja3 Si mund t shihet edhe n program, pr realizimin e shtypjes s vlerave t variabls i, si dhe tekstit t zhvendosur Gjuha C++, n program jan shfrytzuar manipulatort setw, left, right dhe setfill.

Shtypja majtas dhe djathtas


Si shihet edhe nga shembujt e programeve t dhna m sipr, vlerat q shtypen n hapsirat e rezervuara pr shtypje vendosen djathtas. Por, prmes manipulatorit left kto vlera mund t shtypen majtas ksaj hapsire. Shembull Programi prmes s cilit tregohet prdorimi i manipulatorit left, pr shtypje t vlers negative d majtas hapsirs s rezervuar pr shtypje.

// Programi Majt #include <iostream> #include <iomanip> using namespace std; int main() { double d=-125.32; cout << "Vlera negative: "; cout.fill('*'); cout << setw(10) << left << d << endl; return 0; }

Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran duket kshtu:

Leximi dhe shtypja 95 Vlera negative: -125.32*** Si shihet edhe nga rezultati, vlera e variabls d sht shtypur majtas hapsirs prej 10 vendesh, e cila sht rezervuar pr shtypje. Kurse pjesa e mbetur prej 3 vendesh e ksaj hapsire sht mbushur me yje. Ngjashm me manipulatorin left shfrytzohet edhe manipulatori right, prmes s cilit vlerat shtypen djathtas hapsirs s rezervuar pr shtypje. Shembull Programi prmes s cilit n ekran shtypen vlerat e variablave x dhe y, njra majtas e tjetra djathtas hapsirs s prcaktuar pr shtypje.

// Programi Shtypja1 #include <iostream> #include <iomanip> using namespace std; int main() { double x=532.74,y=49.6; cout.fill('='); cout.width(10); cout << left << x << endl; cout.width(10); cout << right << y << endl; return 0; }

Pas ekzekutimit t programit t dhn, rezultati q shtypet n ekran duket kshtu: 532.74==== ======49.6 Ktu, prmes komandave cout.width(10) sht prcaktuar q numrat t shtypen n 10 vende, kurse zbrazsirat jan mbushur me simbolin =, pr ka sht shfrytzuar komanda cout.fill('='). Pr t'i shtypur vlerat numerike majtas dhe pastaj djathtas hapsirs s rezervuar pr shtypje jan shfrytzuar manipulatort left dhe right, t prfshir brenda komandave prkatse cout.

96 Bazat e programimit n C++

Shtypja e parashenjs
Parashenja e numrave me vler negative shtypet patjetr. Por, pr shtypje t parashenjs s numrave pozitiv duhet t shfrytzohet manipulatori showpos. Shembull Programi prmes s cilit tregohet prdorimi i manipulatorit showpos, pr shtypje t parashenjs s vlerave t variablave x dhe y, t cilat ndryshohen brenda nj unaze.

// Programi Parashenja #include <iostream> #include <iomanip> using namespace std; int main() { double x=-5.3,y; cout << " x y" << endl; while (x<=2.5) { y=x*x; cout << showpos << " " << x << " " << y << endl; x=x+1; } return 0; }

Pas ekzekutimit t programit t dhn, rezultati n ekran duket si n Fig.3.13.

Fig.3.13 Rezultati i programit Parashenja

Leximi dhe shtypja 97 Si shihet edhe nga rezultatet, pavarsisht se far parashenje kan vlerat, me prdorimin e manipulatorit showpos, prve parashenjs s numrave negativ, n ekran shtypen edhe parashenjat e numrave pozitiv. Efekti i manipulatorit showpos eliminohet duke e shfrytzuar manipulatorin noshowpos.

Mundsi t tjera t shtypjes s parashenjs


Parashenja e numrit mund t shtypet n fillim t hapsirs t rezervuar pr shtypje, vlera numerike djathtas ksaj hapsire, kurse hapsira para numrit mund t mbushet me mostr t caktuar. Pr kt qllim shfrytzohet manipulatori internal. Shembull Programi prmes s cilit tregohet prdorimi i manipulatorit internal, pr shtypje t parashenjs negative t numrit d majtas hapsirs s rezervuar pr shtypje.

// Programi Internal #include <iostream> #include <iomanip> using namespace std; int main() { double d=-125.32; cout << "Vlera negative: "; cout.fill('*'); cout << setw(10) << internal << d << endl; return 0; }

Pas ekzekutimit t programit t dhn, rezultati q shtypet n ekran do ta ket kt pamje: Vlera negative: -***125.32 Ktu, pr mbushje me yje t pjess s hapsirs s rezervuar, shfrytzohet komanda:
cout.fill('*');

98 Bazat e programimit n C++ N praktik, manipulatori internal mund t shfrytzohet edhe n rastet kur duam q hapsirn e zbrazt para numrit me parashenj negative ta plotsojm me zero. P.sh., pr kt qllim, n programin e msiprm, komanda cout.fill duhet t shkruhet kshtu:
cout.fill('0');

Rezultati i cili fitohet, nse ekzekutohet programi Internal, pas ktij ndryshimi, sht: Vlera negative: -000125.32 ku, si shihet, hapsira e zbrazt para numrit sht plotsuar me zero. Nse nga programi eliminohet komanda cout.fill, rezultati do t shtypet ashtu q parashenja minus shtypet n fillim t hapsirs s rezervuar, kurse numri djathtas ksaj hapsire, kshtu: Vlera negative: -125.32 duke ln mes parashenjs dhe numrit nj zbrazsir prej 3 vendesh, t cilat ktu, pr t'i dalluar m mir, jan plotsuar me simbolin .

Shtypja me precizitet t caktuar


Gjat shtypjes s numrave, t cilt e kan edhe pjesn pas piks dhjetore, (pjesn decimale), kompjuteri nuk i shtyp zerot n fund t ksaj pjese. Gjithashtu, nse numri nuk ka asnj shifr n pjesn dhjetore t tij, prkatsisht nse ato jan shifra zero, kompjuteri nuk i shtyp as zerot dhe as pikn. Nse duam q vlera q shtypet t merret me nj precizitet t caktuar, prkatsisht ta prcaktojm se me sa shifra pas piks dhjetore duam t punojm, para shtypjes duhet t prdoret komanda: cout.precision(k); ose manipulatori: setprecision(k)

Leximi dhe shtypja 99 ku k sht numri i shifrave dhjetore, n t cilin numr prfshihet edhe pika dhjetore. Gjat prcaktimit t numrit t shifrave me t cilat duam t punojm, kompjuteri njkohsisht e rrumbullakson shifrn e fundit t numrit, n baz t rregullave pr rrumbullaksim t dhna n vijim. Nse shifra e par q nuk shtypet sht 5, ose m e madhe se 5, shifra e fundit q shtypet do t rritet pr 1. Nse shifra e par q nuk shtypet sht m e vogl se 5, shifra e fundit q shtypet nuk e ndryshon vlern.

Rrumbullaksimi nuk i ndryshon vlerat numerike prkatse n memorien e kompjuterit. Shembull Programi prmes s cilit llogaritet me precizitet t caktuar vlera numerike e shprehjes y=27/x, nse variabla x nuk merr vler zero dhe kompjuterit i jepet prmes tastiers.

// Programi Sakt1 #include <iostream> using namespace std; int main() { double x,y; cout << "Vlera hyrse: "; cin >> x; y=27/x; cout << "Vlera y="; cout.precision(5); cout << y << endl; return 0; }

Nse pas ekzekutimit t programit, prmes tastiers kompjuterit i jepet vlera 7, rezultati q shtypet n ekran do t jet: Vlera y=3.8571 Ky rezultat shtypet sepse vlera e pjestimit 27/7 sht 3.8571428, kurse me komandn: cout.precision(5);

100 Bazat e programimit n C++ nga kompjuteri sht krkuar t punohet me precizitet prej 5 vendesh dhjetore, ku si vend numrohet edhe pika. Me komandn cout.precision nuk prcaktohet edhe numri i shifrave pas piks dhjetore, t cilat shtypen. Kshtu, p.sh., nse gjat ekzekutimit t programit t msiprm, prmes tastiers kompjuterit si vler hyrse pr variabln x ia japim vlern 4, rezultati q shtypet n ekran sht: Vlera y=6.75 vler e cila fitohet edhe nse llogarisim me kalkulator t dors. Pr precizitetin e krkuar, 3 vendet t tjera t numrit jan 0 dhe prandaj si t panevojshme kompjuteri nuk i paraqet n ekran. Nse duam q n ekran t shtypen t gjitha shifrat pas piks dhjetore, pr precizitetin e prcaktuar, duhet ta shfrytzojm manipulatorin showpoint. Kshtu, p.sh., nse te programi i msiprm, n fillim t urdhrit t fundit pr shtypje e shfrytzojm manipulatorin n fjal:
cout << showpoint << y << endl;

rezultati, i cili do t shtypet pr vlern hyrse 4, do t duket kshtu: Vlera y=6.7500 Efekti i manipulatorit showpoint eliminohet duke e shfrytzuar manipulatorin noshowpoint. Shembull Programi prmes s cilit shihet rrumbullaksimi i shifrave dhjetore gjat shtypjes s vlers s variabls x, me precizitet q ndryshon me ndryshimin e vlerave t variabls i.

// Programi Sakt2 #include <iostream> using namespace std; int main() { int i; double x; x=5.123456789; for (i=1; i<=10; i++) { cout << "i=" << i

Leximi dhe shtypja 101


<< "\t"; cout << "x="; cout.precision(i); cout << x << endl; } return 0; }

Rezultatet q shtypen n ekran pas ekzekutimit t programit Sakt2 do t duken si n Fig.3.14.

Fig.3.14 Rezultati i programit Sakt2

N program, prmes komands: cout.precision(i); prcaktohet numri i shifrave n pjesn dhjetore t vlers s variabls x, t cilat shtypen, duke e prfshir n at numr edhe pikn. Kshtu, p.sh., pr i=4 pjesa dhjetore q shtypet (.123) e prmban pikn dhe 3 shifra. Nga rezultatet e fituara shihet se prej vlers i=5 e deri n i=9 shifrat e fundit t numrave jan t rrumbullaksuara, n baz t rregullave pr rrumbullaksim, t cilat u prmendn m sipr. Kshtu, p.sh., pr i=6, nse do t shtypej numri x i pa rrumbullaksuar dhe me precizitet 6, n ekran do t kishim: i=6 x=5.12345

kurse shifrat dhjetore q nuk shtypen jan 6789. Meq shifra e par q nuk shtypet sht 6, n baz t rregullave pr rrumbullaksim, shifra e fundit dhjetore q shtypet rritet pr 1, prkatsisht shifra 5 bhet 6. N vend t komands:
cout.precision(i);

n programin e dhn m sipr mund t shfrytzohet manipulatori:

102 Bazat e programimit n C++

setprecision(i)

ashtu si shihet n vijim.


// Programi Sakt3 #include <iostream> #include <iomanip> using namespace std; int main() { int i; double x; x=5.123456789; for (i=1; i<=10; i++) { cout << "i=" << i << "\t"; cout << "x="; cout << setprecision(i) << x << endl; } return 0; }

Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran nuk do t dallohet nga ai q sht dhn n Fig.3.14.

Shtypja n sisteme t tjera numerike


Vlera e variablave t tipit intexher, prve n sistemin decimal t numrave, mund t shtypen edhe n sistemin oktal dhe heksadecimal. Shembull Programi prmes s cilit vlera e variabls a shtypet edhe n sistemin numerik oktal dhe heksadecimal.

// Programi Heksadec #include <iostream> #include <iomanip> using namespace std; int main() { int a;

Leximi dhe shtypja 103


cout << "Vlera e cin >> a; cout << "\nVlera << dec << a; cout << "\nVlera << oct << a; cout << "\nVlera << hex << a << endl; return 0; } variabls a: "; decimale: "

oktale: "

heksadecimale: "

Nse ekzekutohet programi i dhn dhe si vler hyrse pr variabln a kompjuterit prmes tastiers i jepet vlera 185, rezultati q shtypet n ekran sht: Vlera decimale: 185 Vlera oktale: 271 Vlera heksadecimale: b9 Gjat shtypjes s vlerave n sistemin heksadecimal t numrave, q gjat shtypjes s shifrave heksadecimale kompjuteri t'i shfrytzoj shkronjat e mdha, para shtypjes s vlerave duhet t shfrytzohet manipulatori uppercase. Kshtu,
p.sh., nse n programin e msiprm komanda prkatse shkruhet kshtu: cout << << << << << uppercase "\nVlera heksadecimale: " hex a endl;

vlera heksadecimale n rreshtin e fundit t rezultatit t msiprm sht: Vlera heksadecimale: B9 N t kundrtn, pr kalim n shtypje me shkronja t vogla t vlerave heksadecimale duhet t shfrytzohet manipulatori nouppercase.

Shtypja decimale dhe eksponenciale


Numrat me pik dhjetore n ekran zakonisht shtypen n formn e tyre decimale. Por, duke e shfrytzuar manipulatorin scientific, vlerat numerike n ekran mund t paraqiten edhe n formn e tyre eksponenciale. Pas ksaj, pr

104 Bazat e programimit n C++ kthim n shtypjen n formn decimale duhet t shfrytzohet manipulatori fixed.

Leximi dhe shtypja e vektorve


Vlerat e antarve t vektorit mund t prcaktohen gjat deklarimit t tipit t tij, prmes deklarimit si konstante, ose ato kompjuterit mund t'i jepen edhe prmes tastiers si vlera hyrse. Gjithashtu, vlerat e vektorit mund t shtypen, duke e vendosur komandn prkatse pr shtypje brenda nj unaze.

Prcaktimi gjat deklarimit t tipit


Vlerat e antarve t vektorit kompjuterit mund t'i jepen gjat deklarimit t tipit t tij, duke i shnuar kto vlera brenda kllapave. Shembull Programi prmes s cilit kompjuterit i jepen vlerat numerike t vektorit A(m) gjat deklarimit t tipit t tyre dhe pastaj kto vlera shtypen n ekran.

// Programi Vektor1a #include <iostream>


using namespace std;

int main() { const int m=5; int i; int A[m]={7,2,-4,9,3}; cout << "Vektori A" << "\n"; for (i=0;i<m;i++) cout << A[i] << " "; cout << "\n"; return 0; } N program, vlerat e antarve t vektorit kompjuterit i jan dhn gjat deklarimit t tipit t tij, prmes komands: int A[m]={7,2,-4,9,3}; Numri i antarve t vektorit m sht deklaruar si konstante e tipit int, prmes komands:

Leximi dhe shtypja 105

const int m=5; Prfshirja e tipit gjat ktij deklarimi nuk sht e domosdoshme, por, ashtu si sht dhn edhe m par, kjo komand mund t shkruhet thjesht: const m=5;

Shtypja e antarve t vektorit


Si shihet n programin Vektor1 t dhn m sipr, antart e vektorit shtypen duke e shfrytzuar unazn: for (i=0;i<m;i++) prmes s cils vlerat e indeksit ndryshohen mes vlers i=0 dhe i=m-1, me hap 1, gj q m hollsisht do t shpjegohet n kapitullin vijues. Komanda pr shtypje: cout << A[i] << " "; prmes s cils shtypet antari A[i] i vektorit dhe pastaj edhe dy zbrazsira, sht vendosur brenda unazs. Rezultati q fitohet n ekran pas ekzekutimit t programit n fjal do t duket kshtu: Vektori A 7 2 -4 9 3

ku mes do numri t shtypur ka dy zbrazsira. Me komandn pr shtypje: cout << "\n"; kompjuterit i urdhrohet q pas shtypjes s vektorit, mesazhi prfundimtar, q e prmendm m par, t shtypet n rreshtin vijues. Titulli Vektori A sht shtypur duke e shfrytzuar komandn: cout << "Vektori A" << "\n"; e cila sht vendosur menjher n fillim, para se t shtypen vlerat e vektorit. Pr futjen e zbrazsirave, pas do vlere t shtypur, mund t prdoret edhe karakteri pr tabelim horizontal \t, prmes s cilit vlerat numerike shtypen n

106 Bazat e programimit n C++ fusha me nga 8 vende (duke filluar prej vendit t par n fush). P.sh., nse te programi i dhn m sipr, komanda pr shtypje, e cila gjendet brenda unazs, shkruhet: cout << A[i] << "\t"; antart e vektorit shtypen kshtu: Vektori A 7 2 -4 9 3

Antart e vektorit mund t shtypen edhe n kt mnyr: A={ 7 2 -4 9 3 }

Pr ta realizuar shtypjen e till, programi n fjal duhet t shkruhet si n vijim. // Programi Vektor1b #include <iostream>
using namespace std;

int main() { const int m=5; int i; int A[m]={7,2,-4,9,3}; cout << "A={ "; for (i=0;i<m;i++) cout << A[i] << " "; cout << "}\n"; return 0; } Antart e vektorit mund t shtypen edhe vertikalisht. Pr kt qllim, n komandn pr shtypje t antarve t vektorit, pas do shtypje, duhet t urdhrohet kalimi n nj rresht t ri, prmes shtypjes s karakterit pr rresht t ri \n (shih programin vijues).

// Programi Vektor1c #include <iostream>

Leximi dhe shtypja 107


using namespace std;

int main() { const int m=5; int i; int A[m]={7,2,-4,9,3}; cout << "Vektori A" << "\n"; for (i=0;i<m;i++) cout << A[i] << "\n"; return 0; } Rezultati i cili fitohet n ekran pas ekzekutimit t programit do t duket kshtu: Vektori A 7 2 -4 9 3 Q rezultati t ket nj form m t qart, antart e vektorit mund t shtypen edhe n kt mnyr: A[1]=7 A[2]=2 A[3]=-4 A[4]=9 A[5]=3 Pr shtypje t ktill, programi n fjal duhet t shkruhet si n vijim. // Programi Vektor2 #include <iostream>
using namespace std;

int main() { const int m=5; int i; int A[m]={7,2,-4,9,3}; for (i=0;i<m;i++) cout << "A[" << i

108 Bazat e programimit n C++ << "]=" << A[i] << "\n"; return 0; } Hapsira n t ciln shtypen antart e veant t vektorit mund t prcaktohet prmes komands cout.width, prdorimi i s cils sht shpjeguar m par. Kshtu, p.sh., programi pr shtypje t antarve t vektorit t marr si shembull n programet e msiprme, duke e shfrytzuar kt komand, mund t duket si n vijim. // Programi Vektor3 #include <iostream>
using namespace std;

int main() { const int m=5; int i; int A[m]={7,2,-4,9,3}; cout << "Vektori A" << "\n"; for (i=0;i<m;i++) { cout.width(5); cout << A[i]; } cout << "\n"; return 0; } N program, duke e vendosur komandn cout.width(5) brenda unazs pr shtypje, sht parapar q do antar i vektorit t shtypet n 5 vende. Rezultati q fitohet pas ekzekutimit t programit n fjal do t duket kshtu: Vektori A 7 2 -4 9 3

Ktu, vlerat e veanta jan shkruar duke filluar prej fundit t 5 vendeve t rezervuara pr secilin antar t vektorit. Pr prcaktimin e vendeve n t cilat shtypen antart e veant t vektorit mund t shfrytzohet edhe manipulatori setw, ashtu si sht shpjeguar prdorimi i tij gjat shtypjes s vlerave t ndryshme.

Leximi dhe shtypja 109

Prcaktimi prmes deklarimit si konstante


Antart e vektorit mund t deklarohen edhe si konstante, ngjashm me at q u shpjegua m sipr, duke e shnuar para fjaln const. Shembull Programi prmes s cilit llogaritet prodhimi p i antarve pozitiv t vektorit t dhn A(m).

// Programi Vektor4 #include <iostream> #include <iomanip> using namespace std; int main() { const m=5, A[m]={4,-9,-6,2,7}; int i,p; cout << "\nAntart pozitiv\n\n"; p=1; for (i=0;i<m;i++) if (A[i]>0) { cout << setw(10) << A[i] << "\n"; p=p*A[i]; } cout << "\nProdhimi p=" << p << "\n\n"; return 0; }

N program, prmes komands:


const m=5, A[m]={4,-9,-6,2,7};

kompjuterit i jepen vlerat e vektorit A(m), si dhe numri i antarve t tij m. Kurse pr shtypje t antarve t vektorit, brenda unazs, sht vendosur komanda:
cout << setw(10) << A[i] << "\n";

N fund, jasht unazs sht vendosur edhe komanda pr shtypjen e prodhimit t antarve pozitiv t vektorit:
cout << "Prodhimi p="

110 Bazat e programimit n C++


<< p << "\n";

Rezultati q fitohet n ekran, pas ekzekutimit t programit Vektor4, do t duket si n Fig.3.15.

Fig.3.15 Rezultati i programit Vektor4

Prcaktimi prmes leximit


Vlerat e antarve t vektorit kompjuterit mund t'i jepen edhe duke i shkruar prmes tastiers. Pr kt qllim, komanda pr leximin e tyre duhet t vendoset brenda unazs, prmes s cils ndryshohen indekset e antarve t veant. Shembull Programi prmes s cilit fillimisht lexohen antart e vektorit A(m) dhe pastaj ato shtypen n ekran.

// Programi Vektor3 #include <iostream>


using namespace std;

int main() { const int m=5; int i, A[m]; /* Leximi */ for (i=0;i<m;i++) { cout << "Antari i " << i+1 << ": "; cin >> A[i]; cout << "\n";

Leximi dhe shtypja 111 } /* Shtypja */ cout << "A={ "; for (i=0;i<m;i++) cout << A[i] << " "; cout << "}\n"; return 0; } Ktu, brenda unazs pr lexim jan vendosur 3 komanda. Me komandn e par: cout << "Antari i " << i+1 << ": "; fillimisht shtypet teksti i shnuar nn thonjza: Antari i pastaj vlera aktuale e indeksit i, i cili sht i rritur pr 1, me qllim q numrimi i antarve t mos filloj prej zeros, dhe n fund shtypen dy pika dhe nj zbrazsir, pr ta fituar, p.sh., mesazhin e par kshtu: Antari i 1: Pas komands cout, brenda unazs vjen komanda e dyt: cin >> A[i]; prmes s cils urdhrohet leximi i vlers s antarit A[i]. Me komandn e tret n unaz: cout << "\n"; urdhrohet kalimi n rresht t ri, pr t vazhduar me shtypjen e mesazhit pr leximin e antarit t dyt. Nse, p.sh., vlerat e antarve t vektorit shtypen n tastier, duke i zgjedhur lirisht, pas shkruarjes s antarit t fundit, n ekran do ta kemi pamjen e dhn n Fig.3.16.

112 Bazat e programimit n C++

Fig.3.16 Pamja e ekranit pas ekzekutimit t programit dhe shkruarjes n tastier t vlerave t antarve t vektorit Ktu, n rreshtin e fundit jan shtypur antart e vektorit prmes komandave t prfshira n pjesn e programit pr shtypje.

Leximi dhe shtypja e matricave


Si te vektort, edhe vlerat e antarve t matricave mund t prcaktohen gjat deklarimit t tipit t tyre, prmes deklarimit si konstante, ose kto vlera kompjuterit mund t'i jepen si vlera hyrse prmes tastiers. Pr shtypje t antarve t matricave, komandat prkatse duhet t vendosen brenda dy unazave, me t cilat zgjedhen rreshtat dhe kolonat e tyre. Plotsisht njlloj si te matricat veprohet edhe gjat leximit, ose shtypjes s fushave shumdimensionale.

Prcaktimi gjat deklarimit t tipit


Vlerat e antarve t matrics kompjuterit mund t'i jepen gjat deklarimit t tipit t saj, duke i shnuar kto vlera brenda kllapave. Shembull Programi prmes s cilit kompjuterit i jepen vlerat numerike t matrics A(m,n) gjat deklarimit t tipit t saj.

// Programi Matrica1 #include <iostream> #include <iomanip> using namespace std; int main() { const int m=4, n=5; int i,j; int A[m][n]={{5,3,-4,8,2}, {1,5,2,7,-8}, {-3,9,5,2,4}, {4,-1,3,6,8}};

Leximi dhe shtypja 113


cout << "Matrica A" << "\n"; for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(7) << A[i][j] ; cout << "\n"; } return 0; }

N program, vlerat numerike t matrics jan prcaktuar prmes komands: int A[m][n]={{5,3,-4,8,2}, {1,5,2,7,-8}, {-3,9,5,2,4}, {4,-1,3,6,8}}; Pr shtypjen e antarve t matrics shfrytzohet komanda: cout << setw(7) << A[i][j] ; e cila sht vendosur brenda dy unazave t realizuara me komandat for, prmes s cilave prcaktohen vlerat e dy indekseve (indeksit i pr zgjedhje t rreshtave t matrics dhe indeksit j pr zgjedhje t kolonave t saj). Komanda: cout << "\n"; sht vendosur n pjesn ku dilet nga unaza e dyt, me qllim t kalimit n nj rresht t ri (pasi t prfundoj shkruarja e rreshtit paraprak t matrics). Rezultati q shtypet n ekran pas ekzekutimit t programit Matrica1 do t duket si n Fig.3.17.

Fig.3.17 Rezultati i programit Matrica1

114 Bazat e programimit n C++

Gjat shtypjes s matricave, zbrazsirat mes elementeve t veanta q shtypen mund t lihen edhe duke e shfrytzuar karakterin pr tabelim horizontal \t. Kshtu, p.sh., pjesa e programit t msiprm, prmes s cils realizohet shtypja e matrics, mund t duket si n vijim. for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << A[i][j] << "\t"; cout << "\n"; } Rezultati q fitohet pas ekzekutimit t programit me modifikimin n fjal do t duket si n Fig.3.18. Fig.3.18 Rezultati q fitohet, nse gjat shtypjes shfrytzohet karakteri pr tabelim horizontal Ktu, antart e veant t matrics jan shtypur n hapsira me nga 8 vende, duke e filluar shkruarjen e tyre prej fillimit t hapsirave prkatse.

Prcaktimi prmes deklarimit si konstante


Antart e matrics mund t deklarohen edhe si konstante, ngjashm me at q u shpjegua pr vektort. Shembull Programi prmes s cilit gjendet numri i antarve negativ k t matrics A(m,n), e cila deklarohet n fillim t programit si konstante.

// Programi Matrica2 #include <iostream> #include <iomanip> using namespace std; int main()

Leximi dhe shtypja 115


{ const int m=4, n=5; const A[m][n]={{5,3,-4,8,2}, {1,5,2,7,-8}, {-3,9,5,2,4}, {4,-1,3,6,8}}; int i,j,k=0; cout << "\n Matrica A\n" << endl; for (i=0;i<m;i++) { for (j=0;j<n;j++) { if (A[i][j]<0) k=k+1; cout << setw(4) << A[i][j]; } cout << endl; } cout << "\nNumri i antarve negativ k=" << k << "\n\n"; return 0; }

N program, prmes deklarimeve const: const int m=4, n=5; const A[m][n]={{5,3,-4,8,2}, {1,5,2,7,-8}, {-3,9,5,2,4}, {4,-1,3,6,8}}; kompjuterit i jepen vlerat e dimensioneve t matrics dhe t antarve t saj. Pr numrimin e antarve negativ t matrics, brenda unazave, jan vendosur komandat: if (A[i][j]<0) k=k+1; Kurse komandat pr shtypje t matrics jan t njjta me ato q u shfrytzuan edhe te programi Matrica1. Por, pr kalim n rresht t ri, n vend t karakterit \n ktu shfrytzohet manipulatori endl, me efekt plotsisht t njjt. Rezultati q fitohet n ekran pas ekzekutimit t programit Matrica2 do t duket si n Fig.3.19.

116 Bazat e programimit n C++

Fig.3.19 Rezultati i programit Matrica2

Prcaktimi prmes leximit


Vlerat e antarve t matrics kompjuterit mund t'i jepen edhe duke i shkruar prmes tastiers, plotsisht njlloj si edhe gjat leximit t antarve t vektorit. Por, ktu duhet pasur m shum kujdes, sepse kemi t bjm me dy indekse, njri pr rreshtat dhe tjetri pr kolonat.

Leximi dhe shtypja e teksteve


Gjat puns me kompjuter, shpesh prpunohen edhe tekste. Komandat pr leximin dhe shtypjen e teksteve jan t ngjashme me ato q u prmendn gjat leximit dhe shtypjes s vlerave numerike. Shembull Programi prmes s cilit lexohet dhe shtypet teksti t cilin kompjuterit ia japim si vler hyrse prmes tastiers.

// Programi teksti #include <iostream>


using namespace std;

int main() { char a[15]; cout << "Teksti hyrs: "; cin >> a ; cout << "\nTeksti i lexuar: " << a << "\n"; return 0; } Nse gjat ekzekutimit t programit, pas mesazhit: Teksti q lexohet:

Leximi dhe shtypja 117

prmes tastiers shkruhet fjala: Universiteti kompjuteri si rezultat n ekran do t shtyp: Teksti i lexuar: Universiteti Gjat leximit t zakonshm, nse teksti q ia japim kompjuterit si vler hyrse prmes tastiers prmban zbrazsira, kompjuteri e lexon vetm pjesn e tekstit deri te zbrazsira e par, duke e injoruar plotsisht pjesn tjetr t tekstit. Nse gjat ekzekutimit t programit t msiprm, kompjuterit si vler hyrse i jepet fjalia: Koha e bukur si rezultat do t shtypet: Teksti i lexuar: Koha sepse kompjuteri e ndrpret leximin me paraqitjen e zbrazsirs s par n tekstin hyrs.

Prcaktimi i gjatsis s tekstit q lexohet


Duke e zgjedhur gjrsin e fushs ku do t shkruhet teksti, prcaktohet gjatsia e tekstit q lexohet. Pr kt qllim shfrytzohet komanda: cin.width(k); me t ciln kompjuteri njoftohet q ta lexoj vetm tekstin me k-1 karaktere, duke e kaprcyer pa lexuar pjesn e tekstit q mund t jet shkruar prmes tastiers. Shembull Programi prmes s cilit lexohen vetm 4 karaktere t tekstit a, q kompjuterit i jepet prmes tastiers, i cili sht deklaruar me gjatsi prej 10 karakteresh. // Programi Shtypja6 #include <iostream>
using namespace std;

118 Bazat e programimit n C++ int main() { char a[10]; cout << "Teksti hyrs: "; cin.width(5); cin >> a ; cout << "\nTeksti i lexuar: " << a << "\n"; return 0; } Nse ekzekutohet programi i dhn dhe nse pas mesazhit: Teksti hyrs: si vler hyrse prmes tastiers shkruhet fjala Prishtina, rezultati n ekran do t shtypet kshtu: Teksti i lexuar: Pris Shkurtimi i fjals Prishtina n 4 shkronja sht rezultat i prdorimit t komands cin.width(5), prmes s cils leximi kufizohet n 5 karaktere, por kompjuteri prej karaktereve t shkruara prmes tastiers i merr vetm 4, sepse si karakter t 5 ia shton karakterin zero ('\0'). N program, te komanda pr shtypje: cout << "\nTeksti i lexuar: " << a << "\n"; karakteri pr kalim n rresht t ri \n paraqitet n fillim dhe n fund t saj. N kt mnyr, kompjuterit i urdhrojm q, para se ta shtyp fjalin Teksti i lexuar, t kaloj n rresht t ri, pastaj ta shtyp vlern e variabls a (tekstin hyrs) dhe prsri t kaloj n rresht t ri. Edhe n kt rast, nse teksti t cilin kompjuterit ia japim prmes tastiers ka zbrazsira, kompjuteri e lexon vetm pjesn e tekstit deri te zbrazsira e par.

Leximi i fjalive
Kompjuterit mund t'i jepen si vlera hyrse edhe tekste t fardoshme, si jan, p.sh., fjalit. Por, leximi nuk mund t bhet prmes komands standarde pr lexim cin, sepse kompjuteri e merr vetm pjesn e fjalis t ciln ia kemi dhn prmes tastiers deri n paraqitjen e zbrazsirs s par.

Leximi dhe shtypja 119 Pr leximin e teksteve t cilat prmbajn edhe zbrazsira, prdoret komanda e veant pr lexim: cin.get(a,k); ku a sht variabla n t ciln vendoset teksti i lexuar, kurse k sht gjatsia e tekstit q lexohet, e shprehur n karaktere. Shembull Programi prmes s cilit tregohet problemi i leximit t fjalis brenda s cils ka zbrazsira si dhe versioni i tij me zgjidhje t problemit n fjal.

// Programi Lexo5 #include <iostream>


using namespace std;

int main() { char A[20]; cout << "Fjalia q lexohet: "; cin >> A; cout << "Fjalia q u lexua: " << A << "\n"; return 0; } Nse ekzekutohet programi i dhn dhe si vler hyrse prmes tastiers kompjuterit i jepet fjalia: Koha e bukur, n ekran do ta kemi pamjen: Fjalia q lexohet: Koha e bukur Fjalia q u lexua: Koha Prej ktu shihet se kompjuteri si rezultat e ka shtypur vetm fjaln Koha, kurse pjesn tjetr t fjalis nuk e ka lexuar fare, sepse leximin e ka ndrprer me paraqitjen e zbrazsirs s par. Pr ta eliminuar problemin n fjal, pr lexim duhet t shfrytzohet komanda e prmendur m sipr cin.get, ashtu si sht shkruar n programin vijues. // Programi Lexo6 #include <iostream>
using namespace std;

120 Bazat e programimit n C++ int main() { const m=20; char A[m]; cout << "Fjalia q lexohet: "; cin.get(A,m); cout << "Fjalia q u lexua: " << A << "\n"; return 0; } Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepet fjalia e prmendur m sipr, n ekran do ta kemi pamjen: Fjalia q lexohet: Koha e bukur Fjalia q u lexua: Koha e bukur Prej ktu shihet se kompjuteri e ka lexuar dhe pastaj edhe e ka shtypur komplet fjalin edhe prkundr asaj se brenda saj ka zbrazsira. Gjatsia e tekstit q lexohet prmes komands cin.get, kufizohet n nj karakter m pak se sa q jan rezervuar vende prmes komands char, sepse si karakter t fundit n tekst kompjuteri vet e shton karakterin zero ('\0'), ashtu si e kemi prmendur edhe m par.

Leximi i komplet rreshtit


Pr ta lexuar si vler hyrse tekstin e shkruar prmes tastiers brenda nj rreshti, mund t prdoret edhe komanda: cin.getline(a,k); ku a sht vektori i karaktereve ku vendoset teksti prej k-karakteresh i cili lexohet. Kompjuteri, si ta takoj kt komand, e lexon prmbajtjen e rreshtit aktual, pavarsisht nga prmbajtja e tij. Shembull Programi prmes s cilit tregohet prdorimi i komands cin.getline pr leximin e tekstit t shkruar n nj rresht.

// Programi lexo7

Leximi dhe shtypja 121 #include <iostream>


using namespace std;

int main() { const m=20; char A[m]; cout << "Fjalia q lexohet: "; cin.getline(A,m); cout << "Fjalia q u lexua: " << A << "\n"; return 0; } Nse ekzekutohet programi dhe si fjali hyrse prmes tastiers jepet ajo q u prmend n programin paraprak Lexo6, rezultati n ekran do t duket plotsisht njlloj.

Shtypja e kushtzuar
Brenda komands cout mund t prdoret operatori i kushtzuar, prmes s cilit mund t realizohet shtypja e kushtzuar. Shembull Programi prmes s cilit tregohet shtypja e kushtzuar duke e shfrytzuar operatorin e kushtzuar.

// Programi Shtypja5 #include <iostream>


using namespace std;

int main() { int x,y; cout << "Vlera pr x: "; cin >> x; cout << "Vlera pr y: "; cin >> y; cout << x << (x==y ? " sht" : " nuk sht") << " barazi me " << y << "\n"; return 0; }

122 Bazat e programimit n C++

Nse ekzekutohet programi i dhn, kompjuterit s pari duhet prmes tastiers t'i jepen vlerat numerike pr variablat x dhe y. Pastaj, si rezultat n ekran shtypet vlera e variabls x dhe varsisht nga ajo se a sht ose jo x i barabart me y, shtypet mesazhi sht, ose mesazhi nuk sht. N fund, shtypja kompletohet me shtypjen s pari t mesazhit barazi me si dhe vlers s variabls y. Kshtu, p.sh., nse kompjuterit si vlera hyrse i jepen vlerat x=5 dhe y=7, mesazhi q shtypet n ekran n formn e tij prfundimtare do t jet: 5 nuk sht barazi me 7 Kushti i cili shkruhet para pikpyetjes ? mund t jet i fardoshm, si mund t jen t fardoshme edhe ato q shtypen para dhe pas dy pikave.

4
Degzimet
Komanda pr degzim if 124 Kaprcimi pa kusht 158 Degzime me komandn switch 167

124 Bazat e programimit n C++

Komandat, t cilat gjenden brenda nj programi, kompjuteri i ekzekuton nj nga nj, sipas radhs me t ciln ato paraqiten. Por, ekzekutimi i till sekuencial i komandave ndrpritet, nse n program paraqiten komandat pr degzim. N gjuhn C++, degzimet realizohen duke i shfrytzuar komandat if, goto dhe switch.

Komanda pr degzim if
Komanda themelore prmes s cils realizohen degzimet e ndryshme n programe sht komanda if. Gjat shkruarjes s komands if mund t paraqiten disa raste t degzimeve: t zakonshme, t prbra, t shumfishta dhe t ndrthurura.

Degzime t zakonshme
Nse n degt e komands if ka vetm nga nj komand thuhet se komanda if sht e zakonshme.

Me nj deg
Pjesa e bllok-diagramit me nj deg (shih djathtas), n form t prgjithshme n program shkruhet kshtu: if (k) a; ku jan: k - kushti pr degzim. a - komand e cila ekzekutohet, nse plotsohet kushti k. Shembull Programi prmes s cilit krahasohen dy vlera hyrse x dhe y. Nse sht x<y, llogaritet vlera z si shum e tyre, prndryshe fillimisht merret se z=-5.

Degzimet 125

// Programi if1 #include <iostream> using namespace std; int main() { double x,y,z; cout << "Vlera x="; cin >> x; cout << "\nVlera y="; cin >> y; z=-5; if (x<y) z=x+y; cout << "\nRezultati sht z="; cout << z << "\n"; return 0; }

N program, n fakt llogaritet vlera e funksionit z prmes shprehjes vijuese:

5 z= x + y

pr x y pr x < y

Nse ekzekutohet programi, kompjuteri s pari do t krkoj q prmes tastiers t'ia japim vlerat hyrse x dhe y. Kshtu, p.sh., nse pas mesazheve prkatse n tastier shtypen vlerat x=3 dhe y=7, meq plotsohet kushti x<y, pr variabln z do t llogaritet vlera z=3+7=10. Si rezultat i veprimeve t prmendura m sipr, n ekran do ta kemi pamjen e dhn n Fig.4.1.

Fig.4.1 Rezultati i programit if1 Komanda pr degzim if mund t paraqitet brenda unazs, prmes s cils prsritet nj pjes e caktuar e programit.

126 Bazat e programimit n C++

Shembull

Programi prmes s cilit llogaritet vlera e funksionit:

y = 2 x 3 (i + 2 )
i =1 (i 4)

n +1

nse vlerat e variablave x dhe n kompjuterit i jepen prmes tastiers.


// Programi if8 #include <iostream> using namespace std; int main() { double x,s,y; int i,n; cout << "Vlera x="; cin >> x; cout << "\nVlera n="; cin >> n; s=0; for (i=1;i<=n+1;i++) if (i!=4) s=s+(i+2); y=2*x-3*s; cout << "\nVlera e funksionit y="; cout << y << "\n"; return 0; }

N program, komanda pr degzim:


if (i!=4)

sht vendosur brenda unazs q realizohet me komandn for. Prmes saj, nse vlera e variabls i sht e ndryshme nga numri 4, ekzekutohet komanda:
s=s+(i+2);

prmes s cils shums i shtohet antari vijues. Pamja e ekranit pas prfundimit t ekzekutimit t programit if8 do t duket si n Fig.4.2, ku, si shihet, prmes tastiers kompjuterit i jan dhn vlerat hyrse x=7 dhe n=5.

Degzimet 127

Fig.4.2 Rezultati i programit if8 Rezultati i fituar mund t vrtetohet nse n shprehjen e dhn zvendsohen vlerat hyrse, kshtu: y=2*7-3*{(1+2)+(2+2)+(3+2)+(5+2)} =14-3*19
=-43

Kushti i cili prfshihet brenda komands if mund t prmbaj edhe vlera t antarve t vektorve. Shembull Programi prmes s cilit gjendet se sa antar (z) t vektorit F[m] jan numra m t mdhenj se vlera e variabls x, e cila kompjuterit i jepet prmes tastiers si numr i plot.

// Programi if14 #include <iostream> using namespace std; int main() { const m=8, F[m]={7,3,4,9,-2,5,11,6}; int i,x,z; cout << "\nVlera e variabls x:"; cin >> x; z=0; for (i=0;i<m;i++) if (F[i]>x) z=z+1; cout << "\nM t mdhenj se x=" << x << " jan " << z << " antar" << "\n\n"; return 0; }

128 Bazat e programimit n C++ Ktu, komanda if sht vendosur brenda unazs me t ciln ndryshohen indekset i t antarve t vektorit. Gjat ekzekutimit t ksaj komande, kur gjendet se antari i caktuar F[i] i vektorit sht m i madh se vlera hyrse x, ekzekutohet shprehja:
z=z+1;

me t ciln numratori z rritet pr 1. Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit si vler hyrse pr variabln x i jepet vlera 5, rezultati q fitohet n ekran do t duket si n Fig.4.3.

Fig.4.3 Rezultati i programit if14 N degn e komands if mund t vendoset edhe komanda pr shtypje. Shembull Programi prmes s cilit shtypen antart negativ t vektorit t dhn G[n]. Njkohsisht, pran do antari duhet t shtypet edhe indeksi prkats. Antart e vektorit t deklarohen si konstante n fillim t programit.

// Programi if15 #include <iostream> #include <iomanip> using namespace std; int main() { const n=8, G[n]={6,-3,-9,5,-8,2,-4,7}; int i; char t[]="------------------"; cout << "\nAntart negativ\n\n" << "Indeksi Antari" << endl << t << endl; for (i=0;i<n;i++) if (G[i]<0) cout << setw(4) << i << setw(10) << G[i]

Degzimet 129
<< endl; cout << t << endl; return 0; }

Ktu, n degn e komands if sht parapar shtypja e antarve negativ t vektorit dhe t indekseve prkatse. Rezultati q fitohet n ekran, pas ekzekutimit t programit, do t duket si n Fig.4.4.

Fig.4.4 Rezultati i programit if15

Me dy deg
Pjesa e bllok-diagramit me dy deg (shih djathtas), n form t prgjithshme n program shkruhet kshtu: if (k) a; else b; ku jan: k - kushti pr degzim. a - komand e cila ekzekutohet, nse plotsohet kushti k. b - komand e cila ekzekutohet, nse nuk plotsohet kushti k. Shembull Programi n t cilin prmes komands if gjendet raporti mes vlerave hyrse x dhe y. Pastaj, nse x sht m i madh ose barazi me y, llogaritet vlera e funksionit z=2*x+1, prndryshe kjo vler llogaritet me shprehjen z=x+y.

// Programi if2
#include <iostream> using namespace std;

130 Bazat e programimit n C++ int main() { double x,y,z; cout << "Numri i par x="; cin >> x; cout << "\nNumri i dyt y="; cin >> y; if (x>=y) z=2*x+1; else z=x+y; cout << "\nVlera e llogaritur sht z="; cout << z << "\n"; return 0; } Prmes programit t dhn n fakt llogaritet vlera e funksionit:

2 x + 1 z= x + y

pr x y pr x < y

Nse ekzekutohet programi i dhn dhe prmes tastiers, si vlera hyrse pr variablat x dhe y, kompjuterit i jepen numrat 7 dhe 3, n ekran do ta kemi pamjen e dhn n Fig.4.5.

Fig.4.5 Rezultati i programit if2 N program, meq plotsohet kushti x>y, vlera pr z sht llogaritur prmes shprehjes s par z=2*x+1. N degt e komands pr degzim if mund t vendosen komanda pr shtypje. Shembull Programi n t cilin prmes komands if gjenerohen mesazhet: x barazi me y ose x jobarazi me y

Degzimet 131 varsisht nga raporti mes dy vlerave hyrse x dhe y, t cilat kompjuterit i jepen prmes tastiers.
// Programi if9 #include <iostream> using namespace std; int main() { double x,y; cout << "Vlera x="; cin >> x; cout << "\nVlera y="; cin >> y; if (x==y) cout << "\nx barazi me y"; else cout << "\nx jobarazi me y"; cout << "\n"; return 0; }

N program, prmes komands: if (x==y) gjendet se a sht x=y. Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepen vlerat hyrse 5 dhe 7, n ekran do t paraqitet mesazhi prkats, ashtu si shihet n Fig.4.6.

Fig.4.6 Rezultati i programit if9 N dy degt e komands if mund t vendosen dy numrator t ndryshm. Shembull Programi prmes s cilit numrohen antart pozitiv (p) dhe antart negativ (n) t vektorit t dhn A(m).

132 Bazat e programimit n C++


// Programi if13 #include <iostream> using namespace std; int main() { const m=7, A[m]={6,-2,-9,4,7,3,-5}; int i,p,n; p=0; n=0; for (i=0;i<m;i++) if (A[i]<0) n=n+1; else p=p+1; cout << "\nNumri i antarve pozitiv p=" << p <<"\n"; cout << "\nNumri i antarve negativ n=" << n <<"\n"; return 0; }

Ktu, komanda:
if (A[i]<0) n=n+1; else p=p+1;

sht vendosur brenda unazs dhe prmes saj do antar i vektorit A[i] testohet se a sht numr negativ. Nse konstatohet se nj antar i vektorit sht numr negativ, prmes shprehjes n=n+1 rritet pr nj numri i antarve negativ. Prndryshe, nse antari i vektorit nuk sht numr negativ, rritet pr nj numratori i numrave pozitiv prmes shprehjes p=p+1. Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran sht: Numri i antarve pozitiv p=4 Numri i antarve negativ n=3 Natyra e komandave n dy degt e komands if mund t jet e ndryshme. Shembull Programi prmes s cilit numrohen antart pozitiv (p) dhe shtypen antart negativ t matrics s dhn R(m,n).

Degzimet 133

// Programi if16 #include <iostream> #include <iomanip> using namespace std; int main() { const m=4,n=3, R[m][n]={{18,-3,5}, {-6,4,-2}, {7,-9,14}, {5,11,-8}}; int i,j,p; char t[]="------------------------------"; cout << "\nAntart n e g a t i v \n\n" << " i j Antari" << endl << t << endl; p=0; for (i=0;i<m;i++) for (j=0;j<n;j++) if (R[i][j]<0) cout << setw(6) << i << setw(6) << j << setw(10) << R[i][j] << endl; else p=p+1; cout << t << endl; cout << "Numri i antarve pozitiv p=" << p << "\n\n"; return 0; }

Ktu, meq kemi t bjm me matric, pr t'i marr n shqyrtim t gjith antart e saj, shfrytzohen dy unaza: unaza e jashtme me indeksin e par i dhe unaza e brendshme me indeksin e dyt j. N program, n degn e par t komands if shtypen indekset dhe vlerat e antarve negativ t matrics, prmes komands prkatse cout. Kurse nse antari i matrics sht pozitiv, ekzekutohet dega e dyt, n t ciln rritet pr 1 numratori i numrave pozitiv (p=p+1). Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.4.7.

134 Bazat e programimit n C++

Fig.4.7 Rezultati i programit if16

Me komanda t prbra
Shpesh her nevojitet q n njrn, ose edhe n t dy degt e komands if, t ket m shum komanda, t cilat ktu do t'i quajm komanda t prbra. Me qllim t prcaktimit t plot t komandave t prbra t nj dege, ato prfshihen brenda kllapave.

Me nj deg
Nse komanda if prmban vetm nj deg me komanda t prbra, prmes s cils programohet pjesa e bllok-diagramit q shihet djathtas, n form t prgjithshme shkruhet: if (k) { x; } ku jan: k - kushti pr degzim. x - komanda e prbr, e cila ekzekutohet, nse plotsohet kushti k. Shembull Programi prmes s cilit llogariten vlerat numerike t variablave x dhe y, varsisht nga ajo se a sht ose nuk sht vlera hyrse d m e madhe se 7. Nse plotsohet kushti n fjal, pr llogaritje shfrytzohen shprehjet: x=3d+2 y=d-4 prndryshe vlerat e ktyre dy variablave fillimisht merren zero.

Degzimet 135

// Programi if3
#include <iostream> using namespace std;

int main() { int d,x,y; cout << "Vlera hyrse d="; cin >> d; x=0; y=0; if (d>7) { x=3*d+2; y=d-4; } cout << "\nVlera x="; cout << x; cout << "\nVlera y="; cout << y <<"\n"; return 0; } Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepet vlera hyrse d=9, pr variablat x dhe y do t llogariten vlerat: x=3*9+2=29 y=9-4=5 kurse n ekran do ta kemi pamjen e dhn n Fig.4.8.

Fig.4.8 Rezultati i programit if3 N degn e komands if mund t prfshihen edhe llogaritje prmes unazs.

136 Bazat e programimit n C++ Shembull Programi prmes s cilit llogaritet vlera numerike e funksionit g prmes shprehjes:

3 n g= 2 x + 4 ( x + i ) i=2

pr x = 5 pr x 5

Pr variablat x dhe n kompjuterit i jepen vlerat numerike prkatse prmes tastiers.


// Programi if10 #include <iostream> using namespace std; int main() { int i,n; float x,s,g; cout << "Vlera hyrse n="; cin >> n; cout << "Vlera hyrse x="; cin >> x; g=3; if (x!=5) { s=0; for (i=2;i<=n;i++) s=s+(x+i); g=2*x+4*s; } cout << "\nRezultati g="; cout << g <<"\n"; return 0; }

N program, si vler fillestare e funksionit sht marr vlera g=3. Por, pastaj, prmes pjess s programit:
if (x!=5) { s=0; for (i=2;i<=n;i++) s=s+(x+i); g=2*x+4*s; }

Degzimet 137 nse x nuk sht 5, n vend t vlers fillestare t funksionit g llogaritet vlera e re e tij, duke e llogaritur fillimisht vlern e shums s. Kshtu, p.sh., nse prmes tastiers pr variablat n dhe x kompjuterit i jepen vlerat 4 dhe 7, n ekran do ta kemi vlern e llogaritur pr funksionin g, ashtu si shihet n Fig.4.9. Fig.4.9 Rezultati i programit if10 Dega e prbr e komands if njkohsisht mund t prmbaj komanda pr llogaritje dhe shtypje. Shembull Programi prmes s cilit numrohen dhe shtypen antart e vektorit B(m), t cilt jan numra m t mdhenj se numri pozitiv x. Vlera e numrit x kompjuterit t'i jepet si vler hyrse prmes tastiers.

// Programi if17 #include <iostream> #include <iomanip> using namespace std; int main() { const m=7, B[m]={9,-7,2,-5,8,11,3}; int i,n; float x; char t[]="----------------"; cout << "\nVlera e numrit pozitiv x: "; cin >> x; cout << "\nNumrat m t mdhenj se " << x << endl << "\n i Vlera" << endl << t << endl; n=0; for (i=0;i<m;i++) if (B[i]>x) { n=n+1; cout << setw(5) << i << setw(7)

138 Bazat e programimit n C++


<< B[i] << endl; cout << << << << << << return 0; } } t "\n\nNumri i antarve m t mdhenj se " x " sht " n "\n\n";

Ktu, n degn e komands if gjenden m shum komanda, prmes s cilave numrohen antart m t mdhenj se numri x dhe njkohsisht shtypen antart e numruar dhe indekset e tyre. Pas ekzekutimit t programit, nse si vler hyrse prmes tastiers kompjuterit i jepet vlera 5, n ekran do ta kemi pamjen e dhn n Fig.4.10.

Fig.4.10 Rezultati i programit if17 Ktu, pr shtypje t vizave n fillim dhe n fund t tabels s krijuar sht shfrytzuar variabla T e tipit char, prmes s cils ruhen vizat. Pastaj, brenda dy komandave cout urdhrohet shtypja e vlers tekstuale t ksaj variable. N program, pr ta shtypur fjalin e cila paraqitet n fund t tabels:
Numri i antarve m t mdhenj se 5 sht 3

shfrytzohet komanda: cout << << << << T endl "Numri i antarve m t mdhenj se " x

Degzimet 139 << " sht " << n << endl; Me kt komand s pari shtypet rreshti me viza n fund t tabels (variabla t), pastaj pasi t kalohet n rresht t ri prmes manipulatorit endl, shtypet teksti:
Numri i antarve m t mdhenj se

me nj zbrazsir n fund t tij. N vazhdim t ktij teksti shtypet vlera e variabls x, pr ta fituar fjalin:
Numri i antarve m t mdhenj se 5

N t njjtin rresht m tutje shtypet fjala sht me nga nj zbrazsir para dhe pas saj, kshtu:
Numri i antarve m t mdhenj se 5 sht

N fund t fjalis s shtypur n kt mnyr, shtypet edhe vlera e variabls n, pr ta fituar formn prfundimtare t saj:
Numri i antarve m t mdhenj se 5 sht 3

Me dy deg
Kur komanda if ka dy deg, mund t paraqiten tre verzione t saj: komanda e prbr t paraqitet n degn e par, n degn e dyt, ose n t dy degt.

Dega e par e prbr


Pjesa e bllok-diagramit me dy deg (shih djathtas), njra prej t cilave prmban m shm komanda, n form t prgjithshme n program shkruhet kshtu: if (k) { x; } else b;

140 Bazat e programimit n C++

ku jan: k - kushti pr degzim. x - komanda e prbr e cila ekzekutohen nse plotsohet kushti k. b - komand e cila ekzekutohet nse nuk plotsohet kushti k. Shembull Programi prmes s cilit llogaritet vlera e variabls d n baz t shprehjeve n dy degt e veanta t komands if, e cila ka nj komand t prbr n degn e par.

// Programi if4
#include <iostream> using namespace std;

int main() { int k=5,g=9,x,y,h,d; h=4*k-g; if (h>g) { x=2*k-1; y=3; d=3*x+y; } else d=h+2; cout << "\nRezultati d="; cout << d <<"\n"; return 0; } Nse ekzekutohet programi i dhn, s pari do t llogaritet vlera: h=4*k-g =4*5-9=11 Pastaj, meq n komandn if plotsohet kushti h>g, llogariten vlerat: x=2*k-1 =2*5-1=9 y=3 d=3*x+y =3*9+3=30

Degzimet 141 dhe n fund, n ekran shtypet: Rezultati d=30 Dega e prbr e komands if mund t prmbaj edhe unaza pr llogaritje t ndryshme. Shembull Programi prmes s cilit llogaritet vlera numerike e funksionit y prmes shprehjes:
n +1 x + 2 (i + 1) y= i =1 2 x 1

pr x < 3 pr x >= 3

Vlerat hyrse t variablave x dhe n kompjuterit t'i jepen prmes tastiers.


// Programi if11 #include <iostream> using namespace std; int main() { int i,n; float x,y,p; cout << "Vlera hyrse n="; cin >> n; cout << "Vlera hyrse x="; cin >> x; if (x<3) { p=1; for (i=1;i<=n+1;i++) p=p*(i+1); y=x+2*p; } else y=2*x-1; cout << "\nRezultati y="; cout << y <<"\n"; return 0; }

142 Bazat e programimit n C++ Nse ekzekutohet programi dhe prmes tastiers, pr variablat hyrse n dhe x, kompjuterit ia japim vlerat 2 dhe 1.5, n ekran do ta kemi pamjen e dhn n Fig.4.11. Fig.4.11 Rezultati i programit if11 Te programi if11, vlera e variabls n nevojitet vetm te dega e par e komands if, prkatsisht vetm nse sht x<3. Pr kt arsye, komandn pr lexim t vlers s ksaj variable mund ta vendosim n degn prkatse, ashtu si shihet n verzionin if11a t programit, i cili sht dhn n vijim.
// Programi if11a #include <iostream> using namespace std; int main() { int i,n; float x,y,p; cout << "Vlera hyrse x="; cin >> x; if (x<3) { cout << "Vlera hyrse n="; cin >> n; p=1; for (i=1;i<=n+1;i++) p=p*(i+1); y=x+2*p; } else y=2*x-1; cout << "\nRezultati y="; cout << y <<"\n"; return 0; }

Nse ekzekutohet programi i dhn dhe prmes tastiers si vler hyrse pr variabln x ia japim vlern 5, meq nuk sht x<3, kompjuteri nuk do ta krkoj vlern hyrse t variabls n. N kt rast, vlera e funksionit y do t llogaritet me shprehjen y=2*x-1, e cila gjendet n degn e dyt t komands if dhe n ekran do ta ket pamjen e dhn n Fig.4.12.

Degzimet 143

Fig.4.12 Rezultati i programit if11a, pr x>3 Por, nse pas ekzekutimit t programit n fjal, si vler hyrse pr variabln x jepet nj vler m e vogl se 3, kompjuteri do ta krkoj edhe vlern e variabls n. Kjo sht si rezultat i kalimit n degn e par t komands if, ku edhe gjendet komanda pr leximin e vlers s variabls n. Pas prfundimit t ekzekutimit t programit, n kt rast do ta kemi pamjen e dhn n Fig.4.13, gj q sht e ngjashme me pamjen e dhn n Fig.4.11. Fig.4.13 Rezultati i programit if11a, pr x<3 N degn e prbr t komands if mund t paraqitet edhe komand tjetr pr degzim. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

3 x + z g= x 1

pr x 5 pr x < 5

ku z sht antari m i madh n vektorin e dhn R(n). Vlera e variabls x kompjuterit t'i jepet prmes tastiers.
// Programi if19 #include <iostream> using namespace std; int main() { const n=9, R[n]={4,7,2,5,12,9,1,15,3}; int i,z; float x,y; cout << "\nVlera hyrse x="; cin >> x; if (x>=5) { z=R[0]; for (i=1;i<n;i++) if (z<R[i])

144 Bazat e programimit n C++


z=R[i]; cout << "\nAntari m i madh z=" << z << endl; y=3*x+z; } else y=x-1; cout << "\nRezultati y="; cout << y <<"\n\n"; return 0; }

N program, n degn e par t komands if sht vendosur procedura e gjetjes s antarit m t madh t vektorit R(n). N fund t ksaj dege, pasi shtypet vlera e gjetur z, llogaritet dhe shtypet vlera prkatse e funksionit y. N Fig.4.14 sht dhn pamja e ekranit pas ekzekutimit t programit, nse prmes tastiers, si vler hyrse pr variabln x, kompjuterit i jepet vlera 7.

Fig.4.14 Rezultati i programit if19

Dega e dyt e prbr


Pjesa e bllok-diagramit me dy deg (shih n vijim - djathtas), nse dega e dyt prmban m shum komanda, n form t prgjithshme programohet kshtu: if (k) a; else { y; }

ku jan: k - kushti pr degzim. a - komand e cila ekzekutohen nse plotsohet kushti k. y - komanda e prbr e cila ekzekutohet nse nuk plotsohet kushti k.

Degzimet 145 Shembull Programi prmes s cilit realizohet llogaritja e njjt si edhe n programin if4 t dhn m sipr, por tek i cili n urdhrin if sht shkruar kushti i kundrt.

// Programi if5
#include <iostream> using namespace std;

int main() { int k=5,g=9,x,y,h,d; h=4*k-g; if (h<=g) d=h+2; else { x=2*k-1; y=3; d=3*x+y; } cout << "\nRezultati d="; cout << d <<"\n"; return 0; } Si shihet n program, dega e dyt e komands if sht komand e prbr, sepse prmban 3 shprehje aritmetikore. Pas ekzekutimit t tij, n ekran do t fitohet: Rezultati d=30 Shembull Versioni i modifikuar i programit if10 pr llogaritjen e vlers numerike t funksionit g, prmes shprehjes:

pr x = 5 3 n g= 2 x + 4 ( x + i ) pr x 5 i=2
ashtu q te komanda if, pr seciln shprehje t funksionit, t paraqitet dega prkatse.
// Programi if12

146 Bazat e programimit n C++


#include <iostream> using namespace std; int main() { int i,n; float x,s,g; cout << "Vlera hyrse n="; cin >> n; cout << "Vlera hyrse x="; cin >> x; if (x==5) g=3; else { s=0; for (i=2;i<=n;i++) s=s+(x+i); g=2*x+4*s; } cout << "\nRezultati g="; cout << g <<"\n"; return 0; }

Ktu, n degn e par t komands if kalohet nse x=5, pr t'u llogaritur vlera e funksionit g me shprehjen e thjesht g=3. Kurse n degn e dyt, s pari gjendet vlera e shums s dhe pastaj edhe vlera e funksionit g prmes shprehjes g=2*x+4*s. Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepen vlerat n=4 e x=7, rezultati n ekran do t duket ashtu si sht dhn n Fig.4.15.

Fig.4.15 Rezultati i programit if12 N degn e dyt, prve llogaritjeve, paraqitet edhe komanda pr shtypje.

Shembull

Programi prmes s cilit gjendet shuma e antarve pozitiv (d)

Degzimet 147 dhe shuma e katrorve t antarve negativ (e) t matrics s dhn A(m,n). Njkohsisht, gjat llogaritjes shtypen katrort e antarve negativ t matrics si dhe indekset prkatse.
// Programi if20 #include <iostream> #include <iomanip> using namespace std; int main() { const int m=3,n=4; float A[m][n]={{5,-4,7,2}, {-3,-9,6,8}, {4,1,-2,-1}}; int i,j; float d,e,k; char G[]="-----------------------------------"; cout << "\nKatrort e antarve negativ\n\n" << " i j Antari Katrori" << endl << G << endl; d=0; e=0; for (i=0;i<m;i++) for (j=0;j<n;j++) if (A[i][j]>=0) d=d+A[i][j]; else { k=A[i][j]*A[i][j]; e=e+k; cout << setw(5) << i << setw(5) << j << setw(10) << A[i][j] << setw(10) << k << endl; } cout << G << endl; cout << "Shuma e antarve pozitiv d=" << d << endl; cout << "Shuma e katrorve t antarve negativ e="

148 Bazat e programimit n C++


<< e << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.4.16.

Fig.4.16 Rezultati i programit if20

T dy degt t prbra
Pjesa e bllok-diagramit me dy deg (shih n vijim - djathtas), nse t dy degt prmbajn m shum komanda, n form t prgjithshme n program shkruhet kshtu: if (k) { x; } else { y; } ku jan: k - kushti pr degzim. x - komanda e prbr e cila ekzekutohet nse plotsohet kushti k. y - komanda e prbr e cila ekzekutohet nse nuk plotsohet kushti k. Shembull Programi prmes s cilit llogaritet shuma e numrave natyror

Degzimet 149 mes 2 dhe n, nse vlera hyrse n sht m e vogl ose barazi me 5, prndryshe llogaritet vlera e faktorielit F=(n+1)!.
// Programi if6 #include <iostream> using namespace std; int main() { int i,n; double S,F; cout << "\nVlera e variabls n="; cin >> n; if (n<=5) { S=0; for (i=2;i<=n;i++) S=S+i; cout << "Shuma S=" << S; } else { F=1; for (i=1;i<=n+1;i++) F=F*i; cout << "\nVlera e faktorielit F=" << F; } cout << "\n\n"; return 0; }

N program, llogaritjet e faktorielit dhe t shums jan prcaktuar duke i vendosur komandat e degve prkatse brenda kllapave t mdha. Nse ekzekutohet programi dhe prmes tastiers, si vler hyrse pr n, kompjuterit i jepet numri 7, me kushtin e shkruar nn komandn if kaprcehet n llogaritjen e faktorielit dhe rezultati q shtypet n ekran do t duket si n Fig.4.17. Fig.4.17 Rezultati i programit if6 N degt e prbra t komands if mund t operohet edhe me vlera t antarve t fushave.

150 Bazat e programimit n C++

Shembull

Programi prmes s cilit formohet matrica katrore D(m,m). Antart e matrics t llogariten prmes shprehjes:
j +1 i + 2 (i + k ) pr i j k =1 dij = i+2 j 3 ( j k ) pr i > j k =1

Dimensionet e matrics kompjuterit t'i jepen si konstante n fillim t programit.


// Programi if21 #include <iostream> #include <iomanip> using namespace std; int main() { const m=4,n=3; int i,j,k; float s,p,D[m][n]; char T[]="-----------------------"; for (i=0;i<m;i++) for (j=0;j<n;j++) if (i<=j) { p=1; for (k=1;k<=j+1;k++) p=p*(i+k); D[i][j]=i+2*p; } else { s=0; for (k=1;k<=i+2;k++) s=s+(j-k); D[i][j]=j-3*s; } cout << "Matrica e formuar D" << endl; cout << T << endl; for (i=0;i<m;i++) { for (j=0;j<n;j++)

Degzimet 151
cout << setw(7) << D[i][j]; cout << endl; } cout << T << endl; return 0; }

Pas ekzekutimit t programit t dhn, rezultati n ekran do t duket si n Fig.4.18.

Fig.4.18 Rezultati i programit if21

Degzime t ndrthurura
Me nj komand if realizohet degzimi n nj ose n dy deg. Por, tek algoritmet e ndryshme shpesh paraqiten degzime t ndrthurura, kur prej nj dege mund t ket degzime t reja. Pr kt qllim, n degt e komandave if shfrytzohen edhe komanda t tjera if. Shembull Programi prmes s cilit llogaritet shuma e antarve t vektorit A(m), t cilt jan m t mdhenj se numri 3 dhe m t vegjl se numri 9.

// Programi if7
#include <iostream> using namespace std;

int main() { const int m=8; int i,s; int A[m]={5,-2,7,4,1,8,10,6}; s=0; for (i=0;i<m;i++) if (A[i]>3) if (A[i]<9) s=s+A[i];

152 Bazat e programimit n C++ cout << "Shuma s=" << s << "\n"; return 0; } Nga programi i dhn shihet se pas komands s par if, nse plotsohet kushti A[i]>3, vjen komanda e dyt if pr testim lidhur me kushtin e dyt A[i]<9. Pastaj, nse plotsohen t dy kushtet, shums i shtohet antari prkats i vektorit. N fund, rezultati q shtypet n ekran sht: Shuma s=30 Vlera e shums sht fituar me mbledhjen e antarve t vektorit, t cilt i plotsojn t dy kushtet, prkatsisht: s=5+7+4+8+6=30 Pjesa e programit me komandat if mund t shkruhet edhe duke shfrytzuar vetm nj komand if, kshtu:
s=0; for (i=0;i<m;i++) if ((A[i]>3) && (A[i]<9)) s=s+A[i]; cout << "Shuma s=" << s << "\n";

Ktu, mes dy pjesve t komands if sht shfrytzuar operatori &&, me t cilin kompjuteri e nnkupton operacionin DHE. Kshtu, kompjuteri do t kaloj te shprehja e shums s=s+A[i], vetm nse A[i]>3 dhe A[i]<9. Brenda degs njkohsisht mund t paraqiten edhe m shum komanda t tjera if pr degzim. Shembull Programi prmes s cilit numrohen antart pozitiv (p), zero (z) dhe antart negativ (n) t matrics s dhn F(k,m).

// Programi if22 #include <iostream>

Degzimet 153
#include <iomanip> using namespace std; int main() { const k=4,m=3, F[k][m]={{7,-4,12}, {0,17,-6}, {4,-1,-5}, {15,8,19}}; int i,j,n,z,p; n=0; z=0; p=0; for (i=0;i<k;i++) for (j=0;j<m;j++) if (F[i][j]<0) n=n+1; else if (F[i][j]==0) z=z+1; else p=p+1; cout << "\nNumri i antarve negativ n=" << n << "\n\n"; cout << "Numri i antarve me vler zero z=" << z << "\n\n"; cout << "Numri i antarve pozitiv p=" << p << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.4.19.

Fig.4.19 Rezultati i programit if22 Degzimet mund t jen edhe t shumfishta, n form kaskadike. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

154 Bazat e programimit n C++

5 x + 4 x 3 y= 5 2 x

pr x < 1.5 pr 1.5 x < 2.7 pr 2.7 x < 4 pr x 4

pr vlern e variabls x, e cila kompjuterit i jepet prmes tastiers si vler hyrse.


// Programi if23 #include <iostream> using namespace std; int main() { float x,y; cout << "Vlera hyrse x="; cin >> x; if (x<1.5) y=5*x+4; else if (x<2.7) y=x-3; else if (x<4) y=5; else y=2*x; cout << "\nRezultati y="; cout << y << endl; return 0; }

Nse pas ekzekutimit t programit t dhn, prmes tastiers pr variabln hyrse x kompjuterit i jepet vlera 2.5, pr funksionin y do t fitohet vlera -0.5, ashtu si shihet n Fig.4.20. Fig.4.20 Rezultati i programit if23

Degzimet 155 Kjo vler e funksionit sht llogaritur me shprehjen e dyt y=x-3, sepse vlera hyrse x=2.5 shtrihet n diapazonn e dyt t kufijve q paraqiten n shprehjen prkatse.

Degzimet gjat komunikimit interaktiv


Komunikimi interaktiv (i drejtprdrejt) me kompjuterin realizohet duke shfrytzuar m shum komanda if. N vijim do t jepen disa versione t shembullit t nj programi elementar, prmes s cilit tregohet shfrytzimi i komands if gjat komunikimit interaktiv me kompjuterin. Shembull Programi prmes s cilit kompjuteri e detekton raportin e dy vlerave hyrse a dhe b.

// Programi Raporti1 #include <iostream> using namespace std; int main() { float a,b; cout << "\nSa sht vlera e numrit a: "; cin >> a; cout << "\nSa sht vlera e numrit b: "; cin >> b; if (a<b) cout << "\nNumri a sht m i vogl se numri b"; else if (a==b) cout << "\nNumrat jan t barabart"; else cout << "\nNumri a sht m i madh se numri b"; cout << "\n\n"; return 0; }

Pasi t ekzekutohet programi i dhn, n ekran do t paraqitet mesazhi:


Vlera e numrit a:

i cili shtypet prmes komands s par cout. Si komand vijuese n program ekzekutohet komanda cin pr lexim t vlers s variabls a. Gjat ekzekutimit t ksaj komande kompjuteri e ndrpret punn duke pritur q n tastier ta shnojm vlern prkatse hyrse.

156 Bazat e programimit n C++ M tutje prsritet procedur e njjt me at paraprake edhe pr leximin e vlers s variabls b, gjat s cils fillimisht n ekran paraqitet mesazhi:
Vlera e numrit b:

Nse pr variablat a dhe b kompjuterit i jepen vlerat hyrse 5 dhe 8, pas prfundimit t ekzekutimit t programit, n ekran do ta kemi pamjen e dhn n Fig.4.21.

Fig.4.21 Rezultati i programit Raporti1, pr a<b Mesazhi i shtypur n ekran: Numri a sht m i vogl se numri b sht rezultat i krahasimit prmes komands s par if (a<b). Nse vlerat hyrse merren me raport t kundrt me at q u dha m sipr, prkatsisht nse, p.sh., prmes tastiers kompjuterit si vlera hyrse pr variablat a dhe b i jepen vlerat 9 dhe 4, n ekran do t shtypet mesazhi:
Numri a sht m i madh se numri b

ashtu si shihet n Fig.4.22.

Fig.4.22 Rezultati i programit Raporti1, pr a>b N kt rast, fillimisht vlerat hyrse krahasohen prmes komands:
if (a<b)

Degzimet 157 Por, pasi q nuk sht plotsuar kushti a<b, krahasimi vazhdon me komandn e dyt:
if (a==b)

me t ciln kontrollohet se a jan vlerat hyrse t barabarta. Duke i pasur parasysh vlerat hyrse, m tutje ekzekutimi i programit vazhdon me komandn:
cout << "\nNumri a sht m i madh se numri b";

N fakt, te kjo komand arrihet pasi nuk plotsohen kushtet n dy komandat if, prkatsisht pasi nuk sht: a < b dhe a = b Shembull Programi Raporti2 si version i prmirsuar i programit Raporti1, n t cilin gjat shtypjes s mesazheve sht parapar q n vend t variablave t prgjithshme a dhe b, brenda tyre t shtypen vlerat numerike prkatse.

// Programi Raporti2 #include <iostream> using namespace std; int main() { float a,b; cout << "Vlera e numrit a: "; cin >> a; cout << "\nVlera e numrit b: "; cin >> b; if (a<b) cout << "\nNumri " << a << " sht m i vogl se numri " << b; else if (a==b) cout << "\nNumrat jan t barabart"; else cout << "\nNumri " << a << " sht m i madh se numri "

158 Bazat e programimit n C++


<< b; cout << endl; return 0; }

Pas ekzekutimit t programit t dhn, pr vlerat hyrse 5 dhe 8, n ekran do ta kemi pamjen e dhn n Fig.4.23. Fig.4.23 Rezultati i programit Raporti2, pr a<b N program, prmes komandave pr shtypje t rezultatit t krahasimit t dy vlerave hyrse, prve teksteve shtypen edhe vlerat prkatse t variablave a dhe b. Gjat shtypjes sht parapar q, para dhe pas vlerave numerike q shtypen, t ket edhe nga nj zbrazsir. Pr kt qllim, zbrazsirat prfshihen nn thonjzat e teksteve q shtypen.

Kaprcimi pa kusht
Pr kaprcim pa kusht, prej nj pjese t programit n nj pjes tjetr, ose n fund t tij, shfrytzohet komanda goto. Kjo komand, n formn e saj t prgjithshme, shkruhet kshtu: goto a; ku a sht labela e zgjedhur lirisht si identifikator. Prmes ksaj komande kompjuterit i urdhrohet q pa kusht ta vazhdoj ekzekutimin e programit, duke kaprcyer te komanda para s cils gjendet labela a. Shembull Programi Raporti3, i cili e paraqet nj version t prmirsuar t programit Raporti2 i dhn m sipr, ashtu q t prsritet ekzekutimi i tij n baz t vlers hyrse q kompjuterit i jepet prmes tastiers.

// Programi Raporti3 #include <iostream> using namespace std; int main() { float a,b; char x;

Degzimet 159
Fillimi: cout << "Vlera e numrit a: "; cin >> a; cout << "\nVlera e numrit b: "; cin >> b; if (a<b) cout << "\nNumri " << a << " sht m i vogl se numri " << b; else if (a==b) cout << "\nNumrat jan t barabart"; else cout << "\nNumri " << a << " sht m i madh se numri " << b; // ------------------- Prsritja -------------------------cout << "\n\nA t prsritet? P - Po, J - Jo: "; cin >> x; if (x == 'P') { cout << "\n\nPrsritje e ekzekutimit" << "\n-------------------------" << endl;; goto Fillimi; } else cout << "\nEkzekutimi prfundoi" << endl; cout << endl; return 0; }

Nse programi i dhn krahasohet me programin Raporti2 t dhn m par do t shihet se n fund t tij sht shtuar pjesa prmes s cils mundsohet prsritja e programit. Pr kt qllim fillimisht sht shkruar komanda pr leximin e vlers s variabls x, e shoqruar me komandn paraprake:
cout << "\n\nA t prsritet? P - Po, J - Jo: ";

prmes s cils n ekran shtypet mesazhi:

160 Bazat e programimit n C++


A t prsritet? P - Po, J - Jo:

p.sh., ashtu si shihet n Fig.4.24. Fig.4.24 Rezultati i programit Raporti3, pr a<b Pastaj, pasi n tastier t shnohet vlera hyrse pr variabln x, ekzekutimi i programit vazhdon me njrn nga dy degt e komands: if (x=='P') Nse, p.sh., si vler hyrse n tastier shtypet shkronja P, do t ekzekutohet dega e par e ksaj komande dhe si rezultat n ekran fillimisht paraqitet mesazhi: Prsritje e llogaritjes ------------------------dhe pastaj prmes komands goto Fillimi, kompjuterit i urdhrohet q ekzekutimin e programit ta vazhdoj duke kaluar n fillim t tij. Me kt komand n fakt urdhrohet kaprcimi pa kusht n pjesn e programit pas fjals Fillimi:, e cila sht vendosur n fillim t programit. N kt mnyr do t prsritet ekzekutimi i programit pr vlera t tjera t variablave hyrse a dhe b, kurse pamja vijuese e ekranit duket si n Fig.4.25.

Fig.4.25 Rezultati i programit Raporti3 M tutje vazhdohet duke ia dhn kompjuterit prmes tastiers vlerat e variablave a dhe b. Pastaj, me qllim t prfundimit t ekzekutimit t programit, nse pas pyetjes pr prsritje t ekzekutimit, si vler hyrse prmes tastiers shkruhet shkronja J, ekzekutimi i programit prfundon dhe n ekran do ta kemi pamjen e dhn n Fig.4.26.

Degzimet 161

Fig.4.26 Rezultati i programit Raporti3

Ekzekutimi i programit prfundon jo vetm pr vlern J t variabls hyrse x, por edhe pr fardo vler tjetr e cila nuk sht P, sepse te komanda:
if (x == 'P')

pyetet vetm se a sht x e barabart me vlern 'P'. Rezultati i ksaj pyetje do t jet true, nse sht x='P', prndryshe n t gjitha rastet e tjera do t jet false (nse x nuk sht barazi me 'P').

Krijimi i unazs
Komanda e kaprcimit pa kusht goto mund t shfrytzohet me qllim t krijmit t unazave t zakonshme pr prsritje t pjesve t caktuara t programit. Shembull Programi prmes s cilit llogariten dhe shtypen shumat parciale t numrave natyror prej 1 deri n 9.

// Programi goto1
#include <iostream> using namespace std;

int main() { int i=1; double s=0; g:if (i<10)

162 Bazat e programimit n C++ { s=s+i; cout << << cout << << << i++; goto g; } return 0; } N programin e dhn, pr llogaritjen e shumave parciale, sht parapar t prsritet pjesa e programit mes komands if me labeln g para tij dhe komands goto g, derisa vlera e variabls i sht m e vogl se 10. Rezultati q shtypet n ekran pas ekzekutimit t programit n fjal do t duket si n Fig.4.27. "Pr i=" i; " Shuma s=" s "\n";

Fig.4.27 Rezultati i programit goto1

Prsritja e leximit t vlerave hyrse


Komanda goto mund t shfrytzohet pr prsritjen e leximit t vlerave hyrse, nse kto vlera nuk i plotsojn kushtet e prcaktuara. Shembull Programi prmes s cilit gjendet se sa antar pozitiv t matrics R(m,n) jan numra m t mdhenj (x) se numri pozitiv g, dhe sa jan m t vegjl ose barazi (y) me kt numr. Vlera e numrit g kompjuterit i jepet si vler hyrse prmes tastiers. Gjat ksaj, prmes kontrolls prkatse pengohet q vlera hyrse pr variabln g t jet numr negativ.

// Programi goto2 #include <iostream>

Degzimet 163
#include <iomanip> using namespace std; int main() { const m=3,n=4,R[m][n]={{-5,6,4,9}, {2,-8,5,7}, {3,1,8,-6}}; int i,j,x,y,g; Lexo: cout << "\nVlera e numrit g: "; cin >> g; if (g<0) { cout << "Lejohet vetm numr pozitiv" << endl; goto Lexo; } cout << endl; // -------------- Numrimi i antarve -----------x=0; y=0; for (i=0;i<m;i++) for (j=0;j<n;j++) if (R[i][j]>0) if (R[i][j]>g) x=x+1; else y=y+1; cout << "Numri i antarve m t mdhenj se " << g << " sht " << x << endl; cout << "Numri i antarve m t vegjl ose barazi me " << g << " sht " << y << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn dhe si vler hyrse pr variabln g prmes tastiers kompjuterit i jepet numri 4, n ekran do ta kemi pamjen e dhn n Fig.4.28.

164 Bazat e programimit n C++ Fig.4.28 Rezultati i programit goto2 Prmes pjess s programit:
Lexo: cout << "Vlera e numrit g: "; cin >> g; if (g<0) { cout << "Lejohet vetm numr pozitiv" << endl; goto Lexo; }

pengohet q pr variabln g kompjuterit t'i jepet vler hyrse negative. Kshtu, nse, p.sh., n tastier shtypet numri -5, n ekran do t paraqitet mesazhi: Lejohet vetm numr pozitiv dhe pastaj, prmes komands goto Lexo, ekzekutimi i programit kthehet prsri n pjesn paraprake t tij, pr ta prsritur leximin. Kshtu, nse pas vlers s gabueshme -5 kompjuterit i jepet vlera hyrse 4, n ekran do ta kemi pamjen prfundimtare t dhn n Fig.4.29.

Fig.4.29 Rezultati i programit if18 me mesazhin kur fillimisht si vler hyrse jepet numr negativ

Dalja nga programi


Pr ta penguar ekzekutimin e programit pr vlera t palogjikshme, pasi prmes tastiers kompjuterit t'i jepen vlerat hyrse, ato mund t kontrollohen. Pastaj, nse kto vlera jan t palogjikshme, mund t dilet nga programi duke e shfrytzuar komandn e kaprcimit pa kusht goto. Shembull Programi prmes s cilit llogaritet vlera e faktorielit:

Degzimet 165

F=(2m-3)! Vlera e variabls m kompjuterit t'i jepet prmes tastiers si vler hyrse.
// Programi goto3 #include <iostream> #include <iomanip> using namespace std; int main() { int k,m; unsigned long F; char g[]="-------------------------"; cout << "\nVlera e variabls m: "; cin >> m; if (m<=1) { cout << "\nVlera hyrse sht e palogjikshme" << "\nEkzekutimi i programit ndrpritet" << endl; goto Fundi; } cout << "\n Numri Faktorieli\n" << g << endl; F=1; for (k=1;k<=(2*m-3);k++) { F=F*k; cout << setw(6) << k << setw(15) << F << endl; } cout << g << endl; Fundi: return 0; }

Nse ekzekutohet programi i dhn dhe si vler hyrse pr variabln m kompjuterit i jepet vlera 6, rezultati q shtypet n ekran do t duket si n Fig.4.30.

166 Bazat e programimit n C++

Fig.4.30 Rezultati i programit goto3

N program, prmes kontrolls:


if (m<=1)

sht parapar ndrprerja e ekzekutimit t tij, nse plotsohet kushti i shnuar brenda kllapave. Pr ndrprerje t programit shfrytzohet komanda e kaprcimit pa kusht:
goto Fundi;

e cila sht vendosur n fund t degs s komands if. Kshtu, nse gjat ekzekutimit t programit, kompjuterit si vler hyrse pr variabln m i jepet numri 1, ekzekutimi i programit do t ndrpritet dhe n ekran do ta kemi pamjen e dhn n Fig.4.31.

Fig.4.31 Pamja e rezultatit n ekran gjat ndrprerjes s ekzekutimit t programit goto3 Pr ta ndrprer ekzekutimin e programit, n vend t komands pr kaprcim pa kusht n fund t tij, mund t shfrytzohet edhe komanda exit(0). Kshtu, p.sh., nse kjo komand shfrytzohet te programi goto3, i cili u dha m sipr, dega e komands if do t shkruhet:
if (m<=1) { cout << "\nVlera hyrse sht e palogjikshme"

Degzimet 167
<< "\nEkzekutimi i programit ndrpritet\n" << endl; exit(0); }

ku, si shihet, n fund t ksaj dege, n vend t komands:


goto Fundi;

sht shfrytzuar komanda:


exit(0);

Gjat ksaj, para komands:


return 0;

nuk nevojitet m labela Fundi:. Vlera 0 brenda kllapave t komands exit praktikohet t shnohet pr t treguar se ekzekutimi i programit sht ndrprer pa gabime.

Degzime me komandn switch


Programet te t cilat njkohsisht paraqiten m shum degzime, thjeshtohen, nse pr degzim shfrytzohet komanda switch. Ekzistojn disa versione t ksaj komande, ashtu si sht shpjeguar n vijim.

Versioni bazik i komands switch


Pjesa e bllok-diagramit i cili shihet n vijim - djathtas, n program mund t paraqitet duke e shfrytzuar versionin bazik t komands switch kshtu:

switch (k) { case 0: a0; break; case 1: a1; break; ................

168 Bazat e programimit n C++ case n: an; }

Gjat shfrytzimit t ksaj komande, pr k=0 do t ekzekutohet komanda a0, pr k=1 - komanda a1 dhe kshtu me radh, pr k=n do t ekzekutohet komanda an. Nse k>n, vazhdon ekzekutimi i pjess s programit jasht kllapave t komands switch. Pr ndarje t degve t veanta shfrytzohet komanda break, pas s cils ekzekutimi i programit vazhdon jasht kllapave t komands switch. Shembull Programi prmes s cilit llogariten vlerat e funksionit y duke shfrytzuar 4 shprehje t ndryshme pr llogaritje varsisht nga 4 vlerat e ndryshme t variabls i.

// Programi case1
#include <iostream> using namespace std;

int main() { int i; double y; for (i=0; i<=3; i++) { switch(i) { case 0: case 1: case 2:

case 3: } cout << "i=" << i <<" y=" << y << "\n"; } return 0;

y=3*i+2; break; y=i+6; break; y=-5; break; y=2*i-9;

Degzimet 169 } Ktu, pr i=0, prmes komands switch(i) kompjuterit i urdhrohet q ekzekutimin e programit ta vazhdoj te dega:
case 0: y=3*i+2; break;

Kurse, me komandn break n fund t ksaj dege, kompjuterit i urdhrohet q ekzekutimin ta vazhdoj me komandn pr shtypje cout e cila gjendet menjher pas kllaps s mbyllur t trupit t komands switch. Ngjashm veprohet edhe pr vlerat e tjera t variabls i. Rezultati, i cili shtypet n ekran pas ekzekutimit t programit, do t duket si n Fig.4.32.

Fig.4.32 Rezultati i programit case1 Nse nuk vendosen komandat break, ekzekutimi i programit vazhdon me t gjitha komandat q gjenden n vijim, pavarsisht nga ajo se ato u takojn degve t ndryshme. Nuk sht e domosdoshme q vlerat e variabls, prmes s cils bhen degzimet, t fillojn me vlern 0. Shembull Programi prmes s cilit llogariten vlerat e funksionit y, duke shfrytzuar 4 shprehje t ndryshme, nse kaprcimi bhet prmes variabls i, e cila fillon me vlern 5.

// Programi case2
#include <iostream>

#include <math.h>
using namespace std;

int main() { int i; double x,y; for (i=5; i<=8; i++) { x=2*i; switch(i) { case 5:

y=sin(x);

170 Bazat e programimit n C++ break; y=sqrt(x); break; y=tan(x); break; y=exp(x);

case 6: case 7: case 8: } cout << "i=" << i <<" y=" << y << "\n"; } return 0; }

Ktu, pr vlern i=5, prmes komands switch(i), kompjuterit i urdhrohet q ekzekutimin e programit ta vazhdoj me degn:
case 5: y=sin(x); break;

Pasi t llogaritet vlera e funksionit y me shprehjen prkatse, me komandn break pas funksionit, si u shpjegua edhe m sipr, ekzekutimi i programit vazhdohet menjher pas kllaps s mbyllur t trupit t komands switch. Meq n programin e dhn, gjat llogaritjes jan shfrytzuar disa funksione matematikore, n fillim t tij, prmes komands paraprocesorike: #include <math.h> kompjuterit i sht urdhruar q pr llogaritje t vlerave t tyre ta shfrytzoj pakon me funksione t ndryshme matematikore. Rezultati q fitohet n ekran pas ekzekutimit t programit case2 duket si n Fig.4.33. Fig.4.33 Rezultati i programit case2

Degzimet 171

Kaprcimi pr disa vlera n nj deg


Kaprcimi n nj deg t komands case mund t bhet edhe pr dy ose m shum vlera t ndryshme t variabls pr kaprcim t saj. Shembull Programi prmes s cilit tregohet kaprcimi n nj deg pr m shum vlera t variabls pr kaprcim.

// Programi case3
#include <iostream> using namespace std;

int main() { int i; double y; for (i=0; i<=6; i++) { switch(i) { case 0: case 5: y=3*i+2; break; case 1: y=i+6; break; case 2: case 6: case 4: y=-5; break; case 3: y=2*i-9; } cout << "i=" << i <<" y=" << y << "\n"; } return 0; } N program, p.sh., kaprcehet n degn n t ciln gjendet shprehja y=5, pr vlerat e variabls i=2, 6 dhe 4. Pas ekzekutimit t programit case3, rezultati n ekran do t duket si n Fig.4.34.

172 Bazat e programimit n C++

Fig.4.34 Rezultati i programit case3

Kaprcimi pr vlerat e fardoshme


Pjesa e bllok-diagramit i cili shihet n vijim - djathtas, n program mund t paraqitet duke e shfrytzuar versionin e komandn switch t ksaj forme: switch (k) { case 0: a0; break; case 1: a1; break; ................ case n: an; break; default: ad; }

k=0 true

false false false

k=1 true

k=n true a0 a1 an

ad

Ktu, nse variabla pr degzim k nuk e ka asnjrn prej vlerave: 0, 1, 2, ..., n, ekzekutohet komanda ad n degn default t komands switch. Shembull Programi prmes s cilit tregohet kaprcimi n degn default t komands pr degzim switch.

// Programi case4
#include <iostream> using namespace std;

int main() { int i; double y; for (i=0; i<=6; i++) {

Degzimet 173 switch(i) { case 0: y=3*i+2; break; case 1: y=i+6; break; case 2: y=-5; break; case 3: y=2*i-9; break; default: y=88; } cout << "i=" << i <<" y=" << y << "\n"; } return 0; } Nse ekzekutohet programi i dhn, pr vlera t variabls i=4, 5 dhe 6 do t shtypet vlera y=88, ashtu si shihet n Fig.4.35, sepse pr kto vlera t variabls i kaprcehet n degn default t komands switch.

Fig.4.35 Rezultati i programit case4

Kaprcimi prmes vlerave t tipit karakter


Vlerat e variabls pr degzim mund t jen edhe t tipit karakter. Shembull Programi prmes s cilit tregohet degzimi prmes komands switch, duke e shfrytzuar pr degzim nj variabl t tipit karakter.

// Programi case5
#include <iostream> using namespace std;

int main()

174 Bazat e programimit n C++ { char h; int z; cout << "Shtyp P pr Po, " << "Shtyp J pr Jo: "; cin >> h; z=9; switch(h) { case 'P': z=1; break; case 'J': z=0; } cout << "z=" << z << "\n"; return 0; } N programin e dhn sht parapar t kaprcehet n dy deg, pr dy vlerat P dhe J t variabls hyrse h. Nse nuk zgjedhet asnjra nga kto dy vlera t variabls h, komanda switch do t kaprcehet krejtsisht dhe si rezultat do t shtypet z=9, e cila sht marr si vler fillestare e variabls. Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepet vlera hyrse P, si rezultat n ekran do t shtypet vlera z=1, ashtu si shihet n Fig.4.36.

Fig.4.36 Rezultati i programit case5

5
Unazat
Unazat for 176 Unazat while 235 Unazat do-while 271

176 Bazat e programimit n C++

Strukturat kontrolluese prmes s cilave prsriten pjes t caktuara t programeve quhen unaza (ang. loop). Pr realizimin e unazave n gjuhn C++ shfrytzohen komandat for, while dhe do-while. Kurse unazat prkatse zakonisht emrohen n baz t ktyre komandave.

Unazat for
Unazat t cilat realizohen duke e shfrytzuar komandn for, shkurt njihen si unaza for. Gjat realizimit t unazave for mund t paraqiten disa raste karakteristike, t cilat njihen si: unaza t zakonshme, unaza t prbra dhe unaza t ndrthurura.

Unazat e zakonshme
Unazat brenda t cilave prfshihet vetm nj komand mund t quhen unaza t zakonshme. Nse pr realizimin e unazave t zakonshme shfrytzohet komanda for, n form t prgjithshme ajo shkruhet kshtu: for (i=f;i<=p;i=i+h) a; ku jan: i - variabla e unazs. f - vlera fillestare e variabls i. p - vlera prfundimtare e variabls i. h - hapi me t cilin ndryshohen vlerat e variabls i. a - komanda e cila ekzekutohet brenda unazs. Prmes ksaj unaze prsritet ekzekutimi i komands a, pr vlera t ndryshme t variabls i, prej vlers fillestare f, deri n vlern prfundimtare p, duke e ndryshuar at me hapin h. Nse unaza for paraqitet prmes bllokdiagramit, forma e prgjithshme e saj do t duket si n Fig.5.1.

Unazat 177

i=f

i<=p

false

true a

Fig.5.1 Forma e prgjithshme e unazs for e paraqitur prmes bllok-diagramit Shembull

i=i+h

Programi prmes s cilit llogaritet shuma e katrorve t numrave natyror ift mes vlers 2 dhe n.

// Programi for1
#include <iostream> using namespace std;

int main() { int i,n; double s=0; cout << "Vlera e variabls n="; cin >> n; for (i=2;i<=n;i=i+2) s=s+i*i; cout << "Shuma e katrorve t numrave ift s=" << s << "\n"; return 0; } Ktu, brenda komands for, si vler fillestare e variabls s unazs i sht marr vlera 2, kurse vlera e variabls i rritet me hapin 2 prmes shprehjes i=i+2 n fund t komands. Nse ekzekutohet programi i dhn dhe pr

178 Bazat e programimit n C++ variabln n, prmes tastiers kompjuterit i jepet vlera 7, rezultati q shtypet n ekran sht:
Shuma e katrorve t numrave ift s=56

gj q fitohet prmes llogaritjes:


s=22+42+62=56

Komanda for n programin for1 mund t shkruhet edhe kshtu:


for (i=2;i<=n;i+=2) s=s+i*i;

ku, si shihet, sht shfrytzuar forma e shkurtuar i+=2 e rritjes s variabls s unazs. N vijim, n rastet kur hapi nuk sht 1, do t shfrytzohet forma e zakonshme e rritjes s vlers s variablave t unazave, gj q nuk krkon nj kujdes t veant pr eliminimin e gabimeve eventuale. Meq zakonisht hapi me t cilin ndryshohet vlera e variabls s unazs i sht 1, komanda for shkruhet edhe kshtu: for (i=f;k;i++) a; Shembull Programi prmes s cilit llogaritet shuma e numrave natyror mes vlers 1 dhe n.

// Programi for2
#include <iostream> using namespace std;

int main() { int i,n; double s; cout << "Vlera e variabls n="; cin >> n; s=0; for (i=1;i<=n;i++) s=s+i; cout << "Shuma e krkuar s=" << s << "\n";

Unazat 179 return 0; } N programin e dhn, brenda unazs for sht prfshir vetm komanda: s=s+i; kurse variabla e unazs i ndyshohet mes vlers fillestare i=1 dhe vlers prfundimtare i=n, e prcaktuar prmes kushtit: i<=n me hapin 1, meq n fund t komands sht shnuar shprehja: i++ Nse ekzekutohet programi i dhn dhe si vler hyrse pr variabln n, prmes tastiers kompjuterit i jepet numri 5, rezultati q shtypet n ekran sht:
Shuma e krkuar s=15

sepse pr n=5, kemi:


s=1+2+3+4+5=15

Q t shihet shpejtsia me t ciln kompjuteri e llogarit shumn n fjal, nse ekzekutohet edhe nj her programi dhe si vler hyrse kompjuterit i jepet numri n=500, rezultati, i cili shtypet pothuajse momentalisht n ekran, do t jet s=125250. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

z = (m + 1)!2 x + 1
nse vlerat hyrse t variablave m dhe x kompjuterit i jepen prmes tastiers.
// Programi for9 #include <iostream> using namespace std; int main() {

180 Bazat e programimit n C++


int i,m; double F,x,z; cout << "Vlera e variabls x="; cin >> x; cout << "Vlera e variabls m="; cin >> m; F=1; for (i=1;i<=(m+1);i++) F=F*i; z=F-2*x+1; cout << "Vlera e funksionit z=" << z << endl; return 0; }

Nse ekzekutohet programi i dhn, pr vlerat hyrse 5 dhe 4, rezultati n ekran do t duket si n Fig.5.2. Fig.5.2 Rezultati i programit for9

Ktu, si shihet nga unaza:


for (i=1;i<=(m+1);i++) F=F*i;

variabla e unazs i fillon me vlern i=1, dhe rritet pr 1 me shprehjen i++, duke shkuar deri te vlera kufitare m+1, gj q prcaktohet me kushtin:
i<=(m+1)

Brenda unazs prsritet vetm llogaritja e faktorielit, pasi q brenda saj gjendet vetm komanda:
F=F*i;

Variabla e unazs si dhe hapi i saj mund t jen edhe vlera jo t plota. Shembull Programi prmes s cilit shtypet tabela e siprfaqeve dhe e perimetrave t rrethit me rreze r, e cila ndryshohet mes vlers 1 dhe 5, me hap 0.5.

Unazat 181
// Programi for4 #include <iostream> #include <iomanip> using namespace std; int main() { const a=1,b=5; double r,pi=3.14159; char T[]="---------------------------"; cout << " r s p" << endl << T << endl; cout << fixed << setprecision(2); for (r=a;r<=b;r=r+0.5) cout << setw(6) << r << setw(8) << pi*r*r << setw(8) << 2*pi*r << endl; cout << T << endl; return 0; }

N program, si variabl e unazs for sht marr variabla r e tipit double, gj q e nnkupton nj numr dhjetor. Kjo variabl ndryshohet me hapin 0.5. Rezultatet q shtypen n ekran pas ekzekutimit t programit t dhn do t duken ashtu si sht dhn n Fig.5.3.

Fig.5.3 Rezultati i programit for4 N program, gjat shtypjes s rezultateve, meq kemi t bjm me numra dhjetor, shfrytzohen manipulatort fixed, setw dhe setprecision.

182 Bazat e programimit n C++ Prmes manipulatorit fixed kompjuteri njoftohet q gjat shtypjes ta shfrytzoj formatin fiks, me t cilin nnkuptohet shtypja e numrave n form dhjetore, prfshir edhe zerot pas piks dhjetore. Si sht shpjeguar edhe m par, prmes manipulatorit setw prcaktohet hapsira (numri i vendeve) n t ciln shtypen vlerat numerike. Kurse, manipulatori setprecision shfrytzohet pr prcaktimin e numrit t vendeve pas piks dhjetore t cilat shtypen. Gjat ksaj, njkohsisht rrumbullaksohen vlerat q shtypen, duke i shfrytzuar rregullat pr rrumbullaksim t shpjeguara m par. Rrumbullaksimi nuk i ndryshon vlerat numerike prkatse n memorien e kompjuterit.

Komand e prbr
Brenda unazs, e cila realizohet prmes komands for, mund t prfshihen edhe m shum komanda. N kt rast, komanda for shkruhet kshtu: for (i=f; k; i=i+h) { a; } ku me a duhet nnkuptuar grumbullin e komandave brenda trupit t unazs t cilat ekzekutohen. Shembull Programi prmes s cilit llogariten dhe shtypen faktorielt e numrave natyror mes 1 dhe n.

// Programi for5 #include <iostream> #include <iomanip> using namespace std; int main() { const n=8; int i; double F; char T[]="------------------"; cout << " i F" << endl << T << endl; F=1; for (i=1;i<=n;i++)

Unazat 183
{ F=F*i; cout << << << << << } cout << T << endl; return 0; } setw(5) i setw(10) F endl;

N programin e dhn, nn unazn e realizuar me komandn for, prfshihet grumbulli i urdhrave q sht shkruar brenda kllapave t mdha. Nse ekzekutohet ky program, meq komanda pr shtypje sht vendosur brenda unazs, n ekran do t shtypen vlerat e faktorielit pr do vler t variabls i, ashtu si shihet n Fig.5.4.

Fig.5.4 Rezultati i programit for5

Shembull

Programi prmes s cilit numri i plot x ngritet n fuqin e numrit t plot k, prkatsisht llogaritet vlera e shprehjes:

y = xk
Vlerat e variablave x dhe k kompjuterit i jepen prmes tastiers si vlera hyrse.
// Programi Fuqi1 #include <iostream> #include <iomanip> using namespace std; int main() { int i,k,x; double y;

184 Bazat e programimit n C++


char T[]="--------------------"; cout << "Numri q fuqizohet: "; cin >> x; cout << "\nVlera e fuqis k: "; cin >> k; cout << "\n Fuqia Vlera" << endl << T << endl; y=1; for (i=1;i<=k;i++) { y=y*x; cout << setw(5) << i << setw(10) << y << endl; } cout << T << endl; return 0; }

Nse ekzekutohet programi i dhn, pr vlerat hyrse 2 e 10 t variablave x dhe k, rezultati n ekran do t duket si n Fig.5.5.

Fig.5.5 Rezultati i programit Fuqi1

N program, pr gjetjen e fuqis s k-t t numrit x, sht shfrytzuar nj unaz me komandn for, prmes s cils trupi i unazs prsritet k-her. N kt mnyr, vlera e fuqis gjendet prmes shumzimit t prsritur. N praktik, pr llogaritje t fuqizimit shfrytzohet nj funksion i zakonshm, gj q do t shpjegohet m von.

Unazat 185 Brenda unazs mund t prfshihen edhe degzime t ndryshme, duke e shfrytzuar komandn if. Shembull Programi prmes s cilit gjendet shuma e katrorve t numrave natyror mes numrave a dhe b, duke mos i prfshir n shum katrort e numrave 5, 6 dhe 9.

// Programi for13 #include <iostream> #include <iomanip> using namespace std; int main() { int i,a,b; bool z; double s,x; char T[]="-----------------------"; cout << "\nVlera e variabls a: "; cin >> a; cout << "\nVlera e variabls b: "; cin >> b; cout << " Numri Katrori" << endl << T << endl; s=0; for (i=a;i<=b;i++) { z=(i==5) || (i==6) || (i==9); if (z==false) { x=i*i; s=s+x; cout << setw(5) << i << setw(12) << x << endl; } } cout << T << endl; cout << "Vlera e shums s=" << s << endl; return 0; }

186 Bazat e programimit n C++

N program, pr ta eliminuar prfshirjen e numrave 5, 6 dhe 9, n llogaritjen e shumave sht shfrytzuar shprehja logjike:
z=(i==5) || (i==6) || (i==9);

prkatsisht komanda prkatse pr degzim:


if (z==false)

Nse ekzekutohet programi i dhn, pr vlerat hyrse 1 dhe 15 t variablave a dhe b, rezultati n ekran do t duket si n Fig.5.6.

Fig.5.6 Rezultati i programit for13

Nse prmes tastiers, pr variablat a dhe b kompjuterit i jepen, p.sh., vlerat 9 dhe 3, prkatsisht nse a>b, trsia e komandave t prfshira brenda kllapave t unazs nuk do t ekzekutohet asnjher dhe n ekran do ta kemi pamjen e dhn n Fig.5.7.

Fig.5.7 Rezultati i programit for13, kur a>b

Unazat 187 Prve degzimeve, brenda unazs mund t prfshihen edhe llogaritje t ndryshme. Shembull Programi prmes s cilit gjenden numrat natyror mes vlerave m dhe n, t cilt jan t plotpjestueshm me numrin r.
// Programi for11 #include <iostream> #include <iomanip> using namespace std; int main() { int i,m,n,r,x,y; char T[]="-----------------------"; cout << "\nVlera e variabls m: "; cin >> m; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nVlera e variabls r: "; cin >> r; cout << "\nT plotpjestueshm me " << r << endl << " Numri Sa her" << endl << T << endl; for (i=m;i<=n;i++) { x=i/r; y=x*r; if (y==i) cout << << << << << } cout << T << endl; return 0; }

setw(5) i setw(10) x endl;

188 Bazat e programimit n C++ Nse ekzekutohet programi i dhn, pr vlerat hyrse 3, 50 dhe 7 t variablave prkatse m, n dhe r, rezultati n ekran do t duket si n Fig.5.8.

Fig.5.8 Rezultati i programit for11

Nga rezultati i fituar, p.sh., shihet se numri 35 sht i plotpjestueshm me 7, sepse pjestimi 35:7=5 sht pa mbetje. N program, prmes shprehjes x=i/r gjendet pjesa e plot e pjestimit t numrit i me r. Kjo arrihet kshtu: - pjestimi i/r e jep si rezultat nj numr dhjetor. - vlera e ktij pjestimi i shoqrohet variabls x. - meq variabla x sht e tipit int, n t ruhet vetm pjesa e plot e pjestimit. Pr ta penguar ekzekutimin e komandave brenda unazs for pr vlera t palogjikshme, pasi prmes tastiers kompjuterit t'i jepen vlerat hyrse, ato mund t kontrollohen. Shembull Versioni i programit for11 n t cilin sht shtuar pjesa prmes s cils kontrollohen vlerat hyrse.

// Programi for11a #include <iostream> #include <iomanip> using namespace std; int main() {

Unazat 189
int i,m,n,r,x,y; char T[]="-----------------------"; cout << "\nVlera e variabls m: "; cin >> m; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nVlera e variabls r: "; cin >> r; if ((r==0) || (m>n)) goto Fundi; cout << << << << << << << "\nT plotpjestueshm me " r endl " Numri Sa her" endl T endl;

for (i=m;i<=n;i++) { x=i/r; y=x*r; if (y==i) cout << << << << << } cout << T << endl; Fundi: return 0; }

setw(5) i setw(10) x endl;

Ktu, n fillim t programit, menjher pas leximit t vlerave pr variablat hyrse, prmes komands:
if ((r==0) || (m>n)) goto Fundi;

pengohet vazhdimi i ekzekutimit t komandave brenda unazs for, sepse hyrja n unaz nuk ka kuptim, nse krkohet gjetja e plotpjestimeve me zero (r=0). Gjithashtu, nuk ka kuptim as rasti i prpilimit t tabels, nse m>n.

190 Bazat e programimit n C++

Unaza t ndrthurura
Brenda nj unaze mund t prfshihen edhe unaza t tjera, por ashtu q ato t mos priten mes vete. Shembull Programi prmes s cilit shtypen vlerat e variabls s unazs s brendshme, e cila si vler kufitare e ka vlern e variabls s unazs s jashtme.

// Programi p6 #include <iostream> #include <iomanip> using namespace std; int main() { int i,j; for (i=0;i<=9;i++) { for (j=0;j<=i;j++) cout << setw(2) << j; cout << endl; } return 0; }

Pas ekzekutimit t programit t dhn, rezultati n ekran do t duket si n Fig.5.9.

Fig.5.9 Rezultati i programit p6

Unazat 191 N program jan shfrytzuar dy unaza, me variablat prkatse i dhe j. Vlerat e variabls i n unazn e jashtme, e cila sht realizuar me komandn:
for (i=0;i<=9;i++)

ndryshojn mes vlerave 0 dhe 9, duke u rritur me hapin 1. N trupin e ksaj unaze jan vendosur komandat q gjenden mes dy kllapave, prfshir edhe unazn e brendshme:
for (j=0;j<=i;j++)

Kurse, kjo unaz e prfshin vetm komandn:


cout << setw(2) << j;

Komanda:
cout << endl;

nuk prfshihet n unazn e brendshme, por sht pjes e trupit t unazs s jashtme. Prmes saj, kompjuterit i urdhrohet q shtypjen ta vazhdoj n rreshtin vijues, pasi t prfundoj shtypja e vlerave t variabls j t unazs s brendshme, pr nj vler t variabls i t unazs s jashtme. Brenda unazave mund t kryhen llogaritje t ndryshme. Shembull Programi prmes s cilit prpilohet tabela e vlerave t funksionit:

y=

m +1 x 4 (2k + i 1) 3 i=2

pr vlera t ndryshme t variabls k mes vlerave 0 dhe n. Vlerat numerike t variablave x, m dhe n kompjuterit i jepen si vlera hyrse prmes tastiers.
// Programi for15 #include <iostream> #include <iomanip> using namespace std; int main() {

192 Bazat e programimit n C++


int i,k,m,n; double s,x,y; char T[]="----------------------"; cout << "Vlera e variabls x: "; cin >> x; cout << "\nVlera e variabls m: "; cin >>m; cout << "\nVlera e variabls n: "; cin >>n; cout << "\n k y" << endl << T << endl; for (k=0;k<=n;k++) { s=0; for (i=2;i<=(m+1);i++) s=s+(2*k+i-1); y=x/3-4*s; cout << setw(5) << k; cout.precision(4); cout << setw(15) << fixed << y << endl; } cout << T << endl; return 0; }

Nse ekzekutohet programi i dhn, rezultati n ekran do t duket si n Fig.5.10.

Fig.5.10

Unazat 193 Rezultati i programit for15 Si shihet n program, unaza e jashtme e realizuar prmes komands:
for (k=0;k<=n;k++)

paraqet nj unaz t prbr, sepse brenda trupit t saj jan prfshir t gjitha komandat q gjenden mes dy kllapave t mdha. Kurse unaza e brendshme, e realizuar prmes komands:
for (i=2;i<=(m+1);i++)

n trupin e saj e prfshin vetm komandn:


s=s+(2*k+i-1);

Gjat ekzekutimit t programit t dhn, pr nj vler t variabls k n unazn e jashtme, gjenerohen t gjitha vlerat e mundshme t variabls i n unazn e brendshme. Kshtu, p.sh., pr vlerat hyrse t marra m sipr, pr do vler t variabls k mes 0 dhe 6, variabla i do t'i marr vlerat 2, 3 dhe 4. N nj program mund t paraqiten njkohsisht edhe m shum unaza t ndrthurura mes vete. Shembull Programi prmes s cilit gjenden numrat e Pitagors x, y dhe z, pr t cilt vlen barazimi:

x2 + y2 = z 2
// Programi for12 #include <iostream> #include <iomanip> using namespace std; int main() { int x,y,z,n,a,b; char T[]="--------------------"; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nNumrat e Pitagors" << endl << " x y z" << endl << T

194 Bazat e programimit n C++


<< endl; for (x=1;x<=n-2;x++) for (y=x+1;y<=n-1;y++) for (z=y+1;z<=n;z++) { a=x*x+y*y; b=z*z; if (a==b) cout << setw(5) << x << setw(5) << y << setw(5) << z << endl; } cout << T << endl; return 0; }

N program jan shfrytzuar 3 unaza for, prmes t cilave merren vlera t ndryshme t variablave x, y dhe z, nga grumbulli i numrave natyror mes 1 dhe n. Nse ekzekutohet programi i dhn, pr vlern hyrse n=30, rezultati q fitohet n ekran do t duket si n Fig.5.11.

Fig.5.11 Rezultati i programit for12

Unazat 195 Nga vlerat e fituara, prmes llogaritjes me dor mund t vrtetohet se vlen ekuacioni i dhn m sipr. Kshtu, p.sh., pr vlerat n rreshtin e par t tabels vlen: 32 + 42 = 52

Variabla e unazs e tipit karakter


Variabla e unazs, e cila realizohet me komandn for, mund t jet edhe variabl e tipit karakter. Shembull Programi prmes s cilit n ekran shtypen shkronjat e mdha t alfabetit ndrkombtar dhe kodet prkatse t shkronjave t ktij alfabeti.

// Programi for14 #include <iostream> using namespace std; int main() { char k; int x; cout << "Alfabeti ndrkombtar dhe kodet e shkronjave" << endl << endl; for (k='A';k<='Z';k++) { x=k; cout << k << " " << x << " "; } cout << endl << endl; return 0; }

Ktu, vlerat e variabls s unazs shkojn mes vlers fillestare 'A' dhe asaj prfundimtare 'Z'. Kjo do t thot se gjat ekzekutimit t programit, si vlera t variabls k merren t gjitha shkronjat e alfabetit ndrkombtar, gj q shihet edhe n pamjen e vlerave t shtypura n ekran, ashtu si sht dhn n Fig.5.12.

196 Bazat e programimit n C++

Fig.5.12 Rezultati i programit for14 Me program sht parapar q pran do shkronje t shtypet edhe kodi prkats. Kshtu, p.sh., shkronjs A si kod i sht shoqruar numri 65 (p.sh., ashtu si sht kodi 137 pr shkronjn e gjuhs shqipe ). Gjat shfrytzimit t shkronjave si vlera t tipit karakter duhet pasur parasysh se raporti mes tyre sht:
'A' < 'B' < 'C' < <'X' < 'Y' < 'Z'

Unazat e ndrthurura mund t formohen edhe duke shfrytzuar variabla t tipit karakter. Shembull Programi prmes s cilit n ekran shtypen shkronjat e mdha t alfabetit ndrkombtar, duke shfytzuar dy unaza t ndrthurura t formuara me variabla t tipit karakter.

// Programi p7 #include <iostream> #include <iomanip> using namespace std; int main() { char x,y; for (x='Z';x>='A';x--) { for (y='A';y<=x;y++) cout << setw(2) << y; cout << endl; } return 0; } Rezultati q fitohet n ekran pas ekzekutimit t programit t dhn do t duket si n Fig.5.13.

Unazat 197

Fig.5.13 Rezultati i programit p7 Ktu, kur variabla x e unazs s jashtme e merr vlern e par 'Z', variabla y e unazs s brendshme i merr t gjitha vlerat prej 'A' deri n vlern e variabls x, e cila fillimisht e ka vlern 'Z'. Pastaj, njlloj prsritet procedura, por pr vlern e dyt t variabls x, e cila sht 'Y'. Kurse variabla e unazs s dyt i merr t gjitha vlerat prej 'A' deri n 'Y'. Dhe kshtu procedura vazhdon deri n fund, kur x='A' dhe y='A'.

Unazat gjat operimit me fusha


Pr operim me antart e vektorve, t matricave ose edhe t fushave shumdimensionale, indekset prkatse mund t prcaktohen prmes vlerave t variablave t unazave, t cilat mund t realizohen me komandn for.

Operimi me vektor
Meq vektort jan fusha njdimensionale, pr t'i shfrytzuar antart e tyre gjat llogaritjeve t ndryshme indekset prkatse mund t prcaktohen prmes variabls s nj unaze. Shembull Programi prmes s cilit llogaritet prodhimi i anttarve t vektorit A(m).

// Programi for3
#include <iostream> using namespace std;

int main() { const m=6; int i,A[m]={3,2,6,5,8,4}; double p; p=1; for (i=0;i<m;i++) p=p*A[i]; cout << "Prodhimi p=" << p << "\n"; return 0; }

198 Bazat e programimit n C++

Pas ekzekutimit t programit t dhn, si rezultat fitohet: Prodhimi p=5760 ku vlera e prodhimit sht fituar prmes llogaritjes: p=3*2*6*5*8*4=5760 Edhe gjat operimit me antart e vektorve, brenda trupit t unazs s realizuar me komandn for mund t paraqiten m shum komanda. Shembull Programi prmes s cilit nga antart e vektorit Z(m) me indeks ift formohet vektori i ri G(m), duke i rritur antart e tij pr vlern e indekseve prkatse. Njkohsisht, n program gjendet shuma e diferencave t vlerave t antarve prkats t vektorit t dhn dhe t vektorit t formuar.

// Programi p8 #include <iostream> #include <iomanip> using namespace std; int main() { const m=10; char T[]="---------------------------"; int i,k,G[5],Z[m]={5,-2,9,7,3,-8,4,12,10,6}; cout << "\n i Z[i] k G[k]\n" << T << endl; k=-1; for (i=1;i<m;i=i+2) { k=k+1; G[k]=i+Z[i]; cout << setw(5) << i << setw(6) << Z[i] << setw(6) << k << setw(7) << G[k]

Unazat 199
<< endl; } cout << T << endl; return 0; }

N program, me qllim t shfrytzimit t antarve me indeks tek t matrics s dhn Z(m) pr formimin e vektorit t ri G, sht shfrytzuar komanda for:
for (i=1;i<m;i=i+2)

Prmes ksaj komande prcaktohet q t merren vetm vlerat tek t variabls i (vlera fillestare i=1 dhe prmes shprehjes i=i+2 rritet pr 2), e cila njkohsisht shfrytzohet si indeks pr antart e vektorit Z(m) q prdoren n llogaritjen e antarve t vektorit G. Indeksi k i vektorit q formohet fillimisht sht marr k=-1, meq vektori i ri G ende nuk ka asnj antar. Por, para se te ky vektor t vendoset nj antar i ri, vlera e indeksit rritet pr 1, prmes shprehjes:
k=k+1;

N kt mnyr, indeksi i antarit t par do t jet:


k=-1+1=0

ashtu q antari n fjal t vendoset n pozitn e par t vektorit. Nse ekzekutohet programi i dhn, rezultati q paraqitet n ekran do t duket si n Fig.5.14.

Fig.5.14 Rezultati i programit p8

N fund, vektori G do t prmbaj gjithsej k+1 antar, meq indekset prkatse shkojn mes vlerave 0 dhe k. Brenda unazs mund t ket edhe degzime t ndryshme, duke e shfrytzuar komandn if.

200 Bazat e programimit n C++

Shembull

Programi prmes s cilit llogaritet shuma s e katrorve t antarve negativ dhe e kubeve t antarve pozitiv t vektorit A(m).

// Programi for17 #include <iostream> using namespace std; int main() { const m=6; int i,A[m]={5,-3,4,9,-5,8}; double s,p; s=0; for (i=0;i<m;i++) { p=A[i]*A[i]; if (A[i]<0) s=s+p; else s=s+p*A[i]; } cout << "Shuma e krkuar sht s=" << s << "\n"; return 0; }

N program, prmes komands:


if (A[i]<0) s=s+p; else s=s+p*A[i];

prcaktohet mbledhja e katrorit t antarit negativ, ose e kubit t antarit pozitiv t vektorit. Para ksaj komande, prmes shprehjes:
p=A[i]*A[i];

gjendet katrori i antarit aktual t vektorit. Pastaj, kjo vler e llogaritur i shtohet shums:

Unazat 201

s=s+p;

nse konstatohet se antari sht negativ. Por, kur antari aktual i vektorit sht pozitiv, pr t'ia shtuar shums kubin e antarit aktual:
s=s+p*A[i];

prodhimi p sht shumzuar edhe nj her me antarin aktual t vektorit. Nse ekzekutohet programi i dhn, si rezultat n ekran do t fitohet: Shuma e krkuar sht s=1464 Gjat llogaritjes s shums n fjal sht shfrytzuar shprehja:
s=53 + (-3)2 + 43 + 93 + (-5)2 + 83

Komanda if, q paraqitet brenda trupit t unazs, mund t jet edhe komand e prbr. Shembull Programi prmes s cilit gjendet vlera absolute m e vogl x n vektorin e dhn R(m), si dhe indeksi prkats k.

// Programi for6 #include <iostream> using namespace std; int main() { const n=8; int i,k,x,R[n]={5,-8,6,4,-2,6,9,3}; x=abs(R[1]); k=1; for (i=0;i<n;i++) { if (abs(R[i])<x) { x=abs(R[i]); k=i; } } cout << << << << "Vlera absolute m e vogl x=" x "\nIndeksi i antarit me kt vler k=" k

202 Bazat e programimit n C++


<< endl; return 0; }

Ktu, brenda unazs paraqitet komanda e prbr if, n t ciln prfshihet dega me komandat pr ruajtjen e antarit me vler absolute m t vogl si dhe e indeksit prkats n vektor:
x=abs(R[i]); k=i;

Nse ekzekutohet programi i dhn, n ekran rezultati do t duket si n Fig.5.15. Fig.5.15 Rezultati i programit p8 Gjat operimit me vektor mund t paraqiten edhe unaza t ndrthurura. Shembull Programi prmes s cilit rradhiten sipas madhsis antart e vektorit A(m), prej m t madhit kah m i vogli, duke e shfrytzuar nj version t metods pr sortim e cila njihet si bubble sort.

// Programi bubble #include <iostream> #include <iomanip> using namespace std; int main() { const m=12; int i,j,x,Z[m]={4,7,9,-3,5,12,6,17,-2,13,3,8}; cout << "\nVektori i dhn\n" << "\nZ={"; for (i=0;i<m;i++) cout << setw(3) << Z[i]; cout << " }\n"; for (i=0;i<(m-1);i++) for (j=0;j<(m-1-i);j++) if (Z[j]>Z[j+1])

Unazat 203
{ x=Z[j]; Z[j]=Z[j+1]; Z[j+1]=x; } cout << "\nVektori i sortuar\n" << "\nZ={"; for (i=0;i<m;i++) cout << setw(3) << Z[i]; cout << " }\n\n"; return 0; }

N program sht parapar q antart e vektorit Z(m) t rradhiten duke u nisur prej antarit m t vogl. Prandaj, gjat procesit t sortimit n unazn e brendshme sht vendosur komanda:
if (Z[j]>Z[j+1])

Nse plotsohet kushti i shkruar brenda ksaj komande, prmes grupit t komandave:
x=Z[j]; Z[j]=Z[j+1]; Z[j+1]=x;

kompjuterit i urdhrohet q t'i ndrroi vlerat e antarve Z[j] dhe Z[j+1], duke e shfrytzuar variabln ndrmjetsuese x. Nse ekzekutohet programi i dhn, rezultati do t duket si n Fig.5.15a.

Fig.5.15a Rezultati i programit bubble

Operimi me matrica
Matricat jan fusha dydimensionale dhe pr operim me antart e tyre gjat llogaritjeve t ndryshme, idekset prkatse mund t prcaktohen prmes variablave t dy unazave.

204 Bazat e programimit n C++ Shembull Programi prmes s cilit formohet matrica Z(m,n), duke i prcaktuar antart e saj me shprehjen:

zij = i + j
// Programi p19 #include <iostream> #include <iomanip> using namespace std; int main() { const m=6,n=5; int i,j,Z[m][n]; char d[]="-----------------------"; for (i=0;i<m;i++) for (j=0;j<n;j++) Z[i][j]=i+j; // Shtypja e matrics cout << "\n Matrica e formuar Z\n" << d << endl; for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(4) << Z[i][j] ; cout << endl; } cout << d << endl; return 0; }

N programin e dhn jan shfrytzuar dy unaza, prmes s cilave prcaktohen indekset e antarve t matrics, t cilt llogariten duke i mbledhur vlerat e indekseve prkatse. Pr realizimin e unazs s jashtme shfrytzohet komanda: for (i=0;i<m;i++)

Unazat 205 kurse unaza e brendshme sht realizuar me komandn: for (j=0;j<n;j++) Gjat ekzekutimit t programit, pr nj vler t variabls i n unazn e jashtme, merren t gjitha vlerat e mundshme t variabls j n unazn e brendshme. Kjo do t thot se, meq me indeksin e par prcaktohen rreshtat e matrics, pas zgjedhjes s rreshtit me vlern e variabls i, merren t gjitha vlerat e mundshme t indeksit t dyt j, prkatsisht kalohet npr t gjitha kolonat e rreshtit t zgjedhur. N fund, pasi formohet komplet matrica, vazhdohet me ekzekutimin e dy unazave t tjera, prmes s cilave shtypet matrica e formuar. Ktu, unaza e brendshme formohet nga komandat:
for (j=0;j<m;j++) cout << setw(4) << Z[i][j] ;

kurse n unazn e jashtme prfshihen komandat brenda kllapave. Prmes komands s fundit n unazn e jashtme:
cout << endl;

kompjuterit i urdhrohet t kaloj n nj rresht t ri, meq ka prfunduar shtypja e rreshtit paraprak t matrics. N kt mnyr, n ekran shihet forma fizike e matrics, duke i dalluar rreshtat e veant t saj. Matrica e formuar pas ekzekutimit t programit t dhn do t duket si n Fig.5.16.

Fig.5.16 Rezultati i programit p19 Pr shtypje t antarve t matrics, njkohsisht, mund t shfrytzohen unazat brenda t cilave prcaktohen vlerat e tyre. Kshtu, pas ndryshimeve t nevojshme, programi do t duket si n vijim.
// Programi p20 #include <iostream>

206 Bazat e programimit n C++


#include <iomanip> using namespace std; int main() { const m=6,n=5; int i,j,Z[m][n]; char d[]="-----------------------"; cout << "\n Matrica e formuar Z\n" << d << endl; for (i=0;i<m;i++) { for (j=0;j<n;j++) { Z[i][j]=i+j; cout << setw(4) << Z[i][j]; } cout << endl; } cout << d << endl; return 0; }

Ktu, n unazn e brendshme, pasi prcaktohet nj antar i matrics, ai edhe shtypet, duke e shfrytzuar komandn:
cout << setw(4) << Z[i][j];

Rezultati q fitohet, nse ekzekutohet ky version i programit, do t jet i njjt me at q u dha n Fig.5.16. Unazat mund t prmbajn edhe degzime prmes komands if. Shembull Programi prmes s cilit numrohen antart negativ (x) dhe antart pozitiv (y) t matrics s dhn A(m,n).

// Programi for7 #include <iostream> using namespace std; int main() {

Unazat 207
const m=4,n=5; int A[m][n]={{4,3,-4,-6,2}, {1,-5,2,7,-8}, {-3,9,5,-2,4}, {4,-1,-3,6,8}}; int i,j,x,y; x=0; y=0; for (i=0;i<m;i++) for (j=0;j<n;j++) if (A[i][j]<0) x=x+1; else y=y+1; cout << << << << << return 0; } "Numri i antarve negativ x=" x "\nNumri i antarve pozitiv y=" y "\n";

Ktu, komanda if, q sht vendosur n unazn e brendshme:


if (A[i][j]<0) x=x+1; else y=y+1;

prmban dy deg. N njrn deg rritet numratori i numrave negativ (x), kurse n degn tjetr - numratori i numrave pozitiv (y). Nse ekzekutohet programi i dhn, rezultati q paraqitet n ekran do t duket si n Fig.5.17. Fig.5.17 Rezultati i programit for7 Brenda unazave mund t prfshihen edhe komanda pr degzime t shumfishta. Shembull Programi prmes s cilit formohet matrica katrore R(m,m),

208 Bazat e programimit n C++ duke i prcaktuar antart e saj me shprehjen:

0 rij = i + 1 3

pr i < j pr i = j pr i > j

// Programi p18 #include <iostream> #include <iomanip> using namespace std; int main() { const m=6; int i,j,R[m][m]; char z[]="---------------------"; for (i=0;i<m;i++) for (j=0;j<m;j++) if (i<j) R[i][j]=0; else if (i==j) R[i][j]=i+1; else R[i][j]=-3; // Shtypja e matrics cout << "\n\n Matrica e formuar R\n" << z << endl; for (i=0;i<m;i++) { for (j=0;j<m;j++) cout << setw(3) << R[i][j]; cout << endl; } cout << z << endl; return 0;

Unazat 209
}

Ktu, brenda unazave for, gjat prcaktimit t antarve t matrics, jan shfrytzuar dy komanda if. Nse plotsohet kushti i<j n komandn e par:
if (i<j) R[i][j]=0;

prmes degs s dhn prcaktohen antart mbi diagonalen kryesore, duke i marr me vler 0. Kur nuk plotsohet kushti i prmendur m sipr, ekzekutohet komanda e dyt pr degzim:
if (i==j) R[i][j]=i+1;

me t ciln testohet se a sht i=j. Nse ky kusht plotsohet, antart n diagonalen kryesore t matrics llogariten me shprehjen e dhn n degn prkatse, prkatsisht vlerat e tyre gjenden duke e rritur indeksin i pr 1. Prndryshe, nse nuk plotsohet asnjri nga kushtet n dy komandat if, prcaktohen antart nn diagonalen kryesore, duke ua ndar vlerat -3. Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.5.18.

Fig.5.18 Rezultati i programit p18

Gjat operimit me antart e matricave, meq kemi t bjm me fusha dydimensionale, antart mund t prcaktohen me dy indekse. Kjo e imponon nevojn q, pr zgjedhje t indekseve, t shfrytzohen variablat e dy unazave t ndrthurura. Shembull Programi prmes s cilit formohet vektori F, duke i shfrytzuar antart e matrics A(m,n), t cilt jan m t mdhenj se numri x, i cili kompjuterit i jepet si vler hyrse prmes tastiers.

210 Bazat e programimit n C++


// Programi p9 #include <iostream> #include <iomanip> using namespace std; int main() { const m=4,n=5; int A[m][n]={{6,2,4,17,-2}, {9,-1,-2,8,3}, {-6,4,11,3,5}, {12,7,15,2,6}}; int i,j,k,x; int F[m*n]; char T[]="-----------------------"; cout << "\nVlera e numrit x: "; cin >> x; cout << "\n Vektori i formuar\n\n" << " k F[k]\n" << T << endl; k=-1; for (i=0;i<m;i++) for (j=0;j<n;j++) { if (A[i][j]>x) { k=k+1; F[k]=A[i][j]; cout << setw(6) << k << setw(8) << F[k] << endl; } } cout << T << endl; return 0; }

N fillim t programit, gjat deklarimit t tipit t vektorit F, prmes shprehjes:


int F[m*n];

Unazat 211 jan rezervuar vende sa ka edhe matrica, kjo sepse n rast t veant mund t ndodh q t gjith antart e matrics t jen numra m t mdhenj se numri x, i cili kompjuterit i jepet prmes tastiers. N trupin e unazs s brendshme, e cila prcaktohet prmes shprehjes:
for (j=0;j<n;j++)

ktu, fillimisht sht prfshir komanda if me nj deg t prbr, n t ciln, nse plotsohet kushti:
if (A[i][j]>x)

prmes shprehjes:
F[k]=A[i][j];

vektorit F i shtohet antari A[i][j], duke e rritur fillimisht vlern e indeksit pr 1, prmes shprehjes:
k=k+1;

Pastaj, brenda ksaj unaze sht vendosur edhe komanda pr shtypje t indekseve dhe e vlerave t antarve t vektorit q formohet F. Variabla i e unazs s jashtme, e cila realizohet prmes komands:
for (i=0;i<m;i++)

shfrytzohet vetm pr zgjedhjen e indekseve t rreshtave t matrics A. Nse ekzekutohet programi i dhn dhe prmes tastiers, si vler hyrse kompjuterit i jepet vlera 5, rezultati n ekran do t duket si n Fig.5.19.

Fig.5.19 Rezultati i programit p9

212 Bazat e programimit n C++

Prmes dy unazave njkohsisht mund t prcaktohen indekset pr operim me antart e dy ose edhe t m shum matricave. Shembull Programi prmes s cilit nga antart e matrics s dhn Z(m,n) formohet matrica D(m,n), duke i shumzuar antart prkats t matrics Z(m,n) me konstanten k.

// Programi p9 #include <iostream> #include <iomanip> using namespace std; int main() { const m=4,n=5; int Z[m][n]={{3,7,-2,4,5}, {1,5,12,9,6}, {-4,11,3,6,8}, {14,9,15,0,7}}; int i,j,k,D[m][n]; char T[]="-------------------------------------"; cout << "\nVlera e konstantes k: "; cin >> k; for (i=0;i<m;i++) for (j=0;j<n;j++) D[i][j]=k*Z[i][j]; // Shtypja e matrics cout << "\n\n Matrica e formuar D\n" << T << endl; for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(7) << D[i][j] ; cout << endl; } cout << T << endl; return 0; }

Unazat 213 N pjesn e par t programit t dhn, prmes dy unazave for, formohet matrica e re D. Antart e saj llogariten duke e vendosur brenda dy unazave shprehjen:
D[i][j]=k*Z[i][j]; ku, si shihet, antart prkats t matrics Z shumzohen me konstanten k .

Nse ekzekutohet programi i dhn, rezultati q fitohet n ekran do t duket si n Fig.5.20.

Fig.5.20 Rezultati i programit p9 Pr shtypjen e saj jan shfrytzuar dy unazat e vendosura n pjesn e dyt t programit, gj q sht shpjeguar edhe m par. N programin e dhn, komandat pr shtypjen e antarve t matrics q formohet mund t vendosen edhe brenda unazave q shfrytzohen pr formimin e saj. Pas ndryshimeve t bra pr kt qlllim, programi prkats do t duket si n vijim.
// Programi p9a #include <iostream> #include <iomanip> using namespace std; int main() { const m=4,n=5; int Z[m][n]={{3,7,-2,4,5}, {1,5,12,9,6}, {-4,11,3,6,8}, {14,9,15,0,7}}; int i,j,k,D[m][n]; char T[]="-------------------------------------"; cout << "\nVlera e konstantes k: "; cin >> k;

214 Bazat e programimit n C++


cout << "\n\n Matrica e formuar D\n" << T << endl; for (i=0;i<m;i++) { for (j=0;j<n;j++) { D[i][j]=k*Z[i][j]; cout << setw(7) << D[i][j] ; } cout << endl; } cout << T << endl; return 0; }

Ktu, meq unazat prmbajn m shum komanda, pr vendosjen e komandave q prfshihen brenda tyre jan shfrytzuar kllapat. Unaza e brendshme me komandat q prfshihen brenda saj duket kshtu:
for (j=0;j<n;j++) { D[i][j]=k*Z[i][j]; cout << setw(7) << D[i][j] ; }

kurse nn kllapat e unazs s jashtme, e cila formohet me komandn:


for (i=0;i<m;i++)

prve komandave t unazs s brendshme, prfshihet edhe komanda pr kalim n rresht t ri:
cout << endl;

pasi t ket prfunduar shtypja e rreshtit paraprak t matrics. Nse ekzekutohet ky version i programit, pr vlern hyrse k=5, rezultati q fitohet n ekran do t jet plotsisht i njjt me at q u dha n Fig.5.20. Shembull Programi prmes s cilit gjenden shumat e rreshtave t veant t matrics s dhn F(m,n).

Unazat 215

// Programi for16 #include <iostream> #include <iomanip> using namespace std; int main() { const m=5,n=4; int F[m][n]={{5,2,14,8}, {7,9,1,-6}, {8,3,15,4}, {12,6,5,-1}, {6,4,-5,2}}; int i,j,s; char T[]="------------------"; cout << "Shumat e rreshtave\n" << "\n Rreshti Shuma\n" << T << endl; for (i=0;i<m;i++) { s=0; for (j=0;j<n;j++) s=s+F[i][j]; cout << setw(5) << i+1 << setw(10) << s << endl; } cout << T << endl; return 0; }

N program, prmes unzs s brendshme:


for (j=0;j<n;j++) s=s+F[i][j];

gjendet shuma e rreshtit t i-t t matrics F(m,n). Kurse, pr zgjedhje t rreshtave t matrics dhe pr shtypje t shumave t rreshtave t veant shfrytzohet unaza e jashtme, e formuar me komandn:
for (i=0;i<m;i++)

216 Bazat e programimit n C++ N t prfshihen komandat brenda kllapave, bashk me komandat q kan t bjn me unazn e brendshme. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.5.21.

Fig.5.21 Rezultati i programit for16 Shembull Programi nga detyra paraprake i modifikuar ashtu q shumat shtypen pasi paraprakisht jan shtypur antart e rreshtit prkats t matrics.

// Programi for16a #include <iostream> #include <iomanip> using namespace std; int main() { const m=5,n=4; int F[m][n]={{5,2,14,8}, {7,9,1,-6}, {8,3,15,4}, {12,6,5,-1}, {6,4,-5,2}}; int i,j,s; char T[]="------------------------------"; cout << "Shumat e rreshtave\n" << "\n M a t r i c a Shuma\n" << T << endl; s=0; for (i=0;i<m;i++)

Unazat 217
{ s=0; for (j=0;j<n;j++) { s=s+F[i][j]; cout << setw(5) << F[i][j]; } cout << setw(8) << s << endl; } cout << T << endl; return 0; }

N kt version t programit, prmes unazs s brendshme:


for (j=0;j<n;j++) { s=s+F[i][j]; cout << setw(5) << F[i][j]; }

prve q llogaritet shuma e antarve t rreshtit t i-t, njkohsisht shtypen edhe antart e ktij rreshti. Kurse, pr shtypjen e vlerave t shumave t rreshtave t veant shfrytzohen komandat:
cout << setw(8) << s << endl;

t cilat bashk me komandat e unazs s brendshme prfshihen n unazn e jashtme, e cila prcaktohet me komandn:
for (i=0;i<m;i++)

Brenda ksaj unaze, pr do vler t variabls i (indeksit t rreshtit), njkohsisht merret edhe vlera fillestare s=0 e shums s antarve t rreshtit prkats. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.5.22.

218 Bazat e programimit n C++

Fig.5.22 Rezultati i programit for16a

Ktu, n kolonn mbi t ciln figuron teksti Shuma, jan shnuar vlerat e shumave t rreshtave t veant t matrics.

Operimi me m shum fusha


N nj program mund t operohet njkohsisht me m shum fusha. Gjat ksaj, pr zgjedhjen e indekseve t antarve t fushave, t cilat marrin pjes n llogaritje t ndryshme, shfrytzohen edhe disa unaza njkohsisht. Shembull Programi prmes s cilit numrohen zanoret e alfabetit ndrkombtar n fjalin e cila lexohet.

// Programi p21 #include <iostream> #include <iomanip> using namespace std; int main() { const m=50,n=6; char Z[n]={'a','e','o','i','y','u'}; int i,j; int F[n]={0,0,0,0,0,0}; char A[m],x[]="--------------------"; cout << "\nFjalia q lexohet:\n\n"; cin.getline(A,m); for (i=0;i<m;i++) for (j=0;j<n;j++) if (A[i]==Z[j]) F[j]=F[j]+1; // ----- Shtypja e rezultatit -----cout << "\n Zanorja << x << endl; for (j=0;j<n;j++) cout << setw(6) Numri\n"

Unazat 219
<< << << << cout << x << endl; return 0; } Z[j] setw(10) F[j] endl;

N programin e dhn, fjalia e cila kompjuterit i jepet prmes tastiers ruhet te vektori A(m). Pr leximin e ksaj fjalie sht shfrytzuar komanda:
cin.getline(A,m);

Gjat numrimit t zanoreve n fjali, pr zgjedhje t shkronjave t prfshira n te shfrytzohet unaza e jashtme:
for (i=0;i<m;i++)

Secila nga kto shkronja krahasohet me antart e vektorit Z(n) ku ruhen zanoret, duke e shfrytzuar unazn e brendshme:
for (j=0;j<n;j++)

N momentin kur plotsohet kushti i cili sht shnuar te komanda:


if (A[i]==Z[j])

rritet pr 1 vlera e antarit prkats F(j) t vektorit n t cilin ruhen shumat e zanoreve t numruara, duke e shfrytzuar shprehjen:
F[j]=F[j]+1;

Meq kemi t bjm me numrim, vlerat fillestare t antarve t vektorit


F(n) jan prcaktuar prmes deklarimit: int F[n]={0,0,0,0,0,0};

Ky deklarim mund t bhet edhe duke e shnuar vlern zero t s paku vetm njrit antar t vektorit, kshtu:
int F[n]={0};

220 Bazat e programimit n C++

Nse ekzekutohet programi i dhn, pr fjalin:


Msimi i gjuhs programuese

t ciln kompjuterit ia japim prmes tastiers, rezultati do t duket si n Fig.5.23.

Fig.5.23 Rezultati i programit p21 N fund t programit, gjat shtypjes s antarve t vektorve Z(n) dhe F(n), pr prcaktimin e indekseve prkatse sht shfrytzuar vetm nj unaz. Brenda programit njkohsisht mund t operohet edhe me m shum matrica. Shembull Programi prmes s cilit formohet matrica C(m,n), duke i shfrytzuar antart e matricave A(m,n) dhe B(m,n), n baz t parimeve vijuese. Nse iftet e antarve q kan pozita t njjta n matricat A dhe B jan me parashenja: - t njjta, antari i matrics C merret i barabart me antarin korrespondues t matrics A; - t ndryshme, antari i matrics C merret i barabart me numrin 99.

// Programi p22 #include <iostream> #include <iomanip> using namespace std;

Unazat 221
int main() { const m=5,n=4; int A[m][n]={{4,-5,9,3}, {-7,13,6,-2}, {8,-3,12,-4}, {13,9,-2,6}, {-4,-1,7,5}}; int B[m][n]={{4,-3,5,8}, {2,-8,12,-5}, {-2,9,17,14}, {9,-3,5,15}, {19,-7,-2,4}}; int i,j,C[m][n]; char T[]="--------------------"; cout << "\nMatrica e formuar C\n" << T << endl; for (i=0;i<m;i++) for (j=0;j<n;j++) { if ((A[i][j]<0 && B[i][j]<0) || (A[i][j]>=0 && B[i][j]>=0)) C[i][j]=A[i][j]; else C[i][j]=99; } for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(4) << C[i][j] ; cout << endl; } cout << T << endl; return 0; }

N program, gjat mbushjes s matrics C, si indekse shfrytzohen variablat e dy unazave, t cilat njkohsisht i paraqesin edhe indekset e antarve t dy matricave t tjera. Me qllim t prcaktimit t parimit pr mbushje t antarve t matrics sht shfrytzuar komanda if:
if ((A[i][j]<0 && B[i][j]<0) || (A[i][j]>=0 && B[i][j]>=0))

222 Bazat e programimit n C++

Me pjesn e par t shprehjes logjike brenda ksaj komande:


(A[i][j]<0 && B[i][j]<0)

kontrollohet se a jan antart n pozitat e njjta t dy matricave numra negativ (meq mes dy pjesve t shprehjes figuron operatori &&, i cili i prgjigjet operacionit logjik DHE). Kurse me pjesn e dyt t shprehjes logjike n fjal:
(A[i][j]>=0 && B[i][j]>=0))

kontrollohet se a jan t dy antart numra pozitiv. Nse sht e vrtet njra nga kto dy pjes t shprehjes logjike brenda komands if (meq mes tyre sht vendosur operatori ||, q i prgjigjet operacionit logjik OSE), antari i matrics q formohet merret i barabart me antarin korrespondues t matrics A:
C[i][j]=A[i][j];

Prndryshe, nse nuk plotsohet qoft edhe njra nga dy pjest e shprehjes logjike brenda komands if, prkatsisht nse shprehja brenda kllapave t ksaj komande sht e pavrtet, antarit n fjal t matrics C i jepet vlera 99. Pas ekzekutimit t programit, rezultati n ekran do t duket si n Fig.5.24.

Fig.5.24 Rezultati i programit p22

Kaprcimi i komandave brenda unazs


Sipas nevojs, ekzekutimi i nj pjese t caktuar brenda unazs mund t kaprcehet, pa dal nga unaza, duke e shfrytzuar komandn continue, ose komandn e kaprcimit pa kusht goto. Nse brenda unazs vendoset komanda continue, gjat ekzekutimit t saj kompjuteri do ta kaprcej pjesn vijuese brenda trupit t unazs. Shembull Programi prmes s cilit llogaritet shuma (a) e numrave natyror mes 1 dhe n, shuma e katrorve (b) dhe e kubeve (c) t ktyre numrave. Gjat gjetjes s shumave, n llogaritje nuk prfshihen

Unazat 223 numrat natyror 3 dhe 7. Vlera e variabls n kompjuterit i jepet prmes tastiers si vler hyrse.
// Programi p5 #include <iostream> #include <iomanip> using namespace std; int main() { int i,n; float a,b,c; char T[]="----------------------------"; cout << "\nVlera e variabls n: "; cin >> n; a=0; b=0; c=0; cout << "\n Numri a b c" << endl << T << endl; for (i=1; i<=n; i++) { if ((i==3) || (i==7)) continue; a=a+i; b=b+i*i; c=c+i*i*i; cout << setw(5) << i << setw(7) << a << setw(7) << b << setw(7) << c << endl; } cout << T << endl; return 0; }

N program, me qllim t eliminimit t pjesmarrjes n llogaritje t shumave pr vlerat 3 dhe 7 t variabls i, n degn e komands if sht vendosur komanda continue, kshtu:

224 Bazat e programimit n C++

if ((i==3) || (i==7)) continue;

Prmes ksaj komande kaprcehet pjesa e shprehjeve pr llogaritje t shumave dhe komanda pr shtypje t rreshtit prkats n tabel, prkatsisht pr i=3 dhe i=7 kalohet n vlerat vijuese t variabls i, pa dal nga unaza. Nse ekzekutohet programi i dhn, pr vlern hyrse n=10, rezultati n ekran do ta ket pamjen e dhn n Fig.5.25.

Fig.5.25 Rezultati i programit p5

Programi p5 mund t shkruhet edhe duke e shfrytzuar komandn e kaprcimit pa kusht goto, n vend t komands continue. Pjesa e unazs s ktij programi sht dhn n vijim.
for (i=1; i<=n; i++) { if ((i==3) || (i==7)) goto Jeta; a=a+i; b=b+i*i; c=c+i*i*i; cout << setw(5) << i << setw(7) << a << setw(7) << b << setw(7) << c << endl; Jeta:; }

Unazat 225 Ktu, kaprcimi i nevojshm sht realizuar me komandn goto Jeta, n vend t kaprcimit me komandn continue.

Shembull

Programi pr llogaritjen e vlers s funksionit:

g = x+2

i =1 ( i 2,5)

(2i + k )

n +1

pr vlera t ndryshme t numrit natyror k, mes vlerave 1 dhe m. Njkohsisht, gjat llogaritjes s shums kaprcehen antart pr vlerat 2 dhe 5 t variabls i. Vlerat e variablave m, n dhe x kompjuterit i jepen prmes tastiers si vlera hyrse.
// Programi p23 #include <iostream> using namespace std; int main() { int i,k,m,n; double x,g,s; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls m: "; cin >> m; cout << "\nVlera e variabls n: "; cin >> n; cout << endl; for (k=1;k<=m;k++) { cout << "k=" << k << " i: "; s=0; for (i=1;i<=n+1;i++) { if ((i==2) || (i==5))

226 Bazat e programimit n C++


continue; else { cout << i << " "; s=s+(2*i+k); } } g=x+2*s; cout << " g=" << g << endl; } return 0; }

N unazn e brendshme t programit t dhn, sht vendosur komanda


if: if ((i==2) || (i==5))

Nse plotsohet kushti i shnuar brenda kllapave t ksaj komande, prkatsisht nse vlera e shprehjes:
(i==2) || (i==5)

sht true, do t ekzekutohet komanda:


continue;

e cila sht vendosur n degn e par t komands if. Prmes ksaj komande kalohet n fund t unazs, prkatsisht llogaritja vazhdohet me vlern vijuese t variabls i, ashtu si shihet edhe n tabeln e rezultateve t shtypura, q sht dhn n Fig.5.26.

Fig.5.26 Rezultati i programit p23

Unazat 227

Shembull

Programi i dhn n shembullin paraprak, por tek i cili parashihet kaprcimi i ekzekutimit t komandave brenda unazs s jashtme, pr vlerat 3 dhe 4 t variabls k.

// Programi p24 #include <iostream> using namespace std; int main() { ................................... for (k=1;k<=m;k++) { if ((k==3) || (k==4)) continue; cout << "k=" << k << " i: "; s=0; ................................... } return 0; }

Pr dallim nga versioni paraprak i programit, ktu sht shtuar komanda:


if ((k==3) || (k==4)) continue;

prmes s cils, pr vlerat 3 dhe 4 t variabls k, kaprcehet pjesa e komandave vijuese brenda unazs s jashtme. Ktu prfshihet edhe kaprcimi i unazs s brendshme prmes s cils zgjedhen vlerat e variabls i. Nse pas shtess n fjal ekzekutohet versioni i ri i programit, rezultati q do t fitohet n ekran pr vlerat e njjta hyrse si edhe te shembulli paraprak do t duket si n Fig.5.27.

Fig.5.27 Rezultati i programit p23

228 Bazat e programimit n C++

Prej ktu qart shihet se jan kaprcyer llogaritjet pr vlerat 3 dhe 4 t variabls k.

Dalja nga unaza


Prsritja e ekzekutimit t komandave brenda trupit t unazs mund t ndrpritet, duke dal prej saj prmes komands goto, ose komands break.

Dalja prmes komands goto


Gjat ekzekutimit t unazs, vlerat e rezultateve t caktuara brenda trupit t saj mund t kontrollohen, pr t'i shfrytzuar ato me qllim t ndrprerjes s ekzekutimit t unazs. Gjat ksaj ndrprerjeje, pr dalje nga unaza, shfrytzohet komanda goto pr kaprcim pa kusht jasht saj, pa i marr variabla e unazs t gjitha vlerat e mundshme. Shembull Programi prmes s cilit gjendet vlera e funksionit:
n +1 4 y = 2 x + 3 sin(2 x) k x k =2

nse vlerat x dhe n kompjuterit i jepen prmes tastiers.


// Programi for10 #include <iostream> #include <math.h> using namespace std; int main() { int k,n; double x,y,s; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n; s=0; for (k=2;k<=n+1;k++) {

Unazat 229
if ((k-x)==0) { cout << "\nRasti kur pjestohet me zero" << "\nLlogaritja e shums nuk ka kuptim" << endl; goto Fundi; } else s=s+(sin(2*x)-4/(k-x)); } y=2*x+3*s; cout << "\nVlera e funksionit y=" << y << endl; Fundi: return 0; }

N fillim t programit t dhn m sipr sht vendosur komanda paraprocesorike: #include <math.h> sepse brenda fajlit math.h sht prcaktuar funksioni trigonometrik sin, i cili shfrytzohet brenda programit. Nse ekzekutohet programi i dhn, pr vlera hyrse t caktuara, p.sh., pr x=7.5 dhe n=3, rezultati n ekran do t duket si n Fig.5.28.

Fig.5.28 Rezultati i programit for10

Nse prmes tastiers, pr variabln x, kompjuterit i jepet ndonj vler e plot, shprehja k-x nn thyes mund t ket vler zero. Pasi pjestimi me zero nuk ka kuptim, n ekran do t gjenerohet mesazhi prkats, ashtu si shihet n Fig.5.29.

Fig.5.29 Rezultati i programit for10 pr x=0

230 Bazat e programimit n C++

Kaprcimi n mesazhin n fjal mundsohet duke e kontrolluar prmes komands:


if ((k-x)==0)

se a sht zero vlera e emruesit k-x. Pas shtypjes s mesazhit, ekzekutimi i programit prcillet n pjesn pas labels Fundi:, prmes komands goto Fundi. Shembull Programi prmes s cilit gjendet antari i par n vektorin F(m), i cili sht me vler absolute m t madhe se numri pozitiv x, si dhe pozita e tij n vektor (indeksi prkats).

// Programi p3 #include <iostream> using namespace std; int main() { const m=6; int i,x,F[m]={5,-3,4,-9,5,8}; cout << "Vlera e variabls x: "; cin >> x; for (i=0;i<m;i++) { if (abs(F[i])>x) { cout << "\nAntari i krkuar: " << F[i]; cout << "\nIndeksi prkats: " << i << endl; goto Jasht; } } cout << "\nN vektor nuk ka antar t till" << endl; Jasht: return 0; }

N program, pasi t plotsohet kushti:


if (abs(F[i])>x)

prmes komandave:

Unazat 231
cout << << cout << << << "\nAntari i krkuar: " F[i]; "\nIndeksi prkats: " i endl;

shtypet vlera e antarit F[i], i cili sht m i madh se numri x pr nga vlera absolute, si dhe indeksi prkats. Pastaj, prmes komands:
goto Jasht;

dilet nga unaza dhe shkohet n fund t programit. Nse programi i dhn ekzekutohet pr vlern 6 t variabls hyrse x, rezultati n ekran do t duket si n Fig.5.30. Fig.5.30 Rezultati i programit p3

Duke i pasur parasysh antart e vektorit F(m), nga rezultati i fituar shihet se antari i par q ka vler absolute m t madhe se numri x=6 sht antari i katrt, me indeks 3 (meq indekset fillojn me vlern 0) dhe vlera e tij sht -9. Nse n vektor nuk gjendet asnj antar i cili e plotson kushtin e dhn, unaza do t ekzekutohet deri n fund dhe pas daljes nga unaza do t shtypet mesazhi: N vektor nuk ka antar t till Kjo do t ndodh, p.sh., nse si vler hyrse pr variabln x, prmes tastiers kompjuterit i jepet numri 15. N kt rast n ekran do ta kemi pamjen e dhn n Fig.5.31.

Fig.5.31 Rezultati i programit p3 kur nuk gjendet asnj antar i vektorit q e plotson kushtin e dhn

232 Bazat e programimit n C++

Dalja prmes komands break


Nse brenda unazs vendoset komanda break, ekzekutimi i programit vazhdon me komandn e cila gjendet menjher pas kllaps s fundit t trupit t saj, duke dal pa kusht nga unaza. Shembull Programi prmes s cilit mblidhen antart e vektorit B(n) gjersa nuk arrihet vlera kufitare e shums z, e cila vler kompjuterit i jepet prmes tastiers.

// Programi p4 #include <iostream> #include <iomanip> using namespace std; int main() { const n=7; int i,B[n]={2,5,-3,4,1,-6,9}; double s,z; bool k; char h[]="--------------------------"; cout << "\nVlera kufitare z: "; cin >> z; k=false; cout << "\n Nr Antari Shuma\n" << h << endl; s=0; for (i=0;i<n;i++) { s=s+B[i]; cout << setw(6) << i << setw(7) << B[i] << setw(10) << s << endl; if (s>z) { cout << h << endl; cout << "\nShuma e llogaritur: "

Unazat 233
<< cout << << << k=true; break; s; "\nNumri i antarve n shum: " i+1 endl;

} } if (k==false) cout << "\nVlera e krkuar e shums nuk u gjet" << endl; return 0; }

Nse ekzekutohet programi i dhn, pr vlern kufitare t shums z=7, t ciln kompjuterit ia japim prmes tastiers, rezultati n ekran do t duket si n Fig.5.32.

Fig.5.32 Rezultati i programit p4, pr rastin kur arrihet t jet s>z Si shihet n program, pr dalje nga unaza kontrollohet se a e ka tejkaluar shuma vlern kufitare z, duke e shfrytzuar komandn:
if (s>z)

Nse plotsohet kushti i dhn, kalohet n ekzekutimin e pjess s programit:


{ cout << << cout << << cout << << << k=true; break; h endl; "\nShuma e llogaritur: " s; "\nNumri i antarve n shum: " i+1 endl;

234 Bazat e programimit n C++


}

prmes s cils fillimisht shtypet nj rresht me viza (h), pastaj vlera e shums (s), dhe n fund edhe numri i antarve t cilt jan prfshir n shum (i+1). Me qllim t ruajtjes s informats se sht kaluar npr kt deg t komands if, variabls k i sht shoqruar vlera true, prmes shprehjes: k=true; t cils para se t fillohet me ekzekutimin e unazs for, i sht ndar vlera fillestare: k=false; N fund t degs n fjal t komands if sht shkruar edhe komanda: break; prmes s cils kompjuterit i urdhrohet t dal nga unaza, meq u gjet shuma q e krkuam. Pas ksaj, ekzekutimi i programit vazhdon me komandn e par, e cila gjendet pas kllaps s fundit t unazs q sht realizuar me komandn for. Nse kushti i shtruar te komanda if brenda unazs nuk plotsohet edhe pas mbledhjes s t gjith antarve t vektorit, dalja prej unazs do t jet e rregullt (pa ndrprerje me komandn break). Edhe n kt rast, prsri ekzekutimi i programit do t vazhdoj me komandn e par pas kllaps s fundit t unazs for. Pr kt qllim sht parapar q n kt rast t shtypet mesazhi:
Vlera e krkuar e shums nuk u gjet

Por, meq n t dy rastet vazhdohet me ekzekutimin e pjess s programit pas kllaps s fundit t unazs, prmes komands:
if (k==false)

mesazhi n fjal do t shtypet vetm nse k=false, gj q plotsohet vetm kur nuk kalohet npr degn e komands if brenda unazs, n fund t s cils bhet k=true. Rezultati q shtypet n ekran, nse paraqitet rasti n fjal, p.sh., pr z=15, do t duket si n Fig.5.33.

Unazat 235 Fig.5.33 Rezultati i programit p4, pr rastin kur nuk arrrihet q t jet s>z Si shihet nga figura e dhn, n fund t tabels nuk jan vendosur vizat, sepse shtypja e vizave sht parapar vetm nse kalohet npr degn e komands if q gjendet brenda unazs. Gjithashtu, n vend t dy mesazheve pr vlern e shums dhe pr numrin e antarve q jan prfshir n shum, sht shtypur nj mesazh tjetr. Nse duam q edhe n rastin e dyt, n fund t tabels t paraqitet rreshti me viza, komanda pr shtypje, e cila sht vendosur n degn e komands if pas kllaps s fundit t unazs, duhet t shkruhet kshtu:
if (k==false) cout << h << "\nVlera e krkuar e shums nuk u gjet" << endl;

Unazat while
Unazat t cilat realizohen duke e shfrytzuar komandn while, ngjashm si edhe ato q realizohen me komandn for, shkurt njihen si unaza while. N form t prgjithshme unaza while duket kshtu: i=f; while(i<=p) { a; i=i+h; } ku jan: i - variabla e unazs. f - vlera fillestare e variabls s unazs. p - vlera prfundimtare e variabls s unazs. h - hapi me t cilin ndryshohen vlerat e variabls i. a - komandat e prfshira brenda unazs. Ekzekutimi i komandave a t prfshira brenda kllapave t unazs do t prsritet derisa t plotsohet kushti i<=p.

236 Bazat e programimit n C++ Nse unaza while paraqitet prmes bllok-diagramit, n formn e prgjithshme do ta kemi pamjen e dhn n Fig.5.34.

i=f

i<=p

false

true a

Fig.5.34 Forma e prgjithshme e unazs while e paraqitur prmes bllok-diagramit

i=i+h

Nga bllok-diagrami i dhn shihet se unaza do t ekzekutohet pr vlera t ndryshme t variabls i, gjersa vlera e kushtit i<=p sht true. N momentin kur kjo vler sht false, ekzekutimi i unazs do t ndrpritet, prkatsisht do t dilet prej saj. Komandat a, t prfshira brenda unazs, nuk do t ekzekutohen asnjher, nse menjher n fillim nuk plotsohet kushti i<=p. Shembull Programi pr llogaritjen e vlers s faktorielit F=(n+1)! duke e realizuar unazn prmes komands while.

// Programi while1 #include <iostream> using namespace std; int main() { double F=1; int i,n; cout << "\nVlera e variabls n: ";

Unazat 237
cin >> n; i=1; while (i<=n+1) { F=F*i; i=i+1; } cout << "\nVlera e faktorielit F=" << F << "\n\n"; return 0; }

Nga programi i dhn shihet se kushti i ekzekutimit t unazs: (i<=n+1) sht vendosur n fillim t saj, menjher pas komands while. N momentin kur ky kusht nuk plotsohet, llogaritja vazhdon me komandn e cila gjendet pas kllaps s fundit t trupit t komands while. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran duket si n Fig.5.35. Fig.5.35 Rezultati i programit while1

N program, n vend t shprehjes: i=i+1; pr rritjen e vlers s variabls i brenda unazs mund t shfrytzohet edhe shprehja: i++; Nse kushti i shnuar n fillim t unazs nuk plotsohet menjher n fillim, trupi i unazs while nuk do t ekzekutohet asnjher. Programi i dhn m sipr mund t realizohet edhe duke e shfrytzuar unazn for, ashtu si sht dhn n vijim.
// Programi while1a

238 Bazat e programimit n C++


#include <iostream> using namespace std; int main() { double F=1; int i,n; cout << "\nVlera e variabls n: "; cin >> n; for (i=1;i<=n+1;i++) F=F*i; cout << "\nVlera e faktorielit F=" << F << "\n\n"; return 0; }

Prej ktu shihet qart thjeshtimi i dukshm i programit, sepse komanda for i prfshin n vete t gjith parametrat e nevojshm pr unazn. Brenda kllapave t saj shnohet vlera fillestare e variabls s unazs (i=1), hapi me t cilin rritet (i++) si dhe kufiri (i<=n+1). Vlera fillestare e variabls s unazs kompjuterit mund t'i jepet si vler hyrse prmes tastiers. Shembull Programi pr gjetjen e mbetjes nga pjestimi i dy numrave, duke e ndjekur procedurn e zbritjes sukcesive t pjestuesit nga i pjestuari.

// Programi Mbetja1 #include <iostream> #include <iomanip> using namespace std; int main() { int k,x; char v[]="---------------------"; cout << "\nNumri q pjestohet k: "; cin >> k; cout << "\nNumri me t cilin pjestohet x: "; cin >> x; cout << "\nMbetjet pas zbritjeve\n" << v << endl; while (k>=x)

Unazat 239
{ k=k-x; cout << setw(10) << k << endl; } cout << << << << return 0; } v "\nMbetja e pjestimit: " k endl;

N programin e dhn, pr ta gjetur mbetjen, e cila sht rezultat i pjestimit jo t plot t numrit k me numrin x, zbatohet procedura e zbritjes sukcesive t numrit x nga numri k. Gjat ksaj, si vler fillestare e variabls s unazs sht marr numri k, e cila brenda trupit t unazs zvoglohet me hapin x. N kt mnyr, vlera t ciln e ka variabla k n momentin e daljes nga unaza, prkatsisht vlera e saj, kur nuk plotsohet kushti k>=x, sht vlera e krkuar e mbetjes nga pjestimi. Nse ekzekutohet programi i dhn, pr vlerat hyrse k=27 dhe x=5, rezultati n ekran do t duket si n Fig.5.36.

Fig.5.36 Rezultati i programit Mbetja1 N programin Mbetja1 trupi i unazs nuk do t ekzekutohet asnjher, nse raporti i vlerave hyrse sht k<x. Shembull Programi pr gjetjen e mbetjes nga pjestimi i dy numrave, i fituar me modifikimin e programit Mbetja1, ashtu q pr gjetjen e mbetjes shfrytzohet shprehja prkatse matematikore.

240 Bazat e programimit n C++


// Programi Mbetja2 #include <iostream> using namespace std; int main() { int m,k,x,a; cout << "\nNumri q pjestohet k: "; cin >> k; cout << "\nNumri me t cilin pjestohet x: "; cin >> x; a=k/x; cout << "\nVlera e pjestimit: " << a; m=k-a*x; cout << "\nMbetja e pjestimit: " << m << endl; return 0; }

Mbetja e pjestimit t numrit k me numrin x mund t gjendet edhe direkt, duke e shfrytzuar n program vetm shprehjen:
m=k-k/x*x;

Pr ta gjetur rezultatin e ksaj shprehje, duhet t merret parasysh radha e ekzekutimit t operacioneve elementare aritmetikore. Me qllim t shpjegimit m t thjesht, gjat llogaritjes n fjal, te programi Mbetja2 shfrytzohen dy shprehjet vijuese:
a=k/x; m=k-a*x;

duke i llogaritur variablat prkatse si variabla t tipit int. Kshtu, pr shembullin e vlerave hyrse k=27 dhe x=5 t marra m sipr, do t kemi:
1. 2. a=k/x=27/5=5 m=k-a*x=27-5*5=2

Gjat ksaj, te variabla a sht ruajtur vetm vlera e plot e pjestimit, meq, si tham, kemi t bjm me variabl t tipit int. Nse ekzekutohet programi i dhn, pr vlerat hyrse t prmendura m sipr, rezultati do t duket si n Fig.5.37.

Unazat 241

Fig.5.37 Rezultati i programit Mbetja2 Trupi i unazs q realizohet me komandn while mund t prmbaj komanda t fardoshme. Shembull Programi prmes s cilit shtypet tabela e katrorve t numrave natyror ift mes 2 dhe m, nse vlera e variabls m kompjuterit i jepet si vler hyrse prmes tastiers.

// Programi p10 #include <iostream> #include <iomanip> using namespace std; int main() { int i,m; char T[]="----------------------"; cout << "\nVlera kufitare m: "; cin >> m; cout << "\n Numri Katrori\n" << T << endl; i=2; while (i<=m) { cout << setw(7) << i << setw(10) << i*i << endl; i=i+2; } cout << T << endl; return 0; }

Ktu, vlera fillestare e variabls s unazs sht i=2. Kjo vler rritet pr 2 prmes komands:
i=i+2;

242 Bazat e programimit n C++

Trupi i unazs do t ekzekutohet vetm nse plotsohet kushti i<=m, i cili sht shnuar n fillim t saj:
while (i<=m)

Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do ta ket pamjen e dhn n Fig.5.38.

Fig.5.38 Rezultati i programit p10 Brenda trupit t unazs while mund t paraqiten edhe degzime. Shembull Programi prmes s cilit gjendet vlera m e madhe absolute n vektorin e dhn R(m).

// Programi while2 #include <iostream> using namespace std; int main() { const m=7; int i,x,A[m]={4,7,-2,-9,1,8,3}; x=abs(A[0]); i=1; while (i<m) { if (abs(A[i])>x) x=abs(A[i]); i++; } cout << "Vlera m e madhe absolute x="

Unazat 243
<< x << "\n"; return 0; }

N program, prmes unazs while krahasohen me radh t gjith antart e vektorit dhe te variabla x ruhet vlera absolute m e madhe. N fund, duke i pasur parasysh vlerat e antarve t vektorit, i cili sht deklaruar n fillim t programit, rezultati q shtypet n ekran sht:
Vlera m e madhe absolute x=9

Variabla e unazs e tipit karakter


Variabla e unazs e cila realizohet prmes komands while mund t jet edhe variabl e tipit karakter. Shembull Programi prmes s cilit n ekran shtypen shkronjat e alfabetit ndrkombtar.

// Programi p11 #include <iostream> #include <iomanip> using namespace std; int main() { char x; x='A'; while (x<='Z') { cout << setw(2) << x; x++; } cout << endl; return 0; }

Rezultati q shtypet n ekran pas ekzekutimit t programit t dhn do t duket si n Fig.5.39.

Fig.5.39 Rezultati i programit p11

244 Bazat e programimit n C++

Me qllim t shtypjes s shkronjave n ekran me nj zhvendosje t caktuar, p.sh., programit mund t'i shtohet edhe numratori i, pr ta shfrytzuar at brenda kllapave t manipulatorit setw, ashtu si shihet n vijim.

// Programi p12 #include <iostream> #include <iomanip> using namespace std; int main() { char x; int i; i=1; x='A'; while (x<='Z') { cout << setw(i) << x << endl; x++; i++; } cout << endl; return 0; }

Pas ekzekutimit t programit t dhn, rezultati do t duket si n Fig.5.40.

Fig.5.40 Rezultati i programit p12

Unazat 245 Efekti i njjt i zhvendosjes s shkronjave gjat shtypjes s tyre n ekran mund t arrihet edhe nse variabla i rritet gjat shfrytzimit te manipulatori setw, ashtu si shihet n versionin e programit q sht dhn n vijim.
// Programi p13 #include <iostream> #include <iomanip> using namespace std; int main() { char x; int i; i=1; x='A'; while (x<='Z') { cout << setw(i++) << x << endl; x++; } cout << endl; return 0; }

Nse n versionin e fundit t programit ndryshohet hapi i rritjes s variabls s unazs pr 2, prkatsisht nse shfrytzohet shprehja:
x=x+2;

n ekran shkronjat do t shtypen duke e kaprcyer do t dytn, ashtu si shihet n Fig.5.41.

Fig.5.41 Rezultati i programit p13, nse variabla e unazs rritet pr 2

Unaza t ndrthurura
Brenda unazs while mund t prfshihen edhe unaza t tjera, duke formuar unaza t ndrthurura. Gjat ksaj, si edhe tek unazat q formohen me

246 Bazat e programimit n C++ shfrytzimin e komands for, duhet pasur kujdes q unazat t mos priten mes vete. Shembull Programi prmes s cilit gjenden numrat e prsosur n grumbullin e numrave natyror mes 1 dhe n.

// Programi persosur #include <iostream> #include <iomanip> using namespace std; int main() { int i,j,k,n,s; char T[]="------------------"; cout << "Vlera e numrit n: "; cin >> n; cout << "\nNumrat e prsosur" << endl << T << endl; i=2; while (i<=n) { s=1; j=2; k=i/2; while (j<=k) { if ((i%j)==0) s=s+j; j=j+1; } if (s==i) cout << " " << i << endl; i=i+1; } cout << T << endl; return 0; }

Unazat 247 Pr nj numr thuhet se sht i prsosur, nse shuma e numrave me t cilt ai plotpjestohet sht e barabart me vet numrin. Kshtu, p.sh., pr numrin 28 thuhet se sht i prsosur, sepse:
28=1+2+4+7+14

ku numrat q paraqiten n ann e djatht t barazimit jan numrat me t cilt plotpjestohet numri 28. Nse ekzekutohet programi i dhn dhe si vler hyrse pr variabln n kompjuterit i jepet numri 10000, rezultati q shtypet n ekran do t duket si n Fig.5.42.

Fig.5.42 Rezultati i programit persosur N program, prmes unazs s jashtme e cila realizohet me komandn:
while (i<=n)

zgjedhen numrat e veant pr t'u verifikuar se a jan numra t prsosur. Kurse, prmes unazs s brendshme:
while (j<=k) { if ((i%j)==0) s=s+j; j=j+1; }

llogaritet shuma e numrave me t cilt numri i plotpjestohet. Gjat ksaj, numri i plotpjestohet me numrin j, nse moduli i pjestimit, prkatsisht mbetja, nga pjestimi i ktyre dy numrave sht zero. Pr ta kontrolluar plotpjestimin e tyre, shfrytzohet operatori %, i cili e jep si rezultat mbetjen nga pjestimi i numrit i me numrin j. Pasi t prfundoj llogaritja e shums, menjher pas daljes nga unaza, prmes kontrolls:
if (s==i)

248 Bazat e programimit n C++ shtypen numrat e prsosur n ekran. Brenda nj programi mund t paraqiten njkohsisht edhe m shum unaza. Shembull Programi prmes s cilit shtypen numrat treshifror t Amstrongut.

// Programi Amstrong1 #include <iostream> #include <iomanip> using namespace std; int main() { int i,x,y,z; char T[]="-------------------"; cout << "\nNumrat e Amstrongut" << endl << T << endl; x=1; while (x<=9) { y=0; while (y<=9) { z=0; while (z<=9) { i=100*x+10*y+z; if (i==(x*x*x+y*y*y+z*z*z)) cout << setw(10) << i << endl; z=z+1; } y=y+1; } x=x+1; } cout << T << endl; return 0;

Unazat 249
}

Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.5.43.

Fig.5.43 Rezultati i programit Amstrong1 Pr nj numr thuhet se paraqet numr t Amstrongut, nse shuma e kubeve t shifrave t tij sht e barabart me vet numrin. Kshtu, p.sh., numri 153 bn pjes n grupin e numrave n fjal, meq vlen:
13 + 53 +33 = 1 + 125 + 27 = 153

N program, pr gjenerimin e t gjitha kombinimeve t mundshme t shifrave t numrave treshifror, jan shfrytzuar 3 unaza t realizuara me komandn while. Prmes shprehjes:
i=100*x+10*y+z;

e cila prfshihet n unazn e tret (unazn e brendshme), gjendet numri i cili i prket kombinimit t 3 shifrave x, y dhe z, kurse shuma e kubeve t tyre llogaritet me shprehjen:
x*x*x+y*y*y+z*z*z

N fund, prmes kontrolls:


if (i==(x*x*x+y*y*y+z*z*z))

gjenden dhe n degn prkatse edhe shtypen numrat e krkuar. Pr gjetje t numrave treshifror t Amstrongut mund t shfrytzohet nj version m i thjesht i programit, i cili sht dhn n vijim.
// Programi Amstrong2 #include <iostream> #include <iomanip> using namespace std;

250 Bazat e programimit n C++


int main() { int i,x,y,z; char T[]="-------------------"; cout << "\nNumrat e Amstrongut" << endl << T << endl; i=100; while (i<=999) { x=i/100; y=(i%100)/10; z=i%10; if (i==(x*x*x+y*y*y+z*z*z)) cout << setw(10) << i << endl; i=i+1; } cout << T << endl; return 0; }

Nse ekzekutohet programi i dhn, n ekran do t fitohet rezultati i njjt me at q shihet n Fig.5.43. N program, shifrat x, y dhe z nuk merren si variabla t tri unazave t veanta, ashtu si sht vepruar te programi paraprak Amstrong1. Por, ato ktu prcaktohen nga vlerat e variabls i t unazs s vetme, prmes shprehjeve:
x=i/100; y=(i%100)/10; z=i%10;

dhe si rezultat japin vetm numra t plot.

Unazat gjat operimit me fusha


Indekset e antarve t vektorve, t matricave ose t fushave shumdimensionale, t cilat shfrytzohen gjat llogaritjeve t ndryshme, mund t prcaktohen prmes vlerave t variablave t unazave t formuara duke i shfrytzuar komandat while.

Unazat 251

Operimi me vektor
Gjat operimit me antart e vektorve, meq vektort paraqesin fusha njdimensionale, pr zgjedhjen e indekseve t tyre mund t shfrytzohet variabla e unazs e cila realizohet prmes komands while. Shembull Programi prmes s cilit gjendet shuma e katrorve t antarve t vektorit R(m), t cilt kan indeks tek. Njkohsisht, antart q shfrytzohen gjat llogaritjes s shums shtypen n ekran.

// Programi p13 #include <iostream> #include <iomanip> using namespace std; int main() { const m=8; int i,R[m]={4,6,-7,9,-2,5,3,-1}; double s; char g[]="----------------------------"; cout << "\nAntart e vektorit\n" << "\n Indeksi Antari Katrori\n" << g << endl; s=0; i=1; while (i<m) { s=s+R[i]*R[i]; cout << setw(5) << i << setw(9) << R[i] << setw(10) << R[i]*R[i] << endl; i=i+2; } cout << g << "\nShuma e llogaritur s=" << s

252 Bazat e programimit n C++


<< endl; return 0; }

Ktu, variabla i e unazs shfrytzohet si indeks i antarve t vektorit. Vlera fillestare e ksaj variable sht marr i=1, kurse brenda unazs rritet me hapin 2, ashtu q shums i shtohen vetm katrort e antarve me indeks tek. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.5.44.

Fig.5.44 Rezultati i programit p13 N kolonn e par t tabels jan dhn indekset e antarve t vektorit, n kolonn e dyt - vlerat e antarve, kurse n kolonn e tret - katrort q prfshihen n shum. Brenda unazs while mund t paraqiten m shum komanda t ndryshme. Shembull Programi prmes s cilit nga antart e vektorit F(n) formohet vektori i ri R, duke i shfrytzuar vetm antart e vektorit t cilt jan m t mdhenj se 4 dhe m t vegjl se 11.

// Programi p14 #include <iostream> #include <iomanip> using namespace std;

Unazat 253
int main() { const n=10; int i,k,R[n],F[n]={6,-4,8,7,12,9,15,-3,5,10}; char g[]="-----------------"; cout << "\nAntart q prfshihen n vektor\n" << "\n i F[i]\n" << g << endl; k=-1; i=0; while (i<n) { if ((F[i]>4) && (F[i]<11)) { k=k+1; R[k]=F[i]; cout << setw(5) << i << setw(9) << F[i] << endl; } i++; } cout << g << "\n\nVektori i formuar \n" << "\nR={"; for (i=0;i<=k;i++) cout << setw(3) << R[i]; cout << " }\n\n"; return 0; }

Ktu, brenda unazs while, paraqitet komanda pr degzim:


if ((F[i]>4) && (F[i]<11))

me nj deg t prbr, prmes s cils zgjedhen antart e vektorit t cilt jan m t mdhenj se 4 dhe m t vegjl se 11. Nse ekzekutohet programi i dhn, rezultati n ekran do t duket si n Fig.5.45.

254 Bazat e programimit n C++

Fig.5.45 Rezultati i programit p14

N pjesn e par t rezultatit jan dhn antart q prfshihen n vektorin q formohet si dhe indekset prkatse n vektorin F(m). Kurse n fund sht shtypur edhe vektori i formuar R, duke e shfrytzuar unazn e realizuar me komandn for. Indekset e antarve t vektorit t formuar R shkojn mes vlerave 0 dhe k, prkatsisht ky vektor ka gjithsej k+1 antar. Shembull Programi prmes s cilit radhiten sipas madhsis antart e vektorit Z(m), duke filluar prej antarit me vler m t madhe.

// Programi sort1 #include <iostream> #include <iomanip> using namespace std; int main() { const m=12; int i,j,k,Z[m]={4,7,9,-3,5,12,6,17,-2,13,3,8}; i=0; while (i<m) { for (j=i+1;j<m;j++) if (Z[i]<=Z[j]) { k=Z[i]; Z[i]=Z[j]; Z[j]=k; } i++; } cout << "\nVektori i sortuar \n" << "\nZ={";

Unazat 255
for (i=0;i<m;i++) cout << setw(3) << Z[i]; cout << " }\n\n"; return 0; }

Procedura e sortimit, e cila sht shfrytzuar n program, mbshtetet n metodn e sortimit t zakonshm, sipas s cils n do hap i gjendet antari m i madh dhe kjo vler fiksohet tek antari Z[i] i vektorit. Brenda trupit t unazs while ktu sht shfrytzuar unaza e realizuar me komandn for:
for (j=i+1;j<m;j++) if (Z[i]<=Z[j]) { k=Z[i]; Z[i]=Z[j]; Z[j]=k; }

prmes s cils, nse plotsohet kushti i shkruar n vazhdim t komands if, u ndrrohen vendet antarve Z[i] dhe Z[j] t vektorit, me ndrmjetsimin e variabls ndihmse k. N fund t programit, pr shtypjen e vektorit t sortuar Z(m) sht shfrytzuar nj unaz e veant for. Rezultati q shtypet n ekran prmes ksaj unaze do t duket si n Fig.5.46, ku, si shihet, antart e vektorit jan sortuar duke filluar me antarin me vler m t madhe.

Fig.5.46 Rezultati i programit sort1

Operimi me matrica
Meq matricat paraqesin fusha dydimensionale, gjat shfrytzimit t antarve t tyre idekset prkatse mund t prcaktohen prmes variablave t dy unazave t realizuara prmes komands while. Shembull Programi prmes s cilit gjendet shuma e antarve t matrics A(m,m), q gjenden mbi diagonalen kryesore.

256 Bazat e programimit n C++ // Programi while3


#include <iostream> using namespace std;

int main() { const m=5; int A[m][m]={{4,2,7,5,3}, {1,9,7,2,6}, {3,8,5,9,2}, {5,1,6,8,3}, {7,3,8,1,5}}; double s; int i,j; s=0; i=0; while (i<m) { j=0; while (j<m) { if (i<j) s=s+A[i][j]; j++; } i++; } cout << "Shuma e krkuar sht: " << s << "\n"; return 0; } Nse ekzekutohet programi i dhn, rezultati i cili shtypet n ekran do t duket kshtu: Shuma e krkuar sht: 46 ku vlera e shums llogaritet me mbledhjen e antarve mbi diagonalen kryesore t matrics, kshtu: s = 2 + 7 + 5 + 3 + 7 + 2 + 6 + 9 + 2 + 3 = 46

Unazat 257 Unaza e par (e jashtme) e realizuar prmes komands: while (i<m) ktu sht shfrytzuar pr zgjedhjen e rreshtave t matrics (vlerat e indeksit i), kurse prmes unazs s dyt (t brendshme):
while (j<m)

zgjedhen kolonat e matrics (vlerat e indeksit t dyt j). N unazn e jashtme while prfshihen komandat t cilat gjenden brenda kllapave t jashtme, kurse kllapat e brendshme e prcaktojn trupin e komandave t unazs s brendshme while. Edhe ktu, sikurse edhe tek unazat e ndrthurura t realizuara prmes komandave for, pr nj vler t variabls s unazs s jashtme (indeksit t par i), merren t gjitha vlerat e variabls s unazs s brendshme (indeksit t dyt j). N programin e msiprm, njra ose t dy unazat mund t realizohen edhe duke e shfrytzuar komandn for. Shembull Programi while3 tek i cili shfrytzohet komanda for pr realizimin e unazs s brendshme.

// Programi while4
#include <iostream> using namespace std;

int main() { const m=5; int A[m][m]={{4,2,7,5,3}, {1,9,7,2,6}, {3,8,5,9,2}, {5,1,6,8,3}, {7,3,8,1,5}}; double s; int i,j; s=0; i=0; while (i<m) { for (j=0;j<m;j++) if (i<j) s=s+A[i][j]; i++; }

258 Bazat e programimit n C++ cout << "Shuma e krkuar sht: " << s << "\n"; return 0; } Ktu, n unazn e brendshme prfshihen komandat:
for (j=0;j<m;j++) if (i<j) s=s+A[i][j];

kurse n trupin e unazs s jashtme q realizohet prmes komands while, prfshihet edhe komanda pr rritje pr 1 t vlers s variabls prkatse t ksaj unaze:
i++;

Programi while4 mund t thjeshtohet, duke i marr vetm vlerat e variablave i dhe j, t cilat u prkasin indekseve t antarve mbi diagonalen kryesore t matrics. Si rezultat, pjesa e programit prmes s cils prcaktohen unazat e nevojshme do t duket kshtu:
i=0; while (i<m) { for (j=i+1;j<m;j++) s=s+A[i][j]; i++; }

Prej ktu shihet se pr do vler t indeksit i, t rreshtave t matrics, fillohet me vlern j=i+1 t indeksit t kolonave t matrics. Kjo, sepse indeksi i dyt i antarit mbi dijagonaln kryesore t matrics sht pr 1 m i madh se indeksi i rreshtit prkats. Shembull Programi prmes s cilit formohet vektori R nga antart negativ t matrics s dhn F(m,n).

// Programi p15 #include <iostream> #include <iomanip> using namespace std; int main() { const m=5,n=4; int F[m][n]={{7,-3,14,6},

Unazat 259
{9,-2,-4,8}, {15,4,6,-7}, {-1,17,3,5}, {5,-8,-5,2}}; int i,j,k,R[m*n]; char v[]="--------------------"; k=-1; i=0; while (i<m) { j=0; while (j<n) { if (F[i][j]<0) { k=k+1; R[k]=F[i][j]; } j++; } i++; } cout << "\nVektori i formuar R\n" << "\n Indeksi Antari\n" << v << endl; for (i=0;i<=k;i++) cout << setw(5) << i << setw(10) << R[i] << endl; cout << v << endl; return 0; }

N program, pr prcaktimin e indekseve i dhe j t antarve t matrics jan shfrytzuar dy unaza while. N trupin e unazn s brendshme sht prfshir komanda if:
if (F[i][j]<0) { k=k+1; R[k]=F[i][j]; }

260 Bazat e programimit n C++ n degn e s cils prcaktohet indeksi i antarit q i shtohet vektorit: k=k+1; si dhe antari prkats vendoset n vektor:
R[k]=F[i][j];

Nse ekzekutohet programi i dhn, rezultati n ekran do t duket si n Fig.5.47.

Fig.5.47 Rezultati i programit p15

Brenda unazave mund t paraqiten degzime t ndryshme prmes komands if. Shembull Programi prmes s cilit gjendet shuma e antarve t matrics A(m,n), t cilt pr nga vlera absolute jan m t mdhenj se 4 dhe m t vegjl se numri 10. Njkohsisht, numrohen antart e matrics t cilt jan prfshir gjat llogaritjes s shums.

// Programi p16 #include <iostream> using namespace std; int main() {

Unazat 261
const m=4,n=5; int F[m][n]={{-7,3,2,15,4}, {6,-1,-9,5,-2}, {18,7,11,9,6}, {-5,8,-4,6,1}}; int i,j,k; float s; s=0; k=0; i=0; while (i<m) { j=0; while (j<n) { if (abs(F[i][j])>4) if (abs(F[i][j])<10) { s=s+F[i][j]; k=k+1; } j++; } i++; } cout << "\nShuma e krkuar e antarve t matrics s=" << s << endl << "\nNumri i antarve t prfshir n shum k=" << k << "\n\n"; return 0; }

N unazn e brendshme t programit t dhn jan prfshir dy komanda if pr degzim:


if (abs(F[i][j])>4) if (abs(F[i][j])<10) { s=s+F[i][j]; k=k+1; }

Nse plotsohen dy kushtet e shtruara, n baz t t cilve vlerat e antarve t matrics kontrollohen se a jan m t mdhenj se 4 dhe m t vegjl

262 Bazat e programimit n C++ se 10, shums i shtohet antari n fjal. Njkohsisht, numratori k, prmes s cilit numrohen antart e prfshir n shum, rritet pr 1. Pas ekzekutimit t programit t dhn, rezultati do t duket si n Fig.5.48.

Fig.5.48 Rezultati i programit p16 Gjat zgjedhjes s indekseve t antarve t matrics, unazat mund t realizohen edhe duke e shfrytzuar komandn for. Kshtu, p.sh., te shembulli i programit p16, unaza e jashtme realizohet prmes komands for, pjesa e trupit t programit ku jan vendosur unazat do t duket si n vijim.
s=0; k=0; for (i=0;i<m;i++) { j=0; while (j<n) { if (abs(F[i][j])>4) if (abs(F[i][j])<10) { s=s+F[i][j]; k=k+1; } j++; } }

Ktu, me ngjyr t zez jan theksuar unazat e realizuara prmes komands while. Kurse, nse shfrytzohet komanda for pr realizimin e unazs s brendshme, pjesa e unazave n trupin e programit do ta ket pamjen vijuese, ku me ngjyr t zez jan theksuar komandat e prfshira n unazn for.
s=0; k=0; i=0; while (i<m) {

Unazat 263
for (j=0;j<n;j++) { if (abs(F[i][j])>4) if (abs(F[i][j])<10) { s=s+F[i][j]; k=k+1; } } i++; }

Kaprcimi i komandave brenda unazs


Pjes t caktuara brenda unazave while mund t kaprcehen duke e shfrytzuar komandn goto. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

y=

x +4 3

i =1 ( i 3, 6 )

(2i + 1)

n +1

Vlerat e variablave x dhe n kompjuterit i jepen si vlera hyrse prmes tastiers.


// Programi p24 #include <iostream> #include <iomanip> using namespace std; int main() { int i,n; double s,x,y; char v[]="---------------"; cout << "Vlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >>n; cout << "\n i s\n" << v << endl; s=0; i=1; while (i<=(n+1))

264 Bazat e programimit n C++


{ if ((i==3) || (i==6)) goto Vijues; s=s+(2*i+1); cout << setw(5) << i << setw(7) << s << endl; Vijues: i++; } y=x/3+4*s; cout << v << "\nVlera e funksionit y=" << y << endl; return 0; }

Ktu, brenda unazs while, kaprcimi i shtimit t antarve t shums pr vlerat 3 dhe 6 t variabls i t unazs sht realizuar prmes komands:
goto Vijues;

Pas ekzekutimit t programit t dhn, pr vlera t caktuara hyrse t variablave x dhe n, rezultati do t duket si n Fig.5.49.

Fig.5.49 Rezultati i programit p24

Tek unaza while, me qllim t kaprcimit t nj pjese t caktuar brenda saj, nuk mund t shfrytzohet komanda continue. Kjo, sepse prmes saj kaprcehet edhe komanda pr rritje t vlers s variabls s unazs. Si rrjedhoj, hyhet n nj unaz t pafund dhe programi mund t ndrpritet vetm me forc, p.sh., prmes kombinimit t tasteve Ctrl+Break n tastier.

Unazat 265

Dalja nga unaza


Pr dalje nga unazat e realizuara me komandn while, mund t shfrytzohen komandat goto dhe break.

Dalja prmes komands goto


Shfrytzimi i komands pr kaprcim pa kusht goto, pr dalje nga unaza e cila sht realizuar me komandn while, nuk dallon aspak nga ai q sht shpjeguar tek unazat t realizuara me komandn for.

Shembull

Programi prmes s cilit llogaritet vlera e funksionit:


1 y = 3 i =1 i

duke e ndrprer llogaritjen kur antari q i shtohet shums sht m i vogl se numri i dhn e.
// Programi p1 #include <iostream> #include <math.h> #include <iomanip> using namespace std; int main() { const double e=0.001; int i; double a,y; char V[]="------------------------------"; cout << "\n i a y\n" << V << endl; cout << fixed << setprecision(5); y=0; i=1;

266 Bazat e programimit n C++


while (i<=9999) { a=1/pow(i,3); if (a<e) goto Dalja; y=y+a; cout << setw(7) << i << setw(10) << a << setw(11) << y << endl; i++; } Dalja: cout << V << endl; cout << "Vlera e funksionit y=" << y << "\n"; return 0; }

N program sht parapar q trupi i unazs s realizuar prmes komands while t prsritet 9999 her (ky numr sht marr lirisht shum i madh). Por, prsritja e ekzekutimit t komandave t prfshira n unaz ndrpritet nse vlera e antarit a t seris sht shum e vogl, prkatsisht nse kjo vler sht m e vogl se numri e. Pr kt qllim sht parapar dalja nga unaza duke i shfrytzuar komandat:
if (a<e) goto Dalja;

me t cilat kaprcehet n pjesn e programit ku sht vendosur labela Dalja:. Rezultati q fitohet n ekran pas ekzekutimit t programit t dhn m sipr do t duket si n Fig.5.50.

Unazat 267

Fig.5.50 Rezultati i programit p1 Si shihet nga tabela e rezultatit, n t jan prfshir edhe vlerat e antarve a t seris, pr t par se si ato zvoglohen me rritjen e vlers s variabls i. Vlera e fundit e ktij antari sht e barabart me vlern e variabls e, e cila shfrytzohet n prcaktimin e saktsis s llogaritjes s vlers s funksionit y. N program, prmes komands:
cout << fixed << setprecision(5);

kompjuterit i urdhrohet q, gjat shtypjes, vlerat e variablave a dhe y t shtypen n form dhjetore (manipulatori fixed) si dhe me precizitet prej 5 vendesh pas piks dhjetore (manipulatori setprecision). Programi i dhn m sipr mund t realizohet edhe pa e shfrytzuar komandn goto pr dalje nga unaza.
// Programi p2 #include <iostream> #include <math.h> #include <iomanip> using namespace std; int main() { const double e=0.001; int i; double a,y; char V[]="------------------------------"; cout << "\n i a y\n" << V << endl; cout << fixed << setprecision(5); y=0; a=1; i=1; while (a>e) { a=1/pow(i,3); y=y+a; cout << setw(7)

268 Bazat e programimit n C++


<< << << << << << i++; } cout << << cout << << << return 0; } V endl; "Vlera e funksionit y=" y "\n"; i setw(10) a setw(11) y endl;

N programin e dhn, dalja nga unaza prcaktohet prmes komands:


while (a>e)

e cila sht vendosur menjher n fillim t saj. Por, q ky testim t mund t shfrytzohet edhe n hapin e par t llogaritjes, pr variabln a sht marr vlera fillestare 1 (sepse at vler e ka pr i=1), menjher para testimit n fjal. Rezultati q fitohet pas ekzekutimit t programit p2 do t jet plotsisht i njjt me at t programit p1, i cili u dha m sipr n Fig.5.50.

Dalja prmes komands break


Ngjashm me unazat e realizuara prmes komands for, nse brenda unazs while vendoset komanda break, pa kusht dilet prej saj dhe ekzekutimi i programit vazhdon me komandn e cila gjendet menjher pas kllaps s fundit t trupit t unazs. Shembull Programi prmes s cilit llogariten vlerat e faktorielve t numrave natyror mes 1 dhe n, duke ia dhn kompjuterit vlern e variabls n prmes tastiers. N program sht parapar q llogaritja t ndrpritet, nse faktorieli e tejkalon vlern maksimale t mundshme t tipit int.

// Programi p25 #include <iostream> #include <iomanip> #include <climits> using namespace std;

Unazat 269
int main() { int i,n; float F; char h[]="------------------------------"; cout << "Vlera e variabls n: "; cin >> n; cout << "\n Numri Faktorieli\n" << h << endl; F=1; i=1; while (i<=n) { if ((F*i)>INT_MAX) { cout << "\nVlera e faktorielit e madhe\n"; break; } F=F*i; cout << setw(5) << i << fixed << setprecision(1) << setw(18) << F << endl; i++; } cout << h << endl; return 0; }

N program, pr llogaritje t faktorielit sht shfrytzuar unaza while, ku, si shihet, para unazs jan prcaktuar vlerat fillestare, si ajo e faktorielit (F=1) ashtu edhe ajo e variabls s unazs (i=1). Brenda unazs, prmes shprehjes: F=F*i; kryhen shumzimet e nevojshme pr llogaritjen e vlers s faktorielit, t cilat pastaj shtypen duke e shfrytzuar komandn cout. Por, para se t llogaritet vlera vijuese e faktorielit, pr vlern aktuale t variabls s unazs, prmes komands:
if ((F*i)>INT_MAX) {

270 Bazat e programimit n C++


cout << "\nVlera e faktorielit e madhe\n"; break; }

kontrollohet se mos ndoshta kjo vler e tejkalon vlern kufitare maksimale t tipit int, duke e krahasuar at me konstanten INT_MAX, e cila e paraqet vlern maksimale t mundshme. Nse plotsohet kushti i shkruar brenda kllapave t komands if, n vazhdim t komands sht parapar shtypja e mesazhit:
Vlera e faktorielit e madhe

dhe, njkohsisht, prmes komands break edhe dalja nga unaza. Komanda e par e cila ekzekutohet pas daljes nga unaza sht komanda:
cout << h << endl;

me t ciln shtypen vizat n fund t tabels me vlerat e faktorielve, e cila me at rast prpilohet. Kshtu, p.sh., nse programi i dhn ekzekutohet dhe prmes tastiers kompjuterit i jepet vlera n=50, tabela do ta ket pamjen e dhn n Fig.5.51.

Fig.5.51 Rezultati i programit p25 Nga tabela e dhn shihet se pas vlers s faktorielit pr i=12 plotsohet kushti pr tejkalimin e vlers maksimale t mundshme t konstantes INT_MAX dhe prandaj ekzekutimi i mtejm i unazs ndrpritet. Si sht shpjeguar edhe n kapitullin e dyt, gjat shfrytzimit t konstanteve ku ruhen vlerat kufitare t tipeve t ndryshme, n ballinn e programit duhet t vendoset komanda paraprocesorike:

Unazat 271

#include <climits> Nse brenda unazs s programit t dhn nuk vendoset komanda if, ekzekutimi i unazs do t vazhdoj edhe m tutje, sepse variabla F sht deklaruar e tipit float dhe n t mund t ruhen vlera m t mdha se vlera e konstantes INT_MAX.

Unazat do-while
Prve me komandat for dhe while, unazat mund t realizohen edhe duke i shfrytzuar komandat do e while, t cilat n form t prgjithshme shkruhen kshtu: i=f; do { a; i=i+h; } while(i<=p); ku jan: i - variabla e unazs. f - vlera fillestare e variabls s unazs. p - vlera prfundimtare e variabls s unazs. h - hapi me t cilin ndryshohen vlerat e variabls i. a - komandat e prfshira brenda unazs.

272 Bazat e programimit n C++ Unazat e tilla shkurt quhen edhe unaza do-while. Prmes tyre, ekzekutimi i komandave a, t prfshira brenda kllapave t unazs, do t prsritet derisa t plotsohet kushti i<=p. Nse unaza do-while paraqitet prmes bllok-diagramit, n form t prgjithshme do ta kemi pamjen e dhn n Fig.5.52.

i=f

i=i+h

Fig.5.52 Forma e prgjithshme e unazs do-while e paraqitur prmes bllok-diagramit

true

i<=p

false

Pr dallim nga unazat e realizuara me komandat for dhe while, tek unaza do-while s pari ekzekutohen komandat t cilat gjenden brenda unazs dhe pastaj kontrollohet se a sht plotsuar kushti i<=p. Prandaj, duhet pasur kujdes gjat shfrytzimit t ksaj unaze, q t eliminohet mundsia e ekzekutimit t saj pr vlern fillestare i=f, n rastet kur kjo vler sht e palogjikshme. Shembull Programi prmes s cilit nga numrat natyror mes 1 dhe m llogaritet shuma e katrorve t numrave tek dhe e kubeve t numrave ift.

// Programi do1 #include <iostream> #include <math.h> using namespace std; int main() { int i,m; double s; cout << "\nVlera e variabls m: ";

Unazat 273
cin >> m; s=0; i=1; do { s=s+pow(i,2)+pow(i+1,3); i=i+2; } while (i<=m); cout << "Shuma e krkuar sht s=" << s << "\n"; return 0; }

N program, brenda unazs do-while sht vendosur komanda:


s=s+pow(i,2)+pow(i+1,3);

e cila do t ekzekutohet pr vlera t ndryshme t variabls i mes vlers fillestare i=1 dhe vlers prfundimtare m (kushti i<=m), duke e rritur ate me hapin 2 (shprehja i=i+2). N kt shprehje, pr llogaritjen e katrorve dhe t kubeve t numrave i dhe i+1 sht shfrytzuar funksioni pow, i cili gjendet n pakon e funksioneve t modulit math.h, pr ka do t bhet fjal m von. Pas ekzekutimit t programit t dhn, pr vlern hyrse m=6, e cila kompjuterit i jepet prmes tastiers, n ekran do ta kemi pamjen e dhn n Fig.5.53. Fig.5.53 Rezultati i programit do1 Shuma e fituar n fakt sht llogaritur prmes shprehjes: s = 12 + 23 + 32 + 43 + 52 + 63 = 323 Programi i dhn mund t realizohet duke e shfrytzuar unazn while, ose unazn for. Pamja e tij gjat realizimit prmes unazs while sht dhn n vijim.
// Programi do1a #include <iostream> #include <math.h>

274 Bazat e programimit n C++


using namespace std; int main() { int i,m; double s; cout << "\nVlera e variabls m: "; cin >> m; s=0; i=1; while (i<=m) { s=s+pow(i,2)+pow(i+1,3); i=i+2; } cout << "Shuma e krkuar sht s=" << s << "\n"; return 0; }

Nse analizohet ky version i programit, do t shihet se dallimi qndron vetm n zhvendosjen e komands while n pozitn e komands do, duke mos ndryshuar asgj tjetr. Versioni i programit i realizuar me unazn do-while do t thjeshtohet krejtsisht, nse n vend t saj shfrytzohet unaza for, gj q shihet n vijim.
// Programi do1b #include <iostream> #include <math.h> using namespace std; int main() { int i,m; double s; cout << "\nVlera e variabls m: "; cin >> m; s=0; for (i=1;i<=m;i=i+2) s=s+pow(i,2)+pow(i+1,3); cout << "Shuma e krkuar sht s=" << s << "\n";

Unazat 275
return 0; }

Brenda unazs do-while mund t paraqiten edhe komanda t tjera, si sht, p.sh., komanda pr degzim if. Shembull Programi prmes s cilit llogaritet prodhimi i katrorve t antarve negativ t vektorit A(m).

// Programi do2 #include <iostream> using namespace std; int main() { const int m=8; int i,A[m]={4,-7,2,5,-3,8,-6,1}; double p; p=1; i=0; do { if (A[i]<0) p=p*(A[i]*A[i]); i++; } while (i<m); cout << "Prodhimi p= " << p << "\n"; return 0; }

Nse ekzekutohet programi i dhn, si rezultat n ekran shtypet: Prodhimi p=15876 gj q sht fituar prmes llogaritjes: p = (-7)2 * (-3)2 * (-6)2 = 15876

276 Bazat e programimit n C++

Unaza t ndrthurura
Si tek unazat for dhe while, edhe brenda unazs do-while mund t prfshihen unaza t tjera, por t cilat mes vete nuk priten. Kto unaza mund t realizohen si unaza do-while, ose edhe si unaza for e while. Shembull Programi prmes s cilit gjendet shuma e antarve t matrics s dhn R(m,n).

// Programi p27 #include <iostream> using namespace std; int main() { const int m=4,n=3; int i,j; int R[m][n]={{4,7,2}, {5,9,3}, {6,1,12}, {8,15,4}}; float s; s=0; i=0; do { j=0; do { s=s+R[i][j]; j++; } while (j<n); i++; } while (i<m); cout << "Shuma e llogaritur s=" << s << "\n"; return 0; }

N program, me qllim t mbledhjes s antarve t matrics s dhn R(m,n), jan shfrytzuar dy unaza do-while. Prmes variabs i t unazs s par zgjedhen rreshtat e matrics. Kurse, variabla j e unazs s dyt (unazs s brendshme), e cila prfshihet n trupin e unazs s par (unazs s jashtme),

Unazat 277 shfrytzohet pr zgjedhjen e kolonave t matrics. Rezultati q fitohet pas ekzekutimit t programit n fjal sht:
Shuma e llogaritur s=76

Programi i dhn mund t realizohet edhe prmes unazave while, ashtu si shihet n vijim.
// Programi p28 #include <iostream> using namespace std; int main() { const int m=4,n=3; int i,j; int R[m][n]={{4,7,2}, {5,9,3}, {6,1,12}, {8,15,4}}; float s; s=0; i=0; while (i<m) { j=0; while (j<n) { s=s+R[i][j]; j++; } i++; } cout << "Shuma e llogaritur s=" << s << "\n"; return 0; }

Nse krahasohet ky program me versionin paraprak t tij, vrehet se dallimi sht vetm n vendosjen e komandave while n fillim t unazave, duke mos ndryshuar asgj n pjest e tjera t programit. Por, nse programi i dhn realizohet prmes unazave for, ai do t jet shum m i thjesht, gj q shihet n vijim.
// Programi p29 #include <iostream> using namespace std;

278 Bazat e programimit n C++


int main() { const int m=4,n=3; int i,j; int R[m][n]={{4,7,2}, {5,9,3}, {6,1,12}, {8,15,4}}; float s; s=0; for (i=0;i<m;i++) for (j=0;j<n;j++) s=s+R[i][j]; cout << "\nShuma e llogaritur s=" << s << "\n"; return 0; }

Unazat q shfrytzohen brenda nj programi nuk sht e domosdoshme t jen vetm t nj tipi. Kshtu, p.sh., te versionet e programit t dhn m sipr, nse unaza e jashtme realizohet prmes unazs do-while, pjesa e programit me unazat do t duket si n vijim.
i=0; do { for (j=0;j<n;j++) s=s+R[i][j]; i++; } while (i<m);

Rezultati q fitohet pas ekzekutimit t ktij versioni t programit do t jet i njjt me at q u dha n versionin e par t tij, gjat realizimit prmes unazave do-while. Brenda unazave do-while mund t ket edhe komanda t zakonshme pr degzim. Shembull Programi prmes s cilit gjendet antari m i madh n matricn e dhn A(m,n).

// Programi do3

Unazat 279
#include <iostream> using namespace std; int main() { const int m=4,n=5; int i,j,x; int A[m][n]={{6,3,5,-2,4}, {1,5,2,7,15}, {7,8,5,4,13}, {11,5,8,2,7}}; x=A[0][0]; i=0; do { j=0; do { if (A[i][j]>x) x=A[i][j]; j++; } while (j<n); i++; } while (i<m); cout << "Antari m i madh x=" << x << "\n"; return 0; }

Ktu, si variabl e unazs s jashtme sht marr indeksi i rreshtave i, kurse unaza e brendshme e shfrytzon indeksin e kolonave j t matrics. Antari m i madh ruhet te variabla x. Prmes shprehjes:
x=A[0][0];

ksaj variable fillimisht i shoqrohet vlera e antarit t par matrics. Rezultati q shtypet n ekran, pas ekzekutimit t programit t dhn, sht: Antari m i madh x=15 Nse te programi i dhn m sipr pr realizimin e unazave shfrytzohet komanda for, programi do t duket si n vijim. // Programi do4

280 Bazat e programimit n C++


#include <iostream> using namespace std;

int main() { const int m=4,n=5; int i,j,x; int A[m][n]={ {6,3,5,-2,4}, {1,5,2,7,15}, {7,8,5,4,13}, {11,5,8,2,7}}; x=A[0][0]; for (i=0;i<m;i++) for (j=0;j<n;j++) if (A[i][j]>x) x=A[i][j]; cout << "Antari m i madh x=" << x << "\n"; return 0; } Nse krahasohen dy programet n fjal, edhe ktu qart shihet se realizimi i unazave prmes komands for sht m i thjesht, si dhe ka nj dukshmri m t madhe t veprimeve q kryhen gjat gjetjes s antarit t krkuar t matrics. Brenda unazave t ndrthurura mund t paraqiten komanda me degzime t prbra. Shembull Programi prmes s cilit radhiten sipas madhsis antart e vektorit t dhn A(m), duke filluar prej antarit m t madh.

// Programi p26 #include <iostream> using namespace std; int main() { const n=8; int i,j,x,A[n]={-5,8,-2,6,3,15,7,9}; cout << "\nVektori i dhn\n\n"; cout << "A=[ "; for (i=0;i<n;i++)

Unazat 281
cout << A[i] << " "; cout << "]\n"; i=0; do { j=i+1; do { if (A[i]<A[j]) { x=A[i]; A[i]=A[j]; A[j]=x; } j++; } while (j<n); i++; } while (i<n-1); cout << "\nVektori pas radhitjes\n\n"; cout << "A=[ "; for (i=0;i<n;i++) cout << A[i] << " "; cout << "]\n\n"; return 0; }

Nse ekzekutohet programi i dhn, rezultati q paraqitet n ekran do t duket si n Fig.5.54.

Fig.5.54 Rezultati i programit p26

282 Bazat e programimit n C++

N program, pr do vler t variabls i, prcaktohet vlera maksimale n pozitn prkatse t vektorit. Prandaj, edhe variabls s unazs s dyt i jepet vlera fillestare j=i+1, ashtu q n krahasim t marrin pjes vetm antart e vektorit t cilt ende nuk jan radhitur. Nse gjat krahasimit t dy antarve t vektorit prmes komands:
if (A[i]<A[j])

konstatohet se shprehja brenda kllapave ka vler true, vlerat e dy antarve t vektorit duhet t'i ndrrojn vendet. Pr kt qllim shfrytzohen shprehjet:
x=A[i]; A[i]=A[j]; A[j]=x;

t cilat jan vendosur brenda degs s prbr t komands if.

Kaprcimi i komandave brenda unazs


Tek unazat do-while, pr kaprcimin e pjesve t caktuara t komandave brenda unazs mund t shfrytzohet komanda e kaprcimit pa kusht goto.

Shembull

Programi prmes s cilit llogaritet vlera e funksionit:

y = 2x + 3

i=2 ( i 3, 5 , 6 )

(2i 1)

Vlerat e variablave n dhe x kompjuterit i jepen prmes tastiers si vlera hyrse.


// Programi p30 #include <iostream> #include <iomanip> using namespace std; int main() {

Unazat 283
int i,n; double x,y,p; char g[]="------------------"; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n; cout << endl; cout << "\n i p\n" << g << endl; p=1; i=2; do { if ((i==3) || (i==5) || (i==6)) goto Vijues; else { p=p*(2*i-1); cout << setw(5) << i << setw(10) << p << endl; } Vijues: i++; } while (i<=n); y=2*x+3*p; cout << << << << return 0; } g "\nRezultati y=" y endl;

Si mund t shihet edhe n program, pr kaprcimin e antarve t prodhimit pr vlerat e variabls s unazs i=3, 5 dhe 6 sht shfrytzuar komanda e kaprcimit pa kusht goto Vijues. Por, prmes ksaj komande kaprcehet te pjesa e fundit e unazs:
Vijues: i++;

284 Bazat e programimit n C++

me qllim q t vazhdoj rritja e vlers s variabls s unazs. Pas ekzekutimit t programit n fjal, pr vlera hyrse t caktuara, n ekran do ta kemi pamjen e dhn n Fig.5.55.

Fig.5.55 Rezultati i programit p30 Nga tabela e dhn shihet qart se sht kaprcyer shumzimi me antart prkats t variabls i, kur ajo i merr vlerat 3, 5 dhe 6. Tek unaza do-while, kaprcimi nuk mund t bhet me komandn continue, si tek unaza for. Kjo sht e pamundur sepse prmes ksaj komande shkohet n fund t unazs, duke e kaprcyer edhe komandn pr rritje t vlers s variabls s unazs. N kt mnyr procedura e llogaritjes shkon n pafundsi dhe pr ndrprerje t ekzekutimit t programit, p.sh., n tastier duhet t shtypet kombinimi i tasteve Ctrl+Break.

Dalja nga unaza


Sipas nevojs, ekzekutimi i komandave brenda trupit t unazs dowhile mund t ndrpritet, duke dal prej saj prmes komands goto, ose komands break. Shembull Programi prmes s cilit n do rresht t matrics s dhn R(m,n) gjendet antari i par negativ, duke u nisur prej fillimit t tij.

// Programi p31 #include <iostream> #include <iomanip> using namespace std; int main()

Unazat 285
{ const int m=4,n=5; int i,j; char t[]="---------------------"; int R[m][n]={{3,-4,7,-2,9}, {5,8,16,11,14}, {-17,4,-1,6,2}, {6,8,3,1,-15}}; cout << "\n Indeksi Antari\n" << t << endl; i=0; do { j=0; do { if (R[i][j]<0) { cout << setw(5) << i << setw(13) << R[i][j] << endl; goto Dalje; } else j++; } while (j<n); Dalje: i++; } while (i<m); cout << t << "\n"; return 0; }

Prmes dy unazave t shfrytzuara n program, kalohet npr rreshtat e matrics s dhn. Gjat ksaj, duke e shfrytzuar pjesn e programit:
if (R[i][j]<0) { cout << setw(5) << i

286 Bazat e programimit n C++


<< setw(13) << R[i][j] << endl; goto Dalje; }

kontrollohen antart e matrics se a kan vlera negative. Antari i par negativ q gjendet, n fakt sht antari i par negativ n rreshtin aktual (rreshtin me indeks i), sepse, pasi t shtypet indeksi dhe vlera e gjetur e antarit t matrics, dilet nga unaza e brendshme duke e shfrytzuar komandn e kaprcimit pa kusht goto Dalje. Me t n fakt ndrpritet shqyrtimi i antarve t tjer t rreshtit aktual t matrics, dhe kalohet n rreshtin vijues t matrics sepse labela Dalja: sht vendosur para komands me t ciln rritet indeksi i rreshtave t matrics. Nse ekzekutohet programi i dhn, rezultati n ekran do t duket ashtu si shihet n Fig.5.56.

Fig.5.56 Rezultati i programit p31 Si shihet nga tabela e dhn, te rreshti me indeks i=1 nuk sht gjetur asnj antar negativ. Programi mund t plotsohet ashtu q, nse n ndonj rresht nuk gjendet asnj antar negativ, n kolonn me vlera t antarve t matrics t shtypet, p.sh., mesazhi Nuk ka. Pr kt qllim, n program duhet t shtohet komanda pr shtypje t mesazhit n fjal, menjher pas daljes nga unaza e brendshme, ashtu si shihet n vijim.
} while (j<n); cout << setw(5) << i << " Dalje: i++; }

Nuk ka\n";

N kt mnyr, kur shqyrtimi i antarve t rreshtave t veant t matrics prfundon pa e gjetur asnj antar negativ, nga unaza e brendshme do

Unazat 287 t dilet n rrug normale, pa e kaprcyer fundin e unazs prmes komands goto Dalje. Nse pas ndryshimit n fjal ekzekutohet programi i dhn, rezultati n ekran do t duket si n Fig.5.57.

Fig.5.57 Rezultati i versionit t modifikuar t programit p31 Pr dalje nga unaza, n vend t komands goto mund t shfrytzohet edhe komanda break. Kshtu, p.sh., te programi p31 i dhn m sipr do t dilet nga unaza e brendshme pas kushtit t prfshir n komandn if, nse n vend t komands goto Dalje vendoset komanda break. Gjat ksaj, labela Dalje: n pjesn vijuese t programit sht e panevojshme.

6
Funksionet
Definimi dhe thirrja e funksioneve 288 Vektort n nnprograme 315 Funksionet inline 344 Makro funksionet 350 Funksionet matematikore 353 Funksionet pr pun me stringje 359 Dukshmria e variablave 368 Rekursioni 373

288 Bazat e programimit n C++

Gjat shkruarjes s programeve t ndryshme prdoren biblioteka me funksione t gatshme, t prcaktuara nga prpiluesi i kompajlerit t gjuhs C++. Por, edhe vet shfrytzuesi mund t prcaktoj funksione t ndryshme dhe t'i shfrytzoj ato sipas nevojs. Nj grumbull i komandave t caktuara brenda programit mund t prsritet m shum her. Me qllim t thjeshtimit t shkruarjes s programit, grumbulli i till deklarohet si pjes e veant, e cila quhet nnprogram. Pastaj, nnprogrami thirret prmes emrit t tij, sa her q nevojitet. N gjuhn C++ shfrytzohen vetm tipe t nnprogrameve q njihen si funksione (ang. function). Prandaj, zakonisht, n kt gjuh, kur flitet pr nnprograme, mendohet n prcaktimin dhe n shfrytzimin e funksioneve t ndryshme. N fillim t librit sht prmendur funksioni main(), i cili paraqitet n do program. Gjithashtu, n pjest paraprake jan prdorur disa funksione matematikore t cilat gjenden n kuadr t modulit math.h. Kurse n fund t ktij kapitulli jepen shembuj t tjer t shfrytzimit t funksioneve matematikore nga moduli n fjal. Njkohsisht, shpjegohet prdorimi i disa funksioneve nga biblioteka prkatse pr pun me stringje.

Definimi dhe thirrja e funksioneve


Nnprogramet prmes s cilave definohen funksione t zakonshme shkruhen n kuadr t programit tek i cili shfrytzohen. Nnprogrami me titullin main(), ku thirren funksionet, njihet edhe si program kryesor. Gjat ekzekutimit t programit, n momentin kur kompjuteri e takon emrin e nj funksioni, ekzekutimi vazhdon me komandat e prfshira brenda nnprogramit. Kur prfundon ekzekutimi i komandave t nnprogramit, procedura e ekzekutimit vazhdon me komandat vijuese t programit, t cilat gjenden menjher pas emrit t funksionit. N form t prgjithshme, definimi i nj funksioni duket kshtu: tipi emri(t1 f1,t2 f2,...,tn fn) { x; return r; }

Funksionet 289 ku jan: tipi - tipi i rezultatit t funksionit. emri - emri i funksionit, i zgjedhur lirisht si identifikator. f1, f2, ..., fn - parametrat formal. t1,t2,...,tn - tipet e parametrave formal. x - komanda t ndryshme brenda trupit t funksionit. r - rezultati t cilin e jep funksioni. Njkohsisht, n fillim t programit kryesor, ku definohet dhe shfrytzohet funksioni, jepet prototipi i funksionit (ang. function prototipe), i cili prfundon me pikpresje (;). Forma e prgjithshme e prototipit t funksionit shkruhet si edhe titulli i tij, kshtu: tipi emri(t1 f1,t2 f2,...,tn fn); ose, edhe pa i shkruar parametrat formal brenda kllapave: tipi emri(t1,t2,...,tn); Por, meq varianti i par tek i cili, prve tipeve, shihen edhe parametrat, sht m komplet, n vijim do t shfrytzohet vetm ky variant. Prmes prototipit t funksionit, kompajleri njoftohet me emrin e funksionit q definohet, numrin, tipin dhe radhn e shkruarjes s parametrave formal brenda kllapave t tij. Pr ta shfrytzuar funksionin n llogaritje t ndyshme, ai thirret prmes emrit t tij. Gjat ksaj, parametrat formal: f1, f2, ..., fn zvendsohen me parametrat aktual prkats: a1, a2, ..., an kshtu: emri(a1,a2,...,an) Parametrat e shnuar brenda kllapave n titullin e funksionit gjat definimit t tij, quhen parametra formal, sepse prmes tyre tregohet forma e llogaritjeve q kryhen brenda funksionit. Kurse, parametrat me t cilt zvendsohen ato formal gjat thirrjes s nnprogramit, si u prmend edhe m sipr, quhen parametra aktual.

290 Bazat e programimit n C++

Parametrat formal dhe ato aktual duhet t prputhen mes vete pr nga: numri - sa ka parametra formal aq duhet t ket edhe parametra aktual; tipi - tipin e njjt duhet ta ken parametrat formal dhe parametrat aktual prkats; radha e shkruarjes - parametrit formal n pozit t caktuar i prgjigjet parametr aktual me pozit t njjt. Shembull Programi prmes s cilit llogaritet siprfaqja e katrkndshit me brinjt a dhe b, duke e shfrytzuar funksionin Dita.

a. Varianti pa nnprogram
// Programi funk1a #include <iostream> using namespace std; int main() { float a,b; double s; cout << "\nBrinja a: "; cin >> a; cout << "\nBrinja b: "; cin >> b; s=a*b; cout << "\nSiprfaqja s=" << s << "\n\n"; return 0; }

N programin e dhn, pasi prmes tastiers kompjuterit t'i jepen vlerat e brinjve t katrkndshit, me shprehjen e zakonshme llogaritet vlera e siprfaqes s katrkndshit. Pastaj, duke e shfrytzuar komandn pr shtypje, n ekran shtypet rezultati, i cili pr vlera hyrse t caktuara duket si n Fig.6.1.

Funksionet 291

Fig.6.1 Rezultati i programit funk1a b. Varianti me nnprogram


// Programi funk1b #include <iostream> using namespace std; double Dita(float x,float y); int main() { float a,b; double s; cout << "\nBrinja a: "; cin >> a; cout << "\nBrinja b: "; cin >> b; s=Dita(a,b); cout << "\nSiprfaqja s=" << s << "\n\n"; return 0; } // Nnprogrami Dita double Dita(float x,float y) { return x*y; }

Nse analizohet verzioni i dhn i programit, do t shihet se n fillim t programit, menjher pas komands: #include <iostream> sht vendosur prototipi i funksionit Dita: double Dita(float x,float y); i tipit double, me parametrat formal x dhe y, t cilt jan deklaruar t tipit float. Njkohsisht, n fund t programit, sht vendosur nnprogrami Dita:

292 Bazat e programimit n C++

// Nnprogrami Dita double Dita(float x,float y) { return x*y; }

Si shihet m sipr, nnprogrami fillon me titullin e funksionit:


double Dita(float x,float y)

i cili sht plotsisht i njjt me prototipin e vendosur n fillim t programit. Brenda trupit t nnprogramit gjendet vetm komanda:
return x*y;

prmes s cils gjat thirrjes s tij, n programin kryesor, prcillet vlera e llogaritur e prodhimit x*y. N programin kryesor, funksioni thirret prmes emrit Dita, kshtu: s=Dita(a,b); duke i zvendsuar parametrat formal x dhe y, me brinjt e katrkndshit a dhe b, t cilat paraqiten si parametra aktual. Gjat ekzekutimit t ktij versioni t programit, rezultati n ekran do t duket plotsisht njlloj si ai q u dha n Fig.6.1. Si u tha edhe m par, prototipi i funksionit n fillim t programit mund t deklarohet edhe duke i shnuar vetm tipet e parametrave formal, por jo edhe parametrat prkats. Kshtu, n shembullin e programit t dhn m sipr, prototipit i funksionit mund t deklarohet edhe n kt mnyr:
double Dita(float,float);

Gjat thirrjes s funksionit, parametrat aktual mund t jen vlera numerike, ose edhe shprehje. P.sh., te programi i msiprm, gjat llogaritjes s siprfaqes, mund t shkruajm: s=Dita(5,4); ku numri 5 i prgjigjet brinjs a, kurse numri 4 - brinjs b. Nnprogrami nga shembulli i msiprm mund t shkruhet edhe kshtu:

Funksionet 293

// Nnprogrami Dita double Dita(float x,float y) { double z; z=x*y; return z; }

ku, si shihet, siprfaqja sht prcaktuar duke e shfrytzuar variabln ndihmse z, e cila pastaj shkruhet n vazhdim t komands return. Ktu, meq brenda funksionit paraqitet variabla e re z, ajo sht deklaruar n fillim t tij si variabl e tipit double. Funksioni mund t definohet edhe n fillim t programit. Gjat definimit t funksionit, si parametra formal mund t merren edhe variabla t njjta me ato t cilat do t paraqiten si parametra aktual, kur ai thirret n program. Shembull Versioni i programit funk1b, tek i cili gjat definimit t funksionit Dita, parametrat formal pr brinjt e katrkndshit jan marr si a dhe b, dhe prputhen me parametrat aktual gjat thirrjes s tij.

// Programi funk1c #include <iostream> using namespace std; double Dita(float a,float b); int main() { float a,b; double s; cout << "\nBrinja a: "; cin >> a; cout << "\nBrinja b: "; cin >> b; s=Dita(a,b); cout << "\nSiprfaqja s=" << s << "\n\n"; } // Nnprogrami Dita

294 Bazat e programimit n C++


double Dita(float a,float b) { double z; z=a*b; return z; }

Ktu shihet se parametrat formal te nnprogrami jan variablat a dhe b. Gjat thirrjes s funksionit, pr ta llogaritur vlern e siprfaqes s, si parametra aktual gjithashtu paraqiten variablat a dhe b. Nse funksioni q definohet ka m shum deg, n nnprogramin prkats mund shfrytzohen disa komanda return. Shembull Programi funkA prmes s cilit llogaritet vlera e funksionit:

2 x + 1 y= 3 x 4

pr x a pr x > a

duke e shfrytzuar nnprogramin vleraY. Vlera e variabls a prcaktohet si konstante n fillim t programit, kurse vlera e variabls x kompjuterit i jepet prmes tastiers si vler hyrse. a. Versioni i nnprogramit me nj komand return
// Programi funkA #include <iostream> using namespace std; float vleraY(float x,float a); int main() { const float a=4.5; float x,y; cout << "\nVlera e variabls x: "; cin >> x; y=vleraY(x,a); cout << "\nVlera e llogaritur y=" << y << "\n\n"; } // Nnprogrami vleraY

Funksionet 295

float vleraY(float x,float a) { float y; if (x<=a) y=2*x+1; else y=3*x-4; return y; }

Ktu, gjat prcaktimit t funksionit n nnprogram edhe pse paraqiten dy deg, si zakonisht shfrytzohet vetm nj deg e komands return. Nse gjat prcaktimit t vlers s variabls a si konstante nuk deklarohet edhe tipi i saj float, prmes deklarimit:
const float a=4.5;

gjat shfrytzimit si parametr aktual te funksioni, kompjuteri na njofton pr mundsin e gabimit pr shkak t konvertimit n tipin float (ashtu si sht deklaruar parametri formal prkats n nnprogram). Rezultati i programit t dhn pr vlern e variabls hyrse x=3 do t duket si n Fig.6.2. Fig.6.2 Rezultati i programit funkA b. Versioni i nnprogramit me dy komanda return Programi i dhn m sipr mbetet i pandryshuar, kurse nnprogrami prmes s cilit prcaktohet llogaritja e vlers s funksionit y do t duket si n vijim.
// Nnprogrami vleraY float vleraY(float x,float a) { if (x<=a) return 2*x+1; else return 3*x-4; }

296 Bazat e programimit n C++ Si shihet nga nnprogrami i dhn, ktu pr do shprehje t funksionit y sht shfrytzuar nj komand e veant return. Kjo form e shkruarjes s nnprogramit mund t shfrytzohet n rastet kur n degt e veanta rezultati merret prmes shprehjeve ose variablave t ndryshme.

Llogaritje komplekse brenda funksionit


Brenda funksionit mund t paraqiten edhe llogaritje m komplekse. Por, n fund, variabla n t ciln prfshihet rezultati i t gjitha llogaritjeve prsri duhet t shnohet te komanda return. Shembull Programi prmes s cilit llogaritet prodhimi i numrave natyror mes m dhe n, duke e shfrytzuar nnprogramin prodhimi.

a. Pa nnprogram
// Programi funk2 #include <iostream> using namespace std; int main() { double p; int i,m,n; cout << "\nVlera e variabls m: "; cin >> m; cout << "\nVlera e variabls n: "; cin >> n; p=1; for (i=m;i<=n;i++) p=p*i; cout << "\nProdhimi p=" << p << "\n\n"; return 0; }

N program, gjat llogaritjes s prodhimit:

p = i
i=m

sht shfrytzuar unaza e zakonshme for. Nse ekzekutohet programi i dhn, pr vlerat hyrse m=3 dhe n=9, rezultati n ekran do t duket si n Fig.6.3.

Funksionet 297

Fig.6.3 Rezultati i programit funk2

N shembullin e vlerave hyrse, q shihen m sipr, prodhimi n fakt sht llogaritur kshtu:
p = 3 * 4 * 5 * 6 * 7 *8 * 9 = 181440

b. Me nnprogram
// Programi funk2 #include <iostream> double prodhimi(int m,int n); using namespace std; int main() { double p; int m,n; cout << "\nVlera e variabls m: "; cin >> m; cout << "\nVlera e variabls n: "; cin >> n; p=prodhimi(m,n); cout << "\nProdhimi p=" << p << "\n\n"; return 0; } // Nnprogrami prodhimi double prodhimi(int m,int n) { double p; int i; p=1; for (i=m;i<=n;i++) p=p*i; return p; }

298 Bazat e programimit n C++ Gjat definimit t llogaritjes s prodhimit, n nnprogram jan shfrytzuar parametrat formal m dhe n. Por, njkohsisht, brenda tij jan prdorur edhe variablat ndihmse p dhe i, tipet e t cilave deklarohen n fillim t tij. N fund, te komanda return sht shnuar variabla p, n t ciln ruhet rezultati i llogaritjes. Funksioni mund t thirret edhe direkt n komandn pr shtypje t rezultateve, p.sh., ashtu si sht dhn n vijim.
// Programi funk3 #include <iostream> double prodhimi(int m,int n); using namespace std; int main() { int m,n; cout << "\nVlera e variabls m: "; cin >> m; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nProdhimi p=" << prodhimi(m,n) << "\n\n"; return 0; }

N program m nuk sht shfrytzuar variabla e prodhimit p, sepse vlera prkatse llogaritet dhe shtypet brenda komands pr shtypje. Ktu, nnprogrami mbetet i pandryshuar nga ai q u dha m par. Nse ekzekutohet programi i dhn, pr vlerat hyrse m=3 dhe n=9, rezultati n ekran do t duket njlloj me at q u dha n Fig.6.3. Thirrja e nnprogramit mund t bhet edhe brenda unazave, ashtu q si parametra aktual t shfrytzohen edhe variablat e unazave. Shembull Programi prmes s cilit prpilohet tabela e faktorielve t numrave natyror mes vlerave 1 dhe k. Vlera e variabls k kompjuterit i jepet si vler hyrse prmes tastiers.

// Programi funk4 #include <iostream> #include <iomanip> double prodhimi(int m,int n); using namespace std; int main() { double F;

Funksionet 299
int k,x; char h[]="-------------------"; cout << "\nVlera e variabls k: "; cin >> k; cout << "\n x F\n" << h << "\n"; for (x=1;x<=k;x++) { F=prodhimi(1,x); cout << setw(5) << x << setw(10) << F << "\n"; } cout << h << endl; return 0; } // Nnprogrami prodhimi double prodhimi(int m,int n) { double p; int i; p=1; for (i=m;i<=n;i++) p=p*i; return p; }

Ktu, pr llogaritje t faktorielit pr do vler t variabls s unazs x, sht shfrytzuar funksioni prodhimi, i prcaktuar prmes nnprogramit. Meq duhet t llogaritet faktorieli pr do vler t variabls x, shprehja prkatse pr llogaritje:
F=prodhimi(1,x)

sht vendosur brenda unazs dhe si parametr i dyt brenda kllapave t funksionit sht shfrytzuar variabla e unazs x. Duke i pasur parasysh parametrat formal m dhe n te nnprogrami, si dhe parametrat aktual 1 dhe x brenda kllapave t funksionit, prmes shprehjes n fjal llogaritet vlera x!, kshtu:

F = i
i =1

300 Bazat e programimit n C++

Gjat ksaj, zvendsimi i parametrave formal m e n, q shfrytzohen te funksioni prodhimi, me parametrat aktual prkats 1 dhe x, skematikisht mund t paraqitet n kt mnyr:

p =

i=m

F =

i
i =1

Nse ekzekutohet programi i dhn pr vlern hyrse k=8, rezultati n ekran do t duket si n Fig.6.4.

Fig.6.4 Rezultati i programit funk4

Funksioni pa rezultat dals


Funksioni q definohet prmes nj nnprogrami mund t shfrytzohet pr llogaritje dhe shtypje t rezultateve, pa dhn asnj rezultat dals. N raste t tilla, komanda return shkruhet pa variabln prcjellse n fund t saj, kurse para emrit t funksionit shkruhet fjala void. Shembull Programi i cili e shfrytzon funksionin jeta pr shtypje n ekran t tekstit Koha e bukur.

// Programi funk5
#include <iostream> using namespace std;

void jeta(int m,int n);

Funksionet 301

int main() { jeta(1,10); return 0; } // Nnprogrami jeta void jeta(int m,int n) { int i; for (i=m;i<=n;i++) cout << "Koha e bukur\n"; return; } Ktu, meq nnprogrami nuk jep si rezultat asnj vler, para emrit t nnprogramit sht shkruar fjala void, si dhe n fund t komands return te nnprogrami nuk sht shnuar asgj. Brenda unazs s nnprogramit sht vendosur komanda pr shtypje t fjalis Koha e bukur. Vlerat e variabls s unazs i brenda nnprogramit lvizin mes vlers fillestare i=m dhe vlers prfundimtare i=n. Pasi q gjat shfrytzimit t funksionit jeta n programin kryesor parametrave formal m dhe n u jan shoqruar parametrat aktual 1 dhe 10, gjat ekzekutimit t programit n ekran fjalia do t shtypet 10 her, ashtu si shihet n Fig.6.5.

Fig.6.5 Rezultati i programit funk5 Rezultati n ekran do t duket plotsisht njlloj, nse gjat thirrjes s funksionit, p.sh., si parametra aktual merren vlerat m=11 dhe n=20, n kt mnyr:
jeta(11,20);

sepse edhe n kt rast ekzekutimi i trupit t unazs do t prsritet 10 her.

302 Bazat e programimit n C++

Funksioni pa parametra formal


Funksioni mund t mos ket parametra formal, nse rezultatet e tij jan fikse. T till, p.sh., mund t jen funksionet pr shtypje t mesazheve t caktuara. Shembull Programi i cili e shfrytzon funksionin libri pr shtypje t prsritur n ekran t tekstit Libri dhe lapsi.

// Programi funk6 #include <iostream> #include <iomanip> using namespace std; void libri(); int main() { libri(); return 0; } // Nnprogrami libri void libri() { int i; for (i=1;i<=10;i++) { cout << setw(40-2*i) << "Libri dhe lapsi\n"; } return; }

Nse ekzekutohet programi i dhn, rezultati do t duket si n Fig.6.6.

Fig.6.6 Rezultati i programit funk6

Funksionet 303 Ktu, brenda unazs s nnprogramit sht prcaktuar q t shtypet 10 her fjalia Libri dhe lapsi, sa sht numri i vlerave t ndryshme t variabls s unazs. Meq numri i rreshtave q shtypen sht fiks, brenda kllapave t funksionit nuk sht shnuar asnj parametr.

M shum thirrje t nj funksioni


N pjesn paraprake, te programi funk4, u shpjegua thirrja e prsritur e funksionit brenda nj unaze. Por, sipas nevojs, brenda programit mund t ket m shum thirrje t pavarura t funksionit. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

y = 3x + (n + 1)!+ (2n)!+

n! x

Faktorielt t cilt paraqiten n shprehje llogariten prmes nnprogramit fakt, me t cilin definohet llogaritja e vlers s funksionit F=m!. a. Pa nnprogram
// Programi funk7a #include <iostream> using namespace std; int main() { double a,b,c,x,y; int i,n; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n; a=1; for (i=1;i<=(n+1);i++) a=a*i; b=1; for (i=1;i<=(2*n);i++) b=b*i; c=1; for (i=1;i<=n;i++)

304 Bazat e programimit n C++


c=c*i; y=3*x+a+b+c/x; cout << "\nVlera e llogaritur y=" << y << "\n\n"; return 0; }

N program, pr llogaritje t vlerave t faktorielve, q paraqiten n shprehje, jan shfrytzuar tri unaza t veanta. Nse gjat ekzekutimit t programit prmes tastiers kompjuterit i jepen vlerat x=4 dhe n=3, rezultati n ekran do t duket si n Fig.6.7.

Fig.6.7 Rezultati i programit funk7a b. Me nnprogram


// Programi funk7b #include <iostream> double fakt(int m); using namespace std; int main() { double a,b,c,x,y; int n; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n; a=fakt(n+1); b=fakt(2*n); c=fakt(n); y=3*x+a+b+c/x; cout << "\nVlera e llogaritur y=" << y << "\n\n";

Funksionet 305
return 0; } // Nnprogrami fakt double fakt(int m) { double F; int i; F=1; for (i=1;i<=m;i++) F=F*i; return F; }

Ktu, pr llogaritje t vlerave t faktorielve sht shfrytzuar funksioni fakt. Gjat 3 thirrjeve t funksionit, pr t'i llogaritur vlerat a, b dhe c, parametri formal m, q shfrytzohet te funksioni, sht zvendsuar me 3 parametrat aktual:
n+1 2*n n

Nse ekzekutohet programi funk7b, rezultati n ekran do ta ket pamjen e dhn n Fig.6.7. Funksionet mund t thirren direkt n shprehjet e ndryshme matematikore, n t cilat nevojiten vlera q llogariten prmes tyre. Shembull Versioni i programit funk7b, pas eliminimit t variablave a, b dhe c si t panevojshme.

// Programi funk7c #include <iostream> double fakt(int m); using namespace std; int main() { double x,y; int n; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n;

306 Bazat e programimit n C++

y=3*x+fakt(n+1)+fakt(2*n)+fakt(n)/x; cout << "\nVlera e llogaritur y=" << y << "\n\n"; return 0; } // Nnprogrami fakt double fakt(int m) { double F; int i; F=1; for (i=1;i<=m;i++) F=F*i; return F; }

N praktik, zakonisht shfrytzohet kjo form e thirrjes s funksioneve, pa shtuar variabla ndihmse gjat llogaritjeve t ndryshme. Plotsisht njlloj thirren funksionet t cilat prmbajn m shum parametra formal. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

h = x 2 (2i + 3) + 4 (i 5)
i=2 i =1

n +1

duke shfrytzuar nj nnprogram pr llogaritjen e shums. a. Pa nnprogram


// Programi funk8a #include <iostream> using namespace std; int main() { float x; double s1,s2,h; int i,n; cout << "\nVlera e variabls x: ";

Funksionet 307
cin >> x; cout << "\nVlera e variabls n: "; cin >> n; s1=0; for (i=2;i<=(n+1);i++) s1=s1+(2*i+3); s2=0; for (i=1;i<=n;i++) s2=s2+(i-5); h=x-2*s1+4*s2; cout << "\nVlera e llogaritur h=" << h << "\n\n"; return 0; }

N program, pr llogaritje t do shume sht shfrytzuar nj unaz e veant. N fund, rezultatet e dy shumave s1 dhe s2 jan shfrytzuar n shprehjen pr llogaritjen e vlers s funksionit h. Nse ekzekutohet programi, pr vlera hyrse t caktuara, rezultati n ekran do t duket ashtu si sht dhn n Fig.6.8.

Fig.6.8 Rezultati i programit funk8a b. Me nnprogram


// Programi funk8b #include <iostream> double shuma(int m,int n,float a,float b); using namespace std; int main() { float x; double h; int n; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n;

308 Bazat e programimit n C++

h=x-2*shuma(2,n+1,2,3)+4*shuma(1,n,1,-5); cout << "\nVlera e llogaritur h=" << h << "\n\n"; return 0; } // Nnprogrami shuma double shuma(int m,int n,float a,float b) { float s; int i; s=0; for (i=m;i<=n;i++) s=s+(a*i+b); return s; }

N nnprogramin shuma, gjat definimit t funksionit pr llogaritjen e shums sht shfrytzuar shprehja:

s = ( a i + b)
i=m

Me qllim t krahasimit me kt shprehje t dy shumave q paraqiten te funksioni h, ato mund t shkruhen n format:

s1 = (2 i + 3) s 2 = (1 i + (5))
i =1 i =2 n

n +1

Pas ksaj, leht shihet se parametrat formal:


m n a b

gjat llogaritjes s shumave prmes funksionit shuma jan zvendsuar me parametrat aktual prkats:
2 n+1 2 3

dhe

Funksionet 309
1 n 1 -5

gj q shihet edhe gjat thirrjes s funskionit brenda shprehjes h:


shuma(2,n+1,2,3) shuma(1,n,1,-5)

Nse ekzekutohet programi i dhn, rezultati n ekran do t duket plotsisht njlloj me at q u dha n Fig.6.8. N nj program njkohsisht mund t ket m shum llogaritje t veanta. Gjat ksaj sht m racionale t tentohet q pr pjest q prsriten t prpilohet nnprogrami prkats. Shembull Programi prmes s cilit llogariten vlerat e funksioneve:

y = 3x + (n + 2)! z = 2 y (n + 1)!+
4! 3

duke e shfrytzuar nj nnprogram pr llogaritjen e faktorielve. Vlera e variabls x llogaritet si shum e numrave natyror mes 1 dhe n, kurse numri n kompjuterit i jepet prmes tastiers si vler hyrse.
// Programi funk9 #include <iostream> double fakt(int m); using namespace std; int main() { double x,y,z; int i,n; cout << "\nVlera e variabls n: "; cin >> n; x=0; for (i=1;i<=n;i++) x=x+i; y=3*x+fakt(n+2); z=2*y-fakt(n+1)+fakt(4)/3; cout << "\nVlera e llogaritur y="

310 Bazat e programimit n C++


<< << << << return 0; } // Nnprogrami fakt double fakt(int m) { double F; int i; F=1; for (i=1;i<=m;i++) F=F*i; return F; } y "\n\nVlera e llogaritur z=" z "\n\n";

N program, vlera e variabls x sht llogaritur pa nnprogram, duke e shfrytzuar shprehjen:

x = i
i =1

Kurse, prmes nnprogramit fakt sht definuar llogaritja e faktorielit F=m!, ku m sht marr si parametr formal. Pastaj, pr llogaritjen e vlerave t faktorielve, q paraqiten n t dy shprehjet, 3 her sht shfrytzuar funksioni fakt, duke e zvendsuar parametrin formal m me parametrat aktual prkats: n+2, n+1 dhe 4. Nse ekzekutohet programi i dhn, pr vlern hyrse n=5, rezultati n ekran do t duket si n Fig.6.9.

Fig.6.9 Rezultati i programit funk9

Funksionet 311

Disa nnprograme njkohsisht


N kuadr t nj programi njkohsisht mund t shfrytzohen disa nnprograme pr prcaktimin e funksioneve. Radha e vendosjes s nnprogrameve brenda programit nuk ka rndsi.

Shembull

Programi prmes s cilit llogariten vlerat e shprehjeve:

x + (2n + 1)! 3 n! n +1 h = x + 3 (4i ) 2 i =1 g=


Pr llogaritje t faktorielit dhe t shums jan shfrytzuar dy funksione t veanta. Vlerat e variablave x dhe n kompjuterit i jepen si vlera hyrse prmes tastiers.
// Programi funk10 #include <iostream> double fakt(int m); double shuma(int m,float x); using namespace std; int main() { double x,g,h; int n; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n; g=x/3+fakt(2*n+1); h=x+fakt(n)/2-3*shuma(n+1,4); cout << << << << << "\nVlera e llogaritur g=" g "\n\nVlera e llogaritur h=" h "\n\n";

312 Bazat e programimit n C++


return 0; } // Nnprogrami fakt double fakt(int m) { double F; int i; F=1; for (i=1;i<=m;i++) F=F*i; return F; } // Nnprogrami shuma double shuma(int m,float k) { double s; int i; s=0; for (i=1;i<=m;i++) s=s+(k*i); return s; }

Prmes dy nnprogrameve definohen llogaritjet e vlerave t funksioneve:

F = m! s = (k i)
i =1 m

Ktu, si edhe te shembujt paraprak, funksionet jan quajtur me emrat fakt dhe shuma, gj q paraqet nj zgjedhje t lir t emrave. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran pr vlerat hyrse x=5 dhe n=3 do t duket si n Fig.6.10.

Fig.6.10 Rezultati i programit funk10

Funksionet 313

Emrat e funksioneve mund t zgjedhen edhe t till q aspak t mos ndrlidhen me llogaritjet e prfshira brenda tyre.

Shembull

Programi prmes s cilit llogaritet vlera e funksionit:

z = 4x 3y + 1
ku x sht numri m i madh mes 3 numrave t dhn a, b dhe c, kurse y e paraqet mbetjen nga pjestimi i numrave t plot r dhe t. Vlerat e variablave x dhe y llogariten prmes nnprogrameve dita dhe nata.
// Programi funk11 #include <iostream> using namespace std; double dita(double a,double b,double c); int nata(int r,int t); int main() { double x,y,z; x=dita(57,83,17); cout << "\nVlera m e madhe x=" << x; y=nata(9,5); cout << "\n\nMbetja nga pjestimi y=" << y; z=4*x-3*y+1; cout << "\n\nVlera e funksionit z=" << z << "\n\n"; return 0; } // Nnprogrami dita double dita(double a,double b,double c) {

314 Bazat e programimit n C++


double x; if ((a>b) && (a>c)) x=a; else if (b>c) x=b; else x=c; return x; }

// Nnprogrami nata int nata(int r, int t) { int y; y=r%t; return y; }

Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.6.11.

Fig.6.11 Rezultati i programit funk11 Ktu, gjat thirrjes s funksionit dita, parametrat formal a, b dhe c jan zvendsuar me vlerat prkatse 57, 83 dhe 17. Kurse, te funksioni nata, n vend t parametrave formal r dhe t jan shfrytzuar vlerat 9 dhe 5. Shembull Versioni i programit funk11, tek i cili vlera e funksionit z llogaritet pa i veuar si funksione t veanta variablat x dhe y.

// Programi funk11a
#include <iostream> using namespace std;

double dita(double a,double b,double c);

Funksionet 315 int nata(int r,int t); int main() { double z; z=4*dita(57,83,17)-3*nata(9,5)+1; cout << "\nVlera e funksionit z=" << z << "\n\n"; return 0; } Ktu, pjesa e nnprogrameve, q shihen m sipr te programi funk11, mbetet e pandryshuar. Nse ekzekutohet programi i dhn, n ekran do t shtypet vetm rreshti i tret me rezultate, i cili shihet n Fig.6.11.

Vektort n nnprograme
Brenda nnprogrameve mund t operohet edhe me antar t vektorve, t cilt paraqiten si parametra formal.

Llogaritjet me vektor
Nse n nnprograme shfrytzohen vektort, n titull duhet t deklarohen si parametra formal, me kllapat e indekseve, pa e dhn edhe numrin e antarve t tyre. Shembull Programi prmes s cilit gjendet shuma e antarve t vektorit A(m), duke e shfrytzuar gjat llogaritjes nnprogramin prkats vektorSH.

// Programi funkV1 #include <iostream> #include <iomanip> using namespace std; int vektorSH(int X[],int n); int main() { const int m=5; int i,g; int A[m]={17,4,12,9,3}; char t[]="---------------------"; cout << "\n i A[i]\n"

316 Bazat e programimit n C++


<< t << endl; for (i=0;i<m;i++) cout << setw(5) << i << setw(10) << A[i] << endl; g=vektorSH(A,m); cout << << << << return 0; } t "\n Shuma: g "\n\n"; "

// Nnprogrami vektorSH int vektorSH(int X[],int n) { int i,s; s=0; for (i=0;i<n;i++) s=s+X[i];

return s; } Si shihet nga programi i dhn, prototipi i nnprogramit sht deklaruar menjher n fillim t programit prmes shprehjes: int vektor(int X[],int n); duke e deklaruar edhe vektorin si parametr formal. Gjat ksaj, vektori sht deklaruar pa e shnuar brenda kllapave t mesme numrin e antarve t tij. N programin kryesor, gjat thirrjes s nnprogramit prmes shprehjes: g=vektorSH(A,m); vektori A paraqitet si parametr aktual, n pozitn e parametrit t par (n t njjtn pozit ku sht edhe vektori X si parametr formal), por ktu pa kllapat e mesme t indeksit. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.6.12.

Funksionet 317

Fig.6.12 Rezultati i programit funkV1 Si shihet n programin kryesor dhe n nnprogram, gjat shfrytzimit t antarve t vektorit, indeksi ndryshon mes vlers 0 dhe n-1, prkatsisht brenda kllapave t unazave for vlera fillestare e indeksit sht marr i=0, dhe shkon deri te vlera kufitare i<n. Nnprogrami mund t shfrytzohet edhe pr gjetje t antarit t caktuar t vektorit. Shembull Programi prmes s cilit gjendet antari m i madh x n vektorin e dhn A(m), duke e shfrytzuar nnprogramin max.

// Programi funkV4 #include <iostream> #include <iomanip> using namespace std; int max(int A[],int m); int main() { const int m=7; char t[]="------------------"; int i,x,A[m]={5,8,-4,7,14,9,3}; cout << "\nAntart e vektorit\n" << " i A[i]\n" << t << endl; for (i=0;i<m;i++) cout << setw(5) << i << setw(7) << A[i] << endl; cout << t << endl; x=max(A,m); cout << "\nAntari m i madh x=" << x

318 Bazat e programimit n C++


<< "\n\n"; return 0; } // Nnprogrami max int max(int A[],int m) { int i,x; x=A[0]; for (i=1;i<m;i++) if (A[i]>x) x=A[i]; return x; }

Ktu, pasi te nnprogrami t gjendet antari m i madh x, pr t'u prcjell rezultati i fituar n programin kryesor, variabla x sht shnuar n vazhdim t komands return. Kurse gjat shfrytzimit t funksionit n programin kryesor te shprehja:
x=max(A,m);

rezultati sht ruajtur te variabla e njjt (x) si edhe n nnprogram, gj q nuk sht e domosdoshme. Nse ekzekutohet programi funkV4, n ekran do ta kemi pamjen e dhn n Fig.6.13.

Fig.6.13 Rezultati i programit funkV4 Nse gjat thirrjes s nnprogramit, n vend t parametrit aktual m shnohet numri 4, prkatsisht nse shfrytzohet shprehja:
x=max(A,4);

Funksionet 319 do t fitohet vlera x=8. Kjo sht rezultat i asaj se vlera e antarit m t madh n kt rast krkohet n mesin e 4 antarve t par t vektorit. Nnprogrami mund t shfrytzohet edhe gjat numrimit t antarve t caktuar t vektorit. Shembull Programi prmes s cilit numrohen antart pozitiv t vektorit R(m), t cilt jan m t vegjl se numri pozitiv z. Gjat numrimit shfrytzohet nnprogrami numriP.

// Programi funkV5 #include <iostream> #include <iomanip> using namespace std; int numriP(int R[],int m,float z); int main() { const int m=8; char t[]="------------------"; int i,g,R[m]={4,-6,9,3,15,7,5,8}; float z; cout << "Vlera z: "; cin >> z; cout << "\nAntart e vektorit\n\n" << " i R[i]\n" << t << endl; for (i=0;i<m;i++) cout << setw(5) << i << setw(7) << R[i] << endl; cout << t << endl; g=numriP(R,m,z); cout << "\nNumri i krkuar g=" << g << "\n\n"; return 0; }

320 Bazat e programimit n C++


// Nnprogrami numriP int numriP(int R[],int m,float z) { int i,g; g=0; for (i=0;i<m;i++) if (R[i]>0) if (R[i]<z) g=g+1; return g; }

Brenda unazs s nnprogramit, prmes komandave:


if (R[i]>0) if (R[i]<z) g=g+1;

sht prcaktuar q nse njkohsisht plotsohen dy kushtet e dhna (antari i vektorit sht numr pozitiv dhe m i vogl se numri z), numratori g rritet pr 1. Komandat n fjal mund t shkruhen edhe kshtu:
if ((R[i]>0) && (R[i]<z)) g=g+1;

Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepet vlera hyrse z=8, pas thirrjes s funksionit numriP prmes shprehjes:
g=numriP(R,m,z);

rezultati n ekran do t duket si n Fig.6.14.

Fig.6.14 Rezultati i programit funkV5

Funksionet 321

Rezultat i njjt do t fitohet edhe nse vlera hyrse z, e cila shfrytzohet si parametr aktual, shnohet direkt brenda kllapave t funksionit gjat thirrjes s tij, kshtu:
g=numriP(R,m,8);

Nnprogramet mund t shfrytzohen edhe pr radhitjen sipas madhsive t antarve t vektorve. Gjat ksaj, vlerat e antarve te vektori dals nga nnprogrami do t'i ndryshojn vendet e tyre. Shembull Programi prmes s cilit radhiten sipas madhsis antart e vektorit A(m), duke shkuar prej vlers m t madhe kah ajo m e vogla. Gjat radhitjes shfrytzohet nnprogrami radha.

// Programi funkV6 #include <iostream> #include <iomanip> using namespace std; void radha(int A[],int m); int main() { const int m=8; int i,A[m]={4,-6,9,3,15,7,5,8}; cout << "\nVektori i dhn\n\n" << "A={"; for (i=0;i<m;i++) cout << setw(4) << A[i]; cout << " }\n"; radha(A,m); cout << "\nVektori i sortuar\n\n" << "A={"; for (i=0;i<m;i++) cout << setw(4) << A[i]; cout << " }\n\n"; return 0; } // Nnprogrami radha

322 Bazat e programimit n C++

void radha(int A[],int m) { int i,j,x; for (i=0;i<m-1;i++) for (j=i+1;j<m;j++) if (A[i]<A[j]) { x=A[i]; A[i]=A[j]; A[j]=x; } return; }

N nnprogram, gjat ndrrimit t vendeve t antarve t vektorit sht shfrytzuar variabla ndihmse x, tek e cila ruhet prkohsisht njra nga vlerat q ndrrohen. Nse ekzekutohet programi i dhn, n ekran do t shihet vektori i dhn dhe vektori i sortuar, ashtu si shihet n Fig.6.15.

Fig.6.15 Rezultati i programit funkV6 Nnprogrami mund t shfrytzohet edhe pr shtypjen e antarve t vektorit. Shembull Programi prmes s cilit gjendet shuma e antarve pozitiv t vektorit A(m) dhe e katrorve t antarve negativ t tij, duke e shfrytzuar gjat llogaritjes nnprogramin prkats jeta.

// Programi funkV7 #include <iostream> #include <iomanip> using namespace std; int jeta(int A[],int n); int main() {

Funksionet 323
const int n=8; int s; int A[n]={2,-6,4,8,-3,7,-5,9}; char t[]="-------------------"; cout << "\nAntart e vektorit\n" << "\n i A[i]\n" << t << endl; s=jeta(A,n); cout << << << << return 0; } t "\n Shuma: s "\n\n"; "

// Nnprogrami jeta int jeta(int A[],int n) { int i,s; s=0; for (i=0;i<n;i++) if (A[i]<0) s=s+A[i]*A[i]; else s=s+A[i]; for (i=0;i<n;i++) cout << setw(5) << i << setw(10) << A[i] << endl; return s; }

Si shihet m sipr, brenda nnprogramit, pas llogaritjes s shums s krkuar, prmes unazs prkatse jan shtypur antart e vektorit, prkatsisht pjesa mes dy rreshtave me viza te tabela e dhn n Fig.6.16.

324 Bazat e programimit n C++

Fig.6.16 Rezultati i programit funkV7

Pjest e tjera t tabels, prfshir edhe rezultatin n fund t saj, jan shtypur n programin kryesor. Ktu, vlera e shums sht llogaritur prmes shprehjes:
s=2+(-6)2 +4+8+(-3)2 +7+(-5)2 +9=100

Prve antarve t vektorit, n nnprogram mund t shtypen edhe rezultatet q fitohen gjat llogaritjes, duke i shfrytzuar vlerat e antarve t tij. Shembull Versioni i programit funkV7 tek i cili n nnprogram shtypet edhe rezultati i llogaritjes.

// Programi funkV7a #include <iostream> #include <iomanip> using namespace std; void jeta(int A[],int n,char t[]); int main() { const int n=8; int A[n]={2,-6,4,8,-3,7,-5,9}; char t[]="-------------------"; cout << "\nAntart e vektorit\n" << "\n i A[i]\n" << t << endl; jeta(A,n,t); return 0;

Funksionet 325
} // Nnprogrami jeta void jeta(int A[],int n,char t[]) { int i,s; // ------------- llogaritja e shums --------s=0; for (i=0;i<n;i++) if (A[i]<0) s=s+A[i]*A[i]; else s=s+A[i]; // ------------- shtypja e vektorit ---------for (i=0;i<n;i++) cout << setw(5) << i << setw(10) << A[i] << endl; cout << t << "\n Shuma: " << s << "\n\n"; return; }

N kt version t programit shuma e llogaritur sht parapar t shtypet n nnprogram. N kt mnyr, gjat shfrytzimit t funksionit jeta, shuma s nuk duhet t prcillet n programin kryesor, prandaj edhe thirrja e nnprogramit bhet thjesht, duke e shnuar emrin e funksionit n program. Si rrjedhoj, para emrit t funksionit sht shnuar fjala void, kurse te komanda return e nnprogramit nuk figuron m variabla e shums s. Meq n nnprogram sht parapar t shtypet edhe rreshti i fundit me viza, si parametr i tret brenda kllapave t funksionit sht prfshir edhe variabla t, e cila n fakt paraqet nj vektor t tipit char. Nse ekzekutohet programi i dhn, rezultati n ekran do t duket plotsisht njlloj me at q shihet n Fig.6.16.

326 Bazat e programimit n C++

Llogaritje duke shfrytzuar disa vektor


Gjat llogaritjeve t ndryshme n nnprograme mund t shfrytzohen njkohsisht vlerat q merren nga disa vektor. Nnkuptohet se emrat e vektorve duhet t paraqiten si parametra brenda kllapave t funksioneve prkatse. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

z = 3x + 2 (3ai bi2 )
i =1

ku brenda shums paraqiten antart e vektorve A(n) dhe B(n). Gjat llogaritjes s shums shfrytzohet nnprogrami shumaV.

// Programi funkV8 #include <iostream> #include <iomanip> using namespace std; float shumaV(int A[],int B[],int n); int main() { const int n=7; float s,x,y; int A[n]={3,6,9,-2,-7,8,5}; int B[n]={2,7,-4,5,8,-1,3}; int i; char t[]="---------------------------"; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nAntart e vektorve\n" << "\n i A[i] B[i]\n" << t << endl; for (i=0;i<n;i++) cout << setw(5) << i << setw(10) << A[i] << setw(10) << B[i] << endl; s=shumaV(A,B,n);

Funksionet 327

cout << << << <<

t "\nVlera e shums s=" s "\n";

z=3*x+2*s; cout << "\nVlera e funksionit z=" << z << "\n\n"; return 0; } // Nnprogrami shumaV float shumaV(int A[],int B[],int n) { int i; float s; s=0; for (i=0;i<n;i++) s=s+(3*A[i]-B[i]*B[i]); return s; }

N programin e dhn, gjat llogaritjes s shums jan shfrytzuar antart e dy vektorve. Prandaj, n nnprogram, si parametra formal paraqiten vektort A dhe B. Njkohsisht, kur thirret funksioni pr ta llogaritur shumn, edhe si parametra aktual paraqiten vektort n fjal. N program dhe n nnprogram shuma sht deklaruar e tipit float, sepse vlera e saj mund t jet edhe numr m i madh pr vlera t tjera t antarve t vektorve. Nse ekzekutohet programi i dhn, rezultati n ekran do t duket si n Fig.6.17.

328 Bazat e programimit n C++

Fig.6.17 Rezultati i programit funkV8 Nse duam ta kontrollojm saktsin e rezultatit t fituar, vlerat duhet t llogariten edhe me dor. Por, q t humb sa m pak koh, pr testim mund t merren, p.sh., vetm 3 antart e par t vektorve. Pr kt qllim, programi duhet t ekzekutohet pasi paraprakisht t merren 3 vlera e parametrit n gjat thirrjes s funksionit, kshtu:
s=shumaV(A,B,3);

Plotsisht njlloj si gjat shfrytzimit t dy vektorve n nnprogram veprohet edhe kur kemi t bjm me m shum vektor njkohsisht.

Formimi i vektorit n nnprogram


Si rezultat i nj nnprogrami mund t merren edhe antart e vektorit. Gjat ksaj, shkruarja e vektorit si parametr formal dhe si parametr aktual do t duket ashtu si u dha m sipr. Por, ktu vektori do t paraqitet edhe n fund t komands return, me kllapat e mesme t indeksit prkats. Shembull Programi prmes s cilit formohet vektori A(m), duke i prcaktuar antart e tij prmes shprehjes:

ai = 3 + 4i

// Programi funkV2 #include <iostream> #include <iomanip> using namespace std; void formimi(int X[],int n); int main() { const int m=5; int i,A[m]; formimi(A,m); cout << "\nVektori i formuar\n\n" << "A={"; for (i=0;i<m;i++) cout << setw(4) << A[i];

Funksionet 329
cout << " }\n\n"; return 0; } // Nnprogrami formimi void formimi(int X[],int n) { int i; for (i=0;i<n;i++) X[i]=3+4*i; return; }

Pr formimin e vektorit A(m) ktu sht shfrytzuar nnprogrami formimi, ku te funksioni prkats si parametra formal paraqiten vektori X dhe numri i antarve t tij n. Gjat shfrytzimit t funksionit n programin kryesor sht shkruar komanda:
formimi(A,m);

Nse krahasohen parametrat q paraqiten brenda kllapave me ata q jan shnuar n titullin e nnprogramit, do t shihet se parametrat formal X dhe n jan zvendsuar me parametrat aktual A dhe m. Rezultati i cili shtypet n ekran pas ekzekutimit t programit t dhn do t duket si n Fig.6.18.

Fig.6.18 Rezultati i programit funkV2 Antart e vektorit q formohet mund edhe t llogariten me shprehje m t prbra. Shembull Programi prmes s cilit formohet vektori Z(n), duke i llogaritur antart e tij prmes shprehjes:

zi = 2 x + 4 (k + 3)
k =0

N program, pr formimin e vektorit Z sht shfrytzuar nnprogrami vektoriZ. Vlera e variabls x kompjuterit i jepet si vler hyrse prmes tastiers.

330 Bazat e programimit n C++

// Programi funkV3 #include <iostream> #include <iomanip> using namespace std; void vektoriZ(float Z[],int n,float x); int main() { const int n=5; int i; float x,Z[n]; cout << "\nVlera e variabls x: "; cin >> x; vektoriZ(Z,n,x); cout << "\nVektori i formuar\n\n" << "Z={"; for (i=0;i<n;i++) cout << setw(7) << Z[i]; cout << " }\n\n"; return 0; } // Nnprogrami vektoriZ void vektoriZ(float Z[],int n,float x) { int i,k; float s; for (i=0;i<n;i++) { s=0; for (k=0;k<=i;k++) s=s+(k+3); Z[i]=2*x+4*s; } return; }

Prmes nnprogramit vektorZ ktu sht prcaktuar formimi i vektorit Z, duke mos i dalluar parametrat formal dhe ata aktual, t cilt shfrytzohen gjat definimit dhe thirrjes s funksionit. Kjo shihet qart, nse krahasohet procedura e llogaritjes n nnprogram dhe komanda prmes s cils thirret funksioni:

Funksionet 331

vektoriZ(Z,n,x);

Nse ekzekutohet programi i dhn, rezultati i cili shtypet n ekran do t duket si n Fig.6.19.

Fig.6.19 Rezultati i programit funkV3 Pr t'i kontrolluar vlerat e fituara t antarve t vektorit Z, p.sh., le ta marrim llogaritjen e antarit t dyt:
Z[1]=2*5.8+4*{(0+3)+(1+3)}=39.6

Nse n nnprogramin e dhn m sipr shfrytzohen parametra formal edhe pr numrat q paraqiten n shprehjen e dhn, gjat shfrytzimit t tij, nse ata zvendsohen me parametra aktual t ndryshm, do t fitohen vektor me vlera t ndryshme t antarve t tyre. Shembull Versioni funkV3a i programit funkV3 tek i cili, gjat formimit t vektorit Z(n), pr llogaritjen e antarve t tij shfrytzohet shprehja e prgjithshme:

zi = ax + b (k + c)
k =0

Vetm vlera e variabls x kompjuterit i jepet si vler hyrse prmes tastiers.


// Programi funkV3a #include <iostream> #include <iomanip> using namespace std; void vektoriZ(float Z[],int n,float x,int a,int b,int c); int main() { const int n=5; int i; float x,Z[n];

332 Bazat e programimit n C++


cout << "\nVlera e variabls x: "; cin >> x; vektoriZ(Z,n,x,2,4,3); cout << "\nVektori i formuar\n\n" << "Z={"; for (i=0;i<n;i++) cout << setw(4) << Z[i]; cout << " }\n\n"; return 0; } // Nnprogrami vektoriZ void vektoriZ(float Z[],int n,float x,int a,int b,int c) { int i,k; float s; for (i=0;i<n;i++) { s=0; for (k=0;k<=i;k++) s=s+(k+c); Z[i]=a*x+b*s; } return; }

N nnprogram, brenda kllapave t funksionit, si parametra formal jan shnuar edhe variablat a, b dhe c. Njkohsisht, n programin kryesor, gjat shfrytzimit t funksionit vektoriZ, parametrat formal jan zvendsuar me vlerat 2, 4 dhe 3, t cilat jan marr si parametra aktual prkats. Kshtu, nse ekzekutohet ky version i programit, pr vlern hyrse 5.8 t variabls x, do t fitohet rezultati i dhn n Fig.6.19. Meq nnprogrami sht shkruar n nj form m t prgjithshme, ai mund t prdoret pr krijimin e vektorve me vlera t ndryshme t antarve. Kshtu, p.sh., nse funksioni thirret me parametrat aktual vijues:
vektoriZ(Z,n,x,5,2,1);

antart e vektorit do t llogariten prmes shprehjes:

zi = 5 x + 2 (k + 1)
k =0

Funksionet 333 sepse parametrat formal a, b dhe c jan zvendsuar me parametrat aktual 5, 2 dhe 1. Por, nse funksioni thirret kshtu:
vektoriZ(Z,n,x,3,x+1,2*x);

pr llogaritje t antarve t vektorit kompjuteri do ta shfrytzoj shprehjen:

zi = 3 x + ( x + 1) (k + 2 x)
k =0

sepse parametrat formal a, b dhe c jan zvendsuar me parametrat aktual:


3 x+1 2*x

Funksioni i dhn, n program mund t thirret edhe disa her. Por, pas do thirrje duhet t shtypen, ose t shfrytzohen pr llogaritje t ndryshme antart e vektorit, sepse me thirrjen vijuese t funksionit vlerat paraprake t antarve t tij mbulohen me vlerat e reja.

Shfrytzimi i disa vektorve


Gjat formimit t nj vektori t ri mund t shfrytzohen antart e disa vektorve, t cilt duhet t vendosen si parametra brenda kllapave t funksionit prkats. Shembull Programi prmes s cilit nga antart e vektorve X(m) dhe Y(m) formohet vektori Z(m), duke i llogaritur antart e tij prmes shprehjes:

3 xi + d zi = xi 2 yi

pr xi < yi pr xi yi

Pr formimin e vektorit t ri, n program shfrytzohet nnprogrami formimiZ. Vlera e variabls d kompjuterit i jepet si vler hyrse prmes tastiers.
// Programi funkV9 #include <iostream>

334 Bazat e programimit n C++


#include <iomanip> using namespace std; void formimiZ(int X[],int Y[],double Z[],float d,int m); int main() { const int m=8; int X[m]={6,3,-2,5,4,9,1,-7}; int Y[m]={-2,1,5,8,7,3,4,6}; int i; float d; double Z[m]; char t[]="---------------------------"; cout << "\nVlera e variabls d: "; cin >> d; cout << "\nAntart e vektorve\n" << "\n i X[i] Y[i]\n" << t << endl; for (i=0;i<m;i++) cout << setw(5) << i << setw(10) << X[i] << setw(10) << Y[i] << endl; cout << t << "\n\nVektori i formuar" << "\n\nZ={"; formimiZ(X,Y,Z,d,m); for (i=0;i<m;i++) cout << setw(5) << Z[i]; cout << " }\n\n"; return 0; } // Nnprogrami formimiZ void formimiZ(int X[],int Y[],double Z[],float d,int m) { int i; for (i=0;i<m;i++) if (X[i]<Y[i])

Funksionet 335
Z[i]=3*X[i]+d; else Z[i]=X[i]-2*Y[i]; return; }

Ktu, brenda kllapave t titullit t nnprogramit, prve dy vektorve antart e t cilve shfrytzohen gjat prcaktimit t vlerave t vektorit Z, figuron edhe vet vektori q formohet. Rezultati i cili fitohet pas ekzekutimit t programit t dhn do t duket si n Fig.6.20.

Fig.6.20 Rezultati i programit funkV9

336 Bazat e programimit n C++

Matricat n nnprograme
N nnprograme mund t shfrytzohen edhe matricat. Gjat deklarimit t prototipit t funksionit si dhe vet nnprogramit, n grupin e parametrave formal vendoset edhe emri i matrics. Por, ktu brenda kllaps s indeksit t dyt t matrics, me t cilin prcaktohet numri i kolonave t saj, duhet t shnohet konstantja prkatse. Pr kt qllim, paraprakisht numri i kolonave deklarohet si konstante simbolike (ang. symbolic constant) prmes komands paraprocesorike #define, ose prmes deklarimit t zakonshm const. Shembull Programi prmes s cilit gjendet shuma e antarve t matrics A(m,n).

// Programi funkM1 #include <iostream> #include <iomanip> using namespace std; #define n 3 double matrica(int X[][n],int m); int main() { const int m=4; int i,j; double r; char t[]="---------------"; int A[m][n]={{5,8,2}, {7,3,9}, {6,1,5}, {3,2,4}}; cout << "\n Matrica A\n" << t << "\n"; for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(4) << A[i][j] ; cout << endl; } cout << t << endl;

Funksionet 337

r=matrica(A,m); cout << "Shuma e antarve t matrics: " << r << "\n\n"; return 0; } // Nnprogrami matrica double matrica(int X[][n],int m) { int i,j; double s; s=0; for (i=0;i<m;i++) { for (j=0;j<n;j++) s=s+X[i][j]; } return s; }

Ktu, n fillim t programit, numri i kolonave t matrics n sht deklaruar si konstante prmes komands paraprocesorike #define. Kjo konstante pastaj sht shfrytzuar gjat deklarimit t prototipit t funksionit si dhe vet funksionit. Numri i rreshtave t matrics m sht marr si parametr formal i veant te prototipi i funksionit dhe gjat prcaktimit t parametrave t vet funksionit. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran do t duket si n Fig.6.21.

Fig.6.21 Rezultati i programit funkM1

Deklarimi i indeksit t dyt si konstante mund t bhet edhe prmes komands const, ashtu q rreshtat e par t programit do t duken kshtu:

338 Bazat e programimit n C++ // Programi funkm1


#include <iostream> using namespace std;

const n=3; double matrica(int X[][n],int m); int main() Prej ktu shihet se deklarimi n fjal sht vendosur para deklarimit t prototipit t funksionit dhe, meq sht vendosur edhe para programit kryesor, ky deklarim vlen edhe pr programin kryesor. Nnprogrami mund t shfrytzohet gjat formimit t matricave, ngjashm si edhe gjat formimit t vektorve. Shembull Programi prmes s cilit formohet matrica Z(m,n), duke i prcaktuar antart e saj prmes shprehjes:

2i + j zij = 0 i + 3 j

pr i < j pr i = j pr i > j

Pr formimin e matrics Z sht shfrytzuar nnprogrami matricaZ.

// Programi funkM2 #include <iostream> #include <iomanip> using namespace std; const n=4; void matricaZ(int A[][n],int m); int main() { const int m=5; int i,j; char t[]="-------------------"; int Z[m][n]; cout << "\n << t << "\n"; matricaZ(Z,m); Matrica e Z\n"

Funksionet 339
for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(4) << Z[i][j] ; cout << endl; } cout << t << "\n\n"; return 0; } // Nnprogrami matricaZ void matricaZ(int Z[][n],int m) { int i,j; for (i=0;i<m;i++) for (j=0;j<n;j++) if (i<j) Z[i][j]=2*i+j; else if (i==j) Z[i][j]=0; else Z[i][j]=i+3*j; return; }

Edhe ktu, gjat vendosjes s matrics si parametr formal, kompjuterit duhet t'i jepet numri i kolonave n, duke e deklaruar vlern e saj si konstante para programit kryesor. Nse ekzekutohet programi i dhn, matrica e formuar do t duket si n Fig.6.22.

Fig.6.22 Rezultati i programit funkM2 Nnprogrami mund t shfrytzohet edhe gjat numrimit t antarve t caktuar n matrics.

340 Bazat e programimit n C++

Shembull

Programi prmes s cilit gjendet numri i antarve pozitiv p t matrics s dhn Z(m,n), duke e shfrytzuar nnprogramin matricaP.

// Programi funkM3 #include <iostream> #include <iomanip> using namespace std; const n=5; int matricaP(int Z[][n],int m); int main() { const int m=4; int i,j,p; char t[]="----------------------"; int Z[m][n]={{5,8,-2,4,7}, {4,-3,8,-6,1}, {5,6,-1,-2,9}, {-2,3,5,-4,6}}; cout << "\n << t << "\n"; Matrica Z\n"

for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(4) << Z[i][j] ; cout << endl; } cout << t << endl; p=matricaP(Z,m); cout << "Numri i antarve pozitiv p=" << p << "\n\n"; return 0; } // Nnprogrami matricaP int matricaP(int Z[][n],int m)

Funksionet 341
{ int i,j,p; p=0; for (i=0;i<m;i++) for (j=0;j<n;j++) if (Z[i][j]>=0) p=p+1; return p; }

N nnprogram, brenda dy unazave, prmes s cilave gjenerohen indekset e antarve t matrics Z, sht vendosur komanda pr degzim if. Prmes ksaj komande, sa her q antari i matrics sht numr pozitiv, prmes shprehjes:
p=p+1;

numratori i numrave pozitiv rritet pr 1. Nse ekzekutohet programi i dhn, rezultati do t duket si n Fig.6.23.

Fig.6.23 Rezultati i programit funkM3

Nj funksion mund t thirret edhe disa her brenda programit kryesor. Shembull Programi funkM prmes s cilit gjendet shuma e antarve maksimal t rreshtave t veant t matrics s dhn A(m,n). Pr gjetje t antarit maksimal x n rreshtin e i-t t matrics shfrytzohet nnprogrami maxA.

a. Pa nnprogram
// Programi funkM #include <iostream> #include <iomanip> using namespace std;

342 Bazat e programimit n C++


int main() { const m=5,n=4; int A[m][n]={{5,2,14,8}, {7,9,1,-6}, {8,3,15,4}, {12,6,5,-1}, {6,4,-5,2}}; int i,j,x; char h[]="------------------------------"; cout << "\nAntart maksimal t rreshtave\n" << "\n M a t r i c a x\n" << h << endl; for (i=0;i<m;i++) { x=A[i][0]; for (j=0;j<n;j++) { if (x<A[i][j]) x=A[i][j]; cout << setw(5) << A[i][j]; } cout << << << } cout << << return 0; } setw(8) x endl; h endl;

N program, pr do rresht, i cili prcaktohet prmes variabls i t unazs s jashtme, gjendet antari maksimal x. Pr kt qllim, para unazs s brendshme me t ciln ndryshohet indeksi i dyt j pr antart e kolonave t veanta, prmes shprehjes:
x=A[i][0];

si vler fillestare e antarit maksimal n rreshtin aktual i zgjedhet antari i par n rresht. Pastaj, krahasohet vlera q ruhet te variabla x me antart e tjer t rreshtit n fjal, duke e ndryshuar indeksin e dyt j prmes unazs s brendshme. N procesin e krahasimit, sa her q gjendet ndonj antar i matrics me vler m t madhe se vlera q ruhet te variabla x, vlera e re ruhet te variabla

Funksionet 343 n fjal, duke e mbuluar vlern paraprake. Pr kt qllim shfrytzohen komandat:
if (x<A[i][j]) x=A[i][j];

N fund, pasi t krahasohet vlera q ruhet te variabla x me t gjitha vlerat e rreshtit aktual, te kjo variabl do ta kemi vlern maksimale x t rreshtit aktual. Njkohsisht, me procedurn e gjetjes s antarit maksimal, n unazn e brendshme sht parapar q t shtypen antart e rreshtit aktual. Pas daljes nga unaza e brendshme, n vazhdim t antarve t rreshtit aktual shtypet edhe vlera e variabls x, tek e cila ruhet vlera e antarit maksimal. Kshtu, rezulati n ekran do t duket si n Fig.6.24.

Fig.6.24 Rezultati i programit funkM b. Me nnprogram


// Programi funkM #include <iostream> #include <iomanip> const int n=4; int maxA(int A[][n],int i,int m); using namespace std; int main() { const m=5; int A[m][n]={{5,2,14,8}, {7,9,1,-6}, {8,3,15,4}, {12,6,5,-1}, {6,4,-5,2}}; int i,j,x; char h[]="------------------------------"; cout << "\nAntart maksimal t rreshtave\n" << "\n M a t r i c a x\n" << h << endl;

344 Bazat e programimit n C++


for (i=0;i<m;i++) { for (j=0;j<n;j++) cout << setw(5) << A[i][j]; x=maxA(A,i,m); cout << setw(8) << x << endl; } cout << h << "\n\n"; return 0; } // Nnprogrami maxA int maxA(int A[][n],int i,int m) { int j,x; x=A[i][0]; for (j=0;j<n;j++) if (x<A[i][j]) x=A[i][j]; return x; }

N nnprogramin e dhn sht prcaktuar procedura e gjetjes s antarit maksimal x, n rreshtin e i-t t matrics A(m,n). Pr kt qllim, n programin kryesor, funksioni maxA thirret pr do vler t variabls i t unazs s jashtme, duke e vendosur komandn:
x=maxA(A,i,m);

brenda ksaj unaze. Edhe n kt rast, rezultati n ekran do t duket plotsisht njlloj me at q u dha m sipr, kur nuk shfrytzohet nnprogrami.

Funksionet inline
N gjuhn C++ shfrytzohet edhe nj form tjetr e deklarimit t funksioneve prmes komands inline, e cila dallon pak nga forma e deklarimit t funksioneve e cila u prmend m sipr. Deklarimi i funksioneve t tilla bhet menjher n pjesn e par t programit, duke filluar me komandn inline. Dallimi mes funksioneve inline dhe atyre t zakonshme qndron n at se:

Funksionet 345

gjat thirrjes s funksioneve t zakonshme, procesi llogarits prcillet n nnprograme me t cilt ato prcaktohen, pr t'u kthyer n fund prsri n programin kryesor, sa her q thirren funksionet inline, kopjet e komandave t tyre vendosen n program, duke u b kshtu pjes prbrse e programit.

Prej ksaj q u tha m sipr shihet se gjat shfrytzimit t funksioneve inline programi rritet, sepse i shtohen kopjet e nnprogrameve q thirren, por fitohet n shpejtsin e ekzekutimit t tij. Nga ana tjetr, gjat thirrjes s funksioneve t zakonshme kompjuterit i duhet nj koh shtes pr kalim n nnprograme dhe kthim pas n programin kryesor. Praktikohet q si funksione inline t deklarohen funksionet q kan m pak komanda, ashtu q thirrja e tyre t mos ndikoj shum n madhsin e programit q ekzekutohet. Shembull Programi prmes s cilit llogaritet perimetri i katrkndshit me brinjt a dhe b, duke e shfrytzuar funksionin inline.

// Programi inline1 #include <iostream> using namespace std; // Nnprogrami perimetri inline float perimetri(float a,float b) { return 2*(a+b); } // Programi kryesor int main() { float a,b,p; cout << "\nBrinja a: "; cin >> a; cout << "\nBrinja b: "; cin >> b; p=perimetri(a,b); cout << "\nPerimetri sht p=" << p << "\n\n"; return 0;

346 Bazat e programimit n C++


}

Si shihet nga programi i dhn, funksioni inline sht deklaruar n fillim t programit, me form t njjt me funksionet e zakonshme. Thirrja e tij n programin kryesor prmes emrit perimetri nuk dallon aspak nga thirrja e funksioneve t zakonshme, gjat s cils parametrat formal a dhe b jan zvendsuar me parametrat aktual prkats, vlerat e t cilve kompjuterit i jepen prmes tastiers. Nse ekzekutohet programi i dhn, dhe prmes tastiers kompjuterit i jepen vlerat hyrse 5 dhr 4, rezultati do t duket si n Fig.6.25.

Fig.6.25 Rezultati i programit inline1 Ktu, vlera q llogaritet n nnprogram mund t prcaktohet prmes nj variable t veant dhe pastaj t shnohet n vazhdim t komands return, p.sh., kshtu:
// Nnprogrami perimetri inline float perimetri(float a,float b) { float p; p=2*(a+b); return p; }

N nj program njkohsisht mund t shfrytzohen disa nnprograme inline. Shembull Programi prmes s cilit llogaritet katrori dhe kubi i numrit a, duke shfrytzuar dy funksione inline.

// Programi inline2 #include <iostream> using namespace std; // Nnprogrami katrori inline float katrori(float a)

Funksionet 347
{ return a*a; } // Nnprogrami kubi inline float kubi(float a) { return a*a*a; } // Programi kryesor int main() { float a,f,g; cout << "\nNumri a: "; cin >> a; f=katrori(a); cout << "\nKatrori i numrit a: " << f << "\n"; g=kubi(a); cout << "\nKubi i numrit a: " << g << "\n\n"; return 0; }

N fillim t programit, pr llogaritjen e katrorit dhe t kubit jan definuar funksionet inline prkatse, katrori dhe kubi. Kurse, gjat thirrjes s tyre n programin kryesor, parametri formal a sht zvendsuar me numrin 4 si parametr aktual. Pas ksaj, rezultati n ekran do t duket si n Fig.6.26.

Fig.6.26 Rezultati i programit inline2

348 Bazat e programimit n C++ Nnprogramet inline mund t thirren edhe brenda unazave, ashtu q parametrave formal t'u ndahen vlera t ndryshme aktuale. Shembull Programi tek i cili dy funksionet inline t definuara n detyrn paraprake thirren brenda nj unaze, pr ta fituar tabeln e katrorve dhe t kubeve t numrave x mes vlerave a dhe b, duke e ndryshuar me hapin 1.

// Programi inline3 #include <iostream> #include <iomanip> using namespace std; // Nnprogrami katrori inline float katrori(float a) { return a*a; } // Nnprogrami kubi inline float kubi(float a) { return a*a*a; } // Programi kryesor int main() { float a,b,x,f,g; char t[]="-------------------------"; cout << "\nKufiri i poshtm a: "; cin >> a; cout << "\nKufiri i siprm b: "; cin >> b; cout << "\n\n x Katrori Kubi\n" << t << endl; x=a; while (x<=b) { f=katrori(x); g=kubi(x);

Funksionet 349
cout << << << << << << << x=x+1; setw(5) x setw(7) f setw(10) g endl;

} cout << t << "\n\n"; return 0; }

N program, nnprogramet katrori dhe kubi thirren brenda unazs n t ciln vlerat e variabls s unazs x ndryshohen me hapin 1 mes vlers fillestare a dhe asaj prfundimtare b. Rezultati n ekran do t duket si n Fig.6.27.

350 Bazat e programimit n C++ Fig.6.27 Rezultati i programit inline3

Prmes nnprogrameve inline mund t prcaktohen edhe funksione m t ndrlikuara. Shembull Programi prmes s cilit llogaritet vlera e funksionit:
n +1 x y = 2 x + 3 (2i 1)!+ i i =2

Vlerat e variablave x dhe n kompjuterit i jepen si vlera hyrse prmes tastiers, kurse pr llogaritjen e shums me faktorielin brenda saj shfrytzohet nnprogrami shumaF.
// Programi inline4 #include <iostream> using namespace std; // Nnprogrami shumaF inline float shumaF(int n,float x) { int i,k; float s,F,y; s=0; for (i=2;i<=(n+1);i++) { F=1; for (k=1;k<=(2*i-1);k++) F=F*k; s=s+(F+x/i); } y=2*x+3*s; return y; } // Programi kryesor int main() { int n;

Funksionet 351
float x,y; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nVlera e variabls x: "; cin >> x; y=shumaF(n,x); cout << "\nVlera e funksionit y=" << y << "\n\n"; return 0; }

Nse funksioni inline, i dhn m sipr, krahasohet me nnprogramet e zakonshme do t shihet se nuk ka asnj dallim, sado i ndrlikuar q t jet ai. Rezultati q fitohet pas ekzekutimit t programit t dhn, pr vlera hyrse t caktuara, do t duket si n Fig.6.28.

Fig.6.28 Rezultati i programit inline4

Makro funksionet
Duke e shfrytzuar komandn paraprocesorike #define, mund t definohen makro funksione, t cilat paraqesin nj form m t thjesht t funksioneve. Parametrat q shfrytzohen n makro funksione nuk shoqrohen edhe me deklaratn prkatse pr tipin e tyre, gj q sht nj e met e funksioneve t deklaruara n kt mnyr. Shembull Programi prmes s cilit tregohet llogaritja e katrorit dhe e kubit t numrit t plot a, duke shfrytzuar dy makro funksione.

// Programi makro1 #include <iostream> using namespace std; #define katrori(a) (a*a) #define kubi(a) (a*a*a)

352 Bazat e programimit n C++

// Programi kryesor int main() { float a,f,g; cout << "\nNumri a: "; cin >> a; f=katrori(a); cout << "\nKatrori i numrit a: " << f << "\n"; g=kubi(a); cout << "\nKubi i numrit a: " << g << "\n\n"; return 0; }

Pr prcaktimin e llogaritjes s katrorit dhe t kubit t numrit a, ktu jan shfrytzuar dy makro funksione, t vendosura n fillim t programit si komanda paraprocesorike:
#define katrori(a) (a*a) #define kubi(x) (a*a*a)

Gjat shfrytzimit t tyre n programin kryesor, funksionet n fjal thirren prmes emrave prkats, plotsisht njlloj si thirren edhe funksionet e zakonshme, duke i zvendsuar parametrat formal me ata aktual. Nse ekzekutohet programi i dhn, pr vlern e variabls a, e cila kompjuterit i jepet prmes tastiers, rezultati q shtypet n ekran do t duket si n Fig.6.29.

Fig.6.29 Rezultati i programit makro1

Funksionet 353 Prmes makro funksioneve mund t prcaktohen edhe funksione m komplekse, por definimi i tyre gjithsesi duhet t bhet me vetm nj shprehje. Shembull Programi prmes s cilit llogaritet vlera e funksionit:

4 x + 1 y= x 3

pr x 2 pr x > 2

duke e shfrytzuar makro funksionin llogaritjaY.


// Programi makro2 #include <iostream> using namespace std; #define llogaritjaY(x) ((x<=2) ? (4*x+1):(x-3)) // Programi kryesor int main() { float x,y; cout << "\nVlera hyrse x: "; cin >> x; y=llogaritjaY(x); cout << "\nVlera e llogaritur y: " << y << "\n\n"; return 0; }

N program, gjat prcaktimit t funksionit y sht shfrytzuar operatori ?: pr llogaritje t kushtzuar. Si sht shpjeguar edhe n kapitullin e dyt, gjat shfrytzimit t operatorit n fjal, nse plotsohet kushti x<=2, vlera e funksionit llogaritet me shprehjen e par 4*x+1, prndryshe pr llogaritjen e tij prdoret shprehja e dyt x-3. Nse programi i dhn ekzekutohet pr nj vler hyrse t caktuar, rezultati do t duket si n Fig.6.30.

Fig.6.30 Rezultati i programit makro2

354 Bazat e programimit n C++

Funksionet matematikore
N kuadr t gjuhs C++, ekzistojn module me shum funksione t gatshme, t cilt mund t thirren prmes emrave prkats. Gjat shfrytzimit t funksioneve t tilla, prototipet e tyre duhet t deklarohen n program prmes komandave paraprocesorike #include. Ktu, fillimisht, do t prmendet moduli math.h, n t cilin prfshihen funksione t ndryshme matematikore, ashtu si shihet n tabeln e dhn n Fig.6.31. N matematik N gjuhn C++

sin(x) cos(x) tg(x) arcsin(x) arccos(x) arctang(x) ln(x) log(x) xy ex


x

x sh(x) ch(x) th(x)

sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) log(x) log10(x) pow(x,y) exp(x) sqrt(x) abs(x), fabs(x) sinh(x) cosh(x) tanh(x)

Fig.6.31 Tabela e funksioneve matematikore Parametrat x dhe y t shnuar brenda kllapave t funksioneve jan vlera t tipit double, prve n rastin e funksionit abs(x) prmes s cilit gjendet vlera absolute e variabls x t tipit int. Gjat shfrytzimit t funksioneve trigonometrike vlera e variabls x duhet t jepet n radian. Shembull Programi prmes s cilit llogaritet vlera numerike e funksionit:

Funksionet 355

y = 3 sin( x + 1) + 4e x 2 log( x + 2)
ku x sht antari m i madh pr nga vlera absolute n vektorin e dhn A(m).
// Programi mat1 #include <iostream> #include <iomanip> #include <math.h> using namespace std; int main() { const int m=7; double y; int i,x; int A[m]={4,-7,3,-9,5,-3,6}; cout << "\nVektori i dhn\n\n" << "A={"; for (i=0;i<m;i++) cout << setw(4) << A[i]; cout << " }\n\n"; // Gjetja e vlers m t madhe absolute x=abs(A[0]); for (i=1;i<m;i++) if (abs(A[i])>x) x=abs(A[i]); cout << "\nVlera m e madhe absolute x=" << x << "\n\n"; y=3*sin(x+1)+4*exp(x)-2*log(x+2); cout << "\nVlera e funksionit y=" << y << "\n\n"; return 0; }

N program, menjher n fillim sht vendosur komanda paraprocesorike #include <math.h>, pr ta njoftuar kompjuterin se do t shfrytzohen

356 Bazat e programimit n C++ funksione nga moduli matematikor math.h. Nse ekzekutohet programi i dhn, rezultati q shtypet n ekran duket si n Fig.6.32.

Fig.6.32 Rezultati i programit mat1

Thirrja e funksioneve brenda nnprogrameve


Brenda nnprogramit q shfrytzohet pr definimin e nj funksioni t ri nuk mund t definohen funksione t tjera. Por, gjat definimit t funksioneve mund t thirren funksione t gatshme, t marra nga module t ndryshme me funksione, ose edhe t definuara brenda programit. Shembull Programi prmes s cilit llogaritet vlera numerike e shprehjes:
n +1 x z = + 2 {k + 4 cos(3x 1)} 3 k =1

Pr llogaritjen e shums shfrytzohet nnprogrami shumaF, kurse vlerat e variablave x dhe n kompjuterit i jepen si vlera hyrse prmes tastiers.

// Programi f1 #include <iostream> #include <math.h> double shumaF(int n,float x); using namespace std; int main() { float x; double z; int n; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: ";

Funksionet 357
cin >> n; z=x/3+2*shumaF(n,x); cout << "\nVlera e llogaritur z=" << z << "\n\n"; return 0; } // Nnprogrami shuma double shumaF(int n,float x) { double s; int k; s=0; for (k=1;k<=n+1;k++) s=s+(k+4*cos(3*x-1)); return s; }

N nnprogram, pr llogaritjen e vlers cos(3x-1) sht shfrytzuar funksioni trigonometrik prkats, i cili merret prej modulit me funksione t ndryshme math.h. Pas ekzekutimit t programit t dhn, pr vlera hyrse t caktuara, rezultati do t duket si n Fig.6.33.

Fig.6.33 Rezultati i programit f1 Brenda nj nnprogrami mund t thirren edhe funksione t cilat definohen prmes nnprogrameve n kuadr t programit. Shembull Programi nga shembulli paraprak, i cili sht modifikuar ashtu q pr llogaritje dhe pr shtypje t vlers s variabls z shfrytzohet nnprogrami llogaritjaZ.

// Programi f2 #include <iostream> #include <math.h>

358 Bazat e programimit n C++


double shumaF(int n,float x); void llogaritjaZ(int n,float x); using namespace std; int main() { float x; int n; cout << "\nVlera e variabls x: "; cin >> x; cout << "\nVlera e variabls n: "; cin >> n; llogaritjaZ(n,x); return 0; } // Nnprogrami shumaF double shumaF(int n,float x) { double s; int k; s=0; for (k=1;k<=n;k++) s=s+(k+4*cos(3*x)); return s; } // Nnprogrami llogaritjaZ void llogaritjaZ(int n,float x) { double z; z=x/3+2*shumaF(n,x); cout << "\nVlera e llogaritur z=" << z << "\n\n"; return; }

Nnprogrami i par shumaF ka mbetur i pandryshuar si edhe n shembullin paraprak t programit f1. Por, ktu programit i sht shtuar edhe nnprogrami i dyt llogaritjaZ, tek i cili llogaritet dhe shtypet vlera e variabls z. Gjat llogaritjes s shums, brenda nnprogramit t dyt sht

Funksionet 359 shfrytzuar funksioni shumaF, i cili prcaktohet prmes nnprogramit t par. Meq rezultati sht parapar t shtypet brenda nnprogramit t dyt, prej tij nuk merret asnj vler dalse. Prandaj, para emrit t funksionit llogaritjaZ n titullin prkats sht shnuar fjala void. N programin kryesor sht thirrur vetm funksioni llogaritjaZ, me parametrat aktual n dhe x brenda kllapave t tij, kurse funksioni shumaF sht thirrur brenda tij. Nse ekzekutohet programi i dhn, pr vlerat hyrse, q jan marr n shembullin paraprak, rezultati do t duket si n Fig.6.33. Si sht dhn edhe m par, sipas nevojs, nnprogramet mund t thirren brenda nj programi edhe disa her. Kshtu, p.sh., nse te programi f2, nnprogrami llogaritjaZ thirret 3 her pr parametra aktual t ndryshm:
llogaritjaZ(n,x); llogaritjaZ(5,x+2); llogaritjaZ(2*n,x+0.5);

pr vlerat hyrse 2 dhe 7 rezultati do t duket si n Fig.6.34.

Fig.6.34 Rezultati i versionit t programit f1 tek i cili thirret 3 her nnprogrami llogaritjaZ

Gjat 3 thirrjeve n fjal, parametrat formal:


n x

zvendsohen me parametrat aktual:


n 5 2*n x x+2 x+0.5

360 Bazat e programimit n C++

Funksionet pr pun me stringje


Nga grumbulli i funksioneve pr pun me stringje, t cilat prfshihen n modulin string, prmes shembujve ktu do t tregohet prdorimi i vetm disa prej tyre. N fillim t do programi vijues sht vendosur komanda paraprocesorike #include <string>, pr ta njoftuar kompjuterin se do t shfrytzohen funksione t modulit n fjal.

Gjatsia e stringut
Pr prcaktimin e gjatsis t stringut shfrytzohet funksioni strlen(x), ku x sht variabla prmes s cils ruhet stringu n memorien e kompjuterit. Shembull Programi prmes s cilit prcaktohet gjatsia e tekstit t lexuar n variabln A, pr t ciln n memorien e kompjuterit jan rezervuar 20 simbole.

// Programi string1 #include <iostream> #include <string> using namespace std; int main() { const m=20; char A[m]; int b; cout << "\nShkruaj nj fjali: "; cin.getline(A,m); cout << "\nFjalia q u lexua: " << A << "\n"; b=strlen(A); cout << "\nGjatsia e fjalis s lexuar: " << b << "\n\n"; return 0; }

N program, pr leximin e fjalis sht shfrytzuar komanda:

Funksionet 361
cin.getline(A,m);

prdorimi i s cils sht shpjeguar n kapitullin e tret. Nse ekzekutohet programi i dhn m sipr, pasi prmes tastiers t shkruhet fjalia Koha e bukur, rezultati do t duket si n Fig.6.35.

Fig.6.35 Rezultati i programit string1

Kopjimi i stringut
Komplet stringu mund t kopjohet n nj string tjetr duke e shfrytzuar funksionin strcpy. Por, ekziston mundsia e kopjimit t vetm nj pjese t stringut prmes funksionit strncpy.

Kopjimi i komplet stringut


Stringu x mund t kopjohet n stringun y, duke e shfrytzuar funksionin strcpy(y,x). Shembull Programi prmes s cilit tregohet kopjimi te variabla B, i fjalis s lexuar, e cila ruhet te variabla A.

// Programi string2 #include <iostream> #include <string> using namespace std; int main() { const m=20; char A[m],B[m]; cout << "\nShkruaj nj fjali: "; cin.getline(A,m); cout << "\nFjalia q u lexua: " << A << "\n";

362 Bazat e programimit n C++

strcpy(B,A); cout << "\nTeksti i kopjuar: " << B << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepet teksti Libri dhe lapsi, rezultati n ekran do t duket si n Fig.6.36.

Fig.6.36 Rezultati i programit string2

Teksti q ruhet n nj variabl mund t kopjohet n variabln tjetr, pa e shfrytzuar komandn strcpy, njlloj si kopjohen vlerat e nj vektori n vektorin tjetr. Shembull Programi prmes s cilit tregohet kopjimi n rrug t zakonshme te variabla B, i fjalis t lexuar, e cila ruhet te variabla A.

// Programi string3 #include <iostream> #include <string> using namespace std; int main() { const m=20; char A[m],B[m]; int i,n; cout << "\nShkruaj nj fjali: "; cin.getline(A,m); cout << "\nFjalia q u lexua: " << A << "\n"; n=strlen(A);

Funksionet 363

for (i=0;i<n;i++) B[i]=A[i]; B[n]='\0'; cout << "\nTeksti i kopjuar: "; for (i=0;i<n;i++) cout << B[i]; cout << "\n\n"; return 0; }

N program, pasi lexohet fjalia te variabla A, prmes komands:


n=strlen(A);

gjendet gjatsia e saj. Pastaj, duke e shfrytzuar pjesn e programit:


for (i=0;i<n;i++) B[i]=A[i];

simbolet e veanta t vektorit A prcillen tek antart prkats t vektorit B. N fund, q stringu t kompletohet, prmes komands:
B[n]='\0';

atij i shtohet edhe karakteri zero, me t cilin prcaktohet plotsisht gjatsia e tekstit t kopjuar. Nse ekzekutohet programi string3 dhe prmes tastiers shkruhet fjalia Lapsi dhe libri, rezultati do t jet i njjt me at q u dha n Fig.6.36.

Kopjimi i nj pjese t stringut


Prmes funksionit strncpy(y,x,n), te stringu y mund t kopjohen vetm n-simbolet e para t stringut x. Shembull Programi prmes s cilit tregohet kopjimi te variabla B, i nsimboleve t para t fjalis s lexuar, e cila ruhet te variabla A.

// Programi string4 #include <iostream> #include <string> using namespace std;

364 Bazat e programimit n C++


int main() { const m=20; int n; char A[m],B[m]; cout << "\nShkruaj nj fjali: "; cin.getline(A,m); cout << "\nFjalia q u lexua: " << A << "\n"; cout << "\nNumri i simboleve q kopjohen: "; cin >> n; strncpy(B,A,n); B[n]='\0'; cout << "\nTeksti i kopjuar: " << B << "\n\n"; return 0; }

Ktu, pas kopjimit t n-simboleve t para t fjalis, duke e shfrytzuar funksionin:


strncpy(B,A,n);

prmes komands:
B[n]='\0';

n fund t pjess s kopjuar t fjalis vendoset karakteri zero. Nse ekzekutohet programi i dhn dhe prmes tastiers, si string hyrs, kompjuterit i jepet fjalia Libri dhe lapsi, kurse pr numrin n t simboleve q kopjohen n tastier shkruhet numri 7, rezultati do t duket si n Fig.6.37.

Fig.6.37 Rezultati i programit string4

Funksionet 365

Nj pjes e caktuar e stringut mund t kopjohet edhe n rrug t zakonshme, ngjashm me at q u shpjegua m sipr. Shembull Programi prmes s cilit tregohet kopjimi n rrug t zakonshme te variabla B, i n-simboleve t para t fjalis s lexuar, e cila ruhet te variabla A.

// Programi string5 #include <iostream> #include <string> using namespace std; int main() { const m=20; int i,n; char A[m],B[m]; cout << "\nShkruaj nj fjali: "; cin.getline(A,m); cout << "\nFjalia q u lexua: " << A << "\n"; cout << "\nNumri i simboleve q kopjohen: "; cin >> n; for (i=0;i<n;i++) B[i]=A[i]; B[n]='\0'; cout << "\nTeksti i kopjuar: "; for (i=0;i<n;i++) cout << B[i]; cout << "\n\n"; return 0; }

Programi i dhn sht i ngjashm me programin string3, i cili u dha m sipr. Por, ktu numrin n t simboleve q kopjohen kompjuterit ia japim si vler hyrse prmes tastiers.

366 Bazat e programimit n C++ Nse ezekutohet programi string5, pr t dhnat hyrse, t cilat kompjuterit iu dhan gjat ekzekutimit t programit string4, rezultati n ekran do t duket plotsisht njlloj me at q shihet n Fig.6.36.

Bashkimi i dy stringjeve
Stringut x mund t'i shtohet stringu y, duke e shfrytzuar funksionin strcat(x,y). Shembull Programi prmes s cilit tregohet shtimi i stringut B n vazhdim t stringut A.

// Programi string6 #include <iostream> #include <string> using namespace std; int main() { const m=10,n=25; char A[m+n],B[n]; cout << "\nTeksti i par A: "; cin.getline(A,m); cout << "\nTeksti i dyt B: "; cin.getline(B,n); strcat(A,B); cout << "\nTeksti i bashkuar: " << A << "\n\n"; return 0; }

Nse ekzekutohet programi i dhn dhe prmes tastiers kompjuterit i jepen dy tekste, rezultati do t duket si n Fig.6.38.

Fig.6.38 Rezultati i programit string6

Funksionet 367 Si n shembujt paraprak, edhe ktu mund t shfrytzohet rruga e zakonshme e shtimit t nj stringu n vazhdim t stringut tjetr, pa e shfrytzuar funksionin strcat. Shembull Programi prmes s cilit tregohet shtimi n rrug t zakonshme i stringut B n vazhdim t stringut A, pa e shfrytzuar funksionin strcat.

// Programi string7 #include <iostream> #include <string> using namespace std; int main() { const m=10,n=25; char A[m+n],B[n]; int a,b,i; cout << "\nTeksti i par A: "; cin.getline(A,m); cout << "\nTeksti i dyt B: "; cin.getline(B,n); a=strlen(A); b=strlen(B); for (i=a;i<=(a+b);i++) A[i]=B[i-a]; cout << "\nTeksti i bashkuar: " << A << "\n\n"; return 0; }

Ktu, gjat shtimit t antarve t stringut B n vazhdim t stringut A, karakteri zero n fund t stringut t ri sht shtuar duke e marr karakterin prkats i cili gjendet n fund t stringut B.

Shtimi i pjess s stringut


Pr shtimin e n-simboleve t stringut y n vazhdim t stringut x, shfrytzohet funksioni strncat(x,y,n). Shembull Programi prmes s cilit tregohet shtimi i k-simboleve t

368 Bazat e programimit n C++ stringut B n vazhdim t stringut A.


// Programi string8 #include <iostream> #include <string> using namespace std; int main() { const m=10,n=25; char A[m+n],B[n]; int k; cout << "\nTeksti i par A: "; cin.getline(A,m); cout << "\nTeksti i dyt B: "; cin.getline(B,n); cout << "\nNumri i simboleve q shtohen: "; cin >> k; strncat(A,B,k); cout << "\nTeksti i bashkuar: " << A << "\n\n"; return 0; }

Nse, pas ekzekutimit t programit t dhn, kompjuterit prmes tastiers i jepen dy tekstet e shfrytzuara n shembujt paraprak, dhe numri i simboleve q shtohen merret 7, rezultati do t duket si n Fig.6.39.

Fig.6.39 Rezultati i programit string8

Funksionet 369

Nga figura e dhn shihet se prej tekstit t dyt, n vazhdim t tekstit t par jan shtuar 7 simbolet e para, prkatsisht jan shtuar simbolet: , fleto

Dukshmria e variablave
Varsisht nga ajo se n ciln pjes t programit deklarohen variablat, ato mund t jen variabla lokale dhe variabla globale.

Variablat lokale
Variablat t cilat prcaktohen brenda nj funksioni, prfshir edhe programin kryesor si funksion, paraqesin variabla lokale. Kto variabla mund t shfrytzohen vetm brenda funksionit ku jan definuar, prkatsisht vetm brenda hapsirs e cila prcaktohet me kllapat e mdha n fillim dhe n fund t tij. Shembull Programi prmes s cilit gjendet mbetja nga pjestimi i dy numrave t plot.

// Programi lokale #include <iostream> using namespace std; int mbetja(int x,int y); int main() { int a,b,m; cout << "\nVlera e variabls a: "; cin >> a; cout << "\nVlera e variabls b: "; cin >> b; m=mbetja(a,b); cout << "\nMbetja nga pjestimi m=" << m << "\n\n"; return 0; } // Nnprogrami mbetja int mbetja(int x,int y) {

370 Bazat e programimit n C++


int z; z=x%y; return z; }

N programin e dhn ka dy grupe variablash lokale. Variablat x, y dhe z jan variabla t cilat duken vetm brenda dy kllapave t nnprogramit mbetja, kurse variablat a, b dhe m duken vetm brenda programit kryesor. N pjesn e dukshmris s variablave, ato mund t shfrytzohen pr llogaritje, ose vlerat e tyre edhe mund t shtypen. Kshtu, nse ekzekutohet programi i dhn, pr vlerat hyrse a=10 dhe b=4, rezultati do t duket si n Fig.6.40.

Fig.6.40 Rezultati i programit lokale Si shihet nga figura e dhn, meq pjestimi i numrit 11 me 4 e jep si rezultat numrin 2, mbetja e pjestimit n fjal sht m=3. N pjest e tjera t programit, jasht funksioneve prkatse, variablat lokale nuk mund t shfrytzohen. Kshtu, p.sh., nse n programin kryesor t dhn m sipr duam ta shfrytzojm variabln x, kompjuteri do t na njoftoi se variabla x sht identifikator i padeklaruar.

Variablat globale
Variabla t cilat deklarohen para funksionit main(), ose jasht kllapave t funksioneve, paraqesin variabla globale. Variablat globale shihen nga t gjitha nnprogramet, prfshir edhe programin kryesor, pavarsisht nga ajo se a shfrytzohen ose jo prej tyre. Shembull Programi globale1, q sht i ngjashm me programin lokale, por tek i cili variablat a dhe b jan deklaruar para funksionit main().

// Programi globale1 #include <iostream> using namespace std; int mbetja(int x,int y);

Funksionet 371
int a,b; int main() { int m; cout << "\nVlera e variabls a: "; cin >> a; cout << "\nVlera e variabls b: "; cin >> b; m=mbetja(a,b); cout << "\nMbetja nga pjestimi m=" << m << "\n\n"; return 0; } // Nnprogrami mbetja int mbetja(int x,int y) { int z; z=x%y; return z; }

Si shihet nga programi i dhn, variablat a dhe b jan deklaruar para programit kryesor dhe paraqesin variabla globale. Prandaj, ato pa asnj problem shfrytzohen brenda programit kryesor. Nse ekzekutohet programi i dhn, pr vlerat hyrse a=11 dhe b=4, rezultati n ekran prsri do t duket si ai q u dha n Fig.6.40. Ktu, variablat a dhe b pa problem mund t shfrytzohen edhe brenda nnprogramit mbetja. Kshtu, p.sh., nse urdhrohet shtypja e vlerave t ktyre dy variablave brenda nnprogramit, prkatsisht nse shfrytzohet versioni i modifikuar i nnprogramit n fjal:
// Nnprogrami mbetja int mbetja(int x,int y) { int z; cout << "\nVlerat e variablave n nnprogram:\n" << "\n a=" << a << " b=" << b << "\n"; z=x%y; return z; }

372 Bazat e programimit n C++

rezultati do t duket si n Fig.6.41.

Fig.6.41 Rezultati i programit globale1 pas modifikimit t nnprogramit mbetja Variablat globale mund t shfrytzohen edhe gjat puns me vektor, me matrica dhe me fusha shumdimensionale. Shembull Programi prmes s cilit formohet vektori B nga antart pozitiv t vektorit t dhn A(m). N program, pr formimin e vektorit shfrytzohet nnprogrami pozitivB.

// Programi globale2 #include <iostream> #include <iomanip> using namespace std; void pozitivB(int X[],int Y[],int n); int k; int main() { const int n=10; int i,A[n]={7,-5,4,-8,2,9,16,-5,13,15},B[n]; cout << "\nVektori i dhn\n\n" << "A=["; for (i=0;i<n;i++) cout << setw(4) << A[i]; cout << " ]\n"; pozitivB(A,B,n); cout << "\nVektori i formuar\n\n" << "B=["; for (i=0;i<=k;i++) cout << setw(4) << B[i]; cout << " ]\n\n";

Funksionet 373
return 0; } // Nnprogrami pozitivB void pozitivB(int X[],int Y[],int n) { int i; k=-1; for (i=0;i<n;i++) if (X[i]>=0) { k=k+1; Y[k]=X[i]; } return; }

Ktu, variabla k sht deklaruar si variabl globale, sepse komanda pr deklarimin e tipit t saj:
int k;

sht vendosur jasht kllapave t funksionit main dhe funksionit pozitivB. Por, pas ksaj, variabla k shfrytzohet lirisht n t gjitha pjest e programit, prkatsisht n programin kryesor dhe n nnprogram. Nse ekzekutohet programi globale2, rezultati n ekran do t duket si n Fig.6.42.

Fig.6.42 Rezultati i programit globale2 Si shihet nga rezultati, brenda vektorit B(k) jan prfshir vetm antart pozitiv t vektorit A(n).

Rekursioni
Procesi i thirrjes s nj funksioni nga vetvetja, njihet si thirrje rekursive, ose thjesht rekursion. N gjuhn programuese C++ nj thirrje e till sht e lejueshme.

374 Bazat e programimit n C++ Shembull Programi pr llogaritjen e vlers s faktorielit:

F = n!
N program, llogaritja e faktorielit sht prcaktuar prmes nj nnprogrami, brenda t cilit shfrytzohet rekursioni.
// Programi rekursion1 #include <iostream> double fakt(int n); using namespace std; int main() { double F; int n; cout << "\nVlera e variabls n: "; cin >> n; F=fakt(n); cout << "\nFaktorieli F=" << F << "\n\n"; return 0; } // Nnprogrami fakt double fakt(int n) { double F; if(n<=1) F=1; else F=n*fakt(n-1); return F; }

N nnprogram, pr prcaktimin e llogaritjes s faktorielit shfrytzohet funksioni rekursiv prkats:

1 n!= n (n 1)!

pr n 1 pr n >1

Gjat llogaritjes s faktorielit, pasi kompjuteri n ann e djatht t shprehjes pr llogaritjen e vlers F t faktorielit e has funksionin fakt(n-1),

Funksionet 375 fillon me thirrjet rekursive, duke e zvogluar parametrin n pr 1 gjat do thirrje vijuese. Nse, p.sh., parametri n n thirrjen fillestare merret 5, zinxhiri i thirrjeve rekursive t funksionit fakt do t duket si n vijim. Fillimisht, kompjuteri tenton q ta llogaris vlern:
5*fakt(4)

Por, meq mungon vlera fakt(4), n tentimin vijues mundohet q at ta llogaris prmes shprehjes:
4*fakt(3)

N kt mnyr, vazhdon zinxhiri i tentimeve pr llogaritje:


3*fakt(2) 2*fakt(1)

gjersa nuk e gjen vlern 1 pr fakt(1), kur edhe prfundon zinxhiri i tentimeve. Pamja komplete e ktij zinxhiri duket kshtu:
5*fakt(4) 4*fakt(3) 3*fakt(2) 2*fakt(1) 1

Pasi t arrihet n fund t zinxhirit, duke shkuar prej fundit kah fillimi, kompjuteri i llogarit vlerat e antarve t zinxhirit n fjal:
1 2*1 3*2*1 4*3*2*1 5*4*3*2*1

Nse ekzekutohet programi rekursioni1, rezultati do t duket si n Fig.6.43.

Fig.6.43 Rezultati i programit rekursion1

376 Bazat e programimit n C++ Procedura e llogaritjes, e cila zbatohet gjat shfrytzimit t funksionit fakt, n program mund t qartsohet, nse n brendin e nnprogramit vendoset komanda pr shtypje t vlerave t variablave prkatse. Shembull Versioni i programit rekursion1, tek i cili brenda nnprogramit sht urdhruar shtypja e vlerave t variablave n dhe F.

// Programi rekursion1a #include <iostream> #include <iomanip> double fakt(int n); using namespace std; int main() { double F; int n; char t[]="------------------"; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nVlerat brenda funksionit\n" << "\n n F\n" << t << endl; F=fakt(n); cout << << << << return 0; } t "\nFaktorieli F=" F "\n\n";

// Nnprogrami fakt double fakt(int n) { double F; if(n<=1) F=1; else F=n*fakt(n-1); cout << setw(5) << n << setw(11) << F

Funksionet 377
<< endl; return F; }

Nse ekzekutohet programi i dhn, rezultati do t duket si n Fig.6.44.

Fig.6.44 Rezultati i programit rekursion1a Nga tabela e shtypur shihet qart se si kompjuteri e llogarit vlern e faktorielit, duke u nisur me faktorielin pr vlern n=1. Shembull Programi pr llogaritjen e shums s numrave natyror mes 0 dhe n, duke e shfrytzuar nnprogramin shumaN, tek i cili shfrytzohet thirrja rekursive e tij. Vlera e variabls n kompjuterit i jepet si vler hyrse prmes tastiers.

// Programi rekursion2 #include <iostream> double shumaN(int n); using namespace std; int main() { double s; int n; cout << "\nVlera e variabls n: "; cin >> n; s=shumaN(n); cout << "\nShuma s=" << s << "\n\n"; return 0; } // Nnprogrami shumaN

378 Bazat e programimit n C++

double shumaN(int n) { double s; if (n<=0) s=0; else s=n+shumaN(n-1); return s; }

N nnprogram, llogaritja e shums sht prcaktuar duke e shfrytzuar funksionin rekursiv prkats:

0 n 1 s= n + i i =0

pr n 0 pr n > 0

Nse ekzekutohet programi i dhn, pr vlern hyrse n=5, rezultati do t duket si n Fig.6.45.

Fig.6.45 Rezultati i programit rekursion2 Ktu, zinxhiri i tentimeve t veanta pr llogaritjen e shums sht:
5+shumaN(4) 4+shumaN(3) 3+shumaN(2) 2+shumaN(1) 1+shumaN(0) 0

Pastaj, duke shkuar prej fundit, kompjuteri e llogarit vlern e shums n baz t zinxhirit:
0 1+0 2+1+0

Funksionet 379
3+2+1+0 4+3+2+1+0 5+4+3+2+1+0

Pr ta ndjekur procedurn t ciln e zbaton kompjuteri gjat llogaritjes s shums, n brendin e nnprogramit mund t vendoset komanda pr shtypje t vlerave t variablave prkatse. Shembull Versioni i programit rekursion2, tek i cili brenda nnprogramit sht urdhruar shtypja e vlerave t variablave n dhe s.

// Programi rekursion2a #include <iostream> #include <iomanip> double shumaN(int n); using namespace std; int main() { double s; int n; char t[]="----------------"; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nVlerat brenda funksionit\n" << "\n n s\n" << t << endl; s=shumaN(n); cout << << << << return 0; } t "\n Shuma s=" s "\n\n";

// Nnprogrami shumaN double shumaN(int n) { double s; if (n<=0) s=0; else s=n+shumaN(n-1);

380 Bazat e programimit n C++


cout << setw(5) << n << setw(8) << s << endl; return s; }

Nse ekzekutohet ky version i programit, rezultati do t duket si n Fig.6.46.

Fig.6.46 Rezultati i programit rekursion2a Me nj ndryshim t vogl te nnprogrami shumaN q u dha m sipr, funksioni prkats mund t shfrytzohet pr llogaritjen e shums s numrave natyror tek ose ift. Shembull Programi rekursion2b, prmes s cilit llogaritet shuma e numrave natyror tek ose ift mes vlerave 0 dhe n, varsisht nga vlera hyrse pr variabln n, e cila kompjuterit i jepet prmes tastiers.

// Programi rekursion2b #include <iostream> #include <iomanip> double shumaK(int n); using namespace std;

Funksionet 381
int main() { double s; int n; char t[]="----------------"; cout << "\nVlera e variabls n: "; cin >> n; cout << "\nVlerat brenda funksionit\n" << "\n n s\n" << t << endl; s=shumaK(n); cout << << << << return 0; } t "\n Shuma s=" s "\n\n";

// Nnprogrami shumaK double shumaK(int n) { double s; if (n<=0) s=0; else s=n+shumaK(n-2); cout << setw(5) << n << setw(8) << s << endl; return s; }

N kt version t programit, llogaritja e shums n nnprogramin shumaK sht prcaktuar me funksionin rekursiv:

0 s = n2 n + i i =0

pr n 0 pr n > 0

382 Bazat e programimit n C++ Nse ky funksion krahasohet me funksionin q u shfrytzua te nnprogrami shumaN, i cili u dha m par, vrehet vetm nj dallim i vogl te kufiri i siprm n simbolin e shums, ku n vend t vlers n-1 paraqitet kufiri n-2. Ktu, brenda nnprogramit shumaK sht parapar q t shtypen shumat parciale n procesin e llogaritjes rekursive t saj. Rezultati q fitohet pas ekzekutimit t programit rekursion2b, pr vlern hyrse n=10, sht dhn n Fig.6.47.

Fig.6.47 Rezultati i programit rekursion2b, n rastin kur vlera e variabls n sht numr ift

Ktu, meq vlera hyrse pr variabln n sht numr ift, prmes nnprogramit shumaK llogaritet shuma e numrave natyror ift. Por, p.sh., nse prmes tastiers kompjuterit i jepet numri tek 9, me nnprogramin n fjal llogaritet shuma e numrave natyror tek. Rezultati n kt rast do t duket si n Fig.6.48, ku n zinxhirin e llogaritjes rekursive, gjat shkuarjes prej fundit kah fillimi, te vlera fillestare 0 e shums arrihet pr vler negative t variabls n.

Funksionet 383

Fig.6.48 Rezultati i programit rekursion2b, n rastin kur vlera e variabls n sht numr tek

Llogaritja rekursive mund t shfrytzohet edhe gjat shum llogaritjeve t ndryshme. Shembull Programi rekursion3, prmes s cilit llogaritet shuma e antarve t vektorit A(n).

// Programi rekursion3 #include <iostream> #include <iomanip> double shumaV(int A[],int n); using namespace std; int main() { const int n=8; double s; int A[n]={5,-1,3,8,4,2,9,6}; char t[]="----------------"; cout << << << << "\nLlogaritja rekursive e shums\n" "\n n s\n" t endl;

s=shumaV(A,n); cout << << << << return 0; } t "\nShuma e antarve t vektorit s=" s "\n\n";

// Nnprogrami shumaV double shumaV(int A[],int n) { double s;

384 Bazat e programimit n C++

if (n<=0) s=0; else s=A[n-1]+shumaV(A,n-1); cout << setw(5) << n << setw(8) << s << endl; return s; }

Rezultati i programit rekursion3 n ekran do t duket ashtu si sht dhn n Fig.6.49.

Fig.6.49 Rezultati i programit rekursion3

Procedura q shfrytzohet gjat llogaritjes rekursive t shums edhe ktu sht e ngjashme me at q u shpjegua m sipr. Kjo shihet edhe nga vlerat parciale t shumave t cilat jan shtypur, meq komanda pr shtypje t tyre sht vendosur brenda nnprogramit.

Literatura
1. Chris H. Pappas, William H. Murray The Complete Reference, Visual C++.Net McGraw-Hill/Osborne, New York 2002 2. Ulka Kirch-Prinz, Peter Prinz Programming in C++, A Complete Guide Jones and Bartlett Publishers, Sudbury, USA 2002 3. Julian Templeman, Andy Olsen Microsoft Visual C++.NET, Step by Step Microsoft Corporation, Redmond, Washington 2002 4. Victor Shtern Core C++, A Software Engineering Approach Prentice Hall PTR, New Jersey 2000 5. Robert Lafore Object-Oriented Programming in C++ SAMS, Indianopolis, Indiana 1999 6. Bjarne Stroustrup C++ Programming Language Addison-Wesley Publishing Company, Massachusetts 1997 7. H.M. Deitel, P. J. Deitel How to Program C Prentice Hall, Englewood Cliffs, New Jersey 1994 8. Jesse Libery Teach Yourself C++ in 21 Days Sams Publishing, Indianapolis, Indiana

386 Bazat e Programimit n C++ 9. S. B. Lippman, J. Lajoie C++ Primer Addison-Wesley Publishing Company, Massachusetts 10. Kris Jamsa, Lars Klander C/C++ Programmer's Bible Gulf Publishing Company, Houston, Texas 11. Rob McGregor Practical C++ QUE, Indianapolis, Indiana 1999 12. H.M. Deitel, P. J. Deitel How to Program C++ Prentice Hall, Upper Saddle River, New Jersey 2003 13. H.M. Deitel, P. J. Deitel How to Program C Prentice Hall, Upper Saddle River, New Jersey 2004 14. Jim Keogh, John Shapley Gray C++ Programer's Notebook Prentice Hall PTR, Upper Saddle River, New Jersey 2002 15. Agni H. Dika Algoritmet, njohuri themelore, me programe n C++ Fakulteti Elektroteknik, Prishtin 2002, 2004 16. James P. Cohoon, Jack W. Davidson C++ Program Design Irwin/McGraw-Hill, USA 1997 17. Agni Dika Bazat e programimit n C++ Fakulteti i Inxhinieris Elektrike dhe Kompjuterike, Prishtin 2004 18. D. S. Malik C++ Programming: From Problem Analysis to Program Design Course Technology, Massachusetts 2002 19. Frank L. Friedman, Elliot B. Koffman Problem Solving, Abstarction, and Design Using C++ Pearson Addison Wesley, USA 2004

Literatura 387 20. Stanley B. Lippman, Jose Lajoie, Barbara E. Moo C++ Primer, Fourth Edition Addison-Wesley, USA 2005 21. Herbert Schildt C++ from the Ground Up McGraw-Hill/Osborne, Berkeley, California 2003

Shtesa A
Fjalt t cilat shfrytzohen nga gjuha C++ nuk mund t prdoren si variabla ose emra funksionesh. Lista e ktyre fjalve nuk sht fikse sepse te kompajler t ndryshm kjo list mund t ndryshoj. N tabeln vijuese sht dhn nj list e fjalve t rezervuara nga gjuha C++, e cila llogaritet si standarde. asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while

Ktu, fjalt e shnuara n fushat e nxiera jan fjal t rezervuara n gjuhn C++, por jo edhe n gjuhn C. Kurse fjalt n fushat tjera, njkohsisht jan t rezervuara n gjuht C dhe C++.

390 Bazat e programimit n C++

Shtesa B
N gjuhn C++ gjat shtypjes s rezultateve shfrytzohen kombinime t ndryshme t simboleve, ose si quhen ndryshe - sekuenca dalse. Disa nga kto sekuenca jan dhn n tabeln vijuese. Sekuenca '\0' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\"' '\'' '\\' Karakteri zero i ziles pr kthim pas pr tabelim horizontal pr rresht t ri pr tabelim vertikal pr lvizje t letrs pr kthim n fillim t rreshtit pr thonjz t dyfisht pr thonjz t njfisht pr vij t pjerrt mbrapsht Vlera decimale 0 7 8 9 10 11 12 13 34 39 92

Te sekuencat dalse, n vend t thonjzs s njfisht ( ' ), plotsisht njlloj mund t shfrytzohet edhe thonjza e dyfisht ( " ).

Universiteti i Europs Juglindore


Fakulteti i Shkencave dhe i Teknologjive t Komunikimit

Agni Dika Bazat e Programimit n C++

Lektor Dr. Ilaz Metaj

Kopertina AfiDesign

Shtypi Arbria Design Tetov

Katalogimi n publikim - CIP Biblioteka Popullore dhe Universitare "Sv. Kliment Ohridski", Shkup
CIP - Katalogizimi n publikim Biblioteka popullore dhe universitare "Sv. Kliment Ohridski:, Shkup 004.432 DIKA, Agni Bazat e programimit n C++/Agni Dika 400 faqe, 24cm ISBN 9989-866-23-6 a) C++ (gjuh programuese) COBISS.MK-ID 62677770

You might also like