You are on page 1of 141

Lavdim Gashi

Prishtin, 2010
Lavdim Gashi Ushtrime n C++

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

2
Lavdim Gashi Ushtrime n C++

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

3
Lavdim Gashi Ushtrime n C++

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: retu rn 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 cilat
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 definuar 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 valid, 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.

4
Lavdim Gashi Ushtrime n C++

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 Kreu i programit - Koment


#include <iostream> Direktivat preprocesorike
using namespace std;

int main() Funksioni main()


{
int a; Deklarimi i variablave
a=5; Urdhrat e programit
cout << a;
return 0; Mbyllja e programit
}

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

int main()
{
int a;

cin >> a; /leximi prej tastiere

5
Lavdim Gashi Ushtrime n C++

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;
}

6
Lavdim Gashi Ushtrime n C++

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 -

7
Lavdim Gashi Ushtrime n C++

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)

madhsia n
Tipi Rangu i vlerave
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 0..65535 2
bit
unsigned int - 32 0..4294967295 4
bit
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; int //Deklarimet ne nje rresht

A[8]; //Vektori

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

Indekset fillojn me vlern zero

int A[6]; //6 antar - A[0], D[1], ..., D[5].

8
Lavdim Gashi Ushtrime n C++

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 krjijimin 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 = '%';

9
Lavdim Gashi Ushtrime n C++

Vreni se si karakteri futet n thonjza t njfishta (apostrofe). Variablave 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;

10
Lavdim Gashi Ushtrime n C++

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, ngjyra,
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.

11
Lavdim Gashi Ushtrime n C++

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 dallon 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[].

12
Lavdim Gashi Ushtrime n C++

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>

13
Lavdim Gashi Ushtrime n C++

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

14
Lavdim Gashi Ushtrime n C++

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*160=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

15
Lavdim Gashi Ushtrime n C++

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;
}

16
Lavdim Gashi Ushtrime n C++

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 = anbn + an 1bn 1 + an 2bn 2 + ... +a1b1 + a0b0 ku, a

- shifra n pozitn prkatse, b - baza

Dec: 100 = 1*102+0*101+0*100=1*100+0*10+0*1=100+0+0=100; Hex:


64 = 6*161+4*160=96+4=6*16+6*1=100;
Oct: 144 = 1*82+4*81+4*80=1*64+4*8+4*1=64+32+4=100;

17
Lavdim Gashi Ushtrime n C++

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 tastiers (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;
}

18
Lavdim Gashi Ushtrime n C++

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;
}

19
Lavdim Gashi Ushtrime n C++

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;
}

20
Lavdim Gashi Ushtrime n C++

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 ekzekutimin. 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:

21
Lavdim Gashi Ushtrime n C++

#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

22
Lavdim Gashi Ushtrime n C++

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;
}

23
Lavdim Gashi Ushtrime n C++

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); Shton karkteret prej C-stringut, char ose objekteve tjera string.
append(string &str);
append(size_t count, char ch);
append(InputIterator Start,
InputIterator End);
Kthen referencn n karakterin n pozitn e specifikuar. Dallon prej
at(size_t offset); 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 Kopjin numrin-count e karaktereve nga C-stringu duke filluar nga
count, size_t offset); 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);
Fshin karakteret nga pozita e specifikuar.
erase(iterator it);
erase(size_t pos, size_t count);
find(char ch,size_t offset = 0);
find(char *pt,size_t offset = 0); Kthen indeksin e karakterit t par t substringut kur ai gjendet.
find(string &str,size_t offset = Prndryshe, kthehet vlera speciale npos.
0);

24
Lavdim Gashi Ushtrime n C++

Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t


find_first_not_of();
par q nuk sht n stringun krkues.
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
find_first_of();
par q sht n stringun krkues.
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
find_last_not_of();
fundit q nuk sht n stringun krkues.
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
find_last_of();
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,
Inserton karakteret n pozitn e specifikuar.
char ch);
insert(iterator it, InputIterator
start, InputIterator end);
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
Zvendson elementet n string me karakteret e specifikuara. Rangu mund
count, string &str);
t specifikohet prmes pozits startuese dhe numrit t elementeve pr
replace(iterator first, iterator
zvendsim ose duke prdorur iteratort.
last, char *pt);
replace(iterator first, iterator
last, string &str);
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 Fillimi


#include <iostream>
using namespace std; x
int main()
{ Jo
int x; x >0
cout << "Vlera x="; Po

cin >> x; X sht pozitiv


if (x > 0)
cout << "\nx eshte pozitiv \n";
Fundi
return 0;
}

25
Lavdim Gashi Ushtrime n C++

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, 3 <= 2 false
ose barazi me
== Barazi me 3 == 3 true
> M i madh se 3 > 2 true
>= M i madh se, 2 >= 3 false
ose barazi me
!= Jobarazi me 2 != 3 true

// Programi if1b Fillimi


#include <iostream>
using namespace std; x
int main()
{ Jo
int x; x >0
Po

cout << "Vlera x="; X sht pozitiv


cin >> x;
Jo
if (x > 0) x <0
cout << "\n x eshte pozitiv \n"; Po
if (x < 0) X sht negativ
cout << "\n x eshte negativ \n";

return 0; Fundi
}

26
Lavdim Gashi Ushtrime n C++

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

27
Lavdim Gashi Ushtrime n C++

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

return 0;
}

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;
}

28
Lavdim Gashi Ushtrime n C++

// Programi if3 Fillimi


#include <iostream>
using namespace std;
int main() x
{
Po Jo
int x,y,z; x >0

cout << "Vlera x="; y=2*x


cin >> x;
z=x*x
if (x > 0)
{ X sht
y,z negativ
y=2*x;
z=x*x;
Fundi
cout << "\ny=2*x="<<y;
cout << "\nz=x*x="<<z;
}
else
cout << "\nx eshte negativ\n";

cout<<endl;
return 0;
}

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.

29
Lavdim Gashi Ushtrime n C++

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.

30
Lavdim Gashi Ushtrime n C++

Fillimi

Po Jo
x > 0

x > 10

x>0 x>0 x sht


x>10 x<10 negativ

Fundi

// 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;

31
Lavdim Gashi Ushtrime n C++

// 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 ( )
Fillimi

Nota

Nota
1 5
2 3 4

Dobt Mjaftuesh. Mir Sh. mir Shklq.

Fundi

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";

32
Lavdim Gashi Ushtrime n C++

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()
{

33
Lavdim Gashi Ushtrime n C++

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

34
Lavdim Gashi Ushtrime n C++

Kaprcimi pa kusht: goto

Fillimi Fillimi

Go to Fundi Go to Fundi

Fillimi
Fillimi Mesi Fundi
Go to Dalja

Go to Dalja Go to Fillimi Go to Mesi


Mesi

Go to Fillimi Dalja

Fundi
Fundi

Go to Mesi

Dalja

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;
}

35
Lavdim Gashi Ushtrime n C++

Fillimi

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

i<10 i>=10

Fundi

// 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;
}

36
Lavdim Gashi Ushtrime n C++

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;
}

37
Lavdim Gashi Ushtrime n C++

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; ku jan:
while(kushti) i - variabla e unazs.
{ f - vlera fillestare e variabls s unazs.
urdhri/at; kushti - kushti i ekzekutimit t urdhrave q
i=i+h; prfshihen n trupin e unazs.
} h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at - urdhrat q ekzekutohen brenda unazs.

Fillimi

S=0

i=1
Jo
i n
Po
S=S+i

i=i+1

Fundi

38
Lavdim Gashi Ushtrime n C++

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

39
Lavdim Gashi Ushtrime n C++

i=f; ku jan:
do i - variabla e unazs.
{ f - vlera fillestare e variabls s unazs.
urdhri/at; kushti - kushti i ekzekutimit t urdhrave q prfshihen
i=i+h; n trupin e unazs.
} h - hapi me t cilin ndryshohen vlerat e variabls i.
while(kushti); urdhri/at - urhdri/at e prfshira brenda unazs.

Fillimi

S=0

i=1

S=S+i

i=i+1

Po i n
Jo
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;
}

40
Lavdim Gashi Ushtrime n C++

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 Fillimi


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

Nga skema n vijim mund t shihet se si pasqyrohet pjesa e unazs do while n at


for

41
Lavdim Gashi Ushtrime n C++

Fillimi Fillimi

n n

S=0 S=0

i=1
i=1; i<=n; i=i+1

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

Fundi

// 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;

42
Lavdim Gashi Ushtrime n C++

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:

43
Lavdim Gashi Ushtrime n C++

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.

Fillimi Fillimi

n n

S=0 S=0

i=1 i=1; i<=10; i=i+1

Po Po
i > 5 i > 5
Jo
S=S+i S=S+i

i=i+1
S
Po
i n
Fundi
Jo

Fundi

// Programi Break - ndrprerja e unazs, dalja prej unaze


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

44
Lavdim Gashi Ushtrime n C++

{
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).

Fillimi

i=1

Po
i=5
Jo
i

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

// Programi Continue - vazhdimi, kalimi i hapit t unazs


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

45
Lavdim Gashi Ushtrime n C++

{
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
n

prjashtuar treshin (3) , si n vijim S=


i
i 1
i 3

// Programi - Continue2 Fillimi


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

46
Lavdim Gashi Ushtrime n C++

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} };

47
Lavdim Gashi Ushtrime n C++

Vektort

// Programi vektor1 Fillimi


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

// 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["

48
Lavdim Gashi Ushtrime n C++

<< 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;
}

49
Lavdim Gashi Ushtrime n C++

//Formimi i vektorit prej vektori Fillimi


#include <iostream>
using namespace std; n,(ai,i=1,n)
int main()
{ i=1
const int n=4;
int i,A[n]={1,2,3,4},B[n];
for (i=0;i<n;i++) bi=2ai
{
B[i]=2*A[i]; i,bi
cout << "B["
<< i i=i+1
<< "]="
Po
<< B[i] i n
<< "\n"; Jo
} Fundi
return 0;
}

// Bashkimi i dy vektoreve G=B & A Fillimi


#include <iostream>
using namespace std; m,n,(ai,i=1,n),(bi,i=1,m)
int main()
{ i=1
const int m=3,n=2;
int A[n]={1,2}, Po Jo
B[m]={3,4,5}, i m
i,G[m+n];
for (i=0;i<m+n;i++) gi=bi gi=ai-m
{
if (i<m)
G[i]=B[i]; i,gi
else
G[i]=A[i-m]; i=i+1
cout << "G[" Po
<< i i (m+n)
<< "]=" Jo
<< G[i] Fundi
<< "\n";
}
return 0;
}

50
Lavdim Gashi Ushtrime n C++

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;
}

51
Lavdim Gashi Ushtrime n C++

Matricat

// Programi matrica1 Fillimi


#include <iostream>
using namespace std; i 1, m
int main() m, n a,
ij j 1, n
{
const int m=3, n=3; i=1
int i,j;
int A[m][n]={{1,2,3},
j=1
{4,5,6},
{7,8,9}};
a ij
cout << "Matrica A: " << "\n";
for (i=0;i<m;i++)
{ j=j+1
for (j=0;j<n;j++)
cout << A[i][j] Po
j n
<< " ";
cout << "\n"; Jo
} i=i+1
return 0;
} Po
i m
Jo
Fundi

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];

52
Lavdim Gashi Ushtrime n C++

}
}
//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).

53
Lavdim Gashi Ushtrime n C++

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


vektorit/matrics

Shuma e antarve t matrics:

//Shuma e anetareve te matrices Fillimi


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

Po
i m
Jo
S

Fundi

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

54
Lavdim Gashi Ushtrime n C++

Fillimi

m,(ai,i=1,m)

n=0

i=1

Jo
ai < 0
Po
n=n+1

i=i+1

Po
i m
Jo
n

Fundi

//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;
}

55
Lavdim Gashi Ushtrime n C++

//Numri i antareve negativ Fillimi


