Примеры программ поиска
Приведена подборка самых известных задач и их решения для поиска Программы реализованы на сзыке Паскаль. Будет полезно студентам, школьникам и преподавателям.
Пример. Линейный поиск первого вхождения
Пример. Линейный поиск первого вхождения
program Poisk1;
var A:array[1..100] of integer;
N,X,i:integer;
begin
read (N);{N<=100}
for i:=1 to N do read(A[i]);
read(X);
i:=1; {i:=0;}
while (i<=N) and (A[i]<>X) do i:=i+1;
{repeat i:=i+1; until (i>N) or (A[i]=X);}
if i<=N then write('первое вхождение ',X,'в массив A на ',i,' месте')
else write('не нашли');
end.
Пример. Линейный поиск последнего вхождения
program Poisk2;
var A:array[1..100] of integer;
N,X,i:integer;
begin
read(N); {N<=100}
for i:=1 to N do read(A[i]);
read(X);
i:=N; {i:=N+1;}
while (i>=1) and (A[i]<>X) do i:=i-1;
{repeat i:=i-1; until (i<1) or (A[i]=X);}
if i>=1 then write('последнее вхождение ',X,'
в массив A на ',i,' месте')
else write('не нашли');
end.
Пример. Поиск с барьером
program Poisk2a;
var A:array[1..101] of integer;
N,X,i:integer;
begin
read(N); {N<=100}
for i:=1 to N do read(A[i]);
read(X);
A[N+1]:=X; {установка барьера}
i:=1; {i:=0;}
while A[i]<>X do i:=i+1;
{repeat i:=i+1; until A[i]=X;}
if i<=N then write('первое вхождение ',X,'в массив A на ',i,' месте')
else write('не нашли');
end.
Пример. Поиск в массиве, упорядоченном по возрастанию сумм цифр элементов массива, по-следнего числа с суммой цифр равной X.
program Poisk3b;
var A:array[1..100] of integer;
N,X,left,right:integer;
{функция считает сумму цифр числа a, здесь a - локальная переменная}
function Sum(a:integer):integer;
var s:integer;
begin
s:=0; a:=abs(a);
while a>0 do
begin
s:=s + a mod 10;
a:=a div 10;
end;
Sum:=s;
end;
begin
read(N); {N<=100}
write('введите масив, упорядочен. по возрастанию сумм цифр');
{например, для N=4 : 122, -432, 88, 593}
for i:=1 to N do read(A[i]);
read(X);
left:=1; right:=N;
{левая и правая граница фрагмента для поиска}
while left=Sum(A[c]) then left:=c
{выбираем правую половину с серединой, меняя left}
else right:=c-1;
{выбираем левую половину без середины, меняя right}
end;
if X=Sum(A[left]) then {здесь left = right, но не всегда = c}
write('последнее число с суммой цифр=',X,' равно',A[left], '
находится в массиве A на ',left,' месте')
else write('не нашли');
end.
Задача. Ввести последовательность из n чисел x1, х2,..., хn, n<200. Найти минимальное и мак-симальное из них.
Program Minmax;
Const
Nmax=200;
Var
X : Array [1..Nmax] Of Real;
Min, Max : Real;
N, i : Integer;
Begin
Writeln('Введите количество чисел');
Readln(n);
Writeln('Вводите элементы массива');
For i := 1 To n Do
Read(X[i]);
Min := X[1];
Max := X[1];
For i : =2 To n Do
If Max < X[i] Then
Max := X[i]
Else
If Min > X[i] Then
Min :=X [i];
Writeln ('Min= ', Min:8;2,'Max= ', Max:8:2);
End.
Задача 2. Найти минимум в последовательности из n чисел (n>=100) и номер минимального числа.
Program Minimum;
Const
Nmax = 100;
Var
X : Array[1..Nmax] Of Real;
Min : Real;
n, i, Imin : Integer;
Begin
Writeln('Введите количество чисел');
Readln(n);
Writeln('Вводите элементы массива');
For i:=1 To n Do
Read(X[i]);
Min := X[1];
Imin := 1;
For i := 2 To n Do
If Min > X[i] Then
Begin
Min := X[i];
Imin := i;
End;
Writeln('Минимум = ', Min:8:2, ' Номер = ', Imin)
End.
