Professional Documents
Culture Documents
Prishtin, 2010
Lavdim Gashi Ushtrime n C++
Hyrje n programim
- N kompjuter, t dhnat ruhen dhe prpunohen si vargje t shifrave binare: 1 dhe 0, t
koduara n nj kod binar (ang. binary code).
- Gjuht Programuese:
- Gjuht e ulta programuse (kodi i makins) - 0, 1
- Asembleri - mnemonic (ADD, SUB, MOV...)
- Gjuht e larta programuese
- Fortran, Basic, Pascal, C++, etj.
Identifikatort
Variablat
Deklarimi
Inicializimi
Konstantet
Literalet
Operatort
Komentet
2
Lavdim Gashi Ushtrime n C++
Hyrje n C++
Dikush ka thn: "Mnyra m e mir pr ta msuar programimin sht programimi, pra
prmes shembujve dhe provave t ndryshme.
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;
}
using namespace std; - definimi i prdorimit t objekteve dhe funksioneve nga libraria
standarde, pa pasur nevoj shkruarjen e kualifikatorve t veant (eksplicit).
C++ prkrah konceptin e hapsirave emrtuese (name spaces). N esenc, kjo i lejon variablat q t
lokalizohen prbrenda kodit. Komanda using namespace std; i lejon t gjitha objektet dhe funksionet nga
libraria standarde q t prdoren n program, pa kualifikator eksplicit. Namespace sht nj koncpet i
avansuar, kshtu q pr fillim kryesorja sht q t dihet se duhet t shkruhet ky rresht, pr t lejuar
prdorimin e thjesht t libraris standarde.
iostream - Input Output Stream (Rrjedha hyrse, dalse) - prmban urdhrat pr hyrje/dalje. main (
) - funksioni themelor, kryesor ose si thuhet me shpesh, programi kryesor.
{ - kllapa e madhe e hapur, tergon fillimin e programit kryesor
3
Lavdim Gashi Ushtrime n C++
Ka disa ambiente programuese, si p.sh., consola dalse nn Microsoft Windows, n t cilat dritarja
e rezultateve n dalje do t zhduket menjher pas prfundimit t programit, duke pamundsuar shikimin
e rezultateve dalse. Pr t evituar kt problem, n fund t programit mund t shtoni nj urdhr, si
cin.get();
ose n disa raste duhet dy rreshtat vijues:
cin.ignore(1000,\n);
cin.get();
Kjo bn q dalja e programit t jet e dukshme deri sa t shtypet ndonj tast ose tasti Enter .
cin.ignore(1000,\n); - Prdoret edhe pr t pastruar rrjedhn e t dhnave
paraprake, ashtu q kur t lexohet ose shtypet vlera e re, baferi t jet i zbrazt dhe i pastr, sepse mund t
ndodh q t shtypen t dhnat e vjetra t baferuara m hert. Kjo komand bn q t injorohen 1000
karakteret paraprake ose e tr rrjedha deri tek karakteri \n (pra kalimi n rresht t ri, gjegjsisht
shtypja e ENTER n tastier gjat dhnies s vlerave me tasier), cilado q paraqitet e para.
Funksioni main() sht pika startuese e ekzekutimit t do programi n C++. Por, kjo nuk sht
trsisht e vrtet n t gjitha rastet. Nse shkruhet programi q do t ekzekutohet n ambient t
pavarur, nuk duhet patjetr funksioni main(). Me prjashtim t ktij rasti, programi patjetr duhet ta ket
funksionin main(). Standardi ISO tregon dy mnyrat vijuese t cilat duhet t pranohen nga cilido
kompajler i C++:
int main()
int main(int argc, char *argv[])
Definicioni i par sht standard. Definicioni i dyt i merr dy parametra t funksionit. I pari
prmban numrin e argumenteve t linjs komanduese q i prcillen programit nga procesi thirrs (ai q e
thrret programin pr ekzekutim), i dyt sht nj varg i parametrave t linjs komanduese.
Standardi i C++ lejon kompajlerin q t pranoj definicionet e main() me parametra shtes, por kjo
sht e varur prej implementimit specifik dhe nuk sht portabile n prgjithsi.
4
Lavdim Gashi Ushtrime n C++
Komentet
Komentet, jan tekste pr shfrytzuesit, por q nuk kan ndikim n program. Ato shkruhen sa pr t
dhn ndonj shpjegim ose prshkrim. Kompajlleri i injoron trsisht.
// Komenti n nj rresht
//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 tret
#include <iostream>
using namespace std;
int main()
{
int a;
5
Lavdim Gashi Ushtrime n C++
nm=(n1+n2+n3)/3;
return 0;
}
#include <iostream.h>
int main()
{
cout << "Programimi ne C++ ";
return 0;
}
#include <iostream>
using namespace std;
int main()
{
cout << "Programimi ne C++ ";
return 0;
}
6
Lavdim Gashi Ushtrime n C++
Edhe n versionin e Visual Studio 6.0 (Visual C++ 6.0), programi mund t shkruhet n
formn e dyt, duke thirrur namespace-in standard (std).
Namespace std
Si u tha edhe m hert, kur i prfshijm fajlat e kreut (header files) prej libraris standarde t C++,
prmbajtjet ndodhen n namespace std. Ekzistojn tri mnyra pr t kualifikuar prdorimin e tyre ashtu q t
mund t prdoren n programe:
(a) Duke prdorur direktivn: using namespace std; - Kjo sht metoda m e thjesht, mirpo i bn t gjith
identifikatort e namespace std globalisht t disponueshm.
(b) Duke prdorur deklarimin: using std::cout; - Kjo sht metod m e kufizuar dhe duhet t
prssritet pr gjithka q dshirojm t kualifikojm pr prdorim n program, kshtu q programi do t
duhet t shkruhet si n vijim:
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main()
{
cout << "Jungjatjeta" << endl;
cin.get();
return 0;
}
#include <iostream>
int main()
{
std::cout << "Jungjatjeta" << std::endl;
std::cin.get();
return 0;
}
Header-t e C++
Npr programe, shpeshher nevojite prfshirja e header fajlave (fajlave t kreut) ashtu q t
prdoren urdhrat, operatort, manipulatort dhe funksionet e gatshme t cilat i ofrojn librarit e C++ -it.
Kjo do t thot se duhet t dijm se ka prmbaj header fajlat, ashtu q t dijm se ka mund t
prdorim npr programe. Nse dshton prfshirja e header -ave t duhet, programi nuk do t
kompajlohet.
Libraria e C++ prfshin header-at prej libraris standarde t gjuhs C. Ato kan emrat, si:
<stdlib.h>, <string.h>, <time.h>
Ju mund t prdorini kta header-a n programt n C++ por duhet t keni kujdes, pasi q prmbajtjet e tyre
nuk ndodhen n namespace std, por ato ndodhen n namespace -in global. Prdorimi i ktyre
header-ave t vjetr nuk preferohet n C++, sepse n t ardhmen ata mund t largohen nga standardi.
C++ ofron versionet e veta t reja t ktyr header -ave, prmbajtja e t cilve ndodhet n namespace
std. Header-t ekuaivalent pr kta t msiprmit jan:
<cstdlib>, <cstring>, <ctime>
Pra, si mund t shihet, ata nuk e prdorin prapashtesn .h dhe e kan parashtesn c. Ju duhet t
prdorni versionet e reja npr programe, prveq nse jeni duke mirmbajtur ndonj kod t vjetr t
shkruar n C.
C++ gjithashtu prezenton disa header fajla t ri, t cilt nuk kan ekzistuar n C, si:
<iostream>, <vector>, <algorithm>
Si edhe header-at e tjer t C++, ata nuk e prdorin prapashtesn .h, por nuk kan ndonj prefiks.
Npr literatur do t hasen versionet e vjetra t header -ave t C++, t prdorur para standardit. Ata
kan emrat si: <iostream.h>, <fstream.h> n vend t: <iostream>, <fstream>
Kto versione t vjetra nuk jan adresuar prej standardit t C++ fare. Ata nuk prjashtohen, por nuk
jan header t C-s e as nuk jan pjes e standardit t C++. Ata thjesht jan header - t vjetr, t cilt
jan prdorur pr nj koh t gjat, mirpo preferohet q tash t prdoren versionet e reja, edhe pse
kompajlert sigurisht do t vazhdojn t prkrahin akoma versionet e vjetra, pr pajtueshmri
prapavepruese.
Konfuzion shkakton edhe shtja e prdorimit t t header -it pr string. Ekzistojn tre header-a pr
string: <string.h>, <cstring> t cilt jan t stilit t C-s (vargjet e karaktereve t prfunduara me null -
7
Lavdim Gashi Ushtrime n C++
null-terminated character arrays) dhe prmbajn funksionet pr string si:strcpy(), strcat() and strlen() si dhe
<string> i cili prdoret pr std::string class -at n C++.
Ajo ka sht me rndsi, sht se duhet t jeni n gjendje t shkruani kode t cilat e respektojn C++
standardin, gj q do t thot se mund ti kompajloni n cilindo kompajler modern t C++ -it.
madhsia n
Tipi Rangu i vlerave
bajta
unsigned short int 0..65535 2
short int -32768..32767 2
unsigned long int 0..4294967295 4
long int -2147483648..2147483647 4
int - 16 bit -32768..32767 2
int - 32 bit -2147483648..2147483647 4
unsigned int - 16 0..65535 2
bit
unsigned int - 32 0..4294967295 4
bit
float 1.2E-38..3.4E38 4
double 2.2E-308..1.8E308 8
char 256 simbole 1
Deklarimi
Variabla deklarohet, duke deklaruar tipin dhe emrin:
tipiVariabls emriVariabls, si p.sh.:
int a;
double x;
float z;
short int koha;
char g;
char Emri[20];
/* Ne C++ nuk ka variabel tekstuale - String, keshtu qe Stringu krijohet
si varg i karaktereve te veanta*/
int x,y;
long int dita,e,f3; //Deklarimi i perbashket
A[8]; //Vektori
8
Lavdim Gashi Ushtrime n C++
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};
double PI=3.1415926;
Bool
Vlera e tipit Bool-ean (t Bulit) mund t ken vlern true (e sakt) ose false (e pasakt).
P.sh.,
bool tek = false;
bool VlerauGjet = true;
Nse vlera buleane konvertohet n numr t plot, ather true bhet 1 kurse false bhet 0.
Nse nj vler numerike e plot konvertohet n vler Bool -eane, ather vlera 0 bhet false
kurse fardo vlere jo-zero bhet true (e sakt).
Character
Tipi karakter prdoret pr t ruajtur shkronjat, shifrat dhe simbolet (zakonisht ASCII
karakteret, por jo gjithmon). P.sh.,
char menyja = 'q';
char vleraHyrese = '3';
char SimboliPerqind = '%';
9
Lavdim Gashi Ushtrime n C++
Integer
Tipi integer prdoret pr ruajtjen e numrave t plot. Mund t prdoren tipet signed (me
shenj), unsigned (pa shenj) ose i thjesht:
signed int indeksi = 4198;
signed int temperatura = -32;
unsigned int numri = 0;
int lartesia = 100;
int vlera = -67;
Sikur n rastin e karaktereve, numrat me shenj mund t prmbajn vlera negative,
pozitive ose zero kurse ata pa shenj vetm vlera pozitive ose zero. Sidoqoft, numrat e thjesht mund
t prmbajn cilat do vlera, pasi q gjithmon e kan shenjn. Numrat integer mund t deklarohen n
form t shkurtr, pa fjaln e rezervuar int:
signed indeksi = 4198;
unsigned numri = 0;
Vlerat Integer paraqiten n tri madhsi: plain int (int i thjesht), short int (int i shkurtr) dhe
long int (int i gjat).
int normal = 1000;
short int vleraeVogel = 100;
long int vleraeMadhe = 10000;
Rangu i vlerave t ktyr tipeve sht i definuar prej kompajlerit. Zakonisht, tipi i thjesht int ka
rang m t gjer se short int, kurse long int m t gjat se ai i thjesht, edhe pse nuk
ndodh kshtu gjithmon.
Ajo q sht e sigurt, sht se tipi i thjesht do t jet s paku i madh sa short int ose m i madh
dhe long int do t jet s paku i madh sa i thjeshti ose m i madh. Tipi short int sht s paku 16 bita,
kurse long int s paku 32 bita.
Vlerat short int dhe long int mund t definohen edhe n form t shkurtr, pa fjaln e
rezervuar int:
short vleraeVogel = 100;
long vleraeMadhe = 10000;
Mund t kemi vlera long int dhe short int me shenj ose pa shenj:
unsigned long vleraPozitive = 12345;
signed short = -7;
10
Lavdim Gashi Ushtrime n C++
Floating-Point
Tipet e numrave me pik t lvizshme mund t prmbajn numra decimal, si p.sh: 1.23, -
.087. Ekzistojn tri madhsi: float (single -precision - me precizitet t njfisht), double (double
precision - me precizitet t dyfisht) dhe long double (extended -precision - precizitet i
zgjeruar). P.sh.:
float celsius = 37.623;
double fahrenheit = 98.415;
long double xhirollogaria = 1897.23;
Rangu i vlerave q mund t ruhen n seciln prej tyr sht i definuar prej kompajlerit.
Zakonisht tipet double do t ruajn vlera m t mdha se ragnu i float dhe long double do t ruaj vlera
m t mdha se double (edhe pse kjo nuk sht gjithmon e vrtet). Sidoqoft, sht e sigurt se
double do t jet s paku i madh sa float por mund t jet m i madh, dhe long double do t jet i madh
s paku sa long por mund t jet edhe m imadh.
Class - Klasat
Diskutimi pr klasat, i tejkalon kufinjt e asaj ka msohet n kt semestr dhe nuk sht
prfshir n kt tekst.
11
Lavdim Gashi Ushtrime n C++
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_
12
Lavdim Gashi Ushtrime n C++
// Programi lexo1
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a <<endl;
return 0;
}
Rezervimi i hapsirs
E njjta mund t bhet edhe duke prdorur manipulatorin setw(x) (angl. set width -
prcakto gjersin), i cili ndodhet n librarin <iomanip> (Input -Output manipulation).
#include <iomanip>
13
Lavdim Gashi Ushtrime n C++
setw(8);
cout<<a:
Mbushja me mostr
Mbushja e pozitave t zbrazta, mund t bhet me ndonj simbol, i cili duhet t jepet
brenda thojzave t njfishta (apostrofeve), n urdhrin cout.fill (ang. Fill - mbushe).
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:
Pra, kado q shkruhet brenda thonjzave prsritet ashtu si sht shkruar, kurse pjesa
(variablat) jasht thonjzave mirren prej programit. Ndarja e ktyre pjesve bhet me shenjn e
ridrejtimit t rrjedhs: <<.
Pr t arritur rezultatet n dalje, me format t caktuar, prdoren edhe karakteret speciale, t
cilat e braktisin rrjedhn normale hyrse/dalse, prandaj edhe quhen Escape -Sequence
characters (Karakteret pr braktisje t sekuencs/rrjedhs).
14
Lavdim Gashi Ushtrime n C++
\xhh, mund t prdoret pr t shtypur n ekran karakteret t cilat nuk i kemi n tastier, si
p.sh. shkronja dhe , t gjuhs shqipe. ASCII kodi prkats i karakterit, duhet t shkruhet
n formn heksadecimale. P.sh. pr , kodi sht: 137 (Si e shtypim zakonisht n tastier,
ALT+137). Ather, 137 n bazn 16 (numr heksadecimal), sht: 89 (8*16 1+9*160=137).
Prandaj, pr ta shtypur n dalje shkronjn , duhet t shkruhet: \x89. P.sh., pwr tw shtypur
nw dalje:
Sot sht dit e mir - n C++ duhet t shkruhet - Sot \x89sht\x89 dit\x89 e mir\x89
(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:
15
Lavdim Gashi Ushtrime n C++
cout<<"---------------------------\n";
for (i=1;i<=10;i++)
{
cout<< setprecision(i) << setw(i) << x << "\n";
}
return 0;
}
int main () {
double a,b,c;
a = 3.1415926534;
b = 2006.0;
c = 1.0e-10;
cout.precision(5); \\preciziteti, shifrat pas presjes dhjetore
cout << a << "\t\t" << b << "\t\t" << c << endl<<endl;
cout << fixed << a << "\t\t" << b << "\t" << c << endl<<endl;
cout << scientific << a << "\t" << b << '\t' << c << endl<<endl; return
0;
}
16
Lavdim Gashi Ushtrime n C++
Sistemi numerik
Rezultatet mund t shtypen n sistemet numerike me baz t ndryshme, si decimal (baza 10),
heksadecimal (baza 16), octal (baza 8), etj, duke prdorur para shtypjes s vlers, urdhrin pr
prcaktimin e formatit prkats: dec, hex apo oct.
int main ()
{
int n;
n=100; //vlera decimale 100
cout << dec << n << endl;
cout << hex << n << endl;
cout << oct << n << endl;
return 0;
}
17
Lavdim Gashi Ushtrime n C++
// Programi Fjala1
#include <iostream>
using namespace std;
int main()
{
char Emri[20], Mbiemri[20];
Tekstet ose fjalt deklarohen si variabla t tipit karakter me gjatsi t caktuar (varg/vektor i
karaktereve). Duhet pasur kujdes, se gjat leximit prej tastiers (prmes urdhrit cin) mirret
vetm teksti deri tek zbraztira e par q haset gjat leximit, kshtu q lexohet vetm fjala e
par e shtypur.
// Programi lexo-shtyp
#include <iostream>
using namespace std;
int main()
{
char A[20];
cout << "Fjalia q lexohet: "; cin
>> A;
cout << "Fjalia q u lexua: "
<< A
<< "\n";
return 0;
}
18
Lavdim Gashi Ushtrime n C++
Leximi i tekstit me gjatsi t caktuar, bhet me urdhrin cin.get (ang. Get - marr, merr)
// 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;
}
// Programi lexo7
#include <iostream>
using namespace std;
int main()
{
const int m=20;
char A[m];
cout << "Fjalia q lexohet: ";
cin.getline(A,m);
cout << "Fjalia q u lexua: "
<< A
<< "\n";
return 0;
}
19
Lavdim Gashi Ushtrime n C++
Rreshtimi i tekstit
// 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
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
int n;
n=-25;
cout.width(10);
cout.fill('*');
cout << setiosflags(ios::left) << n << endl;
cout.width(10);
cout.fill('*');
cout << setiosflags(ios::right) << n << endl;
cout.width(15);
return 0;
}
20
Lavdim Gashi Ushtrime n C++
Stringu
Vargu i karaktereve
Si tregon edhe vet emri, vargu i karaktereve n stil t C -s sht paraqitje e t dhnave
string q prdoret n gjuhn C. N C, kjo sht teknika e vetme pr ruajtjen dhe manipulimin e
t dhnave string. Stringjet ruhen si vargje t karaktereve t prfunduara me null - \0. Kjo
paraqitje ka disa dobsi, t cilat duhet t evitohen n C++ duke prdorur klasn string.
Vargu i karaktereve me madhsi t mjaftueshme duhet t definohet ose alokohet pr t
mbajtur s paku gjatsin e stringut plus nj, pasi q nj bajt nevojitet pr t
ashtuquajturin null terminator (prfunduesin null (zero)). sht prgjegjsi e
programerit q t jet i sigurt pr gjatsin e mjaftueshme t vargut. Kompajlimi nuk do
t lajmroj ndonj gabim apo vrejtje nse gjatsia sht m e vogl se sa q duhet.
Gabimet n madhsin e vargut t karaktereve do t paraqiten gjat ekzekutimit.
Programi mund t bllokohet, t ket sjellje t gabuar ose t paparashikuar.
Ndojnher, sht e nevojshme q null terminatori t shtohet n mnyr eksplicite.
Zakonisht nevojiten ose prdoren pointert pr t ju qasur dhe pr t manipuluar me t
dhnat string.
Kur t kopjohen stringjet, programeri duhet t verifikoj vargun cak pr gjatsi t
nevojshme. Kur shtohen stringjet, prsri gjatsia e stringut duhet t mirret n
konsiderim.
Mirpo, ka disa arsye t rndsishme, pr studimin dhe msimin e stringjeve t stilit t C -
s. S pari, mirmbajtja e ndonj kodi t trashguar, sepse disa programer i prdorin akoma. S dyti,
klasa string nuk ishte pjes e versioneve fillestare t C++ -it. Programert i prdorin t dy mnyrat. N
secilin rast, nevojitet njohja e C-stringjeve. Arsyeja e fundit sht se akoma
prdoren n C++ pr t manipuluar me argumentet e linjs komanduese. Argumentet e linjs
komanduese jan t dhna ose urdhra t cilt i prcillen programit kur ai fillon ekzekutimin. Kto
argumente i prcillen programit t C++ -it n stilin e C-stringjeve.
Klasa String
Libraria standarde e C++-it ofron klasn string. Prdorimi i ksaj klase duhet t prfshihet n
program me direktivn: #include <string>.
Pr dallim prej C-stringjeve, prfaqsimi i brendshm i t dhnave string sht i fshehur
prmes klass string. T dhnat jan nj bashksi, e qasur dhe e manipuluar prmes prdorimit t
metodave t klass string. Programeri nuk sht i preokupuar si dhe ku ruhet stringu. Kjo
sht nj shembull i enkapsulimit. Le t shohim krijimin dhe inicializimin e objekteve string prmes
nj shembull:
21
Lavdim Gashi Ushtrime n C++
#include <iostream>
#include <string>
using namespace std;
int main()
{
string S1;
// Konstruktori i zakonshem, pa inicializim
string S2("Tung");
// Inicializimi me C-Style string
string S3("Tung nga Kosova");
// Inicializimi me C-Style string
string S4(S3);
// Inicializimi me nje string objekt tjetr
cout << "S2: " << S2 << endl;
cout << "S3: " << S3 << endl;
cout << "S4: " << S4 << endl;
S1 = S2;
// Ndarja e nj stringu, stringut tjetr
S1 = S3;
// S1 mori madhsin e krkuar.
// Nuk nevojitet ndonj urdhr i veant
cout << "S1: " << S1 << endl;
return 0;
}
Rezultati:
Veprimet me String
Klasa string prkrah operatort relacional si: <, <=, ==, !=, >= dhe > pr krahssim t
stringjeve. Operatori + prdoret pr bashkimin e stringjeve. Operatori [] (subscript operator)
mund t prdorte pr t ju qasur ose pr t caktaur ndonj element individual t stringut. Klasa
22
Lavdim Gashi Ushtrime n C++
string ka gjithasthu edhe metodat (funksionet pr veprim), empty (zbraze) pr t testuar stringun e
zbrazt dhe size (madhsia) pr t llogaritur madhsin (gjatsin) e stringut.
Shembull:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string S1;
string S2(" nga ");
string S3("Kosova");
string S4;
if (S1.empty())
{
cout << "S1 eshte i zbrazet" << endl;
cout << "Ka gjatesine " << S1.size() << endl;
}
else
{
cout << "Jo, nuk eshte i zbrazet." << endl;
}
S1 = "Tung";
cout << "S1 tani ka gjatesine " << S1.size() << endl;
if (S3 < S1) // Krahasimi relacional
{
cout << "K eshte para T" << endl;
}
S4 = S1 + S2 + S3; // bashkimi
cout << "S4: " << S4 << endl;
S1 += S2; // bashkimi
S1 += S3;
23
Lavdim Gashi Ushtrime n C++
Rezultati:
Klasa string ka shum metoda pr manipulim t stringjeve, si: shtimi, insertimi, fshirja,
krkimi dhe zvendsimi. Disa nda to jan prshkruar n tabeln vijuese:
Metoda Prdorimi
append(char *pt);
append(char *pt, size_t count);
append(string &str, size_t
offset,size_t count); Shton karkteret prej C-stringut, char ose objekteve tjera string.
append(string &str);
append(size_t count, char ch);
append(InputIterator Start,
InputIterator End);
Kthen referencn n karakterin n pozitn e specifikuar. Dallon prej
at(size_t offset); operatorit t indeksimit [ ], pasi q verifikohen kufinjt.
24
Lavdim Gashi Ushtrime n C++
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 ;
25
Lavdim Gashi Ushtrime n C++
return 0; Fundi
}
26
Lavdim Gashi Ushtrime n C++
// Programi if2
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "Vlera x=";
cin >> x;
if ((x%2) == 0)
cout << "\n x eshte cift\n";
if ((x%2) == 1)
cout << "\n x eshte tek\n";
return 0;
}
Kemi edhe rastin kur pr ndonj kusht t caktuar ekzekutohet urdhri (ose urdhrat),
kurse nse nuk plotsohet kushti duhet t ekzekutohet ndonj urdhr tjetr, si n vazhdim:
If (kushti)
urdhri1;
else
urdhri2;
27
Lavdim Gashi Ushtrime n C++
// Programi if2a
Fillimi
#include <iostream>
using namespace std;
int main() x
{
int x; Po Jo
x >0
cout << "Vlera x="; X sht X sht
cin >> x; pozitiv negativ
if (x > 0)
cout << "\nx eshte pozitiv \n"; Fundi
else
cout << "\nx eshte negativ\n";
return 0;
}
if (kushti)
{
urdhrat1;
}
else
{
urdhrat2;
}
28
Lavdim Gashi Ushtrime n C++
cout<<endl;
return 0;
}
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.
Kushtet e ndrthurura paraqiten n rastet kur kemi kusht brenda kushtit (IF brenda IF-it), pra
kur ndonj urdhr duhet t ekzekutohet vetm nse jan plotsuar disa kushte t
njpasnjshme.
29
Lavdim Gashi Ushtrime n C++
if (kushti1)
if (kushti2)
urdhri1;
else
urdhri2;
else
urdhri3;
Pra, urdhri1 ekzekutohet vetem kur plotsohen edhe kushti1 edhe kushti2. urdhri2
ekzekutohet kur plotsohet kushti1 por nuk plotsohet kushti2. urdhri3 ekzekutohet kur nuk
plotsohet fare kushti1 (n kt rast, kushti2 nuk vjen n pyetje fare).
P.sh, n rastin vijues, edhe pse duket se llogaritja do t behet n rregull duke prdorur
kombinim e kushteve prmes operatorit DHE, mund t shihet se pr numrat pozitiv por m t vegjl
se 10, rezultati del i gabuar.
Duke prdorur kushtin e ndrthurur (IF brenda IF-it), mund t llogaritet n mnyr
korrekte.
30
Lavdim Gashi Ushtrime n C++
Fillimi
Po Jo
x > 0
x > 10
Fundi
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:
31
Lavdim Gashi Ushtrime n C++
Switch ( )
Fillimi
Nota
Nota
1 5
2 3 4
Fundi
// Programi case1
#include <iostream>
using namespace std;
int main()
{
int Nota;
32
Lavdim Gashi Ushtrime n C++
cout<<" Nota="
<< Nota
<< "\n";
return 0;
}
// Programi case2
#include <iostream>
using namespace std;
int main()
{
int Nota;
Pr do case (angl. Case - rast, shembull, mundsi) duhet t vendoset edhe break
(ndale, ndrpreje), pr t ndrprer ekzekutimin e mtejm t kushteve kur t gjendet vlera e rastit t
caktuar. N fund, me default eleminohet mundsia e dhnies s vlerave t gabuara (q nuk jan
prfshir n asnjrin rast t parapar (ose parashikuar)).
P.sh, pjesa n vijim mund t paraqitet n fillim t ndonj programi m t gjat:
// Programi case3
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
33
Lavdim Gashi Ushtrime n C++
int i;
char zgjedhja;
cout<<" Ne cilen kategori beni pjese? :\n" ;
cout<<" M - Mesimdhenes\n" ;
cout<<" A - Administrate\n" ;
cout<<" S - Student\n" ;
cout<<" Kategoria e juaj: " ;
cin >> zgjedhja;
//if (zgjedhja>=97)
//zgjedhja=zgjedhja-32;
zgjedhja=toupper(zgjedhja);
switch(zgjedhja)
{
case ('M'): cout<<"Duhet te lajmeroheni ne ora: 10.00\n";
break;
case ('A'): cout<<"Duhet te lajmeroheni ne ora: 12.00\n";
break;
case ('S'): cout<<"Duhet te lajmeroheni ne ora: 14.00\n";
break;
default: cout << "Gabim\n";
}
cout <<"\n *** *** Dalja *** *\n";
return 0;
}
//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).
34
Lavdim Gashi Ushtrime n C++
Fillimi Fillimi
Go to Fundi Go to Fundi
Fillimi
Fillimi Mesi Fundi
Go to Dalja
Go to Fillimi Dalja
Fundi
Fundi
Go to Mesi
Dalja
Fundi
// Programi goto1
#include <iostream>
using namespace std;
int main()
{
goto Fundi;
Fundi:
cout << "Fundi\n";
goto Mesi;
Dalja:
return 0;
}
35
Lavdim Gashi Ushtrime n C++
Fillimi
Fillimi
Vlera i=
go to Po
Fillimi i<10
Jo
i<10 i>=10
Fundi
// Programi goto2
#include <iostream>
using namespace std;
int main()
{
int i;
Fillimi: //Adresa Fillimi
cout<< "Zgjedhni vleren per i: i=";
cin>>i;
if (i<10)
{
cout << "Keni zgjedhur i me te vogel se 10\n\n"; goto
Fillimi;
}
36
Lavdim Gashi Ushtrime n C++
// Programi goto3
#include <iostream>
using namespace std;
int main()
{
int i;
char zgjedhja;
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";
37
Lavdim Gashi Ushtrime n C++
Loop (angl Loop-laku, rrethi i mbyllur, apo ndryshe si term m i prshtatshm n gjuhn shqipe,
unaza) paraqet pjesn e programit, ku bhet prsritja e ekzekutimit t nj apo m
shum urdhrave t programit. Unaza ka variabln e unazs, e cila prdoret si tregues se sa her do t
prsriten urdhrat brenda unazs. Ajo fillon me vlern fillestare dhe pr do her t
ekzekutimit t urdhrave t unazs, e ndryshon vlern pr nj hap t caktuar, q njihet si hapi i unazs.
N fund t pjess s unazs, testohet se a sht plotsuar kushti pr dalje prej unazs. Kjo rritje e
variabls s unazs, pr hapin e caktuar, vazhdon deri sa t plotsohet kushti pr dalje prej unazs. N
C++ prkrahen disa forma t unazave:
Unaza While (gjersa), bn prsritjen e urdhrave t unazs, gjersa vlen kushti i caktuar. Pra,
gjersa pr kushtin e unazs While kemi rezultatin TRUE (E SAKT, PO), ekzekutohen urdhrat e unazs
dhe variabla e unazs rritet, pr hapin e caktuar.
Unaza While, s pari e vlerson kushtin dhe pastaj, nse plotsohet kushti, ekzekuton urdhrat n
unaz. Nse kushti nuk plotsohet hern e par q testohet kushti (pr hapin e par t variabls s unazs),
pra pr vlern fillestare t variabls s unazs, ather urdhrat n unaz nuk do t
ekzekutohen asnjher.
i=f; ku jan:
while(kushti) i - variabla e unazs.
{ f - vlera fillestare e variabls s unazs.
urdhri/at; kushti - kushti i ekzekutimit t urdhrave q
i=i+h; prfshihen n trupin e unazs.
} h - hapi me t cilin ndryshohen vlerat e variabls i.
urdhri/at - urdhrat q ekzekutohen brenda unazs.
Fillimi
S=0
i=1
Jo
i n
Po
S=S+i
i=i+1
Fundi
38
Lavdim Gashi Ushtrime n C++
// Program while1
#include <iostream>
using namespace std;
int main()
{
double S;
int i;
S=0;
i=1; //vlera fillestare
while (i<=10) //kushti pr mbetje brenda unazs
{
S=S+i; //urdhri
i=i+1; //rritja e hapit t unazs
}
cout << "S="
<< S
<< "\n";
return 0;
}
Nse Unaza While pr kushtin e unazs ka gjithmon rezultatin TRUE, ather urdhrat e
unazs do t prsriten pafundsisht. P.sh, nwse vendoset kushti si nw vijim:
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
Mirpo, pr dallim nga unaza While, unaza Do...While, s pari e i ekzekuton urdhrat e
unazs, e pastaj e vlerson kushtin pr dalje prej unazs (apo pr mbejte n unaz) dhe pastaj,
nse plotsohet kushti, prsri ekzekuton urdhrat n unaz. Edhe nse kushti nuk plotsohet
hern e par q testohet (pr hapin e par t variabls s unazs), pra pr vlern fillestare t
variabls s unazs, urdhrat n unaz ve jan ekzekutuar njher. Pra, s paku nj her ata do t
ekzekutohen gjithsesi.
39
Lavdim Gashi Ushtrime n C++
i=f; ku jan:
do i - variabla e unazs.
{ f - vlera fillestare e variabls s unazs.
urdhri/at; kushti - kushti i ekzekutimit t urdhrave q prfshihen
i=i+h; n trupin e unazs.
} h - hapi me t cilin ndryshohen vlerat e variabls i.
while(kushti); urdhri/at - urhdri/at e prfshira brenda unazs.
Fillimi
S=0
i=1
S=S+i
i=i+1
Po i n
Jo
S
Fundi
// Programi do-while1
#include <iostream>
using namespace std;
int main()
{
const int m=3;
int i;
double s;
s=0;
i=1; //vlera fillestare
do //(do - bj, vepro, kryej)
{
s=s+i; //urdhri
i++; //rritja e hapit t unazs
}
while (i<=m); //kushti pr mbetje n unaz
cout << "Shuma s= "
<< s
<< "\n";
return 0;
}
40
Lavdim Gashi Ushtrime n C++
Unaza for
Unaza for (pr), gjithashtu bn prsritjen e urdhrave brenda unazs, duke prshkruar n
fillim vlern fillestare, kushtin dhe hapin e unazs. Ka form m kompakte dhe prdoret n t
shumtn e rasteve. Zakonisht, kur vlerat kufitare (vlera fillestare dhe vlera prfundimtare) t
variabls s unazs jan t njohura paraprakisht, prdoret unaza for.
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.
41
Lavdim Gashi Ushtrime n C++
Fillimi Fillimi
n n
S=0 S=0
i=1
i=1; i<=n; i=i+1
S=S+i
S=S+i
i=i+1
S
Po i n
Fundi
Jo
S
Fundi
for (i=65;i<=90;i++)
cout << char(i);
for (i=97;i<=122;i++)
cout << char(i);
cout << endl;
return 0;
}
Unaza for mund t prdor edhe variabl t unazs q zvoglohet pr secilin hap t unazs:
#include <iostream>
using namespace std;
int main()
{
int i;
cout << "Numrimi ne zbritje" << endl; i=10;
42
Lavdim Gashi Ushtrime n C++
for(i=10;i>0;i--)
{
cout<<"i="<<i<<"\n";
}
Unaza for mund t paraqitet edhe n trajtat e saj t zgjeruara, me m shum varibala t
fushave ose n trajta t shkurtra, kur nuk i jepen t tri komponentet q prcaktojn fillimin,
fundin dhe hapin me t cilin rritet/zvoglohet variabla e unazs .
Duke prdorur operatorin presje , (operatori presje sht nj element ndars i
shprehjeve dhe shrben pr ndarjen e dy e m shum shprehjeve n rastet kur zakonisht pritet vetm
nj shprehje), mund t prcaktohet m shum se nj shprehje n cilndo fush t unazs for, si n
shembullin vijues, ku supozojm se dshirojm t inicializojm m shum se nj
variabl t unazs:
Vriabla n fillon me vlern 0 kurse i me at 100 dhe kushti i unazs sht n!=i (n jobaraz
me i). Pasi q n rritet pr nj kurse i zbritet pr nj, ather kushti i unazs do t bhet false (jo
i sakt) pas hapit t 50, kur n dhe i do t jen t barabarta me 50.
Unaza for mund t prdoret edhe sa pr t insertuar ndonj vones kohore n nj pjes t
programit, duke dhn vetm kreun e unazs por pa urdhra prbrenda:
43
Lavdim Gashi Ushtrime n C++
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;
}
Prmes urdhrit break (ndrpreje, ndale) mund t bhet dalja e parakohshme prej unazs,
gjegjsisht ndrprerja e saj. Kjo mund t bhet, prmes testimit n ndonj kushti shtes, brenda trupit t
unazs. P.sh., kemi unazn pr shtypjen e numrave rendor, prej 1 deri n 10. Mirpor,
brenda unazs, vendosim kushtin, q nse vlera e variabls s unazs sht m e madhe se 5, t
ndrpritet unaza.
Fillimi Fillimi
n n
S=0 S=0
Po Po
i > 5 i > 5
Jo
S=S+i S=S+i
i=i+1
S
Po
i n
Fundi
Jo
Fundi
44
Lavdim Gashi Ushtrime n C++
{
if (i>5) break; //ndrprerja, dalja prej unaze
cout << "i=" << i << "\n";
}
return 0;
}
Sikur t mos ishte urdhri if , do t shtypeshin vlerat deri ne 10, mirpo kshtu porsa t
kalohet vlera 5, bhet dalja prej unaze (ndrprerja, ndalja e unazs).
Prmes urdhrit Continue (angl. Continue - vazhdo) n unazat for mund t bhet kaprcimi
i nj hapi t unazs. Kjo mund t bhet, prmes testimit n ndonj kushti shtes brenda trupit t
unazs. P.sh., kemi unazn pr shtypjen e numrave rendor, prej 1 deri n 10, duke e prjashtuar
(anashkaluar) 5-shin. Brenda unazs, vendosim kushtin, q nse vlera e variabls s unazs sht i=5,
t mos ekzekutohen urdhri i unazs, por t rritet hapi i unazs, pra t vazhdohet n hapin tjetr t
unazs (i=6).
Fillimi
i=1
Po
i=5
Jo
i
i=i+1
Po
i<=n
Jo
Fundi
45
Lavdim Gashi Ushtrime n C++
{
if (i = = 5) continue; //kalo hapin, pr i=5
cout << "i=" << i << "\n";
}
return 0;
}
Rast i ngjashm, sht kur krkohet t gjindet shuma e numrave prej 1 deri n n, por duke
n
46
Lavdim Gashi Ushtrime n C++
Vargjet
Vargjet mund ti deklarojm dhe aty pr aty ti inicializojm me vlera, si n vijim: int
A[5]={7,2,4,1,3};
47
Lavdim Gashi Ushtrime n C++
Vektort
// 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;
}
48
Lavdim Gashi Ushtrime n C++
<< i
<< "]="
<< A[i]
<< "\n";
cout << "A[" << i << "]=" << A[i] << "\n";
Pjesa e shkruar brenda thonjzave , prsritet, ashtu si edhe sht dhn, kurse pjesa jasht
thonjzave sht vler q mirret prej programit. Kto pjes ndahen mes veti prmes
shenjs/operatorit t ridrejtitmi <<.
// Programi vektor3
#include <iostream>
using namespace std;
int main()
{
const int m=5;
int i, A[m];
//Krijimi i vektorit
for (i=0;i<m;i++)
{
cout << "A["
<< i+1
<< "]= ";
cin >> A[i];
}
// Shtypja e vektorit
cout << " Vektori i krijuar: \n"; cout
<< "A={ ";
for (i=0;i<m;i++)
cout << A[i]
<< " ";
cout << "}\n";
return 0;
}
49
Lavdim Gashi Ushtrime n C++
50
Lavdim Gashi Ushtrime n C++
51
Lavdim Gashi Ushtrime n C++
Matricat
// Programi matrica2
#include <iostream>
using namespace std;
int main()
{
const int m=3, n=3;
int A[m][n];
int i,j;
//Krijimi i matrics
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
cout << "A[" << i+1 << "][" << j+1 << "]="; cin >>
A[i][j];
52
Lavdim Gashi Ushtrime n C++
}
}
//Shtypja e matrics
cout << "Matrica A: " << "\n"; for
(i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout << A[i][j]
<< " ";
cout << "\n";
}
return 0;
}
53
Lavdim Gashi Ushtrime n C++
Po
i m
Jo
S
Fundi
Numrimi i antarve bhet duke marr nj numrator (p.sh. n) me vlern fillestare n=0; para
unazs dhe pastaj n unazn e cila i prshkon t gjith antart e vargut, sa her q gjendet nj antar
q e plotson kushtin e dhn, numratori rritet pr nj (n=n+1).
54
Lavdim Gashi Ushtrime n C++
Fillimi
m,(ai,i=1,m)
n=0
i=1
Jo
ai < 0
Po
n=n+1
i=i+1
Po
i m
Jo
n
Fundi
55
Lavdim Gashi Ushtrime n C++
56
Lavdim Gashi Ushtrime n C++
Fillimi
m,(ai,i=1,m)
amax=a1
i=2
Po
amax ai
Jo
amax=ai
i=i+1
Po
i m
Jo
amax
Fundi
57
Lavdim Gashi Ushtrime n C++
2
A[i] A[j]
1 3
B
58
Lavdim Gashi Ushtrime n C++
Fillimi
n,(ai,i=1,n)
i=1
j=i+1
Po
ai aj
Jo
b=ai
ai=aj
aj=b
j=j+1
Po
j n
Jo
i=i+1
Po
i n-1
Jo
(ai,i=1,n)
Fundi
59
Lavdim Gashi Ushtrime n C++
Fillimi
m,n
i=1
j=1
< >
i <> j
=
aij=1 aij=0 aij=2
j=j+1
Po
j n
Jo
i=i+1
Po
i m
Jo
i 1, m
a ,
ij j 1,n
Fundi
//Formimi i matrices
#include <iostream>
using namespace std;
#include <cmath>
int main()
{
const int m=5,n=5;
int i,j,A[m][n];
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (i<j)
A[i][j]=1;
else
if (i==j)
A[i][j]=0;
else
A[i][j]=2;
cout << "Matrica e formuar"
<< "\n";
60
Lavdim Gashi Ushtrime n C++
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout << A[i][j]
<< " ";
cout << "\n";
}
return 0;
}
Shembull:
Keni kujdes, mos te habiteni nga teksti i detyres, si p.sh: Te formohet matrica e cila
antart e diagonales dhe ata mbi diagonale i ka sa shuma e dy -fishit t rreshtit dhe trefishit t
kolons (shtylls), kurse antart nn diagonale i ka sa diferenca e trefishit t rreshtit dhe kubit t
kolons (shtylls). N rastet e ngjashme, gjithmo duhet t keni parasysh, q pr antart A ij (ose si
shnohen n program: A[i][j] ) t matrics A[m][n] rreshtin e prfaqson indeksi i par i, kurse
shtylln indeksi j, prandaj do t kmi:
61
Lavdim Gashi Ushtrime n C++
Fillimi
m,n
i=1
j=1
< >
i <- j>
=
aij=2i+3j aij=2i+3j aij=3i-j2
j=j+1
Po
j n
Jo
i=i+1
Po
i m
Jo
i 1, m
aij,
j 1,n
Fundi
//Formimi i matrices
#include <iostream>
#include <math>
using namespace std;
int main()
{
const int m=4,n=4;
int i,j,A[m][n];
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (i<j)
A[i][j]=2*i+3*j;
else
if (i==j)
A[i][j]=i+j;
else
A[i][j]=3*i-j*j;
cout << "Matrica e formuar" << "\n"; for
(i=0;i<m;i++)
{
for (j=0;j<n;j++)
cout << A[i][j]
<< " ";
cout << "\n";
}
return 0;
}
62
Lavdim Gashi Ushtrime n C++
Fillimi
m,(di,i=1,m)
i=1
j=1
< >
i <- j>
=
aij=di+j aij=di aij=di+8
j=j+1
Po
j m
Jo
i=i+1
Po
i m
Jo
i 1, m
aij,
j 1,m
Fundi
63
Lavdim Gashi Ushtrime n C++
64
Lavdim Gashi Ushtrime n C++
Fillimi
m,(bi,i=1,m)
i=1
j=1
Po Jo
j=1
gij=bj gij=i
j=j+1
Po
j m
Jo
i=i+1
Po
i m
Jo
g , i1, m
ij j 1,m
Fundi
65
Lavdim Gashi Ushtrime n C++
Bashkimi i dy matricave
Fillimi
i 1, m i 1, m
m ,a ij, , b ij ,
j 1, m j 1, m
i=1
j=1
Po Jo
j m
dij=aij dij=bi,j-m
j=j+1
Po
j 2m
Jo
i=i+1
Po
i m
Jo
i 1, m
dij,
j 1,2m
Fundi
66
Lavdim Gashi Ushtrime n C++
//Bashkimi i dy matricave
#include <iostream>
using namespace std;
int main()
{
const int m=3;
int A[m][m]={ {4,7,3},
{-2,3,9},
{8,-4,2}
};
int B[m][m]={ {-2,9,1},
{4,8,3},
{6,1,7}
};
int i,j,D[m][2*m];
for (i=0;i<m;i++)
for (j=0;j<(2*m);j++)
if (j<m)
D[i][j]=A[i][j];
else
D[i][j]=B[i][j-m];
cout << "Matrica e formuar"
<< "\n";
for (i=0;i<m;i++)
{
for (j=0;j<(2*m);j++)
{
cout.width(5);
cout << D[i][j];
}
cout << "\n";
}
return 0;
}
67
Lavdim Gashi Ushtrime n C++
Fillimi
i=1
j=1
Po Jo
i n
Jo i=j Po
j=j+1
Po
j n
Jo
i=i+1
Po
i 2n
Jo
i 1,2n
tij,
j 1,n
Fundi
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;
68
Lavdim Gashi Ushtrime n C++
{
cout.width(5);
cout << T[i][j];
}
cout << "\n";
}
return 0;
}
69
Lavdim Gashi Ushtrime n C++
F 0
0 G
Fillimi
m,n,l,k
i 1,m i 1,l
f , , g ,
ij j 1,n ij
j 1, k
i=1
j=1
Po Jo
i m
Po Jo Po Jo
j n j n
j=j+1
Po
j n+k
Jo
i=i+1
Po
i m+l
Jo
i 1, m l
r ij 1, n k
, j
Fundi
70
Lavdim Gashi Ushtrime n C++
{6,1,7},
{-9,4,2}
};
int i,j,R[m+l][n+k];
for (i=0;i<m+l;i++)
for (j=0;j<n+k;j++)
if (i<m)
if (j<n)
R[i][j]=F[i][j];
else
R[i][j]=0;
else
if (j<n)
R[i][j]=0;
else
R[i][j]=G[i-m][j-n];
cout << "Matrica e formuar"
<< "\n";
for (i=0;i<m+l;i++)
{
for (j=0;j<n+k;j++)
{
cout.width(5);
cout << R[i][j];
}
cout << "\n";
}
return 0;
}
71
Lavdim Gashi Ushtrime n C++
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:
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
72
Lavdim Gashi Ushtrime n C++
Fillimi
i 1,m
m, n, a ,
ij j 1, n
k=0
i=1
j=1
k=k+1
zk=aij
j=j+1
Po
j n
Jo
i=i+1
Po
i m
Jo
(zi,i=1,k)
Fundi
//Krijimi vektorit
k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
k=k+1;
B[k]=A[i][j];
}
73
Lavdim Gashi Ushtrime n C++
for (i=0;i<=k;i++)
{
cout.width(3);
cout << B[i];
}
cout << " ]\n";
return 0;
}
//Krijimi vektorit
k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
k=k+1;
B[k]=A[i][j];
}
return 0;
}
74
Lavdim Gashi Ushtrime n C++
N fillim, para unazave pr i dhe pr j, kemi marr k=-1;, meqen se, n pjesn pr
krijimin e antarve t vektorit, s pari e kemi rritur numratorin k=k+1;, e pastaj e kemi caktuar
antartin: B[k]=A[i][j]; kshtu q t fillojm prej indeksit t par: k=0; dhe
B[0]=A[0][0];.
Nse, para unazs, numratorin e fillojm prej, k=0; ather, n unaz, s pari e japim
urdhrin: B[k]=A[i][j]; e pastaj, e rrisim numratorin: k=k+1;
k=-1; k=0;
for (i=0;i<m;i++) for (i=0;i<m;i++)
for (j=0;j<n;j++) for (j=0;j<n;j++)
{ {
k=k+1; B[k]=A[i][j];
B[k]=A[i][j]; k=k+1;
} }
Kjo sht me rndsi, sepse kur t shtypen pastaj antart e vektorit, me pjesn:
//Shtypja e vektorit
for (i=0;i<=k;i++)
{
cout.width(3);
cout << "B[" << i <<"]="<<B[i]<<"\n";
}
duhet pas parasysh, se ku ka mbetur vlera e fundit e numratorit k, prej unazave paraprake pr i dhe
pr j, q ishin pr krijim t antarve t vektorit. Kur fillohet prej k=-1, ather vlera e fundit e
indeksit t vektorit, do t jet pikrisht k, kshtu q kur t shtypet vektori, unaza shkon deri n k, pra
duke e prfshir edhe vlern e k-s, i<=k: for (i=0;i<=k;i++).
Mirpo, n rastin kur fillon numratori prej k=0, ather duke e rritur vlern e numratorit k, pr
secilin antar t ardhshm t matrics, n fund numratori rritet edhe nj her, pas krijimit t antarit
t fundit t vektorit. Kshtu, kur t shtypet me unazn vijuese vektori, pr t shtypur numrin e sakt
t antarve t vektorit, unaza shkon si:
75
Lavdim Gashi Ushtrime n C++
for (i=0;i<k;i++)
pra, i<k; pa e prfshir edhe vlern e fundit, k, sepse ajo sht pr nj m e madh se indeksi i fundit
i vektorit t formuar. Me shembuj konkret, do t shihen m mir pasojat e ksaj
zgjedhjeje.
Shembull:
Fillimi
i 1,m
m, n, a ij ,
j 1,n
k=0
i=1
j=1
Jo
aij < 0
Po
k=k+1
zk=aij
j=j+1
Po
j n
Jo
i=i+1
Po
i m
Jo
(zi,i=1,k)
Fundi
76
Lavdim Gashi Ushtrime n C++
//Krijimi i vektorit
k=-1;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (A[i][j]<0)
{
k=k+1;
B[k]=A[i][j];
}
cout << "B=[";
//Shtypja e vektorit
for (i=0;i<=k;i++)
{
cout.width(3);
cout << B[i];
}
cout << " ]\n";
return 0;
}
77
Lavdim Gashi Ushtrime n C++
Fillimi
i 1,m
m, n, a ,
ij j 1, n
x=0
y=0
i=1
j=1
Po Jo
aij < 0
x=x+1 y=y+1
fx=aij gy=aij
j=j+1
Po
j n
Jo
i=i+1
Po
i m
Jo
(fi,i=1,x)
(gi,i=1,y)
Fundi
78
Lavdim Gashi Ushtrime n C++
x=x+1;
F[x]=A[i][j];
}
else //krijimi i vektorit pozitiv
{
y=y+1;
G[y]=A[i][j];
}
for (i=0;i<=y;i++)
{
cout.width(3);
cout << G[i];
}
cout << " ]\n";
return 0;
}
79
Lavdim Gashi Ushtrime n C++
Funksionet
s=x+y
ku jan:
tipi - tipi i rezultatit t funksionit.
emri - emri i funksionit.
tipi1,... tipin - tipet e parametrave formal.
f1, f2, ..., fn - parametrat formal.
urhdri/at - urhdri/at q ekezekutohen brenda funksionit r -
rezultati t cilin e kthen funksioni.
80
Lavdim Gashi Ushtrime n C++
a b
a,b r=x+y
s=Shuma(a,b) return r
s (a+b)
Fundi
// Programi Funksioni1
#include <iostream>
using namespace std;
double Shuma(int x,int y); //Prototipi i funksionit
int main()
{
double s;
int a=7,b=3;
s=Shuma(a,b); /*Thirrja e funksionit
- percjellja e vlerave aktuale*/
cout << "Shuma s="
<< s
<< "\n";
return 0;
}
// Nnprogrami Shuma
double Shuma(int x,int y) //Deklarimi i funksionit
{
double r; //variablat e brendshme te funksionit
r=x+y; //urdhrat e funsionit
return r; //kthimi i rezultatit t funksionit
}
81
Lavdim Gashi Ushtrime n C++
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
// Programi funksioni_inline
#include <iostream>
using namespace std;
inline double prodhimi(int a,int b)
{
double y;
y=a*b;
return y;
}
int main()
{
double p;
p=prodhimi(5,4);
cout << "Prodhimi sht p="
<< p
<< "\n";
return 0;
}
Fillimi prodhimi(a,b)
a,b y=a*b
p=prodhimi(5,4)
return y
Fundi
82
Lavdim Gashi Ushtrime n C++
Shembuj funksionesh
mn 1 0
Shuma(a,b,c,d)
Fillimi S=0
m,n i=a
s=ShumaVargut(m,n,1,0) S=S+(c*i+d)
s i=i+1
Fundi Po
i b
return S
// Programi Funksion1
#include <iostream>
using namespace std;
83
Lavdim Gashi Ushtrime n C++
return 0;
}
double ShumaVargut(int a,int b, int c, int d)
{
int i,j;
double S;
S=0;
for (i=a;i<=b;i++)
{
S=S+(c*i+d);
}
return S;
}
**
Te llogaritet:
S = n
(3* i 2) (Tani, shihet se do te kemi: a=2, b=n, c=3, d=2)
i 2
// Programi Funksion2
#include <iostream>
using namespace std;
return 0;
}
double ShumaVargut(int a,int b, int c, int d)
{
int i,j;
double S;
S=0;
for (i=a;i<=b;i++)
{
S=S+(c*i+d);
}
return S;
}
84
Lavdim Gashi Ushtrime n C++
P = b
(c * i d )
i a
Shembull:
P = n
(i 1) (N kete rast do te kemi: a=m, b=n, c=1, d=1)
i m
Fillimi ProdVarg(a,b,c,d)
m,n P=1
Prodhimi=ProdVarg(m,n,1,1) i=a
Prodhimi P=P*(c*i+d)
Fundi i=i+1
Po i b
return P
// Programi Funksion3
#include <iostream>
using namespace std;
return 0;
}
85
Lavdim Gashi Ushtrime n C++
Shembull:
P = n
(2i 4) (N kete rast do te kemi: a=m, b=n, c=2, d=4)
i m
// Programi Funksion3
#include <iostream>
using namespace std;
return 0;
}
86
Lavdim Gashi Ushtrime n C++
T llogaritet:
n n 2 n
Y =3 (3i 2) + (2 * i 1 ) + 4 ( i 3)
i 1 i 2 i 1
Fillimi
m,n
Y=Shuma(1,n,3,2)+Shuma(2,n+2,2,1)+Prodhimi(1,n,1,3)
Fundi
Shuma(a,b,c,d) Prodhimi(a,b,c,d)
S=0 P=1
i=a i=a
S=S+(c*i+d) P=P*(c*i+d)
i=i+1 i=i+1
Po Po
i b i b
return S return P
// Programi Funksion5
#include <iostream>
using namespace std;
Y=3*Shuma(1,n,3,2)+Shuma(2,n+2,2,1)+Prodhimi(1,n,1,3);
return 0;
}
double Shuma(int a,int b, int c, int d)
{
int i;
87
Lavdim Gashi Ushtrime n C++
double S;
S=0;
for (i=a;i<=b;i++)
{
S=S+(c*i+d);
}
return S;
}
double Prodhimi(int a,int b, int c, int d)
{
int i;
double P;
P=1;
for (i=a;i<=b;i++)
{
P=P*(c*i+d);
}
return P;
}
Fillimi
m,n
S1=Shuma(1,n,3,2)
S2=Shuma(2,n+2,2,1)
P1=Prodhimi(1,n,1,3)
Y=S1+S2+P1
Fundi
Shuma(a,b,c,d) Prodhimi(a,b,c,d)
S=0 P=1
i=a i=a
S=S+(c*i+d) P=P*(c*i+d)
i=i+1 i=i+1
Po Po
i b i b
return S return P
88
Lavdim Gashi Ushtrime n C++
Llogaritja e faktorelit
Fillimi Faktoriel(m)
n F=1
Fakt=Faktoriel(n) i=1
Fakt F=F*i
Fundi i=i+1
Po
i m
return F
// Programi Funksion4
#include <iostream>
using namespace std;
return 0;
}
Pra, shihet se funksionit pr Faktoriel, i nevojitet vetm nj variabl hyrse (kufiri pr llogaritje t
faktorielit).
89
Lavdim Gashi Ushtrime n C++
Shembull:
Fillimi Faktoriel(m)
n F=1
Fakt=Faktoriel(n)+Faktoriel(2*n)-Faktoriel(2*n-1) i=1
Fakt F=F*i
Fundi
i=i+1
Po
i m
return F
// Programi Funksion4
// Fakt = n! + (2n)! - (2n-1)!
#include <iostream>
using namespace std;
Fakt=Faktoriel(n)+Faktoriel(2*n)-Faktoriel(2*n-1);
return 0;
}
90
Lavdim Gashi Ushtrime n C++
Rekurzioni
Rekurzioni, paraqet thirrjen e vet funksionit brenda funksionit, pra thirrjen e vet -vehtes...
// Programi Faktoriel-Rekurzioni
#include <iostream>
using namespace std;
return 0;
}
return 0;
}
91
Lavdim Gashi Ushtrime n C++
// Programi FunksioniVektori1
#include <iostream>
using namespace std;
void FormoVektorin(int X[],int n);
int main()
{
const int m=5;
int i,A[m];
FormoVektorin(A,m);
cout << "Vektori i formuar\n"; for
(i=0;i<m;i++)
cout << A[i]
<< " ";
cout << "\n";
return 0;
}
void FormoVektorin(int X[],int n)
{
int i;
for (i=0;i<n;i++)
X[i]=2*i;
return;
}
// Programi FunksionVektor2
#include <iostream>
using namespace std;
int ShumaAntVektorit(int X[],int n); int
main()
{
const int m=5;
int Shuma;
int A[m]={1,2,3,4,5};
Shuma=ShumaAntVektorit(A,m);
cout << "Shuma e anetareve te vektorit: "
<< Shuma
<< "\n";
return 0;
}
92
Lavdim Gashi Ushtrime n C++
SortoVektorin(A,m);
ShtypeVektorin(A,m);
return 0;
}
93
Lavdim Gashi Ushtrime n C++
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);
return 0;
}
94
Lavdim Gashi Ushtrime n C++
Xmin=X[0];
for (i=1;i<n;i++)
{
if (X[i]<Xmin)
Xmin=X[i];
}
return Xmin;
}
// 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];
// Programi FunksionMatrica2
#include <iostream>
using namespace std;
const int n=3;
double ShumaAntMatrices(int X[][n],int m);
95
Lavdim Gashi Ushtrime n C++
int main()
{
const int m=2, n=3;
double Shuma;
int A[m][n]={ {1,2,3},
{4,5,6},
};
Shuma=ShumaAntMatrices(A,m);
cout << "Shuma e anetareve te matrices S="
<< Shuma
<< "\n";
return 0;
}
double ShumaAntMatrices(int X[][n],int m)
{
int i,j;
double s;
s=0;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
s=s+X[i][j];
}
return s;
}
// Programi FunksionMatrica2
#include <iostream>
using namespace std;
const int n=3;
double ShumaAntPozMat(int X[][n],int m); int
main()
{
const int n=3;
int i,j,m;
int X[10][n];
cout<< "Sa rreshta do t'i kete matrica: "; cin
>> m;
double Shuma;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
{
cout << "X[" << i+1 << "][" << j+1 << "]="; cin >>
X[i][j];
}
}
Shuma=ShumaAntPozMat(X,m);
cout << "Shuma e anetareve pozitiv te matrices S="
<< Shuma
<< "\n";
return 0;
}
96
Lavdim Gashi Ushtrime n C++
97
Lavdim Gashi Ushtrime n C++
Pastaj, n ndonj program t C++, mund ta thrrasim pr ekzekutim fajllin Adresa.h, sa her q
t na duhet shtypja e adress:
//Programi kryesor
#include <iostream>
using namespace std;
int main()
{
cout<< Jungjatjeta \n\n;
#include Adresa.h //Thirrja e heder fajllit
return 0;
}
98
Lavdim Gashi Ushtrime n C++
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.
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;
}
Nse fajlli i funksionit q thirret n programin kryesor nuk ndodhet n t njjtin folder me
programin kryesor, ather kur t prfshihet n program me direktivn #include, duhet t
shkruhet shtegu i plot i fajllit, si p.sh., nse funksioni ndodhet n shtegun:
C:\Shembuj\Funksionet\FormoVektorin.h, ather do t duhej t shkruhet:
#include "C:\Shembuj\Funksionet\FormoVektorin.h"
//prfshije fajllin FormoVektorin.h.
Emri i fajllit mund t jepet sipas dshirs, nuk sht e thn t ket emrin njsoj si vet
funksioni.
99
Lavdim Gashi Ushtrime n C++
Shembull:
return 0;
}
100
Lavdim Gashi Ushtrime n C++
Mund t prfshihen edhe nga disa heder fajlla n nj program. Thirrja e heder fajllit mund
t behet edhe n rrjedh e sipr t programit.
Shembull:
int main()
{
Shtype(); //Funksioni prej Shtype1.h
#include "Shtype2.h" //thirrja e Shtype2.h
return 0;
}
//Fajlli: Shtype1.h
int i,j;
void Shtype()
{
for (i=0;i<10;i++)
cout<<"Kosova\n";
for (j=0;j<5;j++)
cout<<"Prishtina\n";
return;
}
//Fajlli: Shtype2.h
cout << "Jungjatjeta\n";
cout << "Mire se erdhet\n";
Rezultati n dalje:
101
Lavdim Gashi Ushtrime n C++
Direktiva #define
Shembull:
#include <iostream>
using namespace std;
#define Emri "Lavdim Gashi"
int main()
{
cout<< Emri << endl;
return 0;
}
#include <iostream>
using namespace std;
#define MINIMUMI 1
#define MAKSIMUMI 10
#define SHUMA X1+X2
#define Katrori(a) (a*a)
int main()
{
int i,X1,X2,a;
for (i=MINIMUMI;i<=MAKSIMUMI;i++)
cout << i << endl;
return 0;
}
102
Lavdim Gashi Ushtrime n C++
Me direktivn #define, mund t bhet edhe definimi i urdhrave t C++, me fjal t gjuhs
shqipe, si p.sh:. pr cout - shtyp, pr cin - lexo, pr endl - rreshtiri;
#include <iostream>
using namespace std;
int main()
{
int i,a,b;
for (i=1;i<=10;i++)
shtyp << i << rreshtiri;
return 0;
}
103
Lavdim Gashi Ushtrime n C++
#include <cstdlib>
#include <iostream>
int main()
{
int NumriiRastit = rand();
cout << NumriiRastit << endl;
}
#include <cstdlib>
#include <iostream>
int main()
{
int NumriiRastit;
for(int i=0; i<10; i++){
NumriiRastit = rand();
cout << NumriiRastit << endl;
}
}
104
Lavdim Gashi Ushtrime n C++
Vlera RAND_MAX nuk sht e specifikuar me standardin e C++, por mund t supozojm se
RAND_MAX sht s paku: 32767. Pr t gjetur vlern e sakt pr RAND_MAX n
kompjuterin tuaj, ekzekutoni kodin vijues:
#include <cstdlib>
#include <iostream>
int main()
{
cout << "Vlera e RAND_MAX: " << RAND_MAX << endl;
}
#include <cstdlib>
#include <iostream>
int main()
{
int fillimi = 5;
srand(fillimi);
int NumriiRastit;
for(int i=0; i<10; i++)
{
105
Lavdim Gashi Ushtrime n C++
NumriiRastit = rand();
cout << NumriiRastit << endl;
}
}
#include <cstdlib>
#include <ctime>
#include <iostream>
int main()
{
srand(static_cast<unsigned>(time(0)));
int NumriiRastit;
for(int i=0; i<10; i++){
NumriiRastit = rand();
cout << NumriiRastit << endl;
}
}
106
Lavdim Gashi Ushtrime n C++
Pra, kemi thirrur edhe header-in <ctime> pr funksionin time(). Vlera e kthyer nga
funksioni time() llogaritet prej numrit pa shenj unsigned duke prdorur operatorin
static_cast.
NumriiRastit = (rand()%10);
NumriiRastit = 20+(rand()%10);
#include <cstdlib>
#include <ctime>
#include <iostream>
int main()
{
srand(static_cast<unsigned>(time(0)));
int NumriiRastit;
for(int i=0; i<10; i++){
NumriiRastit = 20 + int(10.0 * rand()/(RAND_MAX+1.0)); cout
<< NumriiRastit << endl;
}
}
107
Lavdim Gashi Ushtrime n C++
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>
int main()
{
srand(static_cast<unsigned>(time(0)));
108
Lavdim Gashi Ushtrime n C++
int numri_i_rastit;
cout<<"Nr. - Vlera \n";
cout<<"-------------\n";
for(int i=0; i < 10; i++)
{
numri_i_rastit = rangu_i_rastit(1,10);
cout << i <<" - " << numri_i_rastit << endl;
}
}
rangu_i_rastit(1,6);
109
Lavdim Gashi Ushtrime n C++
Llogaritjet kohore
Time
Time sht tip i variabls i aft pr prezentim t kohs dhe prkrah operacionet
aritmetike. Ky tip i variabls kthehet nga ana e funksionit time( ) dhe prdoret si parametr nga
disa funksione t tjera nga heder fajlli: <ctime>.
Kjo sht nj vler e cila n prgjithsi tregon numrin e sekondave t kaluar q nga ora: 00:00 e
dats 1 Janar 1970 UTC (Universal Time). Kjo sht marr pr arsye historike, pasi q i korrespondon
vuls kohore t UNIX-it (Unix timestamp), por sht e prhapur n librarit e C -
s, pr t gjitha platformat.
N header fajllin <ctime> kemi funksionet: clock, time, difftime etj.
Programi i ors
int main ()
{
int n;
cout<<"Filloi numrimi...\n";
for (n=10; n>0; n--)
{
cout<<n<<endl;
prit (1); //thirrja e funksionit prit, per vonese 1-sekond
}
cout<<"FILLO!!!\n";
return 0;
}
110
Lavdim Gashi Ushtrime n C++
Shembull:
/* Shembull - time */
#include <iostream>
#include <ctime>
using namespace std;
int main ()
{
time_t koha; //tipi time_t, sht i definuar ne <ctime>
time ( &koha );
cout<< "Koha lokale aktuale:\n\n";
cout<< ctime (&koha) <<"\n";
return 0;
}
Diferenca e kohs:
Pr t llogaritur diferencn kohore, gjegjsisht kohn e kaluar prej nj ngjarjeje deri te nj tjetr,
mund t prdoret funksioni difftime( ), i cili si parametra i ka dy momente kohore, pr t cilat llogarit
distancn kohore:
/* Shembull - difftime */
#include <iostream>
#include <ctime>
using namespace std;
111
Lavdim Gashi Ushtrime n C++
int main ()
{
time_t fillimi,fundi;
char VleraHyrese [25];
double diferenca;
time (&fillimi);
cout<<"Ju lutem, jepni emrin tuaj: ";
cin>>VleraHyrese;
time (&fundi);
diferenca = difftime (fundi,fillimi);
cout<<"\nTungjatjeta z/znj. "<<VleraHyrese<<"\n";
cout<<"Ju nevojiten "<<diferenca<<" sec. per shtypjen e emrit \n\n";
return 0;
}
int main()
{
int TikaTeKaluar;
double MilisekondaTeKaluar, SekondaTeKaluar, MinutaTeKaluar; char
VleraHyrese [100];
MilisekondaTeKaluar = TikaTeKaluar/1000;
//milisekonda prej Fillimi deri te Fundi
SekondaTeKaluar = MilisekondaTeKaluar/1000;
//seconda prej Fillimi deri te Fundi
MinutaTeKaluar = SekondaTeKaluar/60;
112
Lavdim Gashi Ushtrime n C++
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.
Black =0 - e zez
Blue =1 - e kaltr
Green =2 - e gjlebr
Cyan =3 - cian
Red =4 - e kuqe
Magenta =5 - magjenta
Brown =6 - kafe
LightGray =7 - hiri, e qelt
DarkGray =8 - hiri e mbyllt
LightBlue =9 - e kaltr e qelt
LightGreen = 10 - e gjelbr e qelt
LightCyan = 11 - cyan e qelt
LightRed = 12 - e kuqe e qelt
LightMagenta = 13 - magjenta e qelt
Yellow = 14 - e verdh
White = 15 - e bardh
113
Lavdim Gashi Ushtrime n C++
int main()
{
int i;
for (i=0;i<=15;i++)
{
caktongjyren (i);
cout<< "i= "<<i<< " - Jungjatjeta"<<endl;
}
cout<<"\n";
return 0;
}
Me #include duhet ta prfshini header fajllin <windows.h> dhe t definoni funksionin e dhn
me handler-at prkats. Pastaj, para tekstit t cilin dshironi ta shtypni, e thirrni
funksionin pr ngjyrn e tekstit. Duhet pasur parasysh, q pr t filluar shtypjen me ngjyr t re, shtypja
paraprake duhet t prfundohet m zbrazje t buffer -it t tekstit, duke prdorur urdhrin endl ose
flush, pas shtypjes me cout, si p.sh.:
cout<<Jungjatjeta<<endl;
ose
cout<<Jungjatjeta\n<<flush;
114
Lavdim Gashi Ushtrime n C++
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <windows.h>
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
115
Lavdim Gashi Ushtrime n C++
116
Lavdim Gashi Ushtrime n C++
Shtojca B - Pointert
Pointert jan variabla t cilat mbajn adresat n C dhe n C++. Ata ofrojn fuqi dhe
pajisje pr programerin q t ju qaset dhe t manipulojn t dhnat n nj mnyr t ndryshme q
nuk ofrohet n disa gjuh tjera programuese. Ata jan t dobishm pr prcjelljen e
parametrave n funksione, n mnyr q t lejojn funksionin q t ndryshoj dhe t kthej vlerat n
programin thirrs. Kur prdoren n mnyr t gabuar, ata shpesh jan burim i
gabimeve n program dhe frustrimeve pr programert.
Kur programi ekzekutohet, t gjitha variablat ruhen n memorie, secila n ndonj lokacion apo
adres t veant. N mnyr tipike, variabla dhe adresa e saj e memories prmbajn vlerat e t
dhnave. P.sh., kur deklarohet:
int numri = 5;
vlera 5 ruhet n memorje dhe mund ti qasemi prmes variabls numri. Pointeri sht lloj
special i variabls, q e ruan adresn e memories e jo vlern e t dhnave. Njsoj si ndryshohet vlera
kur proret variabla normale, vlera e adress s ruajtur n pointer ndryshohet kur
manipulohet me variabln pointer.
Zakonisht, adresa e ruajtur n pointer sht adresa e ndonj variable tjetr.
int *ptr;
ptr = &numri // Ruan adresn e varibals numri n ptr.
// Operatori unar & (address of - adresa e)
// kthen adresn e variabls.
Pr t marr vlern e cila sht e ruajtur n lokacionin e memories t pointerit duhet t bhet
dereferencimi i pointerit. Dereferencimi bhet prme operatorit unar * (pointer to -
treguesi n, aty ku tregon pointeri).
int totali;
totali = *ptr;
// Vlera n adresn e ruajtur n ptr i ndahet variabls totali.
Pasi paska mundsi ti referohemi adress, ather ne mund ta paraqesim at n dalje (ta
shtypim n ekran), si n vijim:
117
Lavdim Gashi Ushtrime n C++
#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
cout << &numriIm << endl;
return 0;
}
Kjo vler paraqet adresn e memories n t ciln sht ruajtur vlera 25 n formatin
heksadecimal (Kjo vler ndryshon varsisht prej kompjuterit t prdorur, por formati si adres sht
gjithmon i ktill).
Operatorin e adress mund ta prdorim edhe pr tipet tjera t variablave. P.sh., provoni t
ekzekutoni programin vijues:
#include <iostream>
using namespace std;
int main()
{
int numriIm = 37;
int numri2 = 42;
double numriMePresjeDhjetore = 1.234; bool
sakteOsePasakte = true;
cout << " &numriIm: " << &numriIm << endl;
cout << " &numri2: " << &numri2<< endl;
cout << " &numriMePresjeDhjetore: " << &numriMePresjeDhjetore << endl;
cout << " &sakteOsePasakte: " << &sakteOsePasakte << endl; return
0;
}
Pra, si mund t shihet, secila variabl ka adresn e vet dhe z hapsirn e vet n
memorie.
118
Lavdim Gashi Ushtrime n C++
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:
#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int* PointeriIm = & numriIm;
cout << PointeriIm << endl;
return 0;
}
Ksaj radhe, n vend se t shtypim drejtprdrejt adresn e variabls numrIm, ne e kemi ruajtur
at n pointerin PointeriIm dhe pastaj e kemi shtypur vlern e tij. Me rastin e
ekzekutimit fitohet rezultati:
119
Lavdim Gashi Ushtrime n C++
(Vrejtje: mos u brengosni nse vlera q ju e fitoni sht tjetr, pasi q kjo mund t jet e
ndryshme, sa her q t ekzekutohet programi ose mund t jet e njjta vler, pas disa
ekzekutimeve. Kjo gj sht e varur prej platforms (kompjuterit) dhe cilado mnyr e
paraqitjes sht normale).
#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int *PointeriIm = & numriIm;
cout << "Adresa: " << &numriIm << endl;
cout << "Pointeri: " << PointeriIm << endl; return
0;
}
Pra, adresn e kemi shtypur drejtprdrejt dhe prmes pointerit. T dy vlerat duhet t jen
identike.
Pr kt program themi se variabla PointeriIm tregon (pointon) n variabln numriIm. Kjo
sht vetm nj mnyr e prshtatshme e shprehjes s faktit q pointeri mban (ruan) adresn e
variabls numriIm.
Tipi i pointerit PointeriIm sht int. Pra, nse kemi dy deklarime si n vijim, duhet t shihet
dallimi mes deklarimit t variabls s tipit integer dhe deklarimit t treguesit (pointerit) n variabln e
tipit integer:
#include <iostream>
using namespace std;
int main()
{
double numriReal = 1.234;
double *Pointeri2 = &numriReal;
120
Lavdim Gashi Ushtrime n C++
Vreni se deklarimi i variabls pointer reflekton faktin se ajo tani tregon (pointon,
shenjon) n variabln e tipit double.
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.
#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;
}
121
Lavdim Gashi Ushtrime n C++
#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;
}
me t cilin n dalje shtypet variabla n t ciln tregon pointeri Pointeri2, q n kt rast sht vlera
1.234.
Me pak ndryshime, n vijim kemi:
#include <iostream>
using namespace std;
int main()
{
double numriReal = 1.234;
double *Pointeri2 = &numriReal;
cout << "Adresa: " << &numriReal << endl;
cout << "Pointeri: " << Pointeri2 << endl;
cout << "Vlera ku tregon Pointeri: " << *Pointeri2 << endl; return
0;
}
122
Lavdim Gashi Ushtrime n C++
#include <iostream>
using namespace std;
int main()
{
int numriIm = 25;
int* PointeriIm = &numriIm;
cout << numriIm << endl;
*PointeriIm = 46; //aty ku tregon pointeri=46
cout << numriIm << endl;
}
Sikur n rastet e mparme, fillojm me inicializimin e variabls numriIm me vlern 25, pastaj
inicializojm pointerin PointeriIm me adresn e variabls numriIm. N rreshtin vijues, e shtypim
vlern e variabls numriIm, q n dalje jep velrn 25. Pastaj, rreshti/urdhri:
*myPointer = 46;
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.
123
Lavdim Gashi Ushtrime n C++
#include <iostream>
using namespace std;
int main()
{
double numriReal = 1.234;
double *Pointeri2 = &numriReal; cout
<< numriReal << endl;
*Pointeri2 = 9.876;
cout << numriReal << endl;
return 0;
}
Urdhri:
*Pointeri2 = 9.876;
ia ndan vlern 9.876 variabls n t ciln tregon pointeri, q n kt rast sht
numriReal.
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;
}
124
Lavdim Gashi Ushtrime n C++
Tani pointeri tregon n variabln numri2, kshtu q kur ta shtypim prsri vlern n t ciln
tregon ai, do t shtypet velra 88.
Prdorimi i pointerve si parametra t funksioneve
Kur funksionit ia prcjellim ndonj variabl, krijohet nj kopje e variabls dhe prdoret
prbrenda funksionit. Vlera origjinale nuk ndikohet nga ndryshimet q i bhen kopjes prbrenda
funksionit. P.sh., le t marrim rastin vijues:
#include <iostream>
using namespace std;
void shtypeDyfishin(int vleraLokale)
{
vleraLokale = vleraLokale * 2;
cout << vleraLokale << endl;
}
int main()
{
int Vlera1 = 4;
cout << Vlera1 << endl;
shtypeDyfishin(Vlera1);
cout << Vlera1 << endl;
return 0;
}
Pra, n fillim inicializojm variabln Vlera1 me vlern 4 dhe e shtypim vlern e saj.
Pastaj, e thrrasim funksionin shtypeDyfishin dhe ia prcjellim variabln Vlera1 si parametr, me
vlern 4. N funksion, krijohet kopja lokale e variabls Vlera1 me emrin vleraLokale dhe ajo
shumzohet me 2. Pastaj vlera e re e variabls vleraLokale shtypet n ekran.
Variabla Vlera1 mbetet e pandikuar nga ndryshimet e bra n kopjen lokale prbrenda
funksionet, kshtu q kur t shtypet pr her t dyt variabla Vlera1, vlera e saj akoma sht 4.
Le t shohim n vazhdim, ka do t ndodh, nse funksionit ia prcjellim pointerin q
tregon n variabl, n vend t variabls:
#include <iostream>
using namespace std;
void shtypeDyfishin(int *PointeriIm)
{
*PointeriIm = *PointeriIm * 2;
cout << *PointeriIm << endl;
}
int main()
{
int Vlera1 = 4;
cout << Vlera1 << endl;
shtypeDyfishin(&Vlera1);
cout << Vlera1 << endl;
return 0;
}
125
Lavdim Gashi Ushtrime n C++
Ksaj radh funsioni prej treguesin (pointerin) n n variabl t tipit integer (n Vlera1) q ti
prcillet si parametr.
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.
Kur kthehet vlera nga funksioni, Vlera1 mban vlern e re 8. Prandaj, rezultati i ktij
programi do t jet:
shihet dallimi i ndikimit t funksionit n parametrat e prcjellur si vler e variabls ndaj rastit
t prcjelljes s adress s variabls.
Pra, kur e prcjellim variabln si parametr t funksionit, krijohet nj kopje e variabls e cila
prdoret prej funksionit dhe fardo ndryshimesh t bra e lne variabln origjinale (jasht funksionit)
t paprekur (t pandikuar). Nse funksionit ia prcjellim pointerin, mund ta
ndryshojm edhe variabln origjinale prmes pointerit (i cili tregon n at variabl).
126
Lavdim Gashi Ushtrime n C++
Dukshmria e variablave
#include <iostream>
using namespace std;
int main()
{
int Vlera1; Variablat Lokale
double Vlera2;
return 0;
}
Pra, dukshmria e variablave sht e kufizuar prbrenda nivelit t bllokut n t cilin jan
deklaruar. Sidooft, kemi mundsi t deklarojm varibalat globale t cilat jan t dukshme n
cilndo pjes t kodit, edhe prbrenda edhe jasht funksioneve. Pr t deklaruar variabln
globale, ajo thjesht duhet t deklarohet jasht cilitdo funksion ose bllok, drejtprdrejt n trupin
e programit.
127
Lavdim Gashi Ushtrime n C++
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.
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
FajlliIm.close();
return 0;
}
128
Lavdim Gashi Ushtrime n C++
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);
ofstream myFile("EmriiFajllit",ios::app);
Pr t hapur fajllin pr hyrje (lexom prej tij), prdoret objekti i klass ifstream:
ifstream inFile("EmriiFajllit ");
Shembull:
Shkruarja e programit q krkon prej shfrytzuesit emrin e fajllit dhe pastaj shkruan n at
fajll. Pastaj, hapet fajlli n modin e shtimit ashtu q prmbajtja ekzistuese t mos humbet nse
shfrytzuesi specifikon ndonj fajll ekzistues.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
129
Lavdim Gashi Ushtrime n C++
string EmriiFajllit;
ofstream oFajlli(EmriiFajllit.c_str(),ios::app);
if (! oFajlli)
{
cout<<"Gabim, me rastin e hapjes se fajllit per dalje "<< endl; return
-1;
}
return 0;
}
130
Lavdim Gashi Ushtrime n C++
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.
Shembull:
Supozojm se duhet t lexohet fajlli dhe t prcaktohet numri i karaktereve alfanumerike, i
zbraztirave dhe i fjalive. Pr t prcaktuar numrin e fjalive do t numrohen pikat (.). nuk do t mirren
parasysh kryerreshtat dhe tab-et.
Ja fajlli hyrs:
Programi:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int zbrazetira = 0;
int numri_i_karaktereve = 0;
int numri_i_fjalive = 0;
char ch;
ifstream inputFajlli("c:/Shembulli1.txt");
if (! inputFajlli)
{
cout << "Gabime, me rastin e hapjes se fajllit" << endl; return
-1;
131
Lavdim Gashi Ushtrime n C++
while (inputFajlli.get(ch))
{
switch (ch) {
case ' ':
zbrazetira++;
break;
case '\n':
case '\t':
break;
case '.':
numri_i_fjalive++;
break;
default:
numri_i_karaktereve++;
break;
}
}
cout << "Kemi " << numri_i_fjalive << " fjali" << endl;
cout << "Kemi " << numri_i_karaktereve << " karaktere" << endl; cout
<< "Kemi " << zbrazetira << " zbrazetira" << endl;
return 0;
}
Rezultati:
Shembull:
Programi q kopjon prmbajtjen e nj fajlli, n nj fajll tjetr. Ky program, i krkon
shfrytzuesit q t jep emrat e fajllave pr hyrje dhe pr dalje dhe pastaj e bn kopjimin.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
char ch;
string inputFajlli;
string outputFajlli;
132
Lavdim Gashi Ushtrime n C++
ofstream oFajlli(outputFajlli.c_str());
ifstream iFajlli(inputFajlli.c_str());
//Verifikimi i gabimit gjate hapjes se fajllit
//eshte anashkaluar per shkurtesi.
while (iFajlli.get(ch))
{
oFajlli.put(ch);
}
return 0;
}
I/O Manipulatort
Deri tani, kemi pranuar formatizimin e nnkuptuar t daljes. C++ definon edhe nj
bashksi manipulatorsh t cilt mund t prdoren pr t ndryshuar gjendjen objekteve t
iostram. Kto kontrollojn mnyrn e formatizimit t t dhnave. Ato jan t definuara n fajllin <ios>
q duhet t prfshihet prmes direktivs include. Zakonisht, nuk sht e nevojshme t
prfshihet n mryr eksplicite, pasi q n mnyr indirekte sht i prfshir prmes librarive
tjera, si <iostream>.
Manipulatort dhe mnyr e veprimit t tyre:
Manipulatori Prdorimi
boolalpha Bn, q variablat booleane t paraqiten si true ose false (tekstualisht).
noboolalhpa (default) Bn, q variablat booleane t paraqiten si 0 ose 1.
dec (default) Specifikon se numrat (integer) paraqiten n bazn 10.
Hex Specifikon se numrat (integer) paraqiten si heksadecimal (n bazn 16).
Oct Specifikon se numrat (integer) paraqiten si oktal (n bazn 8).
Left Teksti n fushn dalse rreshtohet majtas .
Right Teksti n fushn dalse rreshtohet djathtas.
Internal Bn q shenja e numrit t rreshtohet majtas kurse vlera djathtas.
noshobase (default) kyq paraqitjen e prefiksit q tregon bazn e numrit.
showbase Kyq paraqitjen e prefiksit q tregon bazn e numrit.
noshowpoint (default) Paraqet pikn decimale vetm nse ekziston pjesa decimale.
showpoint Paraqet pikn decimale gjithmon.
noshowpos (default) Nuk paraqet shenjn "+" si prefiks para numrave pozitiv.
showpos Paraqet shenjn "+" si prefiks t numrave pozitiv.
Kaprcen hapsirat e bardha (zbraztirat, tab, rreshti i ri) nga ana e operatorit t
skipes (default) hyrjes >>.
133
Lavdim Gashi Ushtrime n C++
hyrjet dhe daljet vijuese t atij objekti. Ka disa manipulator q prdoren pr t modifikuar
ndonj dalje t veant, por nuk modifikojn gjendjen e objektit.
Caktimi i 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;
134
Lavdim Gashi Ushtrime n C++
return 0;
}
135
Lavdim Gashi Ushtrime n C++
Referencat
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:
Referenca nuk sht objekt unik. Ajo sht thjesht nj pseudonim ose nj sinonim pr nj
objekt tjetr. Identifikatori i referencs (emri) mund t prdoret kudo ku mund t prdoret
identifikatori i referuar. do ndryshim i br n referenc do t aplikohet edhe n objektin
origjinal. Gjithashtu, do ndryshim i br n objektin origjinal do t shihet edhe prmes
referencs.
#include <iostream>
using namespace std;
int main()
{
int vlera = 1;
int &rVlera = vlera;
return 0;
}
136
Lavdim Gashi Ushtrime n C++
Referenca duhet t inicializohet kur t krijohet. Nse nuk veprohet kshtu, do t paraqitet
gabim n program.
Referenca nuk mund t ricaktohet. Nse tentoni t ricaktoni referencn, rezultati do t jet nj
caktim i vlers s objektit origjinal t referuar.
Shembull:
#include <iostream>
using namespace std;
int main()
{
Vlera2 = 30;
cout << endl << "Caktojme Vlera2 = 30" << endl;
cout << "Vlera1 eshte " << Vlera1 << endl;
cout << "Vlera2 eshte " << Vlera2 << endl;
cout << "rVlera eshte " << rVlera << endl;
return 0;
}
137
Lavdim Gashi Ushtrime n C++
Ndarja e vlers rVlera = Vlera2; ia ndan vlern e Vlera2 rVlera-s. Pasi q gjithka q veprohet
n referenc aplikohet edhe n objektin e referuar, ather variabls Vlera1 i sht ndar vlera e
Vlera2, 20. nse referenca do t ri-caktohet pr ju referuar variabls Vlera2, ather Vlera1
nuk do t ndryshohej. Pastaj, vlera e Vlera2 sht ndryshuar n 30. Me kt rast sht ndryshuar
vetm Vlera2.
Referencat mund t bhen edhe n objektet e definuara t shfrytzuesit, njsoj si edhe n
variablat e brendshme t C++.
#include <iostream>
using namespace std;
class Katrori
{
public:
Katrori(int brinja): _brinja(brinja) {}; int
MerreBrinjen() {return _brinja;}
void CaktoBrinjen(int brinja) {_brinja = brinja;}
int Syprina() {return _brinja * _brinja;}
private:
int _brinja;
};
int main()
{
Katrori Katror(15);
Katrori &refKatror = Katror;
refKatror.CaktoBrinjen(18);
return 0;
}
138
Lavdim Gashi Ushtrime n C++
Pra, objekti Katror dhe referenca e tij refKatror mund t prdoren n kmbim. Ata jan
sinonime pr njri tjetrin. Gjithashtu, vreni se referenca mirret n objektin Katrori, e jo n klasn
Katrori. Katror sht nj instanc e klass Katrori.
Dobia m e madhe e referencave sht kur ato prdoren n funksionet globale ose metoda t
klasave. N kt rol, ato ofrojn nj mnyr pr kthimin e vlerave t shumfishta prej
funksioneve ose metodave pa prdorimin e pointerve. Referencat n mnyr strikte prdoren si
pseudonime, si n shembujt e mparshm. Ato jan thjesht nj identifikator tjetr (alternativ) pr
objektin e njjt.
139
Lavdim Gashi Ushtrime n C++
Prmbajtja:
140
Lavdim Gashi Ushtrime n C++
141