Задача № 40. Вывести на экран произведение четных элементов заданной последовательности натуральных чисел



Формулировка. Дана последовательность натуральных чисел, ограниченная вводом нуля. Вывести на экран произведение четных элементов этой последовательности. При этом ноль не считается членом последовательности.

Примечание: задачи подобного рода требуют выполнения каких-либо действий в зависимости от некоторого характеристического свойства. Большинство из них математически неинтересны, однако развивают способность совмещать отдельные приемы и методы программирования, поэтому, в основном, способствуют наработке опыта.

Решение. Так как нам заранее неизвестна длина рассматриваемой последовательности, но мы знаем о том, что она ограничивается вводом нуля, и поэтому можем сделать цикл с предусловием a < > 0, где a – текущий введенный член. Так как нет необходимости работать с несколькими членами одновременно, мы можем следовать данной схеме и в конкретный момент времени работать лишь с одним элементом последовательности.

При всем этом перед циклом нам необходимо считать первый член a, чтобы войти в цикл, если последовательность непустая (а если пустая, то есть состоит из одного нуля, то и не нужно входить в цикл и что-либо делать):

read(a);

while a <> 0 do begin

...

read(a)

end;

Кстати, мы используем оператор ввода read, чтобы можно было вводить члены через пробел, а не через enter, как при использовании readln. Внутри цикла вместо многоточия должна располагаться некоторая последовательность операторов, которые и будут выполнять обработку вводимых данных. После каждой итерации необходимо ввести следующий член последовательности и продолжить обработку, если он не равен нуля, и закончить в противном случае.

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

Что же касается текущей задачи, то для ее решения мы в цикле должны проверить каждый элемент на четность, и если он четный, домножить на него некоторую переменную prod для накопления результата (которую поначалу нужно сделать равной 1). При этом если по завершении программы переменная prod будет по-прежнему равна 1, то это значит, что последовательность либо пуста, либо в ней нет четных элементов, что побуждает сделать в этом случае соответствующую проверку с выводом результата или сообщения об отсутствии элементов. В связи с написанным возникает такой код:

read(a);

prod := 1;

while a <> 0 do begin

if a mod 2 = 0 then prod := prod * a;

read(a)

end;

if prod <> 1 then writeln(prod) else writeln(' No such elements!');

При этом проверяется неравенство prod единице, так как хотелось бы поместить в then-блоке условного оператора вывод «положительного» ответа (который отвечает критерию задачи), а в else-блоке – обработку «вырожденного случая». На самом же деле такой порядок не должен быть самоцелью и не считается «хорошим тоном» в программировании, да и делается только по прихоти автора, так что не было бы никакой разницы, если бы в последней строчке было:

if prod = 1 then writeln(' No such elements!') else writeln(prod);

Код :

1. program ProductOfEven; 2. 3. var 4.   a, prod: word; 5. 6. begin 7.   read(a); 8.   prod := 1; 9.   while a <> 0 do begin 10.     if a mod 2 = 0 then prod := prod * a; 11.     read(a) 12.   end; 13.   if prod <> 1 then writeln(prod) else writeln(' No such elements!') 14. end.

Задача № 41. Вывести на экран произведение двузначных элементов последовательности натуральных чисел, которые делятся на заданное число

Формулировка. Дано натуральное число n, а затем последовательность натуральных чисел, ограниченная вводом нуля. Вывести на экран произведение двузначных элементов этой последовательности, которые делятся на n.

Решение. Задача очень похожа на предыдущую, только в этот раз нам необходимо проверять делимость не на 2 (это было условие четности), а на n. К тому же, мы должны рассматривать только двузначные члены. Для выявления двузначного числа мы, однако, не будем считать его разрядность и сравнивать ее с двойкой, а воспользуемся тем, что любое двузначное число больше 9 и меньше 100.

В связи с этим условие поиска члена последовательности, отвечающего заданным критериям, будет выглядеть так: ( a > 9) and ( a < 100) and ( a mod n = 0).

Напомним, что and – это конъюнкция, причем наше выражение содержит три конъюнктивных члена, так как операция применяется дважды. Оно истинно тогда и только тогда, когда истинны все три члена, и ложно во всех остальных случаях. При этом конъюнктивные члены стоят в скобках, так как логические операции в языке Pascal имеют больший приоритет, чем операции сравнения и арифметические операции. То есть, если опустить скобки, то Pascal, вычисляя значение слева направо, выполнит сначала операции 9 and a, 100 and a и т. д., что в корне неправильно.

Код :


Дата добавления: 2018-10-25; просмотров: 480; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!