Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2009, 00:53   #1
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
Плохо Входит ли точка в заданную область или нет Паскаль - помогите доделать

На рисунке заштрихованная область - если точка попадет в нее - написать '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.
заранее спасибо всем, кто поможет!
рисунок во вложении
Изображения
Тип файла: jpg рисунок.jpg (19.9 Кб, 130 просмотров)
Программирование - это великое искусство... Такое же как например и живопись!

Последний раз редактировалось Rusl92; 11.09.2009 в 00:56.
Rusl92 вне форума Ответить с цитированием
Старый 11.09.2009, 00:56   #2
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Хм.... невозможно ответить на этот вопрос не видя кода.

Какой функцией задаётся эта кривая?
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 11.09.2009, 01:00   #3
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
Плохо

это не кривая
это круг
точнее половина круга
так как y сдвинут на 1
то формула становится такой
x*x+(y-1)*(y-1)=радиус, то бишь 1
с условием похоже что то не то
код написал свой
...
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 11.09.2009, 01:02   #4
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Хе хе.. пишу прям в браузере:

Код:
If x < 0 Then
   If y > FunctionLine Then Writeln('Net') Else Writeln('Da')
Else
   Writeln('Da');
Где FunctionLine вычисляет значение y линии при указанном x.

PS: тут надо ещё по y проверять.....
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 11.09.2009, 01:04   #5
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

не понял что-то
вот в моем коде по-моему надо что то поменять между begin и еnd - которые находятся внизу
а что дописать там
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 11.09.2009, 01:11   #6
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Ты написал в лоб и ниодин нормальный препод это неоценит.

Код:
if (y < 1) And (x > -1) Then
   If SQRT(SQR(1-y) + x * x) < 1 Then Writeln('Net') Else Writeln('Da')
Else Writeln('Da');
Надо чтото типа этого.. проверь.

PS: надо первыый if подкоректировать....

вот так

If if (y < 1) And (x < 0) Then

Последний раз редактировалось Вавел из ГМТУ; 11.09.2009 в 01:17.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 11.09.2009, 01:23   #7
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
Восклицание

ты думал что типа я нуб и не знаю что такое and и т.п.
нас препод на первом курсе пока что учит думать математически
и условия поставлены суровые
1) не использовать процедурного программирования
2) условие не может быть сложным
3) cтандартные функции при необходимости только использовать

так вот я написал прогу строго придерживаясь этих правил
так вот и нашел баг - хотя по идее несколько тестов корректно прошла прога
вот и говорю, что процентов 90 что баг зарыт в последних begin и еnd
помоги исправить?
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 11.09.2009, 01:34   #8
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

При x=-1 y=0.0009
p = 1.9982...

Код:
if (p<=1)
then write('vhodit')
else write('ne vhodit');
Результат: ('ne vhodit')

Незнаю чему тебя там учили но математически это:
1. Мысленно переместиться в начало координат в (0, 1).
2. Проверить Находися ли мы в 3 четверте. Если да, то продолжаем, если нет то пишем "Невходит" и завершаем программу.
3. Измеряем расстояние от центра новой системы координат до заданной точки.
4. Сверяем это расстояние с радиусом окружности. Если больше, то точка входит, если нет, то "невходит".

Вот нормальные рассуждения........
Зачем проверять ненужные условия?
PS: а вот твоя математике мне непонятна.....

Последний раз редактировалось Вавел из ГМТУ; 11.09.2009 в 01:36.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 11.09.2009, 01:35   #9
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Ну... Примерно такое:
Код:
If (y<=0) Or (x>=0) Or (y<= { фукция F(x) } ) Then
      WriteLn('Yes')
Else
      WriteLn('No');


UpDate

Когда начал печатать, поста №7 с "суровыми условиями" ещё не было...
А почему у вас проверяется вхождение в Rect(-1, -1, 1, 1) - оно чтоль совсем обрезается?

Попробуйте так:
Код:
Var x, y, p: Real;
Begin
Read(x, y);
p:=Sqrt(x*x+(y-1)*(y-1));
If (x>1) Then
      WriteLn('ne vhodit')
Else
      If (x<-1) Then
            WriteLn('ne vhodit')
      Else
            If (y>1) Then
                  WriteLn('ne vhodit')
            Else
                  If (y<-1) Then
                        WriteLn('ne vhodit')
                  Else
                        If (x>=0) Then
                              WriteLn('vhodit')
                        Else
                              If (y<=0) Then
                                    WriteLn('vhodit')
                              Else
                                    If (p>1) Then
                                          WriteLn('vhodit')
                                    Else
                                          WriteLn('ne vhodit');
End;
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 11.09.2009 в 02:15. Причина: UpDate
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить, попадет ли точка с заданными координатами в область, закрашенную красным цветом Ксенька89 Помощь студентам 8 25.05.2009 22:45
Паскаль. Задача на графику..помогите доделать(( Diamond2107 Помощь студентам 8 17.05.2009 18:24
Помогите доделать задачу по паскаль. aleksandr_dss Помощь студентам 3 19.12.2008 10:56
Определить попала ли точка в область? Iogan Gamba Puti Общие вопросы Delphi 7 13.05.2008 00:15
паскаль l помогите доделать задачу по одномерн массиву braza Паскаль, Turbo Pascal, PascalABC.NET 15 27.04.2008 14:33