You are on page 1of 142

Avni Rexhepi

Prishtin, 2010
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
2

Hyrje n programim

- N kompjuter, t dhnat ruhen dhe prpunohen si vargje t shifrave binare: 1 dhe 0, t
koduara n nj kod binar (ang. binary code).

- Programet dhe Programimi
Programi paraqet nj list t urdhrave (instruksioneve, komandave) t cilat i tregojn
kompjuterit q t kryej veprime t ndryshme.

- Gjuht Programuese:
- Gjuht e ulta programuse (kodi i makins) 0, 1
- Asembleri mnemonic (ADD, SUB, MOV...)
- Gjuht e larta programuese
- Fortran, Basic, Pascal, C++, etj.

- Idea --> prshkrimi --> programi --> testimi --> prdorimi

Interpretert dhe kompajlert.

Interpreteri interpreton me radh urdhrat e programit, sa her q ekzekutohet
programi.
Kompajler (ang. compiler) verifikon tr programin (sintaksn e gjuhs) dhe e
prkthen kodin burimor n kod objektiv.
Program burimor (ang. source program, source code) - fajll burimor (ang. source file).
Program objektiv (ang. object program, object code) - fajll objektiv (ang. objekt file).
Linker --> i lidh pjeset (fajllat) e programit dhe krijon programin ekzekutiv (ang.
executable program, exe file) - fajll ekzekutiv (ang. exe file).

Termat themelore q i hasim:

Identifikatort
Variablat
Deklarimi
Inicializimi
Konstantet
Literalet
Operatort
Komentet
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
3
Hyrje n C++

Dikush ka thn: "Mnyra m e mir pr ta msuar programimin sht programimi,
pra prmes shembujve dhe provave t ndryshme.

ISO C++ Standard
Gjuha programuese C++ dhe Libraria Standarde e C++ jan prshkruar n ISO Standardin e publikuar n vitin 1998:
ISO/IEC 14882:1998(E)
Standardi sht nj dokument i madh, i cili prshkruan gjuhn dhe librarit deri n detaje (gj q pr shum knd
sht e mrzitshme dhe shumica e njerzve nuk kan nevoj pr t) . Megjithat, ata q synojn t msojn
standardin, s paku duhet t ken nj libr reference, si p.sh. libri i Bjarne Stroustrup The C++ Programming
Language (B. Stroustrup njihet si krijues i gjuhs C++).

C++ sht gjuh e kompajluar. Kompajleri sht nj program i cili e lexon kodin burimor, t
shkruar nga programeri dhe nga ai e krijon nj fajll ekzekutiv ose binar n formatin n t cilin
mund t lexohet dhe t ekzekutohet nga kompjuteri. Fajlli burimor sht nj fajll q prmban
kodin e shkruar n C++. Fajlli ekzekutiv prbhet prej kodit t makins, vargut t 1-sheve dhe
0-ve t cilat nuk jan t parapara q t jen t prdorshme prej shftrytzuesit, por jan t
kuptueshme vetm nga kompjutert.
Le t fillojm pra me nj shembull t thjesht:

#include <iostream>
using namespace std;
int main()
{
cout << "Programimi ne C++ ";
return 0;
}

# - simboli pr direktivat preprocesorike (urdhresa, para fillimit t procesimit t programit)
# include (prfshij, prmbaj) C++ i ka librarit e urdhrave dhe fajllat e hederit (header
files angl. head koka, kreu), t cilat i prfshin n programe, prmes direktivs #include.

Header fajlat Fajlat e kreut
ISO C++ Standardi ka prcaktuar mnyrn e prfshirjes s fajllave t kreut (Header Files) n programe.
Sipas standardit, prdoret mnyra:<iostream> dhe <vector> n vend t forms s vjetr: <iostream.h>
ose <vector.h>
Gjithashtu: <cstdio> dhe <cstdlib> n vend t atyre: <stdio.h> dhe <stdlib.h>
Npr literatur mund t gjenden t dy format, por preferohet q t prdoren metodat e reja, sepse me
koh, kompajlert e rinj n treg nuk do ti prkrahin m fajlat e vjetr.
Si pjes e kompajlimit, kompajleri i C++-it e ekzekuton nj program t quajtur preprocesor i C++.
Preprocesori sht n gjendje q t shtoj dhe t largoj kod nga fajlli burimor. Direktiva #include i tregon
preprocesorit q t prfshij kodin nga fajli <iostream>. Ky fajl i prmban deklarimet pr funksionet q i
nevojiten programit.

using namespace std; - definimi i prdorimit t objekteve dhe funksioneve nga libraria
standarde, pa pasur nevoj shkruarjen e kualifikatorve t veant (eksplicit).

C++ prkrah konceptin e hapsirave emrtuese (name spaces). N esenc, kjo i lejon variablat q t
lokalizohen prbrenda kodit. Komanda using namespace std; i lejon t gjitha objektet dhe funksionet nga
libraria standarde q t prdoren n program, pa kualifikator eksplicit. Namespace sht nj koncpet i
avansuar, kshtu q pr fillim kryesorja sht q t dihet se duhet t shkruhet ky rresht, pr t lejuar
prdorimin e thjesht t libraris standarde.

iostream Input Output Stream (Rrjedha hyrse, dalse) prmban urdhrat pr hyrje/dalje.
main ( ) funksioni themelor, kryesor ose si thuhet me shpesh, programi kryesor.
{ - kllapa e madhe e hapur, tergon fillimin e programit kryesor
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
4
cin operatori pr lexim.
cout operatori pr shtypje.
return (kthe, kthimi) kthimi i rezultatit t funksionit.
} kllapa e madhe e mbullur tregon fundin e programit
do urdhr i programit prfundon me simbolin ; (pikpresje).

Shikimi i rezultatit n dalje (n ekran)

Ka disa ambiente programuese, si p.sh., consola dalse nn Microsoft Windows, n t cilat dritarja
e rezultateve n dalje do t zhduket menjher pas prfundimit t programit, duke pamundsuar shikimin
e rezultateve dalse. Pr t evituar kt problem, n fund t programit mund t shtoni nj urdhr, si
cin.get();
ose n disa raste duhet dy rreshtat vijues:
cin.ignore(1000,\n);
cin.get();

Kjo bn q dalja e programit t jet e dukshme deri sa t shtypet ndonj tast ose tasti Enter.
cin.ignore(1000,\n); - Prdoret edhe pr t pastruar rrjedhn e t dhnave
paraprake, ashtu q kur t lexohet ose shtypet vlera e re, baferi t jet i zbrazt dhe i pastr, sepse mund
t ndodh q t shtypen t dhnat e vjetra t baferuara m hert. Kjo komand bn q t injorohen 1000
karakteret paraprake ose e tr rrjedha deri tek karakteri \n (pra kalimi n rresht t ri, gjegjsisht
shtypja e ENTER n tastier gjat dhnies s vlerave me tasier), cilado q paraqitet e para.
Funksioni main() sht pika startuese e ekzekutimit t do programi n C++. Por, kjo nuk sht
trsisht e vrtet n t gjitha rastet. Nse shkruhet programi q do t ekzekutohet n ambient t
pavarur, nuk duhet patjetr funksioni main(). Me prjashtim t ktij rasti, programi patjetr duhet ta ket
funksionin main(). Standardi ISO tregon dy mnyrat vijuese t cilat duhet t pranohen nga cilido
kompajler i C++:
int main()
int main(int argc, char *argv[])

Definicioni i par sht standard. Definicioni i dyt i merr dy parametra t funksionit. I pari
prmban numrin e argumenteve t linjs komanduese q i prcillen programit nga procesi thirrs (ai q
e thrret programin pr ekzekutim), i dyt sht nj varg i parametrave t linjs komanduese.
Standardi i C++ lejon kompajlerin q t pranoj definicionet e main() me parametra shtes, por kjo
sht e varur prej implementimit specifik dhe nuk sht portabile n prgjithsi.

Kthimi nga funksioni main()

Urdhri return pr kthim t rezultatit nga funksioni main( ) sht opcional (zakonisht mirret: return
0;). Mirpo kompajlert e vjetr dhe disa kompajler aktual nuk pranojn programet main() q nuk kan
urdhrin return, prandaj n shumicn e rasteve ai shkruhet.
Gjja e par q vrehet, sht se main() kthen nj integer (deklarimi: int main()). Vlera e tipit
integer reprezenton statusin e kthyer pr procesin thirrs (sistemin operativ).
Mund t kthehet fardo vlere, por vlerat e vetme portabile jan 0 dhe EXIT_SUCCESS, t cil at
prfaqsojn ndrprerjen (prfundimin) normal dhe EXIT_FAILURE, q prfaqson prfundimin jonormal.
EXIT_SUCCESS dhe EXIT_FAILURE jan t definuara n header-in <cstdlib>. Cilado vler tjetr e
kthyer, ia kthen procesit thirrs nj vler statusi t defi nuar prej implementimit.
Gjithashtu, disa kompajler do t pranojn edhe definimin e main(), si: void main(). Megjithat, kjo
sht thjesht jokorrekte dhe nuk duhet t prdoret.
ka ndodh nse nuk prdoret urdhri return? Nse kllapa mbyllse } e funksionit main() n fund
t programit sht e mbyllur pa urdhrin return, efekti sht sikur t jet dhn urdhri return 0, q do t
thot se return 0; sht e nnkuptuar, duke treguar ndrprerjen (prfundimin) normal. Kshtu, edhe
programi vijues sht vali d, n C++:

#include <iostream>
using namespace std;
int main()
{
cout << "Jungjatjeta" << endl;
cin.get();
}

Megjithat, disa kompajler (sidomos ata m t vjetr) nuk e pranojn funksionin main() pa urdhr
return n fund, prandaj ai do t duhet t shkruhet.

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
5
Komentet
Komentet, jan tekste pr shfrytzuesit, por q nuk kan ndikim n program. Ato shkruhen sa
pr t dhn ndonj shpjegim ose prshkrim. Kompajlleri i injoron trsisht.

// Komenti n nj rresht

/*Komenti n disa rreshta, apo
komenti n bllok */

//Programi i par
#include <iostream>
using namespace std;
int main()
{
/* Permes operatorit pr shtypje, cout,
do t shtypet teksti n ekran */
cout << "Programimi ne C++ ";
return 0;
}

Struktura e Programit:

Kreu i programit
Direktivat preprocesorike
Funksionet
Funksioni main()
Deklarimi i variablave

Urdhrat e programit

Mbyllja e programit

//Programi i dyt
#include <iostream>
using namespace std;

int main()
{
int a;

a=5;
cout << a;
return 0;
}
Kreu i programit - Koment
Direktivat preprocesorike


Funksioni main()

Deklarimi i variablave

Urdhrat e programit

Mbyllja e programit


//Programi i tret
#include <iostream>
using namespace std;

int main()
{
int a;

cin >> a; /leximi prej tastiere
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
6
cout << a; /shtypja n ekran
return 0;
}


// Programi cin-cout Llogaritja e vleres mesatare
#include <iostream>
using namespace std;
int main()
{
int n1, n2, n3;
float nm;

cout<<"Jepni tri notat: " ;
cin >> n1 >> n2 >> n3;

nm=(n1+n2+n3)/3;

cout <<"Nota mesatare="
<< nm
<< "\n";

return 0;
}

Varsisht prej versionit t programit (kompajlerit), mund t paraqiten disa ndryshime n
mnyrn e shkruarjes s kreut t programit, kshtu q prfshirja e header fajllave mund t bhet
n formatin:

#include <iostream> ose #include <iostream.h>

me rast, shkruhet emri i fajllit dhe prapashtesa .h.
N versionet m t reja, prapashtesa .h evitohet, duke shkruar vetm <iostream>, por
gjithsesi deklarohet prdorimi i namespace-it standard:

using namespace std;

Prandaj, t dy format vijuese japin rezultat t njjt:

#include <iostream.h>
int main()
{
cout << "Programimi ne C++ ";
return 0;
}

#include <iostream>
using namespace std;

int main()
{
cout << "Programimi ne C++ ";
return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
7
Edhe n versionin e Visual Studio 6.0 (Visual C++ 6.0), programi mund t shkruhet n
formn e dyt, duke thirrur namespace-in standard (std).


Namespace std

Si u tha edhe m hert, kur i prfshijm fajlat e kreut (header files) prej libraris standarde t C++,
prmbajtjet ndodhen n namespace std. Ekzistojn tri mnyra pr t kualifikuar prdorimin e tyre ashtu
q t mund t prdoren n programe:
(a) Duke prdorur direktivn: using namespace std; - Kjo sht metoda m e thjesht, mirpo i bn t
gjith identifikatort e namespace std globalisht t disponueshm.
(b) Duke prdorur deklarimin: using std::cout; - Kjo sht metod m e kufizuar dhe duhet t
prssritet pr gjithka q dshirojm t kualifikojm pr prdorim n program, kshtu q programi do t
duhet t shkruhet si n vijim:

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main()
{
cout << "Jungjatjeta" << endl;
cin.get();
return 0;
}

(c) Identifikatori eksplicit: std::cin.get(); - N kt rast, prdoret indentifikatori eksplicit si prefiks
(parashtes) pr secilin prdorim. Programi do t duhej t shkruhet, si:

#include <iostream>
int main()
{
std::cout << "Jungjatjeta" << std::endl;
std::cin.get();
return 0;
}

Header-t e C++

Npr programe, shpeshher nevojite prfshirja e header fajlave (fajlave t kreut) ashtu q t
prdoren urdhrat, operatort, manipulatort dhe funksionet e gatshme t cilat i ofrojn librarit e C++-it.
Kjo do t thot se duhet t dijm se ka prmbaj header fajlat, ashtu q t dijm se ka mund t
prdorim npr programe. Nse dshton prfshirja e header-ave t duhet, programi nuk do t
kompajlohet.
Libraria e C++ prfshin header-at prej libraris standarde t gjuhs C. Ato kan emrat, si:
<stdlib.h>, <string.h>, <time.h>
Ju mund t prdorini kta header-a n programt n C++ por duhet t keni kujdes, pasi q prmbajtjet
e tyre nuk ndodhen n namespace std, por ato ndodhen n namespace-in global. Prdorimi i ktyre
header-ave t vjetr nuk preferohet n C++, sepse n t ardhmen ata mund t largohen nga standardi.
C++ ofron versionet e veta t reja t ktyr header-ave, prmbajtja e t cilve ndodhet n namespace
std. Header-t ekuaivalent pr kta t msiprmit jan:
<cstdlib>, <cstring>, <ctime>
Pra, si mund t shihet, ata nuk e prdorin prapashtesn .h dhe e kan parashtesn c. Ju duhet t
prdorni versionet e reja npr programe, prveq nse jeni duke mirmbajtur ndonj kod t vjetr t
shkruar n C.
C++ gjithashtu prezenton disa header fajla t ri, t cilt nuk kan ekzistuar n C, si:
<iostream>, <vector>, <algorithm>
Si edhe header-at e tjer t C++, ata nuk e prdorin prapashtesn .h, por nuk kan ndonj prefiks.
Npr literatur do t hasen versionet e vjetra t header-ave t C++, t prdorur para standardit. Ata
kan emrat si: <iostream.h>, <fstream.h> n vend t: <iostream>, <fstream>
Kto versione t vjetra nuk jan adresuar prej standardit t C++ fare. Ata nuk prjashtohen, por nuk
jan header t C-s e as nuk jan pjes e standardit t C++. Ata thjesht jan header- t vjetr, t cilt
jan prdorur pr nj koh t gjat, mirpo preferohet q tash t prdoren versionet e reja, edhe pse
kompajlert sigurisht do t vazhdojn t prkrahin akoma versionet e vjetra, pr pajtueshmri
prapavepruese.
Konfuzion shkakton edhe shtja e prdorimit t t header-it pr string. Ekzistojn tre header-a pr
string: <string.h>, <cstring> t cilt jan t stilit t C-s (vargjet e karaktereve t prfunduara me null
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
8
null-terminated character arrays) dhe prmbajn funksionet pr string si:strcpy(), strcat() and strlen() si
dhe <string> i cili prdoret pr std::string class-at n C++.

Ajo ka sht me rndsi, sht se duhet t jeni n gjendje t shkruani kode t cilat e respektojn
C++ standardin, gj q do t thot se mund ti kompajloni n cilindo kompajler modern t C++-it.


Variablat, tipet e tyre

- T dhnat (ang. Data)

Tipi Rangu i vlerave
madhsia n
bajta
unsigned short int 0..65535 2
short int -32768..32767 2
unsigned long int 0..4294967295 4
long int -2147483648..2147483647 4
int - 16 bit -32768..32767 2
int - 32 bit -2147483648..2147483647 4
unsigned int - 16
bit
0..65535 2
unsigned int - 32
bit
0..4294967295 4
float 1.2E-38..3.4E38 4
double 2.2E-308..1.8E308 8
char 256 simbole 1

Deklarimi

Variabla deklarohet, duke deklaruar tipin dhe emrin:
tipiVariabls emriVariabls, si p.sh.:

int a;
double x;
float z;
short int koha;
char g;
char Emri[20];
/* Ne C++ nuk ka variabel tekstuale String, keshtu qe Stringu
krijohet si varg i karaktereve te veanta*/

int x,y;
long int dita,e,f3; //Deklarimi i perbashket

double x,h; int g; float a,p; //Deklarimet ne nje rresht

int A[8]; //Vektori

double Z[3][5]; //Matrica

Indekset fillojn me vlern zero

int A[6]; //6 antar - A[0], D[1], ..., D[5].
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
9
Deklarimi dhe inicializimi

Nse gjat deklarimit, variabls i ndahet edhe vlera fillestare (inicializuese), ather
thuhet se kemi br deklarimin dhe inicializimin njkohsisht.

int i=5;
double a=5.3;

int A[5]={7,2,4,1,3};

char Z[7]={'d','4','*','a','G','$'}; //Vektori me karaktere

const double PI=3.1415926;

const int m=5;
int A[m]={7,2,4,1,3};

const int m=4,n=3;
int K[m][n]={{7,4,1},
{2,5,8},
{3,6,2},
{8,1,3}};


Tipet, identifikatort dhe fjalt e rezervuara
Tipi
Kur dshironi t ruani t dhna n nj program n C++, si numri i plot ose ndonj
karakter, duhet ti tregojm kompajlerit se cilin tip t t dhnave dshirojm ta ruajm. Tipi do
t ket karakteristikat, si rangu i vlerave t cilat mund t ruhen dhe operacionet t cilat mund t
kryhen n variablat e atij tipi.
Tipet themelore
C++ ofron tipet themelore t brendshme (built -in): Boolean, character, integer dhe
floating-point (pik e lvizshme). Gjithashtu mundson krj ijimin e tipeve t shfrytzuesit duke
prdorur enumeration (grupimin) dhe class (klasa).
Pr secilin prej tipeve themelore rangu i vlerave dhe operacioneve q mund t kryhen n
to sht i prcaktuar prej kompajlerit. Secili kompajler duhet t ofroj operacionet e njjta pr
tipin e veant por rangu i vlerave mund t ndryshoj ndrmjet kompajlerve t ndryshm.

Bool
Vlera e tipit Bool-ean (t Bulit) mund t ken vlern true (e sakt) ose false (e pasakt).
P.sh.,
bool tek = false;
bool VlerauGjet = true;

Nse vlera buleane konvertohet n numr t plot, ather true bhet 1 kurse false bhet 0.
Nse nj vler numerike e plot konvertohet n vler Bool -eane, ather vlera 0 bhet false
kurse fardo vlere jo-zero bhet true (e sakt).

Character
Tipi karakter prdoret pr t ruajtur shkronjat, shifrat dhe simbolet (zakonisht ASCII
karakteret, por jo gjithmon). P.sh.,
char menyja = 'q';
char vleraHyrese = '3';
char SimboliPerqind = '%';
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
10
Vreni se si karakteri futet n thonjza t njfishta (apostrofe). Var iablave t tipit karakter
mund t ju ndahen edhe vlerat numerike:
char chNumri = 26;
Mund t deklarohen karakteret me shenj (signed) ose pa shenj (unsigned), ku karakteret
me shenj mund t ken vler pozitive, negative ose zero, kurse karakteret pa shenj mund t
ken vetm vler pozitive ose zero.

signed char VleraIme = 100;
signed char VleraeRe = -43;
unsigned char Karakteri2 = 200;

Nse prdoret tipi char i thjesht, as me shenj, as pa shenj:
char Vlera = 27;
ajo mund t ndryshoj ndrmjet kompajlerve, ashtu q mund t ket sjellje si t
karakterit me shenj ose pa shenj. N disa kompajler ai mund t pranoj vler pozitive,
negative ose zero kurse n disa mund t pranoj vetm vlera pozitive dhe zero. Madhsia e tipit
char sht gjithmon nj bajt, q sht e garantuar t jet s paku 8 bita. C++ gjithashtu ofron
edhe tipin wchar_t, tip i zgjeruar karakter, zakonisht i prdorur pr bashksi t zgjeruara (t
mdha) t karaktereve.
Nj varg i karaktereve mund t prdoret q t prmbaj string t stilit t C-s n C++,
p.sh.:
char aString[] = "Ky eshte string i C-stilit";
C++ gjithashtu ofron edhe klasn string q ka prparsi ndaj vargjeve t karaktereve.

Integer
Tipi integer prdoret pr ruajtjen e numrave t plot. Mund t prdoren tipet signed (me
shenj), unsigned (pa shenj) ose i thjesht:
signed int indeksi = 4198;
signed int temperatura = -32;
unsigned int numri = 0;
int lartesia = 100;
int vlera = -67;
Sikur n rastin e karaktereve, numrat me shenj mund t prmbajn vlera negative,
pozitive ose zero kurse ata pa shenj vetm vlera pozitive ose zero. Sidoqoft, numrat e thjesht
mund t prmbajn cilat do vlera, pasi q gjithmon e kan shenjn. Numrat integer mund t
deklarohen n form t shkurtr, pa fjaln e rezervuar int:
signed indeksi = 4198;
unsigned numri = 0;

Vlerat Integer paraqiten n tri madhsi: plain int (int i thjesht), short int (int i shkurtr)
dhe long int (int i gjat).
int normal = 1000;
short int vleraeVogel = 100;
long int vleraeMadhe = 10000;

Rangu i vlerave t ktyr tipeve sht i definuar prej kompajlerit. Zakonisht, tipi i thjesht
int ka rang m t gjer se short int, kurse long int m t gjat se ai i thjesht, edhe pse nuk
ndodh kshtu gjithmon.
Ajo q sht e sigurt, sht se tipi i thjesht do t jet s paku i madh sa short int ose m
i madh dhe long int do t jet s paku i madh sa i thjeshti ose m i madh. Tipi short int sht s
paku 16 bita, kurse long int s paku 32 bita.
Vlerat short int dhe long int mund t definohen edhe n form t shkurtr, pa fjaln e
rezervuar int:
short vleraeVogel = 100;
long vleraeMadhe = 10000;
Mund t kemi vlera long int dhe short int me shenj ose pa shenj:
unsigned long vleraPozitive = 12345;
signed short = -7;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
11

Floating-Point
Tipet e numrave me pik t lvizshme mund t prmbajn numra decimal, si p.sh: 1.23, -
.087. Ekzistojn tri madhsi: float (single-precision me precizitet t njfisht), double (double
precision me precizitet t dyfisht) dhe long double (extended-precision precizitet i
zgjeruar). P.sh.:
float celsius = 37.623;
double fahrenheit = 98.415;
long double xhirollogaria = 1897.23;

Rangu i vlerave q mund t ruhen n seciln prej tyr sht i definuar prej kompajlerit.
Zakonisht tipet double do t ruajn vlera m t mdha se ragnu i float dhe long double do t ruaj
vlera m t mdha se double (edhe pse kjo nuk sht gjithmon e vrtet). Sidoqoft, sht e
sigurt se double do t jet s paku i madh sa float por mund t jet m i madh, dhe long double
do t jet i madh s paku sa long por mund t jet edhe m imadh.

Enumeration (numeracioni - grupi)
Nj numeracion (grup) sht tip i definuar prej shfrytzuesit q i mundson shfrytzuesit
q t definoj rangun e vlerave pr tipin e dshiruar. Konstantet e emruara (antart e grupit)
prdoren pr t paraqitur vlerat e nj numeracioni (grupi), si p.sh.:
enum ditaeJaves {eHene,eMarte,eMerkure,eEnjte, ePremte, eShtune, eDiele};
ditaeJaves ditaeSotme = eMerkure;
if(ditaeSotme == eMarte)
{
// urdherat
}

Vlerat e nnkuptuara t prcaktuara pr konstantet e numeracionit jan zero-based (me
baz zero), kshtu q, pr shembullin paraprak:
eHene == 0, eMarte == 1, etj.
Shfrytezuesi mund t prcaktoj vlera t tjera pr ndonjrin antar t grupit, dhe vlerat
vijuese do t ken vler pr nj m t madhe. P.sh.
enum frutet {molla=3, bananja=7, portokalli, dardha, kiwi};
keshtu, q portokalli do t ket vlern 8, dardha 9, kiwi 10, etj.

Class - Klasat

Klasa i mundson shrytzuesit krijimin e tipeve m t sofistikuara t t dhnave, pr t
modeluar objektet dhe veprimet nga jeta e prditshme. Pra, klasa sht nj konstruksion
softverik q mund t prdoret pr simuluar ndonj objekt t jets reale. P.sh., modeli softverik i
nj veture, klasa vetura, mund t prmbaj t dhna pr tipin e veturs, si: tipi, ngjyr a,
harxhimi etj., dhe aftsit (aftsi vepruese, operative) si prshpejtimi, ngadalsimi,
frenimi, etj. Klasa sht tip i definuar i shfrytzuesit q i ka t dhnat, antart (members) dhe
aftsit (metodat). Objekti sht nj instanc (shembull, rast) e klass. P.sh., pr t krijuar
klasn katrori e cila ka t dhnat (vlerat) pr madhsi dhe ofron operacionet vizato dhe
ndryshomadhsin:
class katrori {
public:
katrori();
~katrori();
void vizato();
bool ndryshoMadhesine(int madhesiaeRe);
private:
int madhesia;
};

Diskutimi pr klasat, i tejkalon kufinjt e asaj ka msohet n kt semestr dhe nuk sht
prfshir n kt tekst.
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
12
Identifikatort dhe fjalt e rezervuara t C++

N C++ ne i krijojm emrat pr entitetet q i krijojm: variablat, funksionet dhe tipet e
deklaruara. Kta emra ose si quhen Identifikator, duhet ti rispektojn disa rregulla. Nj
identifikator duhet t filloj me shkronj dhe t prbhet nga nj varg i pandrprer i
shkronjave dhe numrave. Megjithat, lejohet prdorimi i nnvizs (underscore) _ si lidhse,
e cila n kt kontekst konsiderohet si shkronj. Nuk ka kufizime sa i prket gjatsis s
identifikatorit.
Identifikatort q fillojn me nnviz t pasuar me shkronj t madhe jan t rezervuar
nga implementimi, ashtu si jan edhe ata me dy nnviza, kshtu q pr t evituar problemet
duhet t evitoni prdorimin e tyre. Gjithashtu, nuk mund t prdoren si identifikator fjalt e
rezervuara n C++, t cilat jan:

and, and_eq, asm, auto, bitand, bitor, bool, break, case, catch, char,
class, compl, 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, not, not_eq,
operator, or, or_eq, private, protected, public, register, einterpret_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, xor, xor_eq.

Gjithashtu duhet t provoni t evitoni emrat nga librarit e C++-it, si: abs, swap, max etj.
C++ sht case sensitive ( i ndjeshm n madhsi t shkronjave, pra bn dallim mes
shkronjs s madhe dhe asaj t vogl) kshtu q shkronja e vogl dal lon prej asaj t madhe. Kjo
do t thot, q emrat:
Numri dhe numri ose ditaejaves dhe ditaeJaves dallojne mes veti dhe do t
trajtohen si dy identifikator t ndryshm.
Shembuj t identifikatorve t pranueshm jan:
llogaria, numri_i_pare, lexoVleren, kanali25, po
Shembuj t identifikatorve t papranueshm:
numri i pare, delete, 2shkronja, _TUNG_

Kshilla dhe udhzime pr Identifikatort

- Prdorni emra me kuptim dhe prshkrues pr ta br kodin leht t kuptueshm, si p.sh.:
int lartsia n vend t int l, char menya e jo, char m, int mosha_ePacientit e
jo int nr.
- Evitoni emrat q dallojn vetm pr nga madhsia e shkronjave
lartesia, Lartesia
- Evitoni prdorimin e fjalve t rezervuara, duke i ndryshuar vetm n shkronjn e par
t madhe
Return, Continue.
- Mundohuni t ruani stilin, si p.sh.:
- Shkronja e madhe pr secilen pjes, prveq asaj t pars: lexoEmrin(),
merrVlerenMaksimale ().
- Prdorni nnvizn pr t ndare fjalt : lexo_Emrin(), mer_Vleren_Maksimale().
- Prdorni prefiksin per identifikim t tipit: int nNumeriPlote, char stEmri[].

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
13

Leximi dhe Shtypja

- cout - Pr shtypje t teksteve n ekran, prdoret operatori cout, i cili sht i definuar n
header fajllin <iostream> (c out (lexohet si aut), si simbolik q nga C++ shtypet jasht).
- cin - Pr marrjen (leximin) e vlerave prej tastiers, prdoret operatori cin, gjithashtu i
definuar n header fajllin <iostream> (c in (lexohet si in), si simbolik, q C++ merre
brenda).
Pr manipulim me tekstin, C++ prdor buffer-in (baferin, regjistrin pr tekst), i cili zbrazet
me urdhrin flush (pastrim, zbrazje), q menjher e drgon prmbajtjen e baferit n dalje.
Kursori kalon n rreshtin e ri me njrn nga format: cout<<\n; ose cout<<endl; . Me
\n, nuk zbrazet baferi, kurse endl e zbraz baferin dhe e kalon kursorin n rresht t ri.
- cerr shrben pr shtypje t pa-baferuar n pajisjen standarde pr gabime (standar error
device), q nnkuptohet t jet ekrani. I pa-baferuar, do t thot se fardo mesazhi ose e dhne
do t shkruhet menjher n dalje, pa u ruajtur n buffer s pari. Me hyrjen e baferuar, t dhnat
s pari ruhen n bafer nga sistemi operativ, n mnyr transparente pr programin. Kur baferi t
mbushet, t gjitha t dhnat shkruhen jasht n dalje. Kjo sht m efikase, sepse do
shkruarje krkon nj overhead nga sistemi operativ. Duke shkruar bafere t mdha, krkohet
m pak overhead sesa pr shkruarjen e mesazheve t vogla. Ana negative sht se nse
programi dshton para se t shkruhet prmbajtja e baferit, asgj nga ai nuk do t paraqitet n
dalje. Paraqitja n dalje, prmes cerr sht e pabaferuar, pr t siguruar se mesazhet e gabimeve
do t shkruhen n dalje.
- clog mundson paraqitjen e baferuar n pajisjen standarde pr gabime (ekran).

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

Rezervimi i hapsirs

Pr shtypje te formatizuar, rezervimi i vendeve bhet me cout.width (ang. width gjersia)
cout.width(k); // rezervon shtypjen n k-kolona

cout.width(8); // shtypja e rezultatit ne 8 kolona
cout << a; // p.sh., nese shtypet variabla a, qe ka vleren 15
// rezultati do te duket si ne vijim

15 // ku paraqet zbraztiren, rreshtimi (plotesimi i
// vendeve te rezervuara) behet nga skaji i djathte

E njjta mund t bhet edhe duke prdorur manipulatorin setw(x) (angl. set width
prcakto gjersin), i cili ndodhet n librarin <iomanip> (Input -Output manipulation).

....
#include <iomanip>
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
14
...
setw(8);
cout<<a:
....

Mbushja me mostr

Mbushja e pozitave t zbrazta, mund t bhet me ndonj simbol, i cili duhet t jepet
brenda thojzave t njfishta (apostrofeve), n urdhrin cout.fill (ang. Fill mbushe).

cout.fill('f'); // mbushja me simbolin f

// Programi shtypja me mbushje
#include <iostream>
using namespace std;
int main()
{
int x=52;
cout.width(10);
cout.fill('*');
cout << x
<< "\n";
return 0;
}

rezultati ne ekran do te duket si:



Pr t dalluar me leht pjesn e prshkruar nga pjesa e shtypjes s vlerave q llogariten
(dhe mirren) prej programit, shpeshher rezultatet shtypen si n vijim:

cout << "Vlera e lexuar a="
<< a
<< "\n";
cout << "Vlera e lexuar a="
<< a
<< endl;

Pra, kado q shkruhet brenda thonjzave prsritet ashtu si sht shkruar, kurse pjesa
(variablat) jasht thonjzave mirren prej programit. Ndarja e ktyre pjesve bhet me shenjn e
ridrejtimit t rrjedhs: <<.
Pr t arritur rezultatet n dalje, me format t caktuar, prdoren edhe karakteret speciale,
t cilat e braktisin rrjedhn normale hyrse/dalse, prandaj edhe quhen Escape-Sequence
characters (Karakteret pr braktisje t sekuencs/rrjedhs).

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
15
Escape-sequence characters (karakteret speciale)
\a Alarm
\b Backspace
\f Form Feed (pr printer)
\n New line (CR+LF) (rreshti i ri)
\r CR
\t Tab
\v Vertical Tab
\\ \
\? ?
\
\
\000 Numr oktal
\xhh Numr heksadecimal
\0 Null zero (zero binare)

\xhh, mund t prdoret pr t shtypur n ekran karakteret t cilat nuk i kemi n tastier, si
p.sh. shkronja dhe , t gjuhs shqipe. ASCII kodi prkats i karakterit, duhet t shkruhet
n formn heksadecimale. P.sh. pr , kodi sht: 137 (Si e shtypim zakonisht n tastier,
ALT+137). Ather, 137 n bazn 16 (numr heksadecimal), sht: 89 (8*16
1
+9*16
0
=137).
Prandaj, pr ta shtypur n dalje shkronjn , duhet t shkruhet: \x89. P.sh., pwr tw shtypur
nw dalje:
Sot sht dit e mir n C++ duhet t shkruhet - Sot \x89sht\x89 dit\x89 e mir\x89

cout << Sot \x89sht\x89 dit\x89 e mir\x89 ;

(Pr ta shkruar m leht dhe m shpejt, e shkruani tekstin me w (ose ndonjw shenjw
tjetwr) n vend t shkronjs (si veprohet zakonisht), e pastaj me: Edit Replace, e
zvendsoni: w me \x89).

Preciziteti
Pr t prcaktuar precizitetin e shtypjes pr vlerat reale (me presje dhjetore), prdoret
urdhri pr precizitet:

cout.precision(k); // shtypja me precizitet te caktuar, me k-shifra

ose manipulatori setprecision(x); i cili ndodhet n <iomanip>.

// Programi shtypja me precizitet
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
int i;
double x=3.1415926534;
for (i=1;i<=10;i++)
{
cout.precision(i);
cout.width(i);
cout << x << "\n";
}
//ose
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
16
cout<<"---------------------------\n";
for (i=1;i<=10;i++)
{
cout<< setprecision(i) << setw(i) << x << "\n";
}
return 0;
}



Prndryshe, n kombinim me shtypjen me precizitet mund t definohet formati pr
shtypjen e bazs s vlers n formatin fixed (fiks), scientific (shkencor) ose e paprcaktuar:

// shtypja me format dhe precizitet
#include <iostream>
using namespace std;

int main () {
double a,b,c;
a = 3.1415926534;
b = 2006.0;
c = 1.0e-10;
cout.precision(5); \\preciziteti, shifrat pas presjes dhjetore
cout << a << "\t\t" << b << "\t\t" << c << endl<<endl;
cout << fixed << a << "\t\t" << b << "\t" << c << endl<<endl;
cout << scientific << a << "\t" << b << '\t' << c << endl<<endl;
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
17


Sistemi numerik

Rezultatet mund t shtypen n sistemet numerike me baz t ndryshme, si decimal (baza
10), heksadecimal (baza 16), octal (baza 8), etj, duke prdorur para shtypjes s vlers, urdhrin
pr prcaktimin e formatit prkats: dec, hex apo oct.

// modifikimi i bazs s numrave
#include <iostream>
using namespace std;

int main ()
{
int n;
n=100; //vlera decimale 100
cout << dec << n << endl;
cout << hex << n << endl;
cout << oct << n << endl;
return 0;
}



Pra, kemi sistemet numerike me pesh:

N = a
n
b
n
+ a
n 1
b
n 1
+ a
n 2
b
n 2
+ ... +a
1
b
1
+ a
0
b
0


ku, a shifra n pozitn prkatse, b baza

Dec: 100 = 1*10
2
+0*10
1
+0*10
0
=1*100+0*10+0*1=100+0+0=100;
Hex: 64 = 6*16
1
+4*16
0
=96+4=6*16+6*1=100;
Oct: 144 = 1*8
2
+4*8
1
+4*8
0
=1*64+4*8+4*1=64+32+4=100;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
18
Leximi i fjalve dhe fjalive

// Programi Fjala1
#include <iostream>
using namespace std;
int main()
{
char Emri[20], Mbiemri[20];

cout<<"Si quheni ju lutem:\n";
cout<<"Emri dhe Mbiemri: ";

cin >> Emri >> Mbiemri;

cout << endl;
cout << endl;
cout << "Jungjatjeta z/znj. :"<<Emri<<" " <<Mbiemri<< "\n";
cout << endl;
cout << endl;
return 0;
}



Tekstet ose fjalt deklarohen si variabla t tipit karakter me gjatsi t caktuar (varg/vektor
i karaktereve). Duhet pasur kujdes, se gjat leximit prej tasti ers (prmes urdhrit cin) mirret
vetm teksti deri tek zbraztira e par q haset gjat leximit, kshtu q lexohet vetm fjala e
par e shtypur.

// Programi lexo-shtyp
#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;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
19


Leximi i tekstit me gjatsi t caktuar, bhet me urdhrin cin.get (ang. Get marr, merr)

cin.get(a,n) // n numri i karaktereve q lexohen (pranohen)

// Programi lexo6
#include <iostream>
using namespace std;
int main()
{
const int m=20;
char A[m];
cout << "Fjalia q lexohet: ";
cin.get(A,m);
cout << "Fjalia q u lexua: "
<< A
<< "\n";
return 0;
}



Leximi i tekstit mund t bhet edhe duke lexuar komplet rreshtin:
cin.getline // leximi i rreshtit (ang. getline merre rreshtin)

// Programi lexo7
#include <iostream>
using namespace std;
int main()
{
const int m=20;
char A[m];
cout << "Fjalia q lexohet: ";
cin.getline(A,m);
cout << "Fjalia q u lexua: "
<< A
<< "\n";
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
20

Rreshtimi i tekstit

Gjat shtypjes, rezultati mund t rreshtohet djathtas, majtas apo n mes. Pr t br
rreshtimin e tekstit prdoren manipulatort: left (majtas), right (djathtas) dhe internal (pr
brenda).

// Rreshtimi
#include <iostream>
using namespace std;

int main ()
{
int n;
n=-25;
cout.width(10); cout << right << n << endl;
cout.width(10); cout << internal << n << endl;
cout.width(10); cout << left << n << endl;
return 0;
}



Rreshtimi mund t bhet edhe duke prdorur manipulatort:
setiosflags(ios::left) dhe setiosflags(ios::right)
t cilt ndodhen n header fajllin <iomanip >, prandaj duhet t prfshihen me direktivn
#include.


// Rreshtimi
#include <iostream>
#include <iomanip>
using namespace std;

int main ()
{
int n;
n=-25;
cout.width(10);
cout.fill('*');
cout << setiosflags(ios::left) << n << endl;
cout.width(10);
cout.fill('*');
cout << setiosflags(ios::right) << n << endl;
cout.width(15);
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
21

Stringu

C++ ka dy metoda pr paraqitjen e t dhnave tekstuale - stringjeve (variabla string),
vargu i karaktereve n stil t C-s dhe klasa string. Vargu i karaktereve sht nivel i ult i
prfaqsimit t t dhnave string, mirpo akoma haset npr kode t ndryshme. Klasa string, e
cila sht pjes e libraris standarde t C++-it, ofron metoda pr manipulim t leht me t
dhnat tekstuale (string).
Vargu i karaktereve
Si tregon edhe vet emri, vargu i karaktereve n stil t C-s sht paraqitje e t dhnave
string q prdoret n gjuhn C. N C, kjo sht teknika e vetme pr ruajtjen dhe manipulimin e
t dhnave string. Stringjet ruhen si vargje t karaktereve t prfunduara me null - \0. Kjo
paraqitje ka disa dobsi, t cilat duhet t evitohen n C++ duke prdorur klasn string.
Vargu i karaktereve me madhsi t mjaftueshme duhet t definohet ose alokohet pr t
mbajtur s paku gjatsin e stringut plus nj, pasi q nj bajt nevojitet pr t
ashtuquajturin null terminator (prfunduesin null (zero)). sht prgjegjsi e
programerit q t jet i sigurt pr gjatsin e mjaftueshme t vargut. Kompajlimi nuk do
t lajmroj ndonj gabim apo vrejtje nse gjatsia sht m e vogl se sa q duhet.
Gabimet n madhsin e vargut t karaktereve do t paraqiten gjat ekzekutimit.
Programi mund t bllokohet, t ket sjellje t gabuar ose t paparashikuar.
Ndojnher, sht e nevojshme q null terminatori t shtohet n mnyr eksplicite.
Zakonisht nevojiten ose prdoren pointert pr t ju qasur dhe pr t manipuluar me t
dhnat string.
Kur t kopjohen stringjet, programeri duhet t verifikoj vargun cak pr gjatsi t
nevojshme. Kur shtohen stringjet, prsri gjatsia e stringut duhet t mirret n
konsiderim.
Mirpo, ka disa arsye t rndsishme, pr studimin dhe msimin e stringjeve t stilit t C-
s. S pari, mirmbajtja e ndonj kodi t trashguar, sepse disa programer i prdorin akoma. S
dyti, klasa string nuk ishte pjes e versioneve fillestare t C++-it. Programert i prdorin t dy
mnyrat. N secilin rast, nevojitet njohja e C-stringjeve. Arsyeja e fundit sht se akoma
prdoren n C++ pr t manipuluar me argumentet e linjs komanduese. Argumentet e linjs
komanduese jan t dhna ose urdhra t cilt i prcillen programit kur ai fillon ekzekuti min.
Kto argumente i prcillen programit t C++-it n stilin e C-stringjeve.
Klasa String
Libraria standarde e C++-it ofron klasn string. Prdorimi i ksaj klase duhet t prfshihet
n program me direktivn: #include <string>.
Pr dallim prej C-stringjeve, prfaqsimi i brendshm i t dhnave string sht i fshehur
prmes klass string. T dhnat jan nj bashksi, e qasur dhe e manipuluar prmes prdorimit
t metodave t klass string. Programeri nuk sht i preokupuar si dhe ku ruhet stringu. Kjo
sht nj shembull i enkapsulimit. Le t shohim krijimin dhe inicializimin e objekteve string
prmes nj shembull:

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
22
#include <iostream>
#include <string>
using namespace std;

int main()
{
string S1;
// Konstruktori i zakonshem, pa inicializim
string S2("Tung");
// Inicializimi me C-Style string
string S3("Tung nga Kosova");
// Inicializimi me C-Style string
string S4(S3);
// Inicializimi me nje string objekt tjetr
cout << "S2: " << S2 << endl;
cout << "S3: " << S3 << endl;
cout << "S4: " << S4 << endl;

S1 = S2;
// Ndarja e nj stringu, stringut tjetr

cout << "S1: " << S1 << endl;

S1 = S3;
// S1 mori madhsin e krkuar.
// Nuk nevojitet ndonj urdhr i veant
cout << "S1: " << S1 << endl;

return 0;
}
Rezultati:

Pra, si mund t shihet, ka disa konstruktor pr klasn string. Konstruktori standard
krijon stringun e zbrazs. Format tjera t konstruktorit marrin karakteret e C-Stringut ose ndonj
tjetr objekt string si argument dhe inicializojn stringun e ri m kt vler. Gjithashtu, sht e
mundur q nj stringu ti ndahet vlera e strigut tjtr drejtprdrejt. Me C-stringjet, nj ndarje e
till e vlers do t duhej t bhej prmes unazs ose ndonj funksioni nga librarit (si: strcpy).
Veprimet me String
Klasa string prkrah operatort relacional si: <, <=, ==, !=, >= dhe > pr krahssim t
stringjeve. Operatori + prdoret pr bashkimin e stringjeve. Operatori [] (subscript operator)
mund t prdorte pr t ju qasur ose pr t caktaur ndonj element individual t stringut. Klasa
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
23
string ka gjithasthu edhe metodat (funksionet pr veprim), empty (zbraze) pr t testuar stringun
e zbrazt dhe size (madhsia) pr t llogaritur madhsin (gjatsin) e stringut.

Shembull:
#include <iostream>
#include <string>
using namespace std;

int main()
{
string S1;
string S2(" nga ");
string S3("Kosova");
string S4;

if (S1.empty())
{
cout << "S1 eshte i zbrazet" << endl;
cout << "Ka gjatesine " << S1.size() << endl;
}
else
{
cout << "Jo, nuk eshte i zbrazet." << endl;
}
S1 = "Tung";
cout << "S1 tani ka gjatesine " << S1.size() << endl;
if (S3 < S1) // Krahasimi relacional
{
cout << "K eshte para T" << endl;
}
S4 = S1 + S2 + S3; // bashkimi
cout << "S4: " << S4 << endl;
S1 += S2; // bashkimi
S1 += S3;

cout << "S1: " << S1 << endl;
//indeksimi (subscript)
cout << "S1[0] " << S1[0] << endl;
cout << "S1[1] " << S1[1] << endl;
cout << "S1[2] " << S1[2] << endl;
cout << "S1[3] " << S1[3] << endl;
cout << "S1[4] " << S1[4] << endl;
cout << "S1[5] " << S1[5] << endl;
cout << "S1[6] " << S1[6] << endl;
cout << "S1[7] " << S1[7] << endl;
cout << "S1[8] " << S1[8] << endl;
cout << "S1[9] " << S1[9] << endl;
cout << "S1[10] " << S1[10] << endl;
cout << "S1[11] " << S1[11] << endl;
cout << "S1[12] " << S1[12] << endl;
cout << "S1[13] " << S1[13] << endl;
cout << "S1[14] " << S1[14] << endl;
cout << "S1[15] " << S1[15] << endl;
return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
24
Rezultati:


Metodat e klass string
Klasa string ka shum metoda pr manipulim t stringjeve, si: shtimi, insertimi, fshirja,
krkimi dhe zvendsimi. Disa nda to jan prshkruar n tabeln vijuese:

Metoda Prdorimi
append(char *pt);
append(char *pt, size_t count);
append(string &str, size_t
offset,size_t count);
append(string &str);
append(size_t count, char ch);
append(InputIterator Start,
InputIterator End);
Shton karkteret prej C-stringut, char ose objekteve tjera string.

at(size_t offset);
Kthen referencn n karakterin n pozitn e specifikuar. Dallon prej
operatorit t indeksimit [ ], pasi q verifikohen kufinjt.

begin(); Kthen nj iterator n fillim t stringut.
*c_str(); Kthen pointerin n versionin e C-stringut t prmbajtjs s stringut.
clear(); Fshtin tr stringun
copy(char *cstring, size_t
count, size_t offset);
Kopjin numrin-count e karaktereve nga C-stringu duke filluar nga
zhvendosja-offset.
empty(); Teston a sht stringu i zbrazt.
end(); Kthen iteratorin n pozitn pas fundit t stringut (nj pozit m pas).
erase(iterator first, iterator
last);
erase(iterator it);
erase(size_t pos, size_t count);
Fshin karakteret nga pozita e specifikuar.
find(char ch,size_t offset = 0);
find(char *pt,size_t offset = 0);
find(string &str,size_t offset =
0);
Kthen indeksin e karakterit t par t substringut kur ai gjendet.
Prndryshe, kthehet vlera speciale npos.
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
25
find_first_not_of();
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
par q nuk sht n stringun krkues.
find_first_of();
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
par q sht n stringun krkues.
find_last_not_of();
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
fundit q nuk sht n stringun krkues.
find_last_of();
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
fundit q sht n stringun krkues.
insert(size_t pos, char *ptr);
insert(size_t pos, string &str);
insert(size_t pos, size_t count,
char ch);
insert(iterator it, InputIterator
start, InputIterator end);
Inserton karakteret n pozitn e specifikuar.
push_back(char ch); Inserton karakteret n fund t strignut.
replace(size_t pos, size_t
count, char *pt);
replace(size_t pos, size_t
count, string &str);
replace(iterator first, iterator
last, char *pt);
replace(iterator first, iterator
last, string &str);
Zvendson elementet n string me karakteret e specifikuara. Rangu
mund t specifikohet prmes pozits startuese dhe numrit t elementeve
pr zvendsim ose duke prdorur iteratort.
size(); Kthen numrin e elementeve n string.
swap(string &str); Shkmben dy stringje.
Kushtet (Degzimet)

Gjat shkruarjes s programeve pr raste t ndryshme, paraqitet nevoja e kushtzimit t
ekzekutimit t urdhrave n baz t ndonj kushti t caktuar. N C++ kemi disa forma t
paraqitjes s kushteve: Rasti m i thjesht sht kur pr ndonj kusht t caktuar ekzekutohet
urdhri (ose urdhrat), kurse nse nuk plotsohet kushti, nuk ndodh asgj por programi
vazhdon me urdhrin e ardhshm (vijues), si n vazhdim:

if (kushti) urdhri ;
ku:
kushti - kushti pr degzim
urdhri urdhri q ekzekutohet nse plotsohet kushti k
Zakonisht, n program kushti shkruhet n rresht t veant:

if (kushti)
urdhri ;

// Programi if1a
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Vlera x=";
cin >> x;
if (x > 0)
cout << "\nx eshte pozitiv \n";
return 0;
}
> x 0
X sht pozitiv
Fillimi
x
Fundi
Po
Jo

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
26




Gjat shkruarjes s programeve, prdoren operatort aritmetik dhe operatort relacional:

Operatori n C++ Operacioni Shembull Rezultati
+ Mbledhja 3+2 5
- Zbritja 3-2 1
* Shumzimi 3*2 6
/ Pjestimi 3/2 1.5
% Moduli 3%2 1
*Moduli, sht mbetja nga pjestimi i plot (5%2=1; 8%3=2).

Operatori n C++ Domethnia Shembull Rezultati
< M i vogl se 2 < 3 true
<= M i vogl se,
ose barazi me
3 <= 2 false
== Barazi me 3 == 3 true
> M i madh se 3 > 2 true
>= M i madh se,
ose barazi me
2 >= 3 false
!= Jobarazi me 2 != 3 true

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

cout << "Vlera x=";
cin >> x;

if (x > 0)
cout << "\n x eshte pozitiv \n";
if (x < 0)
cout << "\n x eshte negativ \n";

return 0;
}

> x 0
X sht pozitiv
Fillimi
x
Fundi
Po
Jo
< x 0
X sht negativ
Po
Jo


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
27


// Programi if2
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Vlera x=";
cin >> x;

if ((x%2) == 0)
cout << "\n x eshte cift\n";

if ((x%2) == 1)
cout << "\n x eshte tek\n";
return 0;
}



Kemi edhe rastin kur pr ndonj kusht t caktuar ekzekutohet urdhri (ose urdhrat),
kurse nse nuk plotsohet kushti duhet t ekzekutohet ndonj urdhr tjetr, si n vazhdim:

If (kushti)
urdhri1;
else
urdhri2;

kushti - kushti pr degzim.
urdhri1 - urdhri q ekzekutohet nse plotsohet kushti k.
urdhri2 urdhri q ekzekutohet nse nuk plotsohet kushti k.

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
28
// Programi if2a
#include <iostream>
using namespace std;
int main()
{
int x;

cout << "Vlera x=";
cin >> x;

if (x > 0)
cout << "\nx eshte pozitiv \n";
else
cout << "\nx eshte negativ\n";

return 0;
}
> x 0
X sht
pozitiv
Fillimi
x
Fundi
Po Jo
X sht
negativ





Blloqet e urdhrave n deg

Ns pr nj kusht duhet t ekzekutohen disa urdhra (m shum se nj urdhr), ather
urdhrat e till duhet t futen brenda kllapave t mdha, duke krijuar nj bllok t urdhrave.

if (kushti)
{
urdhrat1;
}
else
{
urdhrat2;
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
29
// Programi if3
#include <iostream>
using namespace std;
int main()
{
int x,y,z;

cout << "Vlera x=";
cin >> x;

if (x > 0)
{
y=2*x;
z=x*x;

cout << "\ny=2*x="<<y;
cout << "\nz=x*x="<<z;
}
else
cout << "\nx eshte negativ\n";

cout<<endl;
return 0;
}
> x 0
y,z
Fillimi
x
Fundi
Po Jo
X sht
negativ
y=2*x
z=x*x




Kushtet e shumfishta dhe kushtet ndrthurura

Kushtet e shumfishta krijohen duke i kombinuar disa kushte prmes operatorve logjik:
AND (Dhe), OR (Ose) dhe negacionit NOT (Jo). Pr AND duhet t plotsohen t dy kushtet.
Pr OR mjafton t plotsohet njri prej kushteve.

Operatori Operacioni Shembull Llogaritja Rezult
ati
&& Konjukcioni, AND (2<3)&&(4==4) true && true true
|| Disjunkcioni, OR (2!=3)||(3>4) true || false true
! Negacioni, NOT !(5>4) !true false

Kushtet e ndrthurura paraqiten n rastet kur kemi kusht brenda kushtit (IF brenda IF-it),
pra kur ndonj urdhr duhet t ekzekutohet vetm nse jan plotsuar disa kushte t
njpasnjshme.

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
30
if (kushti1)
if (kushti2)
urdhri1;
else
urdhri2;
else
urdhri3;

Pra, urdhri1 ekzekutohet vetem kur plotsohen edhe kushti1 edhe kushti2. urdhri2
ekzekutohet kur plotsohet kushti1 por nuk plotsohet kushti2. urdhri3 ekzekutohet kur nuk
plotsohet fare kushti1 (n kt rast, kushti2 nuk vjen n pyetje fare).
P.sh, n rastin vijues, edhe pse duket se llogaritja do t behet n rregull duke prdorur
kombinim e kushteve prmes operatorit DHE, mund t shihet se pr numrat pozitiv por m t
vegjl se 10, rezultati del i gabuar.

// Programi if4-llogaritja e gabuar
#include <iostream>
using namespace std;
int main()
{
int x,y,z;
cout << "Vlera x=";
cin >> x;
if ((x > 0) && (x>10))
{
cout << "\nx eshte pozitiv me i madh se 10\n";
}
else
cout << "\nx eshte negativ\n";
cout<<endl;
return 0;
}



Duke prdorur kushtin e ndrthurur (IF brenda IF-it), mund t llogaritet n mnyr
korrekte.
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
31
x > 0
x>0
x>10
Fillimi
x
Fundi
Po Jo
x sht
negativ
x > 10
x>0
x<10


// Programi if4b permiresimi i gabimit nga detyra paraprake
#include <iostream>
using namespace std;
int main()
{
int x;

cout << "Vlera x=";
cin >> x;

if (x > 0)
if (x>10)
cout << "\nx eshte pozitiv me i madh se 10\n";
else
cout << "\nx eshte pozitiv me i vogel se 10\n";
else
cout << "\nx eshte negativ \n";
return 0;
}


Operatori ?

Operatori i kushtzimit ? funksionon si nj IF me else, ashtu q nse plotsohet
kushti ekzekutohet urdhri1, prndryshe ekzekutohet urdhri2:

(Kushti) ? urdhri1 : urdhri2;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
32

// Programi - operatori i kushtezimit
#include <iostream>
using namespace std;
int main()
{
int a=2, b=8;
int y;
y=(a>b) ? a : b;
cout << "Vlera e variabls y="
<< y
<< "\n";
return 0;
}

Switch ( )
Shklq. Dobt
Fillimi
Nota
Fundi
5 1
Mjaftuesh. Mir Sh. mir
4
Nota
2 3

Pr degzimet e shumfishta, me if programi do t duhej t shkruhet si vijon:

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

cout<<"Jepni noten 1, 2, 3, 4 ose 5 : Nota=" ;
cin >> Nota;

if (Nota == 1) cout<<"Dobet: ";
else
if (Nota == 2) cout<<"Mjaftueshem: ";
else
if (Nota == 3) cout<<"Mire: ";
else
if (Nota == 4) cout<<"Shume mire: ";
else
if (Nota == 5) cout<<"Shkelqyeshem: ";
else cout << "Gabim - Nota duhet mes 1 dhe 5";

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
33
cout<<" Nota="
<< Nota
<< "\n";

return 0;
}

N vend t ksaj, prmes urdhrit/operatorit Switch, bhet shprndarja m e qart, me
mundsi m t lehta t prcjelljes, t shtimit t opcioneve t reja, etj . (angl. Switch ndryshim,
transferim, ndrprers pr kyje/kyje, etj). Variabla q kontrollohet n Switch, duhet t jet e
tipit Integer ose Char.

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

cout<<"Jepni noten 1, 2, 3, 4 ose 5 : Nota=" ;
cin >> Nota;
switch(Nota)
{
case 1: cout<<"Dobet: ";
break;
case 2: cout<<"Mjaftueshem: ";
break;
case 3: cout<<"Mire: ";
break;
case 4: cout<<"Shume mire: ";
break;
case 5: cout<<"Shkelqyeshem: ";
break;
default: cout <<"Gabim-Nota duhet te jete mes 1 dhe 5\n";
}

cout <<" Nota="
<< Nota
<< "\n";
return 0;
}

Pr do case (angl. Case rast, shembull, mundsi) duhet t vendoset edhe break
(ndale, ndrpreje), pr t ndrprer ekzekutimin e mtejm t kushteve kur t gjendet vlera e
rastit t caktuar. N fund, me default eleminohet mundsia e dhnies s vlerave t gabuara
(q nuk jan prfshir n asnjrin rast t parapar (ose parashikuar)).
P.sh, pjesa n vijim mund t paraqitet n fillim t ndonj programi m t gjat:

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

int main()
{
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
34
int i;
char zgjedhja;
cout<<" Ne cilen kategori beni pjese? :\n" ;
cout<<" M - Mesimdhenes\n" ;
cout<<" A - Administrate\n" ;
cout<<" S - Student\n" ;
cout<<" Kategoria e juaj: " ;
cin >> zgjedhja;

//if (zgjedhja>=97)
//zgjedhja=zgjedhja-32;
zgjedhja=toupper(zgjedhja);

switch(zgjedhja)
{
case ('M'): cout<<"Duhet te lajmeroheni ne ora: 10.00\n";
break;
case ('A'): cout<<"Duhet te lajmeroheni ne ora: 12.00\n";
break;
case ('S'): cout<<"Duhet te lajmeroheni ne ora: 14.00\n";
break;
default: cout << "Gabim\n";
}
cout <<"\n ****************** Dalja ****************\n";

return 0;
}



Pr ta kthyer shkronjn e dhn n shkronj t madhe, mund t prdoret mnyra prmes
shndrrimit sipas vlers s kodit ASCII, sepse shkronjat e mdha e kan kodin prej A 65 gjere
n Z 90, kurse ato t vogla, pr 32 m shum: prej a 97 gjere ne z 122

//if (zgjedhja>=97)
//zgjedhja=zgjedhja-32;

Shndrrimi n shkronj t madhe mund t bhet edhe prmes funksionit toupper (angl.
to upper - n t madhe) i cili ndodhet n heder fajllin (librarin) <cstdlib>. Ekziston edhe
funksioni tolower (angl. to lower n t vogl).

zgjedhja=toupper(zgjedhja); //shndrrimi n shkronj t madhe

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
35
Kaprcimi pa kusht: goto


Go to Dalja
Mesi
Fillimi
Fundi
< Go to Fillimi
Fundi
Fillimi
Go to Mesi
Dalja
Go to Fundi

Go to Dalja
Mesi
Fillimi
Fundi
Go to Fillimi
Fundi
Fillimi
Go to Mesi
Dalja
Go to Fundi


Go to (angl. kalo tek, shko tek) bn kaprcimin e detyrueshm n pjesn e caktuar t
programit, e cila sht e adresuar prmes Label-ave (labelave, etiketave, adresave) t cilat jan
emra t fardoshm, q prfundojm me dy pika (:).
Para unazave (t cilat do t shpjegohen n vazhdim t tekstit), pr tu kthyer n pjesn e
urdhrave n program t cilt veq jan ekzekutuar m hert dhe pr ti ekzekutuar ata prsri,
mnyra e vetme ka qen kjo prmes urdhrit goto.

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

Fillimi: //Labela etiketa,adresa Fillimi
cout<< "Fillimi\n";
goto Dalja;

Mesi: //Labela etiketa,adresa Mesii
cout << "Mesi\n";
goto Fillimi;

Fundi:
cout << "Fundi\n";
goto Mesi;

Dalja:
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
36

Fillimi
i<10
Fillimi
Vlera i=
Fundi
i>=10
Po
Jo
i<10
go to
Fillimi


// Programi goto2
#include <iostream>
using namespace std;
int main()
{
int i;
Fillimi: //Adresa Fillimi
cout<< "Zgjedhni vleren per i: i=";
cin>>i;

if (i<10)
{
cout << "Keni zgjedhur i me te vogel se 10\n\n";
goto Fillimi;
}

cout << "Keni zgjedhur i me te madhe se 10\n";
cout <<" Fund \n";
return 0;
}



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
37
Pr ti mundsuar shfrytzuesit q pas ekzekutimit t programit, t zgjedh nse dshiron
t bj prsri riekzekutimin e programit prej fillimit pa e ndrprer at (pa dal prej tij), mund
t prdoret forma si vijon, prmes urdhrit goto.

// Programi goto3
#include <iostream>
using namespace std;
int main()
{
int i;
char zgjedhja;

Perseritje: //Labela(etiketa-adresa) per kapercim pa kusht

cout << "Zgjedhni vleren per i: i=";
cin >> i;
cout << endl;

if (i<10)
cout << "Keni zgjedhur i me te vogel se 10\n\n";
else
cout << "Keni zgjedhur i me te madh ose baraz me 10\n\n";


cout << "Perserite testin? (P-Po, J-Jo) \a";
cin >> zgjedhja;

if ((zgjedhja=='P') || (zgjedhja =='p'))
goto Perseritje;

cout <<"\n ****************** Dalja ********************\n";
return 0;
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
38
Unazat (Loops - laqet)

Loop (angl Loop-laku, rrethi i mbyllur, apo ndryshe si term m i prshtatshm n gjuhn
shqipe, unaza) paraqet pjesn e programit, ku bhet prsritja e ekzekutimit t nj apo m
shum urdhrave t programit. Unaza ka variabln e unazs, e cila prdoret si tregues se sa her
do t prsriten urdhrat brenda unazs. Ajo fillon me vlern fillestare dhe pr do her t
ekzekutimit t urdhrave t unazs, e ndryshon vlern pr nj hap t caktuar, q njihet si hapi i
unazs. N fund t pjess s unazs, testohet se a sht plotsuar kushti pr dalje prej unazs.
Kjo rritje e variabls s unazs, pr hapin e caktuar, vazhdon deri sa t plotsohet kushti pr
dalje prej unazs. N C++ prkrahen disa forma t unazave:
Unaza while (gjersa)

Unaza While (gjersa), bn prsritjen e urdhrave t unazs, gjersa vlen kushti i caktuar. Pra,
gjersa pr kushtin e unazs While kemi rezultatin TRUE (E SAKT, PO), ekzekutohen urdhrat e
unazs dhe variabla e unazs rritet, pr hapin e caktuar.

Unaza While, s pari e vlerson kushtin dhe pastaj, nse plotsohet kushti, ekzekuton urdhrat
n unaz. Nse kushti nuk plotsohet hern e par q testohet kushti (pr hapin e par t variabls s
unazs), pra pr vlern fillestare t variabls s unazs, ather urdhrat n unaz nuk do t
ekzekutohen asnjher.

i=f;
while(kushti)
{
urdhri/at;
i=i+h;
}

ku jan:
i - variabla e unazs.
f - vlera fillestare e variabls s unazs.
kushti - kushti i ekzekutimit t urdhrave q
prfshihen n trupin e unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at urdhrat q ekzekutohen brenda unazs.



Fillimi
n
S=0
S=S+i
S
Fundi
i=1
i n
Po
Jo
i=i+1



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
39

// Program while1
#include <iostream>
using namespace std;
int main()
{
double S;
int i;
S=0;
i=1; //vlera fillestare
while (i<=10) //kushti pr mbetje brenda unazs
{
S=S+i; //urdhri
i=i+1; //rritja e hapit t unazs
}
cout << "S="
<< S
<< "\n";
return 0;
}



Nse Unaza While pr kushtin e unazs ka gjithmon rezultatin TRUE, ather urdhrat e
unazs do t prsriten pafundsisht. P.sh, nwse vendoset kushti si nw vijim:

while (true) //kushti pr mbetje brenda unazs
{
Urdhrat...
}

ather do t kemi unaz t pafundme, q prsritet vazhdimisht. Pr t mos ndodhur kjo, duhet
q me ndonj urdhr prbrenda unazs, t vendosim ndonj kusht plotsues pr ndrprerje t
unazs.

Unaza do while

Unaza Do...While (Bj...gjersa), bn prsritjen e urdhrave t unazs, gjersa vlen kushti
i caktuar. Pra, gjersa pr kushtin e unazs While kemi rezultatin TRUE (E SAKT, PO),
ekzekutohen urdhrat e unazs dhe variabla e unazs rritet, pr hapin e caktuar.

Mirpo, pr dallim nga unaza While, unaza Do...While, s pari e i ekzekuton urdhrat e
unazs, e pastaj e vlerson kushtin pr dalje prej unazs (apo pr mbejte n unaz) dhe pastaj,
nse plotsohet kushti, prsri ekzekuton urdhrat n unaz. Edhe nse kushti nuk plotsohet
hern e par q testohet (pr hapin e par t variabls s unazs), pra pr vlern fillestare t
variabls s unazs, urdhrat n unaz ve jan ekzekutuar njher. Pra, s paku nj her ata do
t ekzekutohen gjithsesi.

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
40
i=f;
do
{
urdhri/at;
i=i+h;
}
while(kushti);

ku jan:
i - variabla e unazs.
f - vlera fillestare e variabls s unazs.
kushti - kushti i ekzekutimit t urdhrave q prfshihen
n trupin e unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at urhdri/at e prfshira brenda unazs.


Po
Jo
Fillimi
n
S=0
i=1
S=S+i
i=i+1
i n
S
Fundi


// Programi do-while1
#include <iostream>
using namespace std;
int main()
{
const int m=3;
int i;
double s;

s=0;
i=1; //vlera fillestare
do //(do - bj, vepro, kryej)
{
s=s+i; //urdhri
i++; //rritja e hapit t unazs
}
while (i<=m); //kushti pr mbetje n unaz
cout << "Shuma s= "
<< s
<< "\n";
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
41

Unaza for

Unaza for (pr), gjithashtu bn prsritjen e urdhrave brenda unazs, duke prshkruar n
fillim vlern fillestare, kushtin dhe hapin e unazs. Ka form m kompakte dhe prdoret n t
shumtn e rasteve. Zakonisht, kur vlerat kufitare (vlera fillestare dhe vlera prfundimtare) t
variabls s unazs jan t njohura paraprakisht, prdoret unaza for.

for (i=f; kushti; i=i+h)
{
urdhri/at;
}

ku:
i - variabla e unazs.
kushti - kushti i mbetjes brenda unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at urdhri/at q ekzekutohen brenda unazs.

// Programi for1
#include <iostream>
using namespace std;
int main()
{
int i,n;
double s=0;
cout << "Vlera e variabls n=";
cin >> n;
for (i=1;i<=n;i++)
s=s+i;
cout << "Shuma s="
<< s
<< "\n";
return 0;
}
Fillimi
n
S=0
S=S+i
S
Fundi
i=1; i<=n; i=i+1




Nga skema n vijim mund t shihet se si pasqyrohet pjesa e unazs do while n at
for
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
42
Po
Jo
Fillimi
n
S=0
i=1
S=S+i
i=i+1
i n
S
Fundi
Fillimi
n
S=0
S=S+i
S
Fundi
i=1; i<=n; i=i+1


// Programi forAscii shtypja e shkronjave te kodit ASCII
#include <iostream>
using namespace std;
int main()
{
int i;

for (i=65;i<=90;i++)
cout << char(i);
for (i=97;i<=122;i++)
cout << char(i);
cout << endl;
return 0;
}



Per te shtypur te gjitha karakteret e kodit ASCII, behet unaza:
for(i=1; i<=255, i++)

Unaza for mund t prdor edhe variabl t unazs q zvoglohet pr secilin hap t unazs:

#include <iostream>
using namespace std;
int main()
{
int i;
cout << "Numrimi ne zbritje" << endl;
i=10;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
43
for(i=10;i>0;i--)
{
cout<<"i="<<i<<"\n";
}

cout << "Fund" << endl;
return 0;
}


Format e unazs for

Unaza for mund t paraqitet edhe n trajtat e saj t zgjeruara, me m shum varibala t
fushave ose n trajta t shkurtra, kur nuk i jepen t tri komponentet q prcaktojn fillimin,
fundin dhe hapin me t cilin rritet/zvoglohet variabla e unazs.
Duke prdorur operatorin presje , (operatori presje sht nj element ndars i
shprehjeve dhe shrben pr ndarjen e dy e m shum shprehjeve n rastet kur zakonisht pritet
vetm nj shprehje), mund t prcaktohet m shum se nj shprehje n cilndo fush t unazs
for, si n shembullin vijues, ku supozojm se dshirojm t inicializojm m shum se nj
variabl t unazs:

for ( n=0, i=100 ; n!=i ; n++, i-- )
{
// urdhrat tjer...
}

Kjo unaz do t ekzekutohet pr 50 her (nse as variabla n e as ajo i nuk
modifikohen me ndonj urdhr tjetr prbrenda unazs):

Vriabla n fillon me vlern 0 kurse i me at 100 dhe kushti i unazs sht n!=i (n
jobaraz me i). Pasi q n rritet pr nj kurse i zbritet pr nj, ather kushti i unazs do t
bhet false (jo i sakt) pas hapit t 50, kur n dhe i do t jen t barabarta me 50.

Unaza for mund t prdoret edhe sa pr t insertuar ndonj vones kohore n nj pjes t
programit, duke dhn vetm kreun e unazs por pa urdhra prbrenda:

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
44
for ( n=0; n<1000000 ; n++);

Unaza for mund t paraqitet edhe n trajtn e shkurtr edhe pa ndonjrn ose n rastin
ekstrem edhe pa asnjrn prej fushave t saj, si n vijim:

for(;;)
{
cout << "Si quheni : ";
cin >> Emri;
}

me rast do t krijohej unaz e pafundme, si n rastin e unazs while me kushtin true.

Pr t mundsuar ndrprerjen e unazave t pafundme (ose edhe unazave t zakonshme pr
ndonj kusht t caktuar) prdoret urdhri break (angl break - ndrpreje, ndale).

Ndrprerja e unazs (break)

Prmes urdhrit break (ndrpreje, ndale) mund t bhet dalja e parakohshme prej unazs,
gjegjsisht ndrprerja e saj. Kjo mund t bhet, prmes testimit n ndonj kushti shtes, brenda
trupit t unazs. P.sh., kemi unazn pr shtypjen e numrave rendor, prej 1 deri n 10. Mirpor,
brenda unazs, vendosim kushtin, q nse vlera e variabls s unazs sht m e madhe se 5, t
ndrpritet unaza.

Jo
Po
Jo
Fillimi
n
S=0
i=1
S=S+i
i=i+1
i n
S
Fundi
i > 5
Po

Fillimi
n
S=0
S=S+i
S
Fundi
i=1; i<=10; i=i+1
i > 5
Po


// Programi Break - ndrprerja e unazs, dalja prej unaze
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=1;i<=10;i++)
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
45
{
if (i>5) break; //ndrprerja, dalja prej unaze
cout << "i=" << i << "\n";
}
return 0;
}



Sikur t mos ishte urdhri if , do t shtypeshin vlerat deri ne 10, mirpo kshtu porsa t
kalohet vlera 5, bhet dalja prej unaze (ndrprerja, ndalja e unazs).
Kaprcimi i hapit t unazs (Continue)

Prmes urdhrit Continue (angl. Continue vazhdo) n unazat for mund t bhet
kaprcimi i nj hapi t unazs. Kjo mund t bhet, prmes testimit n ndonj kushti shtes
brenda trupit t unazs. P.sh., kemi unazn pr shtypjen e numrave rendor, prej 1 deri n 10,
duke e prjashtuar (anashkaluar) 5-shin. Brenda unazs, vendosim kushtin, q nse vlera e
variabls s unazs sht i=5, t mos ekzekutohen urdhri i unazs, por t rritet hapi i unazs,
pra t vazhdohet n hapin tjetr t unazs (i=6).

i
Fillimi
n
Fundi
i<=n
Po
Jo
i=i+1
i=1
i=5
Po
Jo



// Programi Continue vazhdimi, kalimi i hapit t unazs
#include <iostream>
using namespace std;
int main()
{
int i;
for (i=1;i<=10;i++)
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
46
{
if (i = = 5) continue; //kalo hapin, pr i=5
cout << "i=" << i << "\n";
}
return 0;
}



Rast i ngjashm, sht kur krkohet t gjindet shuma e numrave prej 1 deri n n, por duke
prjashtuar treshin (3) , si n vijim S=
n
i
i
i
3
1



// Programi - Continue2
#include <iostream>
using namespace std;
int main()
{
int i,n;
double s=0;
cout << "Vlera e variables n=";
cin >> n;
for (i=1;i<=n;i++)
{
if (i==3) continue; //kaloje 3-shin
s=s+i;
}

cout << "Shuma s="
<< s
<< "\n";
return 0;
}
Jo
Po
Jo
Fillimi
n
S=0
i=1
S=S+i
i=i+1
i n
S
Fundi
i = 3
Po


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
47


Vargjet

Vargjet e numrave ose fushat numerike nj-dimensionale (vektort) dhe dy-dimensionale
(matricat) n C++ definohen si vijon:

int A[8]; /Vektori
double Z[3][5]; /Matrica

Indekset fillojn me vlern 0 (zero )

int A[6]; /6 antar - A[0], A[1], ..., A[5].
Deklarimi dhe inicializimi i vargjeve

Vargjet mund ti deklarojm dhe aty pr aty ti inicializojm me vlera, si n vijim:

int A[5]={7,2,4,1,3};

char Z[7]={'d','4','*','a','G','$'}; /Vektori me karaktere

const int m=5;
int A[m]={7,2,4,1,3};

const int m=4,n=3;
int K[m][n]={ {7,4,1},
{2,5,8},
{3,6,2},
{8,1,3} };


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
48
Vektort


// Programi vektor1
#include <iostream>
using namespace std;
int main()
{
const int m=5;
int i;
//Deklarimi dhe inicializimi i vektrorit
int A[m]={2,5,-1,6,3};
cout << "Vektori A"
<< "\n";
for (i=0;i<m;i++)
cout << A[i]
<< " ";
cout << "\n";
return 0;
}
Po
Jo
Fillimi
i=1
i=i+1
i m
Fundi
i,a
i
m,(a
i
,i=1,m)
A[5]={2,5,-1,6,3}





// Programi vektor2
#include <iostream>
using namespace std;
int main()
{
const int m=5;
int i;
int A[m]={2,5,-1,6,3};
for (i=0;i<m;i++)
cout << "A["
<< i
<< "]="
<< A[i]
<< "\n";
return 0;
}


Vrejeni me kujdes pjesn pr shtypje t antarve t vektorit:
...
cout << "A["
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
49
<< i
<< "]="
<< A[i]
<< "\n";
...

e cila normalisht, mund t shkruhet n nj rresht t vetm, si:

cout << "A[" << i << "]=" << A[i] << "\n";

Pjesa e shkruar brenda thonjzave , prsritet, ashtu si edhe sht dhn, kurse pjesa
jasht thonjzave sht vler q mirret prej programit. Kto pjes ndahen mes veti prmes
shenjs/operatorit t ridrejtitmi <<.

// Programi vektor3
#include <iostream>
using namespace std;
int main()
{
const int m=5;
int i, A[m];

//Krijimi i vektorit

for (i=0;i<m;i++)
{
cout << "A["
<< i+1
<< "]= ";
cin >> A[i];
}

// Shtypja e vektorit
cout << " Vektori i krijuar: \n";
cout << "A={ ";
for (i=0;i<m;i++)
cout << A[i]
<< " ";
cout << "}\n";

return 0;
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
50

//Formimi i vektorit prej vektori
#include <iostream>
using namespace std;
int main()
{
const int n=4;
int i,A[n]={1,2,3,4},B[n];
for (i=0;i<n;i++)
{
B[i]=2*A[i];
cout << "B["
<< i
<< "]="
<< B[i]
<< "\n";
}
return 0;
}

Po
Jo
Fillimi
i=1
b
i
=2a
i
i=i+1
i n
Fundi
i,b
i
n,(a
i
,i=1,n)





// Bashkimi i dy vektoreve G=B & A
#include <iostream>
using namespace std;
int main()
{
const int m=3,n=2;
int A[n]={1,2},
B[m]={3,4,5},
i,G[m+n];
for (i=0;i<m+n;i++)
{
if (i<m)
G[i]=B[i];
else
G[i]=A[i-m];
cout << "G["
<< i
<< "]="
<< G[i]
<< "\n";
}
return 0;
}

Jo
Po
Jo Po
Fillimi
i=1
g
i
=b
i
i=i+1
i(m+n)
Fundi
i,g
i
m,n,(a
i
,i=1,n),(bi,i=1,m)
i m
g
i
=a
i-m


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
51


Pasi q prfundon vendosja e vektorit t par (gjersa i<n), pr t vazhduar me vendosjen e
vektorit t dyt, duhet kthyer indeksin n zero, keshtu qe zbritet numri i antarve t vektorit t
par m (G[i]=A[i-m]).
Nse s pari vendoset vektori A, ather kushti do t ishte if (i<n) (sa numri i antarve
t vektorit A) dhe pr kushtin e plotsuar: G[i]=A[i], kurse kur i nuk sht (i<n), G[i]=B[i -n].

// Bashkimi i dy vektoreve G=A & B (Shtypja e vektorit ne fund)
#include <iostream>
using namespace std;
int main()
{
const int m=3,n=2;
int A[n]={1,2},
B[m]={3,4,5},
i,G[m+n];
for (i=0;i<m+n;i++)
{
if (i<n)
G[i]=A[i];
else
G[i]=B[i-n];
cout << "G[" << i << "]=" << G[i] << "\n";
}
cout << "\n Vektori i ri:\n\n G={";
for (i=0;i<m+n;i++)
{
cout.width(4);
cout << G[i];
}
cout << " }\n\n";
return 0;
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
52
Matricat

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

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


Fillimi
, a
m 1, i
n 1, j
ij
n m,
Fundi
Jo
Po
j=1
j=j+1
j n
i=1
Jo
Po
i=i+1
i m
ij
a


Pr t krijuar matricn me vlera t fardoshme, t cilat shfrytzuesi i jep prmes
tastiers, shtojm pjesn prmes s cils e krijojm matricn:

// Programi matrica2
#include <iostream>
using namespace std;
int main()
{
const int m=3, n=3;
int A[m][n];
int i,j;

//Krijimi i matrics
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
cout << "A[" << i+1 << "][" << j+1 << "]=";
cin >> A[i][j];
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
53
}
}
//Shtypja e matrics
cout << "Matrica A: " << "\n";
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout << A[i][j]
<< " ";
cout << "\n";
}
return 0;
}


Si shihet, pr t paraqitur indekset
prej 1 e jo prej 0, pra: A[1][1], si n
matematikt, n unazat pr krijimin e
matrics, kemi rritur vlerat e i-s dhe j-s
pr 1 (i+1 dhe j+1).

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
54

Veprimet me vektor/matrica dhe gjetja e antarve t caktuar t
vektorit/matrics

Shuma e antarve t matrics:

//Shuma e anetareve te matrices
#include <iostream>
using namespace std;
int main()
{
const int m=3,n=4;
int A[m][n]={ {1,2,3,4},
{5,6,7,8},
{-5,-6,-7,-8}
};
int i,j,s;
s=0;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
s=s+A[i][j];
cout << "Shuma s="
<< s
<< "\n";
return 0;
}


Fillimi
, a
m 1, i
n 1, j
ij
n m,
Fundi
Jo
Po
j=1
j=j+1
j n
i=1
Jo
Po
i=i+1
i m
S
S=S+
ij
a
S=0



Numrimi i antarve bhet duke marr nj numrator (p.sh. n) me vlern fillestare n=0;
para unazs dhe pastaj n unazn e cila i prshkon t gjith antart e vargut, sa her q gjendet
nj antar q e plotson kushtin e dhn, numratori rritet pr nj (n=n+1).
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
55
Jo
Po
Po
Jo
Fillimi
n=0
i=1
n=n+1
i=i+1
i m
n
Fundi
a
i
< 0
m,(a
i
,i=1,m)


//Numri i antareve negativ te vektorit
#include <iostream>
using namespace std;
int main()
{
const int m=5;
int A[m]={3,-2,7,-4,5},i,n;
n=0; //numratori fillimisht vlera zero
for (i=0;i<m;i++) //unaza q prshkon vargun
if (A[i]<0) //kushti pr numrim
n=n+1; //rritja e numratorit
cout << "Antar negativ n="
<< n
<< "\n";
return 0;
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
56
//Numri i antareve negativ
//dhe pozitiv te vektorit
#include <iostream>
using namespace std;
#include <cmath>
int main()
{
const int m=5;
int A[m]={2,-3,-7,4,1},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 << "Antar pozitiv p="
<< p
<< "\n";
cout << "Antar negativ n="
<< n
<< "\n";
return 0;
}

Jo
Po
Jo Po
Fillimi
i=1
n=n+1
i=i+1
i m
m,(a
i
,i=1,m)
a
i
< 0
p=p+1
n=0
p=0
n,p
Fundi


//Numri i anetareve mes 3 dhe 8
#include <iostream>
using namespace std;
#include <cmath>
int main()
{
const int n=5;
int A[n]={5,2,4,9,-7},i,k;
k=0;
for (i=0;i<n;i++)
{
if ((A[i]>3) && (A[i]<8))
k=k+1;
else
cout << "i="
<< i
<< " A["
<< i
<< "]="
<< A[i]
<< "\n";
}
cout << "Numri i krkuar k="
<< k
<< "\n";
return 0;
}

Jo
Jo
Po
Jo
Po
Fillimi
k=k+1
k
Fundi
Po
i=i+1
i n
k=0
i=1
a
i
>3
a
i
<8
n,(a
i
,i=1,n)
i,a
i


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
57

Antari m i madh (m i vogl)

Gjetja e antarit minimal/maksimal bhet, duke e deklaruar fillimisht antarin e par t
vargut, si antari minimal/maksimal: p.sh., Amax=A[0]; dhe pastaj prmes unazs q i
prshkon t gjith antart tjer t vargut, e krahasojm vlern momentale t Amax me t gjith
antart tjer t vargut. Nse gjindet ndonj q sht m i madh (pr rastin minimal m i vogl)
se antari momental maksimal, ather Amax, e merr vlern e tij dhe krahasimi vazhdon me
antart vijues t vargut.

Jo
Jo
Po
Fillimi
a
max
=a
i
a
max
Fundi
Po
i=i+1
i m
a
max
=a
1
i=2
a
max
a
i
m,(a
i
,i=1,m)


//Anetari me i madh i vektorit
#include <iostream>
using namespace std;
int main()
{
const int m=4;
int A[m]={3,7,5,9},i, Amax;
Amax=A[0];
for (i=1;i<m;i++)
{
if (Amax < A[i]) //nse ndonj antar sht m i madh
Amax = A[i]; //Amax e merr vlern e tij
}
cout << "Numri m i madh Amax ="
<< Amax
<< "\n";
return 0;
}



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
58
Sortimi radhitja sipas madhsis

Nj prej mnyrave t sortimit t antarve t vargut realizohet kshtu: fillohet me antarin
n pozitn e par dhe bhet krahasimi i antar nga pozita e par, me t gjith antart e vargut.
Pra: i pari-i dyti, i pari-i treti, ... i pari-i fundit. Sa her q vlerat q krahasohen nuk jan t
renditura si duhet, ua ndrrojm vendet. Kshtu, pasi t gjindet antari m i vogl (ose pr
renditjen e kundrt, antari m i madh) ai vendoset definitivisht n pozitn e par dhe
prcaktohet antari m i vogl. Pastaj, vazhdon procedura e njjt, pr t gjetur antarin e
ardhshm m t vogl, pr pozitn e dyt. Pra, bhet krahasimi i antarit n pozitn e dyt, me
t gjith antart e ardhshem: i dyti-i treti, i dyti-i katrti, ... i dyti i fundit, dhe njsoj, sa her
ka nevoj, dy antarve q krahasohen u ndrrohen vendet. Kur, prfundon gjetja e antarit pr
pozitn e dyt, procedura e njjt prsritet pr antart vijues. Nse vargu ka n antar, ather
duhet t bhn n-1 kalime t tilla (sepse krahasimi nuk bhet me vet -vehten dhe n fund
krahasohet antari i parafundit me at t fundit).

Pr krahasim, marrim dy numrator: i dhe j, dhe prdorn dy unaza (unaz brenda
unazs), ku unaza pr i fillon prej pozits s par dhe shkon deri tek pozita e parafundit, kurse
j fillon prej pozits s dyt (i+1) dhe shkon deri tek pozita e fundit. Pr secilin hap t unazs
s jashtme, i, unaza e brendshme, j, fillon prej pozits pr nj m t madhe: (j=i+1). N
secilin hap, krahasohen A[i]>A[j]. Nse ka nevoj q tu ndrrohen vendet, ather ndrrimi
i vendeve bhet duke prdorur nj variabl ndihmse, (si n figur) e cila s pari e merr vlern e
antarit t par (q t mos humbet ajo B=A[i]), pastaj antari i par e merr vlern e antarit t
dyt (A[i]=A[j]), dhe n fund, antari i dyt, e merr vlern e antarit t par prej variabls
ndihmse, e cila e ka ruajtur at prkohsisht (A[j]=B). Kjo sht e ngjashme me procedurn
e ndrrimit t prmbajtjes s dy enve. Nuk mund t ndrrohen ent e tyre, pa e pasur s pari nj
en t tret ndihmse, n t ciln e bartim prmbajtjen e ens s par, pastaj at prej s dyts e
kalojm n enn e par, kurse n fund, prej ens ndihmse, e kthejm prbrjen e par n enn e
dyt.

A[i] A[j]
B
1 3
2

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
59
Jo
Po
Jo
Po
Jo
Po
Fillimi
i=1
j=i+1
a
j
=b
i=i+1
i n-1
(ai,i=1,n)
Fundi
a
i
a
j

n,(a
i
,i=1,n)
a
i
=a
j
b=a
i
j=j+1
j n


//Sortimi i anetareve te vektorit
#include <iostream>
using namespace std;
int main()
{
const int n=4;
int A[n]={7,2,8,3},i,j,b;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
{
if (A[i]>A[j])
{
b=A[i];
A[i]=A[j];
A[j]=b;
}
}
cout << "A=[ ";
for (i=0;i<n;i++)
cout << A[i]
<< " ";
cout << "]"
<< "\n";
return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
60
Formimi i fushave numerike


=
Jo
Po
> <
Fillimi
j=1
a
ij
=1
j=j+1
j n
m,n
i

j
a
ij
=2
i=1
<
-
>
a
ij
=0
Jo
Po
i=i+1
i m
Fundi
, a
m 1, i
n 1, j
ij






//Formimi i matrices
#include <iostream>
using namespace std;
#include <cmath>
int main()
{
const int m=5,n=5;
int i,j,A[m][n];
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (i<j)
A[i][j]=1;
else
if (i==j)
A[i][j]=0;
else
A[i][j]=2;
cout << "Matrica e formuar"
<< "\n";
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
61
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout << A[i][j]
<< " ";
cout << "\n";
}
return 0;
}

Rezultati i ekzekutimit te programit:



Shembull:

Keni kujdes, mos te habiteni nga teksti i detyres, si p.sh: Te formohet matrica e cila
antart e diagonales dhe ata mbi diagonale i ka sa shuma e dy-fishit t rreshtit dhe trefishit t
kolons (shtylls), kurse antart nn diagonale i ka sa diferenca e trefishit t rreshtit dhe
kubit t kolons (shtylls). N rastet e ngjashme, gjithmo duhet t keni parasysh, q pr
antart A
ij
(ose si shnohen n program: A[i][j] ) t matrics A[m][n] rreshtin e prfaqson
indeksi i par i, kurse shtylln indeksi j, prandaj do t kmi:
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
62
=
Jo
Po
> <
Fillimi
j=1
a
ij
=2i+3j
j=j+1
j n
m,n
i

j
a
ij
=3i-j
2
i=1
<
-
>
a
ij
=2i+3j
Jo
Po
i=i+1
i m
Fundi
, a
m 1, i
n 1, j
ij


//Formimi i matrices
#include <iostream>
#include <math>
using namespace std;
int main()
{
const int m=4,n=4;
int i,j,A[m][n];
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (i<j)
A[i][j]=2*i+3*j;
else
if (i==j)
A[i][j]=i+j;
else
A[i][j]=3*i-j*j;
cout << "Matrica e formuar" << "\n";
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout << A[i][j]
<< " ";
cout << "\n";
}
return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
63




=
Jo
Po
> <
Fillimi
j=1
a
ij
=d
i
+j
j=j+1
j m
i

j
a
ij
=d
i
+8
i=1
<
-
>
a
ij
=d
i
Jo
Po
i=i+1
i m
Fundi
, a
m 1, i
m 1, j
ij
m,(d
i
,i=1,m)















www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
64

//Formimi i matrices prej vektorit
#include <iostream>
using namespace std;
int main()
{
const int m=5;
int D[m]={3,-7,4,9,-2};
int i,j,A[m][m];
for (i=0;i<m;i++)
for (j=0;j<m;j++)
if (i<j)
A[i][j]=D[i]+j;
else
if (i==j)
A[i][j]=D[i];
else
A[i][j]=D[i]+8;
cout << "Matrica e formuar"
<< "\n";
for (i=0;i<m;i++)
{
for (j=0;j<m;j++)
{
cout.width(5);
cout << A[i][j];
}
cout << "\n";
}
return 0;
}



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
65
Jo
Po
Fillimi
j=1
g
ij
=b
j
j=j+1
j m
j=1
g
ij
=i
i=1
Jo
Po
i=i+1
i m
Fundi
, g
m 1, i
m 1, j
ij
m,(b
i
,i=1,m)
Po Jo


//Formimi i matrices prej vektorit - Kolona e pare, vektori
#include <iostream>
using namespace std;
int main()
{
const int m=5;
int B[m]={9,2,-4,6,-5};
int i,j,G[m][m];
for (i=0;i<m;i++)
for (j=0;j<m;j++)
if (j==0)
G[i][j]=B[i];
else
G[i][j]=i;
cout << "Matrica e formuar"
<< "\n";
for (i=0;i<m;i++)
{
for (j=0;j<m;j++)
{
cout.width(5);
cout << G[i][j];
}
cout << "\n";
}
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
66



Bashkimi i dy matricave

a
0,0
... a
0,n-1
b
0,0
... b
m-1,n-1

... ... ... ... ... ...
a
m-1,0
... a
m-1n-1
b
m-1,0
... b
m-1,n-1




Jo
Po
Fillimi
j=1
d
ij
=a
ij
j=j+1
j 2m
j m
d
ij
=b
i,j-m
i=1
Jo
Po
i=i+1
i m
Fundi
, d
m 1, i
1,2m j
ij
Po Jo
, b
m 1, i
m 1, j
, a
m 1, i
m 1, j
m
ij ij
, ,


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
67

//Bashkimi i dy matricave
#include <iostream>
using namespace std;
int main()
{
const int m=3;
int A[m][m]={ {4,7,3},
{-2,3,9},
{8,-4,2}
};
int B[m][m]={ {-2,9,1},
{4,8,3},
{6,1,7}
};
int i,j,D[m][2*m];
for (i=0;i<m;i++)
for (j=0;j<(2*m);j++)
if (j<m)
D[i][j]=A[i][j];
else
D[i][j]=B[i][j-m];
cout << "Matrica e formuar"
<< "\n";
for (i=0;i<m;i++)
{
for (j=0;j<(2*m);j++)
{
cout.width(5);
cout << D[i][j];
}
cout << "\n";
}
return 0;
}



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
68
Po Jo
Fillimi
n
Fundi
, t
1,2n i
n 1, j
ij
Jo
Po
j=1
j=j+1
j n
i n
i=1
Jo
Po
i=i+1
i 2n
Po Jo
t
ij
=0 t
ij
=0
i=j
t
ij
=1


//Matrica e formuar prej dy matricave
#include <iostream>
using namespace std;
int main()
{
const int n=5;
int i,j,T[2*n][n];

for (i=0;i<(2*n);i++)
for (j=0;j<n;j++)
if (i<n)
if (i==j)
T[i][j]=1;
else
T[i][j]=0;
else
T[i][j]=0;

cout << "Matrica e formuar"
<< "\n";
for (i=0;i<(2*n);i++)
{
for (j=0;j<n;j++)
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
69
{
cout.width(5);
cout << T[i][j];
}
cout << "\n";
}
return 0;
}



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
70
Bashkimi i dy matricave n diagonale

F 0
0 G

Po Jo Jo Po
Fillimi
, g
l 1, i
k 1, j
, , f
m 1, i
n 1, j
ij ij
Fundi
, r
l m 1, i
k n 1, j
ij
Jo
Po
j=1
j=j+1
j n+k
i m
i=1
Jo
Po
i=i+1
i m+l
Po Jo
r
ij
=0
j n
r
ij
=g
i-m,j-n
r
ij
=f
ij
j n
r
ij
=0
m,n,l,k


//Bashkimi i dy matricave n diagonale
#include <iostream>
using namespace std;
int main()
{
const int m=3,n=4,l=4,k=3;
int F[m][n]={ {4,7,3,5},
{-2,3,9,2},
{8,-4,2,7}
};
int G[l][k]={ {-2,9,1},
{4,8,3},
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
71
{6,1,7},
{-9,4,2}
};
int i,j,R[m+l][n+k];
for (i=0;i<m+l;i++)
for (j=0;j<n+k;j++)
if (i<m)
if (j<n)
R[i][j]=F[i][j];
else
R[i][j]=0;
else
if (j<n)
R[i][j]=0;
else
R[i][j]=G[i-m][j-n];
cout << "Matrica e formuar"
<< "\n";
for (i=0;i<m+l;i++)
{
for (j=0;j<n+k;j++)
{
cout.width(5);
cout << R[i][j];
}
cout << "\n";
}
return 0;
}





www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
72
Krijimi i vektorit prej antarve t matrics

Nj rast specifik sht krijimi i vektorit prej antarve t matrics ose prej disa antarve
t caktuar t matrics, p.sh., vetm prej antarve negativ t matrics. Duhet pas parasysh se
si do t bhet indeksimi i antarve t matrics, n vektor. P.sh., le t themi se e kemi matricn
A(m,n) dhe prej saj do t krijojm vektorin B(p), ku p do te jete: p=m*n, pr arsye se
matrica i ka m*n antar. Pr antart e vektorit, do t kemi:

B[0] = A[0,0], B[1] = A[0,1], ... B[p-1] = A[m-1,n-1]. Nse marrim si shembull matricn
me 3 rreshta dhe 3 kolona, A(3,3), ather do t formohet vektori B(9), dhe do t kemi:

A[0][0] A[0][1] A[0][2]
A[1][0] A[1][1] A[1][2]
A[2][0] A[2][1] A[2][2]

=
1 2 3
4 5 6
8 7 9


B[9] = (1,2,3,4,5,6,7,8,9), ku indekset dhe vlerat e antarve do t jen:

B[0]=1 B[1]=2 B[2]=3 B[3]=4 B[4]=5 B[5]=6 B[6]=7 B[7]=8 B[8]=9

Pra, do t kemi:

B[0] = A[0,0] = 1
B[1] = A[0,1] = 2
B[2] = A[0,2] = 3
B[3] = A[1,0] = 4
B[4] = A[1,1] = 5
B[5] = A[1,2] = 6
B[6] = A[2,0] = 7
B[7] = A[2,1] = 8
B[8] = A[2,2] = 9

Pr t kaluar me radh npr antart e matrics, e dijm se na duhen dy unaza (unaz,
brenda unazs), pr i dhe pr j. Pra, numratort i dhe j, na shrbejn pr indekset e antarve t
matrics. Pr tua ndar kto vlera antarve prkats t vektorit, pr indekset e vektorit duhet
t definohet nj numrator i ri, p.sh., k, i cili do t rritet pr secilin antar t matrices, si n
pjesn vijuese t programit:

for (i=0;i<m;i++) //unaza pr rreshtat e matrics - i
for (j=0;j<n;j++) //unaza pr kolonat e matrics - j
{
k=k+1; //numratori pr antart e vektorit - k
B[k]=A[i][j]; //ndarja e vlerave antarve t vektorit
}

Pra, kjo pjes e programit, do t krijoj vektorin, prej matrics.
Shembull:


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
73
Jo
Po
Jo
Fillimi
j=1
k=k+1
z
k
=a
ij
j=j+1
j n
Fundi
i=1
Po
i=i+1
i m
, a
m 1, i
n 1, j
n, m,
ij
(z
i
,i=1,k)
k=0


//Krijimi i vektorit prej anetareve te matrices
//Rreshtimi i anetareve te matrices ne vektor
#include <iostream>
using namespace std;
int main()
{
const int m=4,n=3;
int A[m][n]={ {1,2,3},
{4,5,6},
{7,8,9},
{10,11,12}
};
int i,j,k,B[m*n];

//Krijimi vektorit
k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
k=k+1;
B[k]=A[i][j];
}

//Shtypja e vektorit t krijuar
cout << "B=[";
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
74
for (i=0;i<=k;i++)
{
cout.width(3);
cout << B[i];
}
cout << " ]\n";
return 0;
}



Ose, per rastin e vektorit me vlera te faredoshme:

//Krijimi i vektorit prej anetareve te matrices
//Rreshtimi i anetareve te matrices ne vektor
#include <iostream> using namespace std;
int main()
{
const int m=4,n=3;
int A[m][n]={ {3,-4,6},
{-9,1,2},
{7,-8,1},
{-2,5,-3}
};
int i,j,k,B[m*n];

//Krijimi vektorit
k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
k=k+1;
B[k]=A[i][j];
}

//Shtypja e vektorit t krijuar
for (i=0;i<=k;i++)
{
cout.width(3);
cout << "B[" << i <<"]="<<B[i]<<"\n";
}

return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
75



N fillim, para unazave pr i dhe pr j, kemi marr k=-1;, meqen se, n pjesn pr
krijimin e antarve t vektorit, s pari e kemi rritur numratorin k=k+1;, e pastaj e kemi
caktuar antartin: B[k]=A[i][j]; kshtu q t fillojm prej indeksit t par: k=0; dhe
B[0]=A[0][0];.

Nse, para unazs, numratorin e fillojm prej, k=0; ather, n unaz, s pari e japim
urdhrin: B[k]=A[i][j]; e pastaj, e rrisim numratorin: k=k+1;

Pra, ekzistojn dy opcione:
1. Fillohet prej k=-1, por n unaz s pari rritet numratori, e pastaj ndahet vlera (krijohet
antari i vektorit), ose
2. Fillohet prej k=0, por n unaz s pari ndahet vlera (krijohet antari i vektorit), e
pastaj rritet numratori k.

k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
k=k+1;
B[k]=A[i][j];
}
k=0;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
B[k]=A[i][j];
k=k+1;
}

Kjo sht me rndsi, sepse kur t shtypen pastaj antart e vektorit, me pjesn:

//Shtypja e vektorit
for (i=0;i<=k;i++)
{
cout.width(3);
cout << "B[" << i <<"]="<<B[i]<<"\n";
}

duhet pas parasysh, se ku ka mbetur vlera e fundit e numratorit k, prej unazave paraprake pr i
dhe pr j, q ishin pr krijim t antarve t vektorit. Kur fill ohet prej k=-1, ather vlera e
fundit e indeksit t vektorit, do t jet pikrisht k, kshtu q kur t shtypet vektori, unaza shkon
deri n k, pra duke e prfshir edhe vlern e k-s, i<=k: for (i=0;i<=k;i++).

Mirpo, n rastin kur fillon numratori prej k=0, ather duke e rritur vlern e numratorit k, pr
secilin antar t ardhshm t matrics, n fund numratori rritet edhe nj her, pas krijimit t
antarit t fundit t vektorit. Kshtu, kur t shtypet me unazn vijuese vektori, pr t shtypur
numrin e sakt t antarve t vektorit, unaza shkon si:
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
76

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

pra, i<k; pa e prfshir edhe vlern e fundit, k, sepse ajo sht pr nj m e madh se indeksi i
fundit i vektorit t formuar. Me shembuj konkret, do t shihen m mir pasojat e ksaj
zgjedhjeje.

Kryesorja, sht me rndsi t dihet, se numratori k, na e tregon numrin e antarve t vektorit
t formuar. Kjo sht sidomos e rndsishme, kur vektori formohet duke zgjedhur vetm
antart e caktuar t matrics, p.sh., vetm ata negativ. Sepse, vetm duke e prcjelluar
numratorin k, do ta dijm se sa antar t matrics, kan kaluar n vektor.

Fillimisht, meqense nuk e dijm se sa antar t matrics do t kalojn n vektor, ather e
rezervojm (deklarojm) hapsirn pr vektorin B, si: int B[m*n], sa sht numri i t gjith
antarve t matrics, q njherit sht edhe maksimumi i mundshm, pr rastin special kur t
gjith antart e matrics e plotsojn kushtin pr t kaluar n vektor.

Shembull:

Po
Jo
Jo
Po
Jo
Fillimi
j=1
z
k
=a
ij
j=j+1
j n
Fundi
i=1
Po
i=i+1
i m
, a
m 1, i
n 1, j
n, m,
ij
(z
i
,i=1,k)
k=0
a
ij
< 0
k=k+1

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
77


//Krijimi i vektorit prej anetareve negativ te matrices
#include <iostream>
using namespace std;
int main()
{
const int m=3,n=3;
int A[m][n]={ {3,-4,6},
{-9,1,2},
{7,-8,1}
};
int i,j,k,B[m*n];

//Krijimi i vektorit
k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (A[i][j]<0)
{
k=k+1;
B[k]=A[i][j];
}
cout << "B=[";

//Shtypja e vektorit
for (i=0;i<=k;i++)
{
cout.width(3);
cout << B[i];
}
cout << " ]\n";
return 0;
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
78
Jo
Po
Fillimi
j=1
x=x+1
j=j+1
j n
a
ij
< 0
y=y+1
i=1
Jo
Po
i=i+1
i m
Fundi
(f
i
,i=1,x)
Po Jo
, a
m 1, i
n 1, j
n, m,
ij
y=0
x=0
g
y
=a
ij
f
x
=a
ij
(g
i
,i=1,y)


// Krijimi i vektoreve me anetaret pozitiv dhe negativ te matricave
#include <iostream>
using namespace std;
int main()
{
const int m=4,n=3;
int A[m][n]={ {3,-4,6},
{-9,1,2},
{7,-8,1},
{-2,5,-3}
};
int i,j,x,y,F[m*n],G[m*n];
x=-1;
y=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (A[i][j]<0) //Krijimi i vektorit negativ

{
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
79
x=x+1;
F[x]=A[i][j];
}
else //krijimi i vektorit pozitiv
{
y=y+1;
G[y]=A[i][j];
}

cout << "F=[";

//Shtypja e vektorit negativ
for (i=0;i<=x;i++)
{
cout.width(3);
cout << F[i];
}
cout << " ]\n";

cout << "G=[";
//Shtypja e vektorit pozitiv

for (i=0;i<=y;i++)
{
cout.width(3);
cout << G[i];
}
cout << " ]\n";
return 0;
}




www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
80
Funksionet

Funksioni sht nj pjes e veant e programit (nj nn-program), nj modul q
funksionon i pavarur nga pjesa tjetr e programit, duke pranuar parametrat hyrs (t definuar
formalisht) dhe duke kthyer rezultatin e llogaritjes s br prbrenda tij, n pjesn e programit e
cila e ka thirrur funksionin. Pra, funksioni duket si nj kuti e mbyllur, e cila i ka hyrjet, kyjet
pr vlerat hyrse dhe daljen pr kthimin e rezultatit t funksionit n programin kryesor. P.sh.,
nse kemi nj kuti (funksion) me emrin Shuma, q krkon dy vlera hyrse, x dhe y (si n
figur), pr t kthyer (pr t dhn n dalje) rezultatin s, q sht shuma e dy vlerave hyrse,
thuhet se kemi funksionin me dy parametra hyrs (t cilt i deklarojm formalisht me fardo
emri, prandaj edhe quhen parametra formal). Pr t fituar rezultatin n dalje, ksaj kut ije duhet
sjell n hyrje dy vlera (variabla aktuale, pr t cilat e dshirojm rezultatin e shums). Se ka
ndodh n brendi t kutis (funksionit) nuk na intereson, kryesorja e dijm se nse i japim n
hyrje dy vlera (x dhe y), n dalje e fitojm shumn e tyre (x+y). Prandaj, sa her q programi ka
nevoj pr shumn e dy numrave, ai e thrret funksionin: Shuma (x,y) duke ia prcjellur atij
vlerat aktuale pr parametrat formal, p.sh. Shuma(7,3), (pra kemi pr x=7, dhe pr y=3).
Funksioni thirret me aq variabla, me sa sht deklaruar. Pra, patjetr duhet ti jipen
saktsisht aq variabla (vlera aktuale), sa parametra formal ti ket t deklaruar. Prmes
shembujve, do t jet e qart se si deklarohet dhe si thirret funksioni.



Forma e prgjithshme e funksionit:

tipi emri(tipi1 f1,tipi2 f2,...,tipin fn)
{
urdhri/at;
return rezultati;
}

ku jan:
tipi - tipi i rezultatit t funksionit.
emri - emri i funksionit.
tipi1,... tipin - tipet e parametrave formal.
f1, f2, ..., fn - parametrat formal.
urhdri/at - urhdri/at q ekezekutohen brenda funksionit
r - rezultati t cilin e kthen funksioni.

s = x + y
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
81
Bllok skema e programit m nnprogram duket si n vijim:
Shuma(x,y)
r=x+y
return r
Fillimi
a,b
s
Fundi
s=Shuma(a,b)
a,b
(a+b)
a b
Programi kryesor Nn-programi (funksioni)


Pra, n skema, blloku pr
thirrje t nnprogrameve
paraqitet si :


Programi kryesor e thrret funksionin (nnprogramim) pr tia kryer nj llogaritje. Funksioni e
kryen llogaritjen duke i prdorur parametrat aktual t pranuar prej programit kryesor dhe n renditjen e
definuar duke i zvendsuar ata n vend t parametrave t tij formal. N fund, funksioni, vlern e
llogarituar ia kthen programit kryesor me urdhrin return dhe programi kryesor vazhdon aty ku e
kishte ndrprer punn pr t pritur rezultatin e krkuar prej nnprogramit.

// Programi Funksioni1
#include <iostream>
using namespace std;
double Shuma(int x,int y); //Prototipi i funksionit
int main()
{
double s;
int a=7,b=3;
s=Shuma(a,b); /*Thirrja e funksionit
- percjellja e vlerave aktuale*/
cout << "Shuma s="
<< s
<< "\n";
return 0;
}
// Nnprogrami Shuma
double Shuma(int x,int y) //Deklarimi i funksionit
{
double r; //variablat e brendshme te funksionit
r=x+y; //urdhrat e funsionit
return r; //kthimi i rezultatit t funksionit
}

Pra, kur t thirret funksioni shuma, me urdhrin: s=Shuma(a,b);, ather programi
kryesor e prcjell ekzekutimin n funksionin e thirrur, duke ia prcjell vlerat aktuale a=7 dhe
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
82
b=3, pr parametrat formal x dhe y. N brendi t funksionit, llogaritet variabla e shums r =
x+y, e cila n rasitin aktual llogarit r=a+b, sepse n hyrjen x i ka ardh vlera a, kurse n
hyrjen y i ka ardh vlera b. Kt variabl (shumn r) funksioni ia kthen programit prmes
urdhrit: return r;. Kshtu, del se urdhri i programit s=Shuma(a,b); n fakt sht:
s=r; , ku r - sht rezultati i kthyer prej funksionit, me urdhrin: return r;.

Funksionet void

Funksionet t cilat nuk kthejn rezultat fare, quhen funksione void (angl. boshe, t
zbrazta, shterpe) dhe definohen si funksione t tipit void. Urdhri i tyre pr kthim t
rezultateve shkruhet vetem return;.

Inline funksionet

Trupi i funksionit zakonisht paraqitet n fund t programit. Nse komplet funskioni
zhvillohet n fillim t programit, n vij (ang. In line) t rrjedhs s programit, ather quhet
Inline function.

// Programi funksioni_inline
#include <iostream>
using namespace std;
inline double prodhimi(int a,int b)
{
double y;
y=a*b;
return y;
}

int main()
{
double p;
p=prodhimi(5,4);
cout << "Prodhimi sht p="
<< p
<< "\n";
return 0;
}

prodhimi(a,b)
y=a*b
return y
Fillimi
a,b
p
Fundi
p=prodhimi(5,4)


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
83
Shembuj funksionesh

Funksionet mund ti krijojm pr t gjitha rastet e llogaritjeve t cilat kryhen shpeshher. Pr t
dizajnuar, funksionin duhet t mendojm pr at se sa variabla jan t domosdoshme pr t
mundsuar llogaritjen e rezultatit dhe ato i deklarojm si parametra t funksionit.

P.sh, funksioni pr llogaritjen e shums s antarve t vargut (seris s numrave):

Forma universale e shums se seris sht:
S =
b
a i
d i c ) * (

Ather, ne do t krijojm nj funksion t prgjithsuar i cili do t mund t llogaris shumat pr
t gjitha format e mundshme t serive t tilla.
P.sh, shuma e antarve te njpasnjeshem, prej m gjer n n do t ishte:
S =
n
m i
i
(Pra, shihet se do te kemi: a=m, b=n, c=1, d=0)

Fillimi
m,n
s
Fundi
s=ShumaVargut(m,n,1,0)
Shuma(a,b,c,d)
return S
1 0 m n
Po
S=0
i=a
S=S+(c*i+d)
i=i+1
i b



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

double ShumaVargut(int a, int b, int c, int d);
int main()
{
int m,n;
double Shuma;
m=0;
n=5;
Shuma=ShumaVargut(m,n,1,0); //Funks. per shumen e vargut

cout << "Shuma S=: " << Shuma;
cout << "\n";

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
84
return 0;
}
double ShumaVargut(int a,int b, int c, int d)
{
int i,j;
double S;
S=0;
for (i=a;i<=b;i++)
{
S=S+(c*i+d);
}
return S;
}

*****************************************************************

Te llogaritet:
S =
n
i
i
2
) 2 * 3 ( (Tani, shihet se do te kemi: a=2, b=n, c=3, d=2)

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

double ShumaVargut(int a, int b, int c, int d);
int main()
{
int n;
double Shuma;
cout<<Jepe vleren per n:;
cin>>n;
Shuma=ShumaVargut(2,n,3,2); //Funks. per shumen e vargut

cout << "Shuma S=: " << Shuma;
cout << "\n";

return 0;
}
double ShumaVargut(int a,int b, int c, int d)
{
int i,j;
double S;
S=0;
for (i=a;i<=b;i++)
{
S=S+(c*i+d);
}
return S;
}





www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
85
Edhe pr rastin e prodhimit, forma universale e prodhimit te seris se numrave sht:
P =
b
a i
d i c ) * (

Shembull:
P =
n
m i
i ) 1 ( (N kete rast do te kemi: a=m, b=n, c=1, d=1)

Fillimi
m,n
Prodhimi
Fundi
Prodhimi=ProdVarg(m,n,1,1)
ProdVarg(a,b,c,d)
return P
Po
P=1
i=a
P=P*(c*i+d)
i=i+1
i b


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

double ProdVarg(int a, int b, int c, int d);
int main()
{
int m,n;
double Prodhimi;
m=0;
n=5;
Prodhimi=ProdVarg(m,n,1,1); //Funks. per prod. e vargut

cout << "Prodhimi P=: " << Prodhimi;
cout << "\n";

return 0;
}

double ProdVarg(int a,int b, int c, int d)
{
int i,j;
double P;
P=1;
for (i=a;i<=b;i++)
{
P=P*(c*i+d);
}
return P;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
86
Shembull:
P =
n
m i
i ) 4 2 ( (N kete rast do te kemi: a=m, b=n, c=2, d=4)

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

double ProdVarg(int a, int b, int c, int d);
int main()
{
int m,n;
double Prodhimi;
cout<<Jepni vlerat per kufijte m dhe n:;
cin>>m>>n;

Prodhimi=ProdVarg(m,n,2,4); //Funks. per prod. e vargut

cout << "Prodhimi P=: " << Prodhimi;
cout << "\n";

return 0;
}

double ProdVarg(int a,int b, int c, int d)
{
int i,j;
double P;
P=1;
for (i=a;i<=b;i++)
{
P=P*(c*i+d);
}
return P;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
87
T llogaritet:
Y =3
n
i
i
1
) 2 3 ( +
2
2
) 1 * 2 (
n
i
i + 4
n
i
i
1
) 3 (

Fillimi
m,n
Y
Fundi
Y=Shuma(1,n,3,2)+Shuma(2,n+2,2,1)+Prodhimi(1,n,1,3)


Shuma(a,b,c,d)
return S
Po
S=0
i=a
S=S+(c*i+d)
i=i+1
i b
Prodhimi(a,b,c,d)
return P
Po
P=1
i=a
P=P*(c*i+d)
i=i+1
i b


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

double Shuma(int a, int b, int c, int d);
double Prodhimi(int a, int b, int c, int d);
int main()
{
int n;
double Y;
cout<<Jepe vleren per n:;
cin>>n;

Y=3*Shuma(1,n,3,2)+Shuma(2,n+2,2,1)+Prodhimi(1,n,1,3);

cout << "Shuma Y= " << Y;
cout << "\n";

return 0;
}
double Shuma(int a,int b, int c, int d)
{
int i;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
88
double S;
S=0;
for (i=a;i<=b;i++)
{
S=S+(c*i+d);
}
return S;
}
double Prodhimi(int a,int b, int c, int d)
{
int i;
double P;
P=1;
for (i=a;i<=b;i++)
{
P=P*(c*i+d);
}
return P;
}

Pr paraqitje m t leht, programin kryesor mun ta bjm edhe si vijon:

Fillimi
m,n
Y=S1+S2+P1
Fundi
P1=Prodhimi(1,n,1,3)
S1=Shuma(1,n,3,2)
S2=Shuma(2,n+2,2,1)



Shuma(a,b,c,d)
return S
Po
S=0
i=a
S=S+(c*i+d)
i=i+1
i b
Prodhimi(a,b,c,d)
return P
Po
P=1
i=a
P=P*(c*i+d)
i=i+1
i b
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
89
Llogaritja e faktorelit


Fillimi
n
Fakt
Fundi
Fakt=Faktoriel(n)
Faktoriel(m)
return F
Po
F=1
i=1
F=F*i
i=i+1
i m

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

double Faktoriel(int m);
int main()
{
int n;
double Fakt;
n=5;

Fakt=Faktoriel(n); //Funks. per Faktoriel

cout << "Faktorieli F = <<n<<! = " << Fakt;
cout << "\n";

return 0;
}

/* Funksioni per llogaritje te faktorielit */
double Faktoriel(int m) {
int i;
double F;
F=1;
for (i=1;i<=m;i++)
{
F=F*i;
}
return F;
}

Pra, shihet se funksionit pr Faktoriel, i nevojitet vetm nj variabl hyrse (kufiri pr llogaritje
t faktorielit).
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
90
Shembull:

T llogaritet: Fakt = n! + (2n)! (2n-1)!


Fillimi
n
Fakt
Fundi
Fakt=Faktoriel(n)+Faktoriel(2*n)-Faktoriel(2*n-1)
Faktoriel(m)
return F
Po
F=1
i=1
F=F*i
i=i+1
i m

// Programi Funksion4
// Fakt = n! + (2n)! (2n-1)!
#include <iostream>
using namespace std;

double Faktoriel(int m);
int main()
{
int n;
double Fakt;
n=2;

Fakt=Faktoriel(n)+Faktoriel(2*n)-Faktoriel(2*n-1);

cout << "Faktorieli F = " << Fakt;
cout << "\n";

return 0;
}

/* Funksioni per llogaritje te faktorielit */
double Faktoriel(int m) {
int i;
double F;
F=1;
for (i=1;i<=m;i++)
{
F=F*i;
}
return F;
}



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
91
Rekurzioni

Rekurzioni, paraqet thirrjen e vet funksionit brenda funksionit, pra thirrjen e vet -vehtes...

// Programi Faktoriel-Rekurzioni
#include <iostream>
using namespace std;

double Faktoriel(int m);
int main()
{
int n;
double Fakt;
n=5;

Fakt=Faktoriel(n); //Funks. per Faktoriel

cout << "Faktorieli F = "<<n<<"! = " << Fakt;
cout << "\n";

return 0;
}

/* Funksioni per llogaritje te faktorielit - rekurzioni */
double Faktoriel(int m) {
int i;
double F;
F=1;
for (i=1;i<=m;i++)
{
F=m*Faktoriel(m-1); // ketu ndodhe rekurzioni
}
return F;
}


ose, per per vleren hyrese n, te dhene nga shfrytezuesi:

//Llogaritja e faktorielit, permes rekurzionit
#include <iostream>
using namespace std;
int main()
{
int n;
int fakt;

cout << "Jepni vleren per n: ";
cin >> n;

fakt = Faktoriel (n);

cout << n << "! = " << fakt << endl;

return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
92

/* Funksioni per llogaritje te faktorielit - rekurzioni */
int Faktoriel (int n)
{
//(funksioni pa variabla te brendshme plotesuese, si F, i, etj.)
if (n > 1) { //kontrollojme vleren hyrese n
return n * Faktoriel (n - 1);
}
else {
return 1;
}
}

Funksionet dhe Vektort

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

// Programi FunksionVektor2
#include <iostream>
using namespace std;
int ShumaAntVektorit(int X[],int n);
int main()
{
const int m=5;
int Shuma;
int A[m]={1,2,3,4,5};
Shuma=ShumaAntVektorit(A,m);
cout << "Shuma e anetareve te vektorit: "
<< Shuma
<< "\n";
return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
93
int ShumaAntVektorit(int X[],int n)
{
int i,s;
s=0;
for (i=0;i<n;i++)
s=s+X[i];
return s;
}

// Programi FunksionVektor3 Sortimi dhe shtypja me funksion
#include <iostream>
using namespace std;
void SortoVektorin(int X[],int n);
void ShtypeVektorin(int X[],int n);
int main()
{
const int m=5;
int Shuma;
int A[m]={3,2,1,4,5};

SortoVektorin(A,m);
ShtypeVektorin(A,m);

return 0;
}

void SortoVektorin(int X[],int n)
{
int i,j,b;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
{
if (X[i]>=X[j])
{
b=X[i];
X[i]=X[j];
X[j]=b;
}
}
return;
}

void ShtypeVektorin(int X[],int n) // funksion i tipit void
{
int i;
cout << "X=[ ";
for (i=0;i<n;i++)
cout << X[i] //shtypja
<< " ";
cout << "]"
<< "\n";
return; //nuk kthen rezultat, sepse punen (shtypjen) e kryen
// ne brendi te funksionit, prandaj eshte void
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
94
Pra, funksioni void ShtypeVektorin(int X[],int n), nuk kthen rezultat,
sepse veprimet i kryen ne brendi te funksionit, keshtu qe ska nevoje te ktheje rezultat fare.
Programi kryesor, i cili e e ka thirrur funksionin per ta kryer punen e caktuar, ne kete rast ska
nevoje per rezultat kthyes prej funksionit, por vetem kerkon qe funksioni ta kryej nje pune te
caktuar (ne kete rast shtypjen e rezultatit (vektorit) ne dalje).

// Programi FunksionVektor4 Minimumi dhe Maximumi me funksion
#include <iostream>
using namespace std;
void ShtypeVektorin(int X[],int n);
int AntMaxVektorit(int X[],int n);
int AntMinVektorit(int X[],int n);

int main()
{
const int m=5;
int Amin, Amax;

int A[m]={3,2,1,4,5};

ShtypeVektorin(A,m);

Amin=AntMinVektorit(A,m);
Amax=AntMaxVektorit(A,m);

cout<< "\n Antari min. i vekt: " <<Amin << endl;
cout<< "\n Antari max. i vekt: " <<Amax << endl;

return 0;
}

void ShtypeVektorin(int X[],int n)
{
int i;
cout << "X=[ ";
for (i=0;i<n;i++)
cout << X[i]
<< " ";
cout << "]"
<< "\n";
return;
}

int AntMaxVektorit(int X[],int n)
{
int i,j,Xmax;
Xmax=X[0];
for (i=1;i<n;i++)
{
if (X[i]>Xmax)
Xmax=X[i];
}
return Xmax;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
95
int AntMinVektorit(int X[],int n)
{
int i,j,Xmin;

Xmin=X[0];
for (i=1;i<n;i++)
{
if (X[i]<Xmin)
Xmin=X[i];
}
return Xmin;
}

Funksionet dhe matricat

// Programi FunksionMatrica1
#include <iostream>
using namespace std;
const int n=3;
void FormoMatricen(int A[][n],int m);
int main()
{
const int m=3;
int i,j,A[m][n];

FormoMatricen(A,m); //Thirre funksionin per krijim te matrices

cout << "Matrica A: \n";
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout << A[i][j] << " ";
cout << "\n";
}
return 0;
}
void FormoMatricen(int A[][n],int m)
{
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
A[i][j]=i+j;
}
return;
}



// Programi FunksionMatrica2
#include <iostream>
using namespace std;
const int n=3;
double ShumaAntMatrices(int X[][n],int m);
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
96
int main()
{
const int m=2, n=3;
double Shuma;
int A[m][n]={ {1,2,3},
{4,5,6},
};
Shuma=ShumaAntMatrices(A,m);
cout << "Shuma e anetareve te matrices S="
<< Shuma
<< "\n";
return 0;
}
double ShumaAntMatrices(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;
}

// Programi FunksionMatrica2
#include <iostream>
using namespace std;
const int n=3;
double ShumaAntPozMat(int X[][n],int m);
int main()
{
const int n=3;
int i,j,m;
int X[10][n];
cout<< "Sa rreshta do t'i kete matrica: ";
cin >> m;

double Shuma;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
cout << "X[" << i+1 << "][" << j+1 << "]=";
cin >> X[i][j];
}
}

Shuma=ShumaAntPozMat(X,m);
cout << "Shuma e anetareve pozitiv te matrices S="
<< Shuma
<< "\n";
return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
97
double ShumaAntPozMat(int X[][n],int m)
{
int i,j;
double s;
s=0;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
if (X[i][j]>0)
s=s+X[i][j];
}
return s;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
98
Prfshirja e fajllave me direktivn #include

Zakonisht direktivn #include, e kemi prdorur pr ti thirrur librarit e gatshme t
C++-it. Kllapat e drejta me simbolet < dhe > q prdoret tek : #include <iostream> using
namespace std;, i tregojn C++-it se n program prfshihet edhe ndonj header file nga
folderi i zakonshm i C++, aty ku ruhen header fajllat. Nse dshirojm, q n program ta
prfshijm nj fajll tjetr, q sht i ruajtur brenda folderit t njjt, ku sht i ruajtur edhe
programi aktual, ather prdoret forma:

#include Emri_i_fajllit.h. Pra, emri shkruhet brenda thojzave t zakonshme.
Header fajlli, krijohet duke shkuar prmes menys: File New, dhe zgjedhet C/C++ Header
File. Emertohet me emrin me prapashtese .h dhe pastaj shkruhet dhe ruhet si f ajllat e zakonshem
burimor t C++.

P.sh., shpesh here kemi nevoj q t shtypim adresn ton pr kontakt:

Avni Rexhepi
Fakulteti Elektroteknik
Prishtin
Tel: 044 174 374

Tr kt tekst mund ta shtypim me urdhrat vijues, t ruajtur n nj Header File (Heder
fajll) t C++, Adresa.h, si:

//Fajlli Adresa.h
cout<<Avni Rexhepi \n;
cout<<Fakulteti Elektroteknik \n;
cout<<Prishtin\x89 \n;
cout<<Tel: 044 174 374 \n;

Pastaj, n ndonj program t C++, mund ta thrrasim pr ekzekutim fajllin Adr esa.h, sa
her q t na duhet shtypja e adress:

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

int main()
{
cout<< Jungjatjeta \n\n;
#include Adresa.h //Thirrja e heder fajllit
return 0;
}

Pra, kjo do t jep efektin e njjt, sikur n rastin:

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

int main()
{
cout<< Jungjatjeta \n\n;

cout<<Avni Rexhepi \n;
cout<<Fakulteti Elektroteknik \n;
cout<<Prishtin\x89 \n;
cout<<Tel: 044 174 374 \n;

return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
99
Thirrja e funksionit, nga fajlli tjetr

Edhe funksionet mund t shkruhen dhe t ruhen si fajlla t veant, e pastaj t prdoren n
shum programe t ndryshme, sipas nevojs. N rast t till, prfshirja e funksionit brenda
programit, bhet me direktivn preprocesorike #include.

P.sh., n folderin: C:\Shembuj kemi fajllat: FunksioniMeInclude.cpp dhe
FormoVektorin.h. Ather n programin kryesor shkruajm:

// Program-Funksioni i thirrur me #include
#include <iostream>
using namespace std;
#include "FormoVektorin.h" //prfshije fajllin FormoVektorin.h.

int main()
{
const int m=5;
int i,A[m];
FormoVektorin(A,m);
cout << "Vektori i formuar\n";
for (i=0;i<m;i++)
cout << A[i]
<< " ";
cout << "\n";
return 0;
}

Kurse Header fajllin FormoVektorin.h, e kemi:

//Nenprogrami ne fajll te veqante
//Funksioni FormoVektorin(int X[],int n)

void FormoVektorin(int X[],int n)
{
int i;
for (i=0;i<n;i++)
X[i]=2*i;
return;
}

Nse fajlli i funksionit q thirret n programin kryesor nuk ndodhet n t njjtin folder me
programin kryesor, ather kur t prfshihet n program me direktivn #include, duhet t
shkruhet shtegu i plot i fajllit, si p.sh., nse funksioni ndodhet n shtegun:
C:\Shembuj\Funksionet\FormoVektorin.h, ather do t duhej t shkruhet:

#include "C:\Shembuj\Funksionet\FormoVektorin.h"
//prfshije fajllin FormoVektorin.h.

Emri i fajllit mund t jepet sipas dshirs, nuk sht e thn t ket emrin njsoj si vet
funksioni.
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
100
Shembull:

Fajlli: Include2.cpp programi kryesor

//Llogaritja e faktorielit, permes rekurzionit
#include <iostream>
using namespace std;
#include "Faktorieli.h"
int main()
{
int n;
int fakt;

cout << "Jepni vleren per n: ";
cin >> n;

fakt = Faktoriel (n);

cout << n << "! = " << fakt << endl;

return 0;
}

Fajlli: Faktorieli.h Heder fajlli

/* Funksioni per llogaritje te faktorielit */
int Faktoriel (int n)
{
//(funksioni pa variabla te brendshme plotesuese, si F, i, etj.)
if (n > 1) { //kontrollojme vleren hyrese n
return n * Faktoriel (n - 1);
}
else {
return 1;
}
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
101
Mund t prfshihen edhe nga disa heder fajlla n nj program. Thirrja e heder fajllit
mund t behet edhe n rrjedh e sipr t programit.

Shembull:

//Fajlli: Shtypja.cpp programi kryesor
//Llogaritja e faktorielit, permes rekurzionit
#include <iostream>
using namespace std;
#include "Shtype1.h" // Prfshirja e fajllit Shtype1.h

int main()
{
Shtype(); //Funksioni prej Shtype1.h
#include "Shtype2.h" //thirrja e Shtype2.h
return 0;
}

//Fajlli: Shtype1.h
int i,j;
void Shtype()
{
for (i=0;i<10;i++)
cout<<"Kosova\n";

for (j=0;j<5;j++)
cout<<"Prishtina\n";

return;
}

//Fajlli: Shtype2.h
cout << "Jungjatjeta\n";
cout << "Mire se erdhet\n";

Rezultati n dalje:


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
102
Direktiva #define

Direktiva #define mund t prdoret pr definime t ndryshme n programe dhe
funksionon si urdhri pr zvendsim t fjals me nj fjal tjetr n editort e teksteve (si. p.sh.
Word-i). Formati i saj sht:

#define ARGUMENTI1 argumenti2

Fjala ARGUMENTI1 sht nj fjal e vetme, pa hapsira. Pr emrtim prdoren rregullat e
njjta si pr variablat. Mes emrave t dy argumenteve, duhet t ket s paku nj hapsir. Kudo
n program q t shkruhet ARGUMENTI1 sht njsoj, sikur t ishte shkruar argumenti2.

Shembull:

#include <iostream>
using namespace std;
#define Emri "Avni Rexhepi"
int main()
{
cout<< Emri << endl;
return 0;
}


Direktiva #define mund t prdoret edhe pr definim t funksioneve t ndryshme:

#include <iostream>
using namespace std;

#define MINIMUMI 1
#define MAKSIMUMI 10
#define SHUMA X1+X2
#define Katrori(a) (a*a)

int main()
{
int i,X1,X2,a;

cout<<"Jepni vlerat per X1 dhe X2: ";
cin>>X1>>X2;
cout<< "Shuma = X1+X2 = "<<SHUMA<<endl;
cout<< "Katrori (X1) = " << Katrori(X1) <<endl;

for (i=MINIMUMI;i<=MAKSIMUMI;i++)
cout << i << endl;

return 0;
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
103



Me direktivn #define, mund t bhet edhe definimi i urdhrave t C++, me fjal t gjuhs
shqipe, si p.sh:. pr cout shtyp, pr cin - lexo, pr endl - rreshtiri;

#include <iostream>
using namespace std;

#define shtyp cout
#define lexo cin
#define rreshtiri endl

int main()
{
int i,a,b;

shtyp<<"Jepni vlerat per a dhe b: ";
lexo>>a>>b;

shtyp<< "Shuma = a+b = "<<a+b<<rreshtiri;

for (i=1;i<=10;i++)
shtyp << i << rreshtiri;

return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
104
Shtojca A - Probleme praktike

Numrat e rastit n C++

Funksionet srand() and rand() - Libraria standarde e C++ ofron nj vegl pr
gjenerimin e numrave t rastit duke prdorur funksionin rand( ) (angl. random i rastit) .
Natyrisht, kta numra nuk jan me t vrtet t rastit, por jan pseudo-numra t rastit. Ata
gjenerohen n nj varg i cili jep iluzionin e t qenit i rastit, sepse, megjithat, ky varg i numrave
do t prsritet. Versioni i rand() q vije me kompajlerin e C++-it sht mjaft i thjesht dhe
nuk sht prej m t mirve (nuk prdoret pr ndonj qllim shkencor) mirpo mund t prdoret
pr programe t thjeshta dhe pr lojra.
Si gjenerohet numri i rastit n C++?
Pr t prdorur funksionin rand() duhet t prfshijm n program heder fajllin prkats
<cstdlib>. Funksioni rand() thjesht e kthen pseudo-numrin e plot t rastit n rangun prej 0
deri ne RAND_MAX dhe prdoret si vijon:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int NumriiRastit = rand();
cout << NumriiRastit << endl;
}



Pr t gjeneruar m shum numra t rastit, prsritet thirrja e funksionit rand().

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int NumriiRastit;
for(int i=0; i<10; i++){
NumriiRastit = rand();
cout << NumriiRastit << endl;
}
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
105



Vlera RAND_MAX nuk sht e specifikuar me standardin e C++, por mund t supozojm
se RAND_MAX sht s paku: 32767. Pr t gjetur vlern e sakt pr RAND_MAX n
kompjuterin tuaj, ekzekutoni kodin vijues:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
cout << "Vlera e RAND_MAX: " << RAND_MAX << endl;
}


Pse nevojitet srand()?
Funksioni srand() prdoret pr t inicializuar gjeneratorin e pseudo numrave t rastit. Kjo
gj cakton pikn fillestare pr vargun e numrave t gjeneruar. Gjeneratorin e numrave t rastit
duhet t inicializojm para se t thrrasim funksionin rand() pr her t par.

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int fillimi = 5;
srand(fillimi);
int NumriiRastit;
for(int i=0; i<10; i++)
{
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
106
NumriiRastit = rand();
cout << NumriiRastit << endl;
}
}



Nse inicializojm gjeneratorin gjithmon me t njejtn vler t fillimit, seciln her q t
ekzekutohet programi do t fitohen numrat e njjt. Kjo normalisht sht joadekuate pr
shumicn e rasteve, pasi q zakonisht krkohet varg i numrave t rastsishm (prveq nse jemi
duke krkuar gjetjen e gabimeve n program (de-bugimi)). Zgjidhja qndron n prdorimin e
vlers s ndryshme fillestare pr seciln her. Mnyr e zakonshme sht duke marrur si vler
fillestare kohn momentale t kompjuterit. Pasi q me gjas seciln her koha sht e ndryshme,
do t gjenerohet varg i numrave t ndryshm.

#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int main()
{
srand(static_cast<unsigned>(time(0)));
int NumriiRastit;
for(int i=0; i<10; i++){
NumriiRastit = rand();
cout << NumriiRastit << endl;
}
}


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
107

Pra, kemi thirrur edhe header-in <ctime> pr funksionin time(). Vlera e kthyer nga
funksioni time() llogaritet prej numrit pa shenj unsigned duke prdorur operatorin
static_cast.

Si gjenerohen numrat n nj brez (rang) t caktuar
Ka disa mnyra pr gjenerimin e numrave n nj rang t caktuar. Nj mnyr e
zakonshme, q haset shpesh sht:

NumriiRastit = (rand()%10);

Kjo do t gjeneroj numra n rangun 0 deri n 9 (% - Pjestimi me modul, ku si rezultat
eshte mbetja nga pjestimi i plote me nje numer, ne kete rast pjestimi i plote me 10). Pr t
filluar prej ndonj baze tjetr t ndryshme prej 0 (zeros), veprohet si vijon:

NumriiRastit = 20+(rand()%10);

Kjo do te mundsoj gjenerimin e numrave prej 20 gjer n 29.
Mirpo metoda e msiprme e krijimit t pseudo numrave t rastit sht mjaft e varfr
sepse i prdor vetm shifrat e fundit (me vler t vogl, njshet dhe dhjetshet) t numrit t
kthyer nga rand() dhe kto mund t jen m pak t rastit pr disa zbatime t gjeneratorit t
pseudo numrave t rastit.
Si mnyr m e mir preferohet:

NumriiRastit = 20 + int(10.0 * rand()/(RAND_MAX+1.0));

Nse kto i zbatojm n programin e msiprm, do t kemi:

#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;

int main()
{
srand(static_cast<unsigned>(time(0)));
int NumriiRastit;
for(int i=0; i<10; i++){
NumriiRastit = 20 + int(10.0 * rand()/(RAND_MAX+1.0));
cout << NumriiRastit << endl;
}
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
108


Kjo mund t bhet m e dobishme duke e inkorporuar n funksion, si n vijim:

int rangu_i_rastit(int numri_i_vogel, int numri_i_madh)
{
if(numri_i_vogel > numri_i_madh){
swap(numri_i_vogel, numri_i_madh);
}

int rangu = numri_i_madh - numri_i_vogel + 1;
return numri_i_vogel+int(rangu*rand()/(RAND_MAX+1.0));
}

Pra, funksionit rangu_i_rastit( ) i prcillen dy vlera q prezentojn vlern me t vogl
dhe m t madhe t rangut t dshiruar. Funksioni verifikon a e kemi renditjen e duhur t vlers
s vogl dhe asaj t madhe. Pastaj llogaritet rangu i krkuar i numrave t r astit. N fund, i
aplikojm kta numra pr thirrjen e funksionit rand( ) dhe kthimin e vlerave t rastit. Funksioni
swap() (angl. Swap-shkmbe, ndrro) krkon header-in <algorithm>.

Programi i vogl vijues demonstron prdorimin e funksionit rangu_i_rastit ().
Inicializojm gjeneratorin e pseudo numrave t rastit duke prdorur kohn aktuale.

#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>

using namespace std;

int rangu_i_rastit(int numri_i_vogel, int numri_i_madh)
{
if(numri_i_vogel > numri_i_madh){
swap(numri_i_vogel, numri_i_madh);
}
int rangu = numri_i_madh - numri_i_vogel + 1;
return numri_i_vogel + int(rangu * rand()/(RAND_MAX + 1.0));
}

int main()
{
srand(static_cast<unsigned>(time(0)));
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
109
int numri_i_rastit;
cout<<"Nr. - Vlera \n";
cout<<"-------------\n";
for(int i=0; i < 10; i++)
{
numri_i_rastit = rangu_i_rastit(1,10);
cout << i <<" - " << numri_i_rastit << endl;
}
}



Pr t prdorur funksionin rangu_i_rastit n programin pr simulimin e zarit, do t
thrrasim:

rangu_i_rastit(1,6);


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
110
Llogaritjet kohore

Time
Time sht tip i variabls i aft pr prezentim t kohs dhe prkrah operacionet
aritmetike. Ky tip i variabls kthehet nga ana e funksionit time( ) dhe prdoret si parametr
nga disa funksione t tjera nga heder fajlli: <ctime>.
Kjo sht nj vler e cila n prgjithsi tregon numrin e sekondave t kaluar q nga ora:
00:00 e dats 1 Janar 1970 UTC (Universal Time). Kjo sht marr pr arsye historike, pasi q i
korrespondon vuls kohore t UNIX-it (Unix timestamp), por sht e prhapur n librarit e C-
s, pr t gjitha platformat.
N header fajllin <ctime> kemi funksionet: clock, time, difftime etj.

Programi i ors
Clock_t clock ( void );
Funksioni clock() kthen numrin e te rrahurave t ors (tik-ave) t kaluara q prej
fillimit te ekzekutimit t programit. N rast gabimit, funksioni kthen vlern -1.
Makro konstanta CLOCKS_PER_SEC ose CLK_TCK specifikon relacionin ndrmjet
tikave dhe sekondit (t rrahura brenda sekondit).
Momenti inicial i references, i prdorur prej ores (clock) si fillim i ekzekutimit te
programit mund t ndryshoje varsisht prej kompjuterit. Pr t llogaritur kohn aktuale t
procesimit t programit, vlera e kthyer e ors (clock) duhet t krahasohet me vlern e kthyer
prej ndonj thirrjeje iniciale (parprake) t clock-ut.
Clock_t sht tip i definuar n <ctime> (dhe <time.h>, n C) si nj tip me mundsi
prezentimi t tikave t ors dhe prkrah operacionet aritmetike (n prgjithsi, sht e tipit
long integer).

/* Shembull i clock: numrimi ne zbritje - countdown */
#include <iostream>
#include <ctime>
using namespace std;

void prit ( int sekonda ) //funksioni prit - per vonese kohore
{
clock_t fundi; //variabla e tipit clock_t (nga libraria time)
fundi = clock () + sekonda * CLOCKS_PER_SEC ;
while (clock() < fundi) {} //perserite gjersa clock() < fundi
}

int main ()
{
int n;
cout<<"Filloi numrimi...\n";
for (n=10; n>0; n--)
{
cout<<n<<endl;
prit (1); //thirrja e funksionit prit, per vonese 1-sekond
}
cout<<"FILLO!!!\n";
return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
111


Funksioni time( ) mund t prdoret edhe vetm sa pr t treguar kohn aktuale t
kompjuterit.

Shembull:

/* Shembull - time */
#include <iostream>
#include <ctime>
using namespace std;

int main ()
{
time_t koha; //tipi time_t, sht i definuar ne <ctime>

time ( &koha );
cout<< "Koha lokale aktuale:\n\n";
cout<< ctime (&koha) <<"\n";

return 0;
}



Diferenca e kohs:

Pr t llogaritur diferencn kohore, gjegjsisht kohn e kaluar prej nj ngjarjeje deri te nj
tjetr, mund t prdoret funksioni difftime( ), i cili si parametra i ka dy momente kohore, pr t
cilat llogarit distancn kohore:

/* Shembull - difftime */
#include <iostream>
#include <ctime>
using namespace std;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
112


int main ()
{
time_t fillimi,fundi;
char VleraHyrese [25];
double diferenca;

time (&fillimi);
cout<<"Ju lutem, jepni emrin tuaj: ";
cin>>VleraHyrese;
time (&fundi);
diferenca = difftime (fundi,fillimi);
cout<<"\nTungjatjeta z/znj. "<<VleraHyrese<<"\n";
cout<<"Ju nevojiten "<<diferenca<<" sec. per shtypjen e emrit \n\n";

return 0;
}



/* Shembull i llogritjes s diferencs kohore me precizitet t lart */
#include <iostream>
#include <time.h>
using namespace std;

int main()
{
int TikaTeKaluar;
double MilisekondaTeKaluar, SekondaTeKaluar, MinutaTeKaluar;
char VleraHyrese [100];

clock_t Fillimi, Fundi; // Fillimi dhe Fundi per timer

Fillimi = clock() * CLK_TCK; //fillo timer-in

cout<<"Ju lutem, jepni emrin tuaj: ";//Pjesa ku shkaktohet vonese
cin>>VleraHyrese; //deri sa te shkruhet emri

Fundi = clock() * CLK_TCK; //ndale timer-in

TikaTeKaluar = Fundi - Fillimi;
//numri i tikave prej Fillimi deri te Fundi

MilisekondaTeKaluar = TikaTeKaluar/1000;
//milisekonda prej Fillimi deri te Fundi

SekondaTeKaluar = MilisekondaTeKaluar/1000;
//seconda prej Fillimi deri te Fundi

MinutaTeKaluar = SekondaTeKaluar/60;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
113
//minuta prej Fillimi deri te Fundi

if(SekondaTeKaluar < 1)
cout<<"\n\nKaluan "<<MilisekondaTeKaluar<<" milisekonda.\n\n";
else if(SekondaTeKaluar == 1)
cout<<"\n\nKaloi 1 sekond.\n\n";
else if(SekondaTeKaluar > 1 && SekondaTeKaluar < 60)
cout<<"\n\nKaluan "<<SekondaTeKaluar<<" sekonda.\n\n";
else if(SekondaTeKaluar >= 60)
cout<<"\n\nKaluan "<<MinutaTeKaluar<<" minuta.\n\n";

return 0;
}



Ngjyra e tekstit

Pr t shtypur tekstet me ngjyra te ndryshme, duhet t prdoren disa funksione dhe disa t
ashtuquajtur Handler (angl. Handler mbajts, manovrues, etj, t cilt mundsojn manipulime
t ndryshme n programe) nga heder fajlli <windows.h>. Meqense i tejkalon kufinjt e asaj se
ka shpjegohet n kt semestr, do ta japim t gatshm prmes nj shembulli, ashtu q kur t ju
nevojitet, e prdorni.

Mund t definohen 16 ngjyrat themelore, duke prorur numrat prkats t tyre:

Black = 0 - e zez
Blue = 1 - e kaltr
Green = 2 - e gjlebr
Cyan = 3 - cian
Red = 4 - e kuqe
Magenta = 5 - magjenta
Brown = 6 - kafe
LightGray = 7 - hiri, e qelt
DarkGray = 8 - hiri e mbyllt
LightBlue = 9 - e kaltr e qelt
LightGreen = 10 - e gjelbr e qelt
LightCyan = 11 - cyan e qelt
LightRed = 12 - e kuqe e qelt
LightMagenta = 13 - magjenta e qelt
Yellow = 14 - e verdh
White = 15 - e bardh

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
114

//Programi - teksti me ngjyra
#include <iostream>
#include <windows.h>
using namespace std;


void caktongjyren(unsigned short color) //Funksioni per caktimin
{ //e ngjyres se tekstit
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon,color);
}

int main()
{
int i;

for (i=0;i<=15;i++)
{
caktongjyren (i);
cout<< "i= "<<i<< " - Jungjatjeta"<<endl;
}
cout<<"\n";
return 0;
}



Me #include duhet ta prfshini header fajllin <windows.h> dhe t definoni funksionin e
dhn me handler-at prkats. Pastaj, para tekstit t cilin dshironi ta shtypni, e thirrni
funksionin pr ngjyrn e tekstit. Duhet pasur parasysh, q pr t filluar shtypjen me ngjyr t re,
shtypja paraprake duhet t prfundohet m zbrazje t buffer-it t tekstit, duke prdorur urdhrin
endl ose flush, pas shtypjes me cout, si p.sh.:

cout<<Jungjatjeta<<endl;
ose
cout<<Jungjatjeta\n<<flush;

Shembull: Ja nj shembull i nj loje, si shembull pr prdorimin e numrave t rastit,
matsit t kohs dhe prdorimit t ngjyrave n program:
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
115

#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <windows.h>

using namespace std;

void ngjyra(unsigned short color); //funksioni ngjyrn e tekstit

int main()
{
int numri_i_rastit, i;
int hamendja, numri, tentime;
time_t fillimi,fundi; //variablat pr matjen e kohs
double diferenca; //variabla pr diferencn kohore

//inicializimi i gjeneratorit t rastit
srand(static_cast<unsigned>(time(0)));

time (&fillimi); //koha e fillimit t lojs

for (i=1; i<=10; i++) //prej 10 numrave te rastit, e marrim at t fundit
{
numri_i_rastit = 1 + int(100 * rand()/(RAND_MAX + 1.0));
//numrat mes 1 dhe 100

// pr t'i par numrat e rastit, largoni komentin nga rreshti vijues
// cout<<"Nr. i rastit - "<<numri_i_rastit<<endl;
}
// pr ta par numrin per lojen, largoni komentin nga rreshti vijues
// cout<<"Nr. i rastit kesaj radhe - "<<numri_i_rastit<<endl;

tentime=0; //numratori i tentimeve
numri=numri_i_rastit;
ngjyra(14); //ngjyra e verdh
cout << "Qellojani sa eshte numri i rastit mes 1 dhe 100\n" << endl;
ngjyra(11); //ngjyra e kaltr e qelt
cout << "Me pak - do te thote duhet numer me i vogel\n";
ngjyra(12); //ngjyra e kuqe
cout << "Me shume - do te thote duhet numer me i madh\n\n";
do //fillimi i unazs
{
ngjyra(15); //ngjyra e bardh
cout << "Jepni numrin qe mendoni se ka qelluar: ";
ngjyra(14); //ngjyra e verdh
cin >> hamendja;

if (hamendja > numri)
{
ngjyra(11); //ngjyra e kaltr e qelt
cout << "Me pak" << endl;
}
if (hamendja < numri)
{
ngjyra(12); //ngyra e kuqe
cout << "Me shume" << endl;
}
tentime=tentime+1; //pas do tentimi, rritet numratori i tentimeve
} while (hamendja != numri); //deri sa ta qlloni numrin e rastit
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
116

time (&fundi); //koha e prfundimit t lojs

ngjyra(10); //ngjyra e gjelbr
cout << "\n\nFituat. Numri i rastit eshte " << numri << endl;
ngjyra(14); //ngyra e verdh
cout << "Per t'ia qelluar, juve ju nevojiten: ";
ngjyra(11); //ngjyra e kaltr e qelet
cout << tentime <<" tentime.\n";

diferenca = difftime (fundi,fillimi);
ngjyra(14); //ngyra e verdh
cout << "Per gjetjen e numrit ju nevojiten : ";
ngjyra(11); //ngjyra e kaltr e qelet
cout <<diferenca<<" sekonda. \n\n";
}

//Funksioni pr caktimin e ngjyrs s tekstit
void ngjyra(unsigned short color)
{
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon,color);
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
117
Shtojca B - Pointert
Pointert jan variabla t cilat mbajn adresat n C dhe n C++. Ata ofrojn fuqi dhe
pajisje pr programerin q t ju qaset dhe t manipulojn t dhnat n nj mnyr t ndryshme
q nuk ofrohet n disa gjuh tjera programuese. Ata jan t dobishm pr prcjelljen e
parametrave n funksione, n mnyr q t lejojn funksionin q t ndryshoj dhe t kthej
vlerat n programin thirrs. Kur prdoren n mnyr t gabuar, ata shpesh jan burim i
gabimeve n program dhe frustrimeve pr programert.
Kur programi ekzekutohet, t gjitha variablat ruhen n memorie, secila n ndonj lokacion
apo adres t veant. N mnyr tipike, variabla dhe adresa e saj e memories prmbajn vlerat
e t dhnave. P.sh., kur deklarohet:

int numri = 5;

vlera 5 ruhet n memorje dhe mund ti qasemi prmes variabls numri. Pointeri sht lloj
special i variabls, q e ruan adresn e memories e jo vlern e t dhnave. Njsoj si ndryshohet
vlera kur proret variabla normale, vlera e adress s ruajtur n pointer ndryshohet kur
manipulohet me variabln pointer.
Zakonisht, adresa e ruajtur n pointer sht adresa e ndonj variable tjetr.

int *ptr;
ptr = &numri // Ruan adresn e varibals numri n ptr.
// Operatori unar & (address of adresa e)
// kthen adresn e variabls.

Pr t marr vlern e cila sht e ruajtur n lokacionin e memories t pointerit duhet t
bhet dereferencimi i pointerit. Dereferencimi bhet prme operatorit unar * (pointer to
treguesi n, aty ku tregon pointeri).

int totali;
totali = *ptr;
// Vlera n adresn e ruajtur n ptr i ndahet variabls totali.

Variablat q i deklaroni n program, ekzistojn n memorie gjat kohs s ekzekutimit t
programit. Secila variabl, vendoset n nj adres t caktuar t memories.
P.sh., nvse ne deklarojm nj variabl t tipit integer, si n vijim:

int numriIm = 25;

kjo do t z nj sasi t mjaftueshme t memories pr nj vler integer dhe do t
inicializoj at memorie pr t mbajtur vlern q e prezenton numrin 25 n formatin integer. Ne
nuk e dijm se cila sht adresa aktuale ku sht vendosur vlera e jon, por kjo sht nj shtje
pr t ciln kujdeset programi (C++) dhe ai e di ku ta gjej at. Normalisht, nse nuk do ta dinte
ku e ka vendosur dhe ruajtur, nuk do t kishte mundsi ti qasej prsri asaj vlere. N fakt,
adresa aktuale ku ruhet variabla numriIm mund t ndryshoj seciln her q ekzekutohet
programi, por programi e di se si t merret me kt problem. Kryesorja, ai e di do her se ku i
ka ruajtur vlerat, pra n ciln adres n memorie.
Si u tha m par, C++ ofron nj mnyr q ti referohemi adress s variabls, duke e
prdorur operatorin addres of (adresa e), q sht simboli & (ampersand) i lidhur me emrin
e variabls. Pra, adresvs s memories s variabls numriIm mund ti referohemi prmes:
&numriIm.

Pasi paska mundsi ti referohemi adress, ather ne mund ta paraqesim at n dalje (ta
shtypim n ekran), si n vijim:

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
118
#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
cout << &numriIm << endl;
return 0;
}

Kur t ekzekutohet programi, n dalje(ekran) do t paraqitet nj vler, si:



Kjo vler paraqet adresn e memories n t ciln sht ruajtur vlera 25 n formatin
heksadecimal (Kjo vler ndryshon varsisht prej kompjuterit t prdorur, por formati si adres
sht gjithmon i ktill).
Operatorin e adress mund ta prdorim edhe pr tipet tjera t variablave. P.sh., provoni t
ekzekutoni programin vijues:

#include <iostream>
using namespace std;
int main()
{
int numriIm = 37;
int numri2 = 42;
double numriMePresjeDhjetore = 1.234;
bool sakteOsePasakte = true;
cout << " &numriIm: " << &numriIm << endl;
cout << " &numri2: " << &numri2<< endl;
cout << " &numriMePresjeDhjetore: " << &numriMePresjeDhjetore <<
endl;
cout << " &sakteOsePasakte: " << &sakteOsePasakte << endl;
return 0;
}



Pra, si mund t shihet, secila variabl ka adresn e vet dhe z hapsirn e vet n
memorie.

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
119
Ruajtja e adress n pointer (tregues)

Tani q u pa se si mund ti referohemi adress s memories, le t shohim se si mund ta
ruajm kt adres t memories. Pr kt qllim, na hyjn n pun pointert (angl. Pointer
tregues, shenjues).
Pointeri sht variabl q ruan nj adres.
Pra, pointeri sht nj tip i variabls n C++. Njsoj si C++ i ka tipet integer pr ti
ruajtur numrat e plot, double pr numrat real, bool pr variablat buleane etj., C++ e ka tipin
pointer pr ti ruajtur adresat.

M hert patm variabln integer numriIm

int numriIm = 25;

e gjithashtu e paraqitm adresn e tij me:

cout << &numriIM << endl;

Tani, le t shohim si ta ruajm adresn e variabls numriIm n nj variabl pointer.
Kur t deklarohet variabla e tipit pointer duhet tia tregojm tipin e variabls q ruhet n
at adres ku tregon ai, gjegjsisht duhet t tregojm se pr n cilin tip t variabls tregon
pointeri. T shohim si deklarohet nj pointer q tregon n variabln ton, t tipit integer. Kjo
mund t bhet n ndonjrn prej mnyrave vijuese:

int* PointeriIm;
int *PointeriIm;

Pra, fillohet me deklarimin e tipit int dhe pastaj si simbol q tregon se sht fjala pr
pointer, pason simboli * (ylli) i cili mund t shnohet menjher pas tipit ose para emrit t
variabls (kah ana e variables).
Gjithashtu, mund ta deklarojm dhe ta inicializojm drejtprdrejt variabln e tipit
pointer:

int *PointeriIm = &myInteger;

Kshtu, kur ekzekutohet programi, ai e ndan hapsirn e nevojshme t memorjen pr ta
ruajtur adresn e memories. Ai e ruan n kt hapsir adresn e variabls numriIm, e cila si u
pa m hert n program, ishte: 0012FF7C

Me fjal tjera, vlera: 0012FF7C ruhet n variabln PointeriIm.

Le t shohim programin vijues:

#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int* PointeriIm = & numriIm;
cout << PointeriIm << endl;
return 0;
}

Ksaj radhe, n vend se t shtypim drejtprdrejt adresn e variabls numrIm, ne e kemi
ruajtur at n pointerin PointeriIm dhe pastaj e kemi shtypur vlern e tij. Me rastin e
ekzekutimit fitohet rezultati:
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
120



(Vrejtje: mos u brengosni nse vlera q ju e fitoni sht tjetr, pasi q kjo mund t jet e
ndryshme, sa her q t ekzekutohet programi ose mund t jet e njjta vler, pas disa
ekzekutimeve. Kjo gj sht e varur prej platforms (kompjuterit) dhe cilado mnyr e
paraqitjes sht normale).

Pr t qen edhe m bindse, le t shohim programin vijues:

#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int *PointeriIm = & numriIm;
cout << "Adresa: " << &numriIm << endl;
cout << "Pointeri: " << PointeriIm << endl;
return 0;
}



Pra, adresn e kemi shtypur drejtprdrejt dhe prmes pointerit. T dy vlerat duhet t jen
identike.
Pr kt program themi se variabla PointeriIm tregon (pointon) n variabln numriIm. Kjo
sht vetm nj mnyr e prshtatshme e shprehjes s faktit q pointeri mban (r uan) adresn e
variabls numriIm.
Tipi i pointerit PointeriIm sht int. Pra, nse kemi dy deklarime si n vijim, duhet t
shihet dallimi mes deklarimit t variabls s tipit integer dhe deklarimit t treguesit (pointerit)
n variabln e tipit integer:

int n; // Deklarimi i nj variable t tipit integer

int *p; // Deklarimi i pointerit n nj variabl t tipit integer


Shembulli n vijim sht i njjt me t mparshmin, vetm se kt her pr variabl t
tipit numr real (numr me presje dhjetore, floating Point - numr me pik t lvizshme).

#include <iostream>
using namespace std;
int main()
{
double numriReal = 1.234;
double *Pointeri2 = &numriReal;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
121
cout << "Adresa: " << &numriReal << endl;
cout << "Pointeri: " << Pointeri2 << endl;
return 0;
}



Vreni se deklarimi i variabls pointer reflekton faktin se ajo tani tregon (pointon,
shenjon) n variabln e tipit double.

double *Pointeri2 = &numriReal;
ose
double* Pointeri2 = &numriReal;

M par kishim:
int *PointeriIm = &numriIm;

Pra, si u tha edhe m par, tipi i paraqitur n deklarimin e pointerit na tregon se n far
tipi t variabls tregon (pointon, shenjon) pointeri: int, double etj.

Si i qasemi varibals prmes pointerit

Tani q e dijm si t marrim adresn e variabls dhe si ta ruajm at n pointer, le t
shohim se si mund t prdoret pointeri pr t ju qasur variabls n t ciln ai tregon (pointon,
shenjon). Nuk sht me rndsi se kur ose prse do t na duhej kjo gj, kryesorja sht q t
kuptohet se si mund t bhet kjo, e pastaj kurdo q t nevojitet, t mund t prdoret.
Shembull:

#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int *PointeriIm = &numriIm; //Pointeri ruan adresn e variabls
cout << *PointeriIm << endl; //shtypet variabla/vlera n t
ciln tregon pointeri
return 0;
}



Kodi i msiprm sht i njohur prej shembujve paraprak, prveq rreshtit:

cout << *PointeriIm << endl;

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
122
Pra, si shihet, me rastin e ekzekutimit shtypet vlera 25.
Kemi deklaruar pointerin n variabln e tipit int (Integer) dhe e kemi quajtur PointeriIm.
E inicializojm vlern e PointeriIm pr ta mbajtur adresn e variabls s tipit Integer numriIm
(gj q e pam edhe m par) dhe pastaj, me:
*PointeriIm
n fakt i qasemi vlers s numrit integer n t cilin tregon pointeri, e cila n kt rast
sht 25.
Pra, ky urdhr bn q t shtypet vlera n t ciln tregon pointeri. Ky ishte operatori i
dereferencimit t vlers nga pointeri.

Ja edhe nj shembull, q prdor pointerin n variabln e tipit double, q e pam m par:

#include <iostream>
using namespace std;
int main()
{
double numriReal = 1.234;
double *Pointeri2 = &numriReal;
cout << "Vlera ne te cilen tregon Pointeri: " << *Pointeri2 <<
endl;
return 0;
}



Edhe kt her, programi sht i ngjashm me at t mparshmin pr numrat real, vetem
se n fund shtypet me urdhrin

cout << *Pointer2 << endl;

me t cilin n dalje shtypet variabla n t ciln tregon pointeri Pointeri2, q n kt rast sht
vlera 1.234.
Me pak ndryshime, n vijim kemi:

#include <iostream>
using namespace std;
int main()
{
double numriReal = 1.234;
double *Pointeri2 = &numriReal;
cout << "Adresa: " << &numriReal << endl;
cout << "Pointeri: " << Pointeri2 << endl;
cout << "Vlera ku tregon Pointeri: " << *Pointeri2 << endl;
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
123



Ndryshimi i vlerave prmes pointerve

Vlerat n t cilat tregon pointeri mund t ndryshohen edhe prmes pointerit:

#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int* PointeriIm = &numriIm;
cout << numriIm << endl;
*PointeriIm = 46; //aty ku tregon pointeri=46
cout << numriIm << endl;
}



Sikur n rastet e mparme, fillojm me inicializimin e variabls numriIm me vlern 25,
pastaj inicializojm pointerin PointeriIm me adresn e variabls numriIm. N rreshti n vijues, e
shtypim vlern e variabls numriIm, q n dalje jep velrn 25. Pastaj, rreshti/urdhri:

*myPointer = 46;

ia ndan vlern 46 variabls n t ciln tregon pointeri PointeriIm. Me fjal t tjera, ia
ndan vlern 46 variabls numriIm (sepse pointeri tregon n t). Efektivisht, kjo sht
ekuivalente me urdhrin:

numriIm = 46.

sht me rndsi t kuptohet se ka po ndodh ketu. Vlera 46 nuk i ndahet pointerit. N
fakt, vet variabla e pointerit nuk sht ndryshuar fare n asnj mnyr dhe ajo akoma vazhdon
t ruaj (mbaj) adresn e memories s variabls s tipit integer numriIm. Ajo ka kemi br
sht, sikur se t themi: merre adresn e cila ruhet n pointerin PointeriIm dhe ndryshoje
(modifikoje) variabln q sht e ruajtur n at adres, ashtu q t jet 46. N vend se ti
referohemi drejtprdrejt variabls numriIm, i jemi referuar duke prdorur adresn e saj, t
ruajtur n pointerin PointeriIm.
Rreshti i fundit e shtyp n dalje vlern e variabls numriIm prsri, po kt her ajo
sht 46.

Ja edhe versioni pr numrin real:

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
124
#include <iostream>
using namespace std;
int main()
{
double numriReal = 1.234;
double *Pointeri2 = &numriReal;
cout << numriReal << endl;
*Pointeri2 = 9.876;
cout << numriReal << endl;
return 0;
}



Urdhri:
*Pointeri2 = 9.876;
ia ndan vlern 9.876 variabls n t ciln tregon pointeri, q n kt rast sht
numriReal.


Ndryshimi i variabls s tipit pointer

Njsoj si edhe me variablat tjera, mund t ndryshojm vlern t ciln e ruan (mban)
variabla e tipit pointer. Pasi q pointeri ruan adresa, kur t ndryshohet vlera e tij do t thot se
atij po i ndahet ndonj adres tjetr. Le t shohim nj shembull:


#include <iostream>
using namespace std;
int main()
{
int numri1 = 25;
int *PointeriIm = &numri1;
cout << *PointeriIm << endl;
int numri2 = 88;
PointeriIm = &numri2;
cout << *PointeriIm << endl;
}



N fillim inicializojm pointerin PointeriIm pr t ruajtur adresn e variabls numri1 dhe
pr t vrtetuar kt e shtypim vlern n t ciln tregon ai, gj q do t shtyp vlern 25. Pastaj,
pointerit PointeriIm ia ndajm adresn e variabls tjetr numri2.
PointeriIm = &numri2;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
125
Tani pointeri tregon n variabln numri2, kshtu q kur ta shtypim prsri vlern n t
ciln tregon ai, do t shtypet velra 88.

Prdorimi i pointerve si parametra t funksioneve

Kur funksionit ia prcjellim ndonj variabl, krijohet nj kopje e variabls dhe prdoret
prbrenda funksionit. Vlera origjinale nuk ndikohet nga ndryshimet q i bhen kopjes prbrenda
funksionit. P.sh., le t marrim rastin vijues:

#include <iostream>
using namespace std;
void shtypeDyfishin(int vleraLokale)
{
vleraLokale = vleraLokale * 2;
cout << vleraLokale << endl;
}
int main()
{
int Vlera1 = 4;
cout << Vlera1 << endl;
shtypeDyfishin(Vlera1);
cout << Vlera1 << endl;
return 0;
}


Pra, n fillim inicializojm variabln Vlera1 me vlern 4 dhe e shtypim vlern e saj.
Pastaj, e thrrasim funksionin shtypeDyfishin dhe ia prcjellim variabln Vlera1 si parametr,
me vlern 4. N funksion, krijohet kopja lokale e variabls Vlera1 me emrin vleraLokale dhe
ajo shumzohet me 2. Pastaj vlera e re e variabls vleraLokale shtypet n ekran.
Variabla Vlera1 mbetet e pandikuar nga ndryshimet e bra n kopjen lokale prbrenda
funksionet, kshtu q kur t shtypet pr her t dyt variabla Vlera1, vlera e saj akoma sht 4.

Le t shohim n vazhdim, ka do t ndodh, nse funksionit ia prcjellim pointerin q
tregon n variabl, n vend t variabls:

#include <iostream>
using namespace std;
void shtypeDyfishin(int *PointeriIm)
{
*PointeriIm = *PointeriIm * 2;
cout << *PointeriIm << endl;
}
int main()
{
int Vlera1 = 4;
cout << Vlera1 << endl;
shtypeDyfishin(&Vlera1);
cout << Vlera1 << endl;
return 0;
}

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
126
Ksaj radh funsioni prej treguesin (pointerin) n n variabl t tipit integer (n Vlera1)
q ti prcillet si parametr.

void shtypeDyfishin(int *PointeriIm)

Kur e thrrasim funksionin, atij ia prcjellim adresn e variabls Vlera1.

shtypeDyfishin(&Vlera1);

Kur e ndryshojm vlern n t ciln tregon pointeri PointeriIm prbrenda funksionit, pasi
q pointeri mban adresn e variabls Vlera1, fardo ndryshimi i br n vlern n t ciln
tregohet me pointer n fakt ndryshon edhe vlern e ruajtur nga variabla Vlera1.

*PointeriIm = *PointeriIm * 2; // dyfishon vlern e ruajtur n
Vlera1

Kur kthehet vlera nga funksioni, Vlera1 mban vlern e re 8. Prandaj, rezultati i ktij
programi do t jet:



Nse e krahasojm me versionin e mparshm, i cili n dalje kishte:
4
8
4

shihet dallimi i ndikimit t funksionit n parametrat e prcjellur si vler e variabls ndaj
rastit t prcjelljes s adress s variabls.
Pra, kur e prcjellim variabln si parametr t funksionit, krijohet nj kopje e variabls e
cila prdoret prej funksionit dhe fardo ndryshimesh t bra e lne variabln origjinale (jasht
funksionit) t paprekur (t pandikuar). Nse funksionit ia prcjellim pointerin, mund ta
ndryshojm edhe variabln origjinale prmes pointerit (i cili tregon n at variabl).

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
127
Dukshmria e variablave

Variablat e deklaruar prbrenda funksionit ose n ndonj bllok tjetr t brendshm t
programit jan t dukshme (kan fushveprim) vetm prbrenda bllokut t tyre dhe nuk mund t
prdoren jasht kufinjve t tyre. P.sh, n shembullin vijues, kemi variablat globale: numri dhe
Emri, t cilat mund t prdoren n cilndo pjes t programit dhe kemi varibalat lokale: Vlera1
dhe Vlera2 t funksionit main( ) dhe ato: a, b, S t funksionit Siperfaqja.

#include <iostream>
using namespace std;


int numri;
char Emri[15];

Variablat Globale
int main()
{

int Vlera1;
double Vlera2;
Variablat Lokale
...
cout << Vlera1 << endl;
cout << Emri << endl;
cout << S << endl;

return 0;



Urdhrat
}


int Siperfaqja(int a, int b)
{
int S
S=a*b;
return S
}
Variablat Lokale


Pra, dukshmria e variablave sht e kufizuar prbrenda nivelit t bllokut n t cilin jan
deklaruar. Sidooft, kemi mundsi t deklarojm varibalat globale t cilat jan t dukshme n
cilndo pjes t kodit, edhe prbrenda edhe jasht funksioneve. Pr t deklaruar variabln
globale, ajo thjesht duhet t deklarohet jasht cilitdo funksion ose bllok, drejtprdrejt n trupin
e programit.

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
128
Shtojca C - Shkruarja dhe leximi i fajllave

C++ mundson shkruarje dhe leximin e t dhnave (manipulimin e tyre) nga dhe n fajlla.
Kjo sht nj prej shtjeve shum t rndsishme t do gjuhe programuese. Cilido aplikacion
nga jeta reale sht e pritshme q t prpunoj sasi t mdha t informacionit. Nj prej
teknikave t thjeshta t transerfimit dhe regjistrimit t t dhnave sht prmes fajllave.
Teknikat m t avancuara pr ruajtjen dhe manipulimin e t dhnave prdorin bazat relacionale
t t dhnave ose ndonj format special si XML. Pr fillim, le t shohim si prdoren fajllat
tekstual.
Nj prej shtjeve t rndsishme me rastin e shkruarjes dhe leximit nga fajllat sht
formati i t dhnave. Pa marr parasysh se shfrytzuasi fundor i programit do t jet ndonj
kopjuter tjetr ose ndonj person, formati i dhn n dalje mund t jet po aq i rndsishm sa
edhe vet prmbajtja. Nse dalja konsumohet nga ndonj program tjetr, ather formati n dalje
me gjas do t jet i paraprcaktuar dhe specifik, n mnyr q programi konsumuse t jet n
gjendje t lexoj dhe t ju qaset t dhnave. Nse fajlli n dalje sht pr tu lexuar nga njerzit,
formati i t dhnave mund t ndikoj n kuptueshmri dhe dobi. Manipulatort iostream ofrojn
nj mnyr pr t kontrulluar formatin dals.
Hyrja dhe dalja nga fajlli
Teknikat pr hyrje dhe dalje, i/o, n C++ jan virtualisht identike me ato t prezentuara
m par pr leximin dhe shtypjen n dhe nga pajisjet standarde, ekrani dhe tastiera. Pr t
realizuar hyrje dhe dalje n fajlla duhet t prdoret direktiva: #include <fstream>.
Fstream prmban definicionet e klasave pr klasat e prdorura n hyrje/dalje t fajllave.
Prbrenda programit q ka nevoj pr hyrje dalje t fajllave, pr secilin fajll t krkuar n dalje,
inicializohet nj objekt i klasss ofstream. Objekti ofstream prdoret njsoj si objekti cout
pr dalje standarde. Objekti ifstream prdoret njsoj si objekti standard cin.
Shembull:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
ofstream FajlliIm("c:/out.txt");
// Krijon ofstream objektin me emrin FajlliIm

if (! FajlliIm) // Gjithnmon testo hapjen e fajllit
{
cout << "Gabim me rastin e hapjes s fajllit per
dalje/shkruarje" << endl;
return -1;
}

FajlliIm << "Jungjatjeta" << endl;

FajlliIm.close();

return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
129
Pra, s pari krijohet objekti ofstream, me emrin FajlliIm.
Konstruktori pr klasn ofsteram i merr dy argumente. I pari tregon emrin e fajllit, si C-string,
kurse i dyti modin e fajllit. Ekzistojn dy mode t zakonshme t hapjse s fajllit: truncate
(prerja) dhe append (shtimi). E nnkuptuar, nse nuk specifikohet modi dhe fajlli ve ekziston,
ai prehet (do t thot, fajlli ekzistues fshihet dhe krijohet i riu, me t njjtin emr). Modi
specifikohet prmes prdorimit t definimit t enumeratorit n klasn ios. Klasa ios prmban
antrt t cilt i prshkruajn modet dhe gjendjet pr klasat input (hyrja) dhe output (dalja).
Enumeracioni (grupimi) sht nj mnyr e definimit t vargut t konstanteve. Megjithat, kto
i mrrni t gjitha si t gatshme.
- Nnkuptohet, q nse fajlli nuk ekziston, ai krijohet
- Nnkuptohet, q fajlli do t jet tekst fajll, e jo fajll binar
- Nnkuptohet, q fajlli ekzistues do t cungohet (prehet)
- Pr t kombinuar modet, bashkoni me or duke prdorur |.
Modi Kuptimi
Out Hapje fajllin ose rrj edhn pr shkruarje/insertim (output-dalja)
In Hapje fajllin ose rrjedhn pr lexim/ekstraktim (input -hyrje)
App Bashkangjit/shto n fajllin ekzistues. Secili insertim (dalje) do t shkruhet n fund t fajllit.
Trunc Preje (fshije) fajllin ekzistues (sjellja e zakonshme, e nnkuptuar).
ate E hap fajllin pa e fshir, por lejon q t dhnat t shkruhen kudo brenda tij.
binary
Trajto fajllin si fajll binar. Fajlli binar i ruan t dhnat n format intern (ninar, 1 dhe 0), e jo n
fajll t lexueshm tekstual. P.sh., fload do t ruhet si prezentimi i tij prej katr bajtash, e jo si
string.


Pr t hapur fajllin, duke fshir/prer prmbajtjen ekzistuese, mund t prdoret cilido prej
urdhrave vijues:
ofstream FajlliIm("EmriiFajllit");
ofstream FajlliIm("EmriiFajllit", ios::out);
ofstream FajlliIm("EmriiFajllit", ios::out | ios::trunc);

Pr t hapur fajllin, pr t shtuar n prmbajtjen e mparshme:

ofstream myFile("EmriiFajllit",ios::app);

Pr t hapur fajllin pr dalje binare:
ofstream myFile("EmriiFajllit ",ios::binary);

Pr t hapur fajllin pr hyrje (lexom prej tij), prdoret objekti i klass ifstream:
ifstream inFile("EmriiFajllit ");
Shembull:
Shkruarja e programit q krkon prej shfrytzuesit emrin e fajllit dhe pastaj shkruan n
at fajll. Pastaj, hapet fajlli n modin e shtimit ashtu q prmbajtja ekzistuese t mos humbet
nse shfrytzuesi specifikon ndonj fajll ekzistues.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
130
string EmriiFajllit;

cout<<"Jepni emrin e fajllit, p.sh.: c:/ndonjeEmer.txt"<< endl;
cin >> EmriiFajllit;

ofstream oFajlli(EmriiFajllit.c_str(),ios::app);

if (! oFajlli)
{
cout<<"Gabim, me rastin e hapjes se fajllit per dalje "<< endl;
return -1;
}

oFajlli << "Jungjatjeta" << endl;
oFajlli << "Zgjedhje e parashikuar e daljes, apo jo??" << endl;

return 0;
}

Metoda t dobishme pr klasat Input dhe Output
Klasa ifstream ka disa metoda t dobishem pr input (hyrje). Kto metoda ndodhen
gjithashtu edhe n klasn cin, q prdoret pr lexom prej hyrjes standarde (tastiers). Kto
metoda prdoren pr t lexuar prej ndonj rrjedhe hyrse. Nj rrjedh hyrse sht burim i
hyrjes, si: tastiera, fajlli ose baferi.
- Operatori i nxjerrjes >>
Ky operator i mbingarkuar trajton t gjitha tipet brendshme t t dhnave n C++.
Nnkuptohet se, hapsirat nuk mirren parasysh. Pra, zbraztira, tab, rreshti i ri,
formfeed, Enter etj., evitohen.
- get()
Kjo form e get, merr nj karakter nga rrjedha hyrse, d.t.th, prej hyrjes standarde, fajllit
ose baferit. Nuk i eviton zbraztirat. Kthen tipin int.
- get(char &ch)
Kjo form e get, merr nj karakter nga rrjedha hyrse, por e ruan vlern n variabln
karakter t prcjellur brenda si argument.
- get(char *buff, int buffsize, char delimiter='\n')
Kjo form e get, lexon karakteret n C-string baferin e prcjellur si argument (buffsize
karaktere lexohen), deri te ndaresi (delimiter-i) ose deri sa t haset fundi i fajllit. \n
sht karakteri pr rreshtin e ri. Delimiteri nuk lexohet n bafer, por n vend t ksaj,
lihet n rrjedhn hyrse. Duhet t largohet veant, por duke prdorur nj tjetr get ose
ignore (injorim). Pr shkak t ktij hapi t shtuar, kjo form e get shpesh sht burim i
gabimeve dhe duhet t evitohet. Pr fat t mir, ekziston nj metod m e mire, getline,
e cila e lexon edhe delimiterin dhe duhet t prdoret n vend t ksaj forme t get.
- getline
Ka disa forma t dobishme t getline.
- ignore(int n=1, int delim=traits_type::eof)
Kjo metod lexon dhe inojoron n karaktere nga rrjedha hyrse.
- peek()
Kjo metod kthen karakterin e ardhshm prej rrjedhs hyrse, por nuk e largon at.
sht e dobishme pr t shikuar paraprakisht se cili sht karakteri i ardhshm.
- putback(char &ch)
Kjo metod e vendos ch-n n rrjedhn hyrse. Karakteri n ch pastaj do t jet
karakteri i ardhshm i lexuar prej rrejdhs hyrse.
- unget()
Kjo metod, e rivendos karakterin e fundit, n rrjedhn hyrse.
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
131
- read(char *buff, int n)
Kjo metod prdoret pr t realizuar nj lexim t paformatizuar t n bajtave nga rrjedha
hyrse n baferin e karaktereve.

Klasa ofstream ka disa metoda t dobishme pr rrjedhn dalse. Nj rrjedh dalse sht
dalja standarde (ekrani), fajlli ose baferi. Kto metoda, gjithashtu ndodhen n objektin cout, q
prdoret pr dalje standarde.

- Operatori i insertimti, <<
Ky operator i mbingarkuar do t trajtoj t gjitha tipet e brendshme t t dhnave t C++-
it.
- put(char ch)
Kjo metod vendos nj karakter n rrjedhn dalse.
- rite(char *buff, int n)
Kjo metod prdore pr t realizoar nj shkruarje t paformatizuar prej baferit t
karaktereve n rrjedhn dalse.

Shembull:
Supozojm se duhet t lexohet fajlli dhe t prcaktohet numri i karaktereve alfanumerike,
i zbraztirave dhe i fjalive. Pr t prcaktuar numrin e fjalive do t numrohen pikat (.). nuk do
t mirren parasysh kryerreshtat dhe tab-et.
Ja fajlli hyrs:


Programi:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
int zbrazetira = 0;
int numri_i_karaktereve = 0;
int numri_i_fjalive = 0;
char ch;

ifstream inputFajlli("c:/Shembulli1.txt");

if (! inputFajlli)
{
cout << "Gabime, me rastin e hapjes se fajllit" << endl;
return -1;
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
132
}

while (inputFajlli.get(ch))
{
switch (ch) {
case ' ':
zbrazetira++;
break;
case '\n':
case '\t':
break;
case '.':
numri_i_fjalive++;
break;
default:
numri_i_karaktereve++;
break;
}
}
cout << "Kemi " << numri_i_fjalive << " fjali" << endl;
cout << "Kemi " << numri_i_karaktereve << " karaktere" << endl;
cout << "Kemi " << zbrazetira << " zbrazetira" << endl;
return 0;
}
Rezultati:


Shembull:
Programi q kopjon prmbajtjen e nj fajlli, n nj fajll tjetr. Ky program, i krkon
shfrytzuesit q t jep emrat e fajllave pr hyrje dhe pr dalje dhe pastaj e bn kopjimin.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
char ch;
string inputFajlli;
string outputFajlli;

cout << "Jepni emrin e fajllit burimor, si (c:\inputfajlli): ";
cin >> inputFajlli;

cout << "Jepni emrin e fajllit cak, si (c:\outputfajlli): ";
cin >> outputFajlli;

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
133

ofstream oFajlli(outputFajlli.c_str());
ifstream iFajlli(inputFajlli.c_str());
//Verifikimi i gabimit gjate hapjes se fajllit
//eshte anashkaluar per shkurtesi.

while (iFajlli.get(ch))
{
oFajlli.put(ch);
}

return 0;
}

I/O Manipulatort
Deri tani, kemi pranuar formatizimin e nnkuptuar t daljes. C++ definon edhe nj
bashksi manipulatorsh t cilt mund t prdoren pr t ndryshuar gjendjen objekteve t
iostram. Kto kontrollojn mnyrn e formatizimit t t dhnave. Ato jan t definuara n fajllin
<ios> q duhet t prfshihet prmes direktivs include. Zakonisht, nuk sht e nevojshme t
prfshihet n mryr eksplicite, pasi q n mnyr indirekte sht i prfshir prmes librarive
tjera, si <iostream>.
Manipulatort dhe mnyr e veprimit t tyre:


Manipulatori Prdorimi
boolalpha Bn, q variablat booleane t paraqiten si true ose false (tekstualisht).
noboolalhpa (default) Bn, q variablat booleane t paraqiten si 0 ose 1.
dec (default) Specifikon se numrat (integer) paraqiten n bazn 10.
Hex Specifikon se numrat (integer) paraqiten si heksadecimal (n bazn 16).
Oct Specifikon se numrat (integer) paraqiten si oktal (n bazn 8).
Left Teksti n fushn dalse rreshtohet majtas .
Right Teksti n fushn dalse rreshtohet djathtas.
Internal Bn q shenja e numrit t rreshtohet majtas kurse vlera djathtas.
noshobase (default) kyq paraqitjen e prefiksit q tregon bazn e numrit.
showbase Kyq paraqitjen e prefiksit q tregon bazn e numrit.
noshowpoint (default) Paraqet pikn decimale vetm nse ekziston pjesa decimale.
showpoint Paraqet pikn decimale gjithmon.
noshowpos (default) Nuk paraqet shenjn "+" si prefiks para numrave pozitiv.
showpos Paraqet shenjn "+" si prefiks t numrave pozitiv.
skipes (default)
Kaprcen hapsirat e bardha (zbraztirat, tab, rreshti i ri) nga ana e operatorit t
hyrjes >>.

noskipes Hapsirat e bardha nuk kaprcehen nga operatori i nxjerres, >>.
fixed (default) Bn q numrat me presje dhjetore t paraqiten n notacion fiks (fixed).
scientific Bn q numrat me presje dhjetore t paraqiten n notacion shkencor (scientific).
nouppercase (default) 0x paraqitet pr numrat heksadecimal, e pr notacionin shkencor.
uppercase 0x paraqitet pr numrat heksadecimal, E pr notacionin shkencor.
Manipulatort e tabels s msiprme modifikojn gjendjen e objektit iostream. Kjo do t
thot se, kur t prdoren njher n nj objekt n iostream, ata do t ken efekt n t gjitha
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
134
hyrjet dhe daljet vijuese t atij objekti. Ka disa manipulator q prdoren pr t modifikuar
ndonj dalje t veant, por nuk modifikojn gjendjen e objektit.

Caktimi i gjersis s daljes (Output Width)
setw(w) vendos gjersin pr dalje (output) ose hyrje (input) n ; krkon q t prfshihet
me include.
idth(w) funksion i klass iostream (member function).

Mbushja e hapsirave t bardha
setfill(ch) mbush hapsirat e bardha t daljes m karakterin ch; krkon q t prf shihet.
fill(ch) funksion i klass iostream (memeber function).

Caktimi i precizitetit
setprecision(n) vendos paraqitjen e numrave me presje dhjetore me precizitet n. Kjo
nuk ndikon mnyrn e trajtimit t numrave me presje dhjetore gjat llogaritjeve n program.

Shembull:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

int main()
{
int intNumri = 15;

cout << "Numer Integer" << endl;
cout << "Standard: " << intNumri << endl;
cout << "Octal: " << oct << intNumri << endl;
cout << "Hex: " << hex << intNumri << endl;
cout << "Kycja e paraqitjes se bazes" << showbase << endl;
cout << "Dec: " << dec << intNumri << endl;
cout << "Octal: " << oct << intNumri << endl;
cout << "Hex: " << hex << intNumri << endl;
cout << "Ckycja e paraqitjes se bazes" << noshowbase << endl;
cout << endl;

double doubleVlera = 12.345678;

cout << "Numer me presje dhjetore" << endl;
cout << "Default: " << doubleVlera << endl;
cout << setprecision(10);
cout << "Preciziteti 10: " << doubleVlera << endl;
cout << scientific <<"Notacioni shkencor: "<<doubleVlera<< endl;
cout << uppercase;
cout << "Shkronja e madhe E: " << doubleVlera << endl;
cout << endl;

bool vleraBooleane = true;

cout << "Boolean" << endl;
cout << "Default: " << vleraBooleane << endl;
cout << boolalpha <<"Seti BoolAlpha: " << vleraBooleane << endl;
cout << endl;

www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
135
string EmriIm = "Artan";

cout << "Stringjet" << endl;
cout << "Default: " << EmriIm << endl;
cout << setw(35) << right << "Me setw(35) dhe djathtas: "
<< EmriIm << endl;
cout.idth(20);
cout << "Me width(20): " << EmriIm << endl;
cout << endl;

return 0;
}



www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
136

Referencat

N C++ referenca sht nj pseudonim (nofk) pr nj variabl. Dobia e prdorimit t
referencave sht gjat prdorimit t prcjelljes s vlerave n funksione. Ato ofrojn nj
mundsi pr t kthyer vlerat prej funksioneve.
int vlera; // Declaron nj integer
int &rVlera = vlera; // Deklaron nj referenc pr n integer-in val
Para emrit t referencs prdoret simboli &. N kt kontekst, & thirret si operatori i
referencs. Kjo tregon se rVlera sth referenc, e jo objekt i zakonshm. Ndryshe, shenja
&prdoret pr t marr adresn e objektit (tek pointert). N at kontekst, & quhet operatori
i adress. Adresa e operatorit prdoret pr t marr adresn, zakonisht, pr t inicializuar
pointerin:

int vlera; // Deklaron nje integer
int *pvlera = &vlera; // Deklaron pointerin dhe e inicializon at me adresn e variables vlera.

Referenca nuk sht objekt unik. Ajo sht thjesht nj pseudonim ose nj sinonim pr nj
objekt tjetr. Identifikatori i referencs (emri) mund t prdoret kudo ku mund t prdoret
identifikatori i referuar. do ndryshim i br n referenc do t aplikohet edhe n objektin
origjinal. Gjithashtu, do ndryshim i br n objektin origjinal do t shihet edhe prmes
referencs.

#include <iostream>
using namespace std;

int main()
{

int vlera = 1;
int &rVlera = vlera;

cout << "vlera eshte " << vlera << endl;
cout << "rVlera eshte " << rVlera << endl<<endl;

cout << "Vlera behet 2" << endl;
vlera = 2;

cout << "vlera eshte " << vlera << endl;
cout << "rVlera eshte " << rVlera << endl<<endl;

cout << "rVlera behet 3" << endl;
rVlera = 3;

cout << "vlera eshte " << vlera << endl;
cout << "rVlera eshte " << rVlera << endl<<endl;

return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
137


Referenca duhet t inicializohet kur t krijohet. Nse nuk veprohet kshtu, do t paraqitet
gabim n program.
Referenca nuk mund t ricaktohet. Nse tentoni t ricaktoni referencn, rezultati do t jet
nj caktim i vlers s objektit origjinal t referuar.

Shembull:
#include <iostream>
using namespace std;

int main()
{

int Vlera1 = 10;
int Vlera2 = 20;
int &rVlera = Vlera1;

cout << "Vlera1 eshte " << Vlera1 << endl;
cout << "Vlera2 eshte " << Vlera2 << endl;
cout << "rVlera eshte " << rVlera << endl;

rVlera = Vlera2; //ka ndodhe ketu?
cout << endl << "rVlera = Vlera2" << endl;
cout << "Vlera1 eshte " << Vlera1 << endl;
cout << "Vlera2 eshte " << Vlera2 << endl;
cout << "rVlera eshte " << rVlera << endl;

Vlera2 = 30;
cout << endl << "Caktojme Vlera2 = 30" << endl;
cout << "Vlera1 eshte " << Vlera1 << endl;
cout << "Vlera2 eshte " << Vlera2 << endl;
cout << "rVlera eshte " << rVlera << endl;

return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
138


Ndarja e vlers rVlera = Vlera2; ia ndan vlern e Vlera2 rVlera-s. Pasi q gjithka q veprohet
n referenc aplikohet edhe n objektin e referuar, ather variabls Vlera1 i sht ndar vlera e
Vlera2, 20. nse referenca do t ri-caktohet pr ju referuar variabls Vlera2, ather Vlera1
nuk do t ndryshohej. Pastaj, vlera e Vlera2 sht ndryshuar n 30. Me kt rast sht ndryshuar
vetm Vlera2.
Referencat mund t bhen edhe n objektet e definuara t shfrytzuesit, njsoj si edhe n
variablat e brendshme t C++.

#include <iostream>
using namespace std;

class Katrori
{
public:
Katrori(int brinja): _brinja(brinja) {};
int MerreBrinjen() {return _brinja;}
void CaktoBrinjen(int brinja) {_brinja = brinja;}
int Syprina() {return _brinja * _brinja;}
private:
int _brinja;
};

int main()
{
Katrori Katror(15);
Katrori &refKatror = Katror;

cout<<"Brinja e katrorit eshte: "<<Katror.MerreBrinjen()<<endl;
cout << "Syprina e tij:" << refKatror.Syprina() << endl;

refKatror.CaktoBrinjen(18);

cout<<"Brinja e katrorit eshte: "<<refKatror.MerreBrinjen()<<endl;
cout << "Syprina e tij: " << Katror.Syprina() << endl;

return 0;
}
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
139


Pra, objekti Katror dhe referenca e tij refKatror mund t prdoren n kmbim. Ata jan
sinonime pr njri tjetrin. Gjithashtu, vreni se referenca mirret n obj ektin Katrori, e jo n
klasn Katrori. Katror sht nj instanc e klass Katrori.
Dobia m e madhe e referencave sht kur ato prdoren n funksionet globale ose metoda
t klasave. N kt rol, ato ofrojn nj mnyr pr kthimin e vlerave t shumfishta prej
funksioneve ose metodave pa prdorimin e pointerve. Referencat n mnyr strikte prdoren si
pseudonime, si n shembujt e mparshm. Ato jan thjesht nj identifikator tjetr (alternativ)
pr objektin e njjt.


www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
140





Prmbajtja:



Hyrje n programim ................................................................................................................. 2
Interpretert dhe kompajlert. ........................................................................................... 2
Hyrje n C++ ........................................................................................................................... 3
Variablat, tipet e tyre ............................................................................................................ 8
Deklarimi ............................................................................................................................. 8
Deklarimi dhe inicializimi ...................................................................................................... 9
Tipet, identifikatort dhe fjalt e rezervuara ....................................................................... 9
Identifikatort dhe fjalt e rezervuara t C++ ................................................................... 12
Leximi dhe Shtypja ................................................................................................................ 13
Rezervimi i hapsirs ..................................................................................................... 13
Mbushja me mostr ........................................................................................................ 14
Preciziteti ....................................................................................................................... 15
Sistemi numerik.............................................................................................................. 17
Leximi i fjalve dhe fjalive .................................................................................................. 18
Rreshtimi i tekstit............................................................................................................ 20
Stringu ........................................................................................................................... 21
Kushtet (Degzimet) .......................................................................................................... 25
Blloqet e urdhrave n deg .............................................................................................. 28
Kushtet e shumfishta dhe kushtet ndrthurura .................................................................. 29
Operatori ? ...................................................................................................................... 31
Switch ( ) ........................................................................................................................... 32
Kaprcimi pa kusht: goto .................................................................................................... 35
Unazat (Loops - laqet) ....................................................................................................... 38
Unaza while (gjersa) ....................................................................................................... 38
Unaza do while ............................................................................................................ 39
Unaza for ....................................................................................................................... 41
Format e unazs for ....................................................................................................... 43
Ndrprerja e unazs (break) ........................................................................................... 44
Kaprcimi i hapit t unazs (Continue) ............................................................................ 45
Vargjet .............................................................................................................................. 47
Deklarimi dhe inicializimi i vargjeve ................................................................................. 47
Vektort ............................................................................................................................. 48
Matricat ............................................................................................................................. 52
Veprimet me vektor/matrica dhe gjetja e antarve t caktuar t vektorit/matrics .......... 54
Antari m i madh (m i vogl) ....................................................................................... 57
Sortimi radhitja sipas madhsis ..................................................................................... 58
Formimi i fushave numerike ............................................................................................... 60
Bashkimi i dy matricave .................................................................................................. 66
Bashkimi i dy matricave n diagonale........................................................................... 70
Krijimi i vektorit prej antarve t matrics ...................................................................... 72
Funksionet ......................................................................................................................... 80
Funksionet void .............................................................................................................. 82
Inline funksionet ............................................................................................................. 82
Shembuj funksionesh ..................................................................................................... 83
Rekurzioni ...................................................................................................................... 91
Funksionet dhe Vektort ................................................................................................. 92
Funksionet dhe matricat ................................................................................................. 95
Prfshirja e fajllave me direktivn #include ...................................................................... 98
Thirrja e funksionit, nga fajlli tjetr ...................................................................................... 99
Direktiva #define .............................................................................................................. 102
www.e-Libraria.com
Avni Rexhepi Ushtrime n C++
141
Shtojca A - Probleme praktike .......................................................................................... 104
Numrat e rastit n C++ ................................................................................................. 104
Llogaritjet kohore ......................................................................................................... 110
Ngjyra e tekstit ............................................................................................................. 113
Shtojca B - Pointert ........................................................................................................ 117
Dukshmria e variablave .............................................................................................. 127
Shtojca C - Shkruarja dhe leximi i fajllave ......................................................................... 128
Referencat ................................................................................................................... 136

www.e-Libraria.com

You might also like