Задача 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
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.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (6 голос, значение: 3,00 из 5)
Loading...Loading...
Вы можете оставить комментарий, или ссылку на Ваш сайт.
Комментарии:
Будь в центре футбольных трансферов. http://transfersfootball.ru/ самые горячие новости футбольных трансферов.

Оставить комментарий


+ восемь = 17

[sape count=3]