Punë praktike 4.9PROGRAMIMI DHE ALGORITMIKA
Animacion i emrit në Scratch
Qëllimi: Animacion i shkronjave të emrit
në Scratch.
Në këtë praktikë kërkohet të animohet
emri Ela. Shkronjat E, L, A duhet të
vendosen në Scratch si Sprite. Secila prej
tyre mund të animohet me ngjyra të
ndryshme dhe mund të rrotullohen gjatë
kohës që luhet muzikë. Pasi ka përfunduar
animimi i shkronjave, duhet të vendoset
background-i siç është paraqitur në figurë.
Zhvillimi i punës praktike:
Shembulli i mëposhtëm do të realizohet
për emrin Ela. Kështu heqim objektin
mace, duke qenë se do të shfaqim vetëm
shkronjat e emrit Ela. Macja mund të
hiqet duke përdorur gërshërët. Për këtë
klikojmë te gërshërët dhe më pas klikojmë
te macja.
Në librarinë e Sprite-eve zgjedhim
kategorinë e shkronjave. Te shkronjat
zgjedhim shkronjën e parë të emrit, pra
shkronjën E.
Për të ndryshuar ngjyrat te shkronja E
25 herë do të përdorim bllokun Change
(Color) Effect by (25), i cili ndodhet në
bllokun Looks. Ndërsa për të ndryshuar
ngjyrën sa herë që klikohet Sprite, do të
përdoret blloku: When this Sprite clicked, i
cili ndodhet në bllokun Events. Për të parë
ndryshimin e ngjyrave duhet të klikojmë te
shkronja E ose te blloqet e krijuara.
151
PROGRAMIMI DHE ALGORITMIKA
Për të vendosur muzikë duhet të shtojmë
bllokun Play sound pop, i cili ndodhet në
bllokun Sound, siç shihet në figurën përbri.
Shtojmë shkronjën L si Sprite të ri. Shkronja
L duhet të rrotullohet me 15 gradë për 10
herë, ku midis herëve të kemi një pushim
prej 1 sekonde. Për shkronjën e dytë të
luhet muzikë pop. Për këtë të përdoren
blloqet, siç tregohet në figurën në të
djathtë.
Shtojmë shkronjën e fundit të emrit, A,
si një Sprite të ri. Kësaj shkronje gjatë
gjithë kohës duhet t’i ndryshohet ngjyra
dhe të rrotullohet me 45 gradë në krahun
orar. Për ta realizuar këtë do të përdoren
blloqet Control, Looks dhe Motion.
Pasi kemi përfunduar me animimin
e shkronjave, nga libraria Backdrop
zgjedhim modelin Holiday. Më pas
zgjedhim fotografinë të emërtuar party si
background, ku do të afishohen shkronjat
E, L, A.
Detyrë:
Realizoni praktikën e mësipërme me shkronjat e emrit tuaj.
152
4.10PROGRAMIMI DHE ALGORITMIKA
Gjuhët e programimit dhe konceptet bazë të tyre
Nxënësi/ja: Situatë
• përcakton ndryshimet midis
Cila është gjuha e kompjuterit?
gjeneratave të gjuhëve të Si mund të arrijmë të komu-
programimit; nikojmë me kompjuterin për
• identifikon avantazhet e të marrë prej tij rezultatet që
përdorimit të gjuhëve të dëshirojmë? Si është arritur kjo gjë ndër vite?
programimit.
Gjuha është një sistem komunikimi. Gjuha e kompjuterit
Fjalët kyç: funksionon duke u mbështetur te sistemi binar, i cili është i bazuar
në zero (0) dhe njësha (1).
gjuhë programimi, kompilator.
Gjeneratat e gjuhëve të programimit
Zhvillimi i gjuhëve të programimit gjatë viteve është ndikuar nga përparimet dhe ecuria e teknologjisë,
pavarësisht se sot teknologjia ka njohur një shumëllojshmëri aplikimesh që janë zbatuar në fusha të
ndryshme. Në fillim është dashur gjetja e një rruge komunikimi ndërmjet njerëzve dhe kompjuterit. Për këtë
janë krijuar gjuhët e programimit, të cilat kanë kaluar në pesë gjenerata.
Gjenerata e parë i përket gjuhës së makinës, e cila përbëhet nga një bashkësi numrash 0 dhe 1. Kjo është
gjuha që kupton kompjuteri. Çdo tip familjesh procesorësh kërkon gjuhën e tij të makinës, për këtë arsye
kjo gjuhë është e varur nga makina ose ndryshe thuhet nga hardware-i. Gjuha e makinës ka avantazhin e
ekzekutimit të shpejtë dhe përdorimit eficient të kujtesës. Por ajo është një metodë programimi e vështirë
dhe që harxhon kohë. Gjuha e makinës është një gjuhë e nivelit të ulët.
Gjenerata e dytë i përket gjuhës Asembler, e cila njihet si gjuhë programimi e nivelit të ulët. Gjuha Asembler
e paraqet kodin e programit me anë të simboleve ose shkurtimeve të quajtura “mnemonic” dhe adresave
simbolike në vend të 0-s dhe 1-shit. Një program i shkruar në gjuhën Asembler për t’u kuptuar dhe ekzekutuar
nga makina duhej përkthyer në gjuhë makine. Ky proces kryhet nga një program që quhet asemblues.
Problematikat që shfaqte gjuha Asembler ishin:
• Gjuha nuk ishte universale – ajo ishte një gjuhë e varur nga makina ku përdorej, sepse çdo makinë ka
gjuhën e vet. Sado e fuqishme të ishte gjuha Asembler, një program i shkruar për një makinë nuk do të
funksiononte në një makinë tjetër. Për këtë arsye, programi do të kërkonte rishkrimin nga e para.
• Vështirësi me pajisjet I/O – këto janë pajisje hyrëse dhe dalëse, të cilat kërkojnë njohuri të detajuara.
153
PROGRAMIMI DHE ALGORITMIKA
Gjenerata e tretë erdhi si nevojë për të zgjidhur problematikat e shfaqura në gjuhën Asembler. Gjuhët e
gjeneratës së tretë njihen si gjuhët e nivelit të lartë.
Gjuhët e nivelit të lartë lejojnë manipulimin me lehtësi të formulave matematikore, të strukturave komplekse,
të tilla si: tabela një ose disadimensionale, lista, pemë etj., të veprimeve I/O etj.
Këto gjuhë janë të dizenjuara për t’u ekzekutuar në kompjutera të ndryshëm me pak ose aspak ndryshim,
lehtësojnë programuesit në shkrimin e kodit; programet përdoren në më shumë se një tip makine me pak
ndryshime.
Për të përkthyer gjuhët e nivelit të lartë në gjuhë makine mund të përdoren kompilatori dhe interpretuesi.
Gjuha e parë e krijuar e nivelit të lartë është FORTRAN (FORmula TRANslator). Ajo u krijua në vitet ’50 në
mjediset shkencore dhe është e përshtatshme për llogaritjet dhe zgjidhjet e problematikave të kësaj natyre.
Gjuha FORTRAN pati sukses, sepse u përdor nga individë të fushave të ndryshme, të tillë si: informaticienë,
matematikanë, inxhinierë dhe fizikanë. Më pas, kjo u shoqërua edhe me gjuhë të tjera, të tilla si COBOL
(COmmon Bussinnes Oriented Language), e zhvilluar për mjedise komerciale dhe më e rendësishmja e
saj ishte paraqitja e rezultateve, BASIC (Beginners All-purpose Symbolic Instruction Code), e cila përdoret
kryesisht për fillestarët në fushën e programimit dhe për studentë.
Gjuha që u bë mjaft popullore dhe suksesi i së cilës u duk që në momentet e para të publikimit, ishte gjuha
C. Kjo gjuhë e re u quajt gjuha C, sepse në atë vit ishte në përdorim gjuha e programimit e quajtur B. Edhe
sot, gjuha C konsiderohet si një gjuhë me potencial të lartë. Një version më i përparuar i saj është gjuha
C++, e cila në thelb është gjuha C e pasuruar me një sërë funksionesh të gatshme, si dhe me paradigmën e
programimit me objekte.
Gjuhët e gjeneratës së katërt njihen si gjuhë të nivelit të lartë. Janë gjuhë joproceduriale, që e lejojnë
programuesin dhe përdoruesin të përcaktojë se çfarë duhet të bëjë kompjuteri pa specifikuar se si ta bëjë
atë. Këto gjuhë rrisin shpejtësinë e zhvillimit të programeve, minimizojnë mirëmbajtjen duke reduktuar
gabimet.
Gjenerata e pestë. Gjuhët natyrale paraqesin hapin tjetër në zhvillimin e gjuhëve të programimit. Teksti i
këtyre gjuhëve ngjason me të folurin njerëzor dhe janë dizenjuar për ta bërë kompjuterin “më të zgjuar”
(smart).
Sot njihen shumë gjuhë programimi. Deri në vitin 2006 ishin të njohura mbi 8 000 gjuhë programimi. Në këtë
moment, një vendim i rëndësishëm është zgjedhja e gjuhës së programimit me të cilën duhet të fillojmë.
Në mësimet në vazhdim do të fokusohemi te gjuha C. Arsyeja pse te gjuha C është sepse me anë të saj mund
të zgjidhim pothuajse të gjitha problematikat që lidhen me programimin.
Gjuha C do t’ju mësojë se si të programoni dhe të vendosni kodin. Kjo mjafton për të vendosur bazat dhe të
filloni të mësoni një gjuhë tjetër programimi, si për shembull: C++, Java, PHP etj.
Çfarë është një gjuhë programimi?
Një gjuhë programimi është një bashkësi simbolesh të shkruajtura, të cilat e udhëzojnë kompjuterin të
kryejë detyra të caktuara. Pra, një sistem komunikimi midis makinave dhe njeriut.
154
PROGRAMIMI DHE ALGORITMIKA
Ajo përbëhet nga:
• fjalori - një bashkësi e fundme termash;
• sintaksa - një bashkësi rregullash që përcaktojnë mënyrën e ndërthurjes së termave;
• semantika - kuptimi i fjalëve të fjalorit dhe kuptimi i ndërthurjeve të tyre.
Konceptet bazë të gjuhëve të programimit
Gjuhët e programimit kanë disa tipare të përbashkëta. Tre komponentët e tyre janë:
• instruksione deklarative: deklarojnë emra që identifikojnë të dhëna të cilat përdoren më vonë gjatë
zhvillimit të programit;
• instruksione proceduriale: të shkruajnë një listë instruksionesh të një algoritmi;
• komentet: përdoren për të përshkruar pjesë të ndryshme të programit. Komentet ndihmojnë në
lexueshmërinë e programit.
Aftësi që zhvillohen
Nxënësi/ja: njihet me gjeneratat e gjuhëve të programimit dhe konceptet bazë të
gjuhëve të programimit.
Kontroll njohurish
1. Cilat janë gjeneratat e gjuhëve të programimit?
2. Cilat janë karakteristikat e gjeneratës së parë dhe të dytë?
3. Cilat janë karakteristikat e gjeneratë së tretë, katërt dhe pestë?
4. Çfarë është një gjuhë programimi? Nga se përbëhet ajo?
5. Cilat janë avantazhet e përdorimit të gjuhëve të nivelit të lartë?
6. Cili është roli i kompilatorit?
7. Cilat janë tiparet e përbashkëta të gjuhëve të programimit?
8. Kërkoni në internet për ndryshimet midis gjuhëve proceduriale dhe gjuhëve të drejtuara
drejt objekteve. Jepni shembuj për to.
155
4.11PROGRAMIMI DHE ALGORITMIKA
Fazat e ndërtimit të një programi
Nxënësi/ja: Situatë
Kërkohet të ndërtohet një
• vlerëson rëndësinë e krijimit të një program që të regjistrojë të gjithë
programi; nxënësit dhe notat që ata kanë
marrë gjatë një viti akademik.
• evidenton fazat e krijimit të një Cilat janë fazat e ndërtimit të një programi?
programi;
Krijimi i një programi
• koncepton rëndësinë që ka secila
fazë dhe radhën e tyre. Zgjidhja e një problemi shpeshherë do të mund të arrihet
nëpërmjet ndërtimit të një programi. Për të ndërtuar një program
Fjalët kyç: duhet të kalohet në gjashtë hapa, si në figurën e mëposhtme:
faza, kompilimi, përkthimi,
interpretuesi.
Specifikimi Dizenjimi Kodimi Testimi Dokumentimi Mirëmbajtja
1. Specifikimi i programit
Në hapin e specifikimit të programit përcaktohet qëllimi i tij. Qëllimi i programit është i ndikuar nga problemi
që do të duhet të zgjidhet. Problemi duhet të jetë i formuluar saktë dhe qartë. Personat që formulojnë
problemin duhet të jenë specialistë të fushës. Në qoftë se do të ishte një problem ekonomik, formulimin dhe
paraqitjen e tij në mënyrë të qartë do të mund ta realizonin specialistë të fushës ekonomike. Ky rregull do
të duhet të zbatohet për të gjitha problemet në fusha të ndryshme. Në këtë fazë të zhvillimit të programit,
specialistët e fushave përkatëse kanë një rol të rëndësishëm në specifikimin e problemit.
2. Dizenjimi i programit
Dizenjimi i programit ka të bëjë me zgjedhjen e metodës së duhur për zgjidhjen e problemit të identifikuar
në hapin e parë. Për zgjidhjen e një problemi të caktuar mund propozohet përdorimi i metodave ekzistuese
ose zgjidhje të reja. Midis të gjitha metodave të propozuara do të zgjidhet ajo metodë që jep zgjidhjen më
të mirë të problemit.
Në këtë hap të zhvillimit të programit do të ndërtohen algoritmet përkatëse. Ndërtimi i algoritmit ka të
bëjë me paraqitjen e metodës së zgjidhjes. Kjo metodë do të duhet të detajohet në veprime të qarta, duke
përcaktuar edhe radhën e zbatimit të tyre.
3. Kodimi i programit
Kodimi i programit ka të bëjë me shkrimin aktual të programit. Në këtë hap, algoritmet e paraqitura në hapin e
dytë do të shkruhen në gjuhën e programimit të zgjedhur, duke zbatuar logjikën e ndërtuar në dy hapat e parë.
156
PROGRAMIMI DHE ALGORITMIKA
4. Testimi i programit
Testimi i programit ka të bëjë me testimin e funksionaliteteve që do të zgjidhin problemin e përcaktuar në
fazën e parë. Në këtë hap bëhet kompilimi i programit me të gjitha funksionalitetet.
Kompilimi është procesi i përkthimit të një programi nga një gjuhë programimi në gjuhë makine. Përkthimi
realizohet nga një program që quhet interpretues. Interpretuesi përkthen instruksionet e programit rresht
pas rreshti në gjuhën e makinës, pak para se instruksionet e programit të ekzekutohen. Përkthimi dhe
kompilimi ndodhin në mënyrë të menjëhershme, njëri pas tjetrit.
Në këtë hap, programit i jepen të dhëna hyrëse dhe analizohen të dhënat dalëse. Qëllimi është të
identifikohen dhe korrigjohen gabimet e mundshme në sintaksë apo në logjikë.
Në përfundim të këtij hapi do të përfitoni një program që i jep zgjidhje problematikave të ngritura në hapin e parë.
5. Dokumentimi i programit
Dokumentimi i programit ka të bëjë me ndërtimin e një dokumenti që tregon se cilat janë funksionalitetet
e programit dhe se si përdoren ato. Dokumentimi do të ndihmojë personat që duan të përdorin programin
dhe do të jetë një ndihmës për çdo paqartësi.
6. Mirëmbajtja e programit
Në këtë hap, programi është plotësisht i përfunduar. Mirëmbajtja e programit ka të bëjë me mbajtjen e
programit në gjendjen sa më optimale.
Gjatë këtij hapi mund t’i rikthehemi edhe njëherë hapave të mëparshëm të programit për të përmirësuar
kodin ekzistues. Gjithashtu, në qoftë se është e nevojshme, mund të shtohen funksionalitete në program.
Në qoftë se në një nga hapat identifikohen gabime që e kanë burimin në hapin paraardhës ose me herët,
mund të detyrohemi të kthehemi mbrapa për të bërë korrigjimet e duhura dhe të kalojmë në hapin
pasardhës.
Dy hapat e parë përfaqësojnë një grupim të emërtuar Analiza e programit. Specialistët përkatës quhen
analistë. Hapi i tretë përfaqëson zhvilluesit ose programuesit të cilët do të ndërtojnë programin.
Aftësi që zhvillohen
Nxënësi/ja: liston hapat e nevojshëm për ndërtimin e një programi.
Kontroll njohurish
1. Cilat janë etapat në ndërtimin e një programi?
2. Çfarë ndodh në etapën e specifikimit dhe dizenjimit të programit?
3. Çfarë ndodh në etapën e kodimit dhe testimit të programit?
4. Ç’mund të thoni për etapën e dokumentimit dhe mirëmbajtjes?
5. Çfarë është kompilimi?
6. Kush quhen analistë dhe programues?
157
4.12PROGRAMIMI DHE ALGORITMIKA
Hyrje në gjuhën C. Zhvillimi i një programi
Nxënësi/ja: Situatë
Cilat janë fazat nëpër
• koncepton gjuhën C si gjuhë të cilat kalon zhvillimi
programimi; i programit? Si mund
të shkruhet një program i thjeshtë në gjuhën C? Cila
• analizon strukturën e gjuhës C; është struktura e tij?
• kompilon dhe ekzekuton
programin në gjuhën C.
Fjalët kyç:
gjuha C, ekzekutim programi,
zhvillimi i një programi.
Hyrje në gjuhën C
Mundësia për të organizuar dhe përpunuar informacionin është çelësi i suksesit në kohët e sotme.
Kompjuterat janë projektuar për të trajtuar dhe përpunuar me shpejtësi dhe në mënyrë efikase sasi të
mëdha informacioni. Megjithatë, ata nuk mund të bëjnë asgjë derisa dikush t’u tregojë atyre se çfarë duhet
të bëjnë. Dhe këtu vjen gjuha C. Ajo është një gjuhë programimi e nivelit të lartë, e cila e lejon programuesin
të komunikojë në mënyrë të frytshme me kompjuterin.
Në vitin 1970, dy programues, Brajan Kernigan dhe Denis Riçi, krijuan një gjuhë të re, të quajtur gjuha C.
Gjuha C u projektua me qëllimin për të shkruar sistemet e shfrytëzimit.
Fazat e zhvillimit të një programi në gjuhën C
Një program C është një skedar tekst, i cili përmban një bashkësi instruksionesh që përshkruajnë punën që
kompjuteri duhet të bëjë. Instruksionet janë të kufizuara në një numër fjalësh të quajtura fjalë kyç. Procesi
i zhvillimit të një programi kalon në disa faza, të cilat janë:
Editimi
Në këtë fazë, ne krijojmë një skedar tekst, i cili përmban programin tonë. Ky skedar tekst quhet kodi burim
dhe mbaron me prapashtesën .c.
Kompilimi
Kompilimi i referohet procesimit të përkthimit të skedarit burim në një skedar të ndërmjetëm objekt me
prapashtesë .obj. Mirëpo, ky skedar është një përkthim i kodit burim në gjuhë makine dhe nuk është i
ekzekutueshëm.
Linkimi
Nëse skedari burim i referohet funksioneve që ndodhen në librari ose funksioneve që janë të përcaktuara
në skedarë të tjerë burimi, linkimi kombinon këto funksione së bashku me main () për të krijuar një skedar
të ekzekutueshëm me prapashtesën .exe.
158
PROGRAMIMI DHE ALGORITMIKA
Ekzekutimi
Në këtë fazë mund të ekzekutojmë skedarin .exe që krijuam në linkim.
Për të ndërtuar një program në gjuhën C, duhet të përdorim një kompilator. Kompilatori është një program
që transformon kodin burim të shkruar në një gjuhë programimi në një gjuhë tjetër, shpesh ka formë binare
dhe njihet si kodi objekt. Sot ekzistojnë programe të shumta IDE (Integrated Development Environment), që
ekzekutohen në sisteme të ndryshme shfrytëzimi. IDE-t më popullore për të ndërtuar programe në gjuhën
C janë: Visual Studio, Dev-C++, Code-Blocks. Programet tona në vijim janë shkruar në Dev-C++.
Dev-C++ mund ta shkarkoni në linkun: https://sourceforge.net/projects/orwelldevcpp/
Struktura e një programi në gjuhën C
Një gjuhë, dhe në veçanti një gjuhë programimi, karakterizohet nga një alfabet, prej të cilit përcaktohen
fjalët duke zbatuar rregullat e përcaktimit të tyre. Alfabeti kupton të gjitha simbolet e gjuhës të përdorshme
në ndërtimin e frazave të saj. Në gjuhën C, alfabeti nënkupton simbolet: germat e mëdha A-Z, të vogla a-z,
numrat 0-9, simbolin bosh, simbolet speciale duke nënkuptuar operatorët, shenjat e pikësimit ndarëse, si
edhe operatorët aritmetikë e relacionalë.
Mënyra më e mirë për të mësuar një gjuhë programimi është duke shkruar një program, prandaj le të
shohim programin tonë të parë.
// programi im i parë në gjuhën C
#include <stdio.h>
int main ()
{
printf ("Përshëndetje!\n");
return 0;
}
Ky është një nga programet më të thjeshta, por ai ka elementet kryesore që ka çdo program në gjuhën C. Le
ta shpjegojmë rresht për rreshti atë.
Programi fillon me një koment: //programi im i parë në C. Të gjithë rreshtat që fillojnë me dy shenja slesh
(//) janë komente dhe nuk kanë asnjë efekt në sjelljen e programit. Komentet shërbejnë për të shpjeguar
me fjalë funksionimin e programit, pjesë të tij, variabla etj. Shenja // lejon shkrimin e komentit në rreshtin
aktual. Për të shkruar disa rreshta duhet që komentet të vendosen midis /* dhe */.
Shprehja #include <stdio.h> i tregon paraprocesorit të përfshijë në program skedarin standard stdio.h. Ky
skedar përmban deklarimet e librarisë standarde të hyrjeve e daljeve të gjuhës C. Për të përdorur funksionet
e një librarie, duhet që ajo të përfshihet në skedarin burim me anë të direktivës së parakompilimit #include.
Paraprocesori është një program që përpunon hyrjen e tij për të prodhuar daljen, e cila përdoret si hyrje në
një program tjetër që, zakonisht, është kompilatori.
Programi ynë është i shkurtër dhe përbëhet vetëm nga funksioni main (). Emri main është special, sepse aty
fillon ekzekutimi i të gjitha programeve të gjuhës C. Çdo funksion tjetër thirret direkt ose indirekt nga main.
Kllapat gjarpërushe hapëse dhe mbyllëse { } tregojnë përkatësisht fillimin dhe fundin e trupit të funksionit
main (), ndërsa () tregojnë që main është një funksion me listë boshe parametrash.
159
PROGRAMIMI DHE ALGORITMIKA
Trupi i një funksioni mund të përbëhet nga disa instruksione. Në shembullin tonë, ai përbëhet nga dy
instruksione: printf ("Përshëndetje!\n"); dhe return 0. Instruksioni i parë është një shprehje e ekzekutueshme
që “i thotë” gjuhës C të printojë mesazhin Përshëndetje! në ekran. Ky tekst është edhe rezultati i ekzekutimit
të këtij programi. Gjuha C përdor pikëpresjen (;) për të mbaruar instruksionin dhe klasën standarde stdio
(standard input output) për të afishuar mesazhin. Një librari është një bashkësi klasash, funksionesh dhe të
dhënash që janë grupuar së bashku për ripërdorim. Libraria standarde përmban: klasat dhe funksionet për
hyrjen dhe daljen e të dhënave, renditjen, funksionet matematike, si dhe funksionet për manipulimet me
skedarët. Funksioni i përdorur printf është i deklaruar në librarinë standarde <stdio.h>, prandaj kjo librari
është përfshirë në fillim të programit tonë me anë të #include<stdio.h>.
Simboli special “\n”, i cili përbëhet nga dy karakteret backslash \ dhe n, por që së bashku trajtohen si një,
bën të mundur kalimin në rresht të ri.
Shprehja return 0 përdoret për t’i treguar sistemit të shfrytëzimit që programi mbaroi me sukses. Gjendja
jozero tregon një gabim.
Gjatë zhvillimit të programit ndodhin gabime në kohën e kompilimit dhe në kohën e ekzekutimit. Gabimi
në kohën e kompilimit ndodh, për shembull, për gabime sintaksore, si: harrimi i pikëpresjes për mbarimin
e instruksionit, i kllapës mbyllëse kur ka një hapëse etj. Programi nuk do të kompilohet për aq kohë sa ai
ka gabime sintaksore. Kur është shkruar sipas të gjitha rregullave të gjuhës, programi kompilohet. Gjatë
ekzekutimit të progamit mund të ndodhin gabime në kohën e ekzekutimit (run time error), siç janë gabimet
logjike në program. Këto gabime rregullohen duke rishkruar pjesët gabim të kodit burim.
Krijimi i një programi të thjeshtë
Si fillim hapim programin, krijojmë një dokument duke klikuar: File -> New -> Source File ose nga tastiera
shypim Ctrl + N. Më pas shkruajmë kodin në gjuhën C si më poshtë:
.. ..
E ruajmë dokumentin te menuja File - > Save ose nga tastiera shtypim Ctrl + S. Në dritaren që del, pasi kemi
përcaktuar vendin ku do ta ruajmë dokumentin, do të duhet të përcaktojmë emërtimin e dokumentit te File
Name dhe tipin e dokumentit te Save as type, ku duhet të zgjedhim opsionin “C source file (*.c)”.
Pasi t’i kemi mbaruar, klikojmë Save.
Conio.h (Console Input Output Header File) është një skedar header, i përdorur më shumë nga kompilatorët
e MS-DOS, për të bërë të mundur menaxhimin e hyrje/daljeve në programet e bazuara në console. Një
funksion i rëndësishëm i saj është getch(), i cili përdoret për të mbajtur dritaren output, përndryshe kur
ekzekutojmë kodin tonë, do të na shfaqet dritarja e output-it, vetëm për një fraksion të sekondës dhe nuk
do të kemi mundësi të shohim rezultatin e programit tonë. Për këtë përdoret si truk funksioni getch, i cili
merr një karakter nga tastiera.
160
PROGRAMIMI DHE ALGORITMIKA
Kompilimi i programit
Për të kompiluar programin do të duhet të shpjegojmë disa komanda, të cilat janë në figurën e mëposhtme.
Execute Tools Astyle Window Help
Compile F9
F10
Run
Compile & Run F11
Rebuild All F12
Compile – kompilon programin dhe kontrollon për gabime sintaksore. Në qoftë se ka, do të na shfaqë numrin
e rreshtit ku ka ndodhur gabimi sintaksor.
Run – shfaq programin e ndërtuar, pas ndërtimit (Compile) të fundit të suksesshëm të programit.
Compile & Run – kompilon dhe shfaq programin, në qoftë se nuk ka gabime sintaksore.
Pasi klikojmë Compile & Run do t’ju shfaqet dritarja si në figurë:
.. ..
Aftësi që zhvillohen
Nxënësi/ja: aftësohet në shkrimin e një programi në gjuhën C sipas sintaksës së saj.
Kontroll njohurish
1. Çfarë kuptoni me program? Cilat janë fazat e zhvillimit të tij?
2. Cila është vlera korrekte që i kthehet sistemit të shfrytëzimit pas përfundimit me sukses të programit?
3. Cili është funksioni i vetëm që duhet të përmbajnë të gjitha programet e gjuhës C?
4. Cila simbolikë përdoret për të treguar fillimin dhe fundin e një blloku instruksionesh? Cila shenjë
pikësimi tregon mbarimin e instruksionit?
5. Çfarë kuptoni me gabim në kohën e kompilimit dhe gabim në kohën e ekzekutimit?
6. Cili është një koment i saktë:
a. */ Komente */ b. ** Komente ** c. /* Komente */ d. { Komente }
7. Shkarkoni nga interneti dhe instaloni programin Dev-C++. Krijoni programin tuaj të parë sipas hapave
të shpjeguar në mësim.
161
4.13PROGRAMIMI DHE ALGORITMIKA
Variablat dhe konstantet. Tipat e të dhënave
Nxënësi/ja: Situatë int a;
Cilat janë tipat e ndryshme double b;
• koncepton variablat dhe const int i = 25;
konstantet;
të të dhënave në gjuhën
• përcakton tipat e ndryshëm të të
dhënave; C? Si deklarohen dhe inicializohen konstantet dhe
• deklaron dhe inicializon variablat variablat në gjuhën C?
dhe konstantet.
Fjalët kyç: Variabli
variabla, stringje, tipa të dhënash. Variabël është emri i një zone të kujtesës së kompjuterit ku
ruajmë informacionin. Kur deklarohet një variabël, atij i caktohet
një zonë kujtese. Çdo variabël identifikohet nga emri dhe ka një
tip të dhënash. Tipi i tregon gjuhës C se si do të përdoret variabli dhe çfarë lloje vlerash (real, integer, char)
mund të rezervojë. Emrat fillojnë me germë ose nënvijën (_) të ndjekur nga çdo lloj germe, numri ose _.
Emri nuk duhet të përmbajë hapësira boshe. Germat e mëdha janë të ndryshme nga ato të voglat, kështu
emrat ana, Ana dhe ANA përcaktojnë tri variabla të ndryshme. Në përgjithësi, emrat e variblave zgjidhen në
mënyrë të tillë që të japin të dhëna mbi informacionin e regjistruar në të.
Disa fjalë, si: int, while, for, float, if etj., kanë një kuptim të veçantë në gjuhën C. Ato janë fjalë të rezervuara
(fjalë kyç) dhe nuk mund të përdoren si emra variablash.
Tipat bazë të të dhënave
Të gjitha informacionet që procesohen nga një kompjuter quhen të dhëna. Ekzistojnë tipa të ndryshëm të
dhënash. Një tip të dhënash është një klasifikim që i bëhet të dhënave në varësi të llojit të tyre. Tipi i të
dhënave përcakton:
▪ vlerat e mundshme për atë tip;
▪ veprimet që mund të kryhen mbi atë tip të dhënash;
▪ mënyrën se si të dhënat e atij tipi ruhen në kujtesë.
Tabela e mëposhtme përmbledh tipat bazë të të dhënave në gjuhën C dhe jep shembujt përkatës.
Tipa të dhënash
Tipa të dhënash në gjuhën C
char int bool float double
a, B, $, # 5, 17, 128 true,false 2.5, 0.3 23433.3455
162
PROGRAMIMI DHE ALGORITMIKA
Tabela e mëposhtme jep një përshkrim të shkurtër mbi tipat e të dhënave në gjuhën C.
Emri Përshkrimi
char Karakter ose numër i plotë
int Numër i plotë me gjatësi 4B
bool Vlerë logjike. Mund të marrë një nga dy vlerat: e vërtetë (true) ose e gabuar (false).
float Numër me presje dhjetore (numër real)
double Numër me presje dhjetore me precizion të dyfishtë
Numrat me presje mund t’i deklarojmë të madhësive të ndryshme duke përdorur float ose double. Madhësia
e një float-i është zakonisht 32 bit dhe e double 64 bit. Për më shumë saktësi, llogaritjet shkencore dhe
inxhinierike duhet të kryhen duke përdorur tipin e të dhënave double, pra numri ka më shumë shifra para
dhe pas pikës dhjetore, sesa tipi float. Tipi double përdoret për të deklaruar numra me precizion të dyfishtë.
Deklarimi dhe inicializimi i variablave
Në mënyrë që të përdorim një variabël, duhet ta deklarojmë atë duke përcaktuar edhe tipin e tij të të
dhënave. Deklarimi shërben për tri qëllime:
1. përcakton emrin e variablit;
2. përcakton tipin e variablit (int, float, char etj.)
3. i jep programuesit një përshkrim të tij.
Sintaksa e deklarimit është:
tipi emër_variabli;
Pra, deklarimi fillon me tipi, i cili është një nga tipat e të dhënave të mësipërme dhe ndiqet nga emri i
variablit, emër_variabli.
Shembull:
int a;
double b;
Në rastin e parë kemi deklaruar një variabël a të tipi int, pra numër i plotë. Në rastin e dytë b është i tipit
double.
Nëse kemi disa variabla të të njëtit tip, ato mund të deklarohen në një shprehje të vetme duke i ndarë me
presje. Gjithashtu, variabli mund të inicializohet në momentin e deklarimit si variabli d në vijim, i cili është
inicializuar me vlerën - 10.
int d = -10, b, c;
Kur një variabël është një karakter, ai vendoset ndërmjet thonjëzave teke.
Shembull:
char nota = ‘A’;
Kur një variabël është një tekst, ai do të duhet të vendoset ndërmjet thonjëzave dyshe.
char emër [10] = “informatika”, ku [10] përcakton sasinë e karaktereve që mund të ruajë variabli emër.
163
PROGRAMIMI DHE ALGORITMIKA
Zona e njohjes së variablave
Variabli mund të jetë global ose lokal. Variabli global deklarohet në trupin kryesor të kodit burim, jashtë të
gjitha funksioneve. Ai mund të aksesohet kudo, ndërsa variabli lokal deklarohet në trupin e funksionit ose
në një bllok dhe njihet vetëm brenda tij. Zona e njohjes së tyre është që nga pika e deklarimit e deri në fund
të funksionit ose bllokut. Kur deklarojmë një variabël lokal, vlera default e tij është e papërcaktuar.
Konstantet
Konstantet janë shprehje me një vlerë fikse, të pandryshueshme. Ato mund të jenë: numra të plotë, numra
me presje dhjetore, karaktere e stringje.
Shembuj
50 // konstante numër i plotë
3.14159 // numër me presje
‘x’ // konstante karakter
“Gjuha C” // konstante string
Deklarimi i konstanteve
Konstantet mund të deklarohen me fjalën kyç const dhe një tip të caktuar të dhënash, në mënyrë të njëjtë
si variablat:
Shembull:
const int i = 22;
deklaron konstanten i të tipit int.
Vlera e konstanteve nuk mund të modifikohet pas përcaktimit të tyre, p.sh.: konstantja i nuk mund të
ndryshohet në program.
Aftësi që zhvillohen
Nxënësi/ja: aftësohet në inicializimin dhe deklarimin e variablave, konstanteve dhe përdorimin e tipave të
ndryshëm të të dhënave.
Kontroll njohurish
1. Çfarë kuptoni me variabël?
2. Tregoni tipat bazë të të dhënave dhe kur përdoren ato.
3. Si deklarohet një variabël? Po një konstante?
4. Cili nuk është një tip të dhënash i vlefshëm për variablin?
a. float b. real c. int d. double
5. Cilat prej deklarimeve të mëposhtme janë deklarime të vlefshme variablash:
a. int n = -100; b. character m = 2, p = 4; c. int 2k; d. double x = 2 * m;
6. Përcaktoni variablat dhe tipat e të dhënave për të paraqitur të dhënat e mëposhtme:
a. moshën e një personi; b. të ardhurat e një personi;
c. numrin e fjalëve në një fjalor; d. një shkronjë në alfabet.
164
Operatorët 4.14PROGRAMIMI DHE ALGORITMIKA
Nxënësi/ja: Situatë
Kërkohet të ndërtohet
• analizon operatorë të ndryshëm në një program në gjuhën
gjuhën C; C, i cili do të përcaktojë nëse një numër është tek apo çift.
Cilët janë operatorët që do të përdoren në këtë rast?
• përcakton se kur përdoret secili
prej operatorëve;
• vlerëson rëndësinë që ka prioriteti i
secilit operator.
Fjalët kyç:
operator.
Operatorët përdoren për të kryer veprime me variabla e konstante. Ata përbëhen nga shenja të cilat nuk
janë pjesë e alfabetit të gjuhës, por gjenden në të gjitha tastierat. Ata janë të disa llojeve, të cilat do t’i
listojmë në vijim.
Operatori i vlerëdhënies (=)
Ky operator i jep vlerë një variabli dhe përfaqësohet nga shenja e barazimit (=). Sintaksa e tij është:
emri_variablit = shprehje;
ku shprehje tregon se është një kombinim i konstanteve, variablave, funksioneve etj., e cila ka një vlerë të
caktuar.
Operatori = tregon që vlera e shprehjes që është në anën e djathtë të tij i jepet për vlerë variablit
emri_variablit, i cili ndodhet në anën e majtë të tij.
Kështu shprehja
a = 10;
i jep vlerën 10 variablit a.
Theksojmë që një variabël ka vetëm një vlerë në një moment të caktuar dhe disa vlera gjatë ekzekutimit të
programit, në varësi të situatës.
Operatorët aritmetikë (+, -, *, /)
Këta operatorë kryejnë veprime Operatorët =, -, * dhe / kanë të njëjtat kuptime si në matematikë.
aritmetike dhe janë: Operatori % jep mbetjen e pjesëtimit të dy vlerave. Ai vepron
mbi numra të plotë.
+ mbledhja Shembull:
- zbritja a = 11 % 3;
* shumëzimi variabli a do të ketë vlerën 2, sepse 2 është mbetja e pjesëtimit
/ pjesëtimi të 11 me 3.
% moduli
165
PROGRAMIMI DHE ALGORITMIKA
Operatorët e përbërë të vlerëdhënies (+=, -=, *=, /=, %=)
Kur duam të ndryshojmë vlerën e një variabli duke kryer një veprim në vlerën aktuale të ruajtur në këtë
variabël, mund të përdorim operatorët e përbërë të vlerëdhënies. Disa prej tyre janë: +=, -=, *=, /=, %=
Shembuj
a+=5 është ekuivalente me a=a+5 b-=4 është ekuivalente me b=b-4
c*=2 është ekuivalente me c=c*2 d/=f +1 është ekuivalente me d=d/(f+1)
#include <stdio.h> Në këtë program janë deklaruar dy variabla, a
#include <conio.h> dhe b, ku b ka vlerën 3.
int main ()
{ int a, b = 3; Në instruksionin a = b, a merr vlerën e b-së, pra
a = b; 3, dhe më pas rritet me 2 duke shkuar në 5.
a+= 2; // ekuivalente me a=a+2
printf (“%d”, a); Programi afishon vlerën e a-së, pra numrin 5.
getch();
return 0;
}
Operatorët rritës dhe zbritës (++, --)
Operatori rritës ++ dhe zbritës -- rrisin ose zvogëlojnë me 1 vlerën e ruajtur në variabël. Ata janë ekuvalente
përkatësisht me +=1 dhe -=1.
Kështu: c++; c+=1; dhe c=c+1; janë të gjitha ekuivalente, që të tria rrisin me 1 vlerën e variablit c.
Një karakteristikë e këtyre operatorëve është se ata mund të përdoren si parashtesë dhe prapashtesë. Kjo do
të thotë që ata mund të shkruhen para variablit ++a ose pas tij a++. Në shprehje të thjeshta, si a++ ose ++a
kanë të njëjtin kuptim, në të tjera kanë ndryshime të rëndësishme. Kur operatori ++ përdoret si parashtesë,
vlera e tij rritet përpara dhe më pas përdoret në shprehje, ndërsa kur operatori ++ përdoret si prapashtesë
do të thotë që fillimisht do të përdoret në shprehje me vlerën që ka dhe më pas do të rritet me 1.
Shembull 1 Shembull 2
B=3; B=3;
A=++B; A=B++;
//A bëhet 4, B bëhet 4 //A bëhet 3, B bëhet 4
Në shembullin 1, B-ja rritet përpara se vlera e saj të kopjohet tek A-ja, ndërsa te shembulli 2 vlera e B-së
kopjohet në A dhe më pas rritet B-ja.
Operatorët e krahasimit (==, !=, >, >=, <, <=)
Për të vlerësuar krahasimin midis dy shprehjeve përdorim operatorët relacionalë dhe të barazisë. Rezultati
i një veprimi relacional është një vlerë logjike, e cila mund të jetë e vërtetë (angl. true) ose e gabuar (angl.
false). Këta operatorë janë:
== i barazimit != i ndryshëm
> më i madh se < më i vogël se
>= më i madh ose baraz me <= më i vogël ose baraz me
166
PROGRAMIMI DHE ALGORITMIKA
Shembull 1 Shembull 2
Për tre variabla a=2, b=3 dhe c=6 kemi:
(7 = = 5) //është false (a == 5) është e gabuar, sepse 2 nuk është i barabartë me 5.
(5 > 4) //është true (a * b >= c) është e vërtetë, sepse (2 * 3 >= 6).
(3 != 2) //është true ((b = 2) == a) është e vërtetë, sepse fillimisht b bëhet 2, pastaj krahasohet me a.
(6 >= 6) //është true
(5 < 5) //është false
Operatorët logjikë (!, &&, ||)
Operatori! kryen veprimin logjik të NOT (e kundërta). Ai ka vetëm një shprehje, që ndodhet në të djathtë të
tij, dhe kryen të kundërtën e vlerës së tij. Pra kthen true nëse shprehja është false dhe e kundërta.
Shembull
!(2==2) kthen false, sepse shprehja (2==2) është e vërtetë
!false kthen true.
Operatorët logjikë && dhe||përdoren kur vlerësojmë dy shprehje për të marrë një rezultat. Operatori &&
korrespondon me veprimin logjik And (dhe). Rezultati i këtij veprimi është i vërtetë nëse të dyja shprehjet
janë të vërtetë, përndryshe është false. Operatori || korrespondon me veprimin logjik Or (ose). Rezultati i
këtij veprimi është i vërtetë nëse ndonjë ose të dyja shprehjet janë të vërteta dhe i gabuar, kur të dyja janë false.
Shembull
((5 == 5)&&(3>6)) // vlerësohet si false, sepse true && false është false.
( (5 == 5) || (3 > 6) ) // vlerësohet si true, sepse true || false është true.
Prioriteti i operatorëve
Shprehjet komplekse mund të kenë më shumë se dy operatorë. Për të bërë vlerësimin e tyre është e nevojshme
të njihet prioriteti i operatorëve. Disa prej tyre janë listuar në vijim, të renditur në rendin zbritës sipas prioritetit.
1. ++, --, 2. *, /, % 3. +, - 4. <, <=, >, >=
5. ==, != 6. && || 7. =, *=, /=, +=, -=
Aftësi që zhvillohen
Nxënësi/ja: përdor operatorë të ndryshëm në gjuhën C dhe vlerëson prioritetin e tyre.
Kontroll njohurish
1. Cili është rezultati i secilës nga shprehjet e mëposhtme?
a. 1 + 2 * 4 / 2 b. (1 + 2) * 4 / 2 c. 1 + 2 * (4 / 2) d. 9 % 2 + 1 e. (1 + (10- (2 + 2)))
2. Shkruaj shprehjen:
a. për të testuar që një numër është çift ose tek;
c. për të testuar: n është tek dhe pozitiv ose n është çift dhe negativ;
d. për të dhënë vlerën absolute të një numri n.
3. Shtoni kllapa në shprehjet e mëposhtme për të treguar rendin e përdorimit të operatorëve.
a. (n <= p + q && n >= p- q || n == 0) b. (++n * q-- / ++p- q)
167
4.15PROGRAMIMI DHE ALGORITMIKA Bazat e hyrjes dhe të daljes
Nxënësi/ja: Situatë scanf() printf()
Kërkohet të ndërtohet një (lexon të dhënat) (afishon të dhënat)
• prezantohet me formatet e llojeve Variabël
të të dhënave;
program në gjuhën C, i cili,
• evidenton mënyrat e ndryshme pasi merr moshën dhe emrin e përdoruesit nga tastiera,
të marrjes së të dhënave nga i afishon ata. Si do të merren të dhënat nga përdoruesit
përdoruesi; dhe si do të afishohen ato në ekran?
• prezantohet me afishimin e Zakonisht, programet e përdoruesit kërkojnë ndërveprimin me
rezultatit përfundimtar. përdoruesin. Kjo realizohet duke përdorur librarinë standarde të
hyrje-daljes, e njohur si skedari stdio. Në këtë temë do të mësoni të
Fjalët kyç: lexoni apo merrni të dhëna nga tastiera duke përdorur scanf () dhe
se si të afishoni lloje të ndryshme të dhënash duke përdorur printf ().
input, output, printf, scanf.
Formatet e llojeve të të dhënave
Sa herë që do të merrni të dhëna nga tastiera, do t’ju duhet të përcaktoni se çfarë lloji të dhëne kanë ato.
Në tabelën e mëposhtme jepet formati për llojet e të dhënave:
Lloji i të dhënave Formati
karakter %c
tekst, fjalë %s
numër i plotë %d
numër me presje %f
Shenja e përqindjes % në funksionin printf ose në funksionin scanf () përdoret për të treguar se pas saj është
formati i variablit që do të afishojë për printf () ose do të marrë për scanf ().
Funksioni printf
Funksioni printf () shërben për të afishur një mesazh në ekran. Një mesazh mund të jetë tekst, numër,
variabël apo një funksion.
Në qoftë se duam të afishojmë variabla duke përdorur printf, do të ndjekim strukturën si në shembullin më
poshtë. Për ta testuar atë, krijoni një dokument të ri dhe emërtojeni test_printf.c.
%0.2f dhe %0.3f tregon se sa shifra pas presjes do të shfaqim. Në rastin e parë do të shfaqim 2, ndërsa në
rastin e tretë do të shfaqim 3. Pasi të keni shkruar kodin, ekzekutoni programin dhe rezultati do të jetë si në
figurën e mëposhtme.
168
PROGRAMIMI DHE ALGORITMIKA
.. ..
Funksioni scanf
Funksioni scanf shërben për të marrë apo lexuar të dhëna nga tastiera. Ky funksion ka sintaksë të ngjashme
me funksionin printf. Me ndryshimin se variabli ku do të ruhet e dhëna, duhet të paraprihet nga shenja &,
e cila shërben për të përcaktuar adresën e variablit. Pra, vlera që do të marrim nga tastiera, do të ruhet
në adresën e variablit. Për të ilustruar përdorimin e funksionit scanf ndërtojmë një program që merr nga
përdoruesi moshën e tij dhe e afishon atë.
Në fillim deklarojmë një variabël, i cili quhet mosha dhe
është numër i plotë i tipit int.
I kërkojmë përdoruesit të japin moshën, të cilën e
ruajmë te variabli mosha.
Më pas afishojmë mesazhin e moshës. Pasi të keni
shkruar kodin, ruajeni, ekzekutojeni dhe, nëse shkruani
22, rezultati do të jetë si në figurën e mëposhtme:
Jepni moshën : 22
Ju jeni 22 vjec.
Process exited after 2.706 seconds with return value 0
Press any key to continue . . .
Aftësi që zhvillohen
Nxënësi/ja: aftësohet në ndërtimin e programeve në gjuhën C, të cilat kërkojnë marrjen e të dhënave nga
përdoruesi dhe afishimin e rezultatit në ekran.
Kontroll njohurish
1. Ndërtoni një program që merr dy numra a dhe b nga përdoruesi dhe afishon shumën, diferencën,
herësin dhe prodhimin e tyre.
2. Shkruani një program që lexon tre numra nga tastiera dhe gjen shumën, prodhimin, mesataren dhe
shumën e katrorëve të tyre.
3. Ndërtoni një program që merr katër nota për katër lëndë të ndryshme nga përdoruesi dhe afishon
mesataren e tyre.
4. Të ndërtohet një program i cili të llogarisë dhe afishojë në ekran perimetrin dhe sipërfaqen e
drejtkëndëshit kur jepen dy brinjët e tij a dhe b.
5. Shkruani një program, që shkëmben vlerat e dy variablave të dhënë A dhe B.
6. Jepet funksioni y=x2 + 3x -4. Shkruani programin që afishon në ekran vlerën e y-it, pasi lexon nga
përdoruesi vlerën e x-it.
169
4.16PROGRAMIMI DHE ALGORITMIKA Strukturat e kontrollit
Nxënësi/ja: Situatë if. . . else
• vlerëson rëndësinë e strukturave Programet e trajtuara deri tani
të kontrollit; kanë ndjekur një rrjedhë sekuenciale të ekzekutimit të
instruksioneve. Shpeshherë kërkohet që të ndryshohet kjo
• përdor strukturat e kontrollit rrjedhë në varësi të plotësimit ose jo të kushteve.
if, if...else, if else if...else.
Fjalët kyç: Në një strukturë kontrolli ekzistojnë listë_instruksionesh, të cilat,
stuktura kontrolli, if, if...else, if else për disa vlera të të dhënave hyrëse, nuk do të kryhen asnjëherë.
if...else, bllok instruksionesh. Dy llojet e strukturave të kontrollit që do të trajtohen në këtë temë
janë if dhe if...else. Te instruksioni if, nëse kushti është i vërtetë, do
të ekzekutohet lista e instruksioneve dhe në të kundërt, jo. Te instruksioni if...else, nëse kushti është i vërtetë,
do të ekzekutohet listë_instruksionesh, që vjen pas instruksionit if dhe jo listë_instruksionesh, që vjen pas else. E
kundërta ndodh kur kushti nuk është i vërtetë.
Shprehja if
Forma më e thjeshtë e strukturës së kontrollit është shprehja if. Shprehja if përdoret për të marrë vendime
në program. Një nga format më të thjeshta të saj është:
if (kushti)
listë_instruksionesh;
ku listë_instruksionesh i referohet një instruksioni të vetëm apo një blloku instruksionesh. Bllok instruksionesh
është një bashkësi intruksionesh, ku secili prej instruksioneve përbërëse mbaron me ; dhe e gjithë bashkësia
përfshihet midis kllapave { }.
Pjesa kushti nuk duhet të mbarojë me pikëpresje, sepse kushti dhe listë_instruksionesh duhet të vendosen
së bashku si një shprehje e vetme. Komanda thotë që, nëse kushti është i vërtetë (true, jozero), atëherë do
të ekzekutohet listë_instruksionesh. Nëse kushti nuk është i vërtetë, atëherë listë_instruksionesh nuk do të
ekzekutohet dhe programi do të vazhdojë me instruksionet e tjera në vijim.
Paraqitja e if me bllokskemë është:
Shembull
Shprehja #include<stdio.h>
e mëparshme
int main()
Kushti I gabuar { int numri;
printf (“Lexoni një numër\n”);
I vërtetë scanf (“%d”, &numri);
if (numri<0)
listë_instruksionesh numri=-numri;
printf (“Vlera absolute e numrit që lexuat është %d ”, numri);
return 0;
}
Programi i mësipërm lexon një numër nga tastiera dhe kontrollon nëse ai është më i vogël se zero. Nëse po, atëherë
ekzekutohet shprehja në vijim, e cila e bën negative vlerën e numrit të lexuar. Nëse vlera e numrit nuk është më e
vogël se zero, kjo shprehje nuk ekzekutohet. Programi do të afishojë vlerën absolute të numrit që lexuat.
170
PROGRAMIMI DHE ALGORITMIKA
Shprehja if...else
Sintaksa e saj është:
if (kushti)
listë_instruksionesh1;
else
listë_instruksionesh2;
If...else është një zgjerim i formës më të përgjithshme të shprehjes if. Nëse kushti është i vërtetë,
atëherë ekzekutohet listë_instruksionesh1, përndryshe ekzekutohet listë_instruksionesh2. Në çfarëdo rasti
ekzekutohet ose listë_instruksionesh1 ose listë_instruksionesh2, por jo të dyja njëkohësisht. Paraqitja me
bllokskemë do të ishte:
Shembull: Shprehja
#include<stdio.h> e mëparshme
#include<conio.h>
int main() Kushti I gabuar
{
int numri; I vërtetë listë_instruksionesh2
printf (“Lexoni një numër\n”);
scanf (“%d”, &numri); listë_instruksionesh1
if (numri<0)
printf (“Numri është negativ"); .. ..
else .. ..
printf (“Numri është pozitiv");
getch();
return 0;
}
Një nga ekzekutimet e mundshme të programit është:
Shprehja if else if … else
Sintaksa e saj është:
if (kushti1)
listë_instruksionesh1;
else if (kushti2)
listë_instruksionesh2;
…
else if (kushtin)
listë_instruksionesh;
else
listë_instruksionesh;
shprehja-x
171
PROGRAMIMI DHE ALGORITMIKA
Kushtet vlerësohen që nga kushti 1 e në vazhdim deri te kushti n. Sapo gjendet një kusht i vërtetë, lista e
instruksioneve të tij do të ekzekutohet dhe kontrolli transferohet te shprehja-x. Në qoftë se të gjitha kushtet
janë të gabuara, do të ekzekutohet dega else, e cila përmban listë_instruksionesh.
Shembull 1
Të ndërtohet një program që lexon dy numra dhe afishon në ekran më të madhin prej tyre.
#include<stdio.h>
int main()
{ int nr1, nr2;
printf (“Lexo numrin e parë\n”);
scanf (“%d”, &nr1);
printf (“Lexo numrin e dytë\n”);
scanf (“%d”, &nr2);
if (nr1<nr2)
printf (“Numri %d është më i vogël sesa numri %d”, nr1, nr2);
else if (nr1>nr2)
printf (“Numri %d është më i vogël sesa numri %d”, nr2, nr1);
else
printf (“Numri %d është i barabartë me numrin %d”, nr1, nr2);
return 0;
}
Shembull 2
Të ndërtohet një program që do të afishojë #include<stdio.h>
int main()
mesazhet e mëposhtme sipas moshës së njeriut. { int mosha;
mosha<7 Fëmijë parashkollor printf (“Lexoni moshën\n”);
scanf (“%d”, &mosha);
7 mosha<18 Nxënës shkolle
if (mosha<7)
18 mosha<65 I aftë për punë printf (“Fëmijë parashkollor”);
mosha 65 Pensionist else if (mosha >=7 && mosha<18)
printf (“Nxënës shkolle”);
else if (mosha>=18 && mosha<65)
printf (“I aftë për punë”);
else
printf (“Pensionist”);
return 0;
}
172
PROGRAMIMI DHE ALGORITMIKA
Aftësi që zhvillohen
Nxënësi/ja: aftësohet në përdorimin e strukturave të kontrollit për zgjidhjen e problemeve të
ndryshme në gjuhën C.
Kontroll njohurish
1. Shkruani një program që lexon tre numra nga tastiera dhe afishon minimumin e tyre.
2. Jepet programi në gjuhën C. Tregoni çfarë afishon ai.
3. Jepet funksioni: {(x + 1)2 + x - 2,
y = 8x + 5, për x ≤ 0
x2 - 5x për 0 < x ≤ 2
për x > 2
Shkruani një program që lexon një vlerë të x-it dhe llogarit vlerën e duhur të y-it.
4. Duke supozuar që n është 20, cili do të jetë afishimi i fragmentit të kodit të mëposhtëm pas
ekzekutimit? Çfarë vini re?
if (n >= 0)
if (n < 10)
printf (“n është i vogël \ n”);
else
printf ( “n është negativ \ n”);
173
4.17PROGRAMIMI DHE ALGORITMIKA Strukturat ciklike. Cikli for
Nxënësi/ja: Deklarimi dhe inicializimi Ndryshim variabli Kushti
• koncepton kur duhet të përdoren Situatë for (int i = 0; i<10; i++){
strukturat ciklike;
Kërkohet që të përsëritet një // Shprehjet që do të ekzekutohen
• p ërdor sintaksën e ciklit for; }
• shkruan programe në gjuhën C kod i caktuar në varësi të problemit. Për shembull, nëse
duam të lexojmë 100 numra në mënyrë të njëpasnjëshme
duke përdorur ciklin for. nga tastiera dhe të afishojmë shumën e tyre. Cila është
zgjidhja e këtij problemi në gjuhën C?
Fjalët kyç: Strukturat ciklike
Strukturat ciklike janë struktura në të cilat kemi përsëritjen e
struktura ciklike, cikli for. një apo më shumë hapave (instruksionesh). Të gjithë këta hapa
formojnë një cikël. Në trupin e ciklit duhet të kemi të paktën një
instruksion, i cili përcakton kushtin e daljes nga ky cikël. Nëse ky kusht plotësohet, atëherë kemi daljen nga
cikli. Në këtë temë do të trajtohet cikli for, ndërsa në temën pasardhëse do të trajtohet cikli while dhe do while.
Cikli for
Cikli for ka për qëllim të përsërisë në mënyrë të vazhdueshme, një numër të caktuar herësh, trupin e ciklit
(listë_instruksionesh). Cikli for përdoret në ato raste kur njihet numri i përsëritjeve.
Sintaksa e tij është:
for (inicializim_variabli; kushti; ndryshim_variabli)
{listë_instruksionesh;}
Pjesa inicializim_variabli na lejon ose të deklarojmë një variabël dhe t’i japim atij një vlerë ose t’i japim
një vlerë një variabli, që tashmë ekziston. Kjo pjesë ekzekutohet vetëm një herë në fillim të ciklit. Më
pas ekzekutohet kushti, i cili vlerësohet true ose false. Nëse është i vërtetë (true), cikli do të ekzekutojë
listë_instruksionesh. Pjesa e tretë ndryshim_variabli ekzekutohet çdo herë pas trupit të ciklit (listë_
instruksionesh). Aty variabli mund të rritet, zvogëlohet me 1 ose me ndonjë vlerë tjetër dhe më pas testohet
përsëri kushti. Kur kushti bëhet i gabuar (false), cikli ndalon dhe programi vazhdon me shprehjet që janë
menjëherë pas trupit të ciklit for.
Shembull:
Të gjendet shuma e pesë numrave të plotë që lexohen nga tastiera.
#include<stdio.h>
#include<conio.h>
main()
{ int shuma, nr, i;
shuma = 0;
printf ("Lexo numrat: \n");
for (i = 1; i <= 5; ++i)
{ scanf (“%d”, &nr);
shuma += nr;
}
printf ("Shuma e pesë numrave që lexuat është %d ", shuma);
getch();
return 0;
}
174
PROGRAMIMI DHE ALGORITMIKA
Ky program i kërkon përdoruesit të shtypë pesë numra nga tastiera dhe gjen shumën e tyre. Më poshtë
jepet rezultati i ekzekutimit të programit për numrat e lexuar: 10, 20, 15, 75 dhe 50.
.. .. .. ..
Në ciklin for mund të përfshijmë disa shprehje në secilën prej fushave të tij, duke i ndarë ato me presje nga
njëra-tjetra. Për shembull:
for (i=0, j=100; i<10; i=i+1, j=j-10)
kemi dy variabla i dhe j, të cilat inicializohen përkatësisht me 0 dhe 100 para se cikli të fillojë. Çdoherë pas
ekzekutimit të trupit të ciklit, vlera e i-së do të rritet me 1, ndërsa ajo e j-së do të zvogëlohet me 10.
Mirëpo, sikurse kërkesat mund të na çojnë në më shumë shprehje në një fushë të caktuar të for-it, ato mund
të na çojnë edhe në mungesën e një ose më shumë fushave të for-it. Kjo bëhet thjesht duke mos e hequr
fushën e dëshiruar, por duke e shenjuar vendin e saj me pikëpresje (;). Fusha me inicializim mund të lihet
bosh, në këtë rast duhet të vendoset; për shembull:
for (; j!=100;++j)
Ciklet for mund të jenë edhe të ndërfutur me njëri-tjetrin, domethënë mund të kemi një cikël brenda një tjetri.
Aftësi që zhvillohen
Nxënësi/ja: aftësohet në përdorimin e strukturave ciklike, në zgjidhjen e problemeve të ndryshme në
gjuhën C duke përdorur ciklin for.
Kontroll njohurish
1. Cila është vlera përfundimtare e x-it kur ekzekutohet kodi:
int x; for( x=0; x<10; x++)
2. Shkruani një program që gjen shumën e numrave midis 10 dhe 30 për 15 numra që lexohen nga
tastiera.
3. Shkruani një program që lexon nga tastiera 10 numra dhe gjen se sa numra pozitivë, negativë dhe
zero janë lexuar.
4. Gjeni çfarë afishon fragmenti i kodit të mëposhtëm:
int i, j ;
for (i = 1 ; i < 5 ; i++)
{ for (j = 0 ; j < 5 ; j++)
{ if ( (i + j) % 2 == 0 )
{printf (“X”) ; }
else {
printf (“O”) ;
}
} printf (“\n”) ;
}
175
4.18PROGRAMIMI DHE ALGORITMIKA Ciklet while dhe do while
Nxënësi/ja: Situatë
• prezantohet me rëndësinë e Shpeshherë kërkohet që të përsëritet një kod i caktuar për
strukturave ciklike while dhe do sa kohë që kushti është i vërtetë. Për shembull, nëse duam
while; të afishojmë të gjithë numrat nga 1 deri kur numri të jetë më
i vogël se 5. Cila është sintaksa dhe si mund të ndërtohet ky
• shkruan program në gjuhën C program?
duke përdorur ciklet while dhe do
while. Cikli while
Fjalët kyç: Cikli while është një strukturë tjetër e gjuhës C. Ai ka për qëllim të
stuktura ciklike, while, do while. përsërisë një bashkësi instruksionesh për aq kohë sa kushti është
i vërtetë. Forma e përgjithshme e tij është:
while (kushti)
{
trupi_i_ciklit; //lista e instruksioneve
}
Këtu vlerësohet kushti dhe, nëse ai është i vërtetë, atëherë ekzekutohet trupi i ciklit. Pas ekzekutimit të
trupit, kushti vlerësohet përsëri dhe, nëse është i vërtetë, do të ekzekutohet trupi. Ky proces vazhdon derisa
kushti bëhet i gabuar dhe kontrolli transferohet jashtë ciklit. Në dalje, programi vazhdon me shprehjet që
janë menjëherë pas tij. Trupi i ciklit mund të ketë një ose disa instruksione dhe kllapat { } nevojiten vetëm
nëse ai përmban dy ose më shumë të tilla. Sikurse for, edhe while mund të jetë i pafundëm, nëse kushti
është gjithmonë i vërtetë. Cikli for është ekuivalent me ciklin while.
Paraqitja e ciklit while me bllokskemë është:
Shembull 1
Të ndërtohet një program që afishon numrat nga 1 deri në 12.
Fillim listtëë__ #include<stdio.h>
ininssttrukssiioonneesshh22 #include<conio.h>
int main()
{ int numri;
Kushti I vërtetë Ekzekuto numri=1;
instruksionet printf ("Ky program afishon\n");
while (numri<=12)
I gabuar {
printf (“%d ”,numri);
Ndalo numri++;
}
getch();
return 0;
}
176
PROGRAMIMI DHE ALGORITMIKA
Rezultati i ekzekutimit të këtij programi do të jetë:
Cikli do while
Cikli do while është një cikël i ngjashëm me while, por në ndryshim nga ai, kushti i tij vlerësohet në fund të
ciklit pas ekzekutimit të trupit. Përderisa trupi i ciklit ekzekutohet fillimisht dhe më pas vlerësohet kushti,
jemi të sigurt që ai ekzekutohet të paktën një herë, në ndryshim nga while, ku trupi i ciklit mund të mos
ekzekutohet asnjëherë. Sintaksa e ciklit do while është:
do
{
trupi_i_ciklit; //lista e instruksioneve
}
while (kushti);
Këtu ekzekutohet trupi_i_ciklit e më pas vlerësohet kushti. Nëse kushti është i vërtetë, atëherë trupi i ciklit
ekzekutohet përsëri. Ky proces vazhdon derisa kushti bëhet i gabuar.
Shembull:
Përdoruesi duhet të udhëzohet që të shtypë germën Y ose N. Ai mund të shtypë çfarëdolloj karakteri tjetër
përveç tyre. Në raste të tilla, mesazhi duhet të shfaqet përsëri dhe përdoruesi duhet të lejohet të shtypë
njërën nga dy germat. Programi i mëposhtëm jep zgjidhjen e kërkuar.
#include<stdio.h> // përfshin skedarin stdio.h në programin tonë
#include <conio.h>
int main() // fillimi i programit
{char c; // deklarimi i karakterit
// fillimi i ciklit do
do // mesazhi për përdoruesin
{printf (“Lexo Y ose N\n”); // lexon karakterin i cili ruhet te variabli c
scanf (“%c”, &c);
} // kushti i mbarimit të ciklit
while (c!='Y' && c != 'N'); // kontrollon nëse është futur karakteri y
if (c=='Y') // mesazhi për përdoruesin
printf ("Ju lexuat Y");
else //mbarimi i programit
printf ("Ju lexuat N");
getch ();
return 0;
}
177
PROGRAMIMI DHE ALGORITMIKA
Dy nga afishimet e mundshme të këtij programi janë:
Shembull 2
Të ndërtohet një program që afishon Rezultati i ekzekutimit të këtij programi do të jetë:
numrat nga 12 deri në 1.
Siç duket edhe nga programi, pas fjalës kyç do është
#include<stdio.h> vendosur një bllok instruksionesh, ku instruksioni i parë
#include<conio.h> afishon vlerën aktuale të variablit numri dhe një hapësirë,
int main() ndërsa i dyti e zvogëlon me 1 vlerën e tij. Te kushti numri>0
{ int numri; tregohet që këto veprime do të kryhen derisa variabli të
jetë pozitiv. Në momentin që ai bëhet zero, dilet nga cikli
numri=12; do. Kujtojmë që pas shprehjes while të këtij cikli vendoset
do gjithmonë pikëpresje.
{printf (“%d ”, numri);
numri--;
}while (numri>0);
getch();
return 0;
}
Aftësi që zhvillohen
Nxënësi/ja: shkruan programe në gjuhën C duke përdorur ciklet while dhe do while.
Kontroll njohurish
1. Kur ekzekutohet blloku i instruksioneve që janë në vijim të ciklit while (x<100):
a. kur x është më i vogël sesa 100; b. kur x është më i madh sesa 100;
c. kur x është i barabartë me 100; d. kurdoherë?
2. Shkruani një program që lexon N numra nga tastiera dhe llogarit shumën dhe mesataren e tyre.
3. Shkruani një program që lexon N numra nga tastiera dhe afishon minimumin e tyre.
4. Shkruani një program që llogarit të gjithë numrat e Fibonaccit, të cilët janë më të vegjël se 100.
Sekuenca e numrave të Fibonaccit është: 0 1 1 2 3 5 8 13 21...
Dy termat e parë janë 0 dhe 1. Çdo term tjetër përftohet nga shuma e dy termave paraardhës. Në
përgjithësi, do të kemi: f n = f n-1 + f n-2
5. Sa herë është e sigurt që një cikël do while do të ekzekutohet?
178
4.19PROGRAMIMI DHE ALGORITMIKA
Ushtrime me ciklet në gjuhën C (2 orë)
1. Jepet programi i mëposhtëm në gjuhën C. Shpjegojeni atë dhe gjeni se çfarë realizon.
2. Shkruani daljen e fragmentit të kodit të mëposhtëm:
int i, j, k;
i = j = 1;
k = 5;
while ( (i+j) < k)
{ i++;
j++;
k++;
printf (“%d %d %d\n”, i, j, k);
}
3. Kodi i ushtrimit 2 të shkruhet me ciklin do while.
4. Ciklet gjejnë një përdorim të madh në gjetjen e shumave të serive të ndryshme numerike.
Shembull:
Të shkruhet një program që gjen shumën e n termave të serisë numerike:
1+3+5+7+…
Gjithmonë, para se të shkruajmë një program, duhet të vërejmë nëse ka ndonjë rregull me të cilin përftohen
termat e vargut. Në rastin tonë shohim që termi aktual nga ai pasardhës ndryshon me 2, termi i parë është
1 dhe në total do mbledhim n terma.
179
PROGRAMIMI DHE ALGORITMIKA
Zgjidhje:
#include<stdio.h>
#include<conio.h>
int main()
{
int termi, i, n, shuma;
printf (“Jep numrin e termave që do të mbledhësh:”);
scanf (“%d”, &n);
shuma=0;
termi=1;
for (i=1;i<=n;i++)
{ shuma=shuma+termi;
termi+=2;
}
printf (“Shuma e %d termave të parë të serisë numerike është %d”, n, shuma);
getch();
return 0;
}
Rezultati i ekzekutimit të këtij programi për n=5 është:
.. .. .. .. .. .. .. .. ..
5. Për secilën nga vargjet e mëposhtme shkruani një program që gjen shumën e N termave të serisë
numerike.
a. S = 2 + 5 + 8 + 11 + …
b. S = 1 – 2 + 3 -4 + 5 - …
c. S = 2 – 4 + 8 – 16 + …
d. S = 3 – 5 + 8 -12 + 17 - …
e. S = 2* 3 – 5*7 +12*15 - …
180
Tabelat njëdimensionale 4.20PROGRAMIMI DHE ALGORITMIKA
Nxënësi/ja: Situatë
Kërkohen të ruhen 100 numra
• koncepton tabelën njëdimen- në mënyrë të njëpasnjëshme
sionale si një bashkësi elementesh; në kujtesë dhe të afishohet mesatarja e tyre. Si do të ruhen
të dhënat dhe si do të aksesohen elementet?
• deklaron tabelën njëdimensionale;
• inicializon vlerat në tabelën Koncepti i vektorit dhe deklarimi i tij
njëdimensionale; Vektori (ose tabela njëdimensionale) është një bashkësi elementesh
• akseson vlerat e tabelës
të të njëjtit tip, të vendosura në mënyrë të njëpasnjëshme në
njëdimensionale.
kujtesë. Secili prej tyre mund të aksesohet me anë të një indeksi
Fjalët kyç:
në lidhje me emrin e vektorit.
tabela njëdimensionale,
inicializim, aksesim, elemente. Ne mund të ruajmë pesë vlera të tipit int në një tabelë pa qenë e
nevojshme të deklarojmë 5 variabla të ndryshme. P.sh., int vlera
[5] do të paraqitej skematikisht:
0 1 2 3 4
vlera
ku çdo kuti bosh paraqet një element të tabelës. Elementet numërohen nga 0 deri në 4, sepse indeksi i parë
i tabelës është gjithmonë 0.
Çdo vektor duhet të deklarohet para se të përdoret. Sintaksa e deklarimit është:
tipi emër_vektori [elementet];
ku tipi është një tip i vlefshëm, si: int, float etj., që tregon se çfarë të dhënash do të ruhen në vektor, emër_vektori
është identifikuesi që do të përdorim për vektorin dhe elementet, tregon numrin maksimal të elementeve që
do të mbajë ai. Kjo fushë vendoset gjithmonë në kllapa katrore [ ] dhe duhet të jetë një vlerë konstante.
Shembull:
int pesha [10];
Inicializimi i vektorëve
Kur deklarojmë një vektor lokal, ai do të ketë vlera të papërcaktuara nëse nuk inicializohet ose derisa të
ruajmë vlera në të. Nëse e deklarojmë global, elementet e tij do të inicializohen me 0.
Në të dyja rastet kemi mundësi ta inicializojmë vektorin në momentin e deklarimit, duke i dhënë vlerë çdo
elementi të tij brenda kllapave gjarpërushe { }.
Shembull:
int A[5] = {2,-8,61,899,-56};
Ky deklarim do të krijojë tabelën: 3
0 1 2 4
A 2 -8 61 899 -56
Kur inicializojmë një vektor në momentin e deklarimit, mund ta lëmë bosh fushën midis [ ]. Në këtë rast,
madhësia e tabelës është sa numri i vlerave që ndodhen midis kllapave { }.
int A[ ] = {2,-8,61,899,-56}; vektori A e ka madhësinë 5.
181
PROGRAMIMI DHE ALGORITMIKA
Aksesimi i vlerave të vektorit
Vlerat e çdo elementi të vektorit i aksesojmë në mënyrë individuale njëlloj si variablat, duke bërë të mundur
leximin dhe modifikimin e tyre. Mënyra për ta aksesuar elementin është:
emër_vektori [indeksi]
për vektorin A[5] do të kishim
A[0] A[1] A[2] A[3] A[4]
A2 -8
61 899 -56
Për të ruajtur për shembull vlerën 88 në elementin e tretë të A-së do të shkruajmë:
A[2]=88; vektori do të kishte këto vlera:
A[0] A[1] A[2] A[3] A[4]
A2 -8
88 899 -56
Për t’i dhënë vlerë variablit b, të barabartë me elementin e dytë të tabelës A, shkruajmë: b=A[1];
Elementi i parë i vektorit është A[0], ndërsa i fundit është A[4]. Kujdes, nëse shkruajmë A[5], tentojmë të kapim
elementin e gjashtë të vektorit, i cili mban deri në 5 elemente. Pra kemi kaluar madhësinë e vektorit dhe një element
i tillë nuk ekziston. Kjo gjë nuk shkakton gabim kompilimi, por gabim në kohën e ekzekutimit.
Si përfundim, vektori ka emrin e tij, ka madhësinë që është numri i elementeve që mund të mbajë vektori, dhe tipin,
që tregon se çfarë vlerash do të ruhen në të. Për të aksesuar elementet e vektorit, na duhet të paktën një indeks.
Shembull 1
Jepet vektori V me 5 elemente. Të gjendet shuma dhe mesatarja e elementeve të tij.
#include <stdio.h> Që nga përshkrimi i problemit dallojmë që vektori e ka
#include <conio.h> emrin V dhe mban të shumtën 5 elemente. V-në e kemi
int main () inicializuar në momentin e deklarimit. Variabli i do të luajë
{ rolin e indeksit për të aksesuar elementet e tabelës. Kur i-ja
int V[] = {12,5, 7, 13, 17}; bëhet 5, dilet nga cikli dhe afishohet shuma e gjetur. Jemi
int i, shuma; të sigurt që kemi gjetur shumën e elementeve të vektorit,
float mesatarja; vetëm pasi kemi lëvizur në vektor nga fillimi në fund. Nga
shuma=0; matematika dihet që mesatarja është shuma e elementeve/
for ( i=0 ; i<5 ; i++ ) numër_elementesh. Kjo formulë është zbatuar edhe këtu.
{ Kujdes! Te llogaritja e mesatares, shuma dhe 5 janë numra
shuma += V[i]; të plotë, kështu që rezultati i tyre del po numër i plotë. Që
} të dalë numër me presje, është përdorur konvertimi i tipit,
printf (“Shuma është %d \n”, shuma); domethënë, shuma do të konvertohet në float.
mesatarja=(float)shuma/5; Afshimi i ekzekutimit të këtij programi është:
printf (“Mesatarja është %f”, .. ..
mesatarja); .. ..
getch();
return 0;
}
Nëse nuk do të përdorej float, mesatarja do të dilte 10.
182
PROGRAMIMI DHE ALGORITMIKA
Shembull 2
Jepet vektori V me N elemente. Të lexohen elementet e tij nga tastiera dhe të gjendet elementi më i madh
i tij.
#include <stdio.h> Në këtë shembull, madhësia e tabelës është
#include <conio.h> deklaruar konstante. Vektori është mbushur
int main () me vlera që futen nga përdoruesi në for-in e
{ parë. Kemi marrë një variabël max, të cilin e
kemi inicializuar me një vlerë shumë të vogël.
const int N=5; Çdo element i vektorit krahasohet me këtë vlerë
int V[N],i, max; dhe nëse është më i madh, atëherë do t’i jepet
printf ("Fut elementet e vektorit:”) variablit max. Pasi kemi kontrolluar të gjithë
for ( i=0 ; i<N ; i++ ) tabelën, jemi të sigurt që te max është vlera më
{ e madhe e elementeve të saj.
scanf (“%d”, &V[i]); Një nga afishimet e mundshme të ekzekutimit
} të këtij programi është:
max=-10000;
for ( i=0 ; i<N ; i++ ) .. .. ..
{
if (V[i]>max) Kur përdoruesi do vektor me më shumë vlera,
max=V[i]; mjafton të ndryshojë vlerën e konstantes N nga
} 5, në vlerën e dëshiruar.
printf (“Elementi më i madh është %d”,
max);
getch();
return 0;
}
Aftësi që zhvillohen
Nxënësi/ja: aftësohet në ruajtjen, aksesimin dhe afishimin e elementeve të ndryshme në një tabelë
njëdimensionale.
Kontroll njohurish
1. Çfarë është vektori dhe si deklarohet ai?
2. Jepet vektori V me N elemente. Të gjendet elementi më i vogël i tij.
3. Jepet vektori V me N elemente. Të gjendet sa elemente pozitive ka ai.
4. Jepet vektori V me N elemente. Të gjendet shuma e elementeve pozitive të tij.
183
4.21PROGRAMIMI DHE ALGORITMIKA Ushtrime për përsëritjen e tematikës
1. Ndërtoni algoritmin me bllokskemë dhe pseudokod, që të llogarisë dhe të afishojë sipërfaqen dhe
perimetrin e rrethit me rreze të dhënë r.
2. Jepen dy variabla x dhe y. Të shkëmbehen vlerat e tyre pa përdorur një variabël të tretë.
3. Ndërtoni algoritmin me bllokskemë dhe pseudokod, që të llogarisë dhe të afishojë shumën e dy
numrave të dhënë a dhe b, kur ata janë të dy pozitivë.
4. Ndërtoni algoritmin me bllokskemë dhe pseudokod, që të llogarisë dhe të afishojë shumën N të
termave të serisë numerike:
S = 1*2 + 3*4 + 5*6 + …
5. Zgjidhni alternativën e saktë në pyetjet e mëposhtme:
a. Cili karakter përdoret për të treguar fundin e rreshtave në gjuhën C:
A) .
B) ;
C) :
D) ‘
b. Cili nuk është një tip i saktë variabli:
A) float
B) double
C) int
D) real
c. Në cilën librari standarde ndodhet funksioni printf ():
A) stdlib.h
B) stdio.h
C) stdout.h
D) stdoutput.h
184
PROGRAMIMI DHE ALGORITMIKA
d. Cili format përdoret për të printuar një karakter me printf()?
A) %char
B) %s
C) %c
D) %lc
e. Çfarë do të afishojë programi i mëposhtëm?
#include<stdio.h>
int main()
{
int T[5], i=-1;
while(i<5)
T[i]=++i;
for(i=0; i<5; i++)
printf("%d, ", T[i]);
return 0;
}
A) 1,2,3,4,5
B) -1,0,1,2,3,4
C) 0,1,2,3,4
D) 0,-1,-2,-3,-4
6. Jepet vektori V[N], ku ruhen notat e nxënësve në një provim të lëndës TIK. Shkruani programin në
gjuhën C, që gjen sa herë është marrë nota 10.
7. Për secilën nga vargjet e mëposhtme shkruani një program që gjen shumën e N termave të serisë
numerike. Duhet të përdorni konvertimin e tipit si float, në rastet kur termi i serisë nuk është numër i
plotë.
a. S = 1/(2*3) - 4/(5*6) + …
b. S = 3/4 – 5/7 + 7/10 – 9/13 + …
c. S = 1*3/2 – 2*5/4 +
185
JAVA
186
JAVA
TEMATIKA V
JAVA
Në këtë tematikë, nxënësi/ja:
• prezantohet me evolucionin e gjuhës Java dhe
karakteristikat e kësaj gjuhe;
• analizon karakteristikat e gjuhës Java;
• liston avantazhet e përdorimit të gjuhës Java;
• pajiset me njohuritë e zhvillimit të programeve në Java;
• evidenton ndryshimet midis përdorimit të Java SE,
Java EE dhe Java ME;
• analizon mjediset e zhvillimit;
• koncepton klasat dhe objektet;
• kupton rëndësinë e programimit të orientuar drejt
objekteve;
• vlerëson mekanizmat për të thjeshtuar programimin;
• prezantohet me sintaksën e gjuhës Java;
• afishon shprehje të ndryshme në Java;
• afishon rezultatin e veprimeve matematikore;
• koncepton hapat e zhvillimit të një programi në Java;
• krijon projekte dhe klasa në Java;
• kompilon dhe ekzekuton klasat në Java;
• shfaq rezultatin në console;
• koncepton applet-et dhe mëson strukturën e tyre;
• kompilon dhe ekzekuton një applet;
• ekzekuton programe të ndryshme në kompjuter;
• afishon mesazhe të ndryshme duke përdorur gjuhën
Java;
• afishon rezultatin e veprimeve të ndryshme matema-
tikore;
• koncepton applet-et;
• asimilon strukturën e një applet-i;
• aftësohet në procesin e kompilimit dhe të ekzekutimit
të një applet-i.
5.1JAVA Gjuha e programimit Java
dhe karakteristikat e saj
Nxënësi/ja: Situatë
• prezantohet me evolucionin e Java është një gjuhë
gjuhës Java; programimi, e cila
përdoret për të zhvilluar aplikacione në kompjuter, telefon
• analizon karakteristikat e gjuhës etj. Cilat janë karakteristikat e kësaj gjuhe që e bëjnë atë të
Java; dallueshme nga të gjitha gjuhët e tjera?
• liston avantazhet e përdorimit të Historiku dhe evolucioni i gjuhës Java
gjuhës Java.
Java është zhvilluar nga një ekip i drejtuar nga Xhejms Gosling
Fjalët kyç: (James Gosling) në Sun Microsystems. Sun Microsystems është
blerë nga Oracle në vitin 2010. Oracle është një nga kompanitë
gjuhë programimi, Java, Bytecode, më të fuqishme, e cila ofron aplikacione, shërbime dhe sisteme
Makina Virtuale Java, thread. të ndryshme inxhinierike.
Java, e cila fillimisht është quajtur Oak, është dizenjuar në vitin
1991 për t’u përdorur në çipet e aplikacioneve të konsumatorëve
elektronikë. Në vitin 1995, ajo është riemërtuar Java dhe është
ridizenjuar për të zhvilluar aplikacione web. Në mënyrë që të
kuptohet gjuha e programimit Java, duhet të kuptohet historiku
dhe evolucioni i saj. Java është mjaft e lidhur me mjedisin e
ekzekutimit online të programeve. Ekziston një lidhje midis
gjuhës Java dhe gjuhës C++, e cila është gjuhë programimi
pasardhëse e gjuhës C. Shumica e karaktereve që përdor gjuha
Java trashëgohet nga këto dy gjuhë.
Java është një gjuhë programimi e fuqishme për zhvillimin e
programeve në pajisjet: mobile, kompjutera desktop dhe në
servera.
Karakteristikat kryesore të programit Java
Java është kthyer në një gjuhë programimi mjaft popullore.
Rritja e saj e shpejtë dhe pranimi nga përdoruesit përkon me
karakteristikat e saj të dizenjimit, veçanërisht me specifikën
që mund të shkruhet si program vetëm një herë dhe mund të
188
JAVA
ekzekutohet kudo.
Java është gjuha e parë që i ka lejuar zhvilluesit të krijojnë programe të përshtatshme për Internetin.
Megjithëse karakteristikat kryesore të gjuhës Java janë aftësia për t’u përshtatur dhe siguria që ajo ofron,
ekzistojnë dhe faktorë të tjerë të cilët kanë luajtur një rol të rëndësishëm në modelimin e formës së saj. Më
poshtë do të analizojmë karakteristikat e gjuhës java.
• Java është një gjuhë e thjeshtë
Asnjë nga gjuhët e programimit nuk është e thjeshtë, por Java është më e thjeshtë se gjuha e programimit
C++, e cila është e drejtuar drejt objekteve. Gjuha C++ ka qenë dominuese përpara gjuhës Java. Java është
dizenjuar për të qenë e thjeshtë, për t’u mësuar dhe për t’u përdorur në mënyrë efektive. Nëse një person
ka pak eksperiencë programimi, gjuha Java nuk është e vështirë për t’u përdorur. Gjuha Java është akoma
më e thjeshtë, nëse dihen konceptet bazë të programimit të orientuar drejt objekteve, i cili shpjegohet më
poshtë. Java është pjesërisht e modeluar në C++ dhe është e orientuar drejt arritjes së thjeshtësisë dhe
përmirësimit. Gjuha Java është relativisht e thjeshtë, por ajo përmban librari të mëdha, të cilat kërkohen
që të përdoren për të shkruar programe në Java. Ajo ka paketa librarie për: grafikën, dizenjimin e ndërfaqes
së përdoruesit, paraqitjen e zërit, ruajtjen e të dhënave në një bazë të dhënash dhe shumë librari të tjera.
Sintaksa e qartë e saj i ka bërë programet Java të lehta për t’u shkruar dhe për t’u lexuar.
• Java është e drejtuar drejt objekteve
Megjithëse gjuha Java është ndikuar Objekte Klasa
nga gjuhët paraardhëse të saj, Java nuk
është e dizenjuar të jetë e ngjashme në
kod me ndonjë gjuhë tjetër. Objekti
i modeleve në Java është i thjeshtë
dhe i lehtë për t’u zgjeruar. Edhe
pse shumë gjuhë të orientuara drejt
objekteve kanë filluar fillimisht si gjuhë
proceduriale, Java është dizenjuar që
në fillim për të qenë e drejtuar drejt
objekteve. Programimi i orientuar
drejt objekteve modelon botën reale
në terma të objekteve. Çdo gjë në
botë mund të modelohet si një objekt.
Një rreth është një objekt; një person
është një objekt, e kështu me radhë.
Një program në Java është i orientuar drejt objekteve, sepse programimi në Java është i përqendruar drejt
krijimit të objekteve, manipulimit të objekteve dhe drejt qëllimit që objektet të punojnë së bashku.
Një nga çështjet kryesore në zhvillimin e programeve është si të ripërdorim kodin. Programimi i orientuar
drejt objekteve siguron: fleksibilitet, modularitet, qartësi dhe ripërdorim nëpërmjet enkapsulimit,
trashëgimisë dhe polimorfizmit – të cilët do të shpjegohen në temat pasardhëse. Thjeshtësia dhe sintaksa
e qartë mundëson lehtësi në shkrim dhe lexim të programeve. Programet në Java janë mjaft tërheqëse për
sa i përket hartimit dhe zhvillimit të aplikacioneve.
189
JAVA
• Java është e shpërndarë
Programimi i shpërndarë nënkupton disa kompjutera të cilët punojnë së bashku në një rrjet. Java është e
dizenjuar për ta lehtësuar programimin e shpërndarë. Programi në Java i kompiluar në një makinë mund të
transferohet lehtësisht në një makinë tjetër dhe mund të ekzekutohet në një tjetër makinë.
• Java është e interpretueshme
Për të ekzekutuar programet në Java, është i nevojshëm një interpretues. Programet kompilohen në
Makinën Virtuale në Java, e quajtur bytecode (kodi në bite). Bytecode është një makinë e pavarur dhe
mund të ekzekutohet në çdo makinë që ka një interpretues Java, e cila është pjesë e Makinës Virtuale Java.
Shumica e kompiluesve, duke përfshirë kompiluesit e gjuhës C++, përkthejnë programet nga gjuha e nivelit
të lartë në kodin e makinës. Kodi mund të ekzekutohet vetëm në makinat përkatëse të saj. Për shembull,
nëse një program në C++ kompilohet në Windows, kodi i ekzekutueshëm i gjeneruar nga kompilatori mund
të ekzekutohet vetëm në platformën Windows. Nëpërmjet gjuhës Java, kodi burim mund të kompilohet
vetëm një herë, kurse kodi në bite i gjeneruar nga kompiluesi Java mund të ekzekutohet në çdo platformë
me një interpretues Java.
• Java është e fuqishme
Mjedisi i mbështetur në disa platforma në web rrit fuqinë e një programi, pasi programi mund të ekzekutohet
në disa sisteme. Fuqia nënkupton besueshmëri. Asnjë gjuhë programimi nuk mund të sigurojë besueshmëri
të plotë. Për të fituar besueshmërinë, gjuha Java detyron gjetjen e gabimeve në fillim të zhvillimit të një
programimi. Për shkak se gjuha Java është një gjuhë e cila është e ndjeshme ndaj shkronjave të vogla dhe
të mëdha (case - sensitive) në kohën e shkrimit të një programi, ajo kontrollon kodin në kohën e kompilimit.
Gjithashtu, ajo e kontrollon kodin dhe gjatë kohës së ekzekutimit. Pra, gjuha Java thekson kontrollin më
përpara të gabimeve të mundshme, për shkak se kompilatorët Java mund të evidentojnë probleme, të
cilat, fillimisht, mund të shfaqen në kohën e ekzekutimit në gjuhë të tjera. Java ka eliminuar disa gabime
programimi të cilat gjenden në gjuhë të tjera.
• Java është e bazuar në thread-e
Java është e dizenjuar për të plotësuar kërkesat e botës reale për krijimin e programeve interaktive. Për
të realizuar këtë gjë, Java suporton programim të mbështetur në thread-e, të cilat lejojnë një program të
kryejë disa punë njëkohësisht. Sistemet në Java vijnë me zgjidhje të sofistikuara për sinkronizimin e shumë
proceseve që mundësojnë krijimin e sistemeve interaktive. Shembull i bazuar në thread-e mund të ishte
shkarkimi i videos, ndërkohë që një video luhet. Thread-ed janë veçanërisht të përdorshme në ndërfaqet
grafike të përdoruesve dhe në programimin në rrjet. Për shembull, një përdorues mund të dëgjojë muzikë
ndërkohë që lundron në internet.
• Java është e sigurt
Si një gjuhë programimi e internetit, Java përdoret në një mjedis të shpërndarë dhe në rrjet. Nëse shkarkohet
një applet Java (një program i veçantë) dhe ekzekutohet në kompjuter, kjo nuk do të rrisë mundësinë për
sulme në sistem, për shkak se Java implementon mekanizma të veçantë sigurie për të mbrojtur sistemin nga
sulme të programeve të ndryshme.
190
JAVA
• Java është një arkitekturë neutrale
Java është e interpretueshme. Kjo karakteristikë ka mundësuar që Java të ketë një arkitekturë neutrale
ose të pavarur nga platforma. Nga karakteristikat kryesore që kërkonin të arrinin dizenjuesit e kodit Java
ishin jetëgjatësia dhe përshtatshmëria. Një nga problemet kryesore me të cilin janë përballur programuesit,
është se nuk ka asnjë garanci që programi që shkruhet sot do të jetë i aftë të ekzekutohet në të ardhmen,
madje dhe në të njëjtin kompjuter. Sistemi i operimit dhe procesori janë në zhvillim të vazhdueshëm. Kështu
ndryshime të ndryshme në burimet e sistemit mund të bëjnë që një program të mos funksionojë siç duhet.
Dizenjuesit e gjuhës Java kanë punuar që ta ndryshojnë këtë situatë dhe e kanë arritur këtë nëpërmjet
gjuhës Java dhe Makinës Virtuale Java. Makina Virtuale Java është një makinë abstrakte, e cila lejon një
kompjuter të ekzekutojë një program në Java. Qëllimi i dizenjuesve ishte: “Shkrimi i kodit vetëm një herë
dhe ekzekutimi i tij kudo, në çdo kohë dhe gjithmonë”. Pra, duke përdorur një Makinë Virtuale Java mund të
shkruhet një program, i cili mund të ekzekutohet në çdo platformë, si për shembull: Windows, Unix, Linux
etj.
Performanca e Java-s
Ekzekutimi i kodit binar nuk është aq i shpejtë siç mund të ishte me një gjuhë kompilimi, si për shembull C++.
Për shkak se Java është e interpretueshme, kodi në bite nuk është i ekzekutueshëm direkt nga sistemi, por
ekzekutohet nëpërmjet interpretuesit. Megjithatë, shpejtësia e saj është më shumë se e përshtatshme për
shumicën e aplikacioneve interaktive.
Aftësi që zhvillohen
Nxënësi/ja: aftësohet në njohjen e gjuhës së programimit Java dhe karakteristikave të saj.
Kontroll njohurish
1. Çfarë është gjuha Java?
2. Cila kompani e ka shpikur gjuhën Java dhe kush e zotëron tani atë?
3. Cilat janë karakteristikat e gjuhës Java?
4. Cilat janë avantazhet e programimit në gjuhën Java?
5. Çfarë kuptojmë me programim të orientuar drejt objekteve?
6. Çfarë është një Makinë Virtuale Java? Kërkoni në internet përse përdoret dhe si mund
vendoset një makinë virtuale në kompjuterin tuaj.
191
5.2JAVA Platforma të ndryshme për ndërtimin
e programeve në Java
Nxënësi/ja: Situatë
Pasi është zgjedhur
• pajiset me njohuritë e zhvillimit të programi që do të
programeve në Java; ndërtohet, duhet të
përcaktohet nëse ky program do të ekzekutohet në pajisjet
• evidenton ndryshimet midis mobile, në server apo në kompjuter. Cili mjedis zhvillimi do të
përdorimit të Java SE, Java EE dhe përdoret për të shkruar kodin në Java?
Java Me;
• analizon mjediset e zhvillimit.
Fjalët kyç:
Java, NetBeans, BlueJ, Eclipse.
Java SE, Java EE dhe Java ME
Gjuhët e kompjuterit kanë rregulla strikte përdorimi. Nëse rregullat nuk ndiqen kur shkruhet një program,
kompjuteri nuk do të jetë i aftë ta kuptojë atë. Specifikimet e gjuhës Java dhe Java API përcaktojnë standardet
e gjuhës Java. Sintaksa e gjuhës Java është e përcaktuar në specifikimin e gjuhës Java dhe libraria e gjuhës
Java është e përcaktuar në Java API. Specifikimi i gjuhës Java është një përcaktim teknik i sintaksës dhe
semantikës të kësaj gjuhe.
API (Application Program Interface) – e njohur si librari, përmban klasa dhe ndërfaqe për zhvillimin e
programeve në Java.
Java është një gjuhë e fuqishme dhe mund të përdoret në disa mënyra.
• Java Standard Edition (Java SE) shërben për të zhvilluar aplikacione në anën e klientit. Aplikacionet
mund të ekzekutohen të veçuara ose si applet-e, të cilat ekzekutohen nga një web browser.
• Java Enterprise Edition (Java EE) shërben për të zhvilluar aplikacione në
anën e serverit, si për shembull: Java servlets, Java Server Pages (JSP)
dhe Java Server Faces (JSF).
• Java Micro Edition (Java ME) shërben për të zhvilluar aplikacione për pajisjet mobile për të gjitha
teknologjitë e tjera.
Java JDK dhe IDE
Ekzistojnë disa versione të Java SE. Oracle lëshon një version nëpërmjet një Java Development Toolkit (JDK).
• JDK përbëhet nga një grup programesh të veçanta, ku secili thirret në command line për zhvillimin dhe
testimin e programeve në Java.
• Në vend të përdorimit të JDK-së mund të përdoren mjete zhvillimi në Java (p.sh.: NetBeans, Eclipse,
BlueJ etj.) - programe që ofrojnë një mjedis zhvillimi të integruar (IDE) për ndërtimin më shpejt të
programeve në Java. Një IDE është një mjedis zhvillimi i integruar, i cili është shumë i nevojshëm gjatë
192
JAVA
zhvillimit të aplikacioneve komerciale. Modifikimi, kompilimi, zhvillimi, debugging dhe ndihma në
internet janë të integruara në ndërfaqen grafike të përdoruesit. Kështu, mjafton të shkruhet kodi burim
në një dritare ose të hapet një skedar ekzistues në një dritare, dhe pastaj klikohet një buton ose menu,
apo një buton funksionaliteti për të kompiluar dhe ekzekutuar programin.
Java SE Downloads
Java Platform (JDK) 8u91 / 8u92 NetBeans with JDK 8
NeatBeans
NetBeans është një IDE e shkruar në
Java dhe është një nga mjediset e
zhvillimit më të pëlqyeshme.
Ai suporton zhvillimin e të gjithë
tipave të aplikacioneve në Java, por,
gjithashtu, suporton dhe gjuhë të tjera
ku, në veçanti, mund të përmenden:
PHP, C/C++ dhe HTML5. Kjo IDE ofron
mundësinë e krijimit të aplikacioneve
Java EE, Java SE dhe Java ME.
Editori NetBeans është i aftë të
dedektojë gabimet gjatë kohës që ne
shkruajmë programin dhe të ndihmojë
duke ofruar pjesë të ndryshme kodi, të
cilat i vijnë në ndihmë përdoruesit, siç
tregohet në figurën në të djathtë.
Të gjitha këto rrisin shpejtësinë dhe
thjeshtësojnë programimin duke
përdorur editorin tekst. Për testimin
e aplikacioneve, IDE ofron mjete të
ndryshme, si dhe analizim të kodit.
Eclipse
Eclipse është një tjetër IDE pa pagesë
e përdorur nga zhvilluesit dhe
programuesit.
193
JAVA
Eclipse mundëson krijimin e aplikacioneve të ndryshme në Java, të cilat mund të përdoren në: pajisjet
mobile, shfaqjen e programeve duke përdorur shfletues të ndryshëm dhe programet që ekzekutohen
në kompjuter. Eclipse, përveçse është mjaft i përdorshëm për mjedisin e zhvillimit (IDE) në Java, është i
përdorshëm, gjithashtu, për C/C++ dhe PHP. Nëpërmjet tij mund të kombinojmë gjuhë të ndryshme dhe
karakteristika të tjera nën një paketë standarde.
Java IDE Java EE C/C++ PHP
BlueJ BlueJ
BlueJ është një mjedis zhvillimi pa pagesë për të programuar
në gjuhën Java. Ai zakonisht përdoret për qëllime edukimi, por
gjithashtu është i përshtatshëm për zhvillimin e programeve të
vogla. Është zhvilluar për të kuptuar programimin e orientuar
drejt objekteve. Për këtë arsye, dizenjimi i tij ndryshon nga
mjediset e tjera të zhvillimit dhe përdoret nga miliona njerëz në
të gjithë botën. Në BlueJ grafikisht tregohet struktura e klasës
së një aplikacioni gjatë zhvillimit. Objektet mund të krijohen dhe
testohen në mënyrë interaktive. Ky interaktivitet i kombinuar
me një ndërfaqe të thjeshtë lejon eksperimentimin me objektet
në zhvillim.
Aftësi që zhvillohen
Nxënësi/ja: prezantohet me mjediset e ndryshme të zhvillimit, të cilat ofrojnë mundësinë e
programimit në gjuhën Java.
Kontroll njohurish
1. Çfarë është një specifikim i gjuhës Java?
2. Çfarë kuptojmë me Java SE, Java EE dhe Java ME dhe përse shërbejnë ato?
3. Për çfarë shërben JDK?
4. Për çfarë shërben IDE?
5. Për çfarë përdoren NetBeans, Eclipse dhe BlueJ? Cilat janë karakteristikat e tyre?
194
Programim i orientuar drejt objekteve 5.3JAVA
Nxënësi/ja: trashëgimia polimorfizmi
• kupton rëndësinë e programimit abstraksion
të orientuar drejt objekteve;
enkapsulimi
• vlerëson mekanizmat për të
thjeshtuar programimin; Situatë
Gjatë programimit mund të
• koncepton klasat dhe objektet. përdorim karakteristika që i
kemi përdorur më parë ose
Fjalët kyç: mund të shtojmë karakteristika të tjera për ta bërë një
klasë ose një objekt unik. Si realizohen këto duke përdorur
objekt, abstraksion, trashëgimi, programimin e orientuar drejt objekteve?
polimorfizëm, enkapsulim.
Hyrje në programimin e orientuar drejt objekteve
Si në të gjitha gjuhët e tjera të programimit, elementet e gjuhës Java nuk ekzistojnë të izoluara. Ato
gërshetohen së bashku për të formuar të gjithë gjuhën në tërësi. Megjithatë, kjo lidhje e ngushtë e tyre bën
që të jetë e vështirë të përshkruhet një aspekt në Java pa përfshirë disa të tjera.
Programimi i orientuar drejt objekteve qëndron në themel të gjuhës Java. Programimi i orientuar drejt
objekteve është shumë i lidhur me gjuhën Java, kështu është më mirë të kuptohen parimet bazë të tij
përpara se të shkruhet një program në Java. Në këtë temë do të trajtohen aspektet teorike të tij. Programimi
i orientuar drejt objekteve gërsheton idetë më të mira të programimit të strukturuar me disa koncepte të reja.
Në rastin më të përgjithshëm, një program mund të organizohet në dy mënyra: rreth kodit të tij ose rreth të
dhënave të tij.
Duke përdorur vetëm teknikat e programimit të strukturuar, programet, zakonisht, janë të organizuara rreth
kodit. Kjo mënyrë mund të quhet si “Kodi që vepron në disa të dhëna”.
Programet e drejtuara rreth objekteve janë të organizuara rreth të dhënave, me parimin “të dhëna të cilat
kontrollojnë aksesin në kod”. Për të mbështetur parimet e programimit të orientuar drejt objekteve, të gjitha
gjuhët e drejtuara drejt objekteve, duke përfshirë dhe gjuhën Java, kanë këto karakteristika: abstraksioni,
enkapsulimi, polimorfizmi dhe trashëgimia.
Abstraksioni
Enkapsulimi Një element kryesor në programimin e orientuar drejt objekteve
është abstraksioni. Njerëzit e menaxhojnë kompleksitetin nëpërmjet
abstraksionit. Për shembull, njerëzit nuk mendojnë për makinën si një
grup me mijëra pjesë individuale. Ata e mendojnë atë si një objekt të
Abstraksioni mirëpërcaktuar me sjelljen e tij unike.
Ky abstraksion i lejon njerëzit të përdorin makinën pa e ngarkuar me
kompleksitetin e pjesëve që e përbëjnë atë. Ata shmangin detajet se si punon motori, transmisioni etj. Në
vend të kësaj, ata janë të lirë ta përdorin objektin në tërësi.
195
JAVA
Enkapsulimi Enkapsulimi
Ushqime Enkapsulimi është një mekanizëm programimi, i cili mban
Fruta Perime të sigurt kodin dhe të dhënat që ai manipulon nga mjedisi i
jashtëm. Në një gjuhë programimi, kodi dhe të dhënat mund të
Molla bashkohen së bashku. Supozojmë se kombinimi i tyre krijon një
kuti të zezë. Brenda kësaj kutie ndodhen të gjitha të dhënat dhe
Mollë e kuqe kodet e nevojshme. Nëse të dhënat dhe kodi lidhen së bashku,
në këtë mënyrë kemi krijimin e një objekti. Me fjalë të tjera,
Trashëgimia objekti është një pajisje e cila suporton enkapsulimin. Brenda një
objekti, kodi, të dhënat ose të dyja mund të jenë publike ose private.
Të dhënat ose kodi privat nuk mund të jenë të aksesueshme nga
një program që ekziston jashtë objektit. Kur kodi ose të dhënat
janë publike, pjesë të tjera të programit mund ta aksesojnë atë
edhe pse ai është i përcaktuar në një objekt tjetër.
Klasat dhe objektet
Njësia bazë e enkapsulimit të gjuhës Java është klasa. Klasa
përcakton formën e një objekti, të dhënat dhe kodin se si do të
ndërveprojnë ato të dhëna. Kështu, një klasë është një planifikim
që specifikon se si mund të ndërtohet një objekt.
Trashëgimia
Trashëgimia është një mjet mjaft i rëndësishëm për ripërdorimin
e programeve. Trashëgimia është procesi nëpërmjet të cilit një
objekt mund të kërkojë karakteristikat e një objekti tjetër. Duke
përdorur trashëgiminë, një objekt mund të përcaktojë vetëm ato
karakteristika që e bëjnë atë unik brenda klasës së tij, por ai mund
të trashëgojë atribute të përgjithshme.
Për shembull, një mollë e kuqe është pjesë e klasifikimit mollë, e
cila bën pjesë në klasën e frutave, ndërkohë që frutat bëjnë pjesë
në një klasë më të madhe, te ushqimi. Klasa ushqime përmban disa
karakteristika (p.sh., kalori etj.), të cilat, në mënyrë logjike, do t’i
përkasin dhe nënklasës së saj, fruta. Përveç këtyre karakteristikave,
klasa fruta ka disa karakteristika specifike (të ëmbla, me lëng etj.),
të cilat e dallojnë këtë klasë nga ushqimet e tjera. Klasa mollë i
përcakton këto karakteristika në mënyrë specifike për një mollë
(rritet në pemë, jotropikale etj.). Molla e kuqe, nga ana tjetër, do të
trashëgojë të gjitha karakteristikat e klasave paraardhëse dhe do të
përcaktojë ato karakteristika që e bëjnë atë unike.
196
JAVA
Polimorfizmi
Polimorfizmi është aftësia për t’i trajtuar objektet e ndryshme “Kuak” “Fol!”
në sjellje në një mënyrë uniforme. Polimorfizmi, nga gjuha greke,
nënkupton “shumë forma”, është një karakteristikë që lejon një “HHaamm”
ndërfaqe që të përdoret për një klasë të përgjithshme.
Fillimisht, le të përcaktojmë dy terma të rëndësishëm: nëntip dhe
supertip.
Kështu, mund të themi se rrethi është një “MMjajauu”
nëntip i objekteve gjeometrike dhe objekte gjeometrike është një Polimorfizmi
supertip i rrethit. Marrëdhënia e trashëgimisë lejon një nënklasë të
trashëgojë karakteristika nga superklasa e saj me disa karakteristika shtesë. Një nënklasë është një pjesë e
superklasës së saj. Për shembull, një rreth është një objekt gjeometrik, por jo çdo objekt gjeometrik është
një rreth.
Polimorfizmi, enkapsulimi dhe trashëgimia
Polimorfizmi, enkapsulimi dhe trashëgimia kombinohen së bashku për të prodhuar një mjedis programimi, i
cili ofron zhvillimin e programeve më të përshkallëzuara sesa e ofron modeli i orientuar drejt proceseve. Një
hierarki e mirëdizenjuar e klasave është baza për ripërdorimin e kodit. Enkapsulimi lejon përdorimin gjatë
gjithë kohës së implementimeve. Polimorfizmi lejon të krijohet një kod i pastër dhe i lexueshëm.
Aftësi që zhvillohen
Nxënësi/ja: kupton programimin e orientuar drejt objekteve dhe karakteristikat e tij.
Kontroll njohurish
1. Çfarë është polimorfizmi? Cilat janë avantazhet e përdorimit të tij?
2. Jepni një shembull të trashëgimisë duke u mbështetur te kafshët.
3. Supozojmë se kërkohet që të modelohen: rrathët, katrorët dhe trekëndëshat. Këto klasa
kanë shumë karakteristika të përbashkëta. Cila është mënyra më e mirë për të dizenjuar
këto klasa, për të shmangur teprinë e të dhënave dhe për ta bërë një sistem të lehtë për
t’u kuptuar dhe për t’u mirëmbajtur?
197
5.4JAVA Krijimi i një programi në Java
Nxënësi/ja: Situatë
Kërkohet që
• prezantohet me sintaksën e t’i afishohen
gjuhës Java; përdoruesit
mesazhe të ndryshme si tekst dhe rezultate nga veprime
• afishon shprehje të matematikore. Si realizohet ky kod në Java? Cilat janë
ndryshme në Java; rregullat dhe sintaksa e gjuhës Java?
• afishon rezultatin e
veprimeve matematikore.
Fjalët kyç:
kod në Java, sintaksë, console.
Rregullat kryesore për afishimin e mesazheve të ndryshme në Java
Një program i thjeshtë Java mund të kuptohet pasi janë përvetësuar njohuritë e programimit të orientuar
drejt objekteve.
Le të fillojmë me një program të thjeshtë në Java, i cili shfaq mesazhin: Mirë se vjen në Java!! në console.
(Fjala console është një term i vjetër në gjuhën kompjuterike. Input console nënkupton marrjen e inputeve
të përdoruesit nga tastiera, ndërsa output console nënkupton shfaqjen e output-it në monitor.).
Mirë seMvijreënsneëvJjaevna!në Java! Zbato
rregullat!
Numrat e rreshtave shërbejnë vetëm për referencë. Ata nuk janë
pjesë e programit.
Rreshti i parë përcakton një klasë. Çdo program në Java
duhet të ketë të paktën një klasë. Secila klasë ka një emër. Me
marrëveshje, emri i klasës fillon me shkronjë të madhe. Në këtë
shembull, klasa e ka emrin Përshëndetje.
Rreshti i dytë përcakton metodën main. Programi ekzekutohet
nga metoda main. Një klasë mund të përmbajë disa metoda.
Metoda kryesore është pika ku programi fillon ekzekutimin.
Një metodë përmban disa fjali. Metoda main e këtij programi
përmban fjalinë System.out.println. Kjo fjali shfaq mesazhin Mirë
198
JAVA
Fjalët e rezervuara ose fjalët kyçe, kanë një kuptim specifik për kompiluesin dhe nuk
mund të përdoren për qëllime të tjera në program. Për shembull, nëse kompilatori sheh fjalën
se cvljeanssn, ëkJjaovan!ë!nnkëucpotnosnolqeë(rrpeasshtfij4a)l.ësStrcinlagssnëënskhutpëtoenmnrjiëisekkluaesnëscë. Fkajaralëktetërestjhe.rNajëtëstrreinzgerdvuuhaertatënë këtë
futpetromgirdaismthjoannjëëzpauvebldiycs,hset.aÇtidcodshheprveohjied.në Java mbaron më pikëpresje (;).
Fjalët e rezervuara ose fjalët kyç kanë një kuptim specifik për kompiluesin dhe nuk mund të përdoren për
Rqpclrëraoeln(Kslsgi/sdmh/ro)ëaëtmeismrnhtitëeuutësëntearettsrReejeie.ttmjtrëratearnëKasiënënhiksoëaokhtnmilsmtpaëëhresiuoknënnngsajttjiër.rëelkaeoFotrmtjhkjraënoj.eliëeëëmPnssëtdhehnërnhnttdëtegs,tjiheaohkqenrusmaëmkjepëototbdëvomjuokenjrlnkelnopë,uëzdminemlpoaërperevsstornonueeogttarnkrgoirao.ainrmmmaNncmpiipëndiëjile.uilkiassKjëeëtaotds/ovë*mirottaiëpked,srnuhhontktëmeegdeohrrt*ameykfamsn/jehnaotnolnmajmëaësntnnesheueëtkcnçt:alëjraifplakeoasunkasohrbo,ëëlejlidkninzncjiëpoto,ën.rshgnotdKdeaaëgointhnskrimckeaoanuemmdrëpnhrkppitteeoeiuëslnaëtvprhtosmtqtiohioadërnjtj.i.eë.ndptNiëahddësmhyfJpjoaearjsvlonëlasëags,israhëm-sehivntëe.
komKelnlatpetatreagljizaorhpeënruneësphëermnjeët dnyjëslapsrho-egvream(//),fonrëmseojjannëë nnëjënjëblrlroekshti, ocsielivegnrduopsoen mkiodims /p*odnheent*ë/t, e një
nësperojagnrëamnëi.diNsaërrejasvhtaa,. secili bllok fillon me një kllapë hapëse ({) dhe përfundon me një kllapë
Kllampabtylgljëasrpeër(u}e).shÇe dnoë nkjlëaspërokgraamnjëforbmlloojnkëknljaëseblliokc,iiliciglirgurpuopnontëkodmhpëonnaetntdëht ee mnjëetpordoagtraemik. lNaësës. Në
Javma,ësneycirlëi btlëlonkgfijlalosnhmmee,nçjëdkollampeëthoadpëëksea(n{)jëdhbellpoëkrfumnedtoondme eqënjgërkullpaopnë mpjbeyslëlëtsenë(})m. Çedtoodkëla.sBë lklaoqnjeët mund
bllotek knladsëer,tihcuilriegnru, pdounkteë dnhëënnkaut pdhtueamr eqtoëdantjëe kblallsoëks. Nmëumnëdnytrëë tvëenngdjoasshemt eb,rçednodma entojëdëbklalonkjëubltljoektër, siç
mettroedgeo,hqeëtgnruëpkoondpijneseëtmnëëpmoeshtotdëëm. .Blloqet mund të ndërthuren, duke nënkuptuar që një bllok mund të
vendoset brenda një blloku tjetër, siç tregohet në kodin e mëposhtëm.
Blloku i metodës Blloku i klasës
Blloku i metodës Blloku i klasës
Gabimet më të zakonshme që mund të bëhen gjatë kohës së programimit mund të jenë gabime
sintakse. Si çdo gjuhë tjetër programimi, Java ka sintaksën e saj, dhe kodi duhet të shkruhet në
Gapbiëmrpeut mthëjetëmzaekornreshgmulelaqtëemsuinndtatëksbëësh.ePnëgrjatsëhkeomhbësulslë, pnrëosgeramnëimpitromgurnadmtëmjeunnëggoanbimnejësikntlalakpseë.,Soi se një
çdofjgajluëhnëutjketëësrhptrëogshrakmruimari, sJaiçvadkuahseitn,takkosmënpeilusaejsdihneëkJoadvi adudhoettëtërashpkorruthoejët ngëapbëimrpeutshijnetmakesrer.egullat
e sintaksës.PPrëorgsrhaemmibiulml, nësëispeënrëmprsohgfraaqmvmeutënmgonnjnëjëmklelaspaëzho.sePansjëi fpjarloëgnruakmëishktuëpsthokhreuta,rëssiçhdtëuheetl,ehtë të
komshpfilauqeesni nëmJëavatedpoëtrë mrapeosartzohjëe.gaPbëimr esshinetmakbsuel.l, programi mund të modifikohet në mënyrë që të
Proagfriasmhoi hi menëstirpeëmrmesshafzahqev.etëm një mesazh. Pasi programi kuptohet, është e lehtë të shfaqen më tepër
mesazhe. Për shembull, programi mund të modifikohet në mënyrë që të afishohen tri mesazhe, si më poshtë.
Përshëndetje.
Programimi është i bukur!
Ky është programi i dytë në Java.
199
ndryshëm në Java.
Operatorët aritmetikë
JAVA Operatori Përshkrimi
+ Operator i mbledhjes
Realizimi i veprimeve matematikore në Java të shfaqet në console. - Operator i zbritjes
Në Java mund të kryhen veprime matematikore dhe rezultati Sh/*embulOlOippmeerëraattpoororisiphsjhteëusmëtiëmziimt it 5%2=
vlerëson shprehjen 10.5 + 2 x 3 .
% Operator i mbetjes (psh.
45 - 3.5
Operatorët e barazisë
Operatori Përshkrimi
0.39759036144578314 == E barabartë
!= E ndryshme
aOrpitemrOaetptoikereirianstëhournëmjëtëaszhrimiptrmiet hnejëteikJnaëëvaJaëvsah.tKëy*p.rSoiçcemsuknodnstiëstsohniknoëhentjoeOhkjpzeienstroeantoonprjeëërtapatroroirctëmevseepttëiëkrnëtdërkyts>h>h<<=yë=emr nnjëëMMMsJMahëëëëvpeeaeremme.vvhaoaodjgdgehëhëelel baraz
baraz
Operatori Përshkrimi Operatori Përshkrimi
+ Operator i mbledhjes == E barabartë
- Operator i zbritjes != E ndryshme
/ Operator i pjestimit > Më e madhe
* Operator i shumëzimit >= Më e madhe baraz
% Operator i mbetjes (psh. 5%2=1) < Më e vogël
<= Më e vogël baraz
Aftësi që zhvillohen
Nxënësi/ja: prezantohet me shkrimin e programeve të thjeshta në Java, duke përfshirë krijimin e klasës
dhe metodave.
Kontroll njohurish
1. Çfarë është një fjalë kyç? Jepni shembuj.
2. A është gjuha Java një gjuhë e cila është e ndjeshme ndaj shkronjave të vogla dhe të
mëdha?
3. Çfarë është një koment? A afishohet ai pas ekzekutimit të programimit? Si mund të
përcaktojmë një rresht si koment? Po paragrafin si mund ta përcaktojmë si koment?
4. Si mund të shfaqet një string në console?
5. Çfarë afishon programi i mëposhtëm?
200