program HLAVNI_PROGRAM_TRIDENI; uses crt; var podminka: char; i, j, k, hodnota, pozice: integer; existence: boolean; vyhledpole: array[1..50] of integer; procedure Generovani; begin clrscr; writeln('Nyni bylo vygenerovano pole 50 cisel v rozsahu 0 - 150.'); writeln; randomize; write('Vloz hodnotu. kterou chces v poli hledat : '); readln(hodnota); for i := 1 to 50 do vyhledpole[i] := random(150); writeln; end; procedure Vystup1; begin if (existence = true) then writeln('Cislo ',hodnota,' se v generovanem poli naleza.') else writeln('Cislo ',hodnota,' se v generovanem poli nenaleza.'); writeln; writeln('Pole hodnot vypada takto : '); for i := 1 to 50 do write(vyhledpole[i]:5); writeln; writeln('Stiskni ENTER ...'); readln; end; procedure Vystup2; begin if (existence = true) then writeln('Cislo ',hodnota,' se v generovanem poli naleza na pozici ',pozice,'.') else writeln('Cislo ',hodnota,' se v generovanem poli nenaleza.'); writeln; writeln('Pole hodnot vypada takto : '); for i := 1 to 50 do write(vyhledpole[i]:5); writeln; writeln('Stiskni ENTER ...'); readln; end; procedure QuickSort(var pole: array of integer; minimum, maximum: integer); procedure Sort(l, r: Integer); var pom : integer; begin i := l; j := r; k := pole[(l+r) DIV 2]; repeat while pole[i] < k do i := i + 1; while k < pole[j] do j := j - 1; if i <= j then begin pom := pole[i]; pole[i] := pole[j]; pole[j] := pom; i := i + 1; j := j - 1; end; until i > j; if l < j then Sort(l, j); if i < r then Sort(i, r); end; begin {QuickSort}; Sort(minimum,maximum); end; procedure Vyhlzarazka(var vyhlpole: array of integer; hodn: integer; var exist: boolean); begin exist := FALSE; i := 1; j := 50; while ((i < j) and not(exist)) do begin if (vyhlpole[i] = hodn) then exist := TRUE else inc(i); end; end; procedure Vyhlpuleni(var vyhlpole: array of integer; hodn: integer; var poz: integer; var exist: boolean); begin QuickSort(vyhlpole,1,50); exist := FALSE; i := 1; j := 50; repeat k := trunc((i + j) div 2); if (vyhlpole[k] = hodn) then begin poz := k + 1; exist := TRUE; end; if (vyhlpole[k] < hodn) then i := k + 1 else j := k - 1; until ((vyhlpole[k] = hodn) or (i > j)) end; BEGIN repeat clrscr; gotoxy(19,6); writeln('Program na demonstraci vyhledavacich metod.'); gotoxy(30,8); writeln('David Padrta - IVT 1'); gotoxy(19,12); writeln('Vyhledavani se zarazkou - zmackni 1'); gotoxy(19,13); writeln('Vyhledavani v setridenem poli - zmackni 2'); gotoxy(25,21); writeln('Ukonceni programu - zmackni 9'); podminka := readkey; case podminka of '1': begin Generovani; Vyhlzarazka(vyhledpole,hodnota,existence); Vystup1; end; '2': begin Generovani; Vyhlpuleni(vyhledpole,hodnota,pozice,existence); Vystup2; end; end; until (podminka = '9'); clrscr; gotoxy(20,10); write('Uspesne jste ukoncil(a) tento program ...'); delay(1000); END.