//dhe pozitiv te vektorit
#include <iostream> m,(ai,i=1,m)
using namespace std;
#include <cmath> p=0
int main()
{ n=0
const int m=5;
int A[m]={2,-3,-7,4,1},i,p,n; i=1
p=0;
n=0; Po Jo
for (i=0;i<m;i++) ai < 0
if (A[i]<0)
n=n+1; n=n+1 p=p+1
else
p=p+1;
cout << "Antar pozitiv p=" i=i+1
<< p Po
<< "\n"; i m
cout << "Antar negativ n=" Jo
<< n n,p
<< "\n";
return 0; Fundi
}

//Numri i anetareve mes 3 dhe 8 Fillimi


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

56
Lavdim Gashi Ushtrime n C++

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.

Fillimi

m,(ai,i=1,m)

amax=a1

i=2

Po
amax ai
Jo
amax=ai

i=i+1
Po
i m
Jo
amax

Fundi

//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;
}

57
Lavdim Gashi Ushtrime n C++

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.

2
A[i] A[j]

1 3
B

58
Lavdim Gashi Ushtrime n C++

Fillimi

n,(ai,i=1,n)

i=1

j=i+1

Po
ai aj
Jo
b=ai

ai=aj

aj=b

j=j+1

Po
j n
Jo
i=i+1

Po
i n-1
Jo
(ai,i=1,n)

Fundi

//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;
}

59
Lavdim Gashi Ushtrime n C++

Formimi i fushave numerike

Fillimi

m,n

i=1

j=1

< >
i <> j
=
aij=1 aij=0 aij=2

j=j+1

Po
j n
Jo
i=i+1

Po
i m
Jo
i 1, m
a ,
ij j 1,n

Fundi

//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";

60
Lavdim Gashi Ushtrime n C++

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:

61
Lavdim Gashi Ushtrime n C++

Fillimi

m,n

i=1

j=1

< >
i <- j>
=
aij=2i+3j aij=2i+3j aij=3i-j2

j=j+1

Po
j n
Jo
i=i+1

Po
i m
Jo
i 1, m
aij,
j 1,n

Fundi

//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;
}

62
Lavdim Gashi Ushtrime n C++

Fillimi

m,(di,i=1,m)

i=1

j=1

< >
i <- j>
=
aij=di+j aij=di aij=di+8

j=j+1

Po
j m
Jo
i=i+1

Po
i m
Jo
i 1, m
aij,
j 1,m

Fundi

63
Lavdim Gashi Ushtrime n C++

//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;
}

64
Lavdim Gashi Ushtrime n C++

Fillimi

m,(bi,i=1,m)

i=1

j=1

Po Jo
j=1

gij=bj gij=i

j=j+1

Po
j m
Jo
i=i+1

Po
i m
Jo

g , i1, m
ij j 1,m

Fundi

//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;
}

65
Lavdim Gashi Ushtrime n C++

Bashkimi i dy matricave

a0,0 a0,n-1 b0,0 bm-1,n-1

am-1,0 am-1n-1 bm-1,0 bm-1,n-1

Fillimi

i 1, m i 1, m
m ,a ij, , b ij ,
j 1, m j 1, m

i=1

j=1

Po Jo
j m

dij=aij dij=bi,j-m

j=j+1

Po
j 2m
Jo
i=i+1

Po
i m
Jo
i 1, m
dij,
j 1,2m

Fundi

66
Lavdim Gashi Ushtrime n C++

//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;
}

67
Lavdim Gashi Ushtrime n C++

Fillimi

i=1

j=1

Po Jo
i n

Jo i=j Po

tij=0 tij=1 tij=0

j=j+1

Po
j n
Jo
i=i+1

Po
i 2n
Jo
i 1,2n
tij,
j 1,n

Fundi

//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++)

68
Lavdim Gashi Ushtrime n C++

{
cout.width(5);
cout << T[i][j];
}
cout << "\n";
}
return 0;
}

69
Lavdim Gashi Ushtrime n C++

Bashkimi i dy matricave - n diagonale

F 0

0 G

Fillimi

m,n,l,k

i 1,m i 1,l
f , , g ,
ij j 1,n ij
j 1, k
i=1

j=1

Po Jo
i m
Po Jo Po Jo
j n j n

