7/30/2019 GjuheProgramuese Ushtrimet C++
1/140
Avni Rexhepi
Prishtin, 2008
7/30/2019 GjuheProgramuese Ushtrimet C++
2/140
Avni Rexhepi Ushtrime n C++
2
Hyrje n programim
-N kompjuter, t dhnat ruhen dhe prpunohen si vargje t sh ifrave binare: 1 dhe 0, tkoduara n nj kod binar(ang. binary code).
- Programet dhe ProgramimiProgrami paraqet nj list t urdhrave (instruksioneve, komandave) t cilat i tregojn
kompjuterit q t kryej veprime t ndryshme.
- Gjuht Programuese:- Gjuht e ulta programuse (kodi i makins)0, 1- Asemblerimnemonic (ADD, SUB, MOV...)
- Gjuht e larta programuese- Fortran, Basic, Pascal, C++, etj.
- Idea --> prshkrimi --> programi --> testimi --> prdorimi
Interpretert dhe kompajlert.
Interpreteriinterpreton me radh urdhrat e programit, sa her q ekzekutohetprogrami.
Kompajler(ang. compiler)verifikon tr programin (sintaksn e gjuhs) dhe eprkthen kodin burimor n kod objektiv.
Program burimor(ang. source program, source code) - fajll burimor(ang. source file).
Program objekti v(ang. object program, object code) -fajll objektiv (ang. objekt file).Linker--> i lidh pjeset (fajllat) e programit dhe krijon programin ekzekutiv (ang.executable program, exe file) -fajll ekzekutiv (ang. exe file).
Termat themelore q i hasim:
IdentifikatortVariablatDeklarimi
InicializimiKonstantetLiteralet
OperatortKomentet
7/30/2019 GjuheProgramuese Ushtrimet C++
3/140
7/30/2019 GjuheProgramuese Ushtrimet C++
4/140
Avni Rexhepi Ushtrime n C++
4
cinoperatori pr lexim.coutoperatori pr shtypje.return (kthe, kthimi)kthimi i rezultatit t funksionit.}kllapa e madhe e mbullur tregon fundin e programitdo 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 dritarjae rezultateve n dalje do t zhduket menjher pas prfundimit t programit, duke pamundsuar shikimine 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 ntastier.
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 tpavarur, nuk duhet patjetr funksioni main(). Me prjashtim t ktij rasti, programi patjetr duhet ta ketfunksionin main(). Standardi ISO tregon dy mnyrat vijuese t cilat duhet t pranohen nga cilidokompajler 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 pariprmban numrin e argumenteve t linjs komanduese q i prcillen programit nga procesi thirrs (ai qe 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 kjosht 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: return0;). Mirpo kompajlert e vjetr dhe disa kompajler aktual nuk pranojn programet main() q nuk kanurdhrin return, prandaj n shumicn e rasteve ai shkruhet.
Gjja e par q vrehet, sht se main() kthen nj integer (deklarimi: int main()). Vlera e tipitinteger 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 cilatprfaqsojn ndrprerjen (prfundimin) normal dhe EXIT_FAILURE, q prfaqson prfundimin jonormal.
EXIT_SUCCESS dhe EXIT_FAILURE jan t definuara n header-in . Cilado vler tjetr ekthyer, ia kthen procesit thirrs nj vler statusi t definuar prej implementimit.
Gjithashtu, disa kompajler do t pranojn edhe definimin e main(), si: void main(). Megjithat, kjosht thjesht jokorrekte dhe nuk duhet t prdoret.
ka ndodh nse nuk prdoret urdhri return? Nse kllapa mbyllse } e funksionit main() n fundt programit sht e mbyllur pa urdhrin return, efekti sht sikur t jet dhn urdhri return 0, q do tthot se return 0; sht e nnkuptuar, duke treguar ndrprerjen (prfundimin) normal. Kshtu , edheprogrami vijues sht valid, n C++:
#include using namespace std;int main(){cout
7/30/2019 GjuheProgramuese Ushtrimet C++
5/140
Avni Rexhepi Ushtrime n C++
5
Komentet
Komentet, jan tekste pr shfrytzuesit, por q nuk kan ndikim n program. Ato shkruhen sapr t dhn ndonj shpjegim ose prshkrim. Kompajlleri i injoron trsisht.
// Komenti n nj rresht
/*Komenti n disa rreshta, apokomenti n bllok */
//Programi i par#include using namespace std;int main(){
/* Permes operatorit pr shtypje, cout,do t shtypet teksti n ekran */cout a; /leximi prej tastiere
7/30/2019 GjuheProgramuese Ushtrimet C++
6/140
Avni Rexhepi Ushtrime n C++
6
cout > n2 >> n3;
nm=(n1+n2+n3)/3;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
7/140
Avni Rexhepi Ushtrime n C++
7
Edhe n versionin e Visual Studio 6.0 (Visual C++ 6.0), programi mund t shkruhet nformn 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 ashtuq t mund t prdoren n programe:
(a) Duke prdorur direktivn: using namespace std; - Kjo sht metoda m e thjesht, mirpo i bn tgjith identifikatort e namespace std globalisht t disponueshm.
(b) Duke prdorur deklarimin: using std::cout; - Kjo sht metod m e kufizuar dhe duhet tprssritet pr gjithka q dshirojm t kualifikojm pr prdorim n program, kshtu q programi do tduhet t shkruhet si n vijim:
#include using std::cout;using std::endl;using std::cin;int main(){
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
8/140
Avni Rexhepi Ushtrime n C++
8
Konfuzion shkakton edhe shtja e prdorimit t t header-it pr string. Ekzistojn tre header-a prstring: , t cilt jan t stilit t C-s (vargjet e karaktereve t prfunduara me null null-terminated character arrays) dhe prmbajn funksionet pr string si:strcpy(), strcat() and strlen() sidhe 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 cila t e respektojnC++ standardin, gj q do t thot se mund ti kompajloni n cilindo kompajler modern t C++ -it.
Variablat, tipet e tyre
- T dhnat (ang. Data)
Tipi Rangu i vleravemadhsia n
bajta
unsigned short int 0..65535 2short int -32768..32767 2
unsigned longint 0..4294967295 4longint -2147483648..2147483647 4
int - 16 bit -32768..32767 2int - 32 bit -2147483648..2147483647 4
unsigned int - 16bit
0..65535 2
unsigned int - 32bit
0..4294967295 4
float 1.2E-38..3.4E38 4double 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 Stringukrijohet si varg i karaktereve te veanta*/
int x,y;longint dita,e,f3; //Deklarimi i perbashket
double x,h; int g; float a,p; //Deklarimet ne nje rresht
int A[8]; //Vektori
double Z[3][5]; //Matrica
Indekset fillojnme vlern zero
int A[6]; //6 antar - A[0], D[1], ..., D[5].
7/30/2019 GjuheProgramuese Ushtrimet C++
9/140
Avni Rexhepi Ushtrime n C++
9
Deklarimi dhe inicializimi
Nse gjat deklarimit, variabls i ndahet edhe vlera fillestare (inicializuese), atherthuhet 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
constdouble PI=3.1415926;
constint m=5;int A[m]={7,2,4,1,3};
constint 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 ndonjkarakter, duhet ti tregojm kompajlerit se cilin tip t t dhnave dshirojm ta ruajm. Tipi dot ket karakteristikat, si rangu i vlerave t cilat mund t ruhen dhe operacionet t cilat mund tkryhen n variablat e atij tipi.
Tipet themelore
C++ ofron tipet themelore t brendshme (built -in): Boolean, character, integer dhefloating-point (pik e lvizshme). Gjithashtu mundson krjijimin e tipeve t shfrytzuesit duke
prdorur enumeration (grupimin) dhe class (klasa).Pr secilin prej tipeve themelore rangu i vlerave dhe operacioneve q mund t kryhen n
to sht i prcaktuar prej kompajlerit. Secili kompajler duhet t ofroj operacionet e njjta prtipin 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 ASCIIkarakteret, por jo gjithmon). P.sh.,
char menyja = 'q';
char vleraHyrese = '3';char SimboliPerqind = '%';
7/30/2019 GjuheProgramuese Ushtrimet C++
10/140
Avni Rexhepi Ushtrime n C++
10
Vreni se si karakteri futet n thonjza t njfishta (apostrofe). Variablave t tipit karaktermund t ju ndahen edhe vlerat numerike:
char chNumri = 26;
Mund t deklarohen karakteret me shenj (signed) ose pa shenj (unsigned), ku karakteretme shenj mund t ken vler pozitive, negative ose zero, kurse karakteret pa shenj mund tken 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 tkarakterit 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 tipitchar sht gjithmon nj bajt, q sht e garantuar t jet s paku 8 bita. C++ gjithashtu ofronedhe 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 (meshenj), 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 thjeshtmund t prmbajn cilat do vlera, pasi q gjithmon e kan shenjn. Numrat integer mund tdeklarohen 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 thjeshtint ka rang m t gjer se short int, kurse long int m t gjat se ai i thjesht, edhe pse nukndodh kshtu gjithmon.
Ajo q sht e sigurt, sht se tipi i thjesht do t jet s paku i madh sa short int ose mi 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;
7/30/2019 GjuheProgramuese Ushtrimet C++
11/140
Avni Rexhepi Ushtrime n C++
11
Floating-Point
Tipet e numrave me pik t lvizshme mund t prmbajn numra decimal, si p.sh: 1.23, -.087. Ekzistojn tri madhsi: float (single -precisionme precizitet t njfisht), double (doubleprecision me precizitet t dyfisht) dhe long double (extended -precisionprecizitet izgjeruar). 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 ruajvlera m t mdha se double (edhe pse kjo nuk sht gjithmon e vrtet). Sidoqoft, sht esigurt se double do t jet s paku i madh sa float por mund t jet m i madh, dhe long doubledo 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 (mebaz zero), kshtu q, pr shembullin paraprak:
eHene == 0, eMarte == 1, etj.
Shfrytezuesi mund t prcaktoj vlera t tjera pr ndonjrin antar t grupit, dhe vleratvijuese 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 tmodeluar objektet dhe veprimet nga jeta e prditshme . Pra, klasa sht nj konstruksionsoftverik q mund t prdoret pr simuluar ndonj objekt t jets reale. P.sh., modeli softverik inj veture, klasa vetura, mund t prmbaj t dhna pr tipin e veturs, si: tipi, ngjyra,harxhimi etj., dhe aftsit (aftsi vepruese, operative) si prshpejtimi, ngadalsimi,frenimi, etj. Klasa sht tip i definuar i shfrytzuesit q i ka t dhnat, antart (members) dhe
aftsit (metodat). Objekti sht nj instanc (shembull, rast) e klass. P.sh., pr t krijuarklasn katrori e cila ka t dhnat (vlerat) pr madhsi dhe ofron operacionet vizato dhendryshomadhsin:
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 semestrdhe nuk shtprfshir n kt tekst.
7/30/2019 GjuheProgramuese Ushtrimet C++
12/140
Avni Rexhepi Ushtrime n C++
12
Identifikatort dhe fjalt e rezervuara t C++
N C++ ne i krijojm emrat pr entitetet q i krijojm: variablat, funksionet dhe tipet edeklaruara. 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 ishkronjave 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 sidentifikatorit.
Identifikatort q fillojn me nnviz t pasuar me shkronj t madhe jant rezervuarnga implementimi, ashtu si jan edhe ata me dy nnviza, kshtu q pr t evituar problemetduhet t evitoni prdorimin e tyre. Gjithashtu, nuk mund t prdoren si identifikator fjalt erezervuara 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. Kjodo t thot, q emrat:
Numri dhe numri ose ditaejaves dhe ditaeJaves dallojne mes veti dhe do ttrajtohen 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 nvend 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 madheReturn, Continue.
- Mundohuni t ruani stilin, si p.sh.:- Shkronja e madhe pr secilenpjes, 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[].
7/30/2019 GjuheProgramuese Ushtrimet C++
13/140
Avni Rexhepi Ushtrime n C++
13
Leximi dhe Shtypja
- cout - Pr shtypje t teksteve n ekran, prdoret operatori cout, i cili sht i definuar nheader fajllin (c out (lexohet si aut), si simbolik q nga C++ shtypet jasht).- cin - Pr marrjen (leximin) e vlerave prej tastiers, prdoret operatori cin , gjithashtu i
definuar n header fajllin (c in (lexohet si in), si simbolik, q C++ merrebrenda).
Pr manipulim me tekstin, C++ prdor buffer-in (baferin, regjistrin pr tekst), i cili zbrazetme urdhrin flush (pastrim, zbrazje), q menjher e drgon prmbajtjen e baferit n dalje .
Kursori kalon n rreshtin e ri me njrn nga format: cout
7/30/2019 GjuheProgramuese Ushtrimet C++
14/140
Avni Rexhepi Ushtrime n C++
14
...setw(8);cout
7/30/2019 GjuheProgramuese Ushtrimet C++
15/140
Avni Rexhepi Ushtrime n C++
15
Escape-sequence characters (karakteret speciale)
\a Alarm\b Backspace\f Form Feed (pr printer)\n New line (CR+LF) (rreshti i ri)\r CR\t Tab\v Vertical Tab\\ \\? ?\ \ \000 Numr oktal\xhh Numr heksadecimal\0 Null zero (zero binare)
\xhh, mund t prdoret pr t shtypur n ekran karakteret t cilat nuk i kemi n tastier, si
p.sh. shkronja dhe , t gjuhs shqipe. ASCII kodi prkats i karakterit, duhet t shkruhetn 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*161+9*160=137).Prandaj, pr ta shtypur n dalje shkronjn , duhet tshkruhet: \x89. P.sh., pwr tw shtypurnw dalje:
Sot sht dit e mir n C++ duhet t shkruhet - Sot \x89sht\x89 dit\x89 e mir\x89
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
16/140
Avni Rexhepi Ushtrime n C++
16
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
17/140
Avni Rexhepi Ushtrime n C++
17
Sistemi numerik
Rezultatet mund t shtypen n sistemet numerike me baz t ndryshme, si decimal (baza10), 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 using namespace std;
int main (){int n;n=100; //vlera decimale 100cout
7/30/2019 GjuheProgramuese Ushtrimet C++
18/140
Avni Rexhepi Ushtrime n C++
18
Leximi i fjalve dhe fjalive
// Programi Fjala1#include
using namespace std;int main(){
char Emri[20], Mbiemri[20];
cout Mbiemri;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
19/140
Avni Rexhepi Ushtrime n C++
19
Leximi i tekstit me gjatsi t caktuar, bhet me urdhrin cin.get (ang. Get marr, merr)
cin.get(a,n) // n numri i karaktereve q lexohen (pranohen)
// Programi lexo6#include using namespace std;int main(){
const m=20;char A[m];cout
7/30/2019 GjuheProgramuese Ushtrimet C++
20/140
Avni Rexhepi Ushtrime n C++
20
Rreshtimi i tekstit
Gjat shtypjes, rezultati mund t rreshtohet djathtas, majtas apo n mes. Pr t brrreshtimin e tekstit prdoren manipulatort: left (majtas), right (djathtas) dhe internal (pr
brenda).
// Rreshtimi#include using namespace std;
int main (){int n;n=-25;cout.width(10); cout
7/30/2019 GjuheProgramuese Ushtrimet C++
21/140
Avni Rexhepi Ushtrime n C++
21
Stringu
C++ ka dy metoda pr paraqitjen e t dhnave tekstuale - stringjeve (variabla string),vargu i karaktereve n stil t C-s dhe klasa string. Vargu i karaktereve sht nivel i ult i
prfaqsimit t t dhnave string, mirpo akoma haset np r kode t ndryshme. Klasa string, ecila sht pjes e libraris standarde t C++ -it, ofron metoda pr manipulim t leht me tdhnat tekstuale (string).
Vargu i karaktereve
Si tregon edhe vet emri, vargu i karaktereve n stil t C -s sht paraqitje e t dhnavestring q prdoret n gjuhn C. N C, kjo sht teknika e vetme pr ruajtjen dhe manipulimin et 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 tashtuquajturin null terminator (prfunduesin null (zero)). sht prgjegjsi e
programerit q t jet i sigurt pr gjatsin e mjaftueshme t vargut. Kompajlimi nuk dot 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 nkonsiderim.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. Sdyti, klasa string nuk ishte pjes e versioneve fillestare t C++ -it. Programert i prdorin t dymnyrat. 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 ekzekutimi n.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 prfshihetn program me direktivn: #include . 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 prdorimitt metodave t klass string. Programeri nuk sht i preokupuar si dhe ku ruhet stringu. Kjosht nj shembull i enkapsulimit. Le t shohim krijimin dhe inicializimin e objekteve string
prmes nj shembull:
7/30/2019 GjuheProgramuese Ushtrimet C++
22/140
Avni Rexhepi Ushtrime n C++
22
#include #include 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
7/30/2019 GjuheProgramuese Ushtrimet C++
23/140
Avni Rexhepi Ushtrime n C++
23
string ka gjithasthu edhe metodat (funksionet pr veprim), empty (zbraze) pr t testuar stringune zbrazt dhe size (madhsia) pr t llogaritur madhsin (gjatsin) e stringut.
Shembull:
#include #include using namespace std;
int main(){
string S1;string S2(" nga ");string S3("Kosova");string S4;
if (S1.empty()){
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
24/140
Avni Rexhepi Ushtrime n C++
24
Rezultati:
Metodat e klass string
Klasa string ka shum metoda pr manipulim t stringjeve, si: shtimi, insertimi, fshirja,krkimi dhe zvendsimi. Disa nda to jan prshkruar n tabe ln vijuese:
Metoda Prdorimi
append(char *pt);append(char *pt, size_t count);append(string &str, size_toffset,size_t count);append(string &str);append(size_t count, char ch);append(InputIterator Start,InputIterator End);
Shton karkteret prej C-stringut, char ose objekteve tjera string.
at(size_t offset);Kthen referencn n karakterin n pozitn e specifikuar. Dallon prejoperatorit t indeksimit [ ], pasi q verifikohen kufinjt.
begin(); Kthen nj iterator n fillim t stringut.
*c_str(); Kthen pointerin n versionin e C -stringut t prmbajtjs s stringut.clear(); Fshtin tr stringun
copy(char *cstring, size_tcount, size_t offset);
Kopjin numrin-count e karaktereve nga C-stringu duke filluar ngazhvendosja-offset.
empty(); Teston a sht stringu i zbrazt.
end(); Kthen iteratorin n pozitn pas fundit t stringut (nj pozit m pas).
erase(iterator first, iteratorlast);erase(iterator it);erase(size_t pos, size_t count);
Fshin karakteret nga pozita e specifikuar.
find(char ch,size_t offset = 0);
find(char *pt,size_t offset = 0);find(string &str,size_t offset =0);
Kthen indeksin e karakterit t par t substringut kur ai gjendet.Prndryshe, kthehet vlera speciale npos.
7/30/2019 GjuheProgramuese Ushtrimet C++
25/140
Avni Rexhepi Ushtrime n C++
25
find_first_not_of();Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit tpar q nuk sht n stringun krkues.
find_first_of();Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit tpar q sht n stringun krkues.
find_last_not_of();Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit t
fundit q nuk sht n stringun krkues.
find_last_of();Seti i njjt i argumenteve sikur find. Gjen indeksin e karakterit tfundit q sht n stringun krkues.
insert(size_t pos, char *ptr);insert(size_t pos, string &str);insert(size_t pos, size_t count,char ch);insert(iterator it, InputIteratorstart, InputIterator end);
Inserton karakteret n pozitn e specifikuar.
push_back(char ch); Inserton karakteret n fund t strignut.
replace(size_t pos, size_tcount, char *pt);replace(size_t pos, size_tcount, string &str);replace(iterator first, iteratorlast, char *pt);replace(iterator first, iteratorlast, string &str);
Zvendson elementet n string me karakteret e specifikuara. Rangumund t specifikohet prmes pozits startuese dhe numrit t elementevepr zvendsim ose duke prdorur iteratort.
size(); Kthen numrin e elementeve n string.
swap(string &str); Shkmben dy stringje.
Kushtet (Degzimet)
Gjat shkruarjes s programeve pr raste t ndryshme, paraqitet nevoja e kushtzimit t
ekzekutimit t urdhrave n baz t ndonj kushti t caktuar. N C++ kemi disa forma tparaqitjes s kushteve: Rasti m i thjesht sht kur pr ndonj kusht t caktuar ekzekutoheturdhri (ose urdhrat), kurse nse nuk plotsohet kushti, nuk ndodh asgj por programivazhdon me urdhrin e ardhshm (vijues), si n vazhdim:
if (kushti) urdhri ;ku:
kushti - kushti pr degzimurdhri urdhri q ekzekutohet nse plotsohet kushti k
Zakonisht, n program kushti shkruhet n rresht t veant:
if (kushti)
urdhri ;
// Programi if1a#include using namespace std;int main(){
int x;cout > x;if (x > 0) cout
7/30/2019 GjuheProgramuese Ushtrimet C++
26/140
Avni Rexhepi Ushtrime n C++
26
Gjat shkruarjes s programeve, prdoren operatort aritmetik dhe operatort relacional:
Operatori n C++ Operacioni Shembull Rezultati
+ Mbledhja 3+2 5- Zbritja 3-2 1* Shumzimi 3*2 6/ Pjestimi 3/2 1.5% Moduli 3%2 1
*Moduli, sht mbetja nga pjestimi i plot (5%2=1; 8%3=2).
Operatori n C++ Domethnia Shembull Rezultati< M i vogl se 2 < 3 true 2 true>= M i madh se,
ose barazi me2 >= 3 false
!= Jobarazi me 2 != 3 true
// Programi if1b#include using namespace std;int main(){
int x;
cout > x;
if (x > 0)cout
7/30/2019 GjuheProgramuese Ushtrimet C++
27/140
Avni Rexhepi Ushtrime n C++
27
// Programi if2#include using namespace std;int main(){
int x;cout > x;
if ((x%2) == 0)cout
7/30/2019 GjuheProgramuese Ushtrimet C++
28/140
Avni Rexhepi Ushtrime n C++
28
// Programi if2a#include using namespace std;int main(){
int x;
cout > x;
if (x > 0)cout
7/30/2019 GjuheProgramuese Ushtrimet C++
29/140
Avni Rexhepi Ushtrime n C++
29
// Programi if3#include using namespace std;int main(){
int x,y,z;
cout > x;
if (x > 0){y=2*x;z=x*x;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
30/140
Avni Rexhepi Ushtrime n C++
30
if (kushti1)if (kushti2)
urdhri1;elseurdhri2;
else
urdhri3;
Pra, urdhri1 ekzekutohet vetem kur plotsohen edhe kushti1 edhe kushti2. urdhri2ekzekutohet kur plotsohet kushti1por 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 tvegjl se 10, rezultati del i gabuar.
// Programi if4-llogaritja e gabuar#include
using namespace std;int main(){
int x,y,z;cout > x;if ((x > 0) && (x>10)){cout
7/30/2019 GjuheProgramuese Ushtrimet C++
31/140
Avni Rexhepi Ushtrime n C++
31
x > 0
x>0
x>10
Fillimi
x
Fundi
Po Jo
x sht
negativ
x > 10
x>0
x x;
if (x > 0)if (x>10)
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
32/140
Avni Rexhepi Ushtrime n C++
32
// Programi - operatori i kushtezimit#include using namespace std;int main(){
int a=2, b=8;int y;y=(a>b) ? a : b;cout
7/30/2019 GjuheProgramuese Ushtrimet C++
33/140
Avni Rexhepi Ushtrime n C++
33
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
34/140
Avni Rexhepi Ushtrime n C++
34
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
35/140
Avni Rexhepi Ushtrime n C++
35
Kaprcimi pa kusht: goto
Go to Dalja
Mesi
Fillimi
Fundi
7/30/2019 GjuheProgramuese Ushtrimet C++
36/140
Avni Rexhepi Ushtrime n C++
36
Fillimi
i=10
Po
Jo
ii;
if (i
7/30/2019 GjuheProgramuese Ushtrimet C++
37/140
Avni Rexhepi Ushtrime n C++
37
Pr ti mundsuar shfrytzuesit q pas ekzekutimit t programit, t zgjedh nse dshiront bj prsri riekzekutimin e programit prej fillimit pa e ndrprer at (pa dal prej tij), mundt prdoret forma si vijon, prmes urdhrit goto.
// Programi goto3#include using namespace std;int main(){int i;char zgjedhja;
Perseritje: //Labela(etiketa-adresa) per kapercim pa kusht
cout > i;cout
7/30/2019 GjuheProgramuese Ushtrimet C++
38/140
Avni Rexhepi Ushtrime n C++
38
Unazat (Loops - laqet)
Loop (angl Loop-laku, rrethi i mbyllur, apo ndryshe si term m i prshtatshm n gjuhnshqipe, unaza)paraqet pjesn e programit, ku bhet prsritja e ekzekutimit t nj apom
shum urdhrave t programit. Unaza ka variabln e unazs, e cila prdoret si tregues se sa herdo t prsriten urdhrat brenda unazs. Ajo fillon me vlern fillestare dhe pr do her tekzekutimit t urdhrave t unazs, e ndryshon vlern pr nj hap t caktuar, q njihet si hapi iunazs. 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 prdalje 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 eunazs dhe variabla e unazs rritet, pr hapin e caktuar.
Unaza While, s pari e vlerson kushtin dhe pastaj, nse plotsohet kushti, ekzekuton urdhratn unaz. Nse kushti nuk plotsohet hern e par q testohet kushti(pr hapin e par t variabls sunazs),pra pr vlern fillestare t variabls s unazs, ather urdhrat n unaz nukdo tekzekutohen asnjher.
i=f;while(kushti){
urdhri/at;i=i+h;
}
ku jan:i - variabla e unazs.f - vlera fillestare e variabls s unazs. kushti - kushti i ekzekutimit t urdhrave q
prfshihen n trupin e unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.urdhri/at urdhrat q ekzekutohen brenda unazs.
Fillimi
n
S=0
S=S+i
S
Fundi
i=1
i nPo
Jo
i=i+1
7/30/2019 GjuheProgramuese Ushtrimet C++
39/140
Avni Rexhepi Ushtrime n C++
39
// Program while1#include using namespace std;int main(){
double S;int i;S=0;i=1; //vlera fillestarewhile (i
7/30/2019 GjuheProgramuese Ushtrimet C++
40/140
Avni Rexhepi Ushtrime n C++
40
i=f;do{
urdhri/at;i=i+h;
}
while(kushti);
ku jan:i - variabla e unazs.f - vlera fillestare e variabls s unazs. kushti - kushti i ekzekutimit t urdhrave q prfshihen
n trupin e unazs.
h - hapi me t cilin ndryshohen vlerat e variabls i.urdhri/at urhdri/at e prfshira brenda unazs.
Po
Jo
Fillimi
n
S=0
i=1
S=S+i
i=i+1
i n
S
Fundi
// Programi do-while1#include using namespace std;int main(){constint m=3;int i;double s;
s=0;i=1; //vlera fillestaredo //(do -bj, vepro, kryej)
{s=s+i; //urdhrii++; //rritja e hapit t unazs
}while (i
7/30/2019 GjuheProgramuese Ushtrimet C++
41/140
Avni Rexhepi Ushtrime n C++
41
Unaza for
Unaza for (pr), gjithashtu bnprsritjen e urdhrave brenda unazs, duke prshkruar nfillim vlern fillestare, kushtin dhe hapin e unazs. Ka formm kompakte dhe prdoret n tshumtn e rasteve. Zakonisht, kur vlerat kufitare (vlera fillestare dhe vlera prfundimtare) tvariabls 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
using namespace std;int main(){
int i,n;double s=0;cout > n;for (i=1;i
7/30/2019 GjuheProgramuese Ushtrimet C++
42/140
Avni Rexhepi Ushtrime n C++
42
Po
Jo
Fillimi
n
S=0
i=1
S=S+i
i=i+1
i n
S
Fundi
Fillimi
n
S=0
S=S+i
S
Fundi
i=1; i
7/30/2019 GjuheProgramuese Ushtrimet C++
43/140
Avni Rexhepi Ushtrime n C++
43
for(i=10;i>0;i--){cout
7/30/2019 GjuheProgramuese Ushtrimet C++
44/140
Avni Rexhepi Ushtrime n C++
44
for ( n=0; n 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 prndonj 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, brendatrupit 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, tndrpritet unaza.
Jo
Po
Jo
Fillimi
n
S=0
i=1
S=S+i
i=i+1
in
S
Fundi
i > 5 Po
Fillimi
n
S=0
S=S+i
S
Fundi
i=1; i 5Po
// Programi Break - ndrprerja e unazs, dalja prej unaze#include using namespace std;int main(){
int i;for (i=1;i
7/30/2019 GjuheProgramuese Ushtrimet C++
45/140
Avni Rexhepi Ushtrime n C++
45
{if (i>5)break; //ndrprerja, dalja prej unazecout
7/30/2019 GjuheProgramuese Ushtrimet C++
46/140
Avni Rexhepi Ushtrime n C++
46
for (i=1;i
7/30/2019 GjuheProgramuese Ushtrimet C++
47/140
Avni Rexhepi Ushtrime n C++
47
Vargjet
Vargjet e numrave ose fushat numerike nj-dimensionale (vektort) dhe dy-dimensionale(matricat) n C++ definohen si vijon:
int A[8]; /Vektoridouble Z[3][5]; /Matrica
Indekset fillojn me vlern 0 (zero )
int A[6]; /6 antar - A[0], A[1], ..., A[5].
Deklarimi dhe inicializimi i vargjeve
Vargjet mund ti deklarojm dhe aty pr aty ti inicializojm me vlera, si n vijim:
int A[5]={7,2,4,1,3};
char Z[7]={'d','4','*','a','G','$'}; /Vektori me karaktere
constint m=5;int A[m]={7,2,4,1,3};
constint m=4,n=3;int K[m][n]={ {7,4,1},
{2,5,8},{3,6,2},{8,1,3} };
7/30/2019 GjuheProgramuese Ushtrimet C++
48/140
Avni Rexhepi Ushtrime n C++
48
Vektort
// Programi vektor1
#include using namespace std;int main(){
constint m=5;int i;
//Deklarimi dhe inicializimi i vektroritint A[m]={2,5,-1,6,3};cout
7/30/2019 GjuheProgramuese Ushtrimet C++
49/140
Avni Rexhepi Ushtrime n C++
49
7/30/2019 GjuheProgramuese Ushtrimet C++
50/140
Avni Rexhepi Ushtrime n C++
50
//Formimi i vektorit prej vektori#include using namespace std;int main()
{const n=4;int i,A[n]={1,2,3,4},B[n];for (i=0;i
7/30/2019 GjuheProgramuese Ushtrimet C++
51/140
Avni Rexhepi Ushtrime n C++
51
Pasi q prfundon vendosja e vektorit t par (gjersa i
7/30/2019 GjuheProgramuese Ushtrimet C++
52/140
Avni Rexhepi Ushtrime n C++
52
Matricat
// Programi matrica1#include using namespace std;
int main(){
constint m=3, n=3;int i,j;int A[m][n]={{1,2,3},
{4,5,6},{7,8,9}};
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
53/140
Avni Rexhepi Ushtrime n C++
53
}}
//Shtypja e matricscout
7/30/2019 GjuheProgramuese Ushtrimet C++
54/140
Avni Rexhepi Ushtrime n C++
54
Veprimet me vektor/matrica dhe gjetja e antarve t caktuar tvektorit/matrics
Shuma e antarve t matrics:
//Shuma e anetareve te matrices#include using namespace std;int main(){
const 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
7/30/2019 GjuheProgramuese Ushtrimet C++
55/140
Avni Rexhepi Ushtrime n C++
55
Jo
Po
Po
Jo
Fillimi
n=0
i=1
n=n+1
i=i+1
i m
n
Fundi
ai< 0
m,(ai,i=1,m)
//Numri i antareve negativ te vektorit#include using namespace std;int main(){
const m=5;
int A[m]={3,-2,7,-4,5},i,n;n=0; //numratori fillimisht vlera zerofor (i=0;i
7/30/2019 GjuheProgramuese Ushtrimet C++
56/140
Avni Rexhepi Ushtrime n C++
56
//Numri i antareve negativ//dhe pozitiv te vektorit#include using namespace std;#include int main(){
const m=5;int A[m]={2,-3,-7,4,1},i,p,n;p=0;n=0;for (i=0;i
7/30/2019 GjuheProgramuese Ushtrimet C++
57/140
Avni Rexhepi Ushtrime n C++
57
Antari m i madh (m i vogl)
Gjetja e antarit minimal/maksimal bhet, duke e deklaruar fillimisht antarin e par t
vargut, si antari minimal/maksimal: p.sh., Amax=A[0];dhe pastaj prmes unazs q iprshkon t gjith antart tjer t vargut, e krahasojm vlern momentale t Amaxme t gjithantart 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 meantart vijues t vargut.
Jo
Jo
Po
Fillimi
amax=ai
amax
Fundi
Po
i=i+1
i m
amax=a1
i=2
amaxai
m,(ai,i=1,m)
//Anetari me i madh i vektorit#include using namespace std;int main(){
const m=4;int A[m]={3,7,5,9},i, Amax;Amax=A[0];for (i=1;i
7/30/2019 GjuheProgramuese Ushtrimet C++
58/140
Avni Rexhepi Ushtrime n C++
58
Sortimiradhitja sipas madhsis
Nj prej mnyrave t sortimit t antarve t vargut realizohet kshtu: fillohet me antarinn 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 prrenditjen e kundrt, antari m i madh) ai vendoset definitivisht n pozitn e par dheprcaktohet antari m i vogl. Pastaj, vazhdon procedura e njjt, pr t gjetur antarin eardhshm m t vogl, pr pozitn e dyt. Pra, bhet krahasimi i antarit n pozitn e dyt, met gjith antart e ardhshem: i dyti -i treti, i dyti-i katrti, ... i dyti i fundit, dhe njsoj, sa herka nevoj, dy antarve q krahasohen u ndrrohen vendet. Kur, prfundon gjetja e antarit prpozitn e dyt, procedura e njjt prsritet pr antart vijues. Nse vargu ka n antar, atherduhet t bhn n-1 kalime t tilla (sepse krahasimi nuk bhet me vet-vehten dhe n fundkrahasohet antari i parafundit me at t fundit) .
Pr krahasim, marrim dy numrator: i dhe j, dheprdorn dy unaza (unaz brendaunazs), ku unaza pri fillon prej pozits s par dhe shkon deri tek pozita e parafundit, kursej fillon prej pozits s dyt (i+1) dhe shkon deri tek pozita e fundit. Pr secilin hap t unazss jashtme, i, unaza e brendshme, j, fillon prej pozitsprnj m t madhe: (j=i+1). Nsecilin hap, krahasohen A[i]>A[j]. Nse ka nevoj qtu ndrrohen vendet, ather ndrrimii vendevebhet duke prdorur nj variabl ndihmse, (si n figur) e cila s pari e merr vlern eantarit t par (q t mos humbet ajoB=A[i]), pastaj antari i par e merr vlern e antarit tdyt(A[i]=A[j]), dhe n fund, antari i dyt, e merr vlern e antarit t par prej variablsndihmse, e cila e ka ruajtur at prkohsisht (A[j]=B). Kjo sht e ngjashme me procedurne ndrrimit t prmbajtjes s dy enve. Nuk mund t ndrrohen ent e tyre, pa e pasur s pari njen t tret ndihmse, n t ciln e bartim prmbajtjen e ens s par, pastaj at prej s dyts ekalojm n enn e par, kurse n fund, prej ens ndihmse, e kthejm prbrjen e par n enn edyt.
A[i] A[j]
B
1 3
2
//Sortimi i anetareve te vektorit#include using namespace std;int main(){
const n=4;int A[n]={7,2,8,3},i,j,b;for (i=0;i
7/30/2019 GjuheProgramuese Ushtrimet C++
59/140
Avni Rexhepi Ushtrime n C++
59
A[i]=A[j];A[j]=b;
}}
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
60/140
Avni Rexhepi Ushtrime n C++
60
for (j=0;j
7/30/2019 GjuheProgramuese Ushtrimet C++
61/140
Avni Rexhepi Ushtrime n C++
61
=
Jo
Po
>>n;
Prodhimi=ProdVarg(m,n,2,4); //Funks. per prod. e vargut
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
86/140
Avni Rexhepi Ushtrime n C++
86
T llogaritet:
Y =3
n
i
i
1
)23( +
2
2
)1*2(n
i
i + 4
n
i
i
1
)3(
Fillimi
m,n
Y
Fundi
Y=Shuma(1,n,3,2)+Shuma(2,n+2,2,1)+Prodhimi(1,n,1,3)
Shuma(a,b,c,d)
return S
Po
S=0
i=a
S=S+(c*i+d)
i=i+1
i b
Prodhimi(a,b,c,d)
return P
Po
P=1
i=a
P=P*(c*i+d)
i=i+1
i b
// Programi Funksion5#include 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;coutn;
Y=3*Shuma(1,n,3,2)+Shuma(2,n+2,2,1)+Prodhimi(1,n,1,3);
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
87/140
Avni Rexhepi Ushtrime n C++
87
int i;double S;S=0;for (i=a;i
7/30/2019 GjuheProgramuese Ushtrimet C++
88/140
Avni Rexhepi Ushtrime n C++
88
Llogaritja e faktorelit
Fillimi
n
Fakt
Fundi
Fakt=Faktoriel(n)
Faktoriel(m)
return F
Po
F=1
i=1
F=F*i
i=i+1
i m
// Programi Funksion4#include using namespace std;
double Faktoriel(int m);int main(){
int n;double Fakt;n=5;
Fakt=Faktoriel(n); //Funks. per Faktoriel
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
89/140
Avni Rexhepi Ushtrime n C++
89
Shembull:
T llogaritet: Fakt = n! + (2n)! (2n-1)!
Fillimi
n
Fakt
Fundi
Fakt=Faktoriel(n)+Faktoriel(2*n)-Faktoriel(2*n-1)
Faktoriel(m)
return F
Po
F=1
i=1
F=F*i
i=i+1
i m
// Programi Funksion4// Fakt = n! + (2n)! (2n-1)!#include 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
7/30/2019 GjuheProgramuese Ushtrimet C++
90/140
Avni Rexhepi Ushtrime n C++
90
Rekurzioni
Rekurzioni, paraqet thirrjen e vet funksionit brenda funksionit, pra thirrjen e vet -vehtes...
// Programi Faktoriel-Rekurzioni
#include using namespace std;
double Faktoriel(int m);int main(){
int n;double Fakt;n=5;
Fakt=Faktoriel(n); //Funks. per Faktoriel
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
91/140
Avni Rexhepi Ushtrime n C++
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 nreturn n * Faktoriel (n - 1);
}else {
return 1;}
}
Funksionet dhe Vektort
// Programi FunksioniVektori1
#include using namespace std;int FormoVektorin(int X[],int n);int main(){
constint m=5;int i,A[m];FormoVektorin(A,m);cout
7/30/2019 GjuheProgramuese Ushtrimet C++
92/140
Avni Rexhepi Ushtrime n C++
92
}int ShumaAntVektorit(int X[],int n){
int i,s;s=0;for (i=0;i
7/30/2019 GjuheProgramuese Ushtrimet C++
93/140
Avni Rexhepi Ushtrime n C++
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 skanevoje per rezultat kthyes prej funksionit, por vetem kerkon qe funksioni ta kryej nje pune tecaktuar (ne kete rast shtypjen e rezultatit (vektorit) ne dalje).
// Programi FunksionVektor4 Minimumi dhe Maximumi me funksion#include using namespace std;void ShtypeVektorin(int X[],int n);int AntMaxVektorit(int X[],int n);int AntMinVektorit(int X[],int n);
int main(){
constint 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
7/30/2019 GjuheProgramuese Ushtrimet C++
94/140
Avni Rexhepi Ushtrime n C++
94
int AntMinVektorit(int X[],int n){
int i,j,Xmin;
Xmin=X[0];for (i=1;i
7/30/2019 GjuheProgramuese Ushtrimet C++
95/140
Avni Rexhepi Ushtrime n C++
95
{constint m=2, n=3;double Shuma;int A[m][n]={ {1,2,3},
{4,5,6},};
Shuma=ShumaAntMatrices(A,m);cout
7/30/2019 GjuheProgramuese Ushtrimet C++
96/140
Avni Rexhepi Ushtrime n C++
96
{int i,j;double s;s=0;for (i=0;i
7/30/2019 GjuheProgramuese Ushtrimet C++
97/140
Avni Rexhepi Ushtrime n C++
97
Prfshirja e fajllave me direktivn #include
Zakonisht direktivn #include, e kemi prdorur pr ti thirrur librarit e gatshme tC++-it. Kllapat e drejta me simbolet < dhe > q prdoret tek : #include usingnamespace 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 taprfshijm nj fajll tjetr, q sht i ruajtur brenda folderit t njjt, ku sht i ruajtur edheprogrami aktual, ather prdoret forma:
#includeEmri_i_fajllit.h. Pra, emri shkruhet brenda thojzave t zakonshme. Header fajlli, krijohet duke shkuar prmes menys: FileNew, dhe zgjedhet C/C++ HeaderFile. Emertohet me emrin me prapashtese .h dhe pastaj shkruhet dhe ruhet si fajllat e zakonshemburimor t C++.
P.sh., shpesh here kemi nevoj q t shtypim adresn ton pr kontakt:
Avni RexhepiFakulteti Elektroteknik
PrishtinTel: 044 174 374
Tr kt tekst mund ta shtypim me urdhrat vijues, t ruajturn nj Header File (Hederfajll) t C++, Adresa.h, si:
//Fajlli Adresa.hcout
7/30/2019 GjuheProgramuese Ushtrimet C++
98/140
Avni Rexhepi Ushtrime n C++
98
Thirrja e funksionit, nga fajlli tjetr
Edhe funksionet mund t shkruhen dhe t ruhen si fajlla tveant, e pastaj t prdoren nshum programe t ndryshme, sipas nevojs. N rast t till, prfshirja e funksionit brendaprogramit, bhet me direktivn preprocesorike #include.
P.sh., n folderin: C:\Shembuj kemi fajllat: FunksioniMeInclude.cpp dheFormoVektorin.h. Ather n programin kryesor shkruajm:
// Program-Funksioni i thirrur me #include#include using namespace std;#include "FormoVektorin.h" //prfshije fajllin FormoVektorin.h.
int main(){
const int m=5;int i,A[m];FormoVektorin(A,m);cout
7/30/2019 GjuheProgramuese Ushtrimet C++
99/140
Avni Rexhepi Ushtrime n C++
99
Shembull:
Fajlli: Include2.cpp programi kryesor
//Llogaritja e faktorielit, permes rekurzionit#include using namespace std;#include "Faktorieli.h"int main(){
int n;int fakt;
cout > n;
fakt = Faktoriel (n);
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
100/140
Avni Rexhepi Ushtrime n C++
100
Mund tprfshihen edhe nga disa heder fajlla n nj program. Thirrja e heder fajllitmund t behet edhe n rrjedh e sipr t programit.
Shembull:
//Fajlli: Shtypja.cpp programi kryesor//Llogaritja e faktorielit, permes rekurzionit#include using namespace std;#include "Shtype1.h" // Prfshirja e fajllit Shtype1.h
int main(){
Shtype(); //Funksioni prej Shtype1.h#include "Shtype2.h" //thirrja e Shtype2.hreturn 0;
}
//Fajlli: Shtype1.h
int i,j;void Shtype(){
for (i=0;i
7/30/2019 GjuheProgramuese Ushtrimet C++
101/140
Avni Rexhepi Ushtrime n C++
101
Direktiva #define
Direktiva #define mund t prdoret pr definime t ndryshme n programe dhefunksionon 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 ARGUMENTI1sht nj fjal e vetme, pa hapsira. Pr emrtim prdoren rregullat enjjta si pr variablat. Mes emrave t dy argumenteve, duhet t ket s paku nj hapsir. Kudon program q t shkruhet ARGUMENTI1sht njsoj, sikur t ishte shkruarargumenti2.
Shembull:
#include using namespace std;#define Emri "Avni Rexhepi"
int main(){
coutX2;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
102/140
7/30/2019 GjuheProgramuese Ushtrimet C++
103/140
Avni Rexhepi Ushtrime n C++
103
Shtojca A - Probleme praktike
Numrat e rastit n C++
Funksionet srand() and rand() - Libraria standarde e C++ ofron nj veglprgjenerimin e numrave t rastit duke prdorur funksionin rand( ) (angl. randomi rastit) .
Natyrisht, kta numra nuk jan me t vrtet t rastit , por jan pseudo -numra t rastit. Atagjenerohen n nj varg i cili jep iluzionin e t qenit i rastit, sepse, megjithat, ky varg i numravedo t prsritet. Versioni i rand()q vije me kompajlerin e C++-it sht mjaft i thjesht dhenuk 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. Funksioni rand() thjesht e kthen pseudo-numrin e plot t rastit n rangun prej 0deri ne RAND_MAX dhe prdoret si vijon:
#include #include
using namespace std;
int main(){
int NumriiRastit = rand();
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
104/140
Avni Rexhepi Ushtrime n C++
104
Vlera RAND_MAX nuk sht e specifikuar me standardin e C++, por mund t supozojmse RAND_MAX sht s paku: 32767. Pr t gjetur vlern e sakt pr RAND_MAX nkompjuterin tuaj, ekzekutoni kodin vijues:
#include #include
using namespace std;
int main(){
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
105/140
7/30/2019 GjuheProgramuese Ushtrimet C++
106/140
Avni Rexhepi Ushtrime n C++
106
Pra, kemi thirrur edhe header-in pr funksionin time(). Vlera e kthyer ngafunksioni time() llogaritet prej numrit pa shenj unsigned duke prdorur operatorinstatic_cast.
Si gjenerohen numrat n nj brez (rang) t caktuar
Ka disa mnyra pr gjenerimin e numrave n nj rang t caktuar. Nj mnyr ezakonshme, q haset shpesh sht:
NumriiRastit = (rand()%10);
Kjo do t gjeneroj numra n rangun 0 deri n 9 (% - Pjestimi me modul, ku si rezultateshte mbetja nga pjestimi i plote me nje numer, ne kete rast pjestimi i plote me 10). Pr tfilluar 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 tkthyer 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 zbatojmn programin e msiprm, do t kemi:
#include #include #include
using namespace std;
int main(){
srand(static_cast(time(0)));int NumriiRastit;for(int i=0; i
7/30/2019 GjuheProgramuese Ushtrimet C++
107/140
7/30/2019 GjuheProgramuese Ushtrimet C++
108/140
Avni Rexhepi Ushtrime n C++
108
int numri_i_rastit;cout
7/30/2019 GjuheProgramuese Ushtrimet C++
109/140
7/30/2019 GjuheProgramuese Ushtrimet C++
110/140
Avni Rexhepi Ushtrime n C++
110
Funksioni time( ) mund t prdoret edhe vetm sa pr t treguar kohn aktuale tkompjuterit.
Shembull:
/* Shembull - time */#include #include using namespace std;
int main (){
time_t koha; //tipi time_t, sht i definuar ne
time ( &koha );cout
7/30/2019 GjuheProgramuese Ushtrimet C++
111/140
7/30/2019 GjuheProgramuese Ushtrimet C++
112/140
Avni Rexhepi Ushtrime n C++
112
//minuta prej Fillimi deri te Fundi
if(SekondaTeKaluar < 1)cout
7/30/2019 GjuheProgramuese Ushtrimet C++
113/140
7/30/2019 GjuheProgramuese Ushtrimet C++
114/140
Avni Rexhepi Ushtrime n C++
114
#include #include #include #include #include
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 kohsdouble diferenca; //variabla pr diferencn kohore
//inicializimi i gjeneratorit t rastit
srand(static_cast(time(0)));
time (&fillimi); //koha e fillimit t lojs
for (i=1; i
7/30/2019 GjuheProgramuese Ushtrimet C++
115/140
Avni Rexhepi Ushtrime n C++
115
time (&fundi); //koha e prfundimit t lojs
ngjyra(10); //ngjyra e gjelbrcout
7/30/2019 GjuheProgramuese Ushtrimet C++
116/140
Avni Rexhepi Ushtrime n C++
116
Shto jca B -Pointert
Pointert jan variabla t cilat mbajn adresat n C dhe n C++. Ata ofrojn fuqi dhepajisje pr programerin q t ju qaset dhe t manipulojn t dhnat n nj mnyr t ndryshmeq 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 kthejvlerat n programin thirrs. Kur prdoren n mnyr t gabuar, ata shpesh jan burim igabimeve n program dhe frustrimeve pr programert.
Kur programi ekzekutohet, t gjitha variablat ruhen n memorie, secila n ndonj lokacionapo adres t veant. N mnyr tipike, variabla dhe adresa e saj e memories prmbajn vlerate t dhnave. P.sh., kur deklarohet:
int numri = 5;
vlera 5 ruhet n memorje dhe mund ti qasemi prmes variabls numri. Pointeri sht llojspecial i variabls, q e ruan adresn e memories e jo vlern e t dhnave. Njsoj si ndryshohetvlera 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 tbhet 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 tprogramit. 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 tinicializoj at memorie pr t mbajtur vlern q e prezenton numrin 25 n formatin integer. Nenuk 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 dinteku e ka vendosur dhe ruajtur, nuk do t kishte mundsi ti qasej prsri asaj vlere. N fakt,adresa aktuale ku ruhet variabla numriIm mund t ndryshoj seciln her q ekzekutohet
programi, por programi e di se si t merret me kt problem. Kryesorja, ai e di do her se ku ika ruajtur vlerat, pra n ciln adres n memorie.
Si u tha m par, C++ ofron nj mnyr q ti referohemi adress s variabls, duke eprdorur operatorin addres of (adresa e), q sht simboli & (ampersand) i lidhur me emrine 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 (tashtypim n ekran), si n vijim:
7/30/2019 GjuheProgramuese Ushtrimet C++
117/140
Avni Rexhepi Ushtrime n C++
117
#include using namespace std;int main(){int numriIm = 25;cout
7/30/2019 GjuheProgramuese Ushtrimet C++
118/140
Avni Rexhepi Ushtrime n C++
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 taruajm 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 tipinpointer pr ti ruaj tur adresat .
M hert patm variabln integer numriIm
int numriIm = 25;
e gjithashtu e paraqitm adresn e tij me:
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
119/140
Avni Rexhepi Ushtrime n C++
119
(Vrejtje: mos u brengosni nse vlera q ju e fitoni sht tjetr, pasi q kjo mund t jet endryshme, sa her q t ekzekutohet programi ose mund t jet e njjta vler, pas disaekzekutimeve. 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 using namespace std;int main()
{int numriIm = 25;int *PointeriIm = & numriIm;cout
7/30/2019 GjuheProgramuese Ushtrimet C++
120/140
Avni Rexhepi Ushtrime n C++
120
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
121/140
Avni Rexhepi Ushtrime n C++
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:
*PointeriImn 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 using namespace std;int main(){
double numriReal = 1.234;double *Pointeri2 = &numriReal;cout
7/30/2019 GjuheProgramuese Ushtrimet C++
122/140
7/30/2019 GjuheProgramuese Ushtrimet C++
123/140
Avni Rexhepi Ushtrime n C++
123
#include using namespace std;int main(){
double numriReal = 1.234;double *Pointeri2 = &numriReal;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
124/140
Avni Rexhepi Ushtrime n C++
124
Tani pointeri tregon n variabln numri2, kshtu q kur ta shtypim prsri vlern n tciln 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 prbrendafunksionit. P.sh., le t marrim rastin vijues:
#include using namespace std;void shtypeDyfishin(int vleraLokale){vleraLokale = vleraLokale * 2;cout
7/30/2019 GjuheProgramuese Ushtrimet C++
125/140
7/30/2019 GjuheProgramuese Ushtrimet C++
126/140
7/30/2019 GjuheProgramuese Ushtrimet C++
127/140
Avni Rexhepi Ushtrime n C++
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 prejteknikave 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 relacionalet t dhnave ose ndonj format special si XML. Pr fillim, le t shohim si prdoren fajllattekstual.
Nj prej shtjeve t rndsishme me rastin e shkruarjes dhe leximit nga fajllat shtformati i t dhnave. Pa marr parasysh se shfrytzuasi fundor i programit do t jet ndonjkopjuter tjetr ose ndonj person, formati i dhn n dalje mund t jet po aq i rndsishm saedhe vet prmbajtja. Nse dalja konsumohet nga ndonj program tjetr, ather formati n dalj eme gjas do t jet i paraprcaktuar dhe specifik, n mnyr q programi konsumuse t jet ngjendje 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 ofrojnnj 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 prezentuaram par pr leximin dhe shtypjen n dhe nga pajisjet standarde, ekrani dhe tastiera. Pr trealizuar hyrje dhe dalje n fajlla duhet t prdoret direktiva: #include .
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 #include using namespace std;
int main(){
ofstream FajlliIm("c:/out.txt");// Krijon ofstream objektin me emrin FajlliIm
if (! FajlliIm) // Gjithnmon testo hapjen e fajllit{
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
128/140
Avni Rexhepi Ushtrime n C++
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). Modispecifikohet prmes prdorimit t definimit t enumeratorit n klasn ios. Klasa ios prmbanantrt t cilt i prshkruajn modet dhe gjendjet pr klasat input (hyrja) d he output (dalja).Enumeracioni (grupimi) sht nj mnyr e definimit t vargut t konstanteve. Megjithat, ktoi mrrni t gjitha si t gatshme.
- Nnkuptohet , q nse fajlli nuk ekziston, ai krijohet - Nnkuptohet , q fajl li do t jet tekst fajl l, e jo fajll binar- Nnkuptohet , q fajl li ekzistues do t cungohet (prehet) - Pr t kombinuar modet, bashkoni me or duke prdorur |.
Modi Kuptimi
Out Hapje fajllin ose rrjedhn pr shkruarje/insertim (output -dalja)
In Hapje fajllin ose rrjedhn pr lexim/ekstraktim (input-hyrje)
App Bashkangjit/shto n fajllin ekzistues. Secili insertim (dalje) do t shkruhet n fund t fajllit. Trunc Preje (fshije) fajllin ekzistues (sjellja e zakonshme, e nnkuptuar).
ate E hap fajllin pa e fshir, por lejon q t dhnat t shkruhen kudo brenda tij.
binaryTrajto fajllin si fajll binar. Fajlli binar i ruan t dhnat n format intern (ninar, 1 dhe 0), e jo nfajll t lexueshm tekstual. P.sh., fload do t ruhet si prezentimi i tij prej katr bajtash, e jo sistring.
Pr t hapur fajllin, duke fshir/prer prmbajtjen ekzistuese, mund t prdoret cilido prejurdhrave 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 nat fajll. Pastaj, hapet fajlli n modin e shtimit ashtu q prmbajtja ekzistuese t mos humbetnse shfrytzuesi specifikon ndonj fajll ekzistues.
#include #include #include using namespace std;
int main()
{
7/30/2019 GjuheProgramuese Ushtrimet C++
129/140
Avni Rexhepi Ushtrime n C++
129
string EmriiFajllit;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
130/140
7/30/2019 GjuheProgramuese Ushtrimet C++
131/140
7/30/2019 GjuheProgramuese Ushtrimet C++
132/140
Avni Rexhepi Ushtrime n C++
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 njbashksi 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 q duhet t prfshihet prmes direktivs include. Zakonisht, nuk sht e nevojshme tprfshihet n mryr eksplicite, pasi q n mnyr indirekte sht i prfshir prmes librarivetjera, si .
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 maj tas .
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 dec imale.
showpoint Paraqet pikn decimale gjithmon.
noshowpos (default) Nuk paraqet shenjn "+" si prefiks para numrave pozitiv.
showpos Paraqet shenjn "+" si prefiks t numrave pozitiv.
skipes (default)Kaprcen hapsirat e bardha (zbraztirat, tab, rreshti i ri) nga ana e operatorit thyrjes >>.
noskipes Hapsirat e bardha nuk kaprcehen nga operatori i nxjerres, >>.
fixed (default) Bn q numrat me presje dhjetore t paraqiten n notacion fiks (fixed).
scientific Bn q numrat me presje dhjetore t paraqiten n notacion shkencor (scientific).
nouppercase (default) 0x paraqitet pr numrat heksadecimal, e pr notacionin shkencor.
uppercase 0x paraqitet pr numrat heksadecimal, E prnotacionin shkencor.
Manipulatort e tabels s msiprme modifikojn gjendjen e objektit iostream. Kjo do tthot se, kur t prdoren njher n nj objekt n iostream, ata do t ken efekt n t gjitha
7/30/2019 GjuheProgramuese Ushtrimet C++
133/140
Avni Rexhepi Ushtrime n C++
133
hyrjet dhe daljet vijuese t atij objekti. Ka disa manipulator q prdoren pr t modifikuarndonj 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 prfshihetme include.
idth(w)funksion i klass iostream (member function).
Mbushja e hapsirave t bardhasetfill(ch)mbush hapsirat e bardha t daljes m karakterin ch; krkon q t prfshihet. fill(ch)funksion i klass iostream (memeber function).
Caktimi i precizitetit
setprecision(n)vendos paraqitjen e numrave me presje dhjetore me precizitet n. Kjonuk ndikon mnyrn e trajtimit t numrave me presje dhjetore gjat llogaritjeve n program.
Shembull:
#include #include #include using namespace std;
int main(){
int intNumri = 15;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
134/140
Avni Rexhepi Ushtrime n C++
134
string EmriIm = "Artan";
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
135/140
Avni Rexhepi Ushtrime n C++
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 njmundsi pr t kthyer vlerat prej funksioneve.
int vlera; // Declaron nj integerint &rVlera = vlera; // Deklaron njreferencpr ninteger-in val
Para emrit t referencs prdoret simboli &. N kt kontekst, & thirret si operatori ireferencs. 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 operatorii adress. Adresa e operatorit prdoret pr t marr adresn, zakonisht, pr t inicializuarpointerin:
int vlera; // Deklaron nje in tegerint *pvlera = &vlera; //Deklaron pointerin dhe e inicial izon at me adresn e variables vlera.
Referenca nuk sht objekt unik. Ajo sht thjesht nj pseudonim ose nj sinonim pr njobjekt tjetr. Identifikatori i referencs (emri) mund t prdoret kudo ku mund t prdoretidentifikatori i referuar. do ndryshim i br n referenc do t aplikohet edhe n objektinorigjinal. Gjithashtu, do ndryshim i br n objektin origjinal do t shihet edhe prmesreferencs.
#include using namespace std;
int main(){
int vlera = 1;int &rVlera = vlera;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
136/140
Avni Rexhepi Ushtrime n C++
136
Referenca duhet t inicializohet kur t krijohet. Nse nuk veprohet kshtu, do t paraqitetgabim nprogram.
Referenca nuk mund t ricaktohet. Nse tentoni t ricaktoni referencn, rezultati do t jetnj caktim i vlers s objektit origjinal t referuar.
Shembull:
#include using namespace std;
int main(){
int Vlera1 = 10;int Vlera2 = 20;
int &rVlera = Vlera1;
cout
7/30/2019 GjuheProgramuese Ushtrimet C++
137/140
Avni Rexhepi Ushtrime n C++
137
Ndarja e vlers rVlera = Vlera2; ia ndan vlern e Vlera2 rVlera -s. Pasi q gjithka q veprohetn referenc aplikohet edhe n objektin e referuar, ather variabls Vlera1 i sht ndar vlera eVlera2, 20. nse referenca do t ri-caktohet pr ju referuar variabls Vlera2, ather Vlera1nuk do t ndryshohej. Pastaj, vlera e Vlera2 sht ndryshuar n 30. Me kt rast sht ndryshuarvetm Vlera2.
Referencat mund t bhen edhe n objektet e definuara t shfrytzuesit, njsoj si edhe nvariablat e brendshme t C++.
#include 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
7/30/2019 GjuheProgramuese Ushtrimet C++
138/140
7/30/2019 GjuheProgramuese Ushtrimet C++
139/140
7/30/2019 GjuheProgramuese Ushtrimet C++
140/140
Avni Rexhepi Ushtrime n C++
Shtojca A - Probleme praktike .......................................................................................... 103Numrat e rastit n C++ ................................................................................................. 103Llogaritjet kohore ......................................................................................................... 109Ngjyra e tekstit ............................................................................................................. 112
Shtojca B - Pointert ........................................................................................................ 116Dukshmria e variablave .............................................................................................. 126
Shtojca C - Shkruarja dhe leximi i fajllave ......................................................................... 127Referencat ................................................................................................................... 135