Лабораторная 9-10

Лабораторная работа №9-10. Исправление ошибок в простой программе с условными операторами.
Что нужно знать:
правила построения программы на Паскале, Python или Си
правила работы с переменными (объявление, ввод, вывод, оператор присваивания)
ветвление – это выбор одного из двух возможных вариантов действий в зависимости от того, выполняется ли некоторое условие;
на блок-схеме алгоритма ветвление изображается в виде блока-ромба с одним входом и двумя выходами:
13 SHAPE \* MERGEFORMAT 1415 13 SHAPE \* MERGEFORMAT 1415
если условие, записанное внутри ромба, истинно (ответ «да» на вопрос «a=b?»), выполняются все команды, входящие в блок-1 (ветка «да»), иначе (если условие ложно) выполняются все команды в блоке-2 (ветка «нет»)
в неполной форме условного оператора блок-2 пустой (отсутствует); теоретически можно сделать наоборот – так, чтобы блок-1 оказался пустой, но это очень неграмотное решение, поскольку оно осложняет понимание алгоритма, запутывает его
одна команда ветвления может находиться внутри другой, например, так:
13 SHAPE \* MERGEFORMAT 1415
на этой схеме блок-10 выполняется, когда a=b; блок-11 – когда a=b=c, блок-12 – когда a=b, но a(c и, наконец, блок-2 – когда a(b
на этой схеме (Рисунок 3) одна команда ветвления (с условием «a=c») вложена в другую (с условием «a=b»), каждая из них – это ветвление в полной форме; если блок-12 будет пустой (отсутствует), внутреннее ветвление имеет неполную форму; аналогично, если блок-2 пустой, то внешнее ветвление имеет неполную форму
условный оператор if–else служит для организации ветвления в программе на языке Паскаль
условный оператор может иметь полную или неполную форму; вот фрагменты программы, реализующие ветвления, показанные на рисунках 1 и 2:
полная форма:
неполная форма:

if a = b then begin
{ блок-1 }
end
else begin
{ блок-2 }
end;
if a = b then begin
{ блок-1 }
end;

здесь вместо комментариев в фигурных скобках (они выделены синим цветом) могут стоять любые операторы языка программирования (в том числе операторы присваивания, другие условные операторы, циклы, вызовы процедур и т.п.)
обычно при записи программы операторы, находящиеся внутри обоих блоков, сдвигают вправо на 2-3 символа (запись «лесенкой»), это позволяет сразу видеть начало и конец блока (конечно, если «лесенка» сделана правильно)
после else не надо (нельзя!) ставить какое-то условие, эта часть выполняется тогда, когда условие после if неверно (частая ошибка – после else пытаются написать условие, обратное тому, которое стоит после соответствующего ему if)
в Паскале перед else не ставится точка с запятой, поскольку это ключевое слово обозначает не начало нового оператора, а вторую часть условного оператора if–else
слова begin и end (их называют также «операторные скобки») ограничивают блок-1 и блок-2; если внутри блока всего один оператор, эти «скобки» можно не писать, например, допустимы такие операторы
if a = b then
c:=1
else c:=0;
if a = b then begin
c:=1;
end
else c:=0;
if a = b then c:=1;

а вот такие операторы недопустимы
if a = b then begin
c:=1
else c:=0;
if a = b then
c:=1;
end
else c:=0;
if a = b then
c:=1;
d:=1;
else x:=1;

в первом случае есть begin, но забыли про соответствующий ему end;
во втором фрагменте наоборот, есть end, а begin отсутствует;
if a = b then begin
c:=1;
d:=1;
end
else x:=1;

третий случай более сложный: судя по записи «лесенкой», здесь внутри блока-1 находятся 2 оператора, а операторных скобок begin-end нет; в результате получилось, что оператор c:=1 находится внутри блока-1, он выполняется только при условии a=b; оператор d:=1 выполняется всегда, после того, как условный оператор закончил работу; а else вообще «висит» непонятно как, тут транслятор выдаст ошибку; исправить эту программу можно так, как показано справа (добавив пару begin-end):
условный оператор может находиться внутри другого условного оператора, как в блоке-1, так и в блоке-2; например, схема на Рисунке 3 может быть записана на Паскале так:
if a = b then begin
{ блок-10 }
if a = c then begin
{ блок-11 }
end
else begin
{ блок-12 }
end;
end
else begin
{ блок-2 }
end;

ключевая тема этого задания ЕГЭ – использование вложенных условных операторов, причем в тексте задания фрагмент программы обычно записан без отступов «лесенкой» или с неправильными отступами, например, так:
if a = b then begin
if a = c then
c:=1;
end
else c:=0;
if a = b then
if a = c then
c:=1
else c:=0;

Чтобы разобраться с работой этих программ, нужно определить, к какому из условных операторов if относится часть else; для этого используют такое правило: «любой else относится к ближайшему if».
Рассмотрим фрагмент слева, в нем перед else стоит end, поэтому для него нужно найти соответствующий ему begin; таким образом определяем, что else относится к первому (внешнему) условному оператору.
В правом фрагменте перед else нет end, поэтому он относится к ближайшему по тексту внутреннему условному оператору.
Блок-схемы для двух фрагментов показаны ниже, желтым цветом выделен «переехавший» блок:
13 SHAPE \* MERGEFORMAT 1415 13 SHAPE \* MERGEFORMAT 1415

в условных операторах можно использовать сложные условия, которые строятся из простых отношений (<, <=, >, >=, =, <>) с помощью логических операций not («НЕ», отрицание), and («И», одновременное выполнение двух условий) и or («ИЛИ», выполнение хотя бы одного из двух условий)
в сложном условии сначала выполняются действия в скобках, потом – not, затем – and, затем – or и, наконец, отношения; операции равного уровня (приоритета) выполняются последовательно слева направо
поскольку отношения в Паскале имеют низший приоритет, в сложном условии их приходится брать в скобки:
if (a = b) or (b < c) and (c <> d) then begin
...
end;

в приведенном выше примере сначала определяются результаты сравнения (выражения в скобках), затем выполняется операция and («И»), а затем – or («ИЛИ»)
Примеры заданий:
На обработку поступает последовательность из четырёх неотрицательных целых чисел (некоторые числа могут быть одинаковыми). Нужно написать программу, которая выводит на экран количество нечётных чисел в исходной последовательности и максимальное нечётное число. Если нечётных чисел нет, требуется на экран вывести «NO». Известно, что вводимые числа не превышают 1000. Программист написал программу неправильно. Вот она:
const n = 4
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе последовательности: 2 9 4 3
2. Приведите пример такой последовательности, содержащей хотя бы одно нечётное число, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е приведите правильный вариант строки. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Решение:
обратим внимание на две строки в начале программы, которые начинаются с ключевого слова var: это не ошибка, такое повторение, действительно, допустимо в языке Паскаль; возможно, это была одна из ловушек разработчиков КИМ, которую они применили на реальном ЕГЭ-2014
теперь выполним программу для заданной последовательности 2 9 4 3, записывая все изменения переменных в таблицу:

условие
i
x
maximum
count
вывод

count:=0;




0


maximum:=999;



999



for i := 1 to n do

1





read(x);


2




if x mod 2 <> 0 then
нет






end

2





read(x);


9




if x mod 2 <> 0 then
да






count:=count+1;




1


if x > maximum then
нет






end

3





read(x);


4




if x mod 2 <> 0 then
нет






end

4





read(x);


3




if x mod 2 <> 0 then
да






count:=count+1;




2


if x > maximum then
нет






end

5





if count > 0 then
да






writeln(count);





2

writeln(maximum)





999

при ручной прокрутке программы мы увидели, что она правильно подсчитала количество нечётных чисел во входной последовательности, но неверно определила максимум: значение переменной maximum, которое было выведено на экран, осталось равным начальному значению 999, так как все остальные нечётные числа были меньше этого начального значения; поэтому ответ на п. 1 задания должен быть таким:
Программа выведет числа 2 и 999.
поскольку все числа по условию неотрицательны и не превышают 1000, программа всегда будет выдавать 999 вместо максимального нечётного числа; в то же время мы выяснили, что количество нечётных чисел в последовательности считается правильно; поэтому любая последовательность, содержащая 999, будет обрабатываться правильно
таким образом, правильный ответ на п. 2 должен быть таким:
Программа работает правильно для последовательности: 2 9 3 999.
теперь будем искать ошибки; как уже отмечалось, повторное использование ключевого слова var допустимо и указывать это в качестве ошибки нельзя!
как следует из результатов ручной прокрутки программы, во многих случаях она выдаёт неверный результат из-за того, что неверно задано начальное значение переменной maximum: оно должно быть меньше, чем любой возможный результат;
наименьшее нечётное неотрицательное число – это 1, поэтому можно принять в качестве начального значения maximum любое число, меньшее единицы (на самом деле, программа будет правильно работать и для 1), например:
Ошибка 1. maximum:=999;
Исправление: maximum:=0;
если теперь (с исправленной первой ошибкой) сделать ручную прокрутку программы, то мы увидим, что на последовательности 2 9 4 3 она выдает сначала 2, а потом – 4, то есть, значение максимума вычисляется опять неверно;
откуда появится число 4 в переменной maximum? оно будет записана в результате выполнения оператора if x > maximum then maximum:=i, который записывает в переменную maximum не значение полученного числа (x), а его номер (i); таким образом, мы нашли вторую ошибку:
Ошибка 2. if x > maximum then maximum:=i
Исправление: if x > maximum then maximum:=x
Требовалось написать программу, которая вводит с клавиатуры натуральное число N, не превышающее 109, и выводит сумму чётных цифр в десятичной записи этого числа или 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. Напишите, что выведет эта программа при вводе числа 1984.
2. Приведите пример числа, при вводе которого программа выдаст верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
Решение:
начнем с того, что разберёмся в условии задачи: ограничение N < 109 введено для того, чтобы число поместилось в 4-байтовую переменную целого типа, для совместимости со всеми трансляторами Паскаля соответствующая переменная объявлена как longint
теперь разберём программу; строка (1) – это ввод исходного числа; очевидно, что переменная s – это результат, поскольку именно она выводится в строке (9)
в строке (2) переменная s обнуляется, это естественно при накоплении суммы
строки (3)-(8) – это цикл, который выполняется пока N > 1; на каждом шаге цикла N делится на 10 нацело, то есть, из десятичной записи числа отбрасывается последняя цифра (строка (7)); такой цикл используется для того, чтобы перебрать все цифры числа, но обычно ставят условие «N > 0», поскольку в приведенном варианте цикл остановится при N = 1; однако в данном случае это не влияет на результат, поскольку по условию нас интересуют только чётные цифры, а 1 – нечётная
в строке (4) проверяется чётность числа (и одновременно чётность его последней цифры!), если число чётное, в строке (5) в переменную s записывается остаток от деления числа на 10, то есть последняя цифра десятичной записи этого числа
таким образом, после выполнения цикла будет выведена последняя рассмотренная цифра, для которой сработает условие в строке (4)
поскольку цифры перебираются с конца, выводится первая чётная цифра в записи числа
начнём выполнять задание:
1. При вводе числа 1984 будет выведено число 8 – значение первой чётной цифры числа.
когда программа выдаст верный ответ? очевидно, что тогда, когда сумма чётных цифр и значение первой чётной цифры совпадают; это возможно, если в числе
нет чётных цифр (сумма останется равной 0)
все чётные цифры – нули
одна чётная цифра
одна ненулевая чётная цифра, а нули стоят после неё (нули не меняют суммы!)
2. Программа выдаст правильный ответ для N = 1981.
как исправить программы? очевидно, нужно, чтобы она считала сумму чётных цифр, то есть, получив очередную чётную цифру, нужно добавить её к «старому» значению переменно 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
readln(x,y);
if y>=x then
if y>=0 then
if y<=2-x*x then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее:
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F и G). Точки, лежащие на границах областей, отдельно не рассматривать.
В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы) .
Решение:
начнем заполнять таблицу, выписывая истинность каждого из трёх условий
условие y>=x истинно выше прямой y=x, то есть в областях A, B, E, F
Область
y>=x?
y>=0?
y<=2-x*x?
вывод
верно?

A
да





B
да





C
нет





D
нет





E
да





F
да





G
нет





условие y>=0 истинно выше прямой y=0, то есть в областях A, E, G, однако это условие проверяется только тогда, когда первое условие, y>=x, истинно; поэтому для всех областей, где первое условие неверно (это области C, D, G), сразу в столбце второго условия ставим прочерк (условие не будет проверяться)
Область
y>=x?
y>=0?
y<=2-x*x?
вывод
верно?

A
да
да




B
да
нет




C
нет





D
нет





E
да
да




F
да
нет




G
нет





третье условие выполняется для областей «внутри» параболы, то есть для E, F, G, D; однако оно проверяется только тогда, когда первые два истинны (для А и Е), в остальных строках ставим прочерк:
Область
y>=x?
y>=0?
y<=2-x*x?
вывод
верно?

A
да
да
нет



B
да
нет




C
нет





D
нет





E
да
да
да



F
да
нет




G
нет





как следует из текста программы, она выведет что-то на экран только в том случае, когда выполняются первые два условия и программа выходит на третье: для области А будет выведено «не принадлежит», для области Е – «принадлежит», именно в этих двух случаях программа работает правильно, в остальных – нет:
Область
y>=x?
y>=0?
y<=2-x*x?
вывод
верно?

A
да
да
нет
не принадлежит
да

B
да
нет


нет

C
нет



нет

D
нет



нет

E
да
да
да
принадлежит
да

F
да
нет


нет

G
нет



нет

для того, чтобы доработать программу, проще всего составить одно сложное условие, описывающее всю заштрихованную область
в данном случае удобно представить данную область в виде объединения областей, первая из которых включает области E+G, а вторая – области E+F
область E+G соответствует условию (y>=0) and (y <=2-x*x)
область E+F соответствует условию (y>=x) and (y <=2-x*x)
объединение областей выполняется с помощью операции ИЛИ (or), так что полное условие принимает вид
(y>=0) and (y <=2-x*x) or (y>=x) and (y <=2-x*x)
поскольку операция И (and) имеет более высокий приоритет, чем ИЛИ (or), порядок выполнения операций тут правильный; в случае сомнений можно поставить дополнительные скобки:
((y>=0) and (y <=2-x*x)) or ((y>=x) and (y <=2-x*x))
поскольку в обоих условиях есть условие y <=2-x*x, запись можно немного сократить:
(y <=2-x*x) and ((y>=x) or (y>=0))
доработанная программа выглядит так:
var x,y: real;
begin
readln(x,y);
if (y <=2-x*x) and ((y>=x) or (y>=0)) then
write('принадлежит')
else
write('не принадлежит')
end.
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x,y: real;
begin
readln(x,y);
if y <= 1 then
if x >= 0 then
if y >= sin(x) then
write('принадлежит')
else write('не принадлежит')
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы) .
Решение:
сначала лучше отложить в сторону программу и попытаться написать условие, которым должны отвечать точки, попавшие в выделенную область
заштрихованная область ограничена по координате 13 EMBED Equation.3 1415, она находится
справа от оси 13 EMBED Equation.3 1415, что равносильно условию 13 EMBED Equation.3 1415 (с учетом границы здесь и далее получаем нестрогие неравенства)
слева от первого максимума функции 13 EMBED Equation.3 1415; из математики мы знаем, что эта функция достигает максимума при 13 EMBED Equation.3 1415, поэтому получаем второе условие 13 EMBED Equation.3 1415
заштрихованная область ограничена с двух сторон по координате 13 EMBED Equation.3 1415: она находится
ниже линии 13 EMBED Equation.3 1415, откуда следует третье условие 13 EMBED Equation.3 1415
выше линии 13 EMBED Equation.3 1415, что дает четвертое условие 13 EMBED Equation.3 1415
итак, точка находится в заданной области, если все эти четыре условия выполняются одновременно; можно предположить, что в программе нужно использовать четыре вложенных условных оператора или один условный оператор, в котором четыре простых условия (отношения 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415, 13 EMBED Equation.3 1415 и 13 EMBED Equation.3 1415) связаны с помощью логической операции and («И», одновременное выполнение всех условий)
теперь смотрим на программу: здесь три (а не четыре!) вложенных условных оператора с простыми отношениями, поэтому явно какое-то условие не учтено; легко найти, что «забыли» условие 13 EMBED Equation.3 1415
оператор write('принадлежит') помещен внутрь всех трех условных операторов, то есть, он выполнится тогда, когда три (а не четыре!) условия истинны;
отметим на рисунке область, где выполняются все нужные условия, кроме 13 EMBED Equation.3 1415 (красная зона);
для всех точек, которые находятся в «красной» зоне программа выдаст сообщение «принадлежит», хотя в самом деле эти точки не принадлежит заданной области; одна из таких точек имеет координаты 13 EMBED Equation.3 1415
теперь выясним, когда программа выдает сообщение «не принадлежит»
if y <= 1 then
if x >= 0 then
if y >= sin(x) then
write('принадлежит')
else write('не принадлежит')
судя по записи «лесенкой», else относится к самому первому оператору if, однако в самом деле это не так; перед словом else нет end, поэтому ищем ближайший if: это самый внутренний оператор, правильная запись «лесенкой» выглядит так:
if y <= 1 then
if x >= 0 then
if y >= sin(x) then
write('принадлежит')
else write('не принадлежит')
этот фрагмент программы соответствует блок-схеме, которая показана на рисунке справа:
по схеме видим, что при 13 EMBED Equation.3 1415 (первое условие ложно), а также при 13 EMBED Equation.3 1415 (второе условие ложно) программа вообще не выдает никакого сообщения, то есть, работает неправильно; таким образом, координаты любой точки, для которой 13 EMBED Equation.3 1415 или 13 EMBED Equation.3 1415, могут быть указаны в ответе как пример набора входных данных, при которых программа работает неправильно
итак, первая часть ответа такова
примеры входных данных, на которых программа работает неверно: (x=3.14, y=0.5) (неправильно определяет принадлежность точки области) (x=0, y=2) или (x=-1, y=0) (не выдает вообще никакого сообщения)
остается исправить эту программу; начнем с самого «лобового способа»: добавим в программу четвертый (вложенный) условный оператор, проверяющий условие 13 EMBED Equation.3 1415, и еще три блока else, чтобы выводить строку «не принадлежит» в том случае, когда хотя бы один из них не сработал:
if x <= pi/2 then
if y <= 1 then
if x >= 0 then
if y >= sin(x) then
write('принадлежит')
else write('не принадлежит')
else write('не принадлежит')
else write('не принадлежит')
else write('не принадлежит');
обратите внимание, что точка с запятой есть только после самого последнего оператора write, так как остальные стоят перед ключевым словом else, перед которым точка с запятой не ставится
хотя приведенный выше метод дает работоспособную программу, она получается слишком длинная и некрасивая для такой простой задачи; достаточно сказать, что оператор write('не принадлежит') повторяется в тексте 4 раза
более элегантное решение формулируется на словах так: «точка принадлежит области, если выполняются одновременно 4 приведенных выше условия, а иначе – не принадлежит»; а вот реализация на Паскале (приведем программу-ответ целиком):
var x,y: real;
begin
readln(x,y);
if (x >= 0) and (x <= pi/2) and
(y <= 1) and (y >= sin(x)) then
write('принадлежит')
else write('не принадлежит');
end.
здесь использовано сложное условие, в котором 4 отношения связаны операциями and («И», требуется одновременное выполнение всех условий)

Возможные проблемы:
как правило, в этой задаче требуется использовать знания из курса математики (решение уравнений, графики функций, область допустимых значений, составление уравнений прямой по приведенному графику)
как показывает анализ опубликованных задач этого типа, нужно уметь, прежде всего, разбираться в серии вложенных условных операторов в полной и неполной форме
неправильная «лесенка» в записи сбивает с толку и подталкивает к неверному решению; чтобы разобраться в программе, лучше на черновике построить блок-схему алгоритма и правильную «лесенку»
чтобы не запутаться, к какому оператору относится else, используйте следующее правило:
если перед else нет слова end, нужно искать ближайший сверху условный оператор if
если перед else стоит end (конец блока), нужно искать парный ему begin (начало блока) и соответствующий условный оператор if ... then begin
проверяйте, все ли необходимые условия учтены в программе, это особенно актуально для немонотонных функций типа синуса или косинуса (немонотонные функции на некоторых участках возрастают при увеличении аргумента, а на некоторых – убывают); например, в этой задаче можно пропустить необходимость выполнения условия 13 EMBED Equation.3 1415
не перепутайте, где нужно использовать операцию and («И», одновременное выполнение условий), а где – or («ИЛИ», хотя бы одно условие)
нужно внимательно проверять, всегда ли программа выдает сообщение, если заданное условие не выполняется
часто бывает полезно нарисовать блок-схему алгоритма, которая позволяет увидеть ход выполнения программы при всех возможных вариантах
проверяйте, включает ли заданная область свои границы; если включает – в отношениях будут нестрогие неравенства (<=, >=), если не включает – строгие (<, >)
при оценке работы можно (при абсолютно правильном решении) потерять баллы из-за синтаксических ошибок в программе (скобки, точки с запятой, неправильное написание оператора и т.п.); не забывайте, что
в сложном условии все простые условия (отношения) нужно брать в скобки, так как в Паскале отношения при вычислении логического выражения имеют самый низкий приоритет
перед else точка с запятой никогда не ставится
в конце программы после последнего end ставится точка


За что снимают баллы:
неправильно определены входные данные, при которых исходная программа работает неверно
исправлены не все ошибки в программе, например, легко «просмотреть», что необходимо еще условие 13 EMBED Equation.3 1415
программа работает правильно в большем количестве случаев, чем исходная, но не для всех возможных исходных данных
перепутаны знаки < и >, логические операции or и and
неверно расставлены операторные скобки begin-end
синтаксические ошибки (знаки пунктуации – запятые, точки, точки с запятой; неверное написание ключевых слов); чтобы получить 3 балла, нужно при абсолютно правильном решении сделать не более одной синтаксической ошибки; на 2 балла – до двух ошибок, на 1 балл – до трех ошибок

Задачи для выполнения:
Требовалось написать программу, которая решает уравнение «13 EMBED Equation.3 1415» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно:
var a,b,x: real;
begin
readln(a,b,x);
if a = 0 then
if b = 0 then
write ('любое число')
else write ('нет решений')
else
if b = 0 then
write('x = 0')
else write('x =',b/a,' или x =',-b/a);
end.
Последовательно выполните три задания: 1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу. 2) Укажите, какая часть программы является лишней. 3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

Требовалось написать программу, которая решает уравнение «13 EMBED Equation.3 1415» относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно:
var a, b, x: real;
begin
readln(a,b,x);
if b = 0 then
write('x = 0')
else
if a = 0 then
write('нет решений')
else
write('x =',-b/a);
end.
Последовательно выполните три задания: 1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу. 2) Укажите, какая часть программы является лишней. 3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).



Требовалось написать программу, которая решает уравнение 13 EMBED Equation.3 1415 относительно х для действительных чисел а, Ь, с, введенных с клавиатуры, о которых заведомо известно, что а(0, b(0 и c(0. Была написана следующая программа:
var a, b, с, D, xl, x2: real;
begin
readln(a, b, с, xl, x2);
D := b*b - 4*a*c;
if D > 0
then begin
xl := (-b + sqrt(D))/(2*a);
x2 := (-b - sqrt(D))/(2*a);
write('xl =', xl);
write('x2 =', x2); end
else writeln ('действительных корней нет');
end.
Известно, что программа написана с ошибками. Последовательно выполните три задания:
Приведите пример таких чисел а, Ь, с, при которых программа неверно решает поставленную задачу.
Укажите, какая часть программы является лишней.
Укажите, как, по-вашему мнению, нужно доработать программу, чтобы не было случаев ее неправильной работы.
Требовалось написать программу, которая решает неравенство 13 EMBED Equation.3 1415 относительно 13 EMBED Equation.3 1415 для всех ненулевых действительных чисел 13 EMBED Equation.3 1415 и 13 EMBED Equation.3 1415, введенных с клавиатуры. Программист торопился и сделал в программе ошибки.
var a, b, x: real;
begin
readln(a, b, x);
if b > 0 then
write('x > ', a, ' или x < 0')
else
if a > 0 then
write('0 < x < ', a)
else
write(a, ' < x < 0');
end.
Последовательно выполните три задания:
Приведите примеры таких чисел a, b, x, при которых программа неверно решает поставленную задачу.
Укажите, какая часть программы является лишней?
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).

Для заданного положительного вещественного числа A необходимо найти минимальное целое число K, при котором выполняется неравенство 13 EMBED Equation.3 1415. Для решения этой задачи ученик написал такую программу:
Pascal
Python

var a, s: real;
k: integer;
begin
read(a);
k := 1;
s := 1;
while s<=a do begin
k := k + 1;
s := 1.0/k;
end;
write(k);
end.
a = int(input())
k = 1
s = 1
while s <= a:
    k = k + 1
    s = 1.0 / k
print(k)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 0.4.
2. Сколько существует натуральных чисел А, при вводе которых программа выведет ответ 2?
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Для заданного положительного вещественного числа A необходимо найти минимальное целое число K, при котором выполняется неравенство 13 EMBED Equation.3 1415. Для решения этой задачи ученик написал такую программу:
Pascal
Python

var a, s: real;
k: integer;
begin
read(a);
k := 0;
s := 1;
while s >= a do begin
k := k + 1;
s := s + 1.0/k;
end;
write(k);
end.
a = int(input())
k = 0
s = 1
while s >= a:
    k = k + 1
    s = s + 1.0/k
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.4.
2. Сколько существует натуральных чисел А, при вводе которых программа выведет ответ 1?
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство 13 EMBED Equation.3 1415. Для решения этой задачи ученик написал такую программу:
Pascal
Python

var a, s: real;
k: integer;
begin
read(a);
k := 0;
s := 1;
while s < a do begin
k := k + 1;
s := s + 1.0/k;
end;
write(k);
end.
a = float(input())
k = 0
s = 1
while s < a:
    k = k + 1
    s = s + 1.0/k
print(k)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.8.
2. Приведите пример числа, при вводе которого программа выведет правильный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство 13 EMBED Equation.3 1415. Для решения этой задачи ученик написал такую программу:
Pascal
Python

var a, s: real;
k: integer;
begin
read(a);
k := 1;
s := 1;
while s < a do begin
s := s + 1.0/k;
k := k + 1;
end;
write(k);
end.
a = float(input())
k = 1
s = 1
while s < a:
    s = s + 1.0/k
    k = k + 1
print(k)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1.2.
2. Приведите пример числа, при вводе которого программа выведет правильный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано целое положительное число N. Необходимо определить наименьшее целое число K, для которого выполняется неравенство:
1 + 2 + ... + K > N.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var n, k: integer;
begin
read(n);
k := 1;
while n > 0 do begin
n := n - k;
k := k + 1;
end;
writeln(k)
end.
n = int(input())
k = 1
while n > 0:
    n = n – k
    k = k + 1
print(k)


Последовательно выполните следующее.
1. Приведите пример числа N, при вводе которого программа выведет неверный ответ. Укажите верный ответ и ответ, который выведет программа.
2. Приведите пример числа N, при вводе которого программа выведет верный ответ. Укажите этот ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Дано целое положительное число N. Необходимо определить наименьшее целое число K, для которого выполняется неравенство:
1 + 2 + ... + K
· N.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var n, k: integer;
begin
read(n);
k := 1;
while n >= 0 do begin
k := k + 1;
n := n - k;
end;
writeln(k)
end.
n = int(input())
k = 1
while n >= 0:
    k = k + 1
    n = n - k
print(k)


Последовательно выполните следующее.
1. Приведите пример числа N, при вводе которого программа выведет неверный ответ. Укажите верный ответ и ответ, который выведет программа.
2. Приведите пример числа N, при вводе которого программа выведет верный ответ. Укажите этот ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Даны целые положительные числа M и N. Необходимо определить количество таких целых чисел K, для которых выполняется неравенство M
· K3
· N. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var m, n, k, t: integer;
begin
read(m, n);
k := 1;
t := 1;
while k*k*k <= n do begin
if k*k*k > m then t := t + 1;
k := k + 1;
end;
writeln(t)
end.
m, n = map(int, input().split())
k = 1
t = 1
while k*k*k <= n:
    if k*k*k > m:
        t = t + 1
    k = k + 1
print(t)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе M = 10 и N = 100.
2. Приведите пример таких чисел M и N, при вводе которых программа выведет верный ответ. Укажите этот ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).

Даны целые положительные числа M и N. Необходимо определить количество таких целых чисел K, для которых выполняется неравенство M
· K2
· N. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var m, n, k, t: integer;
begin
read(m, n);
k := 1;
t := 1;
while k*k < n do begin
if k*k >= m then t := t + 1;
k := k + 1;
end;
writeln(t)
end.
m, n = map(int, input().split())
k = 1
t = 1
while k*k < n:
    if k*k >= m:
        t = t + 1
    k = k + 1
print(t)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе M = 10 и N = 40.
2. Приведите пример таких чисел M и N, при вводе которых программа выведет верный ответ. Укажите этот ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Дано целое положительное число A. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма квадратов первых нечётных чисел 12 + 32+ + K2 окажется больше A. Для решения этой задачи ученик написал программу, но, к сожалению, его программа – неправильная.
Pascal
Python

var a, s, k: integer;
begin
read(A);
s := 0;
k := -1;
while s < A do begin
k := k + 1;
s := s + k*k;
end;
writeln(k)
end.
A = int(input())
s = 0
k = -1
while s < A:
    k = k + 1
    s = s + k*k
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 11.
2. Укажите наименьшее значение A, при котором программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано целое положительное число A. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма квадратов первых нечётных чисел 12 + 32+ + K2 окажется больше A. Для решения этой задачи ученик написал программу, но, к сожалению, его программа – неправильная.
Pascal
Python

var a, s, k: integer;
begin
read(A);
s := 0;
k := 1;
while s <= A do begin
s := s + k*k;
k := k + 1;
end;
writeln(k)
end.
A = int(input())
s = 0
k = 1
while s <= A:
    s = s + k*k
    k = k + 1
print(k)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 11.
2. Укажите наименьшее значение A, при котором программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано целое положительное число A. Требуется вывести такое минимально возможное натуральное число K, при котором
1 + (1+2) + (1+2+3) + + (1+2++K)
окажется больше A. Для решения этой задачи ученик написал программу, но, к сожалению, его программа – неправильная.
Pascal
Python

var A, s, p, k: integer;
begin
read(A);
s := 0; p := 0; k := 1;
while s < A do begin
p := p + k;
s := s + p;
k := k + 1;
end;
writeln(k);
end.
A = int(input())
s = 0
p = 0
k = 1
while s < A:
    p = p + k
    s = s + p
    k = k + 1
print(k)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 12.
2. Укажите любое значение A, при котором программа выведет верный ответ. Запишите этот ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано целое положительное число A. Требуется вывести такое максимально возможное натуральное число K, при котором
1 + (1+2) + (1+2+3) + + (1+2++K)
не превышает A. Для решения этой задачи ученик написал программу, но, к сожалению, его программа – неправильная.
Pascal
Python

var A, s, p, k: integer;
begin
read(A);
s := 0; p := 0; k := 1;
while s <= A do begin
k := k + 1;
p := p + k;
s := s + p;
end;
writeln(k);
end.
A = int(input())
s = 0
p = 0
k = 1
while s <= A:
    k = k + 1
    p = p + k
    s = s + p
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 12.
2. Укажите все значения A, при которых программа выведет ответ 4.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Даны натуральные числа A и B. Требуется найти такое минимально возможное натуральное число K
· A, что сумма всех чисел от A до K больше или равна B. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var A, B, s, k: integer;
begin
read(A, B);
s := 1;
k := A;
while s <= B do begin
k := k + 1;
s := s + k;
end;
writeln(k);
end.
A, B = map(int, input().split())
s = 1
k = A
while s <= B:
    k = k + 1
    s = s + k
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел 5 и 15.
2. Укажите любую пару значений A и B, при вводе которых программа выведет правильный ответ .
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Даны натуральные числа A и B. Требуется найти такое минимально возможное натуральное число K
· A, что сумма всех чисел от A до K больше, чем B. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var A, B, s, k: integer;
begin
read(A, B);
s := 0;
k := A;
while s < B do begin
k := k + 1;
s := s + k;
end;
writeln(k);
end.
A, B = map(int, input().split())
s = 0
k = A
while s < B:
    k = k + 1
    s = s + k
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел 13 и 18.
2. Укажите любую пару значений A и B, при вводе которых программа выведет правильный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано натуральное число A>0. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма 1*2 + 3*4 + + K*(K+1) окажется больше A. Приведённая ниже программа содержит ошибки.
Pascal
Python

var A, s, k: integer;
begin
read(A);
s := 0;
k := 1;
while s <= A do begin
k := k + 1;
s := s + k*(k+1);
end;
writeln(k)
end.
A = int(input())
s = 0
k = 1
while s <= A:
    k = k + 1
    s = s + k*(k+1)
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 15.
2. Укажите два наименьших значения A, при которых программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано натуральное число A>0. Требуется вывести такое минимально возможное нечётное натуральное число K, при котором сумма 1*2 + 3*4 + + K*(K+1) окажется больше A. Приведённая ниже программа содержит ошибки.
Pascal
Python

var A, s, k: integer;
begin
read(A);
s := 0;
k := 0;
while s <= A do begin
s := s + k*(k+1);
k := k + 1;
end;
writeln(k)
end.
A = int(input())
s = 0
k = 0
while s <= A:
    s = s + k*(k+1)
    k = k + 1
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 15.
2. Укажите два наименьших значения A, большие, чем 10, при которых программа выведет верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.

На обработку поступает последовательность из четырёх целых чисел. Нужно написать программу, которая выводит на экран количество неотрицательных чисел последовательности и их произведение. Если неотрицательных чисел нет, требуется вывести на экран «NO». Известно, что вводимые числа по абсолютной величине не превышают 10. Программист написал программу неправильно.
Pascal
Python

var p,i,x,count: integer;
begin
count := 0;
p := 0;
for i := 1 to 4 do begin
read (x);
if x >= 0 then begin
p := p*x;
count := count+1
end
end;
if count > 0 then begin
writeln(х);
writeln(p);
end
else
writeln('NO')
end.
count = 0
p = 0
for i in {1, 2, 3, 4}:
    x = int(input())
    if x >= 0:
        p = p * x
        count = count + 1
if count > 0:
    print(x)
    print(p)
else:
    print('NO')

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел -5 2 1 3.
2. Приведите пример такой последовательности, содержащей хотя бы одно неотрицательное число, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
На обработку поступает последовательность из четырёх целых чисел. Нужно написать программу, которая выводит на экран сумму всех отрицательных чисел последовательности и максимальное число в последовательности. Известно, что вводимые числа по абсолютной величине не превышают 1000. Программист написал программу неправильно.
Pascal
Python

var s,i,x,mx: intege
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел -5 2 -4 3.
2. Приведите пример такой последовательности, содержащей хотя бы одно неотрицательное число, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
На обработку поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 3. Если в числе нет цифр, кратных 3, требуется на экран вывести «NO». Программист написал программу неправильно. Напоминание: 0 делится на любое натуральное число.
Pascal
Python

var N,di
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 134.
2. Приведите пример такого трёхзначного числа, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
На обработку поступает положительное целое число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно.
Pascal
Python

var N, digit, sum: longint;
begin
readln(N);
sum := 0;
while N > 0 do begin
digit := N mod 10;
if digit < 7 then
sum := sum + 1;
N := N div 10;
end;
writeln(digit)
end.
N = int(input())
sum = 0
while N > 0:
    digit = N % 10
    if digit < 7:
        sum = sum + 1
    N = N // 10
print(digit)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 456.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько).
Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 5. То есть требуется определить, существует ли такое целое число К, что 5K =N, и вывести это число либо сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
Pascal
Python

var n, k: integer;
begin
read(n);
k := 0;
while k mod 5 = 0 do begin
k := k + 1;
n := n div 5;
end;
if k = 1 then
writeln(k)
else
writeln('He существует')
end.
n = int(input())
k = 0
while k % 5 == 0:
    k = k + 1
    n = n // 5
if k == 1:
    print(k)
else:
    print('Не существует')


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 25.
2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 7. То есть требуется определить, существует ли такое целое число К, что 7K =N, и вывести это число либо сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
Pascal
Python

var n, k: integer;
begin
read(n);
k := 0;
while n mod 7 = 0 do begin
k := k + n div 7;
n := n div 7;
end;
if n <= 7 then
writeln(k)
else
writeln('He существует')
end.
n = int(input())
k = 0
while n % 7 == 0:
    k = k + n // 7
    n = n // 7
if n <= 7:
    print(k)
else:
    print('Не существует')

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 49.
2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 4. То есть требуется определить, существует ли такое целое число К, что 4K =N, и вывести это число либо сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
Pascal
Python

var n, k: integer;
begin
read(n);
k := 0;
while n mod 4 = 0 do begin
k := k + n div 4;
n := n div 4;
end;
if k = 1 then
writeln(k)
else
writeln('He существует')
end.
n = int(input())
k = 0
while n % 4 == 0:
    k = k + n // 4
    n = n // 4
if k == 1:
    print(k)
else:
    print('Не существует')


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 16.
2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано целое положительное число N, не превосходящее 1000. Необходимо определить, является ли это число степенью числа 3. То есть требуется определить, существует ли такое целое число K, что 3K = N, и вывести это число либо сообщение, что такого числа не существует. Для решения этой задачи ученик написал программу, но, к сожалению, его программа оказалась неверной.
Pascal
Python

var n, k: integer;
begin
read(n);
k := 0;
while k mod 3 = 0 do begin
k := k + 1;
n := n div 3
end;
if n > 0 then
writeln(k)
else
writeln('Не существует')
end.
n = int(input())
k = 0
while k % 3 == 0:
    k = k + 1
    n = n // 3
if n > 0:
    print(k)
else:
    print('Не существует')

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 9.
2. Приведите пример числа, при вводе которого приведённая программа напечатает то, что требуется.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано натуральное число A, большее 9, в записи которого нет нулей. Требуется найти максимальное двузначное число, которое можно увидеть в записи числа A. Например, для числа 18943 ответом будет число 94. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var A, n2: integer;
begin
read(A);
n2 := 0;
while A > 100 do begin
if A mod 100 > n2 then
n2 := A mod 100;
A := A div 100;
end;
writeln(n2);
end.
A = int(input())
n2 = 0
while A > 100:
    if A % 100 > n2:
        n2 = A % 100
    A = A // 100
print(n2)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 9532.
2. Укажите одно значение A, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Дано натуральное число A, в записи которого нет нулей. Требуется найти минимальное двузначное число, которое можно увидеть в записи числа A. Например, для числа 815943 ответом будет число 15. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var A, n2: integer;
begin
read(A);
n2 := 10;
while A > 100 do begin
if A mod 100 < n2 then
n2 := A mod 100;
A := A div 100;
end;
writeln(n2);
end.
A = int(input())
n2 = 10
while A > 100:
    if A % 100 < n2:
        n2 = A % 100
    A = A // 100
print(n2)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1245.
2. Укажите одно значение A, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
На вход программы поступает натуральное число. Требуется определить сумму цифр в десятичной записи этого числа, которые не кратны 3 (считается, что 0 кратно любому числу). Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var N, digit, sum: longint;
begin
readln(N);
sum := N mod 10;
while N > 0 do begin
digit := N mod 10;
if digit mod 3 > 0 then
sum := digit;
N := N div 10;
end;
if sum > 0 then
writeln(sum)
else
writeln('NO')
end.
N = int(input())
sum = N % 10
while N > 0:
    digit = N % 10
    if digit % 3 > 0:
        sum = digit
    N = N // 10
if sum > 0:
    print(sum)
else:
    print('NO')


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 654.
2. Укажите одно трёхзначное число, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
На вход программы поступает натуральное число. Требуется определить сумму цифр в десятичной записи этого числа, которые кратны 3 (считается, что 0 кратно любому числу). Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
Python

var N, digit, sum: longint;
begin
readln(N);
sum := N mod 10;
while N > 0 do begin
digit := N mod 10;
if digit mod 3 = 0 then
su
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 653.
2. Укажите одно трёхзначное число, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Числа Фибоначчи задаются рекуррентным соотношением f(0) = 0, f(1) = 1 и f(n) = f(n – 1) + f(n – 2) для всех целых n ( 0. Требовалось написать программу, которая по входному целому неотрицательному значению
·
·, не превосходящему 20, определяет соответствующее число Фибоначчи f(n). Приведённая ниже программа содержит ошибки.
Pascal
Python

var n, i, f, fn : integer;
begin
read(n);
fn := 1;
f := 1;
for i := 1 to n do begin
f := f + fn;
fn := f - fn
end;
write(fn - 5)
end.
n = int(input())
fn = 1
f = 1
for i in range(1, n+1):
    f = f + fn
    fn = f - fn
print(fn - 5)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 4.
2. Укажите одно значение входной переменной n, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Требовалось написать программу, которая для введённого натурального числа n выводит общее количество его различных делителей, включая 1 и n. К сожалению, ученик написал программу с ошибками:
Pascal
Python

var n, j, k : integer;
begin
read(n);
j := 2;
k := 0;
while j * j < n do begin
if n mod j = 0 then
k := k + 2;
j := j + 1
end;
if j * j = n then
k := k + 3;
write(k)
end.
n = int(input())
j = 2
k = 0
while j*j < n:
    if n % j == 0:
        k = k + 2
    j = j + 1
if j*j == n:
    k = k + 3
print(k)


Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 10.
2. Укажите два наименьших значения входной переменной n, при вводе которого программа выведет правильный ответ. Укажите это ответ в каждом случае.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
На вход программы поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран максимальную цифру числа, меньшую 5. Если в числе нет цифр, меньших 5, требуется на экран вывести «NO». В приведённой программе есть ошибки.
Pascal
Python

var N, d, m: longint;
begin
readln(N);
m := N mod 10;
while N > 0 do begin
d := N mod 10;
if d < 5 then
if d > m then m := d;
N := N div 10;
end;
if m = 0 then
writeln('NO')
else writeln( m )
end.
N = int(input())
m = N % 10
while N > 0:
    d = N % 10
    if d < 5:
        if d > m:
            m = d
    N = N // 10
if m == 0:
    print('NO')
else:
    print(m)

Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 157.
2. Укажите наибольшее трёхзначное значение входной переменной n, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
На вход программы поступает натуральное число, не превышающее 109. Нужно написать программу, которая выводит на экран максимальную цифру числа, кратную 3. Если в числе нет цифр, кратных 3, требуется на экран вывести «NO». В приведённой программе есть ошибки.
Pascal
Python

var N, d, m: longint;
begin
readln(N);
m := 0;
while N > 0 do begin
d := N mod 10;
if d mod 3 = 0 then
if d > m then m := d
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 170.
2. Укажите наименьшее трёхзначное значение входной переменной n, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Требовалось написать программу, которая определяет, можно ли построить треугольник из отрезков с длинами х, у, z. Программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
var х, у, z: real;
begin
readln (x, у, z);
if (x + y > z) then
begin
if (x + z > y) then
if (y + z > x) then
writeln('треугольник построить можно');
end
else writeln('треугольник построить нельзя');
end
Последовательно выполните задания:
Приведите пример таких чисел х, у, z, при которых программа неверно решает поставленную задачу.
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать один из способов доработки исходной программы).
Укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала логическую операцию AND.

Требовалось написать программу, которая вводит три целых числа в переменные a, b и c, а потом сортирует их так, чтобы в переменной a оказалось наименьшее число, в переменной b – среднее число, а в переменной c – наибольшее число. Программист торопился и сделал в программе ошибки.
var a, b, c, x: integer;
begin
read(a, b, c, x);
if a > b then begin x:=a; a:=b; b:=x; end;
if b > c then begin x:=b; b:=c; c:=x; end;
write(a,b,c);
end.
Последовательно выполните три задания:
Приведите примеры таких чисел a, b, с, при которых программа неверно решает поставленную задачу.
Укажите, какая часть программы является лишней?
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).

В корзине лежит a красных и b синих шаров. Из корзины наугад вынимают n шаров. Требовалось написать программу, которая определяет количество вариантов такого опыта (вариантом считаем пару чисел: количество вынутых красных и синих шаров). Программист торопился и написал программу неправильно:
Pasc
·al
Python

var n, a, b: integer;
begin
readln(n, a, b);
if a + b < n then writeln(0)
else
if a < b then
if a < n then writeln(a+1)
else
if b < n then writeln(b+1)
else writeln(n+1);
end.
n, a, b = map(int, input().split())
if a + b < n:
    print(0)
else:
    if a < b:
        if a < n:
            print(a+1)
        else:
            if b < n:
                print(b+1)
            else:
                print(n+1)

Последовательно выполните следующее:
Определите, что выведет программа при n = 5, a = 3, b = 6.
Укажите значения n, a, b, при которых программа выдаёт неправильный ответ.
Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы.

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно:
Pascal
Python

var N, product: longint;
digit: integer;
begin
readln(N);
product := N mod 10;
while N >= 10 do begin
digit := N mod 10;
product := product * digit;
N := N div 10
end;
writeln ( product )
end.
N = int(input())
product = N % 10
while N >= 10:
    digit = N % 10
    product = product * digit
    N = N // 10
print(product)


Последовательно выполните следующее:
Определите, что выведет программа при вводе числа 532.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
выпишите строку, в которой сделана ошибка;
укажите, как надо исправить ошибку - приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальную цифру этого числа. Программист торопился и написал программу неправильно:
Pascal
Python

var N: longint;
digit, min_digit: integer;
begin
readln(N);
min_digit := 0;
while N > 0 do begin
digit := N mod 10;
if digit > min_digit then
min_digit := digit;
N := N div 10;
end;
writeln(min_digit);
end.
N = int(input())
min_digit = 0
while N > 0:
    digit = N % 10
    if digit > min_digit:
        min_digit = digit
    N = N // 10
print(min_digit)


Последовательно выполните следующее:
Определите, что выведет программа при вводе числа 532.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
выпишите строку, в которой сделана ошибка;
укажите, как надо исправить ошибку - приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно:
Pascal
Python

var N: longint;
count: integer;
begin
readln(N);
count := 1;
while N > 1 do begin
count := count + 1;
N := N div 10;
end;
writeln(count);
end.
N = int(input())
count = 1
while N > 1:
    count = count + 1
    N = N // 10
print(count)


Последовательно выполните следующее:
Определите, что выведет программа при вводе числа 123.
Укажите одно число, для которого программа выводит неверный результат.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
выпишите строку, в которой сделана ошибка;
укажите, как надо исправить ошибку - приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Требовалось написать программу, при выполнении которой с клавиатуры вводится натуральное число, не превосходящее 108, и выводится его первая (старшая) цифра. Ученик написал такую программу:
Pascal
Python

var n: longint;
begin
read(n);
while n>10 do begin
n := n mod 10
end;
write(n);
end.
n = int(input())
while n > 10:
    n = n % 10
print(n)


Последовательно выполните следующее.
Напишите, что выведет эта программа при вводе числа 1984.
Приведите пример числа, при вводе которого программа выдаст верный ответ.
Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
Требовалось написать программу, которая получает на вход натуральное число N, не превосходящее 109, и выводит число, которое получается из N после удаления всех единиц; порядок остальных цифр при этом не меняется. Например, число 19520125 должно быть преобразовано в число 952025. Число, в котором все цифры – единицы и нули, должно быть преобразовано в 0. Незначащие нули в старших разрядах полученного числа печатать не нужно. Программист торопился и написал программу неправильно.
Pascal
Python

var N, R, T: longint;
d: integer;
begin
readln(N);
R:=0;
T:=1;
while N>0 do begin
d := N mod 10;
if d<>1 then begin
R := R + d*T;
T := T+1
end;
N := N div 10;
end;
writeln(T);
end.
N = int(input())
R = 0
T = 1
while N > 0:
    d = N % 10
    if d != 1:
        R = R + d*T
        T = T + 1
    N = N // 10
print(T)

Последовательно выполните следующее.
Напишите, что выведет эта программа при вводе числа 314.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) Выпишите строку, в которой сделана ошибка.
2) Укажите, как исправить ошибку – приведите правильный вариант
строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
Дано натуральное число N, не превосходящее 108. Необходимо найти и вывести число, которое получится при записи N справа налево и удалении всех единиц. Ведущие нули выводить не надо. Если в числе N нет цифр кроме единиц и нулей, необходимо вывести 0. Например, при вводе числа 1984 нужно вывести 489, а при вводе 2001 нужно вывести 2. Для решения этой задачи ученик написал такую программу:
Pascal
Python

var n, m: longint;
d: integer;
begin
read(n);
m := 0;
while n>=1 do begin
d := n mod 10;
if d > 1 then begin
m := 10*d + m;
end;
n:= (n – d) div 10;
end;
write(m);
end.
n = int(input())
m = 0
while n >= 1:
    d = n % 10
    if d > 1:
        m = 10*d + m
    n = (n - d) // 10
print(m)

Последовательно выполните следующее.
Напишите, что выведет эта программа при вводе числа 1984.
Приведите пример числа, при вводе которого программа выдаст верный ответ.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки: выпишите строку, в которой сделана ошибка, и приведите правильный вариант
строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

На вход программы поступают 4 неотрицательных целых числа, не превышающие 1000, среди которых могут быть одинаковые. Нужно написать программу, которая выводит количество чисел, кратных 3, и максимальное из этих чисел. Если среди входных данных нет чисел, кратных трём, программа должна вывести слово 'NO'. Для решения этой задачи ученик написал такую программу:
Pascal
Python

const n = 4;
var i, x: integer;
var maximum, count: integer;
begin
count := 0;
maximum := 999;
for i:=1 to n do begin
read( x );
if x mod 3 = 0 then begin
count := count + 1;
if x < maximum then
maximum := x;
end;
end;
if count > 0 then begin
writeln(count);
writeln(maximum);
end
else
writeln('NO');
end.

n = 4
count = 0
maximum = 999
for i in range(1, n+1):
    x = int(input())
    if x % 3 == 0:
        count = count + 1
        if x < maximum:
            maximum = x
if count > 0:
    print(count)
    print(maximum)
else:
    print('NO')

Последовательно выполните следующее.
Напишите, что выведет эта программа при вводе чисел 2 9 4 3.
Приведите пример такой последовательности, содержащей число, кратное 3, что, несмотря на ошибки, программа выдаст верный ответ.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки: выпишите строку, в которой сделана ошибка, и приведите правильный вариант
строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа. Программист торопился и написал программу неправильно:
Pascal
Python

var N: longint;
sum, d: integer;
begin
readln(N);
sum := 1;
while N > 0 do begin
d := N mod 10;
N := N div 10;
sum := sum + 1;
end;
writeln(sum);
end.
N = int(input())
sum = 1
while N > 0:
    d = N % 10
    N = N // 10
    sum = sum + 1
print(sum)


Последовательно выполните следующее.
Напишите, что выведет эта программа при вводе числа 256.
Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт правильный результат.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа. Программист торопился и написал программу неправильно:
Pascal
Python

var N: longint;
sum, d: integer;
begin
readln(N);
sum := 1;
while N > 0 do begin
d := N mod 10;
N := N div 10;
sum := d;
end;
writeln(sum);
end.
N = int(input())
sum = 1
while N > 0:
    d = N % 10
    N = N // 10
    sum = d
print(sum)


Последовательно выполните следующее.
Напишите, что выведет эта программа при вводе числа 256.
Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт правильный результат.
Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.

Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество значащих цифр в двоичной записи этого числа. Программист торопился и написал программу неправильно.
Pascal
Python

var x,cnt: integer;
begin
readln(x);
cnt := 0;
while x > 0 do begin
cnt:=cnt + x mod 2;
x := x div 10
end;
writeln(cnt)
end.
x = int(input())
cnt = 0
while x > 0:
    cnt = cnt + x % 2
    x = x // 10
print(cnt)


Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 15.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество единиц в двоичной записи этого числа. Программист торопился и написал программу неправильно.
Pascal
Python

var x,cnt: integer;
begin
readln(x);
cnt := 0;
while x > 0 do begin
cnt:=cnt + 1;
x := x mod 2
end;
writeln(cnt)
end.
x = int(input())
cnt = 0
while x > 0:
    cnt = cnt + 1
    x = x % 2
print(cnt)

Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 6.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Требовалось написать программу, которая определяет, имеется ли среди введенных с клавиатуры положительных целых чисел а и Ь хотя бы одно четное. Была написана следующая программа:
var a, b: integer;
begin
readln(a, b);
a := a mod 2;
if a > 0 then b := b mod 2;
if b > 0 then
writeln ('четных чисел нет')
else writeln ('четное число есть');
end.
Известно, что программа написана с ошибками. Последовательно выполните три задания:
приведите пример таких чисел а, b, при которых программа неверно решает поставленную задачу;
укажите, как, по вашему мнению, нужно доработать программу, чтобы не было случаев ее неправильной работы;
укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала логическую операцию OR.
Требовалось написать программу, которая определяет, лежит ли точка А(х,у) внутри некоторого кольца («внутри» понимается в строгом смысле, т.е. случай, когда точка А лежит на границе кольца, недопустим). Центр кольца находится в начале координат. Для кольца заданы внутренний и внешний радиусы r1, r2; известно, что r1 отлично от r2, но неизвестно, r1 > r2 или r2 > r1. В том случае, когда точка А лежит внутри кольца, программа должна выводить соответствующее сообщение, в противном случае никакой выходной информации не выдается. Программист сделал в программе ошибки.
var x, у, rl,r2:real;
h: real;
begin
readln (x, у, rl, r2);
h := sqrt (x*x + y*y);
if (h < rl) AND (h > r2) then
writeln ('точка А лежит внутри кольца');
end.
Последовательно выполните задания:
Приведите пример таких чисел х, у, rl, r2, при которых программа неверно решает поставленную задачу.
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Укажите, как можно доработать программу, чтобы она не содержала логических операций AND или OR.
Примечание: для обозначения расстояния от точки А до начала координат используется вспомогательная переменная h.
Требовалось написать программу, которая определяет, лежит ли точка А(х0,у0) внутри квадратной области, ограниченной прямыми, параллельными осям координат: у = -2, у = 2, х = -2, х = 2 («внутри» понимается в строгом смысле, т.е случай, когда точка А лежит на границе области, недопустим).
В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
var x0, y0: real;
begin
readln (x0, y0)
if(x0 < 2)then
begin
if(x0 > -2)then
if (y0 < 2) then
writeln('точка лежит внутри области');
end
else writeln('точка не лежит внутри области');
end.
Последовательно выполните задания:
Приведите пример таких чисел х0 и у0, при которых программа неверно решает поставленную задачу.
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).
Укажите, как можно доработать программу, чтобы она вместо вложенных операторов IF содержала логическую операцию AND.
Рассматривается стандартная шахматная доска размером 8х8. Примем, что i – номер вертикали (может принимать значения от 1 до 8), j – номер горизонтали (также может принимать значения от 1 до 8). В левом нижнем углу, т.е. на поле i=1, j=1 (это поле черного цвета) стоит черный король. Напомним, что король может ходить на 1 клетку в любом направлении (по горизонтали, вертикали или диагонали). В правом нижнем углу, т.е. на поле i=8, j=1 (это поле белого цвета) стоит белый король. Введены обозначения: P(i,j) минимальное число ходов, за которое черный король может попасть на поле (i,j); V(i,j)минимальное число ходов, за которое белый король может попасть на поле (i,j).
Программист написал программу, в которой требовалось определить все такие поля (i,j), для которых P(i,j)=V(i,j), и выдать на экран соответствующие значения i,j (текст программы приведен ниже).
var i,j: integer;
begin
writeln('искомые поля');
for j:=5 to 8 do
for i:=1 to 8 do
begin
if (i=9-j) OR (i=j)
then writeln('i=',i, 'j=',j);
end;
end.
Последовательно ответьте на вопросы:
Выдаст ли программа, написанная программистом, поле, для которого i=4, j=5?
Указать все из перечисленных ниже полей, которые удовлетворяют постановке задачи, т.е. для таких полей должно быть выполнено P(i,j)=V(i,j):
(i=1, j=8), (i=2, j=8), (i=1, j=7), (i=5, j=5), (i=8, j=6)
Видно, что программист допустил ошибку в программе. Укажите, какую доработку программы нужно провести, чтобы она соответствовала постановке задачи (такая доработка может быть проведена неединственным образом – годится любой правильный вариант доработки).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x,y: real;
begin
readln(x,y);
if x*x+y*y >= 4 then
if x <= 2 then
if y <= x then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x,y: real;
begin
readln(x,y);
if y >= -1 then
if y <= sin(x) then
if y >= x-1 then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x*x + y*y >= 4 then
if x >= –2 then
if y <= –x then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y <= sin(x) then
if y <= 0.5 then
if y >= 0 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y <= x then
if y <= 0 then
if y >= x*x-2 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
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.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y >= 2*x then
if x <= 0 then
if x*x+y*y <= 4 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y <= x then
if y >= -x then
if x*x+y*y <= 1 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x0, y0 – действительные числа) и определяет принадлежность точки заштрихованной области, НЕ включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x0, y0, y: real;
begin
readln(x0, y0);
if x0 < 2 then
if x0 > 0 then begin
y := x0/2 – 1;
if y0 < y then
write('принадлежит')
else
write('не принадлежит')
end
else
write('не принадлежит');
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x0, y0, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y <= x*x then
if x-y >= -2 then
if x+y <= 2 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x*y >= 1 then
if x <= 2 then
if y <= 2 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y >= 0 then
if y <= 1 then
if x >= 0 then
if x <= pi then
if y <= sin(x) then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x <= 1 then
if y <= 1 then
if x*x + y*y <= 1 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. Объясните, почему для указанных чисел программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y >= 0 then
if x <= 1 then
if y >= x*x then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. Объясните, почему для указанных чисел программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x <= 1 then
if y >= 1-x then
if y >= x*x then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. Объясните, почему для указанных чисел программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x >= 0 then
if y <= 1 then
if (x*x + y*y <= 1) and (y >= x-1) then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. Объясните, почему для указанных чисел программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y – действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Программист торопился и написал программу неправильно.
var x,y: real;
begin
readln(x,y);
if y<=2-x then
if y>=0 then
if y>=x*x then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее.
Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A,B, C, D, E, F,G и H). Точки, лежащие на границах областей, отдельно не рассматривать.
Область
y<=2-x?
y>=0?
y>=x*x?
вывод
верно?

A






B






C






D






E






F






G






H






В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (x, y – действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Программист торопился и написал программу неправильно.
var x,y: real;
begin
readln(x,y);
if y>=0 then
if y>=2-x then
if y<=x*x then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее.
Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A,B, C, D, E, F,G и H). Точки, лежащие на границах областей, отдельно не рассматривать.
Область
y>=0?
y>=2-x?
y<=x*x?
вывод
верно?

A






B






C






D






E






F






G






H






В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x <= 1 then
if y <= 1 then
if x*x + y*y <= 1 then
write('принадлежит')
else
write('не принадлежит');
end.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F). Точки, лежащие на границах областей, отдельно не рассматривать.

Область
x <= 1
y <= 1
x*x + y*y <= 1
вывод
верно?

A






B






C






D






E






F






В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y >= 0 then
if x <= 1 then
if y >= x*x then
write('принадлежит')
else
write('не принадлежит');
end.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F). Точки, лежащие на границах областей, отдельно не рассматривать.
Область
y >= 0
x <= 1
y >= x*x
вывод
верно?

A






B






C






D






E






F






В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x <= 1 then
if y >= 1-x then
if y >= x*x then
write('принадлежит')
else
write('не принадлежит');
end.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G, H). Точки, лежащие на границах областей, отдельно не рассматривать.
Область
x <= 1
y >= 1-x
y >= x*x
вывод
верно?

A






B






C






D






E






F






G






H






В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if x >= 0 then
if y <= 1 then
if (x*x + y*y <= 1) and (y >= x-1) then
write('принадлежит')
else
write('не принадлежит');
end.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G, H, J, K). Точки, лежащие на границах областей, отдельно не рассматривать.
Область
x >= 0
y <= 1
x*x + y*y <= 1 and (y >= x-1)
вывод
верно?

A






B






C






D






E






F






G






H






J






K






В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y <= 3-x*x then
if y >= 0 then
if y >= x+1 then
write('принадлежит')
else
write('не принадлежит');
end.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G, H). Точки, лежащие на границах областей, отдельно не рассматривать.
Область
y <= 3-x*x
y >= 0
y >= x+1
вывод
верно?

A






B






C






D






E






F






G






H






J






K






В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (х – действительное число) и определяется принадлежность этой точки одному из выделенных отрезков В и D (включая границы). Программист торопился и написал программу неправильно.
var x: real;
begin
readln(x) ;
if x>l then
if x>=7 then
if x>13 then
write('не принадлежит')
else
write('принадлежит')
end.
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (А, В, С, D и Е). Границы (точки -5, 1, 7 и 13) принадлежат заштрихованным областям.
Область
Условие 1
(x>1)
Условие 2
(х>=7)
Условие 3
(х>13)
Программа выведет
Область обрабатывается верно

А






В






С






D






Е






В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет».
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (х – действительное число) и определяется принадлежность этой точки одному из выделенных отрезков В и D (включая границы). Программист торопился и написал программу неправильно.
var x: real;
begin
readln(x) ;
if x<=l5 then
if x<9 then
if x<=3 then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (А, В, С, D и Е). Границы (точки -3, 3, 9 и 15) принадлежат заштрихованным областям.
Область
Условие 1
(x<=15)
Условие 2
(х<9)
Условие 3
(х<=3)
Программа выведет
Область обрабатывается верно

А






В






С






D






Е






В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет».
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (х – действительное число) и определяется принадлежность этой точки одному из выделенных отрезков В и D (включая границы). Программист торопился и написал программу неправильно.
var x: real;
begin
readln(x) ;
if x<=l4 then
if x>=-4 then
if x>=8 then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (А, В, С, D и Е). Границы (точки -4, 2, 8 и 14) принадлежат заштрихованным областям.
Область
Условие 1
(x<=14)
Условие 2
(х>=-4
Условие 3
(х>=8)
Программа выведет
Область обрабатывается верно

А






В






С






D






Е






В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет».
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она:
var x,y: real;
begin
readln(x,y);
if y>=x*x-2 then
if y<=4-x*x then
if x>=0 then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (А, В, С, D и Е). Границы (точки -4, 2, 8 и 14) принадлежат заштрихованным областям.
Область
Условие 1
(y>=x*x-2)
Условие 2
(y<=4-x*x
Условие 3
(х>=0)
Программа выведет
Область обрабатывается верно

А






В






С






D






Е






F






G






H






В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «» (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «Да» или «Нет».
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, при выполнении которой с клавиатуры считывается координата точки на прямой (х - действительное число) и определяется принадлежность этой точки одному из выделенных отрезков (включая границы).

Программист торопился и написал программу неправильно.
var x: real;
begin
readln(x);
if (x>=-5) or (x<=1) then
if (x>=-3) and (x<=3) then
if (x>=-1) and (x<=5) then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее.
Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументе, принадлежащем различным областям (А, В, С, D, Е, F, G). Точки, лежащие на границах областей, отдельно не рассматривать.
Область
Условие 1
(x>=-5 or x<=1)
Условие 2
(x>=-3 and
x<=3)

Условие 3
(х>=-1 and x<=5)
Программа выведет
Область обрабатывается верно

А






В






С






D






Е






F






G






H






В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «» (прочерк), если условие не будет проверяться, «не изв.», если программа ведёт себя по-разному для разных значений, принадлежащих данной области.
В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «да» или «нет».
Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (х, у - действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы).

Ученик написал такую программу:
var x, y: real;
begin
readln(x, y);
if x*x + y*y <= 25 then
if y <= 4-x*x then
if y <= x+1 then
write('принадлежит')
else
write('не принадлежит')
end.
При проверке работы программа выполнялась по шагам для некоторых контрольных значений х и y, при этом был заполнен протокол тестирования, содержащий следующую информацию.
Область - часть плоскости, которой принадлежит проверяемая точка (все
возможные области отмечены на рисунке буквами А, В, С, ... W).
Условие 1, Условие 2, Условие 3 - результат проверки соответствующего условия (да или нет). Если условие не проверялось, в протокол записывался прочерк.
Вывод - сообщение, которое вывела программа. Если программа ничего не вывела, в протокол записывался прочерк.
Верно - итоговое заключение (да или нет) о правильности результата работы программы при данных значениях х и у.
В результате неаккуратного обращения протокол был испорчен, частично сохранились только три строки:
Область
Условие 1
(х*х + у*у <= 25)
Условие 2 (у <= 4-х*х)
Условие 3 (y <= х+1)
Вывод
Верно


да









принадлежит
нет




нет

нет


Последовательно выполните следующее.
Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе «Область» любую из этих областей.
Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы (это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы).
Требовалось написать программу, при выполнении которой с клавиатуры считываются коорди наты точки на плоскости (х, у - действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Ученик написал такую программу:
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)
Вывод
Верно


да









принадлежит
нет





не принадлежит
да






да

Графы протокола содержат следующую информацию.
Область - часть плоскости, которой принадлежит проверяемая точка. (Все возможные области отмечены на рисунке буквами А, В, С, ... S.)
Условие 1, Условие2, Условие 3 - результат проверки соответствующего условия (да или нет). Если условие не проверялось, в протокол записывался прочерк.
Вывод – сообщение, которое вывела программа. Если программа ничего не вывела, в протокол записывался прочерк.
Верно - итоговое заключение (да или нет) о правильности результата работы программы при данных значениях х и у.
Последовательно выполните следующее.
Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе «Область» любую из этих областей.
Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (х, у - действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Ученик написал такую программу:
var x, y: real;
begin
readln(x,y);
if y >= 1-x then begin
if y <= 2-2*x*x then
write('принадлежит')
end
else
if y >= x*x-5 then
write('принадлежит')
else write('не принадлежит')
end.
При проверке работы программа выполнялась по шагам для некоторых контрольных значений х и у, при этом был заполнен протокол тестирования. В результате неаккуратного обращения протокол был испорчен, частично сохранились только четыре строки:
Область
Условие 1
(y >= 1-x)
Условие 2 (y <= 2-2*x*x)
Условие 3 (y >= x*x-5)
Вывод
Верно












принадлежит
нет





не принадлежит
да






да

Графы протокола содержат следующую информацию.
Область - часть плоскости, которой принадлежит проверяемая точка. (Все возможные области отмечены на рисунке буквами А, В, С, ... R.)
Условие 1, Условие2, Условие 3 - результат проверки соответствующего условия (да или нет). Если условие не проверялось, в протокол записывался прочерк.
Вывод – сообщение, которое вывела программа. Если программа ничего не вывела, в протокол записывался прочерк.
Верно - итоговое заключение (да или нет) о правильности результата работы программы при данных значениях х и у.
Последовательно выполните следующее.
Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе «Область» любую из этих областей.
Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (х, у - действительные числа) и определяется принадлежность этой точки заданной закрашенной области (включая границы). Ученик написал такую программу:
var x, y: real;
begin
readln(x,y);
if y >= x+1 then begin
if y <= 2-2*x*x then
write('принадлежит')
end
else
if y >= x*x-5 then
write('принадлежит')
else write('не принадлежит')
end.
При проверке работы программа выполнялась по шагам для некоторых контрольных значений х и у, при этом был заполнен протокол тестирования. В результате неаккуратного обращения протокол был испорчен, частично сохранились только четыре строки:
Область
Условие 1
(y >= x+1)
Условие 2 (y <= 2-2*x*x)
Условие 3 (y >= x*x-5)
Вывод
Верно












принадлежит
нет





не принадлежит
да






да

Графы протокола содержат следующую информацию.
Область - часть плоскости, которой принадлежит проверяемая точка. (Все возможные области отмечены на рисунке буквами А, В, С, ... R.)
Условие 1, Условие2, Условие 3 - результат проверки соответствующего условия (да или нет). Если условие не проверялось, в протокол записывался прочерк.
Вывод – сообщение, которое вывела программа. Если программа ничего не вывела, в протокол записывался прочерк.
Верно - итоговое заключение (да или нет) о правильности результата работы программы при данных значениях х и у.
Последовательно выполните следующее.
Восстановите уцелевшие строки протокола, заполнив все клетки таблицы. Там, где содержание восстанавливается неоднозначно, запишите любое возможное значение. Например, если для нескольких областей получается одинаковая строка таблицы, укажите в графе «Область» любую из этих областей.
Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)

Требовалось написать программу, которая определяет, лежит ли точка А(х0,у0) внутри треугольной области, ограниченной осями координат и прямой 13 EMBED Equation.3 1415 («внутри» понимается в строгом смысле, т.е. случай, когда точка А лежит на границе области, недопустим). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
var x0, у0, у: real;
begin
readln (x0, y0);
if (x0 < 2)then begin
if (x0 > 0)then begin
у := 2 – х0;
if (y0 < у) then
writeln ('точка лежит внутри области')
else writein ('точка не лежит внутри области');
end
else writeln ('точка не лежит внутри области');
end
else writeln ('точка не лежит внутри области');
end.
Последовательно выполните задания:
Приведите пример таких чисел х0 и у0, при которых программа неверно решает поставленную задачу.
Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы (можно указать любой способ доработки исходной программы).
Укажите, как можно доработать программу, чтобы вместо вложенных операторов IF она содержала логическую операцию AND.















a = b?

нет

да

полная форма ветвления

блок-1

блок-2

Рисунок 1

a = b?

нет

да

неполная форма ветвления

блок-1

Рисунок 2

a = b?

нет

да

блок-10

блок-2

a = c?

да

блок-11

блок-12

нет

Рисунок 3

if a = c then begin
{ блок-11 }
end
else begin
{ блок-12 }
end;


a = b?

нет

да

c:=0;

a = c?

да

c:=1;

нет

Рисунок 4

a = b?

нет

да

a = c?

да

c:=1;

нет

Рисунок 5

c:=0;

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

да

нет



принадлежит




y >= sin(x)


да



x >= 0


да



y <= 1




не принадлежит


нет

нет

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

А

А

А

А

B

B

B

F

E

С

С

F

D

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

A

A

C

D

E

F

B

F

F

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

B

B

C

D

C

F

F

F

E

H

Е

G

A

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

D

E

F

B

C

C

D

A

A

H

E

G

K

J

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

A

B

C

D

E

F

G

H

J

K

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

13 EMBED Equation.3 1415

A

B

C

D

E

F

G

H



Root EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 9645505
    Размер файла: 2 MB Загрузок: 1

Добавить комментарий