Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Algoritmusok a programban

Maghiara


ALTE DOCUMENTE

-Algoritmusok a programban:

A következő algoritmusok megtalálhatóak a programban. Mindegyik a rendezési algoritmusok közé tartozik, amelyekkel elsősorban az adatok közti keresést lehet le egyszerűsíteni. Mindegyikhez tartozik egy rövid magyarázat, forráskód és tesztelés:



.Csökkenő menetszámú rendezés

A módszer lényege, hogy az első elemhez hasonlítja az összes többi elemet, és ha szük 16516v216q séges cserét hajt végre. A külső ciklus indexeli az aktuális első elemet, a belső ciklusváltozó a többi elemet. A belső ciklus első teljes lefutása után az első elem a helyére kerül, így ez kimarad a további hasonlításból.

A külső ciklusváltozó kezdőértéke az első elem indexe, végsőértéke a rendezendő elemek száma -1 (az első elemtől az utolsó előttiig indexeli az elemeket).

A belső ciklusváltozó kezdőértéke a külső ciklusváltozó értéke +1, végsőértéke a rendezendő elemek száma.

4 elemű tömb rendezése (programrészlet):

for i:=1 to 3 do

begin

for j:=i+1 to 4 do

begin

if tomb[i]>tomb[j] then

begin

cs:=tomb[i];

tomb[i]:=tomb[j];

tomb[j]:=cs;

end;

end;

end

Száraz tesztelés:

4 elemű tömb rendezése:

I

J

Tömb indexedik elemének tartalma

i+1=2

. Buborékrendezés

A módszer lényege, hogy két szomszédos elemet hasonlít egymáshoz. A rendezés megvalósításához két egymásba ágyazott ciklusra van szükség.

A külső ciklus a végrehajtásokat számolja. A ciklusváltozó kezdőértéke 1, végsőértéke a rendezendő elemek száma -1.

A belső ciklus ciklusváltozóját a tömb elemeinek indexelésére használjuk.

Kezdőértéke, és végsőértéke megegyezik a külső ciklusváltozóéval.

A belső ciklus első lefutása után az utolsó elem a helyére kerül, de ez a módszer erről a tényről nem vesz tudomást, a helyére került elemeket is hasonlítja a további lefutások alkalmával (ez a módszer hátránya).

A buborékrendezés 4 elemű tömbnél:

for i:=1 to 3 do

begin

for j:=1 to 3 do

begin

if tomb[j]>tomb[j+1] then

begin

cs:=tomb[j];

tomb[j]:=tomb[j+1];

tomb[j+1]:=cs;

end;

end;

end

Előfordulhat, hogy a tömb elemei hamarabb kerülnek a helyes sorrendbe, mint ahogy a külső ciklus végértékéhez érne, ezért egy kapcsoló használatával ellenőrizhetjük, hogy az elemek helyes sorrendben vannak-e, és ha igen, akkor a rendezést befejezzük. Mivel a kapcsoló tájékoztat minket a rendezés sikerességéről, ezért a külső határozott menetszámú ciklust (For ciklus), lecserélhetjük egy feltétel ciklusra.

A rendezési algoritmusnak egyszer mindenképpen le kell futnia (még akkor is ha már rendezett a tömb, és cserére nincs szükség), ezért használhatjuk a hátultesztelő ciklust (Repeat-Until).

A buborékrendezés 4 elemű tömbnél kapcsolóval (programrészlet):

repeat

kapcs:=true

for j:=1 to 3 do

begin

if tomb[j]>tomb[j+1] then

begin

cs:=tomb[j];

tomb[j]:=tomb[j+1];

tomb[j+1]:=cs;

kapcs:=false;

end;

end;

until kapcs=true;

.Két elem cseréje csereterület nélkül

Csak numerikus adatoknál lehet alkalmazni, és ott is csak akkor ha biztosan tudjuk, hogy a két legnagyobb elem összege nem nagyobb a memóriában lefoglalt tárterület méreténél (különben túlcsordulás jöhet létre).

Pl. két lottószámot megtudunk cserélni csereterület nélkül, ha mondjuk byte típusú változóban tároljuk. A lottószámok 1-90-ig vannak, így a két legnagyobb szám összege 179 (89+90), byte típuson pedig 0-255-ig tárolhatunk számokat.

Cseréljük ki a két számot:

x változó értéke: 89

y változó értéke: 90

x:=x+y; x legyen egyenlő 89+90=179

y:=x-y y legyen egyenlő 179-90=89

x:=x-y x legyen egyenlő 179-89=90

.Logikai rendezés

Logikai rendezést akkor használunk, ha az eredeti (rendezés előtti) sorrendet valami miatt meg akarjuk tartani rendezés után is.

Az előző két rendezésnél a csere folyamán a memóriában ténylegesen helyet cserélt a két elem. A logikai rendezésnél a tömb elemei a helyükön maradnak, a csere egy másik úgynevezett indextömbben történik, ami a rendezetlen tömb indexeinek számait tárolja.

Példa egy logikailag rendezett 4 elemű tömbre.

t:array[1..4] of byte;

index:array[1..4] of byte;

Hivatkozás a legkisebb elemre (6): t[index[1]] tehát, ha a rendezés során cserét akarunk végrehajtani, akkor a cserét nem a t tömbben , hanem az index tömbben végezzük el, és azon keresztül hivatkozhatunk a t tömb elemeire.

Cserét, függvénybe (Function) soha ne írjunk, csak eljárásba (Procedure), mert a függvény egy értéket ad vissza, nekünk pedig két értékre van szükségünk!!!

Ha az egész rendezést egy blokkba írjuk, akkor is csak eljárást szabad használni, mert a függvény típusának csak sorszámozott (byte, char, integer, boolean, stb.), valós (real) és string típust adhatunk meg, strukturált adattípusokat (tömb, record) nem!!!


Document Info


Accesari: 652
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )