Примеры программ поиска

Приведена подборка самых известных задач и их решения для поиска Программы реализованы на сзыке Паскаль. Будет полезно студентам, школьникам и преподавателям.

Пример. Линейный поиск первого вхождения
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.
Онлайн всего: 3
Гостей: 3
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте