|
Вопрос # 3 175/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
На рисунке заштрихованная область - если точка попадет в нее - написать 'vhodit', иначе в белую область попадет точка - написать - 'ne vhodit'
вообщем вроде бы все работает но есть баг
допустим если x=-0.5 а y=0.9 то все норм
а вот если x=-1 y=0.0009 - пишет не входит - хотя точка входит!
код:
Код:
var x,y:real;
p:real;
begin
read(x,y);
if x>1
then write('ne vhodit')
else
if x<-1
then write('ne vhodit')
else
if y>1
then write('ne vhodit')
else
if y<-1
then write('ne vhodit')
else
if x>=0
then write('vhodit')
else
if y<=0
then write('vhodit')
else
begin
p:=x*x+(y-1)*(y-1);
if (p<=1)
then write('vhodit')
else write('ne vhodit');
end;
end.
на рисунке половнка круга
пожалуйста помогите подправить условие
я думаю, что баг содержится между нижними begin и end
заранее спасибо!
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: Ruslan (статус: 1-ый класс)
Вопрос отправлен: 11 сентября 2009, 01:06
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Шичко Игорь
Здравствуйте, Ruslan!
Немного подправлю.
Основная ошибка:
...if (p<=1) and (x<0)
then write('ne vhodit')
else write('vhodit');...
Полный код в приложении.
Удачи.
Приложение: Переключить в обычный режим- var
- x,y:real;
- p:real;
- begin
- readln(x);
- readln(y);
-
- writeln('ne vhodit')
- else
- begin
- p:=x*x+(y-1)*(y-1);
-
- then writeln('ne vhodit')
-
- end;
- readln;
- end.
-
 |
Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 11 сентября 2009, 07:56
|
Ответ #2. Отвечает эксперт: Егор
Здравствуйте, Ruslan!
Всё замечательно (для новичка :) ) - можно, конечно, код подоптимизировать, как это сделал Шичко Игорь, но главное - ошибка в условии - надо писать не "if (p<=1)", а "if (p>=1)". У вас же алгоритм основывается на вычислении радиуса окружности для заданных точек (x^2 + (y-1)^2 = r^2 = p). И если радиус меньше 1 - то это пустая область, если больше (или равен) 1 - то это заштрихованная область, а у вас получается наоборот. :)
 |
Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 13 сентября 2009, 09:19
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 13 сентября 2009, 09:22; участников в обсуждении: 1.
|
Егор (статус: 10-ый класс), 13 сентября 2009, 09:22 [#1]:
блин, забыл в ответе написать - точка (-0,5;0,9) НЕ входит в заштрихованную область, как и (-1;0,0009)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|