Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
контрольная работа 7.doc
Скачиваний:
3
Добавлен:
14.08.2019
Размер:
72.7 Кб
Скачать

Задача 7.

const

MAX = 100;

type

TArray = array[1..MAX] of real;

var

n : integer; { количество элементов массива }

A : TArray; { массив исходных данных }

i : integer;

l, r : integer;

min_el, max_el : real; { минимальный и максимальный элементы }

begin

{ ввод исходных данных }

repeat

write('Введите количество элементов массива, N: ');

readln(n);

until (n > 2) and (n <= MAX);

writeln('Ввод элементов массива:');

for i:=1 to n do read(A[i]);

writeln;

{ поиск минимального элемента }

l := 2;

r := n-1;

while l <= r do

begin

i := (l + r) div 2;

if A[i-1] > A[i+1] then l := i + 1

else r := i - 1;

end;

min_el := A[i];

{ поиск максимального элемента }

l := 2;

r := n-1;

while l <= r do

begin

i := (l + r) div 2;

if A[i-1] < A[i+1] then l := i + 1

else r := i - 1;

end;

max_el := A[i];

writeln('Минимальный элемент: ', min_el:0:4);

writeln('Максимальный элемент: ', max_el:0:4);

end.

Задача 8.

const

MAX = 100;

type

TArray = array[1..MAX] of real;

var

n, m : integer; { количество элементов массива }

I, j : integer; { параметры циклов }

A, B : TArray; { массивы исходных данных }

k : integer; { количество барьерных элементов }

begin

{ ввод исходных данных }

repeat

write('Введите количество элементов массива A, N: ');

readln(n);

until (n > 0) and (n <= MAX);

writeln('Ввод элементов массива A:');

for i:=1 to n do read(A[i]);

writeln;

repeat

write('Введите количество элементов массива B, M: ');

readln(m);

until (m > 0) and (m <= MAX);

writeln('Ввод элементов массива B:');

for i:=1 to m do read(B[i]);

writeln;

i := 1; { индекс в массиве A }

j := 1; { индекс в массиве B }

k := 0; { количество совпадений }

while (i <= n) and (j <= m) do

begin

if A[i] = B[j] then

begin

write(i, ' '); { вывести индекс элемента массива A }

i := i + 1;

j := j + 1;

k := k + 1;

end

else

if A[i] < B[j] then

i := i + 1 { перейти к следующему элементу в массиве A }

else

j := j + 1; { перейти к следующему элементу в массиве B }

end;

if k = 0 then writeln('Нет совпадений.')

else writeln;

end.

Задача 9

const

MAX = 100;

type

TArray = array[1..MAX] of integer;

var

n : integer; { количество элементов массива }

I : integer; { параметр цикла }

A : TArray; { массив исходных данных }

{ функция поиска в массиве Arr, содержащего n элементов, числа i которое удовлетворяет условию A[i] = i. В случае отсутствия такого числа возвращается -1. Функция использует метод половинного деления }

function search(const Arr : TArray; n : integer) : integer;

var

l, r, i : integer;

begin

l := 1;

r := n;

while l <= r do

begin

i := (l + r) div 2;

if Arr[i] = i then

begin

search := i;

exit;

end

else

if Arr[i] < i then l := i + 1

else r := i - 1;

end;

search := -1;

end;

begin

{ ввод исходных данных }

repeat

write('Введите количество элементов массива A, N: ');

readln(n);

until (n > 0) and (n <= MAX);

writeln('Ввод элементов массива A:');

for i:=1 to n do read(A[i]);

writeln;

i := search(A, n);

if i = -1 then writeln('Число i не найдено.')

else writeln('Число i равно ', i);

end.