![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
S: integer;
Begin Readln(N); (1) s: = 0; (2) while N > 1 do begin (3) if N mod 2 = 0 then begin (4) s: = N mod 10; (5) End; (6) N: = N div 10; (7) End; (8) Write(s); (9) End. Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе числа 1984. 2. Приведите пример числа, при вводе которого программа выдаст верный ответ. 3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться. Решение: 11) начнем с того, что разберёмся в условии задачи: ограничение N < 109 введено для того, чтобы число поместилось в 4-байтовую переменную целого типа, для совместимости со всеми трансляторами Паскаля соответствующая переменная объявлена как longint 12) теперь разберём программу; строка (1) – это ввод исходного числа; очевидно, что переменная s – это результат, поскольку именно она выводится в строке (9) 13) в строке (2) переменная s обнуляется, это естественно при накоплении суммы 14) строки (3)-(8) – это цикл, который выполняется пока N > 1; на каждом шаге цикла N делится на 10 нацело, то есть, из десятичной записи числа отбрасывается последняя цифра (строка (7)); такой цикл используется для того, чтобы перебрать все цифры числа, но обычно ставят условие «N > 0», поскольку в приведенном варианте цикл остановится при N = 1; однако в данном случае это не влияет на результат, поскольку по условию нас интересуют только чётные цифры, а 1 – нечётная 15) в строке (4) проверяется чётность числа (и одновременно чётность его последней цифры!), если число чётное, в строке (5) в переменную s записывается остаток от деления числа на 10, то есть последняя цифра десятичной записи этого числа 16) таким образом, после выполнения цикла будет выведена последняя рассмотренная цифра, для которой сработает условие в строке (4) 17) поскольку цифры перебираются с конца, выводится первая чётная цифра в записи числа 18) начнём выполнять задание: 1. При вводе числа 1984 будет выведено число 8 – значение первой чётной цифры числа. 19) когда программа выдаст верный ответ? очевидно, что тогда, когда сумма чётных цифр и значение первой чётной цифры совпадают; это возможно, если в числе · нет чётных цифр (сумма останется равной 0) · все чётные цифры – нули · одна чётная цифра · одна ненулевая чётная цифра, а нули стоят после неё (нули не меняют суммы!) 2. Программа выдаст правильный ответ для N = 1981. 20) как исправить программы? очевидно, нужно, чтобы она считала сумму чётных цифр, то есть, получив очередную чётную цифру, нужно добавить её к «старому» значению переменно s, изменив строку (5) так: s: = s + N mod 10; (5) 3. Ошибка допущена в строке s: = N mod 10; Эта строка должна в правильной программе выглядеть так s: = s + N mod 10; Ещё пример задания:
var x, y: real; Begin
|