Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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;

Ещё пример задания:

Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости ( x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:

var x, y: real;

Begin






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.