Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети


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


Download 1.52 Mb.
Pdf ko'rish
bet55/77
Sana03.02.2023
Hajmi1.52 Mb.
#1152062
TuriРешение
1   ...   51   52   53   54   55   56   57   58   ...   77
Bog'liq
Задачи на Pascal

Задача № 40. Вывести на экран произведение четных элементов заданной последо-
вательности натуральных чисел 
Формулировка. Дана последовательность натуральных чисел, ограниченная вводом нуля. 
Вывести на экран произведение четных элементов этой последовательности. При этом ноль не счи-
тается членом последовательности. 
Примечание: задачи подобного рода требуют выполнения каких-либо действий в зависимости 
от некоторого характеристического свойства. Большинство из них математически неинтересны, од-
нако развивают способность совмещать отдельные приемы и методы программирования, поэтому, 
в основном, способствуют наработке опыта. 
Решение. Так как нам заранее неизвестна длина рассматриваемой последовательности, но мы 
знаем о том, что она ограничивается вводом нуля, и поэтому можем сделать цикл с предусловием 


Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 
50 
< > 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; 



Download 1.52 Mb.

Do'stlaringiz bilan baham:
1   ...   51   52   53   54   55   56   57   58   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling