Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
К. Поляков, 2009-2013
Тема: Исправление ошибок в простой программе с условными операторами.
Что нужно знать:
полная форма: |
неполная форма: |
if a = b then begin { блок-1 } end else begin { блок-2 } end; |
if a = b then begin { блок-1 } end; |
здесь вместо комментариев в фигурных скобках (они выделены синим цветом) могут стоять любые операторы языка программирования (в том числе операторы присваивания, другие условные операторы, циклы, вызовы процедур и т.п.)
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; |
if a = b then begin c:=1; d:=1; end else x:=1; |
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, поэтому он относится к ближайшему по тексту внутреннему условному оператору.
Блок-схемы для двух фрагментов показаны ниже, желтым цветом выделен «переехавший» блок:
if (a = b) or (b < c) and (c <> d) then begin ... end; |
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (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>=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 |
нет |
|
Область |
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 |
нет |
|
|
|
нет |
(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) 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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы) .
Решение:
if y <= 1 then
if x >= 0 then
if y >= sin(x) then
write('принадлежит')
else write('не принадлежит')
if y <= 1 then
if x >= 0 then
if y >= sin(x) then
write('принадлежит')
else write('не принадлежит')
примеры входных данных, на которых программа работает неверно:
(x=3.14, y=0.5) (неправильно определяет принадлежность точки области)
(x=0, y=2) или (x=-1, y=0) (не выдает вообще никакого сообщения)
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, перед которым точка с запятой не ставится
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 («И», требуется одновременное выполнение всех условий)
Возможные проблемы:
|
За что снимают баллы:
|
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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.
Последовательно выполните задания:
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.
Известно, что программа написана с ошибками. Последовательно выполните три задания:
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.
Известно, что программа написана с ошибками. Последовательно выполните три задания:
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
Последовательно выполните задания:
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.
Последовательно выполните задания:
Примечание: для обозначения расстояния от точки А до начала координат используется вспомогательная переменная h.
В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.
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.
Последовательно выполните задания:
Программист написал программу, в которой требовалось определить все такие поля (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=1, j=8), (i=2, j=8), (i=1, j=7), (i=5, j=5), (i=8, j=6)
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.
Последовательно выполните три задания:
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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.
Последовательно выполните три задания:
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
var x, y: real;
begin
readln(x, y);
if y <= x then
if y <= -x then
if y >= x*x-2 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
var x, y: real;
begin
readln(x, y);
if y >= x then
if x <= 0 then
if x*x+y*y <= 1 then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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.
Последовательно выполните следующее.
Область |
y<=2-x? |
y>=0? |
y>=x*x? |
вывод |
верно? |
A |
|||||
B |
|||||
C |
|||||
D |
|||||
E |
|||||
F |
|||||
G |
|||||
H |
В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
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.
Последовательно выполните следующее.
Область |
y>=0? |
y>=2-x? |
y<=x*x? |
вывод |
верно? |
A |
|||||
B |
|||||
C |
|||||
D |
|||||
E |
|||||
F |
|||||
G |
|||||
H |
В столбцах условий укажите "да", если условие выполнится, "нет" если условие не выполнится, "" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце "Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите "" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите "да" или "нет".
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. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
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. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
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. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
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. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
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.
Последовательно выполните следующее.
Область |
Условие 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 |
Условие 3 |
Вывод |
Верно |
|
|||||
принадлежит |
нет |
||||
не принадлежит |
да |
||||
|
да |
Графы протокола содержат следующую информацию.
Область - часть плоскости, которой принадлежит проверяемая точка. (Все возможные области отмечены на рисунке буквами А, В, С, ... 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 |
Условие 3 |
Вывод |
Верно |
|
|||||
принадлежит |
нет |
||||
не принадлежит |
да |
||||
|
да |
Графы протокола содержат следующую информацию.
Область - часть плоскости, которой принадлежит проверяемая точка. (Все возможные области отмечены на рисунке буквами А, В, С, ... R.)
Условие 1, Условие2, Условие 3 - результат проверки соответствующего условия (да или нет). Если условие не проверялось, в протокол записывался прочерк.
Вывод сообщение, которое вывела программа. Если программа ничего не вывела, в протокол записывался прочерк.
Верно - итоговое заключение (да или нет) о правильности результата работы программы при данных значениях х и у.
Последовательно выполните следующее.
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.
Последовательно выполните следующее:
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.
Последовательно выполните следующее:
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
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.
Последовательно выполните следующее:
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
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.
Последовательно выполните следующее:
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, имеющую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
1 Далее при разборе задачи используется язык Паскаль, который наиболее распространен в школах России.
2 Источники заданий:
Демонстрационные варианты ЕГЭ 2004-2013 гг.
Тренировочные и диагностические работы МИОО.
Гусева И.Ю. ЕГЭ. Информатика: раздаточный материал тренировочных тестов. СПб: Тригон, 2009.
Крылов С.С., Лещинер В.Р., Якушкин П.А. ЕГЭ-2010. Информатика. Универсальные материалы для подготовки учащихся / под ред. В.Р. Лещинера / ФИПИ. М.: Интеллект-центр, 2010.
Абрамян М.Э., Михалкович С.С., Русанова Я.М., Чердынцева М.И. Информатика. ЕГЭ шаг за шагом. М.: НИИ школьных технологий, 2010.
48 http://kpolyakov.spb.ru
нет
нет
не принадлежит
нет
нет
a = b?
Рисунок 3
блок-2
полная форма ветвления
a = b?
да
нет
a = b?
блок-1
Рисунок 2
Рисунок 1
нет
блок-12
блок-11
да
блок-2
блок-10
a = c?
да
блок-1
неполная форма ветвления
да
EMBED Equation.3
EMBED Equation.3
y <= 1
да
x >= 0
EMBED Equation.3
EMBED Equation.3
да
y >= sin(x)
EMBED Equation.3
принадлежит
нет
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
да
c:=0;
Рисунок 5
нет
c:=1;
да
a = c?
EMBED Equation.3
да
Рисунок 4
нет
a = b?
c:=1;
да
a = c?
c:=0;
нет
да
нет
a = b?
if a = c then begin
{ блок-11 }
end
else begin
{ блок-12 }
end;
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
A
F
K
G
E
H
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
E
F
B
B
B
А
А
А
А
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
A
A
Е
H
G
E
F
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
С
С
F
D
E
G
J
J
F
F
B
F
E
D
C
A
A
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
F
F
C
D
C
B
B
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
A
D
C
C
B
F
E
D
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
D
B
K
G
C
H
EMBED Equation.3
H
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
F
E
D
C
B
A
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3
EMBED Equation.3