Download as pdf or txt
Download as pdf or txt
You are on page 1of 139

Programimi

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 p rshkruar 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
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, du ke 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 tasie r), cilado q paraqitet e para.
Funksioni main() sht pika startuese e ekzekutimit t do programi n C++. Por, kjo nuk sht
trsisht e vrtet n t gjitha rastet. Nse shkruhet programi q do t ekzekutohet n ambient t
pavarur, nuk duhet patjetr funksioni main(). Me prjashtim t ktij rasti, programi patjetr duhet ta ket
funksionin main(). Standardi ISO tregon dy mnyrat vijuese t cilat duhet t pranohen nga cilido
kompajler i C++:
int main()
int main(int argc, char *argv[])
Definicioni i par sht standard. Definicioni i dyt i merr dy parametra t funksionit. I pari
prmban numrin e argumenteve t linjs komanduese q i prcillen programit nga procesi thirrs (ai q
e thrret programin pr ekzekutim), i dyt sht nj varg i parametrave t linjs komanduese.
Standardi i C++ lejon kompajlerin q t pranoj definicionet e main() me parametra shtes, por kjo
sht e varur prej implementimit specifik dhe nuk sht portabile n prgjithsi.
Kthimi nga funksioni main()
Urdhri return pr kthim t rezultatit nga funksioni main( ) sht opcional (zakonisht mirret: return
0;). Mirpo kompajlert e vjetr dhe disa kompajler aktual nuk pranojn programet main() q nuk kan
urdhrin return, prandaj n shumicn e rasteve ai shkruhet.
Gjja e par q vrehet, sht se main() kthen nj integer (deklarimi: int main()). Vlera e tipit
integer reprezenton statusin e kthyer pr procesin thirrs (sistemin operativ).
Mund t kthehet fardo vlere, por vlerat e vetme portabile jan 0 dhe EXIT_SUCCESS, t cil at
prfaqsojn ndrprerjen (prfundimin) normal dhe EXIT_FAILURE, q prfaqson prfundimin jonormal.
EXIT_SUCCESS dhe EXIT_FAILURE jan t definuara n header-in <cstdlib>. Cilado vler tjetr e
kthyer, ia kthen procesit thirrs nj vler statusi t defi nuar prej implementimit.
Gjithashtu, disa kompajler do t pranojn edhe definimin e main(), si: void main(). Megjithat, kjo
sht thjesht jokorrekte dhe nuk duhet t prdoret.
ka ndodh nse nuk prdoret urdhri return? Nse kllapa mbyllse } e funk sionit 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
Komentet
Komentet, jan tekste pr shfrytzuesit, por q nuk kan ndikim n program. Ato shkruhen sa
pr t dhn ndonj shpjegim ose prshkrim. Kompajlleri i injoron trsisht.
// Komenti n nj rresht
/*Komenti n disa rreshta, apo
komenti n bllok */
//Programi i par
#include <iostream>
using namespace std;
int main()
{
/* Permes operatorit pr shtypje, cout,
do t shtypet teksti n ekran */
cout << "Programimi ne C++ ";
return 0;
}
Struktura e Programit:
Kreu i programit
Direktivat preprocesorike
Funksionet
Funksioni main()
Deklarimi i variablave
Urdhrat e programit
Mbyllja e programit
//Programi i dyt
#include <iostream>
using namespace std;
int main()
{
int a;
a=5;
cout << a;
return 0;
}
Kreu i programit - Koment
Direktivat preprocesorike
Funksioni main()
Deklarimi i variablave
Urdhrat e programit
Mbyllja e programit
//Programi i tret
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a; /leximi prej tastiere
5
cout << a;
return 0;
}
/shtypja n ekran
// 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
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 pajt ueshmri
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
null-terminated character arrays) dhe prmbajn funksionet pr string si:strcpy(), strcat() and strlen() si
dhe <string> i cili prdoret pr std::string class-at n C++.
Ajo ka sht me rndsi, sht se duhet t jeni n gjendje t shkruani kode t cilat e respektojn
C++ standardin, gj q do t thot se mund ti kompajloni n cilindo kompajler modern t C++-it.
Variablat, tipet e tyre
- T dhnat (ang. Data)
Tipi
unsigned short int
short int
unsigned long int
long int
int - 16 bit
int - 32 bit
unsigned int - 16
bit
unsigned int - 32
bit
float
double
char
Rangu i vlerave
0..65535
-32768..32767
0..4294967295
-2147483648..2147483647
-32768..32767
-2147483648..2147483647
0..65535
0..4294967295
1.2E-38..3.4E38
2.2E-308..1.8E308
256 simbole
madhsia n
bajta
2
2
4
4
2
4
2
4
4
8
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,
krijohet si varg i karaktereve te veanta*/
int x,y;
long int dita,e,f3;
double x,h; int g; float a,p;
int A[8];
double Z[3][5];
Indekset fillojn me vlern zero
int A[6]; //6 antar - A[0], D[1], ..., D[5].
keshtu qe Stringu
//Deklarimi i perbashket
//Deklarimet ne nje rresht
//Vektori
//Matrica
8
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 operac ionet 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
Vreni se si karakteri futet n thonjza t njfishta (apostrofe). Var iablave t tipit karakter
mund t ju ndahen edhe vlerat numerike:
char chNumri = 26;
Mund t deklarohen karakteret me shenj (signed) ose pa shenj (unsigned), ku karakteret
me shenj mund t ken vler pozitive, negative ose zero, kurse karakteret pa shen j 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
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 d ouble do t ruaj
vlera m t mdha se double (edhe pse kjo nuk sht gjithmon e vrtet). Sidoqoft, sht e
sigurt se double do t jet s paku i madh sa float por mund t jet m i madh, dhe long double
do t jet i madh s paku sa long por mund t jet edhe m imadh.
Enumeration (numeracioni - grupi)
Nj numeracion (grup) sht tip i definuar prej shfrytzuesit q i mundson shfrytzuesit
q t definoj rangun e vlerave pr tipin e dshiruar. Konstantet e emruara (antart e grupit)
prdoren pr t paraqitur vlerat e nj numeracioni (grupi), si p.sh.:
enum ditaeJaves {eHene,eMarte,eMerkure,eEnjte, ePremte, eShtune, eDiele};
ditaeJaves ditaeSotme = eMerkure;
if(ditaeSotme == eMarte)
{
// urdherat
}
Vlerat e nnkuptuara t prcaktuara pr konstantet e numeracionit jan zero-based (me
baz zero), kshtu q, pr shembullin paraprak:
eHene == 0, eMarte == 1, etj.
Shfrytezuesi mund t prcaktoj vlera t tjera pr ndonjrin antar t grupit, dhe vlerat
vijuese do t ken vler pr nj m t madhe. P.sh.
enum frutet {molla=3, bananja=7, portokalli, dardha, kiwi};
keshtu, q portokalli do t ket vlern 8, dardha 9, kiwi 10, etj.
Class - Klasat
Klasa i mundson shrytzuesit krijimin e tipeve m t sofistikuara t t dhnave, pr t
modeluar objektet dhe veprimet nga jeta e prditshme. Pra, klasa sht nj konstruksion
softverik q mund t prdoret pr simuluar ndonj objekt t jets reale. P.sh., modeli softverik i
nj veture, klasa vetura, mund t prmbaj t dhna pr tipin e veturs, si: tipi, ngjyr a,
harxhimi etj., dhe aftsit (aftsi vepruese, operative) si prshpejtimi, ngadalsimi,
frenimi, etj. Klasa sht tip i definuar i shfrytzuesit q i ka t dhnat, antart (members) dhe
aftsit (metodat). Objekti sht nj instanc (shembull, rast) e klass. P.sh., pr t krijuar
klasn katrori e cila ka t dhnat (vlerat) pr madhsi dhe ofron operacionet vizato dhe
ndryshomadhsin:
class katrori {
public:
katrori();
~katrori();
void vizato();
bool ndryshoMadhesine(int madhesiaeRe);
private:
int madhesia;
};
Diskutimi pr klasat, i tejkalon kufinjt e asaj ka msohet n kt semestr dhe nuk sht
prfshir n kt tekst.
11
Identifikatort dhe fjalt e rezervuara t C++
N C++ ne i krijojm emrat pr entitetet q i krijojm: variablat, funks ionet 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
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++ shty pet 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);
cout << a;
// shtypja e rezultatit ne 8 kolona
// p.sh., nese shtypet variabla a, qe ka vleren 15
// rezultati do te duket si ne vijim
// kuparaqet zbraztiren, rreshtimi (plotesimi i
// vendeve te rezervuara) behet nga skaji i djathte
15
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
...
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 <<
<<
<<
cout <<
<<
<<
"Vlera e lexuar a="
a
"\n";
"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 e dhe karakteret speciale,
t cilat e braktisin rrjedhn normale hyrse/dalse, prandaj edhe quhen Escape -Sequence
characters (Karakteret pr braktisje t sekuencs/rrjedhs).
14
Escape-sequence characters (karakteret speciale)
\aAlarm
\bBackspace
\fForm Feed (pr printer)
\nNew line (CR+LF) (rreshti i ri)
\rCR
\tTab
\vVertical Tab
\\\
\??
\
\
\000Numr oktal
\xhhNumr heksadecimal
\0Null zero (zero binare)
\xhh, mund t prdoret pr t shtypur n ekran karakteret t cilat nu k i kemi n tastier, si
p.sh. shkronja dhe , t gjuhs shqipe. ASCII kodi prkats i karakterit, duhet t shkruhet
n formn heksadecimale. P.sh. pr , kodi sht: 137 (Si e shtypim zakonisht n tastier,
ALT+137). Ather, 137 n bazn 16 (numr heksadecimal), sht: 89 (8*16 1 +9*16 0=137).
Prandaj, pr ta shtypur n dalje shkronjn , duhet t shkruhet: \x89. P.sh., pwr tw shtypur
nw dalje:
Sot sht dit e mir n C++ duhet t shkruhet - Sot \x89sht\x89 dit\x89 e mir\x89
cout << Sot \x89sht\x89 dit\x89 e mir\x89 ;
(Pr ta shkruar m leht dhe m shpejt, e shkruani tekstin me w (ose ndonjw shenjw
tjetwr) n vend t shkronjs (si veprohet zakonisht), e pastaj me: Edit Replace, e
zvendsoni: w me \x89).
Preciziteti
Pr t prcaktuar precizitetin e shtypjes pr vlerat reale (me presje dhjetore), prdoret
urdhri pr precizitet:
cout.precision(k); // shtypja me precizitet te caktuar, me k-shifra
ose manipulatori setprecision(x); i cili ndodhet n <iomanip>.
// Programi shtypja me precizitet
#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
int i;
double x=3.1415926534;
for (i=1;i<=10;i++)
{
cout.precision(i);
cout.width(i);
cout << x << "\n";
}
//ose
15

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,
cout << a << "\t\t" << b << "\t\t"
cout << fixed<< a << "\t\t" <<
cout << scientific << a << "\t" <<
return 0;
}
shifrat pas presjes dhjetore
<< c << endl<<endl;
b << "\t" << c << endl<<endl;
b << '\t' << c << endl<<endl;
16

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
cout << dec << n
cout << hex << n
cout << oct << n
return 0;
}
decimale 100
<< endl;
<< endl;
<< endl;
Pra, kemi sistemet numerike me pesh:
N = a nb n + a n 1b n 1 + an 2b n 2 + ... +a1 b1 + a0 b0
ku, a shifra n pozitn prkatse, b baza
Dec: 100 = 1*10 2+0*10 1+0*10 0=1*100+0*10+0*1=100+0+0=100;
Hex: 64 = 6*16 1+4*160=96+4=6*16+6*1=100;
Oct: 144 = 1*8 2 +4*81+4*80 =1*64+4*8+4*1=64+32+4=100;
17

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

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

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 (p r
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

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

#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

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
string
string
string
S1;
S2(" nga ");
S3("Kosova");
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

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
append(char *pt);
append(char *pt, size_t count);
append(string &str, size_t
offset,size_t count);
append(string &str);
append(size_t count, char ch);
append(InputIterator Start,
InputIterator End);
at(size_t offset);
begin();
*c_str();
clear();
copy(char *cstring, size_t
count, size_t offset);
empty();
end();
Prdorimi
Shton karkteret prej C-stringut, char ose objekteve tjera string.
Kthen referencn n karakterin n pozitn e specifikuar. Dallon prej
operatorit t indeksimit [ ], pasi q verifikohen kufinjt.
Kthen nj iterator n fillim t stringut.
Kthen pointerin n versionin e C-stringut t prmbajtjs s stringut.
Fshtin tr stringun
Kopjin numrin-count e karaktereve nga C-stringu duke filluar nga
zhvendosja-offset.
Teston a sht stringu i zbrazt.
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);
find(string &str,size_t offset =
0);
Kthen indeksin e karakterit t par t substringut kur ai gjendet.
Prndryshe, kthehet vlera speciale npos.
24

find_first_not_of();
find_first_of();
find_last_not_of();
find_last_of();
insert(size_t pos, char *ptr);
insert(size_t pos, string &str);
insert(size_t pos, size_t count,
char ch);
insert(iterator it, InputIterator
start, InputIterator end);
push_back(char ch);
replace(size_t pos, size_t
count, char *pt);
replace(size_t pos, size_t
count, string &str);
replace(iterator first, iterator
last, char *pt);
replace(iterator first, iterator
last, string &str);
size();
swap(string &str);
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
par q nuk sht n stringun krkues.
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
par q sht n stringun krkues.
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
fundit q nuk sht n stringun krkues.
Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
fundit q sht n stringun krkues.
Inserton karakteret n pozitn e specifikuar.
Inserton karakteret n fund t strignut.
Zvendson elementet n string me karakteret e specifikuara. Rangu
mund t specifikohet prmes pozits startuese dhe numrit t elementeve
pr zvendsim ose duke prdorur iteratort.
Kthen numrin e elementeve n string.
Shkmben dy stringje.
Kushtet (Degzimet)
Gjat shkruarjes s programeve pr raste t ndryshme, paraqitet nevoja e kushtzimit t
ekzekutimit t urdhrave n baz t ndonj kushti t caktuar. N C++ kemi disa forma t
paraqitjes s kushteve: Rasti m i thjesht sht kur pr ndonj kusht t caktuar ekzekutohet
urdhri (ose urdhrat), kurse nse nuk plotsohet kushti, nuk ndodh asgj por programi
vazhdon me urdhrin e ardhshm (vijues), si n vazhdim:
if (kushti) urdhri ;
ku:
kushti - kushti pr degzim
urdhri urdhri q ekzekutohet nse plotsohet kushti k
Zakonisht, n program kushti shkruhet n rresht t veant:
if (kushti)
urdhri ;
// Programi if1a
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Vlera x=";
cin >> x;
if (x > 0)
cout << "\nx eshte pozitiv \n";
return 0;
}
Fillimi
x
x
>
0
Po
Jo
X sht pozitiv
Fundi
25

Gjat shkruarjes s programeve, prdoren operatort aritmetik dhe operatort relacional:
Operatori n C++OperacioniShembull
+3+2Mbledhja
-3-2Zbritja
*3*2Shumzimi
/3/2Pjestimi
%3%2Moduli
*Moduli, sht mbetja nga pjestimi i plot (5%2=1;
Operatori n C++
<
<=
==
>
>=
!=
Domethnia
M i vogl se
M i vogl se,
ose barazi me
Barazi me
M i madh se
M i madh se,
ose barazi me
Jobarazi me
Shembull
2<3
3 <= 2
3 == 3
3>2
2 >= 3
2 != 3
Rezultati
5
1
6
1.5
1
8%3=2).
Rezultati
true
false
true
true
false
true
Fillimi
x
x
>
// Programi if1b
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Vlera x=";
cin >> x;
if (x > 0)
cout << "\n x eshte pozitiv \n";
if (x < 0)
cout << "\n x eshte negativ \n";
return 0;
}
0
Po
Jo
X sht pozitiv
x 0
Po
Jo
<
X sht negativ
Fundi
26

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

// Programi if2a
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Vlera x=";
cin >> x;
if (x > 0)
cout << "\nx eshte pozitiv \n";
else
cout << "\nx eshte negativ\n";
return 0;
}
Fillimi
x
Po
x>0
Jo
X sht
pozitiv
Fundi
X sht
negativ
Blloqet e urdhrave n deg
Ns pr nj kusht duhet t ekzekutohen disa urdhra (m shum se nj urdhr), ather
urdhrat e till duhet t futen brenda kllapave t mdha, duke krijuar nj bllok t urdhrave.
if (kushti)
{
urdhrat1;
}
else
{
urdhrat2;
}
28

// Programi if3
#include <iostream>
using namespace std;
int main()
{
int x,y,z;
cout << "Vlera x=";
cin >> x;
if (x > 0)
{
y=2*x;
z=x*x;
cout << "\ny=2*x="<<y;
cout << "\nz=x*x="<<z;
}
else
cout << "\nx eshte negativ\n";
cout<<endl;
return 0;
}
Fillimi
x
Po
x
>
0
Jo
y=2*x
z=x*x
y,z
Fundi
X sht
negativ
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
Konjukcioni, AND
Disjunkcioni, OR
Negacioni, NOT
Shembull
(2<3)&&(4==4)
(2!=3)||(3>4)
!(5>4)
Llogaritja
true && true
true || false
!true
Rezult
ati
true
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

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

Fillimi
x
Po
x > 10
x>0
Jo
x>0
x>10
x>0
x<10
x sht
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

// 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
2 3 4
5
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 :
cin >> Nota;
if (Nota == 1)
else
if (Nota == 2)
else
if (Nota == 3)
else
if (Nota == 4)
else
if (Nota == 5)
else cout
cout<<"Dobet: ";
cout<<"Mjaftueshem: ";
cout<<"Mire: ";
cout<<"Shume mire: ";
cout<<"Shkelqyeshem: ";
<< "Gabim - Nota duhet mes 1 dhe 5";
Nota=" ;
32

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
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()
{
<<" Nota="
<< Nota
<< "\n";
33

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

Kaprcimi pa kusht: goto
Fillimi
Go to Fundi
Fillimi
Go to Fundi
Fillimi
Go to Dalja
Fillimi Mesi
Go to Fillimi
Fundi
Go to Mesi Go to Dalja
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:
cout<< "Fillimi\n";
goto Dalja;
Mesi:
cout << "Mesi\n";
goto Fillimi;
Fundi:
cout << "Fundi\n";
goto Mesi;
Dalja:
return 0;
}
//Labela etiketa,adresa Fillimi
//Labela etiketa,adresa Mesii
35

Fillimi
Fillimi
Vlera i=
go to
Fillimi
i<10
Po
i<10
Jo
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

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 ******************
return 0;
}
Dalja ********************\n";
37

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 a po m
shum urdhrave t programit. Unaza ka variabln e unazs, e cila prdoret si tregues se sa her
do t prsriten urdhrat brenda unazs. Ajo fillon me vlern fillestare dhe pr do her t
ekzekutimit t urdhrave t unazs, e ndryshon vlern pr nj hap t caktuar, q njihet si hapi i
unazs. N fund t pjess s unazs, testohet se a sht plotsuar kushti pr dalje prej unazs.
Kjo rritje e variabls s unazs, pr hapin e caktuar, vazhdon deri sa t plotsohet kushti pr
dalje prej unazs. N C++ prkrahen disa forma t unazave:
Unaza while (gjersa)
Unaza While (gjersa), bn prsritjen e urdhrave t unazs, gjersa vlen kushti i caktuar. Pra,
gjersa pr kushtin e unazs While kemi rezultatin TRUE (E SAKT, PO), ekzekutohen urdhrat e
unazs dhe variabla e unazs rritet, pr hapin e caktuar.
Unaza While, s pari e vlerson kushtin dhe pastaj, nse plotsohet kushti, ekzekuton urdhrat
n unaz. Nse kushti nuk plotsohet hern e par q testohet kushti (pr hapin e par t variabls s
unazs), pra pr vlern fillestare t variabls s unazs, ather urdhrat n unaz nuk do t
ekzekutohen asnjher.
i=f;
while(kushti)
{
urdhri/at;
i=i+h;
}
ku jan:
i - variabla e unazs.
f - vlera fillestare e variabls s unazs.
kushti - kushti i ekzekutimit t urdhrave q
prfshihen n trupin e unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at urdhrat q ekzekutohen brenda unazs.
Fillimi
n
S=0
i=1
isn
Po
S=S+i
i=i+1
S
Fundi
Jo
38

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

i=f;
do
{
urdhri/at;
i=i+h;
}
while(kushti);
ku jan:
i - variabla e unazs.
f - vlera fillestare e variabls s unazs.
kushti - kushti i ekzekutimit t urdhrave q prfshihen
n trupin e unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at urhdri/at e prfshira brenda unazs.
Fillimi
n
S=0
i=1
S=S+i
i=i+1
Po
isn
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;
do
{
s=s+i;
i++;
}
while (i<=m);
cout << "Shuma s= "
<< s
<< "\n";
return 0;
}
//vlera fillestare
//(do - bj, vepro, kryej)
//urdhri
//rritja e hapit t unazs
//kushti pr mbetje n unaz
40

Unaza for
Unaza for (pr), gjithashtu bn prsritjen e urdhrave brenda unazs, duke prshkruar n
fillim vlern fillestare, kushtin dhe hapin e unazs. Ka form m kompakte dhe prdoret n t
shumtn e rasteve. Zakonisht, kur vlerat kufitare (vlera fillestare dhe vlera prfundimtare) t
variabls s unazs jan t njohura paraprakisht, prdoret unaza for.
for (i=f; kushti; i=i+h)
{
urdhri/at;
}
ku:
i - variabla e unazs.
kushti - kushti i mbetjes brenda unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at urdhri/at q ekzekutohen brenda unazs.
// Programi for1
#include <iostream>
using namespace std;
int main()
{
int i,n;
double s=0;
cout << "Vlera e variabls n=";
cin >> n;
for (i=1;i<=n;i++)
s=s+i;
cout << "Shuma s="
<< s
<< "\n";
return 0;
}
Fillimi
n
S=0
i=1; i<=n; i=i+1
S=S+i
S
Fundi
Nga skema n vijim mund t shihet se si pasqyrohet pjesa e unazs do while n at
for
41

Fillimi
n
S=0
i=1
S=S+i
i=i+1
Po
isn
Jo
S
Fundi
Fillimi
n
S=0
i=1; i<=n; i=i+1
S=S+i
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

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 fus h 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

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
n
S=0
i=1
i>5
Jo
S=S+i
i=i+1
Po
isn
Jo
S
Fundi
Po
Fillimi
n
S=0
i=1; i<=10; i=i+1
Po
i>5
S=S+i
S
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

{
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
n
i=1
i=5
Jo
Po
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

{
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
i1
i3
// Programi - Continue2
#include <iostream>
using namespace std;
int main()
{
int i,n;
double s=0;
cout << "Vlera e variables n=";
cin >> n;
for (i=1;i<=n;i++)
{
if (i==3) continue;//kaloje 3-shin
s=s+i;
}
cout << "Shuma s="
<< s
<< "\n";
return 0;
}
Po
Fillimi
n
S=0
i=1
i=3
Jo
S=S+i
i=i+1
isn
Jo
S
Fundi
Po
46

Vargjet
Vargjet e numrave ose fushat numerike nj-dimensionale (vektort) dhe dy-dimensionale
(matricat) n C++ definohen si vijon:
int A[8];
double Z[3][5];
/Vektori
/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

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

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

//Formimi i vektorit prej vektori
#include <iostream>
using namespace std;
int main()
{
const int n=4;
int i,A[n]={1,2,3,4},B[n];
for (i=0;i<n;i++)
{
B[i]=2*A[i];
cout << "B["
<< i
<< "]="
<< B[i]
<< "\n";
}
return 0;
}
Fillimi
n,(ai,i=1,n)
i=1
bi=2ai
i,bi
i=i+1
Po
isn
Jo
Fundi
// Bashkimi i dy vektoreve G=B & A
#include <iostream>
using namespace std;
int main()
{
const int m=3,n=2;
int A[n]={1,2},
B[m]={3,4,5},
i,G[m+n];
for (i=0;i<m+n;i++)
{
if (i<m)
G[i]=B[i];
else
G[i]=A[i-m];
cout << "G["
<< i
<< "]="
<< G[i]
<< "\n";
}
return 0;
}
Fillimi
m,n,(ai,i=1,n),(bi,i=1,m)
i=1
Po
gi=bi
i,gi
i=i+1
Po

Jo
Fundi
ism
Jo
gi=ai-m
50

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

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

Jo
i=i+1
Po

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

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

Veprimet me vektor/matrica dhe gjetja e antarve t caktuar t
vektorit/matrics
Shuma e antarve t matrics:
//Shuma e anetareve te matrices
#include <iostream>
using namespace std;
int main()
{
const int m=3,n=4;
int A[m][n]={{1,2,3,4},
{5,6,7,8},
{-5,-6,-7,-8}
};
int i,j,s;
s=0;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
s=s+A[i][j];
cout << "Shuma s="
<< s
<< "\n";
return 0;
}
Fillimi
i 1,m
m,n a ij,
j 1,n
S=0
i=1
j=1
S=S+a ij
j=j+1
Po

Jo
i=i+1
Po

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

Fillimi
m,(ai,i=1,m)
n=0
i=1
Jo
ai < 0
Po
n=n+1
i=i+1
Po
i s 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

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

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
amax> oi
Jo
amax=ai
i=i+1
Po
i s
Jo
amax
Fundi
Po
//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

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 pa ri 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
B
3
58

Fillimi
n,(ai,i=1,n)
i=1
j=i+1
aisoj
Jo
b=ai
ai=aj
aj=b
j=j+1
Po
j s v
Jo
i=i+1
Po
-1
Jo
(ai,i=1,n)
Fundi
Po
//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

Formimi i fushave numerike
Fillimi
m,n
i=1
j=1
<
i j
=
aij=0
<
-
>
>
aij=1 aij=2
j=j+1
Po
j s v
Jo
i=i+1
Po
i s
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

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 rresh tit 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

Fillimi
m,n
i=1
j=1
<
j
=
aij=2i+3j
j=j+1
Po
j s v
Jo
i=i+1
Po
i s
Jo
i 1,m
aij,j 1,n
i <
-
>
>
aij=3i-j2
aij=2i+3j
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

Fillimi
m,(di,i=1,m)
i=1
j=1
<
j
=
aij=di
j=j+1
Po
j s
Jo
i=i+1
Po
i s
Jo
i 1,m
aij,j 1,m
i
<
-
>
>
aij=di+j aij=di+8
Fundi
63

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

Fillimi
m,(bi,i=1,m)
i=1
j=1
Po
gij=bj
j=1
Jo
gij=i
j=j+1
Po
j s
Jo
i=i+1
Po
i s
Jo
i 1,m
g 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

Bashkimi i dy matricave
a0,0
...
...
...
a0,n-1
...
b0,0
...
...
...
bm-1,n-1
...
bm-1,n-1 am-1,0 ... am-1n-1 bm-1,0 ...
Fillimi
i 1,mi 1,m
m, aij,, bij,j 1,mj 1,m
i=1
j=1
Po
dij=aij
js m
Jo
dij=bi,j-m
j=j+1
Po
j s 2
Jo
i=i+1
Po
i s
Jo
i 1,m
d ij,j 1,2m
Fundi
66

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

Fillimi
n
i=1
j=1
Po
Jo
tij=0
i=j
Po
tij=1 tij=0
isn
Jo
j=j+1
Po
j s n
Jo
i=i+1
Po
i s 2v
Jo
i 1,2n
t ij,
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

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

Bashkimi i dy matricave n diagonale
F
0
0
G
Fillimi
m,n,l,k
i 1,mi 1,l
fij,, g ij, 1,kj 1,nj
i=1
j=1
Po
Po
rij=fij

Jo
rij=0

Jo
Po
rij=0

Jo
rij=gi-m,j-n
j=j+1
Po

Jo
i=i+1
Po

Jo
i 1,m l
rij,j 1,n k
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

{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

Krijimi i vektorit prej antarve t matrics
Nj rast specifik sht krijimi i vektorit prej antarve t matrics ose prej disa antarve
t caktuar t matrics, p.sh., vetm prej antarve negativ t matrics. Duhet pas parasysh se
si do t bhet indeksimi i antarve t matrics, n vektor. P.sh., le t themi se e kemi matricn
A(m,n) dhe prej saj do t krijojm vektorin B(p), ku p do te jete: p=m*n, pr arsye se
matrica i ka m*n antar. Pr antart e vektorit, do t kemi:
B[0] = A[0,0], B[1] = A[0,1], ... B[p-1] = A[m-1,n-1]. Nse marrim si shembull matricn
me 3 rreshta dhe 3 kolona, A(3,3), ather do t formohet vektori B(9), dhe do t kemi:
A[0][0] A[0][1] A[0][2]
A[1][0] A[1][1] A[1][2]
A[2][0] A[2][1] A[2][2]
1 2
5
7
3
6
9
=
4
8
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++)
for (j=0;j<n;j++)
{
k=k+1;
B[k]=A[i][j];
}
//unaza pr rreshtat e matrics - i
//unaza pr kolonat e matrics - j
//numratori pr antart e vektorit - k
//ndarja e vlerave antarve t vektorit
Pra, kjo pjes e programit, do t krijoj vektorin, prej matrics.
Shembull:
72

Fillimi
i 1,m
m, n, aij,
j 1,n
k=0
i=1
j=1
k=k+1
zk=aij
j=j+1
Po

Jo
i=i+1
Po

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

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

N fillim, para unazave pr i dhe pr j, kemi marr k=-1;, meqen se, n pjesn pr
krijimin e antarve t vektorit, s pari e kemi rritur numratorin k=k+1;, e pastaj e kemi
caktuar antartin: B[k]=A[i][j]; kshtu q t fillojm prej indeksit t par: k=0; dhe
B[0]=A[0][0];.
Nse, para unazs, numratorin e fillojm prej, k=0; ather, n unaz, s pari e japim
urdhrin: B[k]=A[i][j]; e pastaj, e rrisim numratorin: k=k+1;
Pra, ekzistojn dy opcione:
1. Fillohet prej k=-1, por n unaz s pari rritet numratori, e pastaj ndahet vlera (krijohet
antari i vektorit), ose
2. Fillohet prej k=0, por n unaz s pari ndahet vlera (krijohet antari i vektorit), e
pastaj rritet numratori k.
k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
k=k+1;
B[k]=A[i][j];
}
k=0;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
B[k]=A[i][j];
k=k+1;
}
Kjo sht me rndsi, sepse kur t shtypen pastaj antart e vektorit, me pjesn:
//Shtypja e vektorit
for (i=0;i<=k;i++)
{
cout.width(3);
cout << "B[" << i <<"]="<<B[i]<<"\n";
}
duhet pas parasysh, se ku ka mbetur vlera e fundit e numratorit k, prej unazave paraprake pr i
dhe pr j, q ishin pr krijim t antarve t vektorit. Kur fill ohet prej k=-1, ather vlera e
fundit e indeksit t vektorit, do t jet pikrisht k, kshtu q kur t shtypet vektori, unaza shkon
deri n k, pra duke e prfshir edhe vlern e k-s, i<=k: for (i=0;i<=k;i++).
Mirpo, n rastin kur fillon numratori prej k=0, ather duke e rritur vlern e numratorit k, pr
secilin antar t ardhshm t matrics, n fund numratori rritet edhe nj her, pas krijimit t
antarit t fundit t vektorit. Kshtu, kur t shtypet me unazn vijuese vektori, pr t shtypur
numrin e sakt t antarve t vektorit, unaza shkon si:
75

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, aij,
j 1,n
k=0
i=1
j=1
aij < 0
Po
k=k+1
zk=aij
j=j+1
Po
j s v
Jo
i=i+1
Po
i s
Jo
(zi,i=1,k)
Fundi
Jo
76

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

Fillimi
i 1,m
m, n, aij,
j 1,n
x=0
y=0
i=1
j=1
Po
x=x+1
fx=aij
aij < 0
Jo
y=y+1
gy=aij
j=j+1
Po
j s v
Jo
i=i+1
Po
i s
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

x=x+1;
F[x]=A[i][j];
}
else
{
}
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;
}
//krijimi i vektorit pozitiv
y=y+1;
G[y]=A[i][j];
79

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

Bllok skema e programit m nnprogram duket si n vijim:
Programi kryesor Nn-programi (funksioni)
ab
Fillimi
a,b
s=Shuma(a,b)
s
Fundi
(a+b)
a,b
Shuma(x,y)
r=x+y
return r
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);
int main()
{
double s;
int a=7,b=3;
s=Shuma(a,b);
cout << "Shuma s="
<< s
<< "\n";
return 0;
}
// Nnprogrami Shuma
double Shuma(int x,int y)
{
double r;
r=x+y;
return r;
}
//Deklarimi i funksionit
//variablat e brendshme te funksionit
//urdhrat e funsionit
//kthimi i rezultatit t funksionit
//Prototipi i funksionit
/*Thirrja e funksionit
- percjellja e vlerave aktuale*/
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

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
a,b
p=prodhimi(5,4)
p
Fundi
prodhimi(a,b)
y=a*b
return y
82

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=
im
(Pra, shihet se do te kemi: a=m, b=n, c=1, d=0)
mn 1 0
Shuma(a,b,c,d)
Fillimi
m,n
s=ShumaVargut(m,n,1,0)
s
Fundi
Po
S=0
i=a
S=S+(c*i+d)
i=i+1
isb
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

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
=
i2
(3 * i 2) (Tani, shihet se do te kemi: a=2, b=n, c=3, d=2)
// Programi Funksion2
#include <iostream>
using namespace std;
double ShumaVargut(int a, int b, int c, int d);
int main()
{
int n;
double Shuma;
cout<<Jepe vleren per n:;
cin>>n;
Shuma=ShumaVargut(2,n,3,2);//Funks. per shumen e vargut
cout << "Shuma S=: " << Shuma;
cout << "\n";
return 0;
}
double ShumaVargut(int a,int b, int c, int d)
{
int i,j;
double S;
S=0;
for (i=a;i<=b;i++)
{
S=S+(c*i+d);
}
return S;
}
84

Edhe pr rastin e prodhimit, forma universale e prodhimit te seris se numrave sht:
P
b
=
ia
(c * i d )
Shembull:
P
n
=
im
(i 1) (N kete rast do te kemi: a=m, b=n, c=1, d=1)
ProdVarg(a,b,c,d)
P=1
i=a
P=P*(c*i+d)
i=i+1
Po
isb
return P
Fillimi
m,n
Prodhimi=ProdVarg(m,n,1,1)
Prodhimi
Fundi
// 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

Shembull:
P
n
=
im
(2i 4) (N kete rast do te kemi: a=m, b=n, c=2, d=4)
// Programi Funksion3
#include <iostream>
using namespace std;
double ProdVarg(int a, int b, int c, int d);
int main()
{
int m,n;
double Prodhimi;
cout<<Jepni vlerat per kufijte m dhe n:;
cin>>m>>n;
Prodhimi=ProdVarg(m,n,2,4); //Funks. per prod. e vargut
cout << "Prodhimi P=: " << Prodhimi;
cout << "\n";
return 0;
}
double ProdVarg(int a,int b, int c, int d)
{
int i,j;
double P;
P=1;
for (i=a;i<=b;i++)
{
P=P*(c*i+d);
}
return P;
}
86

T llogaritet:
Y
n n2 n
=3
i1
(3i 2) +
i2
(2 * i 1) + 4
i1
(i 3)
Fillimi
m,n
Y=Shuma(1,n,3,2)+Shuma(2,n+2,2,1)+Prodhimi(1,n,1,3)
Y
Fundi
Shuma(a,b,c,d)
S=0
i=a
S=S+(c*i+d)
i=i+1
Po
isb
return S
Prodhimi(a,b,c,d)
P=1
i=a
P=P*(c*i+d)
i=i+1
Po
isb
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

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)
S=0
i=a
S=S+(c*i+d)
i=i+1
Po
isb
return S
Prodhimi(a,b,c,d)
P=1
i=a
P=P*(c*i+d)
i=i+1
Po
isb
return P
88

Llogaritja e faktorelit
Faktoriel(m)
F=1
i=1
F=F*i
i=i+1
Po
ism
return F
Fillimi
n
Fakt=Faktoriel(n)
Fakt
Fundi
// 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

Shembull:
T llogaritet: Fakt = n! + (2n)! (2n-1)!
Fillimi
n
Fakt=Faktoriel(n)+Faktoriel(2*n)-Faktoriel(2*n-1)
Fakt
Fundi
Faktoriel(m)
F=1
i=1
F=F*i
i=i+1
Po
ism
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 =
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;
}
" << Fakt;
90

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

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

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

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

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

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

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

Prfshirja e fajllave me direktivn #include
Zakonisht direktivn #include, e kemi prdorur pr ti thirrur librarit e gatshme t
C++-it. Kllapat e drejta me simbolet < dhe > q prdoret tek : #include <iostream> using
namespace std;, i tregojn C++-it se n program prfshihet edhe ndonj header file nga
folderi i zakonshm i C++, aty ku ruhen header fajllat. Nse dshirojm, q n program ta
prfshijm nj fajll tjetr, q sht i ruajtur brenda folderit t njjt, ku sht i ruajtur edhe
programi aktual, ather prdoret forma:
#include Emri_i_fajllit.h. Pra, emri shkruhet brenda thojzave t zakonshme.
Header fajlli, krijohet duke shkuar prmes menys: File New, dhe zgjedhet C/C++ Header
File. Emertohet me emrin me prapashtese .h dhe pastaj shkruhet dhe ruhet si f ajllat e zakonshem
burimor t C++.
P.sh., shpesh here kemi nevoj q t shtypim adresn ton pr kontakt:
Avni Rexhepi
Fakulteti Elektroteknik
Prishtin
Tel: 044 174 374
Tr kt tekst mund ta shtypim me urdhrat vijues, t ruajtur n nj Header File (Heder
fajll) t C++, Adresa.h, si:
//Fajlli Adresa.h
cout<<Avni Rexhepi \n;
cout<<Fakulteti Elektroteknik \n;
cout<<Prishtin\x89 \n;
cout<<Tel: 044 174 374 \n;
Pastaj, n ndonj program t C++, mund ta thrrasim pr ekzekutim fajllin Adr esa.h, sa
her q t na duhet shtypja e adress:
//Programi kryesor
#include <iostream>
using namespace std;
int main()
{
cout<< Jungjatjeta \n\n;
#include Adresa.h//Thirrja e heder fajllit
return 0;
}
Pra, kjo do t jep efektin e njjt, sikur n rastin:
//Programi kryesor
#include <iostream>
using namespace std;
int main()
{
cout<< Jungjatjeta \n\n;
cout<<Avni Rexhepi \n;
cout<<Fakulteti Elektroteknik \n;
cout<<Prishtin\x89 \n;
cout<<Tel: 044 174 374 \n;
return 0;
}
98

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

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

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

Direktiva #define
Direktiva #define mund t prdoret pr definime t ndryshme n programe dhe
funksionon si urdhri pr zvendsim t fjals me nj fjal tjetr n editort e teksteve (si. p.sh.
Word-i). Formati i saj sht:
#define ARGUMENTI1 argumenti2
Fjala ARGUMENTI1 sht nj fjal e vetme, pa hapsira. Pr emrtim prdoren rregullat e
njjta si pr variablat. Mes emrave t dy argumenteve, duhet t ket s paku nj hapsir. Kudo
n program q t shkruhet ARGUMENTI1 sht njsoj, sikur t ishte shkruar argumenti2.
Shembull:
#include <iostream>
using namespace std;
#define Emri "Avni Rexhepi"
int main()
{
cout<< Emri << endl;
return 0;
}
Direktiva #define mund t prdoret edhe pr definim t funksioneve t ndryshme:
#include <iostream>
using namespace std;
#define
#define
#define
#define
MINIMUMI 1
MAKSIMUMI 10
SHUMA X1+X2
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

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

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

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

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

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

Kjo mund t bhet m e dobishme duke e inkorporuar n funksion, si n vijim:
int rangu_i_rastit(int numri_i_vogel, int numri_i_madh)
{
if(numri_i_vogel > numri_i_madh){
swap(numri_i_vogel, numri_i_madh);
}
int rangu = numri_i_madh - numri_i_vogel + 1;
return numri_i_vogel+int(rangu*rand()/(RAND_MAX+1.0));
}
Pra, funksionit rangu_i_rastit( ) i prcillen dy vlera q prezentojn vlern me t vogl
dhe m t madhe t rangut t dshiruar. Funksioni verifikon a e kemi renditjen e duhur t vlers
s vogl dhe asaj t madhe. Pastaj llogaritet rangu i krkuar i numrave t r astit. N fund, i
aplikojm kta numra pr thirrjen e funksionit rand( ) dhe kthimin e vlerave t rastit. Funksioni
swap() (angl. Swap-shkmbe, ndrro) krkon header-in <algorithm>.
Programi i vogl vijues demonstron prdorimin e funksionit rangu_i_rastit ().
Inicializojm gjeneratorin e pseudo numrave t rastit duke prdorur kohn aktuale.
#include
#include
#include
#include
#include
<algorithm>
<cstdlib>
<ctime>
<iomanip>
<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

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

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

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

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 = clock() * CLK_TCK;
// Fillimi dhe Fundi per timer
//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

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

//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<< "
}
cout<<"\n";
return 0;
}
- Jungjatjeta"<<endl;
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

#include
#include
#include
#include
#include
<cstdlib>
<ctime>
<iomanip>
<iostream>
<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

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

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 asa j 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

#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

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

(Vrejtje: mos u brengosni nse vlera q ju e fitoni sht tjetr, pasi q kjo mund t jet e
ndryshme, sa her q t ekzekutohet programi ose mund t jet e njjta vler, pas disa
ekzekutimeve. Kjo gj sht e varur prej platforms (kompjuterit) dhe cilado mnyr e
paraqitjes sht normale).
Pr t qen edhe m bindse, le t shohim programin vijues:
#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int *PointeriIm = & numriIm;
cout << "Adresa:" << &numriIm << endl;
cout << "Pointeri: " << PointeriIm << endl;
return 0;
}
Pra, adresn e kemi shtypur drejtprdrejt dhe prmes pointerit. T dy vlerat duhet t jen
identike.
Pr kt program themi se variabla PointeriIm tregon (pointon) n variabln numriIm. Kjo
sht vetm nj mnyr e prshtatshme e shprehjes s faktit q pointeri mban (r uan) adresn e
variabls numriIm.
Tipi i pointerit PointeriIm sht int. Pra, nse kemi dy deklarime si n vijim, duhet t
shihet dallimi mes deklarimit t variabls s tipit integer dhe deklarimit t treguesit (pointerit)
n variabln e tipit integer:
int n;
int *p;
// Deklarimi i nj variable t tipit integer
// 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

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

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

Ndryshimi i vlerave prmes pointerve
Vlerat n t cilat tregon pointeri mund t ndryshohen edhe prmes pointerit:
#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int* PointeriIm = &numriIm;
cout << numriIm << endl;
*PointeriIm = 46;//aty ku tregon pointeri=46
cout << numriIm << endl;
}
Sikur n rastet e mparme, fillojm me inicializimin e variabls numriIm me vlern 25,
pastaj inicializojm pointerin PointeriIm me adresn e variabls numriIm. N rreshti n vijues, e
shtypim vlern e variabls numriIm, q n dalje jep velrn 25. Pastaj, rreshti/urdhri:
*myPointer = 46;
ia ndan vlern 46 variabls n t ciln tregon pointeri PointeriIm. Me fjal t tjera, ia
ndan vlern 46 variabls numriIm (sepse pointeri tregon n t). Efektivisht, kjo sht
ekuivalente me urdhrin:
numriIm = 46.
sht me rndsi t kuptohet se ka po ndodh ketu. Vlera 46 nuk i ndahet pointerit. N
fakt, vet variabla e pointerit nuk sht ndryshuar fare n asnj mnyr dhe ajo akoma vazhdon
t ruaj (mbaj) adresn e memories s variabls s tipit integer numriIm. Ajo ka kemi br
sht, sikur se t themi: merre adresn e cila ruhet n pointerin PointeriIm dhe ndryshoje
(modifikoje) variabln q sht e ruajtur n at adres, ashtu q t jet 46. N vend se ti
referohemi drejtprdrejt variabls numriIm, i jemi referuar duke prdorur adresn e saj, t
ruajtur n pointerin PointeriIm.
Rreshti i fundit e shtyp n dalje vlern e variabls numriIm prsri, po kt her ajo
sht 46.
Ja edhe versioni pr numrin real:
123

#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

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

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

