Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети
Задача № 40. Вывести на экран произведение четных элементов заданной последо-
Download 1.52 Mb. Pdf ko'rish
|
Задачи на Pascal
- Bu sahifa navigatsiya:
- Решение.
- Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 50 0 , где a
Задача № 40. Вывести на экран произведение четных элементов заданной последо-
вательности натуральных чисел Формулировка. Дана последовательность натуральных чисел, ограниченная вводом нуля. Вывести на экран произведение четных элементов этой последовательности. При этом ноль не счи- тается членом последовательности. Примечание: задачи подобного рода требуют выполнения каких-либо действий в зависимости от некоторого характеристического свойства. Большинство из них математически неинтересны, од- нако развивают способность совмещать отдельные приемы и методы программирования, поэтому, в основном, способствуют наработке опыта. Решение. Так как нам заранее неизвестна длина рассматриваемой последовательности, но мы знаем о том, что она ограничивается вводом нуля, и поэтому можем сделать цикл с предусловием a Данил Душистов: «Решение 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; |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling