program rodi_jest_taki_sexy;
uses crt;
const Ilosc=100;
type tab=array [1..Ilosc] of integer;
var a:tab;
n:byte;
mini,maksi,k:integer;
procedure los(var a:tab;n:byte);
var i,j,c:byte;
w:boolean;
begin
randomize;
for i:=1 to n do
begin
repeat
c:=random(100);
w:=true;
for j:=1 to i do
if a[j]=c then w:=false;
until w=true;
if w=true then a[i]:=c;
end;
end;
procedure wypis(var a:tab;n:byte);
var i:byte;
begin
for i:=1 to n do write(a[i]:3);
writeln;
end;
procedure BubbleSort(var t:tab;n:byte);
var i,j:byte;
p:integer;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if t[i]>t[j] then
begin
p:=t[i];
t[i]:=t[j];
t[j]:=p
end;
end;
procedure MinMax(l,p:byte;var Min, Max:integer);
var Min1,Min2,Max1,Max2:integer;
begin
if l=p then
begin
Min:=a[l];
Max:=a[l];
end else
if l=p-1 then
if a[l]>a[p] then
begin
Min:=a[p];
Max:=a[l];
end else
begin
Min:=a[l];
Max:=a[p];
end
else
begin
MinMax(l,(l+p) div 2,Min1,Max1);
MinMax((l+p) div 2+1,p,Min2,Max2);
if Max1>Max2 then Max:=Max1 else Max:=Max2;
if Min1<Min2 then Min:=Min1 else Min:=Min2;
end;
end;
function BinarySearch(var t:tab; {uporzadkowana tablica poszukiwan}
n:byte; {ilosc elementow tablicy}
a:integer):byte; {szukana liczba}
var l, {lewy kraniec przedzialu poszukiwan}
p, {prawy kraniec przedzialu poszukiwan}
sr:byte; {indeks elementu srodkowego biezacego przedzialu}
begin
BinarySearch:=0;
l:=1;
p:=n;
repeat
sr:=(l+p) div 2;
if a=t[sr] then BinarySearch:=sr else
if a>t[sr] then l:=sr+1 else p:=sr-1;
until (a=t[sr]) or (l>p);
end;
begin
clrscr;
write('podaj n: ');
readln(n);
los(a,n);
wypis(a,n);
MinMax(1,n,mini,maksi);
writeln('Min: ',mini);
writeln('Max: ',maksi);
BubbleSort(a,n);
wypis(a,n);
write('Podaj szukana liczbe: ');
readln(k);
writeln('Indeks szukanego elementu: ',BinarySearch(a,n,k));
readkey;
end.