rij=fij rij=0 rij=0 rij=gi-m,j-n

j=j+1

Po
j n+k
Jo
i=i+1

Po
i m+l
Jo
i 1, m l
r ij 1, n k
, j

Fundi

//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},

70
Lavdim Gashi Ushtrime n C++

{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;
}

71
Lavdim Gashi Ushtrime n C++

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] 1 2 3


A[1][0] A[1][1] A[1][2] = 4 5 6
A[2][0] A[2][1] A[2][2] 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:

72
Lavdim Gashi Ushtrime n C++

Fillimi

i 1,m
m, n, a ,
ij j 1, n

k=0

i=1

j=1

k=k+1

zk=aij

j=j+1

Po
j n
Jo
i=i+1

Po
i m
Jo
(zi,i=1,k)

Fundi

//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=[";

73
Lavdim Gashi Ushtrime n C++

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;
}

74
Lavdim Gashi Ushtrime n C++

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; k=0;
for (i=0;i<m;i++) for (i=0;i<m;i++)
for (j=0;j<n;j++) for (j=0;j<n;j++)
{ {
k=k+1; B[k]=A[i][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 fillohet 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:

75
Lavdim Gashi Ushtrime n C++

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:

Fillimi

i 1,m
m, n, a ij ,
j 1,n
k=0

i=1

j=1

Jo
aij < 0
Po
k=k+1

zk=aij

j=j+1

Po
j n
Jo
i=i+1

Po
i m
Jo
(zi,i=1,k)

Fundi

76
Lavdim Gashi Ushtrime n C++

//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;
}

77
Lavdim Gashi Ushtrime n C++

Fillimi

i 1,m
m, n, a ,
ij j 1, n

x=0

y=0

i=1

j=1

Po Jo
aij < 0

x=x+1 y=y+1

fx=aij gy=aij

j=j+1

Po
j n
Jo
i=i+1

Po
i m
Jo

(fi,i=1,x)

(gi,i=1,y)

Fundi

// 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

78
Lavdim Gashi Ushtrime n C++

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;
}

79
Lavdim Gashi Ushtrime n C++

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

s=x+y

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.

80
Lavdim Gashi Ushtrime n C++

Bllok skema e programit m nnprogram duket si n vijim:

Programi kryesor Nn-programi (funksioni)

a b

Fillimi a,b Shuma(x,y)

a,b r=x+y

s=Shuma(a,b) return r

s (a+b)

Fundi

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

81
Lavdim Gashi Ushtrime n C++

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;
}

Fillimi prodhimi(a,b)

a,b y=a*b

p=prodhimi(5,4)
return y

Fundi

82
Lavdim Gashi Ushtrime n C++

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:


b
(c * i d )
S= i a
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:
n
i
S= i m (Pra, shihet se do te kemi: a=m, b=n, c=1, d=0)

mn 1 0

Shuma(a,b,c,d)

Fillimi S=0

m,n i=a

s=ShumaVargut(m,n,1,0) S=S+(c*i+d)

s i=i+1

Fundi Po
i b

return S

// 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";

83
Lavdim Gashi Ushtrime n C++

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
(3* i 2) (Tani, shihet se do te kemi: a=2, b=n, c=3, d=2)
i 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;
}

84
Lavdim Gashi Ushtrime n C++

Edhe pr rastin e prodhimit, forma universale e prodhimit te seris se numrave sht:

P = b
(c * i d )
i a

Shembull:

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

Fillimi ProdVarg(a,b,c,d)

m,n P=1

Prodhimi=ProdVarg(m,n,1,1) i=a

Prodhimi P=P*(c*i+d)

Fundi i=i+1

Po i b

return P

// 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;
}

85
Lavdim Gashi Ushtrime n C++

Shembull:

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

// 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;
}

86
Lavdim Gashi Ushtrime n C++

T llogaritet:
n n 2 n
Y =3 (3i 2) + (2 * i 1 ) + 4 ( i 3)
i 1 i 2 i 1

Fillimi

m,n

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

Fundi

Shuma(a,b,c,d) Prodhimi(a,b,c,d)

S=0 P=1

i=a i=a

S=S+(c*i+d) P=P*(c*i+d)

i=i+1 i=i+1

Po Po
i b i b

return S return P

// 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;

87
Lavdim Gashi Ushtrime n C++

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

S1=Shuma(1,n,3,2)

S2=Shuma(2,n+2,2,1)

P1=Prodhimi(1,n,1,3)

Y=S1+S2+P1

Fundi

Shuma(a,b,c,d) Prodhimi(a,b,c,d)

S=0 P=1

i=a i=a

S=S+(c*i+d) P=P*(c*i+d)

i=i+1 i=i+1

Po Po
i b i b

return S return P

88
Lavdim Gashi Ushtrime n C++

Llogaritja e faktorelit

Fillimi Faktoriel(m)

n F=1

Fakt=Faktoriel(n) i=1

Fakt F=F*i

Fundi i=i+1

Po
i m

return F
// 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).

89
Lavdim Gashi Ushtrime n C++

Shembull:

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

Fillimi Faktoriel(m)

n F=1

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

Fakt F=F*i

Fundi
i=i+1

Po
i m

return F
// 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;
}

90
Lavdim Gashi Ushtrime n C++

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;
}

91
Lavdim Gashi Ushtrime n C++

/* 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;
}

92
Lavdim Gashi Ushtrime n C++

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
}

93
Lavdim Gashi Ushtrime n C++

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;
}

94
Lavdim Gashi Ushtrime n C++

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);

95
Lavdim Gashi Ushtrime n C++

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;
}

96
Lavdim Gashi Ushtrime n C++

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;
}

97
Lavdim Gashi Ushtrime n C++

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 fajllat 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<<Lavdim Gashi \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 Adresa.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;
}

98
Lavdim Gashi Ushtrime n C++

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.

99
Lavdim Gashi Ushtrime n C++

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;
}
}

100
Lavdim Gashi Ushtrime n C++

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:

101
Lavdim Gashi Ushtrime n C++

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 "Lavdim Gashi"
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;
}

102
Lavdim Gashi Ushtrime n C++

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;
}

103
Lavdim Gashi Ushtrime n C++

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;
}
}

104
Lavdim Gashi Ushtrime n C++

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++)
{

105
Lavdim Gashi Ushtrime n C++

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;
}
}

106
Lavdim Gashi Ushtrime n C++

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;
}
}

107
Lavdim Gashi Ushtrime n C++

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 rastit. 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)));

108
Lavdim Gashi Ushtrime n C++

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);

109
Lavdim Gashi Ushtrime n C++

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;
}

110
Lavdim Gashi Ushtrime n C++

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;

111
Lavdim Gashi Ushtrime n C++

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;

112
Lavdim Gashi Ushtrime n C++

//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

113
Lavdim Gashi Ushtrime n C++

//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:

114
Lavdim Gashi Ushtrime n C++

#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

115
Lavdim Gashi Ushtrime n C++

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);
}

116
Lavdim Gashi Ushtrime n C++

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:

117
Lavdim Gashi Ushtrime n C++

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

118
Lavdim Gashi Ushtrime n C++

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:

119
Lavdim Gashi Ushtrime n C++

(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 (ruan) 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;

120
Lavdim Gashi Ushtrime n C++

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;

121
Lavdim Gashi Ushtrime n C++

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;
}

122
Lavdim Gashi Ushtrime n C++

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 rreshtin 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:

123
Lavdim Gashi Ushtrime n C++

#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;

124
Lavdim Gashi Ushtrime n C++

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;
}

125
Lavdim Gashi Ushtrime n C++

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

126
Lavdim Gashi Ushtrime n C++

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; Variablat Globale


char Emri[15];

int main()
{
int Vlera1; Variablat Lokale
double Vlera2;

cout << Vlera1 << endl;


cout << Emri << endl;
cout << S << endl; Urdhrat

return 0;
}

int Siperfaqja(int a, int b) Variablat Lokale


{
int S
S=a*b;
return S
}

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.

127
Lavdim Gashi Ushtrime n C++

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;
}

128
Lavdim Gashi Ushtrime n C++

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 rrjedhn 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.
Trajto fajllin si fajll binar. Fajlli binar i ruan t dhnat n format intern (ninar, 1 dhe 0), e jo n binary
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()
{

129
Lavdim Gashi Ushtrime n C++

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.

130
Lavdim Gashi Ushtrime n C++

- 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;

131
Lavdim Gashi Ushtrime n C++

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;

132
Lavdim Gashi Ushtrime n C++

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.
Kaprcen hapsirat e bardha (zbraztirat, tab, rreshti i ri) nga ana e operatorit t
skipes (default) 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

133
Lavdim Gashi Ushtrime n C++

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 prfshihet.
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;

134
Lavdim Gashi Ushtrime n C++

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;
}

135
Lavdim Gashi Ushtrime n C++

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;
}

136
Lavdim Gashi Ushtrime n C++

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;
}

137
Lavdim Gashi Ushtrime n C++

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;
}

138
Lavdim Gashi Ushtrime n C++

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

139
Lavdim Gashi Ushtrime n C++

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++ ... .......................................................................... .1 2
Leximi dhe Shtypja ... ........................................................................................................................... .1 3
Rezervimi i hapsirs ... .............................................................................................................. ..1 3
Mbushja me mostr ... ................................................................................................................. ..1 4
Preciziteti ... ................................................................................................................................. ..1 5
Sistemi numerik... ........................................................................................................................ ..1 7
Leximi i fjalve dhe fjalive ... ........................................................................................................... ..1 8
Rreshtimi i tekstit... ........................................................................................................................2 0
Stringu ... .......................................................................................................................................2 1
Kushtet (Degzimet) ... .................................................................................................................... .2 5
Blloqet e urdhrave n deg ... ........................................................................................................ .2 8
Kushtet e shumfishta dhe kushtet ndrthurura ... ...........................................................................2 9
Operatori ? ... ................................................................................................................................. .3 1
Switch ( ) ...........................................................................................................................................3 2
Kaprcimi pa kusht: goto ................................................................................................................. .3 5
Unazat (Loops - laqet) ... .................................................................................................................. .3 8
Unaza while (gjersa) ... ................................................................................................................ .3 8
Unaza do - while ...........................................................................................................................3 9
Unaza for ... ................................................................................................................................. ..4 1
Format e unazs for ... ................................................................................................................. .4 3
Ndrprerja e unazs (break) ... .................................................................................................... .4 4
Kaprcimi i hapit t unazs (Continue) ... .................................................................................... .4 5
Vargjet ... ...........................................................................................................................................4 7
Deklarimi dhe inicializimi i vargjeve ... ..........................................................................................4 7
Vektort ... ....................................................................................................................................... ..4 8
Matricat ... ........................................................................................................................................ ..5 2
Veprimet me vektor/matrica dhe gjetja e antarve t caktuar t vektorit/matrics ... ............ .5 4
Antari m i madh (m i vogl) ... .................................................................................................5 7
Sortimi - radhitja sipas madhsis ... ............................................................................................... .5 8
Formimi i fushave numerike ... ........................................................................................................ ..6 0
Bashkimi i dy matricave ... .......................................................................................................... ..6 6
Bashkimi i dy matricave - n diagonale... .....................................................................................7 0
Krijimi i vektorit prej antarve t matrics ... .............................................................................. .7 2
Funksionet ... .................................................................................................................................... .8 0
Funksionet void ... ....................................................................................................................... ..8 2
Inline funksionet ... ....................................................................................................................... .8 2
Shembuj funksionesh ... .............................................................................................................. ..8 3
Rekurzioni .................................................................................................................................... .9 1
Funksionet dhe Vektort ... .......................................................................................................... .9 2
Funksionet dhe matricat ... ........................................................................................................... .9 5
Prfshirja e fajllave me direktivn #include ... ............................................................................. .9 8
Thirrja e funksionit, nga fajlli tjetr ... .............................................................................................. ..9 9
Direktiva #define .......................................................................................................................... .. 102

140
Lavdim Gashi Ushtrime n C++

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

141

You might also like