Categories: ОГЭ

Задача 20.2 ГИА по информатике

Рассмотрим одну из задач части 3 ГИА по информатике.

На момент написания статьи она имела номер 20.2 в КИМ.

Задача.

Напишите программу, которая в последовательности целых чисел определяет количество чётных чисел, кратных 7. Программа получает на вход целые числа, количество введённых чисел неизвестно, последовательность чисел заканчивается числом 0 (0 – признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введённые числа по модулю не превышают 30 000. Программа должна вывести одно число: количество чётных чисел, кратных 7.

Решение

Я приведу свой метод рассуждений для решения этой задачи.

В задаче не сказано, сколько чисел вводится, зато известно условие, при котором заканчивается последовательность чисел (0 — признак окончания ввода). Для таких целей используется цикл с пред- или пост- условием. Т.е. такие циклы выполняются в зависимости от условия. Если бы нам было известно количество вводимых символов, мы бы использовали цикл со счетчиком (цикл FOR).

Цикл с предусловием  (тело цикла выполняется пока условие ИСТИНО)

WHILE {условие} do

begin

{тело цикла}

end;

Цикл с постусловием  (тело цикла выполняется до тех пор пока условие ЛОЖНО)

REPEAT  

{тело цикла}

UNTIL {условие} ;

Цикл со счетчиком  (тело цикла выполняется определенное количество раз (n))

FOR i:=1 TO n do

BEGIN

{тело цикла}

END;

 В нашем случае последовательность чисел вводится до тех пор, пока не будет введен ноль. Как только будет введен ноль, мы выйдем из цикла. Для осуществления этого нам больше всего подходит цикл WHILE («пока» с англ.).

Запишем это условие на языке программирования:

WHILE  a <> 0 DO

BEGIN

READLN(a);

END;

Итак, в цикле мы будем вводить значения для переменной a до тех пор, пока не введем ноль. Но есть проблема. Откуда условию будет известно, чему равно значение переменной а, если мы его еще не ввели. Поэтому нам придется до цикла еще раз использовать оператор READLN(A)  для ввода значения для переменной а.

READLN(a);

WHILE  a <> 0 DO

BEGIN

READLN(a);

END;

Перейдем к условию задачи. Что нам нужно сделать с введенными числами?

«последовательности целых чисел определяет количество чётных чисел, кратных 7» — вот ответ на наш вопрос. Таким образом, нам необходимо проверять условия:

  1. четное число или нет,
  2. кратно ли числу 7 или нет

и посчитать количество таких чисел.

Для проверки нам понадобится такая конструкция как УСЛОВИЕ

IF {условие} THEN 

BEGIN

{действия, если условие ИСТИНО};

END;

(если действие одно, то операторные скобки begin.. end можно опустить)

Перепишем то, что мы уже имеем и добавим условие с проверкой на четность и кратность 7. Для этого используем оператор остатка от деления MOD. Мы имеем два условия, они будут связываться оператором AND, так как нам необходимо выполнения этих 2-х условий одновременно. Если бы требовалось выполнение хотя бы одного из условий, мы бы использовали логический оператор OR.

Добавим условие в тело цикла перед оператором READLN. Позже скажу почему.

READLN(a);
WHILE  a <> 0 DO
BEGIN
IF (a MOD 2=0) AND (a MOD 7=0) THEN 
BEGIN
{действия, если условие ИСТИНО};
END;
READLN(a);
END;

Осталось определится: какие же действия должны выполняться если условие ИСТИНО. В задаче требуется найти количество элементов, удовлетворяющие условию.

Запомни:

  • подсчет количества по формуле  N:=N +1
  • подсчет суммы по формуле S:=S+a

Нам требуется найти количество, поэтому запишем эту формулу в действие для УСЛОВИЯ.

READLN(a);
WHILE  a <> 0 DO
BEGIN
IF (a MOD 2=0) AND (a MOD 7=0) THEN 
BEGIN
N:=N+1; {счетчик, прибавляет к переменной 1, если условие выполняется}
END;
READLN(a);
END;

Осталось вывести результат с помощью оператора WRITELN(N). Результатом будет являтся значение переменной N.

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

VAR a,N: integer; {берем целые числа - задано в условии}
BEGIN
N:=0 {инициализация переменной - задаем начальное значение}
READLN(a);
WHILE  a <> 0 DO
BEGIN
IF (a MOD 2=0) AND (a MOD 7=0) THEN 
BEGIN
N:=N+1; {счетчик, прибавляет к переменной 1, если условие выполняется}
END;
READLN(a);
END;
WRITELN(N);
END.
Andrey K

View Comments

  • У вас ошибка, перед оператором While нужно было присвоить k:=0. Если я не прав, то отпишитесь. Возможно его не обязательно присваивать?

Recent Posts

Решение задачи №6 и задачи №22 ЕГЭ по информатике 2021

Настала пора написать серию мини-обучалок по решению задач ЕГЭ по информатике версии 2021 года. В…

4 года ago

Внеурочное занятие по информатике. Пишем игру «Поле чудес» на Python.

Данная статья будет полезна для учителей информатики, которые занимаются программированием с детьми внеурочно. Опыт  показывает, …

5 лет ago

Основные алгоритмы в помощь школьнику. Часть 1

Рассмотрим набор наиболее часто встречающихся задач на программирование в школьном курсе информатики. Добавляйте свои задачи…

6 лет ago

Школьный тур Всероссийской олимпиады школьников по информатике 9-11 класс (2018-2019). Разбор задач. Часть 2

В прошлый раз мы разобрали первые две задачи школьного тура Всероссийской олимпиады школьников, проводимой в…

6 лет ago

Школьный тур Всероссийской олимпиады школьников по информатике 9-11 класс (2018-2019). Разбор задач. Часть 1

Закончился школьный тур Всероссийской олимпиады школьников. Разберем первую и вторую задачи тура, проводимого в московских…

6 лет ago

Школьный этап Всероссийской олимпиады школьников по информатике 2017 (9-11 классы). Задача №4. «Плацкартный вагон»

Задача. В плацкартном вагоне 54 места, пронумерованных числами от 1 до 54. Вагон разбит на 9…

7 лет ago