Задание №20.2 ОГЭ.Запись алгоритма на языке программирования

Второй вариант задания №20 ОГЭ по информатике и ИКТ, относящегося к высокому уровню сложности, предусматривает разработку и запись алгоритма на языке программирования.

Рассмотрим типовые задания тренировочных работ и разберем способы их решения.

Задание №20.2. Напишите программу, которая в последовательности натуральных чисел находит среднее арифметическое двухзначных чисел или сообщает, что таких чисел нет.

Программа получает на вход натуральные числа, количество введенных чисел неизвестно, последовательность заканчивается числом 0 (0 – признак окончания ввода, не является членом последовательности).

Количество чисел не превышает 100. Введенные числа не превышают 300. Программа должна вывести среднее арифметическое двухзначных чисел или вывести NO, если таких чисел в последовательности нет.

Решение.

1. Два предложения в последнем абзаце «Количество чисел не превышает 100. Введенные числа не превышают 300» указывают на два факта:

  • максимальное возможное количество двухзначных чисел в последовательности не превышает 100;
  • максимальная возможная сумма двухзначных чисел в последовательности не превышает 9900.

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

Для решения поставленной задачи определим количество чисел в последовательности, удовлетворяющих условию двузначности, и найдем их сумму. Количество будем накапливать в переменной count, а сумму — в переменной s. Текущий член последовательности, вводимый с клавиатуры, будем хранить в переменной num.

Поскольку «количество введенных чисел неизвестно», то в программе будем использовать цикл с предусловием while, работа которого прекращается, если введенный член последовательности будет равен 0.

Вывод результатов работы программы осуществим с помощью условного оператора if.

Приведем текст программы на языке программирования Паскаль

  • var
  • s, num, count: integer;
  • begin
  • s := 0;
  • readln(num);
  • count := 1;
  • while (num <> 0) do
  • begin
  • if (n > 9) and (n < 100) then
  • begin
  • s += num;
  • Inc(count);
  • end;
  • readln(num);
  • end;
  • if s = 0 then
  • writeln('NO')
  • else
  • writeln(s/(count - 1));
  • end.