Решение С1 Золотарева Е.В.
Требовалось написать программу, которая вводит с клавиатуры натуральное число N, не превышающее 10 9, и выводит сумму чётных цифр в десятичной записи этого числа или 0, если чётных цифр нет. Программист торопился и написал программу неправильно. Вот она: var N: longint; 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. Напишите, что выведет эта программа при вводе числа Приведите пример числа, при вводе которого программа выдаст верный ответ. 3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
С1 var x: real; begin readln(x); if x>=-3 then if x<=9 then if x>1 then write('не принадлежит') else write('принадлежит') end. В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» Если программа ничего не выводит, напишите «» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет». Х>=-3 Х<=9 Х>1 ДА НЕ принадлежит принадлежит НЕТ
Обл Усл 1 (x>=-3) Усл 2 (x<=9) Усл 3 (x>1) Программа выдает Область обрабатывается верно АНет---нет ВДа Нет ПринадлежДа С Не принадл Да D Не принадл Нет EДа Нет-- Х>=-3 Х<=9 Х>1 ДА Не принадл принадл НЕТ
С1 var x: real; begin readln(x); if x>=-3 then if x<=9 then if x>1 then write('не принадлежит') else write('принадлежит') end. If (x=>-3) and (x =5) and (x<=9) then write (принадлежит) else write (не принадлежит);
var x,y: real; begin readln(x,y); if y>=x then if y>=0 then if y<=2-x*x then write('принадлежит') else write('не принадлежит') end. У>=Х У>=0 У<=2- x*x ДА Принадлеж ит Не принадлежит НЕТ
Обл аст ь y>= x? y>=0 ? y<=2- x*x? вывод верно ? Aда нет не принадлда B нет–– C ––– D ––– Eда принадлда F нет–– G ––– У>=Х У>=0 У<=2- x*x ДА НЕТ
var x,y: real; begin readln(x,y); if y>=x then if y>=0 then if y<=2-x*x then write('принадлежит') else write('не принадлежит') end. (y =x) or (y>=0))
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (х, у - действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Ученик написал такую программу: var x, y: real; begin readln(x,у); if у >= x*x-6 then begin if x*x + у* у <=16 then write('принадлежит') end else if x >= 0 then write('принадлежит') else write('не принадлежит') end. При проверке работы программа выполнялась по шагам для некоторых контрольных значений х и у, при этом был заполнен протокол тестирования. В результате неаккуратного обращения протокол был испорчен, частично сохранились только четыре строки:
Область Условие 1 (y >= x*x-6) Условие 2 (x*x+y*y <= 16) Условие 3 (x >= 0) Вывод Верно да принадлежит нет не принадлежит да – Последовательно выполните следующее. Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе « Область » любую из этих областей. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Область Условие 1 (y >= x*x-6) Условие 2 (x*x+y*y <= 16) Условие 3 (x >= 0) Вывод Верно да принадлежит нет не принадлежит да – У>=x*x-6 x 2 +y 2 <16 X>=0 НЕТДА НЕТ