Примеры программ поиска
Приведена подборка самых известных задач и их решения для поиска Программы реализованы на сзыке Паскаль. Будет полезно студентам, школьникам и преподавателям.
Пример. Линейный поиск первого вхождения
Пример. Линейный поиск первого вхождения
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Задача. Ввести последовательность из n чисел x1, х2,..., хn, n<200. Найти минимальное и мак-симальное из них.=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.
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.