Professional Documents
Culture Documents
Paraqitja e algoritmave
Kanalet natyrale të komunikimit nuk mund të përdoren për të paraqitur algoritmet mbasi
mund të mbajnë qoftë ndonjë paqartësi qoftë edhe se terminologjia e përdorur mund të
ketë më tepër se një kuptim. Për shëmbull fraza “Të shkosh për vizitë tek nipat mund të
jetë acaruese” mund të tregojë ose se nipat mund të shkaktojnë probleme kur i takon ose
se rruga për të vajtur deri tek ata mund të jetë problematike. Vështirësitë gjithashtu mund
të burojnë edhe nga një kuptim jo i saktë i nivelit të detajeve të kërkuara.
Algoritmika i përballon këta probleme duke përcaktuar një bashkësi të përcaktuar të
komponenteve themelore, që duke u nisur prej tyre, mund të ndërtohet algoritmi. Këto
komponente themelore quhen primitiva. Duke u dhënë kuptime të sakta primitivave,
eleminohen problemet e paqartësisë; ndërkaq duke kërkuar që algoritmat të përshkruhen
në funksion të këtyre primitivave vendoset një nivel uniform detajimi. Një bashkësi e
primitivave dhe e rregullave që spjegojnë se si të kombinohen këta primitivë për të
paraqitur ide më të ndërlikuara përbën gjuhën e programimit.
Çdo primitivë përbëhet nga dy pjesë: nga sintaksa dhe nga semantika. Sintaksa ka të
bëjë me paraqitjen simbolike të primitivës dhe semantika me kuptimin e saj. P.sh. fjala
ajër nga pikpamja sintaksore është e formuar nga katër shenja, ndërsa nga pikpamja
semantike është përmbajtja gazore që rrethon tokën.
Për të përftuar një bashkësi primitivash për të paraqitur algoritmat mund të përdoren
instruksionet bazë të procesorit të kompjutërit, të cilat ai është në gjëndje t„i ekzekutojë.
Në se një algoritëm shprehet në këtë nivel detajimi, sigurisht rezulton në një program të
ekuacionin kanë një numër të pafundëm vlerash (grafikisht bashkësia e zgjidhjeve të këtij
ekuacioni përcakton një drejtëz). Kur shkruajmë ax2 + b x+ c = 0, variabli x shënon
zgjidhjet e këtij ekuacioni, që në varësi të kombinimit të vlerave të a, b, c mund të jenë 0,
1 ose 2 vlera. Ndërsa në informatikë, një variabël ka gjithmonë një dhe vetëm një vlerë.
Për të ruajtur rigorozitetin, në disa gjuhë programimi por jo në të gjitha ajo mund të mos
ketë vlerë (përderisa nuk i është dhënë vlerë). Në disa gjuhë të tjera të tjera, variablave që
nuk i u është dhënë vlerë u jepet vlera 0, ndërsa disa të tjera kanë një vlerë të
papërcaktuar. E vetmja mënyrë për të ndryshuar vlerën e variablit është instruksioni i
vlerëdhënies.
Tabela (array) është një nga strukturat më të rëndësishme. Një tabelë, një-dimensionale,
është një varg i n termave me të dhëna të të njëjtit tip që janë vendosur në mënyrë të
vazhduar në kujtesën e kompjutrit. Sasia elementeve që përmban tabela quhet përmasë ose
madhsia e tabelës.Si çdo strukturë tjetër ajo identifikohet me një emër të zgjedhur nga
programisti.
Elementët e veçantë të tabelës bëhen të aksesueshme me anë të specifikimit të vlerës
së indeksit (index) të tabelës (Figura 2.2). Indeksi përcakton pozicionin relativ të një elementi
në lidhje me elementin e parë të tabelës. Elementin e tabelës që ndodhet në pozicionin e i te do ta
shënojmë në trajtën elementi[i]. Indeksi vetë mund të jetë një konstante e plotë, një variabël i tipit
të plotë ose një shprehje numerike, rezultati i së cilës duhet të jetë një vlerë e plotë.
Në pjesën më të madhe të rasteve, indeksi është një vlerë numerike e plotë ndërmjet 0
dhe n – 1 ose ndërmjet 1 dhe n. Disa gjuhë kompjutrike lejojnë që indeksi të ndryshojë
ndërmjet dy kufijsh të plotë low dhe hight, dhe disa bile lejojne indekse jo numerike p.sh.
vlerat e të dhënave që u korespondojnë 12 muajve të vitit me anë të emrave të muajve.
Secili nga elementët e tabelës mund të aksesohet duke shpenzuar të njëjtën sasi kohe
pavarsisht pozicionit të tij në tabelë. Kjo është një cilësi mjaft pozitive e tabelës.
Supozohet gjithashtu se çdo element i tabelës zë të njëjtën sasi kujtese.
Përveç organizimit të të dhënave në formen e një tabelë një-dimensionale ato mund të
organizohen edhe në tabela shumë-dimensionale. P.sh. elementet e tabelës dy-dimensionale
mund të përceptohen si një varg tabelash me një dimension. Një element i çfardoshen i saj
Instruksioni i Hyrjes
Shërben për t‟i transmetuar të dhëna algoritmit nga “jashtë” (në një program këtë rol e
luajnë njësitë e hyrjes së të dhënave). Sintaksa e zgjedhur në këtë cikël leksionesh është:
Instruksioni i Daljes
Shërben për të nxjerrë nga algoritmi vlerat e variablave ose mesazhe (në një program këtë
rol e luajnë njësitë e daljes të rezultateve). Sintaksa e zgjedhur në këtë cikël leksionesh
është:
Instruksioni i vlerëdhënies
Instruksioni i vlerëdhënies shërben që të kopjojë në një variabël pritës (target) një vlerë të
caktuar (source). Kjo vlerë e caktuar mund të jetë një madhësi konstante, një variabël ose
një shprehje ose funksion. Në trajtë formale, sintaksa e përgjithshme e instruksionit të
vlerëdhënies është:
variabli_pritës:= shprehje
ku:
variabli_pritës, është variabli në të cilin do të kopjohet vlera;
shprehje, mund të jetë një konstante, variabël ose shprehje, e të njejtit tip si variabli
pritës;
:=, është shenja që identifikon veprimin e vlerëdhënies.
x:=2 x 2
y:= x+8 y 10
t := x > y t false
Struktura zgjedhëse është një strukturë algoritmike kontrolli, që ka për qëllim të drejtojë
ekzekutimin e një vargu instruksionesh në varësi të plotësimit apo të mosplotësimit të një
kushti kontrolli. Instruksionet e kësaj strukture shfaqen në tre formate.
Formati 1:
If (kusht)
Then bllok_instruksione1
Else bllok_instruksione2
Formati 2:
If (kusht)
Then bllok_instruksione1
Formati 3:
If (kusht)
Then asgje
Else bllok_instruksione1
Shënim 1:
Shpesh zhvendosja e të shkruarit e përmirëson lexueshmërinë e një algoritmi. P.sh
shkrimi në formën:
If (kusht1)
Then
If (kusht2)
Then bllok_instruksione1
Else bllok_instruksione2
Else bllok_instruksione3
Struktura përsëritëse (e quajtur ndryshe sipas kontekstit edhe ciklike) është një strukturë
algoritmike kontrolli, që ka për qëllim të drejtojë ekzekutimin e një vargu instruksionesh,
të quajtur trupi i ciklit, një numër të caktuar herësh, numër që edhe mund të mos njihet
paraprakisht. Renditja e emrave për t‟u afishuar, llogaritja vlerës së përgjithshme të disa
transaksioneve me kartë krediti, printimi i rreshtave të një fature, etj, janë disa shembuj
veprimesh të përsëritura.
Në përgjithsi, përsëritja mund të realizohet nëpërmjet dy tipeve: iteracionit dhe
rekursionit. Tipi i përsëritjes përcakton edhe tipin e algoritmit nga pikpamja strukturore
duke e quajtur algoritëm iterativ ose algoritëm rekursiv.
Iteracioni është thjesht përsëritja e hapave të përpunimit. Numri i hapave të
nevojshëm përcaktohet nga numri i faktorëve të ndryshëm që marrin pjesë në problem.
Rekursioni është një teknikë tjetër, krejt e ndryshme, për zgjidhjen e problemeve që
kanë përsëritje. Kjo realizohet me anë të zgjidhjes së problemeve gjithmonë e më të
vegjël por që secili prej tyre është krejt i ngjashëm më problemin nga i cili u formua.
Rekursioni shpesh, por jo gjithmonë, mund të jetë një mënyrë më e natyrshme për të
shprehur një algoritëm se sa iteracioni. Në një leksion të ardhshëm do të flasim për
përsëritjen nëpërmjet rekursionit më me hollësi.
Shëmbull tipik i përsëritjes iterative është të kërkuarit e një vlere të caktuar në një
varg të dhënë vlerash qofshin këto të tipit numerik ose të tipit tekst. Le të supozojme se
kemi një listë me emra të vendosur në mënyrë të çfardoshme. Mund ta kqyrim listën që
nga fillimi duke krahasuar çdo emër të saj radhazi me emrin që na intereson. Sapo emri
të gjëndet në listë, kërkimi ka përfunduar me sukses. Në se kemi mbritur në fund të listës
pa e gjetur emrin në listë, kërkimi ynë ka dështuar. Bëjmë këtu një vërejtje, kërkimi i
mësipërm fillon e zbatohet në se lista me emra nuk është bosh.
A ka ndonjë metodë të përgjithshme për të ndërtuar një algoritëm iterativ? Në fakt
nuk ështe gjetur ndonjë metodë të përgjithshme por ka ide të përgjithshme që ndihmojnë
për të gjetur një metodë të veçantë për të ndërtuar një algoritëm të veçantë.
Në përgjithësi, një strukturë përsëritëse iterative përbëhet nga tre procese që drejtojnë
përsëritshmërinë:
Inicializimi: vendosja e gjëndjes fillestare e parametrit të kontrollit të ciklit iterativ.
Kontrolli i përfundimit: kontrollohet relacioni i gjëndjes vijuese të parametrit të
kontrollit me gjëndjen përfundimtare për të gjykuar për përfundimin e përsëritshmërisë.
Modifikimi: ndryshohet parametri i kontrollit për t‟iu afruar kushtit të përfundimit të
përsëritshmërisë.
Secili prej këtyre aktiviteteve duhet të jetë i pranishëm në një cikël në mënyrë që
struktura e kontrollit të jetë e rregullt.
Struktura iterative takohet në tre formate bazike: While, Repeat dhe For.
Nga ana semantike instruksion, mundëson ekzekutimin të paktën një herë të bllokut të
instruksioneve që përbëjnë trupin e ciklit para se të vlerësohet kushti i përfundimit të
përsëritjes. Në se më pas, kushti i përfundimit të ciklit është i vërtetë vazhdon ekzekutimi
i instruksioneve përndryshe realizohet dalja nga cikli. Kjo formë ciklike quhet cikël i
papërcaktuar me pas-kontroll.
Për shëmbull, llogaritja e shumës se n numrave të parë natyralë realizohet me anë të
instruksionit Repeat si më poshtë:
shuma := 0;
i := 1;
Repeat
shuma := shuma + i;
i := i + 1;
While (i ≤ n)
c) Cikli i formës For mundëson kryerjen e një vargu të caktuar veprimesh një numur të
përcaktuar paraprakisht herësh. Ky cikël quhet edhe cikël me numër hapash të
përcaktuar. Kontrolli i përfundimit të veprimeve kryhet në fillim të ciklit.
Ky cikël takohet në dy formate: formati me hap rritës, i quajtur formati For/To dhe
formati me hap zvogëlues, i quajtur formati For/Downto.
shuma := 0;
For i := 1 TO n Do
shuma := shuma + i;
2.5 Procedura
Koncepti i procedurës është një nga konceptet bazë si në algoritmike ashtu edhe në
programim. Emërtime të tjera për të janë nënprogram (subroutine) ose funksion
(functions). Hartimi i algoritmave në formë procedure, është i rëndësishëm për disa
arsye, më të rëndësishmet prej të cilave janë:
Ajo furnizon një mënyrë për thjeshtimin e algoritmeve duke i bërë proceset e
përbashkëta disponibël për një numër të gjërë algoritmesh
Lejon modularizimin e algoritmeve komplekse
I bën më të sigurtë algoritmet mbasi, pasi shihet që algoritmi funksionon, ai mund
të bëhet nënprogram dhe nuk është e nevojshme të ritestohet
Për shëmbull, procedura për gjetjen e vlerës më të madhe ndër dy variabla të dhënë a dhe
b do të kishte pamjen:
Procedure VMM (a, b)
Begin
max:=a
If b> max
Then Max := b;
Return (max)
End vmm
Një kategori interesante dhe mjaft e vlershme janë procedura që llogaritin vlera të
funksioneve matematikë. Këto procedura, përderisa nuk kërkohet e kundërta, do të
përdoren si algoritma të gatshëm dhe do të përdoren në shprehjet e ndryshme me anë të
referimit të emrit të zgjedhur për ta. Gjatë ciklit të leksioneve kjo listë edhe mund të
shtohet.
Funksioni Ceiling1, llogarit më të voglin nga numrat e plotë që është më i madh se një
numër real i dhënë (e thënë ndryshe llogarit tavanin e një numri real). P.sh. rezultati i
zbatimit të këtij funksioni ndaj numrit 4.3 jep si rezultat numrin e plotë 5. Për të përftuar
këtë rezultat në mund të shkruajmë instruksionin e vlerëdhënies si më poshtë:
x := Ceiling(4.3)
Për të shprehur këtë veprim mund të përdoret edhe çifti i simboleve grafike ⌈ ⌉ si më
poshtë:
x := ⌈4.3⌉
Funksioni Floor, llogarit më të madhin nga numrat e plotë që është më i vogël se një
numur real i dhënë (e thënë ndryshe llogarit dyshemenë e një numri real). P.sh. rezultati i
zbatimit të këtij funksioni ndaj numrit 4.3 jep si rezultat numrin e plotë 4. Për të përftuar
këtë rezultat ne mund të shkruajmë instruksionin e vlerëdhënies si më poshtë:
x := Floor(4.3)
Për të shprehur këtë veprim ndonjëherë përdoret edhe çifti i simboleve grafike ⌊ ⌋ si
më poshtë:
x := ⌊4.3⌋
1
Konceptet floor and ceiling janë futur nga Kenneth E. Iverson ne 1962.
x := Div(11,4)
Funksioni Log, llogarit logaritmin e një numri pozitiv sipas përkufizimit log x b = a.
Në lëndën e algoritmikës, në përgjithsi, një shkrim i logaritmit pa bazë logaritmi
nënkupton bazën 2, d.m.th log b nënkupton log 2 b. Për shëmbull, rezultati i zbatimit të
këtij funksioni ndaj numrave 4 prodhon si rezultat numrin e plotë 2. Për të përftuar këtë
rezultat ne mund të shkruajmë instruksionin e vlerëdhënies si më poshtë:
x := log (4)
f) Rrënja katrore
Funksioni SQR, llogarit rrënjën katrore të një numri pozitiv. Për shëmbull, rezultati i
zbatimit të këtij funksioni ndaj numrave 4 si rezultat numrin e plotë 2. Për të përftuar këtë
rezultat ne mund të shkruajmë instruksionin e vlerëdhënies si më poshtë:
x := sqr (4)
fjalen Begin dhe mbyllet me fjalën End. Edhe një instruksion i vetëm mund të
quhet bllok i instruksioneve.
11. Për qartësi paraqitjeje, në një rresht fizik të algoritmit të paraqitur do të
shkruajmë vetëm nje instruksion që në përgjithsi mbyllet me shenjën ;
(pikpresje).