Tömb feltöltése véletlen számokkal, elrendezése, majd egy bekért szám keresése a tömbben bináris kereséssel, eljárások használatával (BinarisKereses.pas) program BinarisKereses; uses crt; var i,i0,i1,i2,t,sz,x,j,n:integer; a:array [1..100] of integer; procedure tombfeltoltes; begin i:=1; write('Hany darab szam legyen a tombben? '); readln(n); while(i<=n) do begin a[i]:=trunc((10)*random+1); i:=i+1; end; end; procedure rendezes; Legkisebb alapján történő rendezéssel elrendezzük a tömb elemeit. begin i:=1; while(i<n) do begin j:=i+1; while(j<=n) do begin if (a[j]<a[i]) then begin x:=a[j]; a[j]:=a[i]; a[i]:=x; end; j:=j+1; end; i:=i+1; end; writeln('A szamok rendezes utan:'); i:=1; while(i<=n) do begin writeln('A tomb ',i,'. eleme: ',a[i]); i:=i+1; end; end; procedure kereses; begin t:=0; write('A keresett szam: '); readln(sz); Bekérjük a keresett számot. i1:=1; i1-be eltároljuk a tömb első elemének indexét, azaz 1-et. i2:=n; i2-be eltároljuk a tömb utolsó elemének indexét, azaz n-et. while(i1<=i2) do begin i:=trunc((i1+i2)/2); i-be beletesszük a középső elem indexét, amelyet az i1 és i2 aktuális értékének átlagaként kapunk meg. Mivel nem egész számot kapunk, típuskényszertéssel egész számmá alaktíjuk az átlagot. if (a[i]=sz) then break; Ha a tömb i-edik eleme megyegyezik a számmal, azaz találatunk van break-el kilépünk a ciklusból. if (sz<a[i]) then begin Ha a tömb i-edik eleme kisebb, mint a keresett szám, akkor már csak az i-edik elem után találhatjuk meg a számunkat, mivel a tömb elemeit elrendeztük. Ha az elem nagyobb a keresett számnál, akkor pedig már csak az i-edik elem előtti számok között keresünk tovább. i2:=i-1; end else i1:=i+1; end; i0:=i; i0-ba eltároljuk az i aktuális értékét while (i1<=i) do begin A ciklus segítségével megvizsgáljuk, hogy az i-edik tömbelem előtti számok között van e találat, ha igen, kiírjuk a találat indexét, és a találatok számát növeljük eggyel, majd az i értékét csökkentjük eggyel, így vizsgálva a további elemeket. Ha nincs találatunk break-kel kilépünk a ciklusból. if (a[i]=sz) then begin writeln('A talalat a sorozat ',i,'. eleme'); t:=t+1; i:=i-1; end else break; end; i:=i0+1; i-be beletesszük az i0-nál eggyel nagyobb értéket. Erre azért van szükség, mert miután az előző ciklus lefutott, már csak az i0-adik tömbelem után lehet találatunk. while (i<=i2) do begin A ciklus segítségével megvizsgáljuk, hogy az i-edik tömbelem utáni számok között van e találat, ha igen, kiírjuk a találat indexét, és a találatok számát növeljük eggyel, majd az i értékét is növeljüks eggyel, így vizsgálva a további elemeket. Ha nincs találatunk break-kel kilépünk a ciklusból. if (a[i]=sz) then begin writeln('A talalat a sorozat ',i,'. eleme'); t:=t+1; i:=i+1; end else break; end; if (t=0) then writeln ('Nincs talalat.') Ha a találatok száma , akkor kiírjuk, hogy Nincs találat, egyébként pedig kiírjuk a találatok számát. else writeln('A talalatok szama: ',t); end; BEGIN clrscr; tombfeltoltes; rendezes; kereses; END.