Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети
Download 1.52 Mb. Pdf ko'rish
|
Задачи на Pascal
- Bu sahifa navigatsiya:
- Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 59
задачах 32, 43 и 44, с некоторым, однако,
изменением инициализации входных значений переменных. Напоследок необходимо позаботиться о правильной обработке вырожденных случаев. Будем считать последовательность из единственного нуля не строго монотонной, в отличие от последова- тельности из одного члена. Она, кстати, итак уже будет обрабатываться корректно: в a вводится некоторое число, а в b вводится 0. При этом не осуществляется вход в основной цикл, и программа переходит к выводу выражения b = 0, которое верно. Сделаем корректной обработку пустой последовательности. Во-первых, необходимо дать воз- можность ввода таковой, так как в нашем наброске требуется ввод минимум двух чисел. Для этого мы будем считывать сначала a, и если оно отлично от нуля, то считывать b: read(a); if a <> 0 then read(b) else b := 0; При этом если a = 0, то мы обязательно присваиваем значение 0 переменной b, чтобы она была определена, и гарантированно не было входа в цикл. Однако в этом случае вывод выражения b = 0 повлечет вывод true. Чтобы избежать этого, нужна еще одна проверка: если a = 0, то присвоить b натуральное число, отличное от 0 (например, 1), что повлечет вывод false: if a = 0 then b := 1; Код: 1. program MonotonicSequence; Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 59 2. 3. var 4. a, b: word; 5. delta: integer; 6. 7. begin 8. read(a); 9. if a <> 0 then read(b) else b := 0; 10. delta := a - b; 11. while b <> 0 do begin 12. if delta * (a - b) <= 0 then break; 13. a := b; 14. read(b) 15. end; 16. if a = 0 then b := 1; 17. writeln(b = 0) 18. end. Стоит отметить, что на первом шаге в основном цикле значение a и b еще не изменено, и грубо говоря, delta в строке 12 умножается само на себя. Это нужно для того, чтобы обеспечить правиль- ную обработку последовательности из двух одинаковых чисел, которая не является строго моно- тонной. Например, если на вход подается последовательность k k 0, k – некоторое натуральное число, то delta будет равно 0 (строка 10), и при входе в цикл будет осуществлен выход по break ( строка 12), что повлечет вывод false, так как b отлично от 0. Если бы мы в цикле сначала осуществили сдвиг последовательности и ввод третьего члена (то есть, переместили бы строки 13-14 на одну позицию вверх, а строку 12 поместили бы после них), то по выходе из цикла через break b уже было бы равно 0, что повлекло бы вывод true, а это неверно. Download 1.52 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling