Рассмотрим одну из задач части 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» — вот ответ на наш вопрос. Таким образом, нам необходимо проверять условия:
и посчитать количество таких чисел.
Для проверки нам понадобится такая конструкция как УСЛОВИЕ
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;
Осталось определится: какие же действия должны выполняться если условие ИСТИНО. В задаче требуется найти количество элементов, удовлетворяющие условию.
Запомни:
Нам требуется найти количество, поэтому запишем эту формулу в действие для УСЛОВИЯ.
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.
Настала пора написать серию мини-обучалок по решению задач ЕГЭ по информатике версии 2021 года. В…
Данная статья будет полезна для учителей информатики, которые занимаются программированием с детьми внеурочно. Опыт показывает, …
Рассмотрим набор наиболее часто встречающихся задач на программирование в школьном курсе информатики. Добавляйте свои задачи…
В прошлый раз мы разобрали первые две задачи школьного тура Всероссийской олимпиады школьников, проводимой в…
Закончился школьный тур Всероссийской олимпиады школьников. Разберем первую и вторую задачи тура, проводимого в московских…
Задача. В плацкартном вагоне 54 места, пронумерованных числами от 1 до 54. Вагон разбит на 9…
View Comments
У вас ошибка, перед оператором While нужно было присвоить k:=0. Если я не прав, то отпишитесь. Возможно его не обязательно присваивать?
Обязательно.