| 
| 
 | Вопрос # 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');...
 Полный код в приложении.
 Удачи.
 Приложение:Переключить в обычный режим varx,y:real;p:real;beginreadln(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.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |