var
a:array[1..10]of integer; {массив чисел}
i:integer; {для цикла}
{ процедура сортировки массива a[1..10] МЕТОДОМ ПУЗЫРЬКА }
PROCEDURE sort;
var
flag:boolean;
tmp:integer;
BEGIN
repeat
flag:=false;
for i:=1 to 10-1 do if a[i]>a[i+1] then
begin
tmp:=a[i];
a[i]:=a[i+1];
a[i+1]:=tmp;
flag:=true;
end;
until not flag;
END;
{функция БИНАРНОГО ПОИСКА числа в массиве a[1..10]}
FUNCTION search(const x:integer):boolean; { x - искомое число }
var
l,r,c:integer;
flag:boolean;
n:integer;
BEGIN
l:=1;
r:=10;
flag:=false;
repeat
c:=round((r-l)/2)+l;
if a[c]=x then flag:=true else
if x<a[c] then r:=c-1 else l:=c+1;;
until (l>r)or flag;
search:=flag; {если число x найдено в массиве a[1..10], то TRUE}
END;
PROCEDURE search_00; {поиск по условию задачи}
var
j:integer;
Y,x:integer;
flag_found:boolean;
BEGIN
write('Найти в массиве два числа сумма которых равна: ');
readln(Y);
j:=0;
repeat
inc(j);
x:=Y-a[j];
flag_found:=search(x);
until flag_found or(j=10);
if flag_found then writeln('Такие числа найдены: ',a[j],'+',x,'=',Y)
else writeln('Числа чтобы a + x = ',Y,' не найдены.')
END;
BEGIN
randomize;
for i:=1 to 10 do a[i]:=random(90)+10; {массив из любых двух знаковых чисел}
writeln('До сортировки:');
for i:=1 to 10 do write(' ',a[i]);
writeln;
sort;
writeln('После сортировки по возрастанию:');
for i:=1 to 10 do write(' ',a[i]);
writeln;
writeln;
search_00; {поиск по условию задачи}
END.
В данной задаче реализованы: сортировка методом «пузырька» и метод бинарного поиска.