Тема : Исправление ошибок в простой программе с условными операторами icon

Тема : Исправление ошибок в простой программе с условными операторами


Скачать 109.99 Kb.
НазваниеТема : Исправление ошибок в простой программе с условными операторами
Дата публикации03.03.2014
Размер109.99 Kb.
ТипДокументы


C1 (повышенный уровень, время – 30 мин)

Тема: Исправление ошибок в простой программе с условными операторами.













D

E

F

B

C

C

D

A

A

H

E

G

K

J

(С.Э. Назаренко) Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (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. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).











A

B

C

D

E

F

G

H

J

K

Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (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. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

Решение С1













D

E

F

B

C

C

D

A

A

H

E

G

K

J

Сразу замечаем, что в программе else относится к последнему оператору if, то есть в самом деле структура кода такова:

if x >= 0 then

if y <= 1 then

if (x*x + y*y <= 1) and (y >= x-1)

then

write('принадлежит')

else write('не принадлежит');

Обратите внимание, что второе условие проверяется в приведенной программе только тогда, когда истинно первое, а третье – только тогда, когда истинны первые два. В остальных ячейках (если условие не проверяется) нужно ставить прочерк:

Программы выводит какой-то ответ только тогда когда истинны первые два условия; в этом случае ответ зависит от истинности третьего условия:

Видим, что верно обрабатываются только областей А и E, для областей B и F выводится неверный ответ (эти области закрашены, но программа выдает ответ «не принадлежит»), а для остальных никакого ответа не выводится.

Обл.

x >= 0

y <= 1

(x*x+y*y<=1) and (y>=x-1)

вывод

верно?

A

да

да

да

принадлежит

да

B

да

да

нет

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

нет

C

нет







нет

D

нет







нет

E

да

да

нет

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

да

F

да

да

нет

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

нет

G

нет







нет

H

да

нет





нет

J

да

нет





нет

K

нет







нет

Для исправления программы лучше всего составить новое сложное условие. Выделенная область может быть получена как объединение двух областей: полукруга

(x >= 0) and (x*x + y*y <= 1)

и треугольника

(x >= 0) and (y <= 1) and (y >= x-1)

Получаем:

if ((x >= 0) and (x*x + y*y <= 1)) { полукруг }

or

((x >= 0) and (y <= 1) and (y >= x-1)) { треугольник }

then write('принадлежит')

else write('не принадлежит');

Это условие можно немного упростить, заметив, что условие x >= 0 встречается в условиях для обеих областей:

if (x >= 0) and

((x*x + y*y <= 1) or

((y <= 1) and (y >= x-1)))

then write('принадлежит')

else write('не принадлежит');











A

B

C

D

E

F

G

H

J

K

Сразу замечаем, что в программе else относится к последнему оператору if, то есть в самом деле структура кода такова:

if y <= 3-x*x then

if y >= 0 then

if y >= x+1 then

write('принадлежит')

else

write('не принадлежит');

Обратите внимание, что второе условие проверяется в приведенной программе только тогда, когда истинно первое, а третье – только тогда, когда истинны первые два. В остальных ячейках (если условие не проверяется) нужно ставить прочерк:

Видим, что верно обрабатываются только областей E, F и G, для области H выводится неверный ответ (она закрашена, но программа выдает ответ «не принадлежит»), а для остальных никакого ответа не выводится.

Обл.

y <= 3-x*x

y >= 0

y >= x+1

вывод

верно?

A

нет







нет

B

нет







нет

C

да

нет





нет

D

да

нет





нет

E

да

да

нет

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

да

F

да

да

да

принадлежит

да

G

да

да

да

принадлежит

да

H

да

да

нет

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

нет

J

нет







нет

K

нет







нет

Для исправления программы лучше всего составить новое сложное условие. Во-первых, вся выделенная область находится ниже параболы, поэтому условие имеет вид

(y <= 3-x*x) and (...)

где вместо многоточия нужно добавить некоторое условие. Закрашенная область может быть получена объединением двух областей: выше прямой (y>=x+1) и в первом квадранте ((x>=0) and (y>=0)). Эти две области объединяются с помощью логической операции ИЛИ (or). Таким образом, получаем

if (y <= 3-x*x) and

((y >= x+1) or { выше прямой }

(x>=0) and (y>=0)) { первый квадрант }

then write('принадлежит')

else write('не принадлежит');



Похожие:

Тема : Исправление ошибок в простой программе с условными операторами iconТема : Исправление ошибок в простой программе с условными операторами
С. Э. Назаренко) Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y – действительные...
Тема : Исправление ошибок в простой программе с условными операторами iconДжером Клапка Джером Как мы писали романNotes1.1 — доработка fb2, исправление ошибок tomahawk1.0 — создание fb2 Vitmaier
Как мы писали романNote 1 — доработка fb2, исправление ошибок tomahaw 0 — создание fb2 Vitmaier
Тема : Исправление ошибок в простой программе с условными операторами iconК вопросу о классификации программных ошибок Березкин Д. В. Определение понятия «ошибка в программе»
Классификация ошибок в зависимости от их места в жизненном цикле программного изделия 14
Тема : Исправление ошибок в простой программе с условными операторами iconОлдос Хаксли о дивный новый мир
«О дивный новый мир», созданный Олдосом Хаксли в 1932 году и по праву занимающий место в одном ряду с такими литературными шедеврами...
Тема : Исправление ошибок в простой программе с условными операторами iconШевченко Ксения Александровна
Проверка правильности занесения первичной документации в базу данных, исправление допущенных ошибок
Тема : Исправление ошибок в простой программе с условными операторами iconIt arrived
Отбивка тире пробелами, исправление ошибок, незначительное улучшение форматирования. 13. 02. 10 Джим 5 Исправлено название серииLarssonGirl...
Тема : Исправление ошибок в простой программе с условными операторами iconРэй Дуглас Брэдбери Смерть дело одинокое
Венеция в Калифорнии 1 — дополнительное форматирование — (Faiber 2 — вычитка, исправление ошибок, поправлены некоторые сноски — (ergiev...
Тема : Исправление ошибок в простой программе с условными операторами iconВладимир Фёдорович Тендряков Весенние перевертыши (С иллюстрациями)
Повесть о подростке, о первой влюбленности, об активной позиции человека в жизни, о необходимости отстаивать свои идеалы. 0 создание...
Тема : Исправление ошибок в простой программе с условными операторами iconТомас Харрис Молчание ягнят
Лектером, которого содержат в больнице для невменяемых преступников, и находит убийцу-маньяка, жаждущего сшить себе костюм девушки...
Тема : Исправление ошибок в простой программе с условными операторами iconВалентин Распутин Уроки французского
Писатель верен себе. Его новые рассказы — «По-соседски», "Женский разговор", "В ту же землю…" — отражают всю сложность и противоречивость...
Тема : Исправление ошибок в простой программе с условными операторами iconПобег из Шоушенка
Шоушенк, где проходит все круги ада, проявляя недюжинное мужество, упорство и хладнокровие. Если тебе нет еще 30-ти, а ты получаешь...
Вы можете разместить ссылку на наш сайт:
Документы


При копировании материала укажите ссылку ©ignorik.ru 2015

контакты
Документы