Pascal - vyhľadávanie v poli
Vyhľadávanie -je proces prezerania zložiek poľa s cieľom zistiť.či pole obsahuje zložku s danými vlastnosťami. Rozoznávame dva druhy vyhľadávania: lineárne binárne Lineárne vyhľadávanie -používa sa v neutriedených poliach -je nutné porovnat každú zložku poľa Binárne vyhľadávanie -používa sa v utriedených poliach -stačí zistiť,v ktorej polovici sa hľadaná zložka môže vyskytovať,tým zmenšiť interval...
Lineárne vyhľadávanie môžme uskutočniť pomocou cyklu so známym počtom opakovaní, ak potrebujeme zistiť počet opakujúcej sa hľadanej zložky (napr.koľkokrát sa v poli vyskytuje číslo.2). Cyklus s podmienkou na konci alebo na začiatku je výhodné použiť,ak nás zaujíma iba výskyt a miesto neopakujúcej sa zložky.
príklad na vyhľadávanie pomocou cyklu so známym počtom opakovaní Dané je 10 prvkové pole naplnené celými čislami. Zaujíma nás výskyt a počet opakovaní hľadanej zložky (čísla n).N je zadané z klávesnice.
var j,i,n:integer; a:array [1..10] of integer; begin randomize; for i:=1 to 10 do a[i]:=random(20); readln(n); j:=0; for i:=1 to 10 do if a[i]=n then j:=j+1; if j>0 then writeln(´Číslo', n,' sa v poli vyskytuje ´,j,´ krát.´) else writeln(´Číslo n sa v poli nevyskytuje.´); readln; end.
príklad na vyhľadávanie pomocou cyklu s podmienkou na konci Dané je 20 prvkové pole naplnené celými číslami. Zaujíma nás výskyt a miesto hľadanej zložky (čísla n) zadanej z klávesnice.
var i,n:integer; a:array [1..20] of integer; begin randomize; for i:=1 to 20 do a[i]:=random(50); readln(n); i:=0; repeat i:=i+1; until (a[i]=n) or (i=20); if a[i]=n then writeln(´Číslo n sa v poli nachádza na ´,i,´. mieste.) else writeln(´Číslo n sa v poli nenachádza.); readln; end. Binárne vyhľadávanie sa dá použiť iba v utriedenom poli. Zisťuje,v ktorej polovici poľa sa hľadaná zložka môže vyskytovať a potom zmenšuje interval hľadania posunutím dolnej alebo hornej hranice poľa. Využíva sa tu cyklus s podmienkou na konci alebo na začiatku.
príklad s podmienkou na konci
var j,i,n,k,z:integer; a:array [1..10] of integer; begin randomize; readln(n); for i:=1 to n do a[i]:=random(20);
i:=1; j:=n; repeat k:=(i+j) div 2; if a[k]<>z then if a[k] else j:=k-1; until (a[k]=z) or (i>j); if z=a[k] then writeln(´Číslo sa v poli nachádza na ´,k,´.
mieste.´) else writeln(´Číslo sa v poli nenachádza.);
vysvetlivky: i je dolná hranica poľa; j je horná hranica; n vyjadruje počet prvkov poľa; z je hľadané číslo zadané z klávesnice; pohybujeme sa vo vzostupne usporiadanom poli integerov. v deklarácii: i,j,n,k,z sú celé čísla; a je typu array.
|