Задание 4 Вариант 2 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)
Запишите текст программы.
В данной программе в качестве данных вводятся случайные значения из определенного диапазона. Эти данные скорее всего обозначают «виртуальных» учеников. Сделано это чтобы не вводить вручную 30 значений. Значения можно ввести и из подготовленных файлов Input.txt.
program s5_v2_4;
const
n = 30;
var
a, b: array[1..n] of real;
sr, sw, srr, srw: real;
f: boolean;
i: integer;
begin
writeln(‘Ввод массивов’);
for i := 1 to n do
begin
a[i] := random * 2 + 1;//массив значений роста
b[i] := random * 60//массив значений веса
end;
//вывод исходных массивов
for i := 1 to n do
write(a[i]:2:2, ‘ ‘);
writeln;
for i := 1 to n do
write(b[i]:2:2, ‘ ‘);
sr := 0; // сумма значений роста
sw := 0; // сумма значений веса
for i := 1 to n do
begin
sr := sr + a[i];
sw := sw + b[i]
end;
srr := sr / n; //средний рост
srw := sw / n; //средний вес
writeln;
writeln(srr:6:2, ‘ ‘, srw:6:2);
f := false;
for i := 1 to n do
if (abs(a[i] — srr) < 0.1) and (abs(b[i] - srw) < 0.1) then f := true;
if f then writeln('есть') else writeln('нет')
end.
Пояснение.
Сравнение вещественных чисел можно проводить только с точностью до какого-то значения. В программе это точность равна 0.1. Для уменьшения точности отбора можно увеличить эту величину, для увеличения точности - уменьшить.
abs(a[i] - srr) < 0.1 – сравнение двух вещественных чисел.
Нужно найти средние значения роста и веса для 30 учеников, а затем проверить, есть ли среди них ученик, у которого рост и вес одновременно совпадают со средними значениями с учётом небольшой погрешности.
Сначала заполняем два массива: $$a[i]$$ — рост, $$b[i]$$ — вес. Затем находим суммы и делим их на $$n=30$$:
$$s_r=\frac{\sum a[i]}{n}, \quad s_w=\frac{\sum b[i]}{n}$$
После этого просматриваем все элементы массивов и проверяем условие:
$$|a[i]-s_r|<0.1 \land |b[i]-s_w|<0.1$$
Если такой ученик найден, выводится есть, иначе — нет.
program s5_v2_4;
const
n = 30;
var
a, b: array[1..n] of real;
sr, sw, srr, srw: real;
f: boolean;
i: integer;
begin
writeln(‘Ввод массивов’);
for i := 1 to n do
begin
a[i] := random * 2 + 1; {массив значений роста}
b[i] := random * 60; {массив значений веса}
end;for i := 1 to n do
write(a[i]:2:2, ‘ ‘);
writeln;
for i := 1 to n do
write(b[i]:2:2, ‘ ‘);sr := 0;
sw := 0;
for i := 1 to n do
begin
sr := sr + a[i];
sw := sw + b[i];
end;srr := sr / n;
srw := sw / n;
writeln;
writeln(srr:6:2, ‘ ‘, srw:6:2);f := false;
for i := 1 to n do
if (abs(a[i] — srr) < 0.1) and (abs(b[i] — srw) < 0.1) then f := true;if f then writeln(‘есть’) else writeln(‘нет’);
end.
Сравнение вещественных чисел выполняется с точностью до $$0.1$$, потому что при вычислениях средних значений возможны небольшие погрешности.
Ответ
Программа составлена.