Dukshmria e variablave
Variablat e deklaruar prbrenda funksionit ose n ndonj bllok tjetr t brendshm t
programit jan t dukshme (kan fushveprim) vetm prbrenda bllokut t tyre dhe nuk mund t
prdoren jasht kufinjve t tyre. P.sh, n shembullin vijues, kemi variablat globale: numri dhe
Emri, t cilat mund t prdoren n cilndo pjes t programit dhe kemi varibalat lokale: Vlera1
dhe Vlera2 t funksionit main( ) dhe ato: a, b, S t funksionit Siperfaqja.
#include <iostream>
using namespace std;
int numri;
char Emri[15];
int main()
{
Variablat Globale
int Vlera1;
double Vlera2;
...
cout << Vlera1 << endl;
cout << Emri << endl;
cout << S << endl;
return 0;
}
int Siperfaqja(int a, int b)
{
int S
S=a*b;
return S
}
Variablat Lokale
Urdhrat
Variablat Lokale
Pra, dukshmria e variablave sht e kufizuar prbrenda nivelit t bllokut n t cilin jan
deklaruar. Sidooft, kemi mundsi t deklarojm varibalat globale t cilat jan t dukshme n
cilndo pjes t kodit, edhe prbrenda edhe jasht funksioneve. Pr t deklaruar variabln
globale, ajo thjesht duhet t deklarohet jasht cilitdo funksion ose bllok, drejtprdrejt n trupin
e programit.
127

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

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 io s 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
Out
In
App
Trunc
ate
binary
Kuptimi
Hapje fajllin ose rrjedhn pr shkruarje/insertim (output-dalja)
Hapje fajllin ose rrjedhn pr lexim/ekstraktim (input-hyrje)
Bashkangjit/shto n fajllin ekzistues. Secili insertim (dalje) do t shkruhet n fund t fajllit.
Preje (fshije) fajllin ekzistues (sjellja e zakonshme, e nnkuptuar).
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
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

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

- 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

}
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

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
boolalpha
noboolalhpa (default)
dec (default)
Hex
Oct
Left
Right
Internal
noshobase (default)
showbase
noshowpoint (default)
showpoint
noshowpos (default)
showpos
skipes (default)
noskipes
fixed (default)
scientific
nouppercase (default)
uppercase
Prdorimi
Bn, q variablat booleane t paraqiten si true ose false (tekstualisht).
Bn, q variablat booleane t paraqiten si 0 ose 1.
Specifikon se numrat (integer) paraqiten n bazn 10.
Specifikon se numrat (integer) paraqiten si heksadecimal (n bazn 16).
Specifikon se numrat (integer) paraqiten si oktal (n bazn 8).
Teksti n fushn dalse rreshtohet majtas .
Teksti n fushn dalse rreshtohet djathtas.
Bn q shenja e numrit t rreshtohet majtas kurse vlera djathtas.
kyq paraqitjen e prefiksit q tregon bazn e numrit.
Kyq paraqitjen e prefiksit q tregon bazn e numrit.
Paraqet pikn decimale vetm nse ekziston pjesa decimale.
Paraqet pikn decimale gjithmon.
Nuk paraqet shenjn "+" si prefiks para numrave pozitiv.
Paraqet shenjn "+" si prefiks t numrave pozitiv.
Kaprcen hapsirat e bardha (zbraztirat, tab, rreshti i ri) nga ana e operatorit t
hyrjes >>.
Hapsirat e bardha nuk kaprcehen nga operatori i nxjerres, >>.
Bn q numrat me presje dhjetore t paraqiten n notacion fiks (fixed).
Bn q numrat me presje dhjetore t paraqiten n notacion shkencor (scientific).
0x paraqitet pr numrat heksadecimal, e pr notacionin shkencor.
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

hyrjet dhe daljet vijuese t atij objekti. Ka disa manipulator q prdoren pr t modifikuar
ndonj dalje t veant, por nuk modifikojn gjendjen e objektit.
Caktimi i gjersis s daljes (Output Width)
setw(w) vendos gjersin pr dalje (output) ose hyrje (input) n ; krkon q t prfshihet
me include.
idth(w) funksion i klass iostream (member function).
Mbushja e hapsirave t bardha
setfill(ch) mbush hapsirat e bardha t daljes m karakterin ch; krkon q t prf shihet.
fill(ch) funksion i klass iostream (memeber function).
Caktimi i precizitetit
setprecision(n) vendos paraqitjen e numrave me presje dhjetore me precizitet n. Kjo
nuk ndikon mnyrn e trajtimit t numrave me presje dhjetore gjat llogaritjeve n program.
Shembull:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
int intNumri = 15;
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
<<
<<
<<
<<
<<
<<
<<
<<
<<
<<
"Numer Integer" << endl;
"Standard: " << intNumri << endl;
"Octal: " << oct << intNumri << endl;
"Hex: " << hex << intNumri << endl;
"Kycja e paraqitjes se bazes" << showbase << endl;
"Dec: " << dec << intNumri << endl;
"Octal: " << oct << intNumri << endl;
"Hex: " << hex << intNumri << endl;
"Ckycja e paraqitjes se bazes" << noshowbase << endl;
endl;
double doubleVlera = 12.345678;
cout
cout
cout
cout
cout
cout
cout
cout
<<
<<
<<
<<
<<
<<
<<
<<
"Numer me presje dhjetore" << endl;
"Default: " << doubleVlera << endl;
setprecision(10);
"Preciziteti 10: " << doubleVlera << endl;
scientific <<"Notacioni shkencor: "<<doubleVlera<< endl;
uppercase;
"Shkronja e madhe E: " << doubleVlera << endl;
endl;
bool vleraBooleane = true;
cout
cout
cout
cout
<<
<<
<<
<<
"Boolean" << endl;
"Default: " << vleraBooleane << endl;
boolalpha <<"Seti BoolAlpha: " << vleraBooleane << endl;
endl;
134

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

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;
int &rVlera = vlera;
// Declaron nj integer
// 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;
int *pvlera = &vlera;
// Deklaron nje integer
// 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 mu nd 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

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 <<
cout << "Vlera1
cout << "Vlera2
cout << "rVlera
return 0;
}
"Caktojme Vlera2 = 30" << endl;
eshte " << Vlera1 << endl;
eshte " << Vlera2 << endl;
eshte " << rVlera << endl;
137

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

Pra, objekti Katror dhe referenca e tij refKatror mund t prdoren n kmbim. Ata jan
sinonime pr njri tjetrin. Gjithashtu, vreni se referenca mirret n obj ektin Katrori, e jo n
klasn Katrori. Katror sht nj instanc e klass Katrori.
Dobia m e madhe e referencave sht kur ato prdoren n funksionet globale ose metoda
t klasave. N kt rol, ato ofrojn nj mnyr pr kthimin e vlerave t shumfishta p rej
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

You might also like