0% found this document useful (0 votes)
211 views112 pages

Programming

Uploaded by

Rubin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
211 views112 pages

Programming

Uploaded by

Rubin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 112

Agjencia Kombëtare e Arsimit, Formimit Profesional dhe Kualifikimeve

Sektori i Skeletkurrikulave dhe Standardeve të Trajnimit të Mësuesve në AFP

MATERIAL MESIMOR

Në mbështetje të mësuesve të drejtimit/profilit mësimor

TEKNOLOGJI INFORMACIONI DHE


KOMUNIKIMI
Niveli I

NR.
Ky material mësimor i referohet:
 Lëndës profesionale: “Bazat e programimit”, kl.10 dhe 11 (L-26-427-19).
 Temave mësimore:

1. Hyrje në programim.
2. Sistemet e numerike. Këmbimi midis sistemeve.
3. Veprimetnësisteminbinar.
4. Operatorët dhe llojet e veprimeve.
5. HyrjenëAlgoritmikë.
6. Ndërtimi i Algoritmave bazë me anë të bllokskemavee pseudokodit.
7. Struktura e të dhënave.
8. Editorët bazë të programimit.
9. Hyrje në programim në gjuhën C.
10. Struktura e të dhënave në gjuhën C.
11. Algoritmatlineare, tëkushtëzuardheciklikenë gjuhën C.
12. Pointeratdheskedarëtnë gjuhën C.
13. Proceduratdhefunksionetnë gjuhën C.
14. Elementët bazë të programimit në gjuhën C++.
15. Platformat e gatshme në ndihmë të programimit.
16. Siguria e programeve.
1. Hyrje në gjuhën e programimit PYTHON.
2. Mjedisi i punës për të zhvilluar programe duke përdorur PYTHON.
3. Strukturat e të dhënave.
4. Deklarimi dhe inicializimi i variablave.
5. Operatorët dhe veprimet me to.
6. Strukturat e kontrollit. Ciklet.
7. Metodat dhe funksionet.
8. Vargjet e karaktereve dhe veprimet me to.
9. Listat, N-shet (Tuples), Fjalorët dhe Skedarët.
10. Paketat dhe modulet.
11. Programimi i orientuar ndaj objekteve.
12. Hyrje në Bazat e të Dhënave. Bazat e SQL.
13. Ndërveprimi i programit me bazën e të dhënave.
14. Siguria e të dhënave.

Përgatiti:

Elida Mesi

Loreta Polaj

Ina Hoxha

Lumturie Pelivani

Tiranë, 2021
1. Hyrje në programim
Pavarësisht asaj çfarë keni dëgjuar, të programosh një kompjuter nuk është e vështirë. Programimi
është një aftësi që mund ta fitojë kushdo, kërkon praktikë, durim dhe shumë përqëndrim.
Natyrshëm lind pyëtja: “Pse duhet të shqetësohemi për të programuar një kompjuter?” Përgjigja
varet nga nga synimet e gjithsecilit, si për shembull: Për qejf, për punë, nga detyrimi, etj.
Në mënyrë të ngjashme, programimi i një kompjuteri mund të jetë argëtues sepse mund të krijoni
programe të thjeshta që shfaqin fytyrën e shëmtuar të shefit tuaj në kompjuter. Programet më
komplekse mund t'ju bëjnë një milion dollarë në mënyrë që të mos keni më nevojë të punoni për një
shef me një fytyrë të shëmtuar. Shumë njerëz mësojnë programim pa qëllim të bëhen një programues
me kohë të plotë, profesionale. Ata thjesht duan një program që zgjidh një problem të veçantë, por
ata nuk mund të gjejnë një program që e bën atë, kështu që ata e shkruajnë vetë programin. Cilido
qoftë interesi juaj, ju mund të shkruani një program për të zgjidhur një problem specifik që të tjerët
mund ta shohin gjithashtu të dobishëm. Për një karrierë të re ose të dytë. Me kompjuterët që kanë
pushtuar botën, nuk do jeni kurrë të papunë për një kohë të gjatë nëse dini si të programoni një
kompjuter. Nuk është për t'u habitur, kompjuterat kanë tendencë të tërheqin njerëz me inteligjencë
mbi mesataren që kënaqen kur programojnë një kompjuter për t'u futur në proceset e mendimit të
mendjeve të tyre. Për të ndihmuar në kthimin e një kompjuteri në një mjet mendimi, një programues
krijoi skriptin, nënjë gjuhë programimi të përdorur për hulumtimin e inteligjencës artificiale. Qëllimi
ishte krijimi i një programi për të ndihmuar njerëzit të manipulojnë idetë, konceptet dhe faktet në
mënyrë që ata të mund të krijojnë një larmi zgjidhjesh të mundshme duke kuptuar më mirë mënyrën
e tyre të të menduarit gjatë procesit. Nëse përdorimi i një kompjuteri normalisht duket i mërzitshëm,
provoni të shkruani programin tuaj për t'ju ndihmuar të përdorni trurin tuaj në mënyrë më efektive.
 Programimi është zgjidhës problemesh
Në thelb, një program i tregon kompjuterit se si të zgjidhë një problem specifik. Për shkak se bota
është plot me probleme, numri dhe shumëllojshmëria e programeve që njerëzit mund të shkruajnë
për kompjuterë është praktikisht e pafund. Por, për t'i treguar një kompjuteri se si të zgjidhë një
problem të madh, zakonisht duhet t'i thuash kompjuterit se si të zgjidhë një mori problemesh të vogla
që përbëjnë problemin më të madh. Nëse dëshironi të bëni vetë lojën tuaj video, për shembull, duhet
të zgjidhni disa nga problemet e mëposhtme: Përcaktoni sa larg mund të lëvizni një figurë vizatimore
(të tilla si një makinë, një anije kozmike ose një njeri) në ekran si përdorues lëviz një levë. Zbuloni
nëse figura e karikaturës përplaset në një mur, bie nga një shkëmb, ose përplaset në një figurë tjetër
vizatimore në ekran. Sigurohuni që figura e karikaturës të mos bëjë lëvizje të paligjshme, të tilla si
ecja nëpër një mur. Vizatoni terrenin që rrethon figurën e karikaturës dhe sigurohuni që nëse figura e
karikaturës ecën prapa një objekti të tillë si një pemë, pema bllokon realisht figurën nga sytë.
Përcaktoni nëse plumbat që qëllon një figurë tjetër karikaturë po godasin figurën e karikaturës së
lojtarit. Nëse është kështu, përcaktoni sasinë e dëmit, si ndikon ajo në lëvizjen e figurës së dëmtuar
të karikaturës dhe sesi dëmtimi shfaqet në ekran. Sa më i thjeshtë është problemi që ju duhet të
zgjidhni, aq më lehtë mund të shkruani një program që i tregon kompjuterit se si të punojë.
 Programimi nuk është I vështirë por thjeshtë të merr kohë.
Programimi nuk është asgjë më shumë sesa shkrimi i udhëzimeve hap pas hapi duke i thënë
kompjuterit saktësisht se çfarë dëshiron të bëjë. Për shkak se kompjuterët janë “budallenj”, ata
kërkojnë udhëzime të sakta dhe kjo bën që programuesi të shpenzojë shumë kohë. Kompjuterët nuk
kuptojnë anglisht (ose frëngjisht, gjuhën kineze, arabe, indiane ose ndonjë gjuhë tjetër që përdorin
qeniet njerëzore). Për shkak se kompjuterët janë funksionalisht të vdekur nga truri, njerëzit duhet të
shkruajnë udhëzime për një kompjuter duke përdorur një gjuhë të veçantë, pra, termin gjuhë
programimi. Një koleksion udhëzimesh që i tregojnë kompjuterit se çfarë të bëjë njihet si program.
Udhëzimet, të shkruara në një gjuhë specifike programimi, njihen si kodi burimor.
 Pse kaq shumë gjuhë të ndryshme programimi?
Kemi shumë gjuhë programimi për të zgjedhur sepse secila gjuhë shërben për një qëllim të veçantë,
dhe njerëzit gjithmonë krijojnë gjuhë të reja për të zgjidhur lloje të ndryshme të problemeve. Në të
vërtetë, kompjuterat kuptojnë vetëm një gjuhë, e cila përbëhet nga zero dhe njish, e njohur gjithashtu
si gjuhë makine. Një program tipik që mund të shkruani në gjuhën e makinës mund të duket si
shembulli i mëposhtëm:
0010 1010 0001 1101
0011 1100 1010 1111
0101 0110 1101 0101
1101 1111 0010 1001
Gjuha e makinës kërkon një kohë të gjatë për t’u shkruar (dhe një kohë edhe më të gjatë për t’u
kuptuar). Për shkak të këtyre dy problemeve të mëdha, pak njerëz shkruajnë programe në gjuhën e
makinës. Për ta bërë më të lehtë shkrimin e një programi, programuesit shpikën shpejt një gjuhë më
të thjeshtë programimi të njohur si gjuha e asambler. I gjithë qëllimi i gjuhës asambler është që t'ju
mundësojë të shkruani programe më shpejt dhe më lehtë sesa të përdorni gjuhën e makinës.
Për të luftuar të metat e gjuhës asambler, programuesit krijuan një larmi të gjerë gjuhësh të dryshme
programimi me emra të tillë si COBOL dhe FORTRAN. Vazhduan me familjen e gjuhëve C.
Gjuhët e programimit si C ++, BASIC dhe Pascal u krijuan si gjuhë të përdorimit të përgjithshëm, që
do të thotë që mund t'i përdorni për të shkruar një simulator fluturimi, një program kontabiliteti, një
program njohje zëri ose një përpunues teksti. Sidoqoftë, një nga përdorimet më të njohura për
kompjuterat është ruajtja dhe rikuperimi i informacionit, të tilla si emrat, adresat, numrat e telefonit,
historia e kreditit dhe përvoja e kaluar në punë. Kompjuterat ruajnë informacione të tilla në një bazë
të dhënash. Për t'i bërë bazat e të dhënave më të lehta për t'u përdorur, në shumicën e tyre përfshihet
një gjuhë programimi.

2. Sistemet numerike. Këmbimi midis sistemeve


Një sistem numëror (ose sistemi i numërimit) është një sistem shkrimi për shprehjen e numrave; që
është, një seri matematikore për paraqitjen e numrave të një bashkësie të caktuar, duke përdorur
shifra ose simbole të tjera në një rrjedhje logjike.
Një seri e njëjtë simbolesh mund të përfaqësojë numra të ndryshëm në sisteme të ndryshme
numerike. Për shembull, "11" përfaqëson numrin njëmbëdhjetë në sistemin dhjetor (i përdorur në
jetën e përditshme), numrin tre në sistemin binar (i përdorur në kompjuter) dhe numri dy në sistemin
unar (p.sh. i përdorur në numërimin e rezultatvet).
Jo të gjitha sistemet e numrave mund të përfaqësojnë të gjithë numrat që konsiderohen në ditët e
sotme; për shembull, numrat romakë nuk kanë asnjë zero.
Në mënyrë ideale, një sistem numërimi do të:
 Përfaqësojë një grup të dobishëm numrash (p.sh. të gjithë numrat e plotë, ose numrat
racionalë)
 Jepni çdo numri të përfaqësuar një përfaqësim unik (ose të paktën një përfaqësim standard)
 Pasqyrojë strukturën algjebrike dhe aritmetike të numrave.

Sistemi dhjetor ose sistemi me bazë dhjetë, si më I përdoruri në përditshmërinë tonë, ka si bazë
numrin 10. Shifrat që të gjithë jemi mësuar të shikojmë janë:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Çdo shifër e një numri të plotë në sistemin dhjetor duke filluar nga e djathta në tëmajtë, paraqet
njëshet (100), qindëshet (102), mijëshet (103), etj.
Marrim si shembull numrin 345610 ku indeksi përcakton se cilit sistem I përket. Sipas matematikës
që kemi mësuar që në shkollen fillore, ky numër do të ndahej në:

3 mijëshet 3 4 5 6
4 qindëshet 6 x 100 = 6
5 dhjetëshet 5 x 101 = 50
6 njëshet 4 x 102 = 400
3 x 103 = 3000

345610

Sistemi binar ose sistemi me bazë dy përbëhet nga bashkësia e shifrave (0, 1). Meqënëse këto shifra
përfaqësojnë dy gjëndje të elementeve elektronike me të cilat ndërtohen pjesët përbërëse të
kompjuterave, ky është edhe sistemi që kupton kompjuteri. Numrat në systemin binar paraqiten
vetëm me anë të ketyre dy shifrave. Pra nga e majta në të djathtë numrat paraqiten si fuqi e numrit 2.

Për shembull: 10112 = 1110

1 0 1 1
1 x 20 = 1
1 x 21 = 2
0 x 22 = 0
1 x 23 = 8

11
Sistemi oktal ose ndryshe sistemi me bazë tetë përbëhet nga shifrat:

0, 1, 2, 3, 4, 5, 6, 7

Nëse marrim si shëmbull numrin 156 ne systemin me bazë 8 në systemin binar paraqitet si 110

1 5 6
6 x 80 = 6
5 x 81 = 40
1 x 82 = 64

110
Sistemi hekzadecimal merr këtë emërtim për shkak të bazës së tij me vlërë 16:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Duke marre si shëmbull numrin 1D7F në sistemin hekzadecimal paraqitja e tij në sistemin dhjetor
është 7551

1 D 7 F
F x 160 = 15
7 x 161 = 112
D x 162 = 3328
1 x 163 = 4096

7551

 Konvertimi I numrave në sisteme të ndryshme


Nga sistem dhjetor ne sistem binar
Si shëmbull do të marrim konvertimin e numrit 23 në system me bazë 2 (binar):

Pra: 2310 = 101112


Nga shembulli I mësipërm vërejmë se për të konvertuar një numër nga sistemi dhjetor në atë binar,
numri pjestohet me bazën, mbetja ruhet ndërsa herësi pjestohet sërisht me bazën, duke u përsëritur
veprimi deri sa herësi të bëhet zero.
Nga sistem binar në sistem dhjetor
Si shembull marrim numrin 1012 = 1 x 22 + 0 x 21 + 1 x 20 = 510
Nga sistemi hekzadecimal ne sistem dhjetor
Si shembull marrim 1F16 = 1 x 161 + 15 x 160 = 3110
Konvertimi nga sistemi oktal në systemin binar dhe anasjelltas mund te bëhet duke zëvendësuar
shifrat me bazë 8 me ato me bazë 2

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

P.sh: 1348 = 0010111002


ose
1011101112 = 5678 (101 = 5, 110 = 6, 111 = 7)
Edhe konvertimi nga sistem hekzadecimal në binar dhe anasjelltas, ngjason më rastin e
mësipërm, u vlera me bazë 16 konvertohet me vlerën korresponduese me bazë 2:
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

P.sh: 6D416 = 0110110101002


Ose
11011001111110002 = D9F816 (1101 = D, 1001 = 9, 1111 = F, 1000 = 8)

3. Veprimet në sistemin binar


Veprimet në sistemin binar janë të ngjashme me veprimet ne sistemin dhjetor. Pra veprimet
matematikore te zakonshme si mbledhja, zbritja, shumëzimi dhe pjesëtimi kryhen po me te njëjtën
logjikë sinë matematikën e zakonshme edhe në atë binare.
Mbledhja

0+0=0 1010
0+1=1 +110
1+0=1 10000
1 + 1 = 0 dhe mbartet 1

Zbritja

0–0=0 11001
0 – 1 = 0 dhe merret hua 1 - 111
1–0=1 10010
1–1=0

Shumëzimi

0x0=0 101
0x1=0 x11
1x0=0 101
1x1=1 101
1111

Pjesëtimi
0 : 0 = Nuk përcaktohet kur pjesëtuesi është zero 110 10
0:1=0 10 11
1 : 0 = Nuk përcaktohet kur pjesëtuesi është zero 10
1:1=1 10
==

4. Operatorët dhe llojet e veprimeve


Një operator në një gjuhë programimi është një simbol që i thotë kompilatorit ose interpretuesit të
kryejnë operacione specifike matematikore, relacionale ose logjike dhe të prodhojnë rezultatin
përfundimtar. Ky kapitull do të shpjegojë konceptin e operatorëve dhe do t'ju çojë përmes
operatorëve të rëndësishëm aritmetikë dhe relacionalë të disponueshëm në gjuhë të ndryshme si C,
Java dhe Python.

Operatorët aritmetikë:

1. (+) – operatori i mbledhjes


2. (-) – operatori i zbritjes
3. (*) – operatori i shumëzimit
4. (/) – operatori i pjesëtimit
5. (%) – operatori modular
4 operatorët e parë nuk kanë asgjë të veçantë përveçse asaj që bëjnë në matematikë. Funksioni i
operatorit modular është të jap mbetjen nga pjesëtimi i dy numrave të plotë. Shembulli i mëposhtëm
tregon shembuj të të gjithë këtyre operatorëve.
Figura e mëposhtme tregon se si mund të marrin vlera variablat operatorët aritmetikë.

Rregullat e operatorëvepërgjithësi janë të njëjta me ato të algjebrës:

1. Operatorët në shprehjet e përfshira brenda çifteve të kllapave vlerësohen të parët.


Kllapatpërcaktohen si në "nivelin më të lartë të përparësisë". Në rastet e kllapave të tilla si (a
* (b + c)), së pari aplikohen operatorët në çiftin më të brendshëm të kllapave.
2. Operatorët e shumëzimit, pjesëtimi dhe modularët aplikohen në vijim. Nëse një shprehje
përmban disa operator të tillë, operatorët aplikohen nga e majta në të djathtë. Këto operatorët
janë në të njëjtin nivel të përparësisë.
3. Operatori mbledhës dhe zbritës aplikohen së fundmi. Nëse një shprehje përmban këto
operatorë, operatorët aplikohen nga e majta në të djathtë. Mbledhja dhe zbritja gjithashtu
kanë të njëjtin nivel përparësie.
Kur themi se disa operatorë aplikohen nga e majta në të djathtë, ne i referohemi llojeve së
operatorëve. Për shembull, operatorët mbledhës (+) në shprehjen a + b + c shoqërohen nga e majta
në të djathtë, kështu që së pari llogaritet a + b, pastaj llogaritet c në atë shumë për të përcaktuar
vlerën e tërë shprehjes. Do të shohim që disa operatorë shoqërohen nga e djathta në të majtë. Tabela
e mëposhtme tregon në mënyrë përmbledhëse rendin e operatorëve aritmetikë.

Operatori Funksioni Renditja


() Kllapë Vlerësohet së pari. Nëse kllapat janë të vendosura, shprehja në çiftin më të
ulët vlerësohet së pari. [Kujdes: Nëse keni një shprehje të tillë si (a + b) *
(c - d) në të cilën dy grupe kllapa nuk janë të vendosura, por shfaqen "në të
njëjtin nivel", Standardi C ++ nuk specifikon rendin në të cilin këto
nënekseksione të parantezuara do të vlerësohen.]
+ Mbledhje Vlerësohet i dyti. Nëse ka disa, ato vlerësohen majtas djathtas.
- Zbritje
%
+ Shumëzim Vlerësohet i fundit. Nëse ka disa, ato vlerësohen majtas djathtas.
/ Pjesëtim

Operatori i inkrementimit
Operatori i inkrementimit ka për funksion që të rrisë vlerën me një të një variabli. Ajo përkatësisht
shënohet (++). Figura e mposhtmë tregon përdorimin e operatorit të inkrementimit.

Operatori i dekrementimit
Operatori i dekrementimit ka për funksion që të zbres vlerën me një të një
variabli. Ajo përkatësisht shënohet (--). Figura e mposhtmë tregon përdorimin
e operatorit të dekrementimit.

Operatorët logjikë
Operatorët logjikë përdoren për të përcaktuar logjikën midis variablave ose
vlerave. Në këtë grup operatorësh do të përfshijmë tre operator:

 AND (&&)
 OR (||)
 NOT (!)

Operatori AND
Me operatorin AND, rezultati del e vërtetë vetëm nëse të dyja shprehjen janë të vërteta. Në të
kundërt nëse njëra nga shprehjet del e gabuar, rezultati do të jetë i gabuar. Tabela e mëposhtme
tregon se si kryhet llogaritja e rezultatit.
A B REZ
0 0 0
1 0 0
0 1 0
1 1 1

Shembulli i mëposhtëm tregon përdorimin e operatorit logjik AND.

Operatori OR

Në operatorin OR rezultati del e rreme kur të dyja shprehjet janë të rreme. Në të kundërt shprehja do
të jetë e vërtetë. Tabela e mëposhtme tregon se si kryhet llogaritja e rezultatit.

A B REZ
0 0 0
1 0 1
0 1 1
1 1 1

Shembulli i mëposhtëm tregon përdorimin e operatorëve logjik OR.

Operatori NOT

Operatori NOT (!) ka për funksion të përmbysi vlerën e shfaqur. Nëse vlera është e vërtetë ajo e
nxjerr si të gabuar dhe anasjelltas. Tabela e mëposhtme tregon se si kryhet llogaritja e rezultatit.

REZ shprehjes !(REZ shprehjes)


1 0
0 1

Shembulli i mëposhtëm tregon përdorimin e operatorëve logjik NOT.

Operatorët e krahasimit

Operatorët e krahasimit përdoren për të krijuar shprehje booleane të cilat kanë vetëm dy vlera. Nëse
vlera është e vërtetë, ajo do të kthejë vlerën TRUE në të kundërt, ajo do të kthejë vlerë FALSE. Ajo
krahason shprehjen në anën e majtë me atë të anës së djathtë. Tek operatorët e krahasimit do të
përfshijmë këto operatorë:
 Më i madh (>)
 Më i vogël (<)
 Më i madh se (>=)
 Më i vogël se (<=)
 E barabartë me (==)
 E ndryshme nga (!=)

Le të shohim disa veprimet të këtyre operatorëve dhe të shohim se çfarë vlere do të nxjerri.

Në këtë shembull kemi treguar se si përdoren operatorët e krahasimit. Po


këta operator nuk përdoren vetëm në këto kushte. Siç do të mësojmë në
temat e mëvonshme, operatorët përdoren në cikle, instruksionet e kushtit
etj. Në shembullit konkret jemi duke krahasuar numrin 6 me numrin 7
me të gjithë operatorët e krahasimit. Poshtë tyre kemi komentuar atë
çfarë kompilatori ekzekuton. Kur kompilatori nxjerr vlerën 0 kemi të
bëjmë me një shprehje jo të vërtetë pra të gabuar. Kur kompilatori nxjerr
vlerën 1 kemi të bëjmë me një shprehje të vërtetë.
Shprehjet jo të vërteta i gjejmë në rreshtat 4, 11, 17 ndërsa, shprehjet e
vërteta i gjejmë në rreshtat 8, 14, 20. Ashtu si operatorët aritmetikë edhe
operatorët e krahasimit kanë një prioritet për përdorimin e tyre. Tabela e
mëposhtme tregon prioritetin e operatorëve të krahasimit bashkë me ato
aritmetikë dhe drejtimin se si krahasojnë këta operator.

Operatori Funksioni Vlerë dhënia


( ... ) Kllapat nga e majta në të djathtë
* Shumëzim nga e majta në të djathtë
/ Pjesëtim
% Modulor
+ Mbledhje nga e majta në të djathtë
- Zbritje
< Më i madh nga e majta në të djathtë
<= Më i vogël
> Më i madh se
>= Më i vogël se
== E barabartë me nga e majta në të djathtë
!= E ndryshme nga
= barazimit nga e djathta në të majtë

KUJDES: Mos ngatërroni operatorin (=) me operatorin (==). Të dy këta operator janë të ndryshëm.
Operatori (=) quhet operatori i vlerë dhënies ose i barazimit dhe jep vlerën nga e djathta në të majtë
ndërsa operatori (==) është operatori që krahason shprehjen e majtë me atë të djathtë dhe kurrë
anasjelltas.

4. Hyrje në algoritmike
Sikurse thamë në mësimet e para, ne krijojmë programe për të zgjidhur probleme. Zgjidhja e një
problem me ndihmën e kompjuterit ka të automatizuar vetëm ekzekutimin e programit që duhet të
konceptohet nga programuesi. Kjo është ndër arsyet kryesore përse njerëzit mësojnë gjuhë
programimi. Procesi I zgjidhjes së problemit me anë të një kompjuteri kalon nëpër disa faza:

1. Analiza e problemit dhe detajimi I tij


2. Ndërtimi I algoritmit të zgjidhjes
3. Shkrimi I programit
4. Ekzekutimi dhe testimi I programit

Pasi kemi specifikuar problemin, bëhet përshkrimi I detajuar I veprimeve që do kryhen për zgjidhjen
e tij. Ky përshkrim quhet algoritëm. Ndërtimi I algoritmit përbën fazën më kyç të zgjidhjes së
problemit. Algoritmi është një bashkësi veprimesh të përcaktuara që përshkruan zgjidhjen e
problemit. Ekzekutimi I algoritmit krijon një zinxhir veprimesh që kanë një fillim dhe një fund.
Sipas mënyrës së organizimit të veprimeve, algoritmet janë:
- Linearë – veprimet renditen njëri pas tjetrit dhe çdo veprim kryhet vetëm nji herë.
- Të degëzuar – sipas kushteve logjike, kryhet një varg veprimesh apo një varg tjetër.
- Ciklik – nji ose më shumë veprime kryhen në mënyrë të përsëritur.
Algoritmet shkruhen në gjuhë të ngjashme me gjuhët e programimit të quajtura ndryshe pseudokode.
Pseudokodi ndryshe nga gjuha e programimit nuk ka rregulla të caktuara dhe ndryshon në varësi të
programuesit.
Për shembull: Ndërtoni algoritmin që gjen dhe afishon shumën dhe prodhimin e dy numrave me
pseudokod

1. Lexo (numër1, numër2);


2. Shuma numër1 + numër2;
3. Prodhimi numër1 * numër2;
4. Afisho (Shuma, Prodhimi);
5. Fund.

Një mënyrë tjetër është paraqitja grafike me anë të bllokskemës e cila ndërtohet me figura
gjeometrike, ku secila prej tyre paraqet një veprim specifik.

Për shembull: Ndërtoni bllokskemën për llogaritjen e shumës dhe prodhimit të dy numrave.
Hapi I tretë I përdorimit të kompjuterit për zgjidhjen e njëproblem është përkthimi I algoritmit në
gjuhë të kuptueshme nga kompjuteri. Në shkrimin e programit duhet zbatuar rregulli I shkrimit të
sintaksës së gjuhës.

Shembulli I mësipërm është shkruar sipas rregullave të gjuhës C.

Procedura e ekzekutimit të një program në kompjuter ndryshon nga një system tek tjetri. Pasi
regjistrohet program, kompilohet dhe ekzekutohet me komandat përkatëse. Gjatë shkrimit të
programit, vendosjes së të dhënave apo ekzekutimit, mund të bëhen gabime të ndryshme të cilat
ndërpresin procesin. Disa gabime të tilla janë:
- Gabime sintaksore – kjo ndodh kur harrohen pikëpresjet, variabli deklarohet më shumë se nji
herë, nuk shkruhen saktë fjalët kyç, etj.
- Gabimet e ekzekutimit – gabime si pjesëtimi me zero nuk kapet nga kompilatori, ai detektohet vetëm
në ekzekutim. Në raste të tilla program modifikohet lehtësisht.
- Gabimet logjike – këto lloj gabimesh identifikohen me vështirësi. Nëse një formulëështë shkruar
gabim nuk jep problem në ekzekutim apo kompilim por do të nxjerrë rezultat të gabuar.

6. Ndërtimi i Algoritmave bazë me anë të bllokskemave e pseudokodit.


Algoritmi dhe bllokskema përfshijnë tre llojet e mëposhtme të strukturave të kontrollit.
1. Sekuenca: Në strukturën e sekuencës, pohimet vendosen njëra pas tjetrës dhe ekzekutimi
zhvillohet duke filluar nga lart e poshtë.
2. Degëzimi (Përzgjedhja): Në kontrollin e degës, ekziston një kusht dhe sipas kushtit, arrihet
një vendim i VËRTETË ose FALSE. Në rastin e VËRTETË, një nga të dy degët është
kontrolluar; por në rastin e gjendjes FALSE, tjetri merret alternativa. Në përgjithësi, 'IF-
THEN' përdoret për të përfaqësuar kontrollin e degës.
3. Loop (Ciklet): Loop ose Ciklet lejojnë ekzekutimin e një deklarate (ave) në mënyrë të
përsëritur bazuar në gjendje të caktuar të lakut p.sh. ciket WHILE, FOR.

Hapat për shkrimin e algoritmeve:


Hapi 1 Përcaktoni input-in e algoritmit
Hapi 2 Përcaktoni variablat
Hapi 3 Skiconi veprimet e algoritmit
Hapi 4 Nxirrni rezultatet e veprimeve të algoritmit tuaj

Shembull:

Algoritmi Bllokskema
Hapi-1 Fillim Fillim

Hapi-2 Vendos vlerat , N, R


Vendosvlerat , N, R
Hapi-3 SI = (P x N x R) / 100.0

Hapi-4 Shfaq SI F
SI = (P x N x R) / 100.0L
Hapi-5 Ndalo

Siperfaqja = L x L

Printo SI

Ndalo
Megjithëse pseudokodi është një përshkrim pa sintaksë i një algoritmi, ai duhet të sigurojë një
përshkrim të plotë të logjikës së algoritmit në mënyrë që kalimi prej tij në zbatim të jetë thjesht një
detyrë e përkthimit të secilit rresht në kod duke përdorur sintaksën e çdo gjuhe programimi.
Pse të përdoret pseudokodi?
- Lexueshmëri më e mirë.
Shpesh, programuesit punojnë së bashku me njerëz nga fusha të tjera, të tilla si matematikanë,
partnerë biznesi, menaxherë, etj. Përdorimi i pseudokodit për të shpjeguar mekanikën e kodit do ta
bëjë komunikimin ndërmjet sfondeve të ndryshme më të lehtë dhe më efikas.
- Lehtësoni ndërtimin e kodit.
Kur programuesi kalon procesin e zhvillimit dhe gjenerimit të pseudokodit, procesi i shndërrimit të
tij në kod real të shkruar në çdo gjuhë programimi do të bëhet shumë më i lehtë dhe më i shpejtë
gjithashtu.
Një pikë e ndërmjetme midis diagramës dhe kodit.
- Të veprojë si një pikë fillestare për dokumentacionin.
Dokumentacioni është një aspekt thelbësor i ndërtimit të një projekti të mirë. Shpesh, fillimi I
dokumentacionit është pjesa më e vështirë. Sidoqoftë, pseudokodi mund të përfaqësojë një pikë të
mirë fillestare për atë që duhet të përfshijë dokumentacioni.
- Zbulimi dhe rregullimi më i lehtë i defekteve në kod.
Meqenëse pseudokodi është i shkruar në një format të lexueshëm nga njerëzit, është më lehtë të
redaktoni dhe zbuloni problemet para se të shkruani në të vërtetë një rresht të vetëm kodi. Redaktimi
i pseudokodit mund të bëhet në mënyrë më efikase sesa testimi, korrigjimi i gabimeve dhe rregullimi
i kodit aktual.
 Ndërtimet kryesore të pseudokodit
Thelbi i pseudokodit është aftësia për të përfaqësuar 6 struktura programimi (të shkruara gjithmonë
me shkronja të mëdha): SEQUENCE, WHILE, REPEAT-UNTIL, FOR, CASE dhe IF-THEN-
ELSE. Këto struktura - të quajtura edhe fjalë kyçe - përdoren për të përshkruar rrjedhën e kontrollit
të algoritmit.
SEKUENCA - paraqet detyra lineare të kryera në mënyrë sekuenciale njëra pas tjetrës.
WHILE- një cikël me një kusht në fillim të tij.
REPEAT-UNTIL një cikël me një gjendje në fund.
FOR një mënyrë tjetër cikli.
IF-THEN-ELSE një deklaratë e kushtëzuar që ndryshon rrjedhën e algoritmit.
CASE forma e përgjithësimit të IF-THEN-ELSE.
- Rregullat e shkrimit të pseudokodit
Kur shkruan pseudokod, çdo programues ka stilin e tij të paraqitjes së gjërave pasi që është lexuar
nga njerëzit dhe jo nga një kompjuter; rregullat e saj janë më pak rigoroze se sa ato të një gjuhe
programimi. Sidoqoftë, ekzistojnë disa rregulla të thjeshta që ndihmojnë që pseudokodi të kuptohet
nga të gjithë.
- Gjithmonë shkruani me germë fjalën fillestare (shpesh një nga 6 konstruktet kryesore).
- Keni vetëm një pohim për rresht.
- Synon për të treguar hierarkinë, për të përmirësuar lexueshmërinë dhe për të treguar
konstruksionet e vendosura.
- Gjithmonë mbaroni seksionet multiline duke përdorur ndonjë nga fjalët kyçe END (END-IF,
END-WHILE, etj.).
- Mbani gjuhën e programimit të deklaratave tuaja të pavarura.
- Përdorni domenin e emërtimit të problemit, jo atë të implementimit. P.sh., "Shtoni mbiemrin
në emër" në vend të "emër = i parë + i fundit".
- Mbajeni të thjeshtë, konçiz dhe të lexueshëm.
Ndjekja e këtyre rregullave ju ndihmon të gjeneroni pseudokod të lexueshëm dhe të jeni në gjendje
të njihni një jo të shkruar mirë.

Shembull:

7. Struktura e të dhënave
Një program kompjuterik është një bashkësi udhëzimesh për të kryer një detyrë specifike. Për këtë,
një program kompjuterik mund të ketë nevojë të ruajë të dhëna, të marrë të dhëna dhe të kryejë
llogaritjet mbi të dhënat.
Një strukturë e të dhënave është një vendndodhje e emëruar që mund të përdoret për të ruajtur dhe
organizuar të dhënat. Dhe, një algoritëm është një koleksion hapash për të zgjidhur një problem të
veçantë. Strukturat dhe algoritmet e të dhënave na lejojnë të shkruajmë programe kompjuterike
efikase dhe të optimizuara.
Një strukturë e të dhënave është një format i specializuar për organizimin, përpunimin, marrjen dhe
ruajtjen e të dhënave. Ekzistojnë disa lloje themelore dhe të përparuara të strukturave të të dhënave,
të gjitha të dizajnuara për të rregulluar të dhënat që i përshtaten një qëllimi specifik. Strukturat e të
dhënave ua lehtësojnë përdoruesve qasjen dhe punën me të dhënat që u nevojiten në mënyra të
përshtatshme. Më e rëndësishmja, strukturat e të dhënave krijojnë organizimin e informacionit në
mënyrë që makinat dhe njerëzit ta kuptojnë më mirë atë.
Në shkencën kompjuterike dhe programet kompjuterik, një strukturë e të dhënave mund të zgjidhet
ose të projektohet për të ruajtur të dhëna me qëllim të përdorimit të tyre me algoritme të ndryshme.
Në disa raste, veprimet themelore të algoritmit janë bashkuar fort me modelin e strukturës së të
dhënave. Çdo strukturë e të dhënave përmban informacion në lidhje me vlerat e të dhënave,
marrëdhëniet midis të dhënave dhe - në disa raste - funksionet që mund të zbatohen në të dhëna.
Për shembull, në një gjuhë programimi të orientuar drejt objektit, struktura e të dhënave dhe metodat
e saj janë të lidhura së bashku si pjesë e një përkufizimi të klasës. Në gjuhët jo të orientuara nga
objektet, mund të ketë funksione të përcaktuara për të punuar me strukturën e të dhënave, por ato
nuk janë teknikisht pjesë e strukturës së të dhënave.

 Pse janë të rëndësishme strukturat e të dhënave?


Llojet tipike të të dhënave bazë, të tilla si numrat e plotë ose vlerat me pikë notuese, që janë të
disponueshme në shumicën e gjuhëve të programimit kompjuterik janë përgjithësisht të
pamjaftueshme për të kapur qëllimin logjik për përpunimin dhe përdorimin e të dhënave. Megjithatë,
aplikacionet që marrin, manipulojnë dhe prodhojnë informacion, duhet të kuptojnë se si duhet të
organizohen të dhënat për të thjeshtuar përpunimin.
Pesë faktorë që duhet të merren parasysh kur zgjidhni një strukturë të të dhënave përfshijnë sa vijon:
- Çfarë lloj informacioni do të ruhet?
- Si do të përdoret ai informacion?
- Ku duhet të vazhdojnë, ose të ruhen të dhënat, pasi të krijohen?
- Cila është mënyra më e mirë për të organizuar të dhënat?
- Cilat aspekte të menaxhimit të rezervimit të kujtesës dhe ruajtjes duhet të merren parasysh?
- Si përdoren strukturat e të dhënave?
Në përgjithësi, strukturat e të dhënave përdoren për të zbatuar format fizike të llojeve abstrakte të të
dhënave. Strukturat e të dhënave janë një pjesë thelbësore e hartimit të programeve efikasë. Ato
gjithashtu luajnë një rol kritik në hartimin e algoritmeve dhe mënyrën se si ato algoritme përdoren
brenda programeve kompjuterike.
Gjuhët e hershme të programimit - të tilla si Fortran, C dhe C ++ - u mundësuan programuesve të
përcaktojnë vetë strukturat e tyre të të dhënave. Sot, shumë gjuhë programimi përfshijnë një
koleksion të gjerë të strukturave të të dhënave të ndërtuara për të organizuar kodin dhe
informacionin. Për shembull, listat dhe fjalorët e Python, dhe vargjet dhe objektet JavaScript janë
struktura të zakonshme të kodimit që përdoren për ruajtjen dhe rikuperimin e informacionit.

 Disa shembuj se si përdoren strukturat e të dhënave përfshijnë sa vijon:


- Ruajtja e të dhënave.
- Menaxhimi i burimeve dhe shërbimeve.
- Shkëmbimi i të dhënave.
- Renditja dhe renditja.
- Indeksimi.
- Shkallëzueshmëria.
 Karakteristikat e strukturave të të dhënave
Strukturat e të dhënave shpesh klasifikohen sipas karakteristikave të tyre, për shembull:

- Linear ose jo linear.


Kjo karakteristikë përshkruan nëse artikujt e të dhënave janë rregulluar në renditje të njëpasnjëshme,
të tilla si me një grup, ose në një sekuencë të parenditur, të tilla si me një grafik.
- Homogjene ose heterogjene.
Kjo karakteristikë përshkruan nëse të gjithë artikujt e të dhënave në një depo të caktuar janë të të
njëjtit lloj. Një shembull është një koleksion i elementeve në një grup, ose i llojeve të ndryshme, të
tilla si një lloj itë dhënave abstrakte i përcaktuar si një strukturë në C ose një specifikim i klasës në
Java.
- Statike ose dinamike.
Kjo karakteristikë përshkruan se si përpilohen strukturat e të dhënave. Strukturat statike të të
dhënave kanë madhësi fikse, struktura dhe vendndodhje të kujtesës në kohën e përpilimit. Strukturat
dinamike të të dhënave kanë madhësi, struktura dhe vendndodhje kujtese që mund të tkurren ose
zgjerohen, varësisht nga përdorimi.

 Llojet e të dhënave
Nëse strukturat e të dhënave janë blloqet ndërtimore të algoritmeve dhe programeve kompjuterikë,
llojet e të dhënave primitive - ose bazë - janë blloqet ndërtuese të strukturave të të dhënave. Llojet
tipike të të dhënave bazë përfshijnë sa vijon:

- Boolean, i cili ruan vlerat logjike që janë ose të vërteta ose të gabuara.
- Integer, i cili ruan një gamë në numrat e plotë matematikorë - ose numërimin e numrave.
- Numrat me pikë notuese, të cilat ruajnë një paraqitje formulore të numrave realë.
- Numrat me pikë fikse, të cilat përdoren në disa gjuhë programimi dhe mbajnë vlera reale, por
menaxhohen si shifra në të majtë dhe në të djathtë të pikës dhjetore.
- Karakter, i cili përdor simbole nga një hartë e përcaktuar e vlerave të plota në simbole.
- Treguesit, të cilat janë vlera referuese që tregojnë vlera të tjera.
- String, i cili është një varg karakteresh i ndjekur nga një kod ndalimi - zakonisht një vlerë "0"
ose menaxhohet duke përdorur një fushë gjatësi që është një vlerë e plotë.

8. Editorët e Programimit
Një editor ështënjë mjedisiintegruarpërzhvillim iquaturndryshe: integrated development
environment (shkurt IDE). IDE
ështënjë aplikacionsoftuerik qëioforn programerëvetëkompjuterit njëmjedistëplotë me
mjetepër zhvillimin e softuerëve. Zakonishtnjë IDE përbëhetngaeditoriikoditburimor,
mjetetpërndërtimin e automatizuardhe debugger.
Gjuhët e programimit C dhe C++ janëgjuhëprogramimiqë duan njëmjediszhvillimiparaprak
(IDE- Integrated Development Environment) icililuanrolin e editorit,
kompilatoritdheekzekutuesit/interpretuesittëkodit.Ekzistojnëllojetëndryshme IDE me ose pa pagesë,
përsistemetëndryshme operative apo tëpavarurngaplatforma, tëbazuaranë web
etj.Mëposhtëparaqitendisamjedisetëzhvillimittëkodit (IDE) përgjuhëneprogramimit C dhe C++, me
burimetëhapura (pa pagesë) dhetëpavarurangaplatforma(pavaarsishtsistemitoperativ).

1. CodeLite
2. Code::Blocks
3. Bloodshed 
4. Zinjal
5. ATOM

 Mjedisetëzhvillimittëkodit Java
Mëposhtëlistohendisa IDE pa pagesëqëmundtëpërdorenpër java. Këto IDE
ofrojnëdisakarakteristikasi: ndërtimiiaplikacioneve java, debugging, inspektimkodi, asistencëkodi,
testimi, ndërtimin e ndërfaqevevizuale GUI editor, modelimtëdhënash, ndërtim query-shetj.
 NetBeans
NetBeans ështënjë IDE opensource e shkruajturnë Java. NetBeans IDE suportonzhvillimin e
tëgjithaaplikacioneve java (Java SE, JavaFX, Java ME, web, EJB dheaplikacionet mobile). NetBeans
është modular nëdizenjimqë do tëthotëmundtëzgjerohet me pjesëtëtretasi plugin-e
tëndryshmetëzhvilluarpërNetBeans.NetBeansështë e
pavarurngaplatformapraekzekutohetnëtëgjithasistemet operative sinë Microsoft Windows, Mac OS
X, Linux, Solaris dheplatformatëtjeraqëjanëkompatibël me JVM.
 Eclipse
Eclipse ështënjëtjetër Java IDE përzhvilluesitdheprogramuesit e shkruajturnë Java. Eclipse
julejontëshkruaniaplikacionetëndryshme Java tëpavarurangaplatformasiaplikacione, web, desktop
etj. Eclipse zotëronliçencën e Eclipse Public License dheështë e vlefshmenë Windows, Mac OS X
dhe Linux.
 Android Studio
Android Studio java IDE nga Google ështëzhvilluarkryesishtpërndërtimin e aplikacioneve Android.
Android Studio është pa pagesë, nën e liçencën e Apache License 2.0 dhemundtëshkarkohetpër
Windows, Mac OS X dhe Linux.
 lueJ
BlueJështënjëtjetër (IDE) përgjuhën e programimit java,
zhvilluardhedizenjuarkryesishtpërarsyeedukimiosetëmësimittëgjuhëvetëprogramimittëorientuaranga
objektet.  BlueJështëfalasdhenënliçencën e GNU GPL.
 jEdit
jEditështënjëtekst editor ishkruajturnë java, ekzekutohetnësistemet operative Mac OS X, OS/2, Unix,
VMS dhe Windows. Ky editor është pa pagesënënliçencën e 2.0.
Në Linuxkemimjetetëndryshmeqëmundtënandihmojnënëkrijimindhezhvillimin e
aplikacioneve. Linux ështëpadyshimnjëngasistemet e rekomanduarapërtëkryerzhvillimin e
aplikacioneve.Disangamjedisetmëtëmiratëzhvillimittëintegruar (IDE) qëmundtëpërdorimnë
Linux.
NetBeans është një IDE popullorendër-platformë C / C ++ me mbështetjepërgjuhët e
tjeratëprogramimit. Ai përfshinllojetëndryshmetëshabllonevetëprojektitpër C / C ++
dheaplikacionetmundtëndërtohen duke përdorurbibliotekatstatikedhedinamike.
Përmëtepër, jumundtëripërdornikodintuajekzistuespërtëndërtuarprojektettuaja,
dhegjithashtupërdornizvarritjedherëniepërtëimportuarskedarëbinarënëtëpërtëndërtuaraplikacionengaf
illimi.
Nëkarakteristikatkryesoretëtijmundtëtheksohen:
- Redaktuesi C / C ++ ështëiintegruarmirë me seancatëshumta, mjetedhekorrigjuesin e GNU
GDB.
- Mbështetjepërndihmën e kodit
- Krijonidheekzekutoni teste C / C ++ ngabrenda
- Mbështetjepërformatet e kompresimit .tar, .zip dheshumëskedarëtëtjerëarkivi
- Mbështetjepërpërpiluesit e shumtësi GNU, Clang / LLVM, Cygwin, Oracle Solaris Studio
dhe MinGW
- Shfletimiiskedarit
 Kodi :: Blocks
Ky ështënjëmjedisizhvillimit me burimtëhapurilicencuarnënlicencën e përgjithshmepublike
GNU. Ka mbështetjepërpërpiluesit e shumtë, ndërtëcilëtmundtëgjejmë MinGW / GCC, Digital Mars,
Microsoft Visual C ++, Borland C ++, LLVM Clang, Watcom, LCC dhe Intel C ++ Compiler.

Ka njësistemtëpersonalizuarndërtimidhembështetjeopsionaletëndërtimit.

CodeBlocksështënëdispozicionpër Windows, Linux dhe macOS dheështëtransferuarnë FreeBSD,


OpenBSD dhe Solaris.

Kjo IDE ështëkrijuarpërtëqenëshumëizgjerueshëmdheplotësishtikonfigurueshëm.

Nëmes karakteristikatkryesoreqëmundtënxjerrimnëpah ngaky program mundtëgjejmë:

- Hapësirapunepërtëkombinuarshumëprojekte.
- Hapësira e punës adaptive
- Shfletuesiiprojektit; pamje e skedarëve, simboleve (tëtrashëguara, etj.), klasave, burimeve.
- Redaktues me skedarë, skedarëtëshumtë.
- Ngjyrosja e sintaksës
- Automompletimiikodit.
- Lista zbritëse.
- Kërkimet e avancuarapërvargjetbrendaskedarëve: aktual, ihapur, projekt, hapësirë pune,
nëdosje).
- Mbështetjepërpërpiliminparalel (duke përdorurshumëprocesorë / bërthama).
 Klion
Përdoretpërzhvillimin e gjuhëveprogramuese C dhe C ++, CLionështënjë IDE ndër-
platformekështuqëmundtëpërdoretnë Linux, macOS dhe Windows tëintegruar me sistemin e
ndërtimitCMake.
Versionifillestar ështëipajtueshëm me përpiluesit e GNU Compiler Collection (GCC) dhe Clang dhe
GDB Debugger, LLDB dhe Google Test. Përveç C dhe C ++,
CLion mbështetgjuhëtëtjeradirektosepërmesshtojcave: Kotlin, Python, Rust, Swift dhetëtjera.
CLion, sishumë IDE, ka funksionin e plotësimittëkoditlehtë, me
tëcilinCLionmundt'jundihmojëtëkursenishumëkohënëplotësimin e sintaksëssëkodittuajqë po
shkruaninëtë.
Dhe jo vetëmkaq, CLiongjithashtu ka shabllonetësintaksëssëkodittë para-formatuar me
tëcilatjutregonisintaksëndhe ajo do tëgjenerojëkodin, gjithashtu duke jutreguarsintaksat e
mundshmedhekështutëpërmirësonishpejtësinë e shkrimit.
 PyCharm
Një IDE ndër-platformë e përdorurnëfushën e programimit, Pycharmvjen me njëtastierë python
kumundtëshkruashskriptetkuriekzekuton. Dritaretmundtëkalohennëmodalitetin e lidhjes,
modalitetinlundrues, modalitetin e dritaresosendarjennëvarësitëpreferencëssuaj.
Karakteristikatkryesoretëtijmundtëtheksohen:
- Ndihmadheanaliza e kodimit, me plotësimin e kodit, sintaksëndhetheksimin e gabimeve.
- Navigimiiprojektitdhekodit, pamjet e specializuaratëprojektit, pamjet e
strukturëssëskedarëvedhehedhjet e shpejta midis skedarëve, klasave,
metodavedhepërdorimeve
- Refactoring Python: përfshinriemërtimin, metodën e nxjerrjes, futjen e ndryshores, futjen e
konstante, tërheqjenlart, shtytjenposhtëdhetëtjerët
- Mbështetjepërkornizatnë internet: Django, web2py dhe Flask
- Ndërprerësiikorrigjuari Python
- Testimiintegruarinjësisë, me mbulimkodirresht pas rreshti
- Zhvillimiimotorittëaplikacioneve Google Python
- Integrimiikontrollittëversionit: Ndërfaqja e unifikuar e përdoruesitpër Mercurial, Git, Subversion,
Perforce dhe CVS me listat e ndryshimevedhebashkohen.
 KDevelop
Ështënjëmjedisiintegruarzhvillimi përsistemet GNU / Linux-Unix, sidhepër Windows, gjithashtu
duke planifikuar ta lëshojnëatënëversionin Mac OS, KDevelop ështëbotuarnënlicencën GPL dhe e
destinuarpërpërdorimnëmjedisingrafik KDE, megjithësepunonedhe me mjedisetëtjera, të tilla si
Gnome.
Ndryshengashumëndërfaqetëtjeratëzhvillimit, KDevelopnuk ka përpiluesin e vet,
prandajmbështetettegccpërtëprodhuarkodbinar. Versioniitijifunditështëaktualishtnëzhvillim e
sipër punon me gjuhëtëndryshmeprogramimi.
Prejtyremundtënxjerrimnëpahdisasi C, C ++, PHP dhe Python. Gjuhët e tjeratë tilla si Java, Ada,
SQL, Perl dhe Pascal, sidheskriptetpër Bash nukjanëtransferuarendenë KDevelop4,
megjithëseatomundtëmbështetennëtëardhmen.
Karakteristikat e përmenduramëposhtëjanëspecifikepërmjedisin e zhvillimit:
Redaktuesikoditburimor me theksimin e sintaksësdhedhëmbëziminautomatik (Kate).
Menaxhimiillojevetëndryshmetëprojekteve, të tilla siCMake, Automake, qmake
(përprojektetëbazuaranëbibliotekën Qt dhe Ant (përprojektetëbazuaranë Java).
Shfletuesi midis klasavetëaplikacionit.
Front-end përgcc, grupiipërpiluesit GNU.
Front-end përkorrigjuesin e GNU.
Përfundimiautomatikikoditnë C dhe C ++.
Lejonkontrollin e versionit.

9. Hyrjenëprogramimnëgjuhën C.

Programiminëgjuhën C përfshindy pika tërëndësishmetëcilatjanë:


1. Procesiiprogramimit:
- Editor teksti
Shkruanprogramin
- Ruanskedarinnë disk
Kompilator
Konvertoninstruksionetnëkodtëkuptueshëmpërkompiuterin
Programiekzekutohetvetëmpasiprocesiikompilimitnuknxjerrgabime

2.Planifikimiindërtimittëprogramitireferohetetapavetëmëposhtëm:

- Përcaktimiiproblemit
- Përcaktimiirezultatevetëpritshme
- Copëzimiiprogramitnëhapalogjike
- Përcaktimiitëdhënavehyrëse
- Shkrimiiprogramitnë editor
- Kompilimiiprogramit
- Testimiiprogramit
- Mëshumë se 40 fjalëkyce, numërimadhoperatorësh

 Procesiikompilimitrealizohetsinëskemën e paraqiturmëposhtë:

Çdo program nëgjuhënCduhet ta përmbajëfunksioninmain (), tëcilitnë fund


tëprogramitishoqërohetedhekomanda return 0.ProgramimëithjeshtënëgjuhënCmundtëshkruhetvetëm
me këtodykomandadhe do tëduket:
int main()
{
return 0;
}
Komandareturn 0 e paraqetkomandën e fundittëfunksionitmain (), kursevlera0 e
shënuarnëvazhdimtëkësajkomandeshfrytëzohetpërtëtreguar se programi ka përfunduar pa gabime.
Nëseekzekutohetprogramiidhënë, sirezultatnuk do tëfitohetasgjë,
sepsenëpjesënkushkruhenkomandat, përkatësishtnëbllokunbrendakllapavetëmëdha,
osesiçthuhetbrendatrupittëprogramit, nuk ka asnjëkomandëqëjepndonjërezultat.
Programinëfjalëfizikishtmundtëshkruhetmëshkurt:
int main ()
{return 0;}
oseedhevetëmnënjërresht:
int main () {return 0;}
Komandanërreshtin e dytëtëprogramitfillon me simbolin# (shenjapërnumër)
dheparaqetnjëdirektivëparaprocesorike. Kjokomandëijepetpjesëssëkompilatorit, e
cilaquhetparaprocesor, për ta insertuarnëfillimtëprogramitfajlliniostream, para se
tëfillojëkompilimiitij. Ky file bënpjesënëgrupin e file-vetëcilëtpërpunohenngaprocesori para se
tëkompilohetprogramidhelidhet me komandatpërleximdheafishim (nga Input-Output-Stream), p.sh.,
siçështënë program komandapërafishimprintf.
Direktivausing, e cilagjendetnërreshtin e tretëtëprogramit, e njoftonkompjuterin se
komandatqëshfrytëzohennë program gjendennëhapësirën meemrastd.

 Ekzekutimiiprogramit
/* Filename: C1FIRST.C
  Kërkon një emër, afishon emrin 5 herë, bie sinjali */
#include <stdio.h>
#define BELL '\a'
main()
{
   int ctr=0;             /* Variabl Integer për të numëruar në cikël */
   char fname[20];  /* Përcakton vektor karakteresh për të ruajtur emrin */
   printf("Si quheni? ");        /* Pyet përdoruesin */
   scanf(" %s", fname);            /* Merret emri nga tastiera */
   while (ctr < 5)                      /* Cikël për të afishuar emrin */
   {                                          /*5herë        */
     printf("%s\n", fname);
     ctr++;
   }
   printf("%c", BELL);                    /* Bie sinjali */
   return 0;
}
 Karakteret.  

 Karakterettëcilat do tëpërdorengjerësishtëgjatëprogramimitnë C përfshijnë:

         ‘ “
         () , {}, []
         /* */
         #
         %

 Identifikuesit

Njësitëelementarememoruesenëtëcilatvendosentëdhënatdherezultatet e programeveemërohen duke


përdoruridentifikues. Kështu, identifikuesitpërdorenpëremrat e konstanteve, variablave,
nënprogramevedhestrukturavetëtjeratëpërfshiranë program.
Identifikuesitformohensikombinimishkronjave (a, b, ..., z, A, B, ..., Z),numrave(0, 1, 2, ..., 9)
dhenënviza(_). Simboliiparënëidentifikatorëmundtëjetëshkronjëosenënvizë. Kështu, p.sh.,
siidentifikuesmundtëmerren:
dita

Koha5
distanca_mes_rreshtave
TemperaturaDitore
_Fillimi
a234b35
P8
Nuklejohetqësimboliiparënëidentifikimtëjetënumër, oseidentifikuesitëpërmbajësimbolespeciale
(simboleqënukjanëshkronjaosenumra), p.sh., siçjanë: !, $, %, +, >etj. Kështu, p.sh. do
tëishtegabimnësezgjedhimsiidentifikueskombinimet e simboleve: 4muaj, nata+dita, ab jeta, US$,
Libri#Rend, %fitimi.
Shkronjat e alfabetitshqipë, Ë, çdheÇnukmundtëpërdorengjatëformimittëidentifikatorëve.

 Operatorët
Gjatëshkruarjessëshprehjevepëroperim me tëdhëna, nëgjuhën C shfrytëzohenoperatorëtëndryshëm.
Mëkryesorëtmestyrejanë: operatoriishoqërimit, operatorëtaritmetik,
operatorëtrelacionalëdheoperatorëtlogjikë.

 Operatoriishoqërimit
Përmesoperatorittëshoqërimit= (barazimit), variablëssëshkruarnëanën
emajtëtëoperatoritishoqërohetvlera e cilagjendetnëanën e djathtëtëkëtijoperatori.Kështu, p.sh.,
përmesshprehjeve:
z=5;
a=2.384;
beta=-37.4;
variablave z, a dhe beta u shoqërohenvlerat e shënuaranëanët e djathtatëbarazimevepërkatëse. Para se
tëshkruhennë program shprehjet e dhënamësipër, përvariablatqëfigurojnënëanën e
majtëtëbarazimitduhetpatjetërtëdeklarohentipetvarësishtngavleratqë u shoqërohenatyre.
Vleraqëiështëshoqëruarnjë variable ngel e pandryshuarderisanukishoqërohetnjëvlerë e re.

Operatorëtaritmetik

Operatori Operacioni

+ Mbledhja

- Zbritja

* Shumëzimi

/ Pjesëtimi

% Moduli

Përdorimiikatëroperatorëvetëparë (+, -, *dhe/) ështëinjëjtë me përdorimin e


operatorëvepërkatësaritmetikorë. Kurseoperatori%sirezultat e jepmbetjen,
përkatësishtmodulinngapjesëtimiiplotëidynumravetëplotë.

 Operatorëtlogjikë
Përkrahasimin e mëshumëshprehjevenjëkohësishtpërdorenoperatorëtlogjikëtëdhënënëtabelë:
Operatori Operacioni Shembull Rezultati

&& Konjuksioni, AND (x < 7) && (y ==5) true

|| Disjunksioni, OR (x != 2) || (x > 3) false

! Negacioni, NOT !(y > 4) false

 Operatoriikushtëzuar
NëgjuhënCpërdoretnjë operator iveçantëdypjesësh?:,përllogaritjetëkushtëzuar.

y = k ? a : b;
Kompjuteri, saherëqëitakonshprehjet e kësajforme, nësekushtikështëisaktë,
variablësyiandanvlerën e shprehjesa, përndrysheiandanvlerën e shprehjesb.

 Klasifikimidherregullimiigabimeve
- Gabimesintakse
- Kompilatorijepgabim
- Gabimelogjike
- Programiekzekutohetsaktë
- Rezultatiigabuar

 Studimiinjëprogrami

/* Filename: C2FIRST.C
  Program në C që paraqet komentet dhe tregon variablat dhe deklarimet e tyre */
#include <stdio.h>
main()
{
   int i, j;   /* Këto 3 rreshta deklarojnë 4 variabla */
   char c;
   float x;
   i = 4;       /* i dhe j marrin numra të plotë */
   j = i + 7;
   c = 'A';     /* karakteret vendosen nv thonjëza */
   x = 9.087;   
   x = x * 4.5; /* Ndryshon vlerën e x */
 /* Dërgon vleren e variablave në ekran */
   printf("%d %d %c %f", i, j, c, x);
   return 0;   /* Mbaron programin */ Rezultati: 4 11 A 40.891499

 Formatimiiprogramitpërfshin:

 Përdorimiihapësirave

 Gërmat e mëdhadhetëvogla

 Funksioni main, kllapat, komentet

 Përdorimiihapësiravekoleksionfunksionesh
 Funksioninkryesor: main
 Blloku: pjesabrendakllapave
 Cdoinstruksionmbaron me;
 /* pjesabrendaështëkoment */
 // komentderinë fund tërreshtit

#include <stdio.h>
#include <conio.h>
int main(){
 int x=2;
 int y=3;
printf("%d",x);//afishimi nr 1
printf("\n");
 printf("%d",x);//afishimi nr 2
 printf("\n");
printf("%s%d","x=",x);//afishimi nr 3
 printf("\n");
 printf("%d%d",x,y);//afishimi nr 4
 printf("\n");
     printf("%s%d%s%d","x=",x,"y=",y);//afishimi nr 5
     printf("\n");
     printf("\n");//afishimi nr 6 --- nukafishohetasgje
     printf("\n");
     scanf("%d%d",&x,&y);//afishimi nr 7 --- nukafishohetasgje
     getch();
     return 0;
}

 Variablat (Ndryshoret)

- Atributet
o Variablatkanëemër
o Variablatkanë tip
o Variablatkanëvlerë
- Deklarimi
o Brenda njëfunksioni
o Përparaemrittënëefunksioni

main()
{
   int i, j;    // 2 rreshta deklarojne 3 variabla
   char c;

 Tipet e variablave

 Emri Tipi  Tipi Rangu


Char Character char -128 to 127
unsigned char Unsigned character unsigned_char 0 to 255
signed char Signed character (same as char)
signed_char -128 to 127
Int Integer
int -32768 to 32767
unsigned int Unsigned integer
signed int Signed integer (same as int) unsigned_int 0 to 65535
short int Short integer signed_int -32768 to 32767
unsigned short int Unsigned short integer short_int -32768 to 32767
signed short int Signed short integer (same as
unsigned_short_int 0 to 65535
short int)
Long Long integer signed_short_int -32768 to 32767
long int Long integer (same as long) long_int -2147483648 to 2147483647
signed long int Signed long integer (same as signed_long_int -2147483648 to 2147483647
long int)
unsigned long int Unsigned long integer float -3.4E+38 to 3.4E+38

Float Floating-point double -1.7E+308 to 1.7E+308


double Double floating-point long_double -1.7E+308 to 1.7E+308
long double Long double floating-point

 Deklarimiivariablave:

tipi emri;
psh.
int numri;
int shuma;
ose int numri, shuma;

Pranësekemidyose me shumëvariablatëtënjëjtit tip mundt'ideklarojmëatonënjerreshttëndara me


presje.
Variablatmundtëmarrinvleragjatëprogramitpsh:
numri= 5;
shuma = numri + 10;
Njeinstruksionitillëquhetinstruksion "vlerëdhënieje"

 Inicializimiivariablave:

Kur vlerëdhënia e njëvariablibëhetnëdeklarim


atëherëthuhet se e kemiinicializuaratëvariabël.
Psh:
int numri x=  5 ;
Afishimiinjëvariabli:
printf("%d",x);
Konstantet
Integer (numratëplotë)
String
"Gjuha C"    "123"    ""  "FSHN"
Karakter
'w'   'W'   'C'   '7'   '*'   '='   '.'   'K'

 Konstantet
Karakteret ndihmës Kuptimi
\a Alarm (the terminal's bell)
\b Backspace
\f Form feed (for the printer)
\n Newline (carriage return and line feed)
\r Carriage return
\t Tab
\v Vertical tab
\\ Backslash (\)
\? Question mark
\' Single quotation mark
\" Double quotation mark
\ooo Octal number
\xhh Hexadecimal number
\0 Null zero (or binary zero)

10.Struktura e tëdhënavenëgjuhën C.

 Rekursioni
Funksioni që e thërret veten e tij quhet rekursiv.
Rekursivitetiështënjëteknikëepërgjithshmeprogramimiezbatueshmenëprobleme të cilët mund të
definohen në marrëdhënie me veten. Marrim problemin efaktorialit,përrastin më poshtë:
Faktorialii0është 1. Faktorialiinumritpozitivn ështën –herëfaktorialii n-1.

intFactorial(unsignedintn)
{
returnn== 0?1: n*Factorial(n-1);
}
Për n e barabartë me 3, Tabela në vazhdim jep gjurmëte thirrjes sëfunksionitFaktorial.

Thirrja n n == 0 n * Factorial (n-1) Kthimi


e parë 3 false 3 * Factorial (2) 6
e dyta 2 fasle 2 * Factorial (1) 2
e treta 1 fasle 1 * Factorial (0) 1
e katërta 0 frue
Funksioni rekursiv patjetër të ketë më pak se një kusht të fundit
qëdotëjetëiplotësuar.Ndryshe,funksionidotathërrasëvetvetenderi sa runtime stack do të mbushet.
Funksioni Faktorial,për shembull, e ka kushtin e fundit n == 0
(Vëmendjepërvleratnnegativekykushtnuk dotëplotësohetdheFaktorialdotëdështoj).
Si rregull, të gjithë funksionet rekursive mund tërishkruhen duke përdorur përsëritjen. Në situata kur
numri i stack framestë përfshiramund tëjetëlirshëm i gjerë, versioni i përsëritur ështëinevojshëm.
Për faktorialin, për shembull,një argument shumë i madh,mundtë çojë në shumë stack frames. Një
version i përsëritjes është i nevojshëmnëkëtërast:
intFactorial(unsignedintn)
{
intresult=1;
while(n>0)result*=n--;returnresult;}

Njëshembullithjeshtëidemostrimittërekursivitetitështëfaktoriali:
n! = n*(n-1)*(n-2)* . . . * 1 
psh: 5! = 5*4*3*2*1
          = 5*(4*3*2*1)
          = 5*4!
Nërastin e përgjithshëm:
n! = n * (n-1)!
Prarastibazë: 0! = 1! = 1
dherastirekursiv n! = n * (n-1)! 
Prafunksionithërretvetveten me njënumërmëpakderisatëarrihetnërastinbazë.
Pra 5! = 5 * 4!
= 5 * 4 * 3!
= 5 * 4 * 3 * 2! 
= 5 * 4 * 3 * 2 * 1!
= 5 * 4 * 3 *2 * 1
 Shembuj:
1. Gjenifaktorialin e njënumri n.
int faktorial (int n){
        if(n==1) return 1;
        else
        return n*faktorial(n-1);
        }

2. Llogarisnishumën e n- termavetëvargutfibonaci. [f(0)=0; f(1)=1;..f(n)=f(n-1)+f(n-2)]


int fibonaci (int n){
    if((n==0)||(n==1)) return n;
    else return f(n-1)+f(n-2);
    }
3. Afishonielementet e tabelës t, me n elementenërendin e tyretënatyrshëm
void afishoNatyrshme(int t[],int n){
    if(n==1) printf("%d",t[0]);
    else
  {
        afishoNatyrshme(t,n-1);
        printf("%d",t[n-1]);
  }
}

Ushtrime:

1-Ndërtoni njëfunksion(iterativ+rekursiv) ne gjuhën C iciligjenshumën e elementevetënjëvektori.


2-Ndërtoni njëfunksion(iterativ+rekursiv) nëgjuhën C icili gjenfuqinë e njënumri.

- Stivat
Stivaështënjëstrukturëtëdhënashnëtëcilënshtohendhehiqentëdhënatsipasmodelit last in first
out(LIFO)

- AplikimetëStivës
Sistemikompjuterik e përdorstivëngjatëekzekutimittëprogramitpërtëruajturadresat e kthimittëfunksioneve,
variablatlokale,etj. Disakompjuteraipërdorinstivatpërtëkryerveprimematematike.
Ekzekutimiinjëfunksionirekursivparashikonqëtëdhënat me tëcilat po punohetnëmomentin
ethirrjesrekursivetëruhen. Këtotëdhëna/thirrjefshihenkurpërfundojnëveprimete brendshme
(mekanizmiLIFO).
Nëstivëruhenparametratdhevariablat locale.
Duke përdorurstivën, ështëgjithmonë e mundurqënjëprogram rekursivtëkthehetnëiterativ.
Shembull
Termipasardhësnëvargunfibonaccijepetsi:
fib (1) =1 fib (2) =1 niveliaksiomeosebazë
fib (k) = fib (k-1) + fib(k-2) përk > 2
Sekuenca e fibonacitmundtëkrijohetnëpërmjetnjëfunksionirekursivqëllogarittermin e k-tëtëvargut.

intfib(intk)
if (k=1) or (k=2) then f =1
else
f=fib(k-1)+fib(k-2)
return f
 Stivatstatikedhedinamike
Stivatstatikekanëkëtocilësi:
- Madhësifikse
- Mundtëimplementohen mevector
Stivatdinamikekanëkëtocilësi:

- Ndryshojnëpërmasatsipasnevojës
- Mundtëimplementohen me anëtëlistavetëlidhura.

 Veprimetnëstivë
Pop

Push

Supozojmëqëkeminjëstivë me numra integer e cilaruanmaksimumi 3 vlera.


Nëkëtëstivëekzekutojmëveprimet push tëmëposhtme:
push(5);

push(10);

push(15);

- Push
Gjendja e stivesh pas ekzekutimittëcdoveprimi push

Kthendheheqnjevlerengastiva

- Pop
Supozojmëqëekzekutojmëtreveprime pop tënjëpasnjeshmenëtënjëjtënstivë.

- isFull:njëveprimqëkthennjëvlerëbooleane.

Ështëidomosdoshëmpërstivatstatike. Kthen true kurstivaështë e mushur plot dhe false nëtëkundërt.


- isEmpty: njëveprimqëkthennjëvlerëbooleane.
Ështëinevojshempërtëgjithallojet e stivave. Kthen true nqsstivaështë bosh dhe false nëtëkundërt.
Funksioni pop përdornjë parameter me reference, num. Vleraqëhiqetngastivakopjohetnë num,
prandajmundtëpërdoretedhemë pas nëprogram..
- Stivadinamike
Stivadinamikendërtohet me anëtetënjëlistetëlidhurdhe jo me vektorsirastii pare.
Stiva e bazuarnëlistën e lidhur ka dyavantazhenëkrahasim me stivën e bazuarnëvektor.
Nukështë e nevojshmetëpërcaktohetmadhësiafillestare e stivës. Stivadinamikefillonsinjëlistë e
lidhurboshe duke u shtuar me nganjënyjesaherëqëthirretfunksionipush.
Stivadinamikenukështëasnjëherë plot përaqkohësasistemikompjuterik ka
memorietëlirënëdispozicion.
- Radha
Radha ështënjstrukturëtëdhënashqëruannjësekuenceelementesh.
Radha tëlejonaksesinnëelementet e sajsipas:
modelitfirst-in, first-out (FIFO).

Shembull: klientetqëpresinnëradhë, shërbehetipari ai qe ka ardhuripari.


 Veprimet ne radhë
Nënjësistem multi-user,
kërkesatpërprintimruhennëradhëndërkohëqëprinteriiplotësonkëtokërkesanjënënjëkohë.
Software tëcaktuarpërdorinradhënpërtëruajturinformacionin e marrënërrjet.
 Radha statikedhedinamike
Njëllojsistivaedheradhaimplementohetnëpërmjetvektoritosenepërmjetlistës.
Radha dinamike ka tënjëjtatavantazheqëkishtestivadinamikenëraport me
stivënstatike,radhëtjanësinjëstrukturëqë ka njëfillimdhenjëfund.

Dy veprimetbazënëradhëjanëenqueueand dequeue.
enqueuedo tëthotëtështoshnë fund tëradhës
dequeuedo tethotëtëheqëshnjë element ngafillimiiradhës

11.Algoritmatlinearë, tëkushtëzuardhecikliknëgjuhën C.

Nëoperatorëtkushtëzuesbënpjesëinstruksioniificilipërdoretpërekzekutimin e
njëkodinësenjëkushtështëivërtetë.
Sintaksa:
If (kushti)
{
//instruksionet
}
Kushtispecifikon se cilashprehje do tëvlerësohet. Nësekushtiështëivërtetë, do
tëekzekutoheninstruksionetbrendakllapavegjarpërueshe. Nësekushtinukështëivërtetë,
instruksionetthjeshtinjorohen, dhevazhdohetekzekutimiiprogramimitqëgjendet pas kushtitif.
Kushtetkontrollohenngaopratorëtoperacional.

Shembull:
/*teshkruhetnje program qe lexonnjenumerteplote n dhe
  paraqet ne ekrannjenjoftimkutetregoj se kynumerplotepjestohet me 5*/
  #include <stdio.h>
  #include <conio.h>
  int main ()
 {
   int numri;
   printf ("Futninjenumerteplote:\n");
   scanf ("%d", &numri);
   if(numri%5==0)
  printf ("Numriplotepjestohet me 5!");
else
      printf ("Numrinukplotepjestohet me 5!");
      getch ();
      return 0;
       }

Instruksioni else
Instruksioni if mundtëndiqetngainstruksioni else, iciliekzekutohetkur if është false.

Sintaksa:
If (kushti)
{
//instruksionet
}
Else
{
//instruksionet

Kompilatori do tëtestojëkushtet:

Nësekushtiështëivërtetë, atëherë do tëekzekutohettrupiif.


Nësekushtinukështëivërtetë, do tëekzekutohettrupielse.
Kur ështëvetëmnjëintruksionif/elsemundtëmosvendosenkllapatgjarpërueshetekelse.

shembull:
/* lexoningatastjera 3 numrateploteshfaqni ne ekrannjemesazhnese midis tyre ka 2 numrapozitivose
jo */
 #include <stdio.h>
  #include <conio.h>
  int main()
 {
  int a,b,c;
  int count=0;
printf("Jepninumrin a : \n");
  scanf("%d",&a);
  printf("Jepninumrin b : \n");
  scanf("%d",&b);
  printf("Jepninumrin c : \n");
  scanf("%d",&c);
  if(a>0)
count++;
  if(b>0)
  count++;
  if(c>0)
  count++;
  if(count>=2)
   printf("Midis tyre ka 2 numrapozitiv!");
   else
  printf("Midis tyrenuk ka 2 numrapozitiv!");
   getch();
   return 0;
}

Ushtrim:
Gjenimaximumin e 3 numraveqëlexohenngatastjera.

Strukturapërpërsëritje(cikli) mundësojnëbllok-
komandattërealizohenderisatëplotësohetnjënjëkushticatuar. Përsëritje e ciklitquhetiteracion.
Algoritmatlinearë,
tëkushtëzuardhecikliknëgjuhënC,përdorenpërpërseritjenenjëveprimiosebashkësiveprimesh.
Strukturatciklikekryesore :
 For
 While
 Do …While
StrukturatciklikeFor
Kjokomendëjulejontëshkruaninjëcikëliciliekzekutohetprejnjënumërspecifikherësh.

Sintaksa:

for (inicializimi; kushti; rritja)


{
instruksioni(et);
}
ose
for (vlerafilestare e numëruesit; kushtidhevlerapërfundimtare; hapirritësosezbritës)

Shembull

Tëshënohetprogramipërshtypjen e numrave duke përdorurciklin for.


#include <iostream>
using namespace std;
int main () {
for (int i=1; i<=7; i++) {
printf ("Jepninumrat: \n");}
return 0;
}
StrukturatciklikeWhile
Cikli while ështënjëndërstrukturatmëtëthjeshta. Tekycikëlsëparikontrollohet a ështëplotësuarkushti.
Nësekushtiështëplotësuar, ciklipërsëritet, nësekushtinukështëplotësuaratëherëmbaroncikli.
Sintaksa:

while (kushti)
{
instruksioni (et);
}

Shembull

Tëshkruhetprogrmiicili do tështypnumratprej 1 derinë 7.


Zgjidhje
#include <iostream>
using namespace std;
int main () {
int i=1;
while(i<=7) {
printf ("Jepninumrat: \n");
i=i+1;
}
}
StrukturatciklikeDO…While
Ky cikël e kontrollonvërtetësinë e kushtitnë fund tëprogramit. Ndryshengaciklet e tjera for dhe
while, tëcilattestojnëvërtetësinë e kushtitqënëfillimcikli do...while kontrollonvërtetësinë e kushtitnë
fund tëciklit. Cikli do...while ështëingjashëm me ciklin while. Ndryshimiivetëmështë se cikli
do...while ekzekutonciklintëpaktënnjëherë.

Sintaksa:

do
{
intruksioni(et);
}
while (kushti);

Shembull

Tëshënohetprogramipërshtypjen e numrave duke përdorurciklin do while.


#include <iostream>
using namespace std;
int main () {
int i=1;
do {
printf ("Jepninumrat: \n");
} while (i<=7);
return 0;
}

Ushtrime:

Llogarisnishumatpërvargjet e mëposhtme:
1. S=1+2+3+…………….+n  (n>0)

Zgjidhje

#include <stdio.h>
#include <conio.h>
int main () {
int i, n, k, shuma=0;
 printf ("Jepninumrin n:");
  scanf ("%d", &n);
  for (i=1; i<=n; i++)
  {
      k=i;
  shuma=shuma+k;
          }
Printf ("Shuma e %d kufizavetevarguteshte %d", n, shuma);
   Getch ();
   return 0; 
}

2. S= 1+3+5+…………+(2n-1)

Zgjidhje:
#include <stdio.h>
#include <conio.h>
int main () {
#include <iostream> using namespace std;
int main()
{
int a = 5; int *b;

//ndryshore 'a' me vlere 5


//pointer derite e dhena me tip int

b = &a; //b e permbanadresen e a ("b tregonte a")

/*
double *k; k = &a;
*/ //GABIM: tip igabuaripointerit (double)

cout<< a <<endl; cout<< b <<endl; return


//shtype
0;'5' (vlera e a)
//shtype '0x27ff44' (adresa e a)

}
int i, n, k, shuma=0;
printf ("Jepninumrin n:");
scanf ("%d", &n);
for (i=1; i<=n; i++)
{
 k=2*i-1;
shuma=shuma+k;
}
Printf ("Shuma e %d kufizavetevarguteshte %d", n, shuma);
Getch ();
return 0;                  
}

Detyrë: Llogarit e kufizavetëvargutS=2+4+6+………….+2n.

12.Pointerat dhe skedarët në gjuhën C


Tëdhënatnënjësistemkompjuterik, pa dallimnësebëhetfjalëpërnumërtëplotë, simbol,
vektortekstualosestrukturë e përbërë, kanëlokacionin e tyrememorik,
nëpërmjettëcilitatyremundtëjuqasemi, nëpërmjetkrijimittëndryshorevetëtipittëcaktuar, është e
mundur puna me tëdhënapakontrollimtëlokacionitkuatojanëtëvendosura: pra,
nëtëgjithaprogrametqëikemishkruarderimëtani, aspaknukjemibrengosurpërlokacionin e
ruajtjessëtëdhënave.
Tëshohimdisashembuj:
Së pari, është me rëndësi tëthuhet se, gjatëkrijimittëpointerave (int *x), pozita e vendosjessëshenjës
‘*’ nuk ka ndikimnëekzekutimin e programit. Nëfakt, shenja ‘*’ mundtëndodhetmenjëherë pas
int a, b; int *a,
//a
*b;
eshte
int e
*a,
tipit
b; int
'int',
a, *b;
b eshte e tipit 'int'
//a dhe b jane pointeraderite e dhena me tip 'int'
//a eshte pointer, b eshtendryshore e thjeshte e tipit 'int'
//a eshte e tipit 'int', b eshte pointer

tipittëdhënës (int* x), ndërmjettipittëdhënësdheemrittëpointerit (int * x) osepranëemrittëpointerit(int


*x): tëgjithaurdhëresat e kanëefektin enjëjtë. Kur krijohenmëshumëpointera të tipit të njëjtë, duhet
bërë kujdes që të vendoset shenja ‘*’ përsecilin pointer.

Dalliminndërmjetoperatorëve ‘&’ dhe ‘*’:


‘&’ lexohet “adresa e” dhe e kthenadresën e njëtëdhënetëcaktuar. Përshembull ‘&x’ e kthenadresën
ex, ‘*’ lexohet “vlera e treguarnga” dhe e kthenvlerën e cilaruhetnënjëlokaciontëcaktuar.
Përshembull, “*p” shërbenpërqasjederitevlera e treguar(shënjuar) ngapointerip.Është me
rëndësitëtheksojmë se një pointer mundtëpërdoretdisaherë (nënjë program tënjëjtë) edhe
(nëmomentetëndryshme) tëtregojnëndryshoredhelokacionetëndryshmememorike.
Nëseduamqënëmënyrëeksplicite ta shprehim se një pointer icaktuarnuktregonaskund,
tënjëjtitmundtijapimvlerë 0 (qëquhetedhesipointeri NULL).

Madhësia e njëpointerivaretngaarkitektura e
sistemitkompjuterikteiciliekzekutohetprogramisidhengasistemioperativ: sistemikompjuterikprej 32 bitëve do
tëshfrytëzojëadresamemorikeprej 32 bitëve, dhepointerat do tëzënëhapësirëadresueseprej 4 bajtëve,
kursetesistemetkompjuterike me 64 bite, pointeri do tëzëhapësirëadresueseprej 8 bajtëve. Mëposhtë e
#include <iostream> using namespace std;

struct typeX
{
int t1, t2, t3, t4; double t5, t6, t7, t8;
};

int main()
{

ilustrojmëkëtë me njëshembull.

 Konceptiiskedarit

Skedarëtpërkufizohennëmenyrëabstractesikoleksionbyteshtëcilëtruhennënjëpajisjeruajtesedytësore e
cilazakonishtështënjë disk injë tipi cfarëdo. Kjobashkësibyteshmundtëinterpretohet psh.si karaktere, fjalë,
rreshta, paragrafe apo faqenganjëdokumentteksti,
fushadherekordepërnjëbazëtëdhënashosepikselanganjëimazhgrafik. Përmbajtja e
njëskedaripërcaktohetplotësishtngastruktura e
tëdhënavedheveprimetqëpërdorenngaprogramipërtëprocesuaratëskedar. Vet
skedariështënjëvargregjistrimeshosenjëbashkësitëdhënashtëtënjëjtit tip tëvendosuranëtë. Çdoskedar ka
njëemërdhekjoi ben tëditursistemit ta dallojkëtëskedarngatëtjerët. Përdoruesitiinteresonpërmbajtja e
skedaritpërtëkryeroperacionemenaxhuesesishtim, modifikim, lexim, afishimtëtij.
Skedarëtjanëtëdytipevekryesore: skedartëvijueshëm(tekst) dhe skedar me hyrjetëdrejtëpërdrejtë
(skedarebinar). Nërastin e parëregjistrimetvendosennjëri pas tjetrit. Përtëlexuarpërmbajtjen e
njëskedaritëtillëleximi nis përherëngafillimiiskedarit, bredhjabëhetregjistrim pas regjistrimi,
derisatëarrijmënëregjistriminqëjemitëinteresuar. Pranjëkerkimitillëështëshumëingadaltë. Nëskedarët e
tipittëdytë, me hyrjetëdrejtëpërdrejtëçdoregjistrimështëipajisur me njënumërregjistrimi (ID)
qëimundësonprogramittëhyjnëmenyrëdirekteteregjistrimiqëduampaqenë e
nevojshmebredhjangafillimiskedarit. Por qëtëbëhetnjëteknikë e tillë e mundurrealishtduhettënjohim ID
mëparë. Nënjëskedartëtillëkërkimiështëshumë heremëishpejtë.
Skedarëttekstpërdorenmëtepërnëpaijsjetruajtësesekondarendërkohëskedarët me
hyrjetëdrejtëpërdrejtëpërdorennëkujtesatmasivesi HDD. Njëtjetërdallim midis
këtyredytipeveështëformatiipërdorurpërruajtjennë disk.
Skedarettekstiruajnënumratsistringjeosevektorkaraktereshndërkohëskedarëtbinarnumratiruajnëashtusijanënëm
emorie, pra tipi integer 2 byte, float 4 byte etj. Hapja e skedareve me njërënngakëto 2
mënyrapërcaktondhemënyrënsesipërmbajtja do trajtohet: si do përcaktohetkarakteriifunditirreshtit,
ifunditiskedaritetj. Fillimisht do tënjohimmënyrënsesipunohet me skedarëttekst e më pas me skedarëtbinar. 
 Veprimet me skedarët: 

1. Krijiminjëskedaritëri 
2. Hapja e njëskedariekzistues 
3. Leximidheshkrimiiinformacionitnëskedare 
4. Mbyllja e njëskedari

- Hapja e skedarit
Përpara se tëshkruajmë apo tëlexojmënjëskedarduhettë ta hapimatë. Hapja e
skedaritsiguronlidhjenndërmjetprogramitdhesistemittëshfrytëzimitpraibëntënjohursistemittëshfrytëzimit se
ciliështëskedaridheçfarë do tëbejmë me të (do shkruajmë apo do lexojmë). Elementiigjuhës C
qëmbankëtotëdhënaështëstruktura FILE. Kur bëhetkërkesapërhapjen e skedarit ajo qëkthehetështënjë pointer
nëstrukturën FILE. Çdoskedarihapur ka strukturën FILE qëshënjonnëtë. Struktura FILE
mbaninformacionetëndryshmepërskdarinmbitëcilin do punojmë, simadhësia, vendodhjen e
buferittëtëdhënaveetj. Kjostrukturështë e deklaruarëebibliotekënstdion.h. Deklarimiinjëvariablitëtipit FILE
icilishënjonmbinjëskedartëcaktuarështësimëposhtë:

FILE *fptr;
Instruksioni
fptr = fopen("sk.txt","w");
ikërkonsistemittëshfrytëzimittë hap skedarin sk.txt (mundtëspecifikohetdhe path iplotëabsolut). Simboli w
itregonsistemitqëskedari do tëhapetpërshkrim.

Mënyrat e hapjessëskedarit:

Mënyra Kuptimi
r Hapetpërlexim
w Hapetpërshkrim
a Hapetpërshtim, shkruajmënë fund tëskedarit
r+ Hapetpërleximdheshkrim
w+ Hapetpërleximdheshkrim
a+ Hapetpërshtim, shkruajmënë fund tëskedarit

 Leximidheshkrimiinformacionitnënjëskedar:

Paketa e funksionevestandartevetëtrajtimittëskedarëveofron 4
mënyratëndryshmepërshkrimdheleximtëdhënash. E para:
tëdhënatmundtëlexohendheshkruhennëskedarkarakter pas karakteri me anëtëfunksionevegetc ()
dheputc (). E dyta: tëdhënatlexohendheshkruhennëskedarsistringje me anëtëfunksionevefgets ()
dhefputs () nëtënjëjtënmënyrësijanë gets () dhe puts (). E treta:
tëdhënatlexohendheshkruhennëskedarnënjë format plotësishttëpërcakturar(numratëplotë, me presje,
karaktere, stringjeetj.) me anëtëfunksionevefscanf () dhefprintf () sikemiparëscanf () dheprintf (). E
katërta: tëdhënatgjithashtumundtëlexohendheshkruhennënjëskedardhenjë format tëritëquajtur record
apo bllok. Një record ështënjëblloktëdhënash me
madhësitëpërcakturardhenëpërgjithsipërdoretpërtëruajturnjëvargtëdhënashtëngjashmeashtusikemipa
rëvektorët apo strukturat. Funksionet e përdorurpërkëtorastejanëfread () dhefwrite ().
 Shkriminëskedar:

#include <stdio.h> 
int main(){ 
int n;
FILE *fptr;
fptr=fopen("C:\\sk.txt","w");
if(fptr==NULL)
printf("Gabim!"); 
printf("Jepnivleren e n: ");
scanf("%d",&n);
fprintf(fptr,"%d",n);  
fclose(fptr);
return 0;
}

 Leximingaskedari:

#include <stdio.h> 
int main(){ 
int n;
FILE *fptr;
fptr=fopen("C:\\sk.txt","r");
if(fptr==NULL)
    printf("Gabim!"); 
   fscanf(fptr,"%d",&n);
   printf("%d",n);  
   fclose(fptr);
   return 0;
}

 Mbyllja e skedarit:
Pasimbarohetsëshkruari, skedariduhetmbyllur. Kjobëhet e mundur me instruksionin:
Fclose (fptr);
Pra, përsëri me ndihmën e pointerititregohetkompilatorit se adresa e skedaritduhettëmbyllet. Mbyllja e
skedarit ka disaefekte. Sëparidetyronkarakteret e mbeturanë buffer tëshkruhennë disk.
Megjithësebufferiështëipadukshëmështëshumëinevojshëm. Kjopërfaktin se do tëduhejnjëkohëqëkoka e
leximittëdiskuttëpozicionohetnëpistëndhesektorin e duhur. Përkëtëarsyelindnevoja e buferit.
Gjatëekzekutimittëfunksionitputc () icililexonnjëkarakterngatastjeradheduhet ta shkruajnëskedarkarakteret e
lexuaranukshkruhendirektnë disk po atovendosennë buffer nënjëzonëtë memories. Kur ky buffer është plot
përmbajtja e tij do tëregjistrohetnjëherëshnë disk. Nëmomentinqë ka përfunduar puna me
këtëskedartëgjithatëdhënat e mbeturanë buffer do tëshkruhennëskedar.
Pratëdhënatkalojnëngabufferinëskedarkurbuferiështëplotë,skedarimbyllet apo program perfundon.

Shembuj me skedar: Shkruaninjë program nëgjuhën C icililexonemratdhenotat e


studentevengapërdoruesidheiruanatonëskedar.
#include <stdio.h>
#include <conio.h>
int main () {
   char name [150];
   int marks, i, n;
   printf ("Jepninumrin e studenteve: ");
   scanf ("%d", &n);
   FILE *fptr;
   fptr=(fopen("D:\\students.txt","w"));
   if(fptr==NULL) {
       printf("Gabim!");
   }
   For (i=0; i<n; ++i)
   {
      Printf ("Studenti %d\n Emri: ", i+1);
      Scanf ("%s", name);
      Printf ("Nota: ");
      Scanf ("%d", &marks);
      Fprintf (fptr,"Studenti me emer: %s ka marrnoten=%d \n", name, marks);
   }
   fclose(fptr);
   getch ();
   return 0;
}
Rezultati:
Input: 

Ushtrime:

1. Afishoninë console përmbajtjen e skedarittëndodhurnëdirektorinë D:\\students.txt

2. Shtoni në fund të skedarit students.txt nota për m studente të tjerë të cilat do i lexoni nga
përdoruesi.
13.Proçeduratdhefunksionetnëgjuhën C.
Njëfunksionështënjëgrupipohimeveqësëbashkukryejnënjëdetyrë. Çdo program në C ka tëpaktënnjëfunksion,
iciliështë main (), dhetëgjithëprogrametmëtëparëndësishmemundtëpërcaktojnëfunksioneshtesë.
Një deklaratë e funksioniti tregonpërpiluesitpëremrin e njëfunksioni, llojin e
kthimitdheparametrat. Një përkufizimi funksionit sigurontrupinaktualtëfunksionit. Bibliotekastandardenë C
ofronfunksionetëshumtatëintegruaraqëprogramimundt'ithërras. Përshembull, strcat
() përtëbashkuardyvargje, memcpy () përtëkopjuarnjëvendndodhjetëkujtesësnënjë vend tjetër,
dheshumëfunksionetëtjera.
Njëfunksionmundtëreferohetgjithashtusinjëmetodëosenjënënrutinëosenjëprocedurë, etj.
Forma e përgjithshme e njëpërkufizimitëfunksionitnëgjuhënprogramuese C ështësimëposhtë:
return_typefunction_name (parameter list) {

body of the function

Njëpërkufizimifunksionitnëprogramimin C
përbëhetnganjë kokëfunksioni dhenjë trupfunksioni. Këtujanëtëgjithapjesët e njëfunksioni.
 Return Type-
Njëfunksionmundtëkthejënjëvlerë. Return_type ështëllojiivlerëssëfunksionittëkthimit. Disafunksione
kryejnëoperacionet e dëshiruara pa kthyernjëvlerë. Nëkëtërast, kthimi_llojështëfjalakyçe
e pavlefshme.
 Emriifunksionit - Ky ështëemriaktualifunksionit. Emriifunksionitdhelista e
parametravesëbashkupërbëjnënënshkrimin e funksionit.
 Parametrat - Njëparametërështësinjëmbajtësvendesh. Kur thirretnjëfunksion,
juikaloninjëvlerëparametrit. Kjovlerëreferohetsiparametërose argument aktual. Lista e
parametraveireferohetllojit,
renditjesdhenumrittëparametravetënjëfunksioni. Parametratjanëopsionalë, domethënënjëfunksionnuk
mundtëpërmbajëasnjëparametër.
 FunksioniTrupi - Trupi ifunksionitpërmbannjëkoleksiontëpohimeveqëpërcaktojnë se
çfarëbënfunksioni.
Shembull:
Mëposhtëjepetkodiburimorpërnjëfunksiontëquajtur max (). Ky funksionmerrdyparametra num1 dhe num2
dhekthenvlerënmaksimale midis tyre.
/* function returning the max between two numbers */

int max(int num1, int num2) {

/* local variable declaration */

int result;

if (num1 > num2)

result = num1;

else

result = num2;
return result;

Deklaratat e funksionit

Një deklaratë e funksioniti tregonpërpiluesitpërnjëemërfunksionidhemënyrën e
thirrjessëfunksionit. Trupiaktualifunksionitmundtëpërcaktohetveçmas.
Njëdeklaratëfunksioni ka pjesët e mëposhtme:
return_typefunction_name (parameter list);
Përfunksionin e përcaktuarmëlart max (), deklarimiifunksionitështësimëposhtë:
int max (int num1, int num2);
Emrat e parametravenukjanëtërëndësishëmnëdeklarimin e funksionit, kërkohetvetëmllojiityre,
kështuqësamëposhtëështëgjithashtunjëdeklaratë e vlefshme:
int max (int, int);
Deklarimiifunksionitkërkohetkurpërcaktoninjëfunksionnënjëskedarburimordhe e
quaniatëfunksionnënjëskedartjetër. Nënjërasttëtillë,
juduhettëdeklaronifunksioninnëkryetëskedaritqëthërretfunksionin.

 Thirrja e njëfunksioni
Kur krijojmënjëfunksion C, përcaktojmënjëpërkufizimtëasajqëfunksioni ka
tëbëjë. Përtëpërdorurnjëfunksion, do tëduhettëthërrasimatëfunksionpërtëkryerdetyrën e përcaktuar.
Kur një program thërretnjëfunksion, kontrolliiprogramittransferohetnëfunksionin e
thirrur. Njëfunksionithirrurkryennjëdetyrëtëpërcaktuardhekurdeklarata e tij e
kthimitekzekutohetosekurarrihetmbajtësiitijimbylljessëfunksionit, ai e kthenkontrollin e
programitpërsërinëprograminkryesor.
Përtëthirrurnjëfunksion, thjeshtduhettëkaloniparametrat e kërkuarsëbashku me emrin e funksionit,
dhenësefunksionikthennjëvlerë, atëherëmundtëruanivlerën e kthyer. 
Përshembull:
#include <stdio.h>

/* function declaration */

int max(int num1, int num2);

int main () {

/* local variable definition */

int a = 100;

int b = 200;

int ret;

/* calling a function to get max value */

ret = max(a, b);


printf( "Max value is : %d\n", ret );

return 0;

/* function returning the max between two numbers */

int max(int num1, int num2) {

/* local variable declaration */

int result;

if (num1 > num2)

result = num1;

else

result = num2;

return result;

Ne kemimbajtur max () sëbashku me main ()


dhekemipërpiluarkodinburimor. Ndërsaekzekutohetekzekutuesipërfundimtar, ai do
tëprodhonterezultatin e mëposhtëm:
Max value is: 200
Argumentet e funksionit.
Nësenjëfunksion do tëpërdorëargumente, ai duhettëdeklarojëvariablatqëpranojnëvlerat e
argumenteve. Këtovariablaquhen parametrazyrtarë tëfunksionit.
Parametratzyrtarësillensindryshoret e tjeralokalebrendafunksionitdhekrijohen me
hyrjennëfunksiondheshkatërrohen me daljen.
Ndërsathirrninjëfunksion, ekzistojnëdymënyranëtëcilatargumentetmundtëkalohennënjëfunksion.
N Llojidhepërshkrimiithirrjes
r

1 Thirrjesipasvlerës
Kjometodëkopjonvlerënaktualetënjëargumentinëparametrinzyrtartëfunksionit. Nëkëtë
rast, ndryshimet e bëranëparametrinbrendafunksionitnukkanëasnjëefektnë argument.

2 Thirrje me referencë
Kjometodëkopjonadresën e njëargumentinëparametrinzyrtar. Brenda funksionit,
adresapërdoretpërtëhyrënëargumentinaktualtëpërdorurnëthirrje. Kjo do
tëthotëqëndryshimet e bëranëparametërndikojnënë argument.
Si parazgjedhje, C përdor thirrje me vlerë përtëkaluarargumente. Nëpërgjithësi, do
tëthotëqëkodibrendanjëfunksioninukmundtëndryshojëargumentet e përdorurapërtëthirrurfunksionin.
 Objektivat
Lista e objektivave:

 Deklarim i funksioneve pa parametër


 Deklarim i funksioneve me parametër
 Thërritja e funksioneve në program
 Prototipi i funksioneve me(pa) parametër.

- Ushtrim 1 

Shkruani një funksion që njëhson sipërfaqen dhe perimetrin e një katrori me brinjë a.

Zgjidhje

#include <stdio.h>
#include <conio.h>
void sipPerimetri(int); //prototipiifunksionit
int main () {
    int a;
    printf ("Jepnibrinjen a: \n");
    scanf ("%d", &a);
    sipPerimetri(a); //thërritja e funksionitnëprograminkryesor main
    getch ();
    return 0;
}
//deklarimiinjëfunksioniqëmerrparametradhenukkthenvlerë
void sip Perimetri (int brinja) {
     printf ("Siperfaqja e katrorit: %d \n", brinja*brinja);
     printf ("Perimetrikatrorit: %d \n",4*brinja);
          }
Ushtrim 2 
Shkruani një funksion që llogarit sipërfaqen e një trekëndshi kënddrejtë ma katete a,b.

Në programim një funksion është një grup instruksionesh të ekzekutueshme që i jep zgjidhje një
problemi apo një detyre. Çdo program në C ka të paktën një funksion main(), i cili egzekutohet i pari
kur thërritet programi.
Kemi dy tipe funksionesh në programimin me gjuhën C:
 Funksione nga libraritë e funksioneve.
 Funksione të përcaktuar nga përdoruesi

Funksione nga librarite

Funksione nga librarite e funksioneve ofrohen nga gjuha c dhe i vinë në ndihmë përdoruesit për të
zgjidhur problemeve të ndyshme.
Funksionet e krijuara nga përdoruesi.
Gjuha C i lejon përdoruesit të përcaktojnë funksione dhe ti shkruajne ato sipas kërkesave të
tyre. Këto tipe funksionesh quhen funksione të përcaktuar nga përdoruesi. Çdo program
nëgjuhën C ka tëpaktënnjëfunksion, funksionin main()
dhefunksionetqëpërcaktohenpërtëzgjidhurproblemetëndryshmengapërdoruesijashtëfunksionitkryesor
ë. Kemi dymënyrapërpërcaktimin e funksionevetëkrijuarngapërdoruesi :
 Deklarim funksioni, thërritje funksioni dhe më pas përcaktim funksioni

 Përcaktim funksioni dhe më pas thërritje e funksionit në funksionin main()

Përcaktimi i njëfunksioni
Tipi_i_kthimitemri_funksionit(listaparametrave )
{
trupi i funksionit
}
tipi kthimit: Tipi itëdhënaveqëkthenfunksioni.
emrifunksionit: Emërtimifunksionit.
parametrat: Për kalimin e vlerave tek parametrat. Lista e parametrave i referohet tipit, radhës, dhe
numrit të parametrave në funksion.
trupi i funksionit: Një ose disa instruksione që përcaktojnë se çfarë do të bëj funksioni. Parametrat
janë opsional; pra mund të përcaktoni funksione pa parametra

Deklarimi i një funksioni


Tipi_i_kthimitemri_funksionit(tipet e tëdhënavepërparametrat);
Thërritja e funksionit
emri_funksionit();
Disa avantazhe që sjell mënyra e programimit me funksione të percaktuar nga përdoruesit
janë:
 mundtëripërdorkodinbrendafunksionit.

 Nëseështë e nevojshmemundtëbëhenndryshimebrendanjëfunksionipandryshuarstrukturën
e tëgjithëkodit.

 injëjtifunksionmundtëpërdoretpërinputetëndryshme.
Ndërtimi i funksionit pa parametra i cili nuk kthen asnjë vlerë, thjesht printon një mesazh në ekran
“Funksioni i pare i ndertuar ne gjuhen c”:
#include <stdio.h>
void funksioni_pare()
{
printf(" Funksioni i pare i ndertuar ne gjuhen c");
}
int main()
{
funksioni_pare();
return 0;
}

Ndërtimi i funksionit me parametra:

#include <stdio.h>
int mbledhja(int a, int b);
int main()
{
int num1,num2,shuma;
printf("Shkruani dy numra për ti mbledhur\n");
scanf("%d %d",&num1,&num2);
shuma=mbledhja(num1,num2);
printf("shuma=%d",shuma);
return 0;
}
int mbledhja(int a,int b)
{
int mbledhja;
mbledhja=a+b;
return mbledhja;
}

14.Elementëtbazëtëprogramimitnëgjuhën C++.

Elementet e gjuhësc++:
C++ është një gjuhë programimi me qëllime të përgjithshme.
C++ përdoret për krijimin e lojrave kompjuterike, aplikacione etj.
C++ është derivuar nga gjuha e programimit C dhe në pjesën më të madhe bazohet në të.
Kodi C++ mund të ekzekutohet, ruhet, dhe shpërndahet pa instaluar softëare shtesë. Për të instaluar
softëare shtësë në kompjuter, duhen dy komponentët:

 Integrated Development Environment (IDE): i cili siguron mjete për përshkrimin e kodit.
Çdo tekst editor mund të përdoret si IDE. 
 Kompilatori: Kompilon kodin burim në program të ekzekutueshëm. Janë disa kompilator
në C++ që mund të përdoren si: Code:Blocks, i cili përfshin edhe IDE dhe kompilatorin të
vlefshëm për sistemet operative Ëindoës, Linux dhe MacOS.

Ndërtimi i kodit në c++:

#include <iostream>
using namespace std;
int main()
{
cout << "Përshëndetje!";
return 0;
}
- #include <iostream>
C++ ofron header të ndryshmë, të cilat nevojiten për mirëfunksionimin e programit. Programi i
mësipërm kontrollon për header-in <iostream>. Simboli thurje (#) në fillim të rreshtit tregon
kompiler-it pre-processor-et. Në këtë rast, #include tregon pre-processorit për<iostream>.
<iostream> përcakton standartin të objekteve stream për të dhënat input dhe output.
- using namespace std;
Rreshti using namespace std; i tregon kompilatorit të përdorë standartin std (standard)namespace,
std namespace përfshin karakteristika të C++ Standard Library.
Funksioni Main
Programi fillon ekzekutimin me funksionin, main().
Kllapat tregojnë { } fillimin dhe mbarimin e funksionit, i cili quhet ndryshe edhe trupi i funksionit.
Informacioni brenda kllapave, tregon çfarë realizon funksioni kur ekzekutohet.
- Cout<<
Në shumë mjedise programimi, standarti apriori për afishimin e rezulateve është ekrani. Në C++,
cout është objekti stream që akseson ekranin.
cout përdoret në kombinim me operatorin e daljes së të dhënave ( << ) për insertimin e të dhënave që
vijnë pas tij në ekran. Operatori i insertimit mund të përdoret disa herepas cout.
Në C++, pikëpresja përdoret për të treguar fundin e një instruksioni, ndaj çdo instruksion duhet të
mbarojë me pikëpresje.
- Cin>>
shërben për tëinicializuarvariablat. Atojanë tëshoqëruaragjithëmonëngahyrjet>>.
Inicializimiivariablavemund tëndodhë nënjëinstruksion të vetëm ose nëdisainstruksionesi mëposhtë:
Cin>> a >> b;
Cin>>a;
Cin>> b;

Një bllok kodi është një bashkësi logjike instruksionesh, rreshuar nga kllapa hapëse dhe
mbyllëse.Gjithashtu mund të përdoren shumë instruksione në një rresht të vetëm, mjafton të jenë të
ndara me pikëpresje, përndryshe do të marrim një error. Operatori cout nuk inserton një rresht të ri
në fund të instruksionit.Një mënyrë për printimin në dy rreshta është endl, i cili vendoset aty ku
duhet thyerja e rreshtit.
Komentetshpjegojnëarsyen e
përdorimittësecilitprejkodeve .Kompilatorëtinjorojnëçdogjëqëështëbrendakomenteve,
prandajkomentetnukshfaqennërezultate. Njëkomentqëfillon me (//) quhet ‘single-line’ koment,
komentnënjëreshttëvetëm. Simbolet // itregojnëkompilatorittëinjorojëçdogjëqëndodhet pas derinë
fund tërreshtit. Komentetqëshkruhennëshumërreshtafillojnë me simbolin /* dhembarojnë me
simbolin */ duke u shkruarkomentenënjërreshttëvetëmosenëshumërreshta.
Variablat. Krijimi i një variable, zë një një hapsirë të caktuar në memorje për të ruajtur vlerat.
Kompilatori, kërkon që të përcaktoni edhe tipin e të dhënave të çdo variable që deklaroni.Për tipin e
të dhënave numra të plotë përdoret fjala kyçe int.Gjuha e programimit C++ është case-sensitive, që
do të thotë‘variabla’ dhe ‘Variabla’ janë dy identifikues të ndryeshëm.Të gjitha variablat
identifikohen me emrin dhe tipin e të dhënës para se të përdoren në program. Mund të përcaktohen
disa variabla të të njëjtit tip njëherësh por të ndara me presje.

Deklarimi i variablave
Variablave mund t’u jepen vlerat në momentin e deklarimit ose më vonë. Gjithashtu, mund të
ndryshohen vlerat e një variable gjatë programit.
Rregullatqëduhettëzbatojmëkurpërcaktojmëvariablatjanë:
 duhet të kenëlidhje me problemin
 nukmund tëfilloj me shenjatekstuale
 duhet tëdeklarohen para përdorimit
 tipi i të dhënave specifikohet në varësi tëvlerave qëvariablatmarrin

 Tipetthemeloretëtëdhënave
Kur programojmëduhettëvendosimoserezervojmëvariablatnëkujtesën e kompjuterit, por
kompjuteriduhettëdijëçfarëllojtëdhënash ne do tëvendosim, mbasinukijepet e
njëjtahapësirëkujtesenjënumritëplotë, osenjënumridhjetor, osenjëkarakteri.
Kujtesa e kompjuteritorganizohetnë byte. Një byte ështëminimumiisasisësëkujtesësqë C++
mundtëmenaxhojë. Një byte lejonrezervimin e njësasietëvogëltëdhënash: njëkaraktertëvetëm,
osenjënumurtëplotëtëvogël (nëpërgjithësinjëtëplotë midis 0 dhe 255). Përveçkësaj,
kompjuterimundtëmanipulojëtëdhënamëkomplekseqëkërkojnëdisa byte përtirezervuar, të tilla
sinumrat e gjatëosenumrat jo tëplotë. Nëshembullin e mësipërmtëllogaritjessësipërfaqes ne do
tëmjaftoheshim me numrat e plotëdhenëkëtërast do tëduhejqë para përdorimittëvariablave,
tideklaronimata, pratëpërcaktonimtipet e tyresinumrateplotë. Tipevetëndryshëmtëtëdhenavenë C++,
sidheintervaliivleraveqëmundtëpërdoretpërsecilënprejtyre. Këtatipequhendhetipeprimitivë:

Emri Përshkrimi Madhësia* Intervali*


Me shenjë: -128 to 127
Char Karakteroseiplotëivogël 1 byte
Pa shenjë: 0 to 255
short int Me shenjë: -32768 to 32767
iplotë short. 2 byte
(short) Pa shenjë: 0 to 65535
Me shenjë: -2147483648 to 2147483647
Int iplotë. 4 byte
Pa shenjë: 0 to 4294967295
long int Me shenjë: -2147483648 to 2147483647
iplotë long. 4 byte
(long) Pa shenjë: 0 to 4294967295
Vlerëbuleane. Merrnjengavlerat: true
Bool 1 byte true ose false
ose false.
Float Numur me pike notuese. 4 byte +/- 3.4e +/- 38 (~7 shifra)
Numur me pike notuese me precision
Double 8 byte +/- 1.7e +/- 308 (~15 shifra)
tëdyfishtë.
Numur me pike notuese me precision
long double 8 byte +/- 1.7e +/- 308 (~15 shifra)
tëdyfishtë long.
ëchar_t Karakterigjërë. 2 ose 4 bytes 1 karakterigjerë

Ndërtimiikodevenëgjuhënc++:
// afishimiinjëmesazhi
#include <iostream>
using namespace std;
int main()
{
cout<< "Përshëndetjengagjuha C++"
<<endl;
return 0;
}

// afishimiinjënumri
#include <iostream>
using namespace std;
int main()
{
int a;
cout<< "Ju lutemshkruaninjenumer: ";
cin>> a; // leximiivaiablave
cout<< "Kenidhenenumrin: "
<< a
<<"\n";
return 0;
}

//Mbledhja e dynumrave
#include <iostream>
using namespace std;
int main()
{
int a, b, c; // deklarimiivaiablave
a = 23;
b = 7;
c = a + b;
cout<< "Shuma e numrave "
<< a
<<" dhe "
<< b

<<" eshte: "


<< c
<<"\n";
return 0;
}
//Gjetja e mesataressëkatërnumravetëdhënëpërmestastierës.
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d;
cout<< "Ju lutemshkruanikatërnumrapërgjetjen e notësmesatare:\n" ;
cin>>a;
cin>>b;
cin>>c;
cin>>d;
double f = (a + b + c + d)/4;
cout<< "Mesatarja e tyreështë: "
<< f
<<"\n";
return 0;
}

// assignment operator

#include <iostream>
using namespace std;
int main ()
{
int a, b; // a:?, b:?
a = 10; // a:10, b:?
b = 4; // a:10, b:4
a = b; // a:4, b:4
b = 7; // a:4, b:7
cout<< "a:";
cout<< a;
cout<< " b:";
cout<< b;
return 0;

Operatorëtnëgjuhënc++:
Operatorëtarithmetikë(+, -, *, /, %)Veprimetsimbledhja, zbritja, shemëzimi,
pjestimiikorrespondojnëveprimevearithmetike. Ndërsa modulo ështëveprimiqëjepmbetjen e
pjestimittëdyvleravetëplota. Operatoriitijështëshenja e përqindjes (%).
Operatorët e përbërëtëdhënjessëvlerës (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) Kur
duamtëmodifikojmëvlerën e njëvariabli duke
kryernjëveprimnëvlerënaktualishttërezervuarnëkëtëvariabël, ne mundtëperdorimoperatorët e
përbërëtëdhënjessëvlerës.
Operatorët e krahasimit (==, !=, >, <, >=, <= ) Me qëllimqëtëvlerësojmëkrahasimin midis
dyshprehjeve ne mundtëpërdorimoperatorëtrelacionalëdhetëbarazisë.
Operatorëtlogjikë(!,&&, || )Operatori ! ështëoperatorii C++ qërealizonvepriminlogjik JO, dhe ka
vetëmnjë operand boolean, tëvendosurnëtëdjathtë, dhe ajo qëbënështëgjetja e inversittëvlerëssëtij,
pra false në se operandi është true dhe true në se operandi është false. Pra, ai kthenvlerën e
kundërtbooleanetëoperandittëtij. Operatorëtlogjikë&&dhe ||
përdorenkurvlerësohendyshprehjepërtëmarrënjërezultattëvetëmrelacional.
Operatori&&ikorrespondonveprimitlogjikboolean DHE. Ky veprimrezulton true në se
tëdyoperandëtjanë true, dhe false përndryshe. Operatori || ikorrespondonveprimitlogjikboolean OSE.
Ky veprimrezulton true në se tëpaktënnjëngaoperandëtështë true, dhe false kurtëdyoperandëtjanë
false.

Ushtrime me operator:

// operatorëtarithmetikë
#include <iostream>
using namespace std;
int main() {
int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)
cout<< sum1 << "\n";
cout<< sum2 << "\n";
cout<< sum3;
return 0;
}
// Operatorët e krahasimit
#include <iostream>
using namespace std;
int main() {
int x = 5;
int y = 3;
cout<< (x > y); // kthenvlerën 1
return 0;
}
// Operatorëtlogjikë

#include <iostream>
using namespace std;
int main() {
int x = 5;
int y = 3;
cout<< (x > 3 && x < 10); // returns true (1)
return 0;
}

15.Platformat e gatshme në ndihmë të programimit.


Kodi burimornëprogramimmundtëshkruhetnëtekst editor tëndryshmë, por
ekzistojnëdheplatformanëtëcilatmundtëstrukturohendhendërtohenprograme. Sot
kryesishtshfrytëzohenprogrametëcilatpërmbajnë:
 еditorpërtëshkruarkodburimor
 programepërpërkthim
 bibliotekatëprogramevetëgatshme
 programepërgjetjen e gabimeve
Këtoprogramequhen IDE – integrated development environment. Gjuhët e programimit С dhe С++
janënjëngagjuhëtmëtëpopullarizuarapërqëllimtëpërgjithshëm. C++ ështëgjuhëprogramimi e
derivuarngagjuha e programimit C, e cila u krijuanga Bjarne Stroustrupnëvitin 1979 ndërsa C++ u
standardizuanëvitin 1998. C++ përdoretpërkrijimin e desktop aplikacioneve, video lojërave,
serverëve, etj.

Disangaplatformat e gatshmeqëpërdorennëndihmëtëprogramimitjanë:
 СоdеВlосkѕ
 Eclipse përndërtimin e gjuhëve C, C++, Java etj
 GNAT Programming Studio
 Visual Studio Code
 CodeLite 
 Netbeans
 Dev C++
 C++Builder
 CLion
 MonoDevelop
  KDevelop
  Notepad++
Aplikacionetmëtëpërdorurapërtëmësuarprogramimjanë:

 SoloLearn
SoloLearnnukështëthjeshtnjëaplikacion, por
njëseriaplikacioneshdizenjuarpërdisagjuhëprogramimispecifike. Seritë e aplikacionevejanëdizenjuar
me ndërfaqetëthjeshtapërtëmësuarprogramimin me anëtëdisakuiceve. Pas
kompletimittënjëseksionipërnjëllojtëcaktuarprogramimipërdoruesivlerësohet me pike dhenë fund me
çertifikatëkompletimi. Aplikacionirendittëgjithëpërdoruesitnëvarësitëpikëvetëmarra. Ky
aplikacionështëpapagesë.
Programming Hub
Ky aplikacionështëpërtëmësuarrrethgjuhëvetëprogramimitnëçdokohëdhe kudo. Aplikacioni ka
njëkoleksiontëmadhshembujshdhenjëkurstëplotëtëpasur me materialenëmbi 17 gjuhë.
Proçesiitëmësuaritështëshumëithjeshtë, me anëtëgrupimevetëvoglatëmësimeve. Ky
aplikacionështëpapagesë.
 Udacity
Udacity ështëaplikaciondhenjë program icilikrahasuar me aplikacionet e
tjeratëprogramimitofronnjëmënyrëmë intensive tëtëmësuarittëprogramimit.
Nëpërmjetkëtijaplikacionimundtëzgjidhninjëgjuhëprogramimisi HTML, JavaScript, CSS, Python etj.
Kursetnë Udacity instruktohenngaekspertëtëindustriesësi Google, Facebook, MongoDB, dhe
Cloudera.  Vëtëmdisangakursetjanëpapagesë.
 Code Pen
Code Pen ështënjëplatformë online mbidizenjimindhezhvillimin frontend web.
Atymundtëekzekutonimodifikoni apo tëshkruanikode HTML, CSS, JavaScript
sidhetëshikonirezultatinnëkohëreale. Dizenjuesdhezhvilluestëndryshëmnga e gjithë bota,
ngarkojnënëkëtëplatformëprojektetmëkreativetëtyre, përtëndarëeksperiencë  inspirueseedhe me
zhvilluesit e tjerë.

16.Siguria e programeve.
Koncepetdheparimet e menaxhimittësigurisëjanëelementetmëtërëndësishmenëpolitikën e
sigurisëdhevendosjen e njëzgjidhjeje.
Atopërcaktojnëparametratthemeloretënevojshmenënjëmjedistësigurtëpune,
gjishtashtuqëllimetdheobjektivatqëdydizenjuestëpolitikavedhezbatuestësistemitduhettëarrijnëpërtëkrijuarn
jëzgjidhjetësigurtë. Ekzistojnëtreparimekryesoretësigurisë: 1. Konfidencialiteti 2. Integriteti 3.
DisponueshmëriaKontrollet e
sigurisëjanëvlerësuarnëmënyrëtipikenëseatatrajtojnëinformatabazëtëpranimevetësigurisë.
Nëpërgjithësinjëzgjidhje e plotë e sigurisëduhettëadresohetnëmënyrëadekuatenësecilinprejkëtyreparimeve.
Këtotreparimejanëkonsideruarmëtërëndësishmenësferën e sigurisë. Por është e
rëndësishmetëtheksojmëqëçdokompani e caktuarvaretngamasat e sigurisëqë ajo ndërmerr.
Konceptetdheparimet e
menaxhimittësigurisëjanëelementetërëndësishmenënjëpolitikëtësigurtëdhenëvendosjen e
njëzgjidhjeje. Atopërcaktojnëparametratthemeloretënevojshmepërnjëmjedistësigurtë. Ata
gjithashtupërcaktojnëqëllimetdheobjektivat e
politikavedheimplementuesvetësistemitqëduhettëarrihenpërtërealizuarnjëzgjidhjetësigurtë.
Qëllimetkryesoredheobjektivat e sigurisëjanëtëpërfshiranëkuadërtë CIA Triad: konfidencialiteti,
integritetidhedisponueshmëria (Vlefshmëria). Këtotreparimejanëkonsideruarmëtërëndësishmetnësferën e
sigurisë. Kontrollidhemenaxhimiindryshimitështënjëaspektirëndësishëmimenaxhimittëpraktikavetësigurisë.
Ruajtja e sigurisëkërkonndryshimsistematikmenaxhimi. Nëkëtëaspektpërfshimëauditimin, monitorimin e
aktivitetevenëlidhje me kontrollet e sigurisëdhe mekanizmavetëtyre.

Konfidencialiteti
Parimiiparëi Triad CIA-s ështëkonfidencialiteti.
Nëseofronnjëmekanizëmtësigurisësëkonfidencialitetit, ofronnjëniveltëlartësigurietëtëdhënave,
objektit apo burimevetëcilatjanëtëkufizuarangasubjektetëpaautorizuaranëpërgjithësipërruajtjen e
fshehtësisëqëmundtëmbahetnënjërrjet, tëdhënatduhettëmbrohenngaaksesiipaatorizuar, përdorimi apo
zbuliminganjëpalë e tretë me qëllimdekompozimin e informacionit. Sulmet e
shumtapërqëndrohennëshkelljen e konfidencialitetit. Këtopërfshijnëtrafikun e rrjetit apo
vjedhjetënjëfjalëkalimietj. Por shkeljet e konfidencialitetitnukkufizohenvetëmngasulmet e qëllimshme.
Shumërastetëzbulimittëpaautorizuartëinformacionitjanëpërshkaktëgabimitnjerëzor. Shkeljet e
konfidencialitetitmundtëndodhinpërshkaktëveprimevetënjëpërdoruesi apo administratorisistemi. Marrja
e masavesiguronkonfidencialitetkundrejtkërcënimevetëmundshme.

Integriteti
Qëintegritetitëmirëmbahet, objektetduhettëmbesinnëvertetësinë e
tyredheqëllimishttëmodifikohenngasubjektetëautorizuara. Nësenjëmekanizëmsigurieofronintegritet,
atëherëofronnjëniveltëlartësigurietëtëdhënave, objektevedheburimeveqëkanëmbeturnëgjendjen e
tyreorigjinale. Kjopërfshinalternimetqëmundtëndodhingjatëkohësqëobjektiështënëgjendjen e
depozituar, nënjëtransferimosenënjëproçestëcaktuar.
Integritetimundekzaminohetkundrejttreperspektivave:
 Subjektetëpaatorizuaraduhettëkenëaksesnëmodifikimin e tëdhënave.
 Subjektet e autorizuaraduhettëndalohenqëtëbëjnëmodifikimtëpaautorizuarsigabime.
 Objektetduhettëjenëtëkonsistentesingabrendaashtuedhengajashtëkështuqëtëdhënat e
tyrejanëtëvërtetadhereflektive.
Qëintegritetitëmirëmbahetnënjësistem, duhettëkontrollojmënëmënyrëstrikteaksesin e tëdhënave,
objektevedheburimeve. Larmishmërisulmeshjanëfikusuarnëdhunimin e tëdhënave.
Këtupërfshihenviruset, bombatlogjike, aksesiipaatorizuar, gabimenëkodedheaplikacione,
zëvendësimetëqëllimshmedhesistemi back doors.

Vlefshmëria
Do tëthotëqësubjektet e autorizuarajanëtëgarantuarapërkohësishtdhe me aksestekobjektet.
Nësenjëmekanizëmsigurieofronqëndrueshmëri, atëherëofronnjëniveltëlartëtësigurimittëtëdhënave,
objekteve, burimet e tëcilavejanëtëaksesueshmenëautorizimin e njëobjekti.
Vlefshmërianukpërfshinndërprerjetëaksesittëobjekteve por
shumësulmetëcilatidrejtohenqëndrueshmërisë.
1. Hyrje në gjuhën e programimit PYTHON.

Python ështënjëgjuhëprogramimi e interpretueshme e pavarurngaplatforma. Njëgjuhë,


mëtepërskriptive se sanjëgjuhëprogramimi. Python ështëndërgjuhët e
paktatëprogramimitqësuportonkarakteristikatëprogramimitproçedurialdhetëorientuarngaobjektinëtënj
ëjtin program. Karakteristika e sajjanë:

 E pavarurngaplatforma
 E interpretueshme
 Gjuhëskriptive e nivelittëlartë
 Me burimetëhapura – Open Source
 Suportonprogramimin e orientuarngaobjekti

Python mundtëpërdoretpër:
 Web Aplikacionetdhe Web Frameëork-et siDJangodhe Pyramid
 ProgramimLojërash
 Aplikacione Desktop
 Micro Frameëork-et si Bottle dhe Flask

Python është me burimetëhapura.  Ai suportohetngasistemet operative Windows, Mac OS, versionet
Linux si Ubuntu, OpenSuse, etj. Mënyrat e instalimittëtijnëplatformatëndryshmejanë:
 Nësistemet operative windows, përprogramimin python, mundtëpërdorni IDE ose Command
Line. Është pa pagesë.
 Nësisteminoperativ Linux, veçanërishtversioni Ubuntu, interpretuesin Python e ka
tëinstaluar, pramundtëpërdoret Command Line. Përtëkontrolluarnëseversionilinuxqëpërdorni
ka interpretuesin python tëinstaluar, hapniterminalindheshkruanikomandën e
mëposhtme:python –version. Megjithatëedhenësistemet operative Linux
jumundtëshkarkoninjë IDE për python. Njëshembull IDE është JetBrains p\r
sisteminoperativlinux.
 Nësisteminoperativ Mac OS, përtëpërdorurpython,  juduhettëshkarkonidhetëinstaloninjë IDE.
Njëshembull IDE është JetBrains përsisteminoperativ Mac OS X

2. Mjedisi i punëspërtëzhvilluarprograme duke përdorurPYTHON.


Përtëndërtuarkodenë python mundtëshkarkonimjedisin e punësngaadresë:  python.org duke
pasurparasyshsisteminoperativtëkompjuterit. Gjithashtuduhettëpërcaktojmëversioninnëtëcilin do
tëpunojmë. Dy versionetkryesoretë python janë 2.7 dhe 3.9.4 tëcilëtsuportohenngatëgjithesistemet
operative.
Sistemioperativështëprogramiqëbëntëmundurkontrollin e tëgjithëkompjuterit: duke
përfshirëpajisjetfizikedheprogramet. Sistemioperativështëprogramiqëbënmenaxhimin e
njësistemikompjuterikqëngakontrolliipajisjevefizike (sipsh. printeri, tastiera, ekranietj)
deritekkrijimiinjëambjentipërçdo program tjetëraplikativ. 
Pasiinstalohetprograminmënyratpërtëpërdorurpythoninjanëpërmes: Command Line ose GUI.
Command-line quhet interface-ikupërdoruesiduhettëshkruajëkomandanëpërmjettastierës apo
çdopajisjetjetërqëmundësonfutjen (input) e tekstitnëkompjuter. Ky llojkomunikimi ka
qenëtipikpërsistemetmëtëvjetrasipsh. Unix apo MS-DOS.
Visual Interface– Ose GUI quhenatomënyrakomunikimi me
kompjuterinkupërdoruesiveproonmbiatëqëshehnëekrandhepërmes mouse-it apo
çdopajisjetjetërqëlejonkomunikimin e përdoruesit me kompjuterinnëmënyrëvizivepërveçtekstit. Ky
lloj interface përdoretpothuajsetëgjithësistemetkompjuterikeaktualë. Disasisteme operative
qëpërdorin interface visual janësistemet Microsoft Windows, Mac OS X etj.
Përtëndërtuarkodenë python do tëpërdorimparaqitjenvizualetëprogramit, kështuhapni IDLE (Python
GUI). Nëprogramim IDE (Integrated Development Environment)
quhetprogramiqëimundësonprogramuesittëshkruajë, testojë, dhekompilojëprogrametsamëlehte. IDE
e gjuhës python ështëkrijuarngavetëautoriigjuhës Guido van Rossum dhequhet IDLE. Por ka
shumëeditorëpërtëekzekutuar python si: VisualStudio code, eclipse+PyDev, Atom, PyCharm,
Spyder, thonnyetj.

3. Strukturat e tëdhënave.

Nëprogramim, llojiitëdhënaveështënjëkonceptirëndësishëm. Variablatnë python


janëtëtipevedinamike ,praatomundtëinicializohen me tipetëndryshmetëtëdhënave. Ndryshengagjuhët
e tjeratëprogramimitkunëvarësitëvlerëdhëniespërcaktohejdhe tipi itëdhënavenë python kjonukështë e
nevojshme. Variablatinicializohen me vleratëndryshmepaispecifikuartipin e
tëdhënavesidhemundtëndrushojnëtëdhënatnga integer në float pa sjellëproblemenëkodë. Por kjonuk
do tëthotëqë python nukinjehtipet e ndryshmetëtëdhenave. Tipet e tëdhenavejanë:

Text Type: str


Numeric Types: int, float, complex
Sequence Types: list, tuple, range
Mapping Type: dict
Set Types: set, frozenset
Boolean Type: bool
Binary Types: bytes, bytearray, memoryview

Mëposhtë po ndërtojmëdisashembujkupavarsishtëngavleratinicializuesetëvariablitnukështë e
nevojshmetëspecifikojmëtipin e tëdhënave:
x = "Python" # str
x = 20 # int
x = 20.5 # float
x = ["web", "python", "c++"] # list
x = True # bool

4. Deklarimi dhe inicializimi i variablave.

Variablat janë emra që rezervohen në memorin e kompjuterit për të organizuar të dhënat. Ato nuk
kan nevojë të deklarohen pasi janë të tipeve dinamike. Variablat në python janë case-sensitive, që
do të thotë‘variabla’ dhe ‘Variabla’ janë dy identifikues të ndryeshëm. Rregulat që duhet zbatojmë
në përcaktimin e tyre janë:

 duhettëfillojë me njëshkronjë
 nukmundtëfillojë me njënumër
 nukmundtëpërmbajëvetëmkaraktere alfa-numerikedhenënvizime (A-z, 0-9 dhe _)
 janë case-sensitive
 emertimi i variablave këshillohet të ketë lidhje me problemin
Më poshtë po pasqyrojmë disa shembuj të përcaktimit dhe inicializimi të variablave:

# deklarimi i dy variablave që afishon 5 dhe Mira në rreshta të ndryshmë


x=5
y = "Mira"
print(x)
print(y)

# forma të ndryshme të përcaktimit të emertimit të variablave që afishon Artan


myvar = "Artan"
my_var = " Artan "
_my_var = " Artan "
myVar = " Artan "
MYVAR = " Artan "
myvar2 = " Artan "
print(myvar)
print(my_var)
print(_my_var)
print(myVar)
print(MYVAR)
print(myvar2)

# afishonProgramiiparënë Python
x = "Python"
print("Programiiparënë " + x)
5. Operatorët dhe veprimet me to.

Tipet e operatoreve në python janë:


- Operatorët Aritmetike.
- Operatorët e Krahasimit ose Operatorët Relacionale.
- Operatorët e Vlerëdhënies apo Operatorët e Asenjimit.
- Operatorët Logjike.
- Operatorët Bitëise.

 Operatorët Aritmetike. (+, -, *, /, %, **, //) Veprimetsimbledhja, zbritja, shemëzimi,


pjestimiikorrespondojnëveprimevearithmetike. Ndërsa modulo ështëveprimiqëjepmbetjen e
pjestimittëdyvleravetëplota. Operatoriitijështëshenja e përqindjes (%).
x=5
y=3
print(x + y) # a output 8

x=2
y=5
print(x ** y) #veprimi 2*2*2*2*2 dhe output është 32

x=5
y=2
print(x % y)# output 1

 Operatorët e krahasimit (==, !=, >, <, >=, <= ) Me qëllimqëtëvlerësojmëkrahasimin midis
dyshprehjeve ne mundtëpërdorimoperatorëtrelacionalëdhetëbarazisë.
x=5
y=3
print(x == y) # output false

x=9
y=7
print(x != y) #output true

Operatorët e përbërëtëdhënjessëvlerës (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) Kur
duamtëmodifikojmëvlerën e njëvariabli duke
kryernjëveprimnëvlerënaktualishttërezervuarnëkëtëvariabël, ne mundtëperdorimoperatorët e
përbërëtëdhënjessëvlerës.
x=5
x *= 3
print(x) # output 15

x=5
x%=3
print(x) # output 2

x=5
x **= 3
print(x) # output 125

Operatorëtlogjikë(!,&&, ||) Operatori ! ështëoperatorii C++ qërealizonvepriminlogjik JO, dhe ka


vetëmnjë operand boolean, tëvendosurnëtëdjathtë, dhe ajo qëbënështëgjetja e inversittëvlerëssëtij,
pra false në se operandi është true dhe true në se operandi është false. Pra, ai kthenvlerën e
kundërtbooleanetëoperandittëtij. Operatorëtlogjikë&&dhe ||
përdorenkurvlerësohendyshprehjepërtëmarrënjërezultattëvetëmrelacional.
Operatori&&ikorrespondonveprimitlogjikboolean DHE. Ky veprimrezulton true në se
tëdyoperandëtjanë true, dhe false përndryshe. Operatori || ikorrespondonveprimitlogjikboolean OSE.
Ky veprimrezulton true në se tëpaktënnjëngaoperandëtështë true, dhe false kurtëdyoperandëtjanë
false.
x=5
print(x > 3 and x < 10) # output true

x=5
print(x > 3 or x < 4) # output true

x=5
print(not(x > 3 and x < 10)) # output false

Operatorët Bitwise. Simboliiopertorvedhefunksioniityre:

&: OperatoriBinar AND kopjonnjë bit tërezultatitnëseegzistontetëdyoperandët.


∣: OperatoriBinar OR kopjonnjë bit tërezultatitnëseegzistontenjëringatëdyoperandët
^: OperatoriBinar XOR kopjonnjë bit tërezultatitnëseegzistontenjëringatëdyoperandët por jo tetë dy.
~: OperatoriBinarKomplementuesmohues ka një parameter dhebën flip tëbiteve 0 në 1, 1 në 0.
<<: OperatoriBinar “Left Shift” Operator. Vleranëtëmajtëlevizmajtas me nr bit tëspecifikuardjathtas.
>>: OperatoriBinar “Right Shift”. Vleranëtëmajtëlevizdjathtas me nr bit tëspecifikuardjathtas.

6. Strukturat e kontrollit. Ciklet.


Shpesh në fluksin e kodit të shkruar në cdo gjuhë programimi pra dhe në python, jemi para kushteve
llogjike që bëjnë të egzekutohet një kod apo një tjeter, në varesi të vleres true apo false të kushtit
llogjik.
Ifështënjëngastrukturat e kontrollit. Nësepërdoret ifpërtëekzekutuarnjë statement osebllok, ai
ekzekutohetvetëmnë se njëkonditëplotësohet. Forma më e thjeshtë e kësajstrukturekontrolli është:

if konditë:
statement

kukonditëështënjëshprehjelogjikeqë do tëvlerësohet me dyvlera e vërtetë (true) ose jo e vërtetë


(false). Nësekjokonditëështë true, statementiekzekutohetnëtëkundërtstatement
injorohet(nukekzekutohet) dheprogramivazhdonmenjëherë pas strukturëssëkonditës.
Nësemundtëspecifikojmëçfarëduamtëndodhënësekonditanukplotësohetpërdorimelse. Forma e
sajsëbashku me ifështë:
if kondite:
statement1
else:
statement2
Shembuj me if, if else, if elif else:

a = 33
b = 200
if b > a:
print("b më e madhe se a") # output b më e madhe se a

x = 200
y = 33
if y > x:
print("y mëimadh se x")
elif x == y:
print("x ibarabartë me y")
else:
print("x mëimadh se y") # output x mëimadh se y

numr1 = 200
numr2 = 33
if numr2 > numr1:
print("numr2 mëimadh se numr1")
else:
print("numr1 mëimadh se numr2") # output numr1 mëimadh se numr2

Break ka sifunksiontëndërpresënjëcikëltëpafundëmose para testimittëtëgjithavlerave.


for i in range(9):
if i> 3:
break
print(i)
# output
0
1
2
3

Continue përdoretzakonishtënë loop përtëkapërcyervlerën e


përcaktuardhevazhdontëtestojderisatëplotësohetnjëkushtëidytë.

for i in range(9):
if i == 3:
continue
print(i)
# output
0
1
2
4
5
6
7
8

 Ciklet

 Strukturatciklike
Njëtjetërpjesë e gjuhëvetëprogramimitjanëedhekushtet apo siçnjihen, strukturat e kontrollit.
Strukturat e kontrollitijapinmëshumëforcëshprehësegjuhës, duke thjeshtuarshumëpunë.
Siç do ta shikojme, atojanëshumëtëlehtapërtumesuar, përarsyen se janë me tepërformulimegjuhësore.
 Struktura if
If ngaanglishtja do tëpërkthehejnëse, praështënjëkusht. If ka kuptimin se nësekushtiështëivërtetë,
zbatohetbllokuiformulimevetëmëposhtme. Kodi istruktures if është:
ifkushtiqëduhetplotësuar:
Bllokuosenjëformulimivetëm
Siç e shikoniformulimiidytë pas fjalëskyçe if nukndodhet ne tënjejtënshtyllë, por ështëizhvendosur.
Duhettëkeniparasysht'irespektonihapesiratqëjanëshumëtërëndësishmenë python. IDLE që po
perdorimështëvetë e kujdesshmepërhapesirat.
Kodi:
a = 33
b = 200
if b > a:
print("b është me imadh se a")

Paraqitja :
 Struktura if-else

Else (përkthyerngaanglishtja do tëthotëpërndryshe) shoqërohetgjithmonë me një if. Ka kuptimin:


nësekushtiiparënukështëivërtetëpërndryshe (osenëse do benimnjëshqiperim, do tëthonim: atëherë)
zbatobllokunqëndodhetposhtë else. Ne këtërastbllokuqëndodhetposhtë if nukzbatohet. Formulimi:
ifkushtiqëduhetplotësuar:
Bllokuosenjëformulimivetëm
else:
Bllokuosenjëformulimivetëm
Si shembull le tëvazhdojme po shembullinqënisëm me sipër:
Kodi:
a = 33
b = 33
if b > a:
print("b eshte me i mash se a")
elif a == b:
print("a dhe b jane tebarabarte")

Paraqitja:

Le tëmarrimnjëshembulltjetërpërtëpaturmëtëqartesesifunksiononif elseif else:


Kodi:
a = 200
b = 33
if b > a:
print("b eshte me e madhe se a")
elif a == b:
print("a dhe b jane tebarabarte ")
else:
print("a eshte me e madhe se b")
Paraqitja:
 Struktura if-elif-else

Ka rastekurduhettëkontrollojmëmëshumëkushtepërtëzgjidhurproblematëndryshme.
Nëkëtërastnavjennëndihmëstrukturaelif. Strukturaelifndryshonngastruktura else pasi ajo
përmbantëpaktennjëkushtpërtuzbatuar. Elifështëshkurtimi else if. Formulimiështë:
ifkushtiqëduhetplotësuar:
Bllokuosenjëformulimivetëm
elifkushtiqëduhetplotësuar:
Bllokuosenjëformulimivetëm
elifkushtiqëduhetplotësuar:
Bllokuosenjëformulimivetëm
else:
Bllokuosenjëformulimivetëm
Shembull:
viti=1789
ifviti<1600:
print'deri ne shekullin XVI'
elifviti<1700:
print'shekulli XVII'
elifviti<1800:
print'shekulli XVIII'
elifviti<1900:
print'shekulli XIX'
else:
print'shekujt e pythonit'
Ne shembullin e mësipërmkontrollohetpërvitetqë u përkasinshekujve XVI deri XIX.
Nësevitetjanëtëndryshëmngavitet 0 deri 1899 atëherëzbatohetformulimiifundit. Mos
harronit'ijepnivlerëndryshoresvitinëmënyrëqëkoditëzbatohet.

 Cikli for dhe while

 Cikli for
Ky cikëlpërsëritetpërnjëvargshenjashdhepërllojetëdhënashtëtjeraqë do t'imësojmëmëvonë, duke
shëtiturnëpërkëtotëdhënapërmesnjëndryshorejeindeksuese. Mundtëthemi se cikli for mundtëpërdoret
ne rastetkurduamqënjëpjesëkoditëpërsëritetnjënumërtëcaktuarherësh.
Sintaksa:
forindeksinvargshenjashoselistë:
Kodi
Shembull:
frutat = ["molle", "banane", "qershi"]
for x in frutat:
print(x)
Paraqitja:

 Cikli while

Nga vetëemrikuptohet se kemitëbejme me njëcikëlicilipërsëritetpëraqkohësakushtiështëivërtetë. Ky


cikëlpërdoretnërastetkurduamqënjëpjesëkoditëpërsëritetpafundësishtosekurkeminjëkushtpërt'upërmb
ushur.
- Sintaksa
whilekushti:
kod
Shembull
>>> n=5
>>>while n >2:
print'Numri',n
n = n –1
- Paraqitja:
Numri5
Numri4
Numri3
Programishfaqnëekrannumratnga 5 deritek 2 në rend zbritës.
Kushtiështëpikërishtqënumratduhettëjenëmëtëmëdhenj se 2. Fjalëpërfjalëmundtëthemi:
përsakohënumriiçfarëdoshem n ështëmëimadh se 2 atëherëprintojekëtënumër, pas
printimitzbritinjënumërnumritaktual. Ciklivazhdonderisavlera e numritarrin 2.
Rreshtiifunditijepkuptimciklit. Ai ndryshonvlerën e ndryshores duke e zvogëluaratë me 1.
Nëkëtëmënyrëkthehetsërishtekrreshtiiparë, praderikurndryshorjatëmarrëvlerën 2.
Shembullin me numrattek do ta zbatojmëedhe me anëtëciklit while. Kushti do tëjetërangui numrave:
- Shembull:
>>>i=1
>>>whilei<5:
ifi%2!=0:
printi
i=i+1
- Paraqitja:
1
3
Fillimishtkryejmëinicializimin e ndryshoresi, më pas vendosimkushtinicilipërcaktonpërfundimin e
ranguttënumrave. Prakëtodyrreshtatekcikli for irealizonim me anetëfunksionit range(1,5). Më pas
gjithçkavazhdonsitekshembujt e ciklit for.
Rreshtiifunditnevojitetpërtëbërëshëtitjenqëkryenindeksitekcikli for. Nërastintonëndryshorjairritet me
1 përçdonumërqëështë me ivogel se 5. Fjalëpërfjalëmundtëthemi: ndryshorja ka vlerën 1.
Përsakohëkjondryshoreështë me e vogel se 5 zbatokodet e mëposhtme. Nësembetja e ndryshores me
2 është e ndryshmenga 0 atëherëprintonumrindhenë fund rritvlerën e ndryshores me 1. Ky
rreshtbëntëmundurqarkullimin e ciklitprakthimin e rrjedhëssëveprimevenga e para.

7. Metodat dhe funksionet.

Funksionetdhekrijimiityre

Nëfjalorin e gjuhëssësotmeshqipejepetkuptimiifjalësfunksion duke specifikuarfushën e përdorimit.


Nëfjalitë e mëposhtme, tëshkëputurangafjalori, jependisashembujtëpërdorimittëkesajfjale:
zyrt. Funksiondrejtues. Ështëngarkuar me njëfunksiontërëndësishëm. Funksionet e shtetit.
fiziol: fuksionet e zemrës.
mat: Funksionalgjebrik. Teoria e funksioneve.
gjuh: funksionmorfologjik. Funksioniifonemës.
Siç e shohimedhengafjalitë, fjalafunksion ka përdorimtëgjerësinëfushënzyrtare, fiziologjike,
matematikore apo gjuhësore. Fjalafunksionmundtëpërkufizohetsipunë, detyrë, qëllim apo veprimtari.
- Nëprogramimmundtëthemi se funksionetjanëminiprogrametëcilatkryejnedetyratëcaktuara.
Funksionetjanënjëmënyrëshumë e mirëpërt’upërdorurnëprogrametqëkonsistojnënëshumërreshtakod.
Funksionetrealizojnënjëdetyrëtëcaktuardhekthejnënjërezultattëcaktuar.
Krijimiifunskioneve ka disaavantazhe duke julejuartëndanikodinnëcopamëtëvogla.
Python ka njëbashkësifunksioneshtë para caktuarasiprint(), range(), len() etj.
Megjithatësinëçdogjuhëtjetërprogramimi, edhenë python mundtëkrijonifunksionettuaja.
Deri tani ne jemindeshur me funksioninprint(). Ky funksion, ashtusiçdofunksion,
përbëhetnganjëemërdhequhet print sidhekryennjëdetyrë, pikërishtnashfaqnëekranatëqë ne ithemi,
duke e cilesuarbrendakllapave (). Gjuhët e programimitmundësojne jo vetëmpërdorimin e
funksionevetëgatshme, por edhekrijimin e tyre.
Sintaksa e përcaktimittënjëprograminë python:
def emri():
bllokuikomandave

def ështënjëfjalëkyçe e pythonit. Fjala def itregonpythonitqë po krijojmënjëfunksion. Le


tëkrijojmenjëfunksion

- Shembull:

def shuma():
Ky instruksionitregoninterpretuesittë python se shuma() ështënjëfunksion.
Sintaksa e thërritjessënjëfunksionipaparametra
Emri_funksionit()
- Shembull:

shuma()
Nësenukdonitëkaloniasnjëvlerënëfunksioninqëthërrisni, mjaftonitëshkruanivetëmemrin e tij.
Sintaksa e thërritjessënjëfunksioni me parametra
emri_funksionit(Parameter 1.., Parameter n)
- Shembull:

shuma(var1,var2)
Thërritja e njëfunskioni me parametratëcaktauaramundtërealizohet duke
vendosurbrendakllapaveparametrat e funksionittëndarë me presje.

- Shembull:

#Përcaktimi ifunksionit
def shuma(var1,var2):
var3=var1+var2
print("Rezultatiifunksionittëshumës:")
print(var3)
var1=5
var2=4
#Thërritja e funksionit
shuma(var1,var2)

- Paraqitja:
Rezultatiifunksionittëshumës:
9

Nëkëtë program, kemideklaruarfunskioninshuma() icilimerrdyparametra. Njëvariabbël e


tretëmbanvlerën e shumëssëdyëve var1 dhe var2.
Kur interpretohetprogramifillimishtkontrollonvlerat e ëve var1 dhe var2. Më pas
llogaritetinstruksionishuma(var1,var2) .

- Shembull:

>>> def gjej_zanoret():


if (germa == 'a'
or germa == 'e'
or germa == 'i'
or germa == 'o'
or germa == 'u'
or germa == 'y'):
# ikombinojmekushtet ne njetevetemmeqe
# rezultatieshteinjejte per cdozanore
print 'zanore'
else:
print 'bashketingellore'
>>>germa ='b'
>>>gjej_zanoret()
bashketingellore
Funksionigjej_zanoret, kërkonpërllojet e gërmavezanore apo bashkëtingëllore. Përtëkryerdetyrën e
tij, funksioni ka nevojëtëtherritetdhekjogjëbëhet e mundur ne rreshtin 14 (>>>gjej_zanoret() )duke
shkruaremrin e tijbashkë me kllapat.
 Parametratdheargumentet
Deri taninukkemishpjeguarenderolin e kllapaveqëndodhen pas emrittëfunksionit. Le
tëstudiojmëshembullin e mëposhtëm.
Shembull:
>>> def shuma(numri1, numri2):
shuma = numri1 + numri2
print 'Shuma e', numri1, 'dhe', numri2, 'eshte', shuma
Tek kllapatbrendafunksionitshuma, kemishkruardyndryshoretëndara me presjenjerangatjetra.
Këtondryshorequhenparametra. Prakemikrijuarnjëfunksion me emrinshumaqëmerrdyparametra.
Funksionishumambledhvlerat e dyndryshorevedhe me anetëfunksionittëgatshëm print jeprezultatin.
Siçihedhimvlerandryshoreve me operatorin = (operatoriihedhjessëvlerës), parametrave u
hedhimvlerën me thirrjen e funksioneve. Kur therrasimfunksioninvleratqëmarrinparametratquhen
argumenta.
Nesejapimvlerat 2,3
>>>shuma(2,3)
Afishimi do te jete 5
Shuma e 2 dhe 3 eshte 5
Me sipërkemithirrurfunksioninshuma duke ikaluardyargumentat 2 dhe 3.
 Funksionetqëkthejnëvlerë
Funksionetqënukkthejnëvlerëjanëatofunksioneqënuknajapinsirezultatnjëvlerë. Shembull:
>>> def printo_emrin(emri):
print emri
>>>printo_emrin('python')
- Paraqitja:
python
Funksioniimësipërmnukkthenvlerë, por zbatonkomandat e tij duke shfaqurnëekranfjalën python. Në
python fjalakyçe return përdoretpërtëkthyernjëvlerë. Vlera e kthyerngafunksionimundtëpërdoretmë
pas siçdoshprehjetjetër. Shembull:
>>> def shuma(numri1, numri2):
return numri1 + numri2
>>> print "Shuma e numrave 2, 3 dhe 4 eshte:", shuma(2,3) + 4
- Paraqitja:
Shuma e numrave 2, 3 dhe 4 eshte: 9
Gjatëstudimittëfunksioneveduhettëkemiparasyshdisaparimetëprogramimittëmirë:
Ripërdorimiikodit
Përgjithësimiikodit
Fshehja e informacionit
Nëshembullin e mëposhtëm do tëshohimzbatimin e këtyreparimeve.
Ripërdorimiikoditthjeshtonshumëpunën, sidomosnësejemi duke punuar me programetëmëdha.
- Shembull:
Tëkrijojmënjë program qënumëronsazanoredhebashkëtingëllore ka njëfjalë apo fjali.
Qëllimiikëtijshembulliështëtëshpjegojëpërdorimin e funksioneve ne python.
Konsiderimiigërmavedyshetëgjuhësshqipesinjëbashkëtingëllore e vetme do ta komplikontekodinqë
do tëshkruajmënëmënyrëtëpanevojshme. Përkëtëarsyeshkronjatsipsh "th" do
tëkonsiderohensidybashkëtingëlloret "t" dhe "h".
Nëfillim do tëkrijojmënjëfunksiontëthjeshtëqë ka përdetyrëvetëmtëdallojënësenjëgërmëështëzanore
apo jo
def zanore_apo_jo(germa):
if (germa == 'a'
or germa == 'e'
or germa == 'i'
or germa == 'o'
or germa == 'u'
or germa == 'y'):
# neseeshtezanorekthejme True
return True
else:
return False
Funksionizanore_apo_jo ka njëparametër. Ky funksionkontrollongërmënnëseështëzanore apo jo
dhekthen True ose False përkatësisht.
Tanimundtëshkruajmënjëfunksionqënumëronzanoretnënjëfjalëtëdhënë.
>>> def numero_zanoret(fjala):
nr_zanoreve = 0
for i in fjala:
rezultati = zanore_apo_jo(i)
if rezultati == True:
nr_zanoreve += 1
return nr_zanoreve
>>>numero_zanoret('python')
- Paraqitja:
Funksioniimësipërmqë ka njëparametërfillon me krijimin e
njëndryshorejeqënumëronzanoretdhefillimisht ka vlerën zero. Cikli for
shëtitnëpërçdogërmëtëparametritfjaladhethërretfunksioninqëkrijuammësipër. Nëçdopërsëritjetëciklit
ne ikalojmësi argument
funksionitzanore_apo_jonjëgërmëtëparametrittëfunksionitnumero_zanoret( parametrifjala).
Tanizbatohenkomandat e funksionitzanore_apo_jo. Pas perfundimit,
programikthehetserishatykukishtelënëzbatimet e komandavedhevlerën e kthyer ne ja
hedhimndryshoresrezultati. Nësegërmasipasfunksionitzanore_apo_joështëzanore e rrisim me
njëvlerën e ndryshoresku po numërojmëzanoret.
Operatori += ështëshkurtimii: x = x + 1 që do tëthotëvlerëssëndryshores x
jepivlerënqëndodhetnëtëdjathtëtëoperatorittëhedhjessëvlerës duke ruajturvlerënqë ka dhe duke e
shtuar me njësaherëqëështë e nevojshmetëzbatohetkjokomandë.
8. Vargjet e karaktereve dhe veprimet me to.

Gjuha python përveçstrukturavetëkontrollit, cikleve, modulevepërbëhetedhengasekuencat.


Sekuencatjanëstrukturatëdhënash, elementet e tëcilavejanëtërenditura. Në python ka 7
llojesekuencash:
 vargjet e karaktereve
 vargjetunikode
 listat
 n-shet
 bytearray
 buffers
 xrange
Sekuencatmëtërëndësishme me tëcilat do tëmerreminëkapitujtpasardhësjanë: vargjet e karaktereve,
listatdhe n-shet.
Operatorëtqëveprojnëteksekuencatjanësinëtabelën e mëposhtme:

sekuencë1 + sekuencë2 bashkimiidysekuencave

sekuencë * n n-numriiherëveqëpërsëritetsekuenca

a in sekuencë kontrollonpërekzistencën e a-sënësekuencë

a not in sekuencë kontrollonpërmosekzistencën e a-sënësekuencë

a[i] indeksimiisekuencës a; numërimifillonnga 0

a[i:j] ndarja ne pjesë e sekuencës a, ngaindeksiinëindeksin j

a[i:j:k] ndarjanëpjesë e sekuencës a, ngaindeksiinëindeksin j me hap k

 Krijimiivargjevetëkaraktereve

Vargjet e karakterevejanëkoleksionekaraktereshtërenditura.
Përt'itreguarpythonit se duamtëkrijojmënjëvargkarakteresh, mjaftontëvendosimthonjëzat.
>>> 'python'
>>> "python123"
>>> """python"""
Siçduketedhengashembulli, thonjzatqëmundtëperdorimpërtëkrijuarvargjet e karakterevejanë: njëshe,
dyshedhetreshe.
Thonjzatnjëshedhedyshenukkanëdallimnëperdorimnganjeratjetra, atopërdorenpërtëmundësuarkrijimin e
fjalëve me apostrof. Psh.: "S'paske", nukmundtëshkruhetmesthonjzashnjëshepasiapostrofi do
tëkuptohejsimbyllje e varguttëkaraktereve. Kështuqënëkëtërastnandihmojnëthonjezatdyshe.
Ndërsathonjzattresheose, siçnjihenndryshe: blloqet e vargjevetëkaraktereve, perdorenpërtëshkruardisarreshta.
>>> """Shembull
vargukarakteresh me thonjza
treshe"""
'Shembull \nvargukarakteresh me thonjza\ntreshe'
Nga ajo qënashfaqetnëekranshohim se janëshfaqurtëtrerreshtattonënënjërreshttëvetëm, sidheçdo fund
rreshtiështëzëvendësuar me njëkarakter \n. Ky karakterpërdoretpërrreshttëri. Pak mëvonë do
tëflasimpërkëtokaraktere.
Nëseduamtëmarrimtekstinnëformënsiç e shkruajtëm, mundtëperdorimkomandën print.
>>>teksti = """Shembull
vargukarakteresh me thonjza
treshe"""
>>> print teksti
Paraqitja:
Shembull
vargukarakteresh me thonjza
treshe

 Metodat e vargjevetëkaraktereve

Nëkapitullin e funksionevepamë se pythonikishtefunksionetëgatshmepërtupërdorurngaprogramuesit.


Metodat e vargjevetëkarakterevejanëfunksione, por ndryshojnëpaksanësintaksëngafunksionet.
- Sintaksa:
vargu.emrimetodes()
Shembull:
>>> a = 'njefjali'
>>> b = a.capitalize()
>>> print b
- Paraqitja:
Njefjalia ështëvargufillestar, ndërsa b ështëvarguiriqëkrijojmënëmënyrëqëtëbëjmëndryshime
(meqenësevargjetjanëtëpandryshueshmeatëherënaduhettëkrijojmenjëvargtëri). Metoda capitalize()
siçkuptohetlehtëkthengërmën e parëtëvargut ne gërmëtëmadhe. Kjometodënukmerrasnjëparametër.

9. Listat, N-shet (Tuples), Fjalorët dhe Skedarët.

Listatdhekrijimiityre

Nësenaduhettëgrupojmëtëdhënatëllojevetëndryshme, do tënaduhetnjëllojtjetër e
dhëneqëkryenkëtëdetyrë. Pra, një e dhënëqëmbantëdhënatëllojevetëndryshme. Vargjet e
karaktereveashtusiçedheipamënëkapitullin e mëparshëm, janëstrukturahomogjene,
listatjanëheterogjene.
Listatjanëkoleksionevlerashtërendituratëndryshueshme.
Këtovleraquhenelementedhemundtëjenëtëllojevetëndryshme. Listatmundtëindeksohen,
mundtëveçohendisaelementetëtyre, mundtëbashkohenpërmesoperatorit +,
tëpërsëritenpërmesoperatorit * njësojsivargjet e karaktereve.
Ndryshengakëtotëfunditqëjanëhomogjene, listatjanëheterogjene. Elemenetetdhemadhësia e
listavejanëtëndryshueshme.
Sintaksapërkrijimin e listaveështë
[elementet e listëstëndarënganjëritjetri me prejse]
Shembull:
>>>kengetari = ['serj', 'tankian', 1967]
Lista jonëkengetari, ështënjëlistëheterogjene: përmbandyvargjedhenjënumër.
 Indeksimi, ndarjanëpjesëdhematricat
Njësojsistringjetedhelistatmundtëindeksohendhetëveçohendisaelemente. Numërimifillonnga zero.
>>>lista = ['vargjet', 'listat']
>>>lista[1]
'listat'
>>>muzike = ['pop', 'r&b', 'rock', 'soul']
>>>muzike[1:2]
'r&b'
>>>muzike[-1]
'soul'
Matricatjanëparaqitje e tëdhënavenëtabelë. Përtëshëtiturnëelementet e tabelësnevojitendyindekse,
njëripërrreshtindhetjetripërshtyllën.
Shembull: Tëkrijojmënjëmatricë me përmasa 3x3.
>>>matrica = [
[1,2,3],
[4,5,6],
[7,8,9]
]
>>>matrica[0][2] # rreshtii pare elementiitrete
3
>>>matrica[2][1] # rreshtiitreteelementiidyte
8
 Shtimiielementevetëlistës
Gjatëpunës me listatnanevojitettështojmëelementetërinj. Meqenëselistatjanëtëndryshueshme,
atomodifikohen pa qenënevojatëkrijohetnjëlistë e re.
Njëmënyrëpërshtimin e elementenënjëlistëështëpërdorimiioperatorittëbashkimit +.
Shembull: Listëstonë me anetëoperatorit + do t'ishtojmënjëlistëtë re. Lista
qëkemikrijuarpërmbanvargje, numrasiedhenjëlistë me vargje.
>>> x = ['abc', 123, ['liste', 'tjeter']]
>>> x + ['d','ef']
['abc', 123, ['liste', 'tjeter'], 'd', 'ef']
Duhettëkemiparasysh se nukmundtëbashkojmësekuencatëllojevetëndryshme, kështu p.sh
nukmundtëbashkojmënjëlistë me njëvarg. Perndryshemundtëmarrimgabimsintakse. Me
parëduhettëkujdesemiqët'ikthejme ty dyjasekuencattënjëlloji.
- Shembull:
>>>str([1, 2, 3]) + 'abc'
- Paraqitja:
'[1, 2, 3]abc'
Tëdhënatikemikthyernëvarg me anëtëfunksionittëgatshëmtëpythonitstr(). Ky
funksionkthenlistëntonë me numranënjëvarg. Nëkëtërastbashkimiështëimundur. Tani do
tëperdorimfunksioninlist(), icilikthentëdhënat ( kryesishtvargjet) nëlistë.
>>>list('123') + [4,5,6]
- Paraqitja:
['1', '2', '3', 4, 5, 6]
Njëtjetërmënyrëpërtështuarelementenënjëlistëështëpërdorimiimetodave:
append()
extend(listë)
insert(indeksi, e dhëna)
Metodaappend() merrnjë argument qëmundtëjetëiçdollojidheishtonelementetnë fund tëlistës.
Metodaextend() është e ngjashme me metoden append(), por ndryshonngaargumentiqëmerr:
merrvetëmlistë. Metodainsert() shtonvetëmnjë argument nëlistë para indeksitqë ne përcaktojmë.
>>>fjale = ['libra', 'kompjuter']
>>>fjale.append('muzike')
>>>fjale
['libra', 'kompjuter', 'muzike']
>>>fjale.extend(['programimi', 'python'])
>>>fjale
['libra', 'kompjuter', 'muzike', 'programimi', 'python']
>>>fjale.insert(2, 'gjuhashqipe')
>>>fjale
['libra', 'kompjuter', 'gjuhashqipe', 'muzike', 'programimi ne python']
Lista jonëquhetfjaledhepërmbanfjalët: libra dhekompjuter. Me metodenappend() ne
kemishtuarnjëfjalëtë re në fund tëkësajliste. Kjometodë, ashtusiç e thamëedhe me lartmerr
argumenta tëçdolloji, ne rastintonë ka njëvarg. Më pas ne ishtuamlistëssonëdyfjalëtëtjera duke
përdorurmetodenextend(). Kjometode, ndryshengametodaappend(), merrsi argument vetëmlistë. Po
tëprovonitëjepnisi argument njëvarg do tëshikoni se kjometodë do ta kthejëatënëliste duke
ndarënëkarakteremëveteçdogërmëtëvargut.
Ne fund listësishtuamedhevargun 'gjuhashqipe', tëcilin e vendosëmnëpozicionin me indeks 2
tëlistësekzistuese.
- Heqja e elementevetëlistës
Kur flasimpërshtimelementeshnënjëlistë, menjëherëmendojme se
duhettëkëtëmenyraedhepërt'ifshirëkëtaelementeoseedhevetëlistën.
Metodatjanë:
remove()
pop()
Komanda del bëntëmundurgjithashtuheqjen e elementevetëlistës.
Metodaremove() heqatë element ngalistaqë ne iakalojmësi argument. Metodapop() heqelementin e
fundittëlistësdhena e kthenatë. Komanda del fshinnjë element sipasindeksitoseedhetëgjithëlistën.
>>>fjale = ['lule', 'qiell', 'stine', 'toke']
>>>fjale.remove('stine')
>>>fjale
['lule', 'qiell', 'toke']
>>>fjale.pop()
'toke'
>>>fjale
['lule', 'qiell']
>>> del fjale[1]
>>>fjale
['lule']
>>> del fjale #fshinlistënngamemoria
- Veprimet me listat
Bashkimi me operatorin +
Listatashtusiedhevargjetmundtëbashkohenmestyre, nëpërmjetoperatorittëbashkimit +.
>>> l1 = ['elementii pare', 'elementiidyte']
>>> L2 = ['ELEMENTI I PARE', 'ELEMENTI I DYTE']
>>> l1+L2
['elementii pare', 'elementiidyte', 'ELEMENTI I PARE','ELEMENTI I DYTE']
Gjithashtumundtëkrijojmënjëlistëtë re duke ihedhurvlerënpërmesbashkimittënjëlisteekzistuese me
njëlistëtë re:
>>> L = l1 + ['elemente']
>>> L
['elementii pare', 'elementiidyte', 'elemente']
Nukmundtëbashkojmënjëlistë me njëvarg. Praduhettëjenësekuencatënjëllojisiçështëshpjeguarlartnë
"Shtimiielementevetëlistës".
- Modifikimiilistave
Modifikimiilistave, bënndryshimetëelementevepakrijuarnjëlistëtë re siçndodhte me vargjet e
shenjave. Listatmundtëndryshohen me indeksimdhe me ndarjenëpjesë. Përtëbërëkëtondryshime ne
hedhimvleratnëindeksinosegrupet e indeksuara.
>>> l =['funksion','lista','varg']
>>>l[1]='program'
>>> l
['funksion','program','varg']
>>>l[0:2]=['python','modul','metode']
>>> l
['python','modul','metode','varg']

Funksionet e gatshmetëpythonitpërlistat
Nëlidhje me listatpythoni ka disafunksionetëgatshme. Ndër to mundtëpërmendim:
len()
max()
min()
list()
Funksioni len, ipërdorurgjatëlibritnëshembujt e dhënë, jepsirezultatnumrin e
elementeveqëpërmbannjëlistë.
>>>emra=['Guido von Rossum',['Mark Lutz','pitonista']]
>>>len(emra)
2
Numriielementevetëlistëssonëemraështëdypasielementiidytëështëvetënjëlistë,
pavarsishtnumrittëelementeveqëpërmbankjolistë.
Funksioni max jepsirezulatvlerënmëtëmadhenënjëlistë.
>>>lista=['fjale','televizion','pc']
>>> max(lista)
'televizion'
Kur elementet e listësjanëvargjesinëshembullin e mësipërm, krahasimibëhetsipasrenditjesalfabetike.
Funksioni min jepsirezultatvlerënminimalenënjëlistë.
>>>lista=['fjale','televizion','pc']
>>> min(lista)
'pc'
Funksioni list kthennjësekuencëtjetër( deritaningasekuencat e tjera ne kemimësuarvargjet) nënjëlistë.
>>>varg='123'
>>> list(varg)
['1','2','3']
- Metodat e gatshmetëpythonitpërlistat
Deri tani ne kemishpjeguardisametodaqëperdorenpërlistatsi:
 append()
 extend(listë)
 insert(indeksi,edhëna)
 pop()
 remove()

Nëtabelën e mëposhtmeshpjegohenshkurtimishtkëtodhedisametodatëtjera

Metoda Shpjegimi

append(x) Shtonnjë element në fund tëlistës

extend(sekuence) Shtonpërmbajtjen e sekuencësnëlistë, tëgjithëelementetnjënganjë

insert(indeksi, e
Vendostëdhënatnëlistë para indeksittëpërcaktuar
dhëna)

Heqelementinsipasindeksitdhe e kthenatësishprehje;
pop(i)
nësenukpërcaktohetindeksiheqelementin e fundit

remove(x) Heqelementin e parëngalista me vlerën x

count(x) Tregonsaherëshfaqetnjë element nëlistë

sort() Rendittëdhënat e listës

reverse() Kthenmbrapshtsirenditjetëdhënat e listës

index(elementi) Jepindeksin me tëvogel ne listë, ne tëcilinshfaqetelementiikërkuar

- Shembull:
>>> x = ['a', 'ab', 'aaa', 'a']
>>>x.count('a')
2
>>>x.sort()
>>> x
['a', 'a', 'aaa', 'ab']
>>>x.reverse()
>>> x
['ab', 'aaa', 'a', 'a']
>>>x.index('a')
2

 N-shet (angl. Tuples)N-shetdhekrijimiityre


N-shetjanëtëngjashme me listatpërnatyrën e tyresimbajtësetëtëdhënavetëllojevetëndryshme.
Ndryshengalistat, n-shetjanësekuencatëpandryshueshmedhevendosenmeskllapavetërrumbullakta ().
>>> n =('abc',123,['liste','me','elemente'])
Nërastetkurduamqë n-shettëkenënjë element tëvetëm, sintaksa e
pythonitnadetyrontëvendosimnjëpresjenë fund.
>>>('abc',)
- Indeksimidhendarjanëpjesë (slicing)
N-shetmundtëindeksohendhetëndahennëpjesë, njësojsiçvepruamedhe me sekuencat e tjera.
>>> n =('abc',123,['liste','me','elemente'])
>>>n[1]
123
>>>n[0:1]
('abc',)
>>>n[-1]
['liste','me','elemente']
- Veprimet me n-shet
Bashkimi me operatorin +
N-shetmundtëbashkohenmestyrepërmesoperatorittëbashkimit +.
>>> n1 =('element',)
>>> n2 =(123,'abc',['liste'])
>>> n1 + n2
- Paraqitja:
('element',123,'abc',['liste'])
Nukmundtëbashkohetnjë n-she me njëvarg apo njëlistë, por vetëmsekuencatënjëlloji.
Nëseduamtëbashkojmënjë n-she me njëvargoselistëduhettëperdorimfunksionin e
gatshëmtëpythonittuple() përtëkthyervargunoselistënnë n-she.
>>> tuple('python')#kthimiivargut ne n-she
('p','y','t','h','o','n')
>>>tuple(['gjuha','python'])# kthimiilistes ne n-she
('gjuha', python')
- Përsëritja me operatorin *
Operatoriipërsëritjes *, përdoretedhetek n-shetnjësojsitekdysekuencatqëkemipërmendurmëherët.
>>> n =('python',)
>>> n *2
('python','python')

- Funksionetdhemetodat e n-sheve
Mëlart u përmendfunksionituple(). Tani po japimshembuj me funksionetmax(), min() dhelen()
tëcilatikemiparëedheteksekuencat e tjera.
>>> n =('element',2011,['liste'])
>>> max(n)
'element'
>>> min(n)
2011
>>>len(n)
3
N-shetnukkanëmetoda. Atojanësekuencatëpandryshueshmedhe duke qenetë tilla
nukmundtëperdorenmetodatqëderitaniikemiparëtëbëjnëndryshimetësekuencave.
N-shetjanëmbajtësetëdhënashtëllojevetëndryshme. Atojanësekuencatëpandryshueshme.
Faktiqëjanësekuencatëpandryshueshmenukibëntëpadobishmepasiperdorimet e tyrejanëtëndryshme.
Nësenanevojitenrastekurduamqëtëdhënattëmosndryshohen n-shetnavijnenëndihmë.
Shpeshherëkemitëbëjmë me tëdhënatë tilla tëcilatnuk do tëndryshohen, dhenëkëtoraste n-
shetjanëllojimëipërshtatshëmdhepraktikpërtupërdorur.

 Fjalorët
 Krijimiifjalorëve

Deri tanikemiparëdisallojetëdhënash: tëdhënatqëjanëtëllojitnumër (numrat e plotë, dhjetorëetj.),


tëdhënatqëjanëtëllojitsekuencë (vargje, lista, n-she etj.). Tani do tëshohimtëdhënat e llojitrelacion:
fjalorët.
Relacionetjanëkoleksionetëndryshueshmeqëgrupojnëstrukturatëdhënashtëllojevetëndryshme.
Fjalorëtjanëivetmillojqënaofronpythoninëkategorinërelacione. Përfjalorëtmundtëthemi se janë:
 Tëndryshueshëm
 Tëparenditur
 Vleravetëfjalorëveireferoheminëpërmjetçiftit: çelës-vlerë.
 Çelësatjanëunikëdhetëpandryshueshëm.
Fjalorëtmundt'ikrahasojmë me fjalorëtgjuhësorë. Kur duamtëdimëshpjegimin e
njëfjaletëcaktuarnëfjalor, ne ireferohemifjalës, përtëgjeturpërmbajtjen e saj. Nëanalogji me
fjalorëtgjuhësorëedhe me fjalorëtnë python veprohetnëtënjëjtënmënyrë. Fjalorëtkanëçelësa
(sifjalëtqëduamtëkërkojmënëfjalor) dhevlera( sishpjegimiikëtyrefjalëve).
Njësojsinëfjalorëtgjuhësorë, kufjalëtjanëunikendërsashpjegimetedhemundtëpërsëriten,
edhetekfjalorët e pythonit, çelesatjanëunikendërsavlerat jo detyrimisht. Shembujmundtësjellimpsh.
me fjalëtudhë-rrugë.

Rrugë:

1. Brezoserrip toke irrahur a ishtruarpërtëkaluarnjerëzit, kafshëtdhemjetet; vijanëajërosenë det,


nëpërtëcilënkalojnëmjetet e fluturimit a tëlundrimit; udhë.
2. Largesaqëduhettëpërshkojmëpërtëshkuarnganjë vend nënjëtjetër;
kohaqëduhetpërtëshkuarnënjë vend tjetër.

Udhë

1. Brezoserrip toke irrahur a ishtruarpërtëkaluarnjerëzitdhemjetet; vijanëajërosenë det,


nëpërtëcilënkalojnëmjetet e fluturimit a tëlundrimit; rrugë.
2. Largësiapërtëshkuarnganjë vend nënjëtjetër; kohaqëduhetpërtëshkuarnënjë vend tjetër.
Nëfjalordisangashpjegimet e këtyredyfjalëvejanëpothuajsetënjejta, por dyherëfjalënudhë apo
rrugënuk e gjejmëtërenditurnëfjalor. Nësenëfjalorët e pythonit do tëtentonimtëkishimdyçelësa me
tënjëjtinemërdhevleratëndryshme, do tëpranohejvetëmvlera e funditqë do t'ijepnim.
Thënëndryshevleraqë do t'ijepnimherën e dytë, nukkrijonnjëçelëstëri por ndryshonvlerën e
çelësitqëkrijuam.

Sintaksapërkrijimin e njëfjaloriështëkjo:
emri_fjalorit={'celes': 'vlere', 'celesitjeter': 'vleratjeter'}
Shembull:
>>>fjalor = {'gjuha': 'perl', 'gjuha': 'python'}
>>>fjalor
{'gjuha': 'python'}
Siç e shohimkemidyçelësa me tënjëjtinemërdhekanëdyvleratëndryshme,
nëkëtërastmbahetvetëmvlera e fundit.
Çelësat e fjalorëvejanëtëpandryshueshëm. Kjo do tëthotë se mundtëjenëtëllojit: numra, vargjedhe n-
she qëpërmbajnënumra, stringjeosevetë n-she por jo lista,
pasikëtotëfunditsiçikemiparëjanëstrukturatëndryshueshme.
Pythonijepgabimsintaksenësetentohetnjëlistëpërçelës. Nëseçelesat do
tëishinstrukturatëndryshueshme ne
momentetëcaktuaramundtëndryshonindhetëreferonindikutjetërngavleraqë ne ikemidhënë.

Fjalorëtjanëgrupimetëndryshueshme, tëparenditura, tëllojevetëndryshmetëtëdhënave.

 Shtimiielementevedheheqja e tyre

Sintaksapërtështuarelementet e njëfjaloriështë:
emri_fjalorit['celesi'] = 'vlera'
- Shembull:
>>> f = {'libra': 'programim', 5: 'pese'}
>>> f['printer'] = 'hp'
>>> f
{'libra': 'programim', 5: 'pese', 'printer': 'hp'}
Thamë se fjalorëtjanëtëndryshueshëm. Përtëmodifikuarvlerat e elementevetënjëfjaloripërdoret e
njëjtasintaksësipërtështuarelementetërinj.
>>> f['libra'] = 'python'
>>> f
{'libra': 'python', 5: 'pese', 'printer': 'hp'}
Nëkëtëshembullkemindryshuarvlerën e çelësit libra ngaprogramimnë python.
Përtëhequrelementetnënjëfjalorpërdoretkomanda del dhemetoda clear. Me anëtëkomandës del
mundtëheqimnjë element tëfjaloritosemund ta fshijmëkompletatë.
>>> del f[5]
>>> f
{'libra': 'pyton', 'printer': 'hp'}
>>> del f #fshintegjithefjalorin
Metodaclear() fshintëgjithëelementet e njëfjalori por jo vetëfjalorin, prambetetnjëfjalor bosh.
Fjalorët bosh nukkanëelementeataparaqiten me dykllapa {}.
>>> f = {'numer': 5, 'muaj': 'shtator'}
>>>f.clear()
>>> f
{}

- Shembull: Regjistrimiipopullsisë

Ne mënyrëqëtëshpjegojmëmëqartëfjalorët do
tëjapimnjëshembullicilipërmbledhedhedisanganjohuritë e deritanishme.
Programiështëpërregjistrimin e popullsisëdhesipaskërkesavetonanajeptëdhënat e
njëosemëshumëindividi. Le ta shohim hap pas hapi. Hapninjëdritaretë re dhe le tëshkruajmëkodin.
Fillimishtduhettëkemitëqartë se çdoindividduhettëketë: emrin, mbiemrin, atësinë, ditëlindjen, kodin
zip, kombësinëdheshtetësinë. Këtotëdhëna do tëruhennënjë n-she me fjalorë. N-
shetjanëtëpandryshueshmedheshumëpraktikepërtupërdorurnëkëtërast.

Pra n-shja me emrinnjerëzit do tëkëtëkatërelementetëllojitfjalor:

njerezit = (
{
'emri': 'ana',
'mbiemri': 'prifti',
'atesia': 'genci',
'ditelindja': '29 06 1983',
'kodizip': '3000',
'shtetesia': 'shqiperi',
'kombesia': 'shqiperi'
},
{
'emri': 'alma',
'mbiemri': 'hoxha',
'atesia': 'astrit',
'ditelindja': '06 08 1993',
'kodizip': '1000',
'shtetesia': 'itali',
'kombesia': 'shqiperi'
}
)
Ne duamqëky program tëjapëtëgjitharezultatet e njëfjalorisipasfushëssëkërkimitqëzgjedhpërdoruesi.
P.sh përdoruesimundtëdojët'ishfaqennëekrantëgjithëatanjerëz me tëgjithatëdhënatperkatësetëtyre,
sipasmbiemrit. Nëse do tëdonimtënashfaqeshintëgjithëindividët me emëraltin, do
tëmerrnimkëtëpergjigjengaprogrami:
{'emri': 'ana', 'mbiemri': 'prifti', 'atesia': 'genci', 'ditelindja': '29 06 1986', 'kodizip': '3000', 'shtetesia':
'shqiperi', 'kombesia': 'shqiperi'}
{'emri': 'alma', 'mbiemri': 'hoxha', 'atesia': 'astrit', 'ditelindja': '06 08 1993', 'kodizip': '1000', 'shtetesia':
'itali', 'kombesia': 'shqiperi'}
Taninaduhettëkrijojmënjëfunksionqëruantëdhënatngakërkesatqëjeppërdoruesi, kërkonpërekzistencën
e këtyrekërkesavetek n-shjanjerëzitdhe fund shtondheruannënjëlistërezultatin.
def kerko_sipas(kriteri, kerkimi, db):
rezultatet = []
for rekord in db:
if rekord[kriteri] == kerkimi:
rezultatet.append(rekord)
return rezultatet
Funksionikerkosipas ka treparametra: kriteri, kerkimidhe db. Parametrikriteri do
tëpërdoretpërtëpërcaktuarfushën e kërkimittëcilatjanë: emer, mbiemer, atesia, ditelindja, zipkodi,
shtetesiadhekombesia. Nëkëtë moment naduhettëkrijojmënjëlistëkriteret e
ciladuhettëpërmbajëkëtoelemente.
kriteret = ('emri', 'mbiemri', 'atesia', 'ditelindja', 'kodizip', 'shtetesia', 'kombesia')
Parametriidytëifunksionitkerko_sipasështëkerkimi. Ky parametërështëinputiipërdoruesit,
icilimerretpasipërdoruesi ka përcaktuarkriterinsipastëcilit do tëshfaqenrezultatet. Psh. nëse ka
zgjedhurt'ishfaqenrezultatetsipaskombësisë, ikërkohetngaprogramitëshkruajënjëkomb.
Parametriitretëqëndodhettëfunksionikerko_sipasështë db.
Sipasparimittëpërgjithësimittëkodittëshpjeguartekapitulliifunksioneve, funksioninkerko_sipas e
krijojmënëmënyrëtëtillëqëtëjetësamëipërgjithshëm. Nëprogramintonëparametritdb do
t'ikalojmësivlerë n-shennjerezittek e cila do tëbëhenkëtokërkime.
Funksionikërkontekelementet e n-shes, nësenjëngafushatgjendetatëherë e
shtonatënëlistëpërmesmetodësappend() dhe e ruanteklistaqëfillimishtështëpërcaktuartëjetë bosh.
Taninaduhettëmarrimtëdhënatngapërdoruesidhetëthërrasimfunksioninqëkrijuam.
kerkimi = ''
while kerkimi == '':
try:
kerkimi = int(raw_input('Do tekerkonisipasemrit(0), mbiemrit(1), atesise(2), ditelindjes(3), kodit
zip(4), shtetit(5) apo kombit(6)? '))
except ValueError:
print "Zgjidhnjenumer"
kriteri = kriteret[kerkimi]
termi = raw_input('Shkruaj ' + kriteri + ': ')
rekordet = kerko_sipas(kriteri, termi, njerezit)
if rekordet:
for rekordi in rekordet:
print rekordi, "\n"
else:
print kriteri, 'nuk u gjet'

Kjopjesë e kodit ka filluar me deklarimin e njëndryshoreje, kerkimi, që ka vlerën ''.


Përsakohëkerkimiështë bosh '' zbatokomandat e mëposhtme. Kur
hedhimnjëvlerëtekkjondryshoreciklindalon.
Inputiqëmarrimngapërdoruesiruhetnëndryshorenkerkimi. Nëseinputinukështënumër,
shfaqetnjëmesazhqëishpjegonperdoruesitqëmundtëvendosëvetëmnumra. Kjoarrihettekrreshtat e
kodit:
except ValueError:
print "zgjidhnjenumer"
Inputiqëmerretngapërdoruesiiruajturtekndryshorjakerkimiihidhetsivlerëndryshoreskriteri.
kriteri=kriteret[kerkimi]
Taniqëpërdoruesiështëpyetur se sipascilëskategori do
tëkërkojënaduhettëpyesimserishpërpermbajtjenqë do kërkojë.
termi=raw_input('Shkruaj ' + kriteri + ': ')
Pasipërdoruesi ka zgjedhurkategorinëpsh. 1 përmbiemrinatëherëi del njëpyetje e
dytëkuithotënëkëtërast: "Shkruajmbiemri:". Mbiemriqëpërdoruesishkruanruhettekndryshorjatermi.
Nëkëtëfazëthirretfunksionikerko_sipasdhevleraqë ai kthenijepetndryshoresrekordet.
Funksionitkerko_sipasikalohen tri argumenta: kriteri, termidhenjerezit. Këtotre argumenta
janëinputiqëmorëmnëfillimpërkategorinë, termiqëshkruajtipërdoruesinëbazëtëkategorisëdhe n-
shjanjerezit. Pra ne ithemifunksionitmerrkategorinë, përmbajten e kësajkategoriedhe n-shen. Pythoni
e ndrepretleximin e
rreshtittëmëposhtëmtëkodittonëdheshkontëzbatojëkomandatqëpërmbanfunksionikerko_sipas.
Nësefunksioniktheurekorde (nënjëbazëtëdhënash, rekordquhetnjërresht me vlerat e secilësfushë)
atëherëishfaqimnëekrannjënganjë, përndryshethemi se kykriter me këtëvlerënukgjendet.
if rekordet:
for rekordi in rekordet:
print rekordi, "\n"
else:
print kriteri, 'nuk u gjet'
Psh. nësepërdoruesizgjedhfushën 0 praemrindheshkruannjëemërqënukndodhetteknjerezit,
atëherëithuhet se kyemërqëpërdoruesi ka shkruarnuk u gjet.
Programittonëmundt'ibëjmështesa( përmirësime) tëndryshme.
Njëgjëqëmundtëndodhëshpeshështëqëperdoruesitëshkruajënjënumërmëtëmadhsesa 6. Këtëmund ta
mënjanojmënësevendosimnjë kufi tëzgjedhjeve, gjithashtutëlajmërojmëpërdoruesinpërpërzgjedhjen
e numrave.
kerkimi = ''
while kerkimi == '':
try:
kerkimi = int(raw_input('Do tekerkonisipasemrit(0), mbiemrit(1), atesise(2), ditelindjes(3), kodit
zip(4), shtetit(5) apo kombit(6)? '))
except ValueError:
print "Zgjidhnjenumer"
if kerkimi != '' and ( kerkimi< 0 or kerkimi> 6 ):
kerkimi = ''
print "zgjidhnjenumer midis 0 dhe 6"
kriteri=kriteret[kerkimi]
termi = raw_input('Shkruaj ' + kriteri + ': ')
rekordet = kerko_sipas(kriteri, termi, njerezit)
if rekordet:
for rekordi in rekordet:
print rekordi, "\n"
else:
print kriteri, 'nuk u gjet'
Rreshtatqëjanështuarjanëtheksuardukshëm. Nësepërdoruesizgjedhnjënumërmëtëmadh se 6, ai
njoftohetpërzgjedhjenqëduhettëbëjëdhepyetetsërishngaprogrami.
Njëtjetërndryshimështëqëpërdoruesitmost'imbylletprogramipasimerrnjëpergjigjengaprogrami por
tëketëmundësitëvazhdojëkërkimet. Na duhettëpyesimpërdoruesinnëse do tëvazhdojë apo
tëmbyllëprogramin. Përsakohëqëpërdoruesinajepsi input fjalën po, pradeshirontëvazhdojë ne e
kthejmërrjedhën e programitnëfillim.
vazhdo = 'po'
while vazhdo == 'po':
kerkimi = ''
while kerkimi == '':
try:
kerkimi = int(raw_input('Do tekerkonisipasemrit(0), mbiemrit(1), atesise(2), ditelindjes(3), kodit
zip(4), shtetit(5) apo kombit(6)? '))
except ValueError:
print "Zgjidhnjenumer"
if kerkimi != '' and ( kerkimi< 0 or kerkimi> 6 ):
kerkimi = ''
print "zgjidhnjenumer midis 0 dhe 6"
kriteri = kriteret[kerkimi]
termi = raw_input('Shkruaj ' + kriteri + ': ')
rekordet=kerko_sipas(kriteri,termi,njerezit)
if rekordet:
for rekordi in rekordet:
print rekordi, "\n"
else:
print kriteri, 'nuk u gjet'
vazhdo = raw_input('Deshirontekerkoshserish? (po vazhdon / cdobutontjeter per tendaluar) :')
Programiiplotë me tëgjithandryshimetështëky:
# nje n-she me fjaloreeshtestruktura me praktike per teruajturtedhenat
njerezit = (
{'emri': 'ana', 'mbiemri': 'prifti', 'atesia': 'genci', 'ditelindja': '29 06 1986', 'kodizip': '3000', 'shtetesia':
'shqiperi', 'kombesia': 'shqiperi'}
{'emri': 'alma', 'mbiemri': 'hoxha', 'atesia': 'astrit', 'ditelindja': '06 08 1993', 'kodizip': '1000', 'shtetesia':
'itali', 'kombesia': 'shqiperi'}
)
# kjondryshorenalehtesonperzgjedhjen e kategorisepermesnjenumri
kriteret = ('emri', 'mbiemri', 'atesia', 'ditelindja', 'kodizip', 'shtetesia', 'kombesia')
# funksioniqe ben krahasimin e vleres se kerkuartekstrukturajone
def kerko_sipas(kriteri, kerkimi, db):
rezultatet = []
for rekord in db:
if rekord[kriteri] == kerkimi:
rezultatet.append(rekord)
return rezultatet
# ketufillonekzekutimiiprogramit
vazhdo = 'po'
while vazhdo == 'po':
kerkimi = ''
while kerkimi == '':
try:
kerkimi = int(raw_input('Do tekerkonisipasemrit(0), mbiemrit(1), atesise(2), ditelindjes(3), kodit
zip(4), shtetit(5) apo kombit(6)? '))
except ValueError:
print "Zgjidhnjenumer"
if kerkimi != '' and ( kerkimi< 0 or kerkimi> 6 ):
kerkimi = ''
print "zgjidhnjenumer midis 0 dhe 6"
kriteri = kriteret[kerkimi]
termi = raw_input('Shkruaj ' + kriteri + ': ')
rekordet = kerko_sipas(kriteri, termi, njerezit)
if rekordet:
for rekordi in rekordet:
print rekordi, "\n"
else:
print kriteri, 'nuk u gjet'
vazhdo = raw_input('Deshirontekerkoshserish? (po vazhdon / cdobutontjeter per tendaluar) :')

10.Paketat dhe modulet.


 Moduletdhekuptimiityre

Nëkapitujt e parëtëlibritështëtreguarmënyra e ruajtjessënjëkodinë python, qëkosistontenëcilëndosje


do tëruhejkykoddheprapashtesaqëduhejtëishte e formës .py.
Shpeshnaduhettëpërdorimpjesëkoditëshkruaramëherët, pasiprogramet e
mëdhanukmundtëpërfundohenbrendaditës. Përtëripërdorurkodet e ruajturapërdoretsintaksa:
- import emriiskedarit
Moduletnukjanëgjëtjetërvecseskedarëtëruajtur me prapashtesën .py. Mundtëthemi se
moduletjanëprograme. Njëndërmodulet e gatshmemëtënjohuraështë moduli math,
icilipërmbanfunksionedhendryshorematematikore. Përtëpërdorurfunksionetosendryshoret e një
moduli, fillimishtduhet ta importojmëatë.
>>> import math
>>>math.sqrt(9)
3.0
Përtëpërdorurfunksionin e gatshëmtërrënjëskatroreicilindodhetbrendamodulit math, fillimishtduhet
ta importojmekëtëmodul, ndryshemarrimnjëgabimsintakse. Nëshembullin e
mëposhtëmështëpërdorurnjëndryshore( konstantja pi) nga moduli math.
>>> import math
>>>math.pi
3.141592653589793

Moduletjanënjëgrupfunksionesh e ndryshoreshqëndodhennënjëskedar.
Nësegjatëkodit do
tënaduhetvetëmnjëfunksionosendryshorenganjëmodulivetëmmundtëperdorimkëtësintaksë:
from emrimodulit import emrifunksionit
Shembullipërdorimittëfunksionittërrënjëskatrorenga moduli math:
>>> from math import sqrt
>>>sqrt(9)
3.0
Nësetentojmëtëperdorimnjëfunksiontjetërtëmodulit math do tëhasimnjëgabimsintakse, pasinga
moduli math ështëthirrurvetëmfunksioniirrenjeskatrore, dmthnukjanëtëgatshmetëgjithafunksionet
apo ndryshoret e këtij moduli.
>>> from math import sqrt
>>>sqrt(9)
3.0
>>>sqrt(4)
2.0
>>>sin(30)

Traceback (most recent call last):


File "<pyshell#3>", line 1, in <module>
sin(30)
NameError: name 'sin' is not defined

 Krijimiimoduleve

Modulet e gatshmetëpythonitnalehtësojnëshumëpunen, por


nërastespecifikenalindnevojatëkrijojmemodulettona. Përtëkrijuarnjëmodulmjaftonqëkodin ta ruajmë
me prapashtesen .py. Njëndërgjeratmëtërëndësishmenëlidhje me këtëpjesëështëvendinëtëcilin do
tëruhetmateriali. Përtëmospaturproblemegjatëtestimit do
tëishtemirëtëruhejnëvendinkuështëregjistruar python (psh. në c:/python27).
Le tëkrijojmënjëmodulshembull. Shkruajmëkëtëkodnënjëdritaretë re tëprogramit (File > New
Window):
>>> print 'Krijimiimoduleve'
E ruajme (Save) direktnëdosjen (folderin) kuështëiinstaluarprogrami python.
Kujdestëmadhduhettreguar me emrinqë do tëruhetkykod, pasikyështëemriimodulitdhe me këtëemër
do tëimportohet. Le ta quajme shembull.py. Tanisapokrijuamnjëmodul me emër shembull.py.
Përtëimportuarmodulinperdorimsintaksen import emrimodulit duke
pasurparasyshtëshkruajmëvetëmemrin e modulit pa prapashtesen.
>>> import shembull
Krijimiimoduleve
Nëseprovohetsërishtëimportohetkymodul, nukndodhasgjë.
Kjoështëmenduarpërtëevituarnjëcikëltëpafundëmqëmundtëndodhenërastetkurimportojmemëshumë
se njëmodulnënjë moment tëcaktuar.
Vlera __main__
Nësegjatëimportimittënjë moduli do tëekzekutoheshintëgjithafunksionetqëmbartkymodul do
tëishteshumë e pakëndëshmerrëmujanëkodintonë.
Gjatëprogramimitshpeshherënaduhetvetëmimportimiimodulitdhe jo ekzekutimiitij.
Njëmënyrëpërtëpaturkontrollnëekzekutimindirekttëmoduleveështëpërdorimiindryshores __name__.
Kjondryshoremerrvlerën __main__ kur moduli ekzekutohetdirektdhemerrsivlerëemrin e
vetëmodulitkur moduli nukekzekutohetdirekt por importohetdikutjetër. Sintaksa e plotëështë:
if __name__ == "__main__":
bllokkodi
Ky rreshtbëntëmundurkontrollinmbiekzekutimin e menjëhershëmtëkoditgjatëimportimit.
Shembull:
Krijojmënjëmodul me emrin mdl1.py me këtërreshtkodi:
print 'Pershendetjenga moduli 1!'
Krijojmëdhenjëmodultjetër mdl2.py me këtorreshtakodi:
import mdl1
print 'Pershendetjenga moduli 2!'
Le t'iekzekutojmenjeri pas tjetritmodulet. (Run > Run Module, osengatastierashtypbutonin F5). Pas
ekzekutimittëmodulittëparëmarrimkëtëpergjigje:
Pershendetjenga moduli 1!
Ndërsa pas ekzekutimittëmodulittëdytë:
Pershendetjenga moduli 1!
Pershendetjenga moduli 2!
Siçshohim moduli qëimportuamekzekutohetdirekt. Përtëshmangurkëtëgjë do tëperdorimvlerën
__main__. Nëkodin e modulittëparë do tëbëjmëndryshimet e mëposhtme:
if __name__ == "__main__":
print 'Pershendetjenga moduli 1!'

Nëseekzekutojmëdirektmodulin e parësërish, do tëmarrimtënjëjtinrezultatsimëparë:


Pershendetjenga moduli 1!
Ndërsakurekzekutojmëmodulin e dytë, nëtëcilinnukbëmëasnjëndryshim, rezultatiështëvetëm:
Pershendetjenga moduli 2!
Kjondodhsepsekur moduli 1 ekzekutohetdirekt, python ijepndryshores __name__ vlerënspeciale
__main__. Prandajkushtijonë if ështëivërtetënëatërastdhefjaliaprintohet.
Ndërsakurekzekutojmëmodulin 2, moduli 1 thërritetpërmeskomandës import. Nëkëtërast python
ijepsivlerëndryshores __name__ emrin e vetëmodulit( nëkëtërast mdl1).
Prakushtinukështëmëivërtetëdhefjalianukprintohet.
Për ta provuarkëtëmundtëbëjmëkëtëndryshimnëmodulin 1:
if __name__ == "mdl1":
print 'Pershendetjenga moduli 1!'

Nëkëtërastnëse e ekzekutojmëdirektmodulin 1 fjalianuk do tëprintohetpasi __name__ ka


vlerënspeciale __main__, prakushti if ështëirremë:

ndërsanëseekzekutojmëmodulin 2 ku moduli 1 thërritet me import, vlera e __name__ është mdl1


prandajfjalia do tëprintohet.
Pershendetjenga moduli 1!
Pershendetjenga moduli 2!

11.Programimiiorientuarnëobjekte
Nëkapitullin e mëparshëm u shpjeguankonceptetkryesoretëprogramimittëorientuarnëobjekte.
Klasatdheinstancat e saj, atributet e klasavedhetëinstancave,
janëkonceptetërëndësishmetëprogramimittëorientuarnëobjekte. Disangapërparësitë e
këtijllojprogramimi, ndryshenga ai qëkemibërë para se tëflisnimpërkapitullinObjektetdheklasat,
qëishteprogramimifunksionalpasibazohettekfunksionet, janë: polimorfizmi,
trashëgimiadheenkapsulimi( njëpërshtatjekjongaanglishtja encapsulation
qëmundtëshpjegohetsinjëfoljeqëpërshkruanmbylljen e diçkajesikur e fusimnënjëkapsulë).
Python ështënjëgjuhë e krijuarqënëfillimpërtëqenëgjuhë e orientuarnëobjekte. Në python
çdogjëështëobjektmadjeedheklasatvetëjanëobjekte. Nëkëtodydekadat e funditsidomos,
iështëdhënëshumëpërparësikësajmënyreprogramimi,
gjithsesimbetetendeihapurdebatisicilametodologjiprogramimiështëmë e mira.
Programimiiorientuarnëobjekteofronmëshumëavantazhenëprogramet e mëdha, kurreshtat e
koditnukmundtëshkruhennganjëprogramuesivetëm. Mbitëgjitha tri
janëparimetqëofrojnëpërparësitëmëtëmëdhatëprogramimittëorientuarnëobjekte:
 Polimorfizmi
 Trashëgimia
 Enkapsulimi (Fshehja e informacionit)
Se cilaështëmë e rëndësishmjaprejtyrenukështë e vendosurrigorozisht.
Programuestëndryshëmkonsiderojnëpolimorfizminosetrashëgiminëtëparëgjithashtunukpërjashtohete
nkapsulimisimëirendesishmingaprogramuestëtjerë.

 Polimorfizmi

Polimorfizmiështënjëteknikëqëpërdoretnëprogramimin e
orientuarnëobjektedheofronpërparësimbiprogramiminfunksional. Deri tani ne
kemiparëshembujkodeshvetëm me njëklasë, por
gjatëprogramimittëorientuarnëobjektezakonishtkemitëbëjmë me shumëklasa.
Përtëshpjeguarpolimorfizmin para se ta përkufizojmësikoncept le tëmarrimnjëshembulltëthjeshtë: Le
tëkemidyklasatëndryshme: klasaKatrordheklasaTrekendesh. Nësekeminjëmetodëvizato, me
anëtëpolimorfizmit ajo veprontektëdyjaklasatdhevizatongjëratëndryshme.
Prakuptimiimetodësvaretngaklasa. Kur vepronmbiinstancatëklasësKatror, metodavizato,
jepnjëkatror, ndërsa me instancat e klasësTrenkendeshvizatonnjëtrekëndësh.
Polimorfizmimundësonpërdorimin e njëmetodetekobjektetëklasavetëndryshme.
Le tëshikojmenjëshembulltëthjeshtëtëpërdorimittëpolimorfizmit:
>>> class Katror(object):
def vizato(self):
print 'Katror'
>>> class Trekendesh(object):
def vizato(self):
print 'Trekendesh'
>>> def vizato_forme(forma):
forma.vizato()
>>>katror = Katror()
>>>trekendesh = Trekendesh()
>>>vizato_forme(katror)
Katror
>>>vizato_forme(trekendesh)
Trekendesh
TëdyjaklasatKatrordheTrekendeshkanënganjëmetodëvizato, e cilashfaqnëekransipasklasësnjërresht:
KatroroseTrekendesh. Metodatjetërvizato_forme()
qëmerrsiparametërnjëinstancëtënjërësprejklasavetona,
thërretmetodenvizatoqëgjendettektëdyjaklasat.
Falëpolimorfizmitmundtërealizojmekëtëmetodeqëpunonsipasobjektittëklasësqëipërket. Nërastin e
mësipërmmetodavizato_forme() merrnjëherëinstancën e klasësKatrordheshfaq ne ekran “Katror”
dhemë pas instancën e klasësTrekendeshqëshfaq ne ekran “Trekendesh”.
Prametodavizato_formethërritinëtëdyjarastetmetodënvizatotëinstancave, por
kjometodëveproindryshenëvaresitëinstancëssëklasësqëipërket.

 Trashëgimia

Trashëgimiaashtusipolimorfizmiështënjëtjetërpërparësi e programimittëorientuarnëobjekte.
Trashëgimiangavetëemrinabëntëkuptojmë se kemitëbëjmë me
trashëgimidhenëfakttrashëgimianëprogramimpërdoret ne rastetkurduamtështojmëklasa me
karakteristikatëpërgjithshmetëngjashme (metodadhendryshore) me atoekzistuese.
Kështushmangimshkrimin e koditnga e para.
Shembullimëklasikqëjepetpërtëshpjeguartrashëgiminënëprogramimështëkrahasimi me sistemin e
klasifikimittëkafshëvedhebimëve. PshkemiklasënmëmëKafshëdheklasatbijaGjitarë, Zvarranikëetj,
tëcilatkanëpërkatësishtklasatbijaKetër, Kangur, etj. dheGjarpër, Breshkëetj.
Njëtjetërshembullklasikjanëpersonazhet e njëlojekompjuterike. Mendoninjëlojë me jashëtokësorë. Si
klasëkryesoremundtëkishimklasën Alien. Ndërsaklasaqë do derivoheshinngakjoklasëmundtëishin:
Marsian, Plutonian etj.

 Alien
o Marsian
 Komandant
 Ushtar
o Plutonian

KlasatbijaMarsiandhe Plutonian kanëtrasheguarngaklasamëmë Alien, metodatdhendryshoret.


Këtodyklasaquhennënklasatëklasësmëmë Alien. Ndërsaklasa Alien ështësuperklasë e
nënklasaveMarsiandhe Plutonian. Nësekjolojë do tëkishtesiqëllimluftënmeskëtyreAlienve,
atëherëngaklasamëmë Alien, këtoklasa do tëtrashëgoninshumëmetodasipsh. ec, gjuaj, vrapoetj.
Gjithashtuobjektetëklasavetëndryshmemundtëkishinpërveçkëtyremetodavetëtrashëguaraedhemetodat
ëtjeratëvetatpërtëarriturpikërishtqëllimin e lojës: disapersonazhemundmëtëishinfortë a
mëtëshpejtësesadisatëtjerë.
Trashëgimiamundësonripërdorimin e kodit, duke trashëguarngaklasamëmëteknënklasat,
metodatdhendryshoret.
Sintaksaqëpërdoretpërtëkrijuarnjëklasëbijëështë:
class KlasaBije(KlasaMeme)
Le tëshikojmënjëshembull:
>>> class Person(object):
def __init__(self, emri, mosha):
self.emri = emri
self.mosha = mosha

def detajet(self):
print "Emri: %s" % self.emri
print "Mosha: %d" % self.mosha

>>> class Student(Person):


def __init__(self, emri, mosha, kursi):
Person.__init__(self, emri, mosha)
self.kursi = kursi

def printo_kursin(self):
print "Kursi: %d" % self.kursi

>>> s = Student('Rajna', 19, 301)


>>>s.detajet()
Emri: Rajna
Mosha: 19
>>>s.printo_kursin()
Kursi: 301
Klasa Person ka dymetoda:
a. Konstruktor
b. metodëndetajet.
Kjometodëprintonemrindhemoshën e personit.
Përveçkësajklasenalindnevojatëkrijojmënjëklasëtjetër, e cilatëpërmbajëkëtometodadhendryshore,
dhegjithashtutështojëedhenjëtëdhënëtjetërspecifikevetëmpërkëtëllojklase. Praklasa e re Student
trashëgonmetodatdhendryshoret e klasës Person dheshtonsitëdhënëtë re kursinqëstudenti po ndjek.
Nëkonstruktorin e klasës Student ne
nukkeminevojëtëkrijojmësërishndryshoretpërtëdhënatemridhemosha.
Këtoatributetrashëgohenngaklasamëmë Person. Ne mjaftontëthërrasimkonstruktorin e
klasësmëmësinërreshtin:
Person.__init__(self,emri,mosha)
përt'uhedhurvlerëkëtyrendryshoreve. Kjoështë e nevojshmevetëmsepse ne
duamt'ikalojmëkonstruktorittëklasës Student njëvlerëtë re përkursin. Nësenuk do
tëishtenevojapërtëkrijuarkëtëndryshoretë re, nëklasën Student nuk do tëkishimnevojë fare
tëkrijonimkonstruktorin __init__ me këto argumenta, ai thjesht do tëtrashëgohejngaklasa Person.
Po kështumetoda "detajet" e klasës Person trashëgohetvetvetiunëklasënbijë Student, prandaj ne
mund ta përdorimatëdirekt me kodin s.detajet() pa qenënevojaqë ta krijojmëkëtëmetodënëklasën
Student.
Ndryshimiivetëmiklasësbijëështëinformacionipërkursinqëstudentindjek. Përkëtëarsyenëkonstruktorin
e klasës Student ne krijojmëndryshoren self.kursi dhemë pas shtojmëmetodën e re,
unikevetëmpërklasënbijë, printo_kursin e cilashfaqnëekranvlerën e kësajndryshoreje.
Sintaksa e përdorurmësipërpërtëthirrurkonstruktorin e
klasësmëmëngakonstruktoriiklasësbijënukështë e vetmjamënyrëpër ta realizuarkëtë. Kodi:
Person.__init__(self,emri,mosha)
mundtëshkruhejedhekështu:
super(Student, self).__init__(emri,mosha)
Njëavantazhidukshëmikësajsintakseështëfaktiqënukkeminevojëtëshkruajmëdirektemrin e
klasës( nëkëtërast "Person"). Kjoështënjëlehtësipasinëseduhet ta ndryshojmëmëvonëemrin e
klasësmjafton ta ndryshojmëvetëmnënjë vend dhe jo nëklasatbijaqëmund ta kenëpërdorur.
Kjosintaksëofrongjithashtuavantazhetëtjerakurkemitëbëjmë me trashëgimitëshumëfishtë e
cilashpjegohetmëposhtë.

 Trashëgimia e shumëfishtë

Nëdisarastelinddomosdoshmëria e trashëgimittëmëshumë se njëklase. Sintaksaështë e ngjashme me


rastin e trashëgimisësëthjeshtë:
class emri_klases(klase, klase_tjeter, klase_tjeter)
Klasatrashëgonmetodadhendryshorengatëtriakëtoklasa.
Mënyrasesirenditenkëtoklasapërtëtrasheguarmetodatdhendryshoretfillonnga e majtanëtëdjathtë.
Le tëshikojmenjëshembull:
>>> class Prind1(object):
def __init__(self,x,y):
self.x = x
self.y = y

def shuma(self):
self.shuma = self.x + self.y
print "Shumaeshte %d" % self.shuma

>>> class Prind2(object):


def produkti(self):
self.produkti = self.x * self.y
print "Produktieshte %d" % self.produkti

>>> class Femije(Prind1,Prind2):


pass

>>>objekt = Femije(2,5)
>>>objekt.shuma()
Shumaeshte 7
>>>objekt.produkti()
Produktieshte 10
Kemi krijuar tri klasa: dyklasaqë do t'ipërdorimsiprindërdhenjëfëmijë. NëklasënFemijenukkemishkruarasgjëtë
re, por ajo trashegonkonstruktorindhemetodënshumangaklasa Prind1 sidhemetodënproduktingaklasa Prind2.
Siç e shohimgjatëtestimittëprogramitmetodat e përkufizuaratekprindëritekzekutohennormalisht, pavarsisht se
ithërrasimsikurtëishinpjesë e objektittëklasësFemije.
Nga parimet e programimittëorientuarnëobjekte, trashëgimia, dhesidomostrashëgimia e
shumëfishtëjanëatoqëkritikohenmëshpesh. Këtojanëkonceptemjafttëfuqishme, qësiç e
pamëmundtënalehtësojnëgoxhapunësidomospërtëshmangurpërsëritjen e kodit; por gjithashtuduhetpaturkujdes
me përdorimin e trashëgimisëpasindonjëherënjëgjë e tillëmund ta komplikojëkodinnëmënyrëtëpanevojshme.
Mëposhtëdo tëshikojmënjëshembullqëpërdornëmënyrëtëthjeshtëtrashëgiminë.

- Shembull
Nëkapitullin e Modulevekrijuamshembullinpërpeshënideale. Struktura try except nuk ka
përjashtimetëgatshmepërçdorast. Kështunëkëtë moment
qëkemimësuarobjektetdheklasatjeminëgjendjetëkrijojmënjëperjashtimtoninpërrastin e
përzgjedhjessëgjinisëdhellojittëkockës.
Siç e kemiparë, nësebëjmënjëgabimsintaksesipshtëpjesëtojmë me zero, "shkaktohet"
automatikishtnjëgabimillojitZeroDivisionError;
kjonalejonqëkurkeminjëkodqëmundtërezultojënënjëgabimtëtillë ta përfshijmënëstrukturën try catch
nëkëtëmënyrë:
try:
8/0
except ZeroDivisionError:
print 'nukmundtepjesetohet me zero'
Nëprogramintonë, nësepërgjigjapërgjininënukështë as 'f' as 'm', kjopërbënnjë problem përllogjikën e
programittonë; por nëkëtërastasnjëgabimindonjëllojitëgatshëmnuk do tëshkaktohetnga python.
Përsaipërketsintaksës, hedhja e njëvleretëndryshmenga 'f' dhe 'm' nënjëndryshore me
emringjinianukpërbënasnjë problem. Përkëtëarsyenaduhettëkrijojmënjë "gabim" toninpërkëtërast:
class GabimGjinie(Exception):
pass
KlasaGabimGjinietrashëgonngaklasa e gatshme Exception. Këtëklasëmund ta
përdorimtaninëkëtëmënyrë:
def merr_gjinine():
rezult = raw_input('Zgjidhgjininefemer(f) osemashkull(m) ')
if rezult != 'f' and rezult != 'm':
raise GabimGjinie
return rezult
Raise (angl.ngre) përdoretpërtë "shkaktuar" njëgabim. Pranëseinputinukështë as 'f' as 'm'
atëherëngrejmëkëtëpërjashtimtëkrijuarnga ne. Më pas kypërjashtimmundtëpërdoretnëstrukturën try
except njësojsipërjashtimet e gatshmesiZeroDivisionError.
while True:
try:
gjinia = merr_gjinine()
except GabimGjinie:
print 'Gjiniaduhette jete f ose m'
else:
break
Nëmënyrëtëngjashmeveprohetedhe me përjashtiminpërllojin e kockës. Shembullin e plotë me
ndryshimet e bëramund ta shkarkoni këtu.

 Fshehja e informacionit (Enkapsulimi)

Fshehja e informacionitështënjëngatreparimetqëpërmendëmpërprogramimin e orientuarnëobjekte,


dhe e shpjeguamderidikunë fund tëkapitullittëkaluar. Fshehja e informacionitnënkuptonpërdorimin e
metodave pa u interesuar se çfarëpërmbajtjekanëato; kjo ka tëbëjëgjithashtu me moslejimin e
përdorimittëndryshoreve apo metodavengajashtëklasës. Në python kjogjënukështëplotësisht e
mundur, pasigjithçkaështëpublike. Gjithsesideridikumundt'ibëjmë private ndryshoret apo metodat e
njëklase.
Përtëpasurmëtëqartekonceptin e fshehjessëinformacionitnë python, le tëthemi se jo
çdopërdorueskompjuteriiinteresontëdijësesijanëkrijuartastiera, ekrani e tëtjerapajisjekompjuteri.
Nësenjërangakëtopajisje do tëprishejsecili do tëshkontenëdyqantëblintenjëtë re
dhemjaftontëvendosëfishatdhegjithçkaikthehetnormalitetit.
Përdoruesinukinteresohetsesifunksiononsëbrendshmitastiera; ai mjaftohet me faktinqëtastieraështë e
lehtëpërtupërdorur duke lidhurkabllin me kompjuterin. Njësojndodhedhenëprogramim.
Përdoruesiinjëklasenukinteresohettëstudiojë se sifunksionojnëmetodatdhendryshoret e
brendshmetënjeklase, ai mjaftohet me faktinqëklasamundtëpërdoretlehtësisht me
anëtëmetodavetëposaçme.
Ky parimiprogramimitnëgjuhëtëndryshmemundtëjetëidetyrueshëmose jo. Në python
ështëmenduarqëenkapsulimitëmosimponohet, praprivatjatëmosjetëplotësisht private. Edhenëse do
tënaduhejnëndonjërasttëndalonimaksesimin e metodave apo ndryshoreve, do t'ikthenimato ne private
duke paturparasysh se atosërishmundtëaksesohen.
Fshehja e informacionit ka tëbëjë me mosaksesimin e metodave apo ndryshoreve private
tënjëklasengajashtëklasës.
Le tëshikojmenjëshembullilustruestëfshehjes se informacionit. Ne shembullin e mëposhtëm ka
dymetoda: njëra private dhetjetrapublike. Përtëtreguar se njëmetodëështë private në python
mjaftontëshkruajmënjëra pas tjetrësdyvizatëposhtme __ dhemë pas emrin e metodes: def __metoda:
Por siçthamë, python nuk e suportonplotësishtfshehjen e informacionit, pra ka
njëmënyrëpërtëpasurakses. Përtëaksesuarkëtometoda private mundtëpërdorimgjatëtestimit para
emrittëklasësnjëvizëtëposhtme. Le tëshohimshembullinpërmëshumëqartësi:
>>> class Shembull(object):
def __metode_private(self):
print "Informacionprivatiklases"
def metode_publike(self):
print "Informacionpublik"
>>> obj = Shembull()
>>> obj.__metode_private()
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
obj.__metode_private()
AttributeError:Shembull instance has no attribute '__metode_private'
>>> obj._Shembull__metode_private()
Informacionprivatiklases
Kodi obj._Shembull__metode_private() bëntëmunduraksesimin e metodave private në python.
Python pranuk e garantonpërmessintaksësfshehjen e informacionit.

12.Hyrje në Bazat e të Dhënave. Bazat e SQL.


 Bazat e të Dhënave (Databaza)
Databazaështënjëgrumbullinformacioniiorganizuarnëmënyrëtëtillëqëthjeshtonaksesimin,
menaxhimindhefreskimin e tëdhënave.
Databazapërbëhetngatabelatëcilatruajnëinformacionetëndryshme.

 Prezantim me gjuhënSQL

SQL ështëshkurtimitogfjalëshit “Structured Query Language” (gjuha e strukturuar e kërkimit). Ajo


ështënjëgjuhëkompjuteripërruajtjen, manipulimindherigjetjen e tëdhënavenëbazat e
tëdhënaverelacionale.SQLështëgjuhastandardepërsistemet e bazavetëtëdhënaverelacionale, siçjanë
MySQL, MS Access, Oracle, Sybase, Informix, Postgres and SQL Server. Megjithatë,
atapërdorinversionetëndryshmetë SQL. Kështu, Oracle përdor PL/SQL, MS SQL Server përdor T-
SQL, etj.
SQL përdoretpërtilejuarpërdoruesve:
 tëaksesojnëtëdhënanësistemet e menaxhimittëbazëssëtëdhënaverelacionale;
 tëpërshkruajnëtëdhëna;
 tëpërcaktojnëtëdhënadhetimanipulojnëtëdhënat;
 tëkrijojnëtabeladhebazatëdhënash;
 tëkrijojnëpamje, proçedura, funksionenënjëbazëtëdhënash;
 tëpërcaktojnëtëdrejtatdhekufizimetnëtabela, proçeduradhepamje.

Nëhistorinë e zhvillimittë SQL-sëpërmendimsivitetkyçemëtërëndësishme.


- 1970 – Dr. Edgar F. “Ted” Codd i IBM
njihetsithemeluesiibazavetëtëdhënaverelacionaleicilipërshkroinjë model tëkëtyrebazave.
- 1974 – SQL u shfaqpërherëtëparë.
- 1978 – IBM zhvilloiidetë e Codd-it dhenxorrinjëprodukttëquajtur System/R.
- 1986 – IBM zhvilloiprototipin e parëtëbazëssëtëdhënaverelacionaledhetëstandardizuarsipas
ANSI. Oracle nxorritëparënbazëtëtëdhënaverelacionale.

 Çfarëështë SQL
Nëqoftësekuptoniçfarëështëdatabaza, SQL është e thjeshtë.
SQL ështëakronimifjalëvenëgjuhënanglezeStructured Query Language.
SQL përdoretpëraksesimindhemanipulimin e databazave. 
MySQL ështënjë program qëkupton SQL.

SQL mundet:
- insertojë, updatojë, osefshijërekordenënjëdatabazë.
- krijojëdatabazat, tabelat, tëruajëproçedurat. 
- të marri tëdhënatnganjëdatabazëetj.

SQLështëstandart ANSI (American National Standards Institute), por ka


versionetëndryshmetëgjuhës SQL. Shumica e
këtyregjuhëvekanëelementeshtesëtëstrukturëssëgjuhësmegjithatëkomandatbazëjanëtënjëjta.

 Tabelat
Njëtabelëruandheshfaqtëdhënatnënjë format tëstrukturuarqëkonsistonnëkolonadherreshta.
Databazatzakonishtpërmbajnëshumëtabela, secila e projektuarpërnjëqëllimspecifik. Përshembull,
imagjinoninjëtabelëdatabazëqëmbantëdhënat e id, lenda, nota. Sëpari, ndërtohenkolonat me emrat e
tyre: id, lenda, nota. Çdotabelë ka fushën e vet tëpërcaktimittëtëdhënave, nëvarësitëtëdhënaveqë do
tëruhen.

Instruksioni  CREATE TABLE përdoretpërkrijimin e njëtabeletë re.


Krijimiinjëtabelepërfshinemërtimin e tabelës, përcaktimin e
kolonavedhetipevetëtëdhënavetësecilëskolonë.
Sintaksabazëpërinstruksionin CREATE TABLE ështësimëposhtë:
CREATE TABLE emri_tabelës
(
emri_kolones1 tipi_i_te_dhenes(permasa),
emri_kolones2 tipi_i_te_dhenes(permasa),
emri_kolones3 tipi_i_te_dhenes(permasa),
....
emri_kolonesNtipi_i_te_dhenes(permasa)
);

- emri_kolonesspecifikonemrin e kolonësqë do tëkrijojmë.


- tipi_i_te_dhenesspecifikonçfarë tipi tëdhëne do tëmbajëkolona. Përshembull, perdoret int
përnumrat e plotë.
- Parametripërmasaspecifikongjatësinëmaksimaletëkolonëssëtabelës.
Shënim: kolonatndahen me presje.
Supozojmë se donitëkrijonitabelën‘përdorues’ e cilakonsistonnëkatërkolona: perdoruesID, emri,
mbiemri, dheqyteti.
Instrusioni MySQL:
CREATE TABLE përdorues
(
perdoruesID int,
emrivarchar(100),
mbiemri varchar(100),
qyteti varchar(100)
);
Varchar është tipi itëdhënësqëruankarakteret. Numriikarakterevespecifikohetnëkllapa. Pra,
fushatnëshembullin e mësipërm, mundtëmbajnëmaksimumitekste me 100 karakteregjatësi.
 Tipet e tëdhënave
Tipi itëdhënavespecifikonnjë tip tëdhënespërnjëkolonëtëcaktuar.
Tipetmëtëzakonshmetëtëdhënave:
- Numerike:
INT – Numrat e plotë.
FLOAT(M,D) – Numrat me presjenotuese. Mundtëpërcaktohetedhegjatësia (M) dhenumriishifrave
pas presjes (D).
DOUBLE(M,D) – Numrat me presjenotuese. Mundtëpërcaktohetedhegjatësia (M) dhenumriishifrave
pas presjes (D).
- Data dhe Ora:
DATE - Data nëformatin YYYY-MM-DD.
DATETIME – Njëkombinimidatësdheorës YYYY-MM-DD HH:MM:SS.
TIMESTAMP – Një timestamp, qëngamesnata e January 1, 1970
TIME – Ruanorënnëformatin HH:MM:SS.
- Tipi istringjeve:
CHAR(M) – String karakteresh me gjatësifiksemaksimumi 255 bytes.
VARCHAR(M) – String karakteresh me gjatësivaraiablash. Vleramaksimale e përcaktuarnëkllapa.
BLOB - "Binary Large Objects" përdorenpërruajtjen e sasivetëmëdhatëdhënashbinare,
siimazhetosetipet e tjeratëtëdhënave. 
TEXT – Sasi e madhetëdhënashtekst.
Zgjiodhjakorrekte etipittëtëdhënëspërkolonen e tabelesështëçelësipërnjëdizenjimtëmirëdatabaze

13.Ndërveprimi i programit me bazën e të dhënave.


 Specifikimiirregullavepërtëdhënatnëtabela
Përshembullnëpërcaktimin e kolonës‘emri’nuklejohenvleratboshe:
emrivarchar(100) NOT NULL
NOT NULL – Kolonanukmundtëpërmbajëvlerëboshe.
UNIQUE – Nuklejohetfutja e tëdhënavetëdublikuara. Njëtabelëmundtëketëmëshumë se
njëkolonëtabeleunike.
PRIMARY KEY – Krijonnjëindeksunikpëraksesimmëtëshpejtëtëtabelës.
CHECK – Kontrollonnësenjëvlerëështë e vlefshmeose jo nënjëshprehjelogjike.
DEFAULT – Gjatëndërfutjessëtëdhënavenëtabelë, nësenukvendosetasnjëvlerënëtabelëvendosetvlera
DEFAULT.
AUTO INCREMENT - Auto-increment lejongjenerimin e njënumriunikkurshtohetnjë record irinëtabelë.
Apriori, vlerastartuesepër AUTO_INCREMENT është 1, dhe do tështohet me 1 saherështohetnjërekord.

 Çelësatprimarë

Njëçelësprimarështënjëfushënëtabelë e cilaidentifikonnëmëyrëunikerreshtat(rekordet) e tabelës.


 Karakteristikatkryesoretëçelësaveprimarë:
- Duhettëkenënjëvlerëunikepërçdorresht.
- NukmundtëkenëvleraNULL (boshe).
Përshembull, tabelamëposhtëpërmbannjë record përçdoemër . Numriunik ID ështëzgjedhja e
duhurpërt’uzgjedhursiçelësprimarëitabelës, sepseështëimundurrastikurjanëdy persona me
tënjëjtatrezultatenëtënjëjtënlëndë.

- Tabelatkanëvetëmnganjë çelësprimarësecila.
- Vlera e çelësitprimarëduhettëjetëtëndryshmepërsecilinrast.
Çelësatprimarëmundtëpërcaktohengjatëkrijimittëtabelës, duke përdorurfjalënkyçe PRIMARY
KEYdhe duke vendosurbrendakolonaveemrin e kolonësqë do tëjetëçelësiprimar.
CREATE TABLE klasa
(
id int,
lendavarchar(100),
nota int(2),
PRIMARY KEY(id)
);

 Komandatbazë SQL
Mënyramë e thjeshtëpërtëpërdorur MySQL dhePHPMyAdminështëtëinstaloni program
si XAMPP oseWAMP. Këtomjetejanëtëthjeshtadhepakosto.
Komanda SQL SHOW shfaqtëdhënatqëndodhennëdatabazëdhenëtabela.
Përshembull, komanda  SHOW DATABASES listondatabazat e menaxhuarangaserveri.
HapniPHPMyAdmin, dheklikoninëtabin SQL përtëhapurnjëdritaretëthjeshtëkutëshkruanikomandat
SQL.
Shkruani SHOW DATABASES dheklikoni "Go". Programi do t’junjoftojë se SQL-ja
juajështëekzekutuar me sukses( Your SQL query has been executed successfully). Do
tëlistohentëgjithëdatabazate PHPMyAdminsinëfigurënmëposhtë:
Komanda SHOW TABLES përdoretpërshfaqen e tëgjithëtabelavenëdatatabazën MySQL
tëselektuar.

Rezultati:

Si shembull, ështëkrijuardatabaza, databazeme tabelën e quajturnxënës.


Komanda SHOW COLUMNS shfaqinformacionepërrethkolonëssënjëtabele.
Shembullimëposhtëshfaqkolonattë tabelësnxenes:
SHOW COLUMNS FROMnxenes
Rezultati:

SHOW COLUMNSshfaqvlerat e mëposhtmepërsecilënkolonëtëtabelës: 

Field: emrikolonës
Type: tipi itëdhënëssëkolonës
Key: tregon se kuështëindeksuarkolona
Default: vlera default shenjuarkolonës
Extra: informacioneshtesë

Komanda SELECT përdoretpërselektimin e tëdhënavenganjëdatabazë.
Rezultatiruhetnënjëtabelë, e cilaquhet result-set.Përpërdorimin e komandës SELECT,
specifikojmëedheemrat e kolonaveprejtëcilaveduamtëmarriminformacion.

Sintaksa e komandësSELECT:
SELECT lista_kolonave
FROMemri_tabelës

- lista_kolonavepërfshinnjëosemëshumëkolona
- emri_tabelësemriitabelëssëcilësipërkasinkolonat
Mëposhtëparaqitentëdhënatngatabelaklasa:

Komanda e mëposhtme SQLselekton lenden ngatabela klasa:


SELECT `lenda` FROM `Klasa`

 Queri-t e shumëfishta
SQL lejonshumë query oseshumëkomandanëtënjëjtënkohë. 
Komandat e mëposhtme SQL lejojnëselektiminnga  kolonatemridhembiemri ngatabela:
SELECT lenda FROM klasa;
SELECT nota FROM klasa;
Mos harronitëndanikomandatnganjëra-tjetra me pikëpresje.

 Case Sensitivity
SQL është case insensitivedmth e njëjtakomandë SQL mundtëshkruhetsi me
shkronjatëmëdhaashtuedhe me tëvogla. 
Përshembullkodet e mëposhtme do tëprodhojnëtënjëjtinrezultat:
Select emri from nxenes;
SELECT Emri FROM nxenes;
select Emri FROM nxenes;
Megjithatësirekomandimpraktikështëmirëqëkomandat SQL tëshkruhenmëshkronjatëmëdha.

 Rregullat e sintaksës
Njëkomandë SQL e vetmemundtëshkruhetnënjëosemëshumërreshta. Përmëtepër,
komandatshumëfishe SQL mundtëkombinohennënjërreshttëvetëm. 
Hapsiratboshedherreshtatshumëfisheinjorohennë SQL. 
Përshembull, query-a emëposhtmeështë e saktë .
SELECT lenda
FROM klasa;

Megjithatë, rekomandoheteliminimiihapsiravedherreshtavetëpanevojshme.
Selektimiidisakolonave
Siç u përmendedhemëlart, komanda SQL SELECT merrrekordetngatabelangadatabaza SQL. 
Mundtëselektohendisakolonanjëherësh
Thjeshtlistohenemrat e kolonave ,tëndaranga presje:
SELECT emri, mbiemri, mosha
FROM nxenes;

Mos vendosnipresje pas emrittëkolonëssë fundit.


Selektimiitëgjithakolonave
Përmarrjen e tëgjithëinformacionitqëndodhetnëtabelëntuaj, vendosninjëshenjëyll (*) pas
komandësSELECT, në vend tëlistimittëtëgjithëemravetëkolonave.
Komandamëposhtme SQL selektontëgjithëkolonatnëtabelënklasa:
SELECT * FROM klasa;

Rezultati:

Në SQL, ylli do tëthotëtë gjitha.


Fjalakyçe DISTINCT
Nësituatatnëtëcilatjukenirekordetëdublikuaranëtabelë, do
tëishtemëmirëtëbashkonimtëgjithanënjërekordtëvetëm.Komanda
SQL DISTINCT përdoretsëbashkume komandën SELECT përeliminimin e
rekordevetëdublikuaradhelënienvetëmtëatyreunike.
Sintaksabazëe  DISTINCT ështësimëposhtë :
SELECT DISTINCTemri_kolon1, emri_kolon2
FROM emer_tabele;

Theksojmë se janëemratëduplikuar. Komandat e mëposhtme SQL


selektojnëvetëmvleratqenukjanëtëdublikuarangakolonaemri:
SELECT DISTINCT emri FROM nxenes;

Fjalakyçe LIMIT
Apriori, tëgjitharezultatetqëplotësojnëkushtet e vendosuarnë SQL do tëkthehen. Megjithatë,
ndonjëherëduhettëkthehetnjënumëricaktuarrekordesh. Në MySQL, kjorealizohet duke
përdorurfjalënkyçe LIMIT. 
Sintaksa:
SELECT listakolonave
FROM emri_tabeles
LIMIT [numri_rekordeve];
Gjithashtumundtëzgjidhendisarekordenganjëpjesë e caktuar.
Nëshembullin e mëposhtëm, zgjidhenkatërrekorde, duke filluarngapozicioniitëtretit:
SELECT ID , emri, mbiemri, mosha
FROM nxenesLIMIT 3, 4;

Emrat e kualifikimit (Fully Qualified Names )


Në SQL, jumundtëpërdorniemrin e njëtabele para emrittënjëkolonetëndarënganjëpikë. Përshembull,
komandat e mëposhtmejanëtënjëvlershme.
SELECT emri FROM nxenes;

SELECT nxenes.emri FROM nxenes;

Kjollojsintaksequhet "fully qualified name"  ekolonës.


Kjomënyrëshkrimiështëefiçentekurpunojmë me shumëtabelatëcilatmundtëkenëemrakolonashtënjëjta
Komandat Order By
ORDER BY përdoretpërselektimindheradhitjen e tëdhënavetëmarra. 
Shembulliimëposhtëmrendittabelennxenessipaskolonësemri.
SELECT * FROM klasa
ORDER BYnota ;

Rezultati:

Siç e shikoni, rreshtatjanëradhiturnë rend rritessipaskolonësnota.


Apriori, komanda  ORDER BYrenditrezultatetsipas  renditrritës.
Radhitja e shumëkolonave
KomandaORDER BY mundt’iradhisëtëdhënatnëvarësitëshumëkolonave. Kur përdoretORDER
BY me mëshumë se njëkolonë, ndahetlista e kolonave me presje. 
Përtëradhitursipas emrit dhe moshës:
SELECT * FROM nxenes
ORDER BY mbiemri,mosha;

Tëdhënatradhitenfillimishtsipaskolonëssëparëmë pas tëdytës, tëtretës e kështu me radhë.


WHERE
WHERE përdoretpërekstratimin e atyrerekordevetëcilatpërmbushinnjëkritertëcaktuar.
Sintaksa përdorimittëWHERE :
SELECT lista_kolones
FROM emri_tabeles
WHERE kushti;

Përtëselektuarnjë record specifik:

SELECT * FROM klasa


WHERE ID = 5;

Rezultati:

Operatorët SQL tëkrahasimit


Operatorët e krahasimitdhe  Operatorëtlogjikpërdorenbashkë me WHERE përtëfiltruartëdhënat e
selektuara.

Përshembull , ne mundtëshfaqimlistën e tëgjithëemravetënxënësve , me përjashtimtëatyre me ID=4:


SELECT * FROM lenda
WHERE ID != 4;
Rezultati:

Siçduket, rekordime ID = 4 nukështëpërfshirënëlistë.


Operatori BETWEEN
Operatori  BETWEEN selektonvleratbrendanjëkufirivlerash. Sintaksa e përdorimittëoperatorit
BETWEEN ështësimëposhtë :
SELECT emri_i_kolones
FROM emri_tabeles
WHERE emri_kolones BETWEEN vleres1 AND vleres2;

Shembull, selektimiitëgjithërekordeve me ID që bien brendasegmentit 3 dhe 7:

SELECT * FROM klasa


WHERE ID BETWEEN 2 AND 5;

Instruksioniimëposhtëm SQL selektontëgjithërekordedku nota është e barabartëme ‘8’


SELECT* FROM klasa WHERE nota = '8';

Rezultati:
 Operatorëtlogjikë
Operatorëtlogjikëpërdorenpërkombinimin e dyvleraveBooleanedhekthimin erezultatit True/False (e
vertetëosegabuar). Mundtëpërdorenoperatorët e mëposhtëm:

Kur duamtëmarrimtëdhëna duke përdorurinstruksionin SELECT, përdorimoperatorëtlogjikë me


komandën WHERE përtëkombinuarkushtetëndryshme.
Përtëselektuartëgjitharreshtatpërdorimoperatorinlogjik AND.
Mundtëkombinohensakushtetëjetë e nevojshmepërtëmarrërezultatin e dëshiruar.
OR
Përtëselektuarrreshtatëcilëtplotësojnëtëpaktënnjëngakushtet, mundtëpërdoretoperatori OR.
Tabelamëposhtëtregon se sifunksiononoperatori OR:

Kushtet SQL AND dhe OR mundtëkombinohenpërtestimin e shumëkushtevenënjë query.


Operatori IN përdoredpërkrahasimin e njëkolone me mëshumë se njëvlerë.
Përshembullpërselektimin e tëgjithëpërdoruesvenga Tirana, Durrësi, dheElbasani.
Me kushtin OR do tëduketkështu:
SELECT * FROM perdorues
WHERE qyteti = 'Tirana'
OR qyteti = 'Durres'
OR qyteti = 'Elbasani';

Me operatorin IN do tëeliminohejpërdorimiidisa OR-vedhe do tëprodhojëtënjëjtinrezultat:


SELECT * FROM përdorues
WHERE qyteti IN ('Tirana', 'Durres', 'Elbasani');

Operatori NOT IN 
Operatori NOT IN përdoretpërtëpërjashtuarnjëlistëvlerashspecifikengarezultatet.
Përshembull:
SELECT * FROM përdorues
WHERE qyteti NOT IN ('Tirana', 'Durres', 'Elbasani');

Funksioni CONCAT 
Funksioni CONCAT përdoretpërtëbashkuardyosemëshumëvlerateksteshdhepërtërikthyerstringun e
bashkuar. 
Funksioni UPPER
Funksioni UPPER konvertontëgjithashkronjatnëshkronjatëmëdha.
Funksioni LOWER konvertontëgjithashkronjatnëshkronjatëvogla.
SQL query-a e mëposhtmeselektontëgjithëmbiemratsi uppercase:
SELECT emri, UPPER(mbiemri) AS mbiemri
FROM perdorues;

Nëse ka karaktereqënukjanëstringjenuk do tëshihetasnjëefekt, funksioni UPPER.

- Python MySQL
Python mundtëpërdoretnëaplikimet e databazave. Njëngadatabazëtmëtënjohuraështë MySQL. Baza e
tëdhënave MySQL
Përtëqenënëgjendjetëeksperimentosh me shembujt e koditnëkëtë tutorial, duhettëkeni MySQL
tëinstaluarnëkompjuterintuaj.
Ju mundtëshkarkoninjëbazëtëdhënashfalas MySQL nëhttps://www.mysql.com/downloads/.
- Instalimii MySQL
Python ka nevojëpër driver MySQL përtëhyrënëbazën e tëdhënave MySQL.
Nëkëtë tutorial do tëpërdorimdriverin "MySQL Connector". Ju rekomandojmëtëpërdorni PIP
përtëinstaluar "MySQL Connector". PIP ka shumëmundësiqëtashmëtëinstalohetnëmjedisintuaj
Python.
- Shkarkimidheinstalimii "MySQL Connector": C:\
Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>python -m pip
install mysql-connector-python
- Testimii "MySQL Connector":
Përtëtestuarnëseinstalimiështëisuksesshëm, osenësetashmëkenitëinstaluar "MySQL Connector",
krijoninjëfaqe Python me përmbajtjen e mëposhtme:
demo_mysql_test.py:
import mysql.connector
Paraqitjae koditnësekemilidhejn e sakte, nëtëkundertnashfaqet errors (gabime)

- Krijimiilidhjes
Fillojmë duke krijuarnjëlidhje me bazën e tëdhënave. Përdorimemrin e
përdoruesitdhefjalëkaliminngadatabazajonë MySQL:
Kodi:
demo_mysql_connection.py:
import mysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword"
)
print(mydb)

Ekzekutimi:

Jemi duke punuarnëkodet pythonpërtërealizuarlidhjen e pythen me mysql


import mysql.connector- importimiilidhjrsmysql
Përcaktoni një funksion që lidhet me serverin e MySQL dhe kthen objektin e lidhjes
Funksionimydbmerrparametrat host ,user ,password
print(mydb)- afishimiifunksionitmydb
Python MySQL krijimiiDatabazes
- KrijimiiDatabazes
Përtëkrijuarnjëbazëtëdhënashnë MySQL, përdornikodinstandart "CREATE DATABASE":
Krijimiinjedatabaze emreuar "mydatabase":
Kodi :
import mysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")
- Kontrollonëseekzistonbaza e tëdhënave
Ne mundtëkontrollojmenëseekzistonnjëbazëtëdhënash duke listuartëgjithadatabazatnësistemintuaj
duke përdorurkodinstandart "SHOW DATABASES" .
Kodi :kthennjelistengadatabaza e sistemittuaj
importmysql.connector
mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")
for x inmycursor:
  print(x)
Python MySQL Create Table
Krijimiinjëtabelë
Përtëkrijuarnjëtabelënë MySQL, përdorimsintakse "CREATE TABLE".
Krijojmenjëtabelë me emrin "customers":
Kodi :
importmysql.connector
mydb = mysql.connector.connect(
  host="localhost",
 user="yourusername",
  password="yourpassword",
  database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address
VARCHAR(255))")
Nësekodido ekzekutohet pa asnjëgabim, jukenikrijuar me suksesnjëtabelë me emrin "customers":
ÇelësiPrimar(Primary Key)
Kur krijoninjëtabelë, duhettëkrijonigjithashtunjëkolonë me njëçelësunikpërçdoregjistrim.
Kjomundtëbëhet duke përcaktuarnjëÇelësiPrimar. Ne përdorimdeklaratën"INT
AUTO_INCREMENT KRYESORE" e cila do tëfutënjënumërunikpërçdoregjistrim. Duke
filluarnga 1, dhe u rritnganjëpërçdoregjistrim.
Kodi :
importmysql.connector
mydb = mysql.connector.connect(
  host="localhost",
 user="yourusername",
  password="yourpassword",
  database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY
KEY, name VARCHAR(255), address VARCHAR(255))")
kodikrijoçelësinprimarkurkrijontabelën.
importmysql.connector

mydb = mysql.connector.connect(
  host="localhost",
 user="yourusername",
  password="yourpassword",
  database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("ALTER TABLE customers ADD COLUMN id INT AUTO_INCREMENT
PRIMARY KEY")
kodimesipermkrijoçelësinprimarkurtabelaekziston , pjesatjeter e koditështë e njëjtë.
Sigurohuniqëtëpërcaktoniemrin e bazëssëtëdhënavekurkrijonilidhjen

14. SIGURIA E TË DHËNAVE.

 Rëndesia e sigurisë në rrjet


“siguria e rrjetit” i referohet mbrojtjes së përdorimit të rrjetit dhe të dhenave që kalojnë në
të. Siguria maksimale e rrjetit arrin të menaxhojë trafikun në rrjet, si dhe ndalon sulmet që
tentojnë të hyjnë apo të përhapen në rrjetin tonë.
 Llojet e sigurisë në rrjet
- Kontrolli i aksesimit të rrjetit
Jo çdo përdorues duhet të ketë të drejtë për të aksesuar një rrjt. Kontrolli i aksesimit të rrjetit është
nje zgjidhje e rrjeteve kompjuterike që përdor një grup protokollesh për të përcaktuar dhe
implementuar politika, e cila përshkruan se si mbrohet aksesi në rrjet . Mund të të bllokoni paisjet
fundore ose mund t’iu jepni atyre të drejta të limituara. Ky proces njihet si network access control
(NAC)/ kontrolli i kasesimit te rrejtit .
- Instalimi i programeve antivirus
Instalimi i programeve antivirus mbron kompjuterat ose paisjet elektronike nga infektimi i malware-
ve të ndryshem qe gjenden në aplikacione apo rrjete.
- Siguria e palikacioneve
Çdo program që përdorim ka nevojë për mbrojtjë , çdo aplikacion mund të përmbaje mangesi apo
dobësi ,që sulmet mund ti perdorin për të hyrë në rrejtin tuaj. Siguria e palikacioneve përfshin
pjesët hardware dhe software. Procese të caktuara përdoren për të mbyllur hapësirat që mund të jenë
të depertueshme në një rrjet .
- Analiza e sjelljes
Për të zbuluar sjellje jonormale në një rrjrt duhet të njiheni se si është një sjellje normale e rrjetit.
Mjetet e analizimit të sjelljes automatikisht dallojnë veprimtari që devijojnë nga normalja dhe që
mund të shkaktojne problemenë rrejt .
- Parandalimi i humbjes së të dhënave
Organizata apo kompani të ndryshme duhet të sigurohen që stafi i tyre mos të dergoje informacione
të rëndësishme jashte rrejtit të kompanise .Parandalimi i humbjes së të dhënave mund të ndaloje
përdoruesit të ngaterrojne dhe të transformojnë të dhenat në rrete të jashtme, madje edhe tw
printojne informacione tw rëndësishme në një mënyrë jo tw sigurte

- Sigutia e email-eve
Protat e email-eve janë numëri një i kërcenimeve për shkelje të sigurisë. Sulmet përdorin
informacione personale dhe rrjete sociale për të ndërtuar mënyra të sofistikuara të sulmeve
phishing. Për të mashturar përdoruesit dhe për ti derguar ato nëpwrmjet faqes së web-it drejt
malware-ve . Njw aplikacion per sigurine e email-eve bllokon sulmet qw vjnw dhe kontrollon
mesazhet e derguara në rrete të jashtme për të paranadaluar humbjen e të dhënave të rëndwsishme.
- Firewall
Firewall-et vendosin barriera ndermjet rrejtit të brëndshëm të besueshem dhe rrjetit të jashtëm jo të
besueshëm, siç është interneti . Ato përdorin një grup rregullash të përcaktuara, për të lejuar apo
bllokuar trafikun.
- Sistemet e parandalimit të ndërhyrjeve
Një sistem parandalimi i ndërhyrjeve (IPS Intrusion Prevention System) është një paisje ose
aplikacon software që monitoron një rrjet ose sistem për veprimtari të dëmshme ose shkepje të
rregullave . Ky sistem skanon trafikun e rrejtit për të bllokuar në mënyre aktive sulmet që mund të
ndodhin .
- Siguria e paisjeve elektornike
“Keqbëresit” kibernetikë po rrisin sulmet ndaj aplikacioneve dhe paisjeve të komunikimit duke
kontrolluar cilat paisje mund të hynë në rrejt si dhe nevoitet konfigurimi i lidhjeve të tyre për të
mbajtur trfikun e rrjetit privat.
- Rrjet virtual privat
Një rrjet virtual privat ( VPN Virual Private Network) kodon lidhjen nga një paisje fundore në
një rrjet, shpesh në internet . Në menyrë tipike një VPN e aksesueshme në distance përdor
element sigurie për të vertetuar komunikimin ndermjet paisjes dhe rrjetit.
- Siguria e Web-it
Siguria në web kontrollon përdorimin e web-eve , bllokon sulmet dhe dhe ndalon hyrjet në website
të dëmshme . “Siguria e rrejtit ” gjithashtu i referohet hapave që duhet ndjekur për të mbrojtur
website-in
- Siguria në Wireless
Rrjetet Wireless nuk jane aq të sigurta sa ato të lidhura me kabëll. Pa masa të rrepta të sigurisë,
instalimi i një rrjeti LAN wireless mund të jetë njësoj si vendosja gjithandej e portave Ethernet. Për
të parandaluar dëmtime nga hacker-at , nevojiten programe specifike të ndertuara për mbrojtjen e
rrejteve wireless.
- Hardwerike, dheproblemeSoftwerikeShpeshherëgjatkohëssajemi duke
punuarnëkompjuterndodhëqë ai tërestartohetautomatikisht, gjithashtugjatpunësshkonshumëngadal,
mirpokjogjënukshkaktohetsipasoj e kompjuteritmirpofajtorijemi ne dhe jo
tekkompjuteriqëshkonngadalpasiqënuk e trajtojmashtusiqduhet. Por shkaktarët e
kësajmundtëjenëtëndryshëmsi: Viruset, probleme. Sistemet Operative dhendarja e tyre
Siç e dimë se ka shumëllojetëndryshmetësistemeve operative, nëtëcilëtndahënsinga: Popullariteti,
Siguria, dhefunksionalitetiityre. Kemi
shumëllojetëVirusëvetëndryshmengatëcilëtjanëtëkërcënuarSistemet Operative qëipërdorim ne
nëditëtsotme.

 Virusetdhellojet e tyre
Virusëtndahennë 4 llojefillestaresi: Virus tethjeshtë, Trojan ,Virus e- mail dhe ne Worms (Krimba)
Malweret
Malware, software me qëllimtëkeq, ështëçdo software
qëpërdorenpërtëndërprerëoperacionetkompjuterike, përtëmbledhurinformatatëndjeshme,
përtëfituarqasjenësistemetkompjuterike private, oseshfaqinreklamatëpadëshiruara.
Fragmentimundtëjetëkodimakinëqëinfektondisaprogrameaplikative, program ekzistuesetësistemit,
apo edhekodin e përdorurpërtëstartuarnjë Malware

- Viruset Trojan
Një Trojan Horse apo njëKalë-Trojan ështënjëllojiMalwar-it qëështëmaskuarshpeshsi software
iligjshëm. Trojanëtmundtëpunësohennga cyber-kriminelëtdhehakerat duke u
përpjekurpërtëfituarqasjenësistemet e përdoruesve.
Përdoruesitjanëtëmashtruarnëmënyrëtipikenganjëformë e
inxhinierisësocialenëngarkimindheekzekutimin e trojanëvenësistemet e tyre. Pasiaktivizohet,
Trojanimundtëjumundësojë cyber-kriminelëvepërtëspiunuarmbiju, vjedhintëdhënattuajatëndryshme,
dhepërtëfituarqasjenësistemintuaj. Këtoveprimemundtëpërfshijnë: Fshirja e
tëdhënavebllokimidhënavemodifikimidhënavetëdhënat e kopjimi Trojan Horse.

- Worms - Krimbat
Njëkrimbkompjuterikështënjë program ipavarur malware
kompjuterikqëreplikonvetenpërtëpërhapurnëkompjuterëtëtjerë. Shpesh, ai
përdornjërrjetkompjuterikpërtëpërhapurveten, duke u mbështeturnëdështimet e
sigurisënëkompjutersynuarpërtëhyrënëtë.
Ndryshenganjë virus kompjuterik, nuk ka nevojëpërtëbashkëngjiturvetennënjë program ekzistues.
Krimbatjanëpothuajsegjithmonë, bëjnëdisadëmetërrjetit, edhenëqoftë se vetëm duke
konsumuarBandwidth, ndërsavirusetpothuajsegjithmonëmundtëkorruptojnëosetëmodifikojnëfajlla
personal nënjëkompjuterqëështënëshënjestër.

- Enkriptimi (Encryption)
Enkriptimiështëmbrojtjamë e sigurt e tëdhënavenënjëkodsekret. Përtëlexuar, apo
shikuarnjëtëdhënëtëenkriptuarduhet ta kemiçelësin e atijdokumentiqëështë I enkriptuar.
Enkriptimindahetnëshumëlloje por ai qëtaninjihetsimë I sigurtiështë me 256-bit.
Ransomware Ndryshenga Malware-t kylloj (Virusi) ështënjërindërmëtërrëzikshmit. Arsyejapseështë
I rrëzikshemsepsesiç e përmendëmmëparëEnkriptiminky virus
përdoretpërqëllimetëkëqijangakriminelët e ndryshëmsepsenëatë moment
qëfutetnësisteminoperativInfektontëgjithatëdhënattonadhe e mbyllkompjuterin me njekodsekret
(Enkriptues) qëështë e vështirë ta largojmëngakompjuteringanjëher. Ransomwar-e ka
përqëllimqënëtëgjithëkompjuterëtqëfutettidetyrojëpërdoruesittëpaguajnëshumatëcaktuaraparashpërd
ërgimin e kodittëfshehtëpërteç’bllokuarkompjuterindhetëshpetojmtedhënattona.
Dekriptimi(Decryption) PasiqëpërmendemEnkriptiminduhettëmosharrojm pa
përmenduredheDekriptimin. Me Dekriptimkuptojmëkodinsekretqënaofrohet pas
proceduraveqëduhetbërë me njëllojtjetërtëenkriptimittëdhënave. Dekriptimiështënjefazë e
vështirësepseduhetnjëprocedurë e gjatëndoshtaedhe me vitepërtëgjeturkodinsekretdhe ta përdorimatë
per kthimin e tëdhënave.

- Peshkimi (Phishing)
Shumëherëndoshtajemiprovuarngakëtollojemashtrimesh. Peshkimi apo Phishing sinjihet ne
gjuhënanglezeështënjëraprejmetodaveqëmundtëpërdoretpërqëllimetëmashtrojnëpërdoruesit. Sot
kemishumëmënyrakomunikimisi: Facebook, Twitter, Instagram, Gmail etj.
SulmuesitsynojnëqëtemarrintëdhënattonapërmesklonimittëWebFaqeveorigjinale me
atotëvetëshkruara (Koduara). Përtumbrojturngakyllojmashtrimipasi ta
hapimduhettëshikojmnëhapsirënkushkruajmënë browser kumundtëjetëadresandryshenga ajo
qëështëorigjinale.

- Scam & Spam Emails


Imellat Scam & Spam Edhekjoështënjëmetodmashtrimi por ndryshenga ajo e Phishing. Spam
ështënjëllojemailiqenavijenëemailettona por qënukkanëtëbëjë me atoqëshkruajnënëtë.
Përpiqenqëtënamashtrojnëqëteklikojmënëlinqet e ofruaradhetëndjekimhapatqëjanëtëshkruar. Vitet e
funditofruesit e shërbimevetë E-mailave (Gmail,Hotmail,Yahooetj.) indajnë keto si Spam Email
duhettëkemikujdesqëtëmosbëhemishënjester e tyre.

You might also like