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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 19:36   #1
Al'f!ra
Пользователь
 
Регистрация: 15.02.2012
Сообщений: 10
По умолчанию Программа определения принадлежности точки заштрихованной области

Написать программу определения принадлежности точки М(x,y), заштрихованной области, изображенной на рисунке ( уравнение окружности x^2+y^2=r^2)

Snapshot_20120215.JPG
вроде задача легкая а с заштрихованным сектором проблема
Al'f!ra вне форума Ответить с цитированием
Старый 15.02.2012, 21:56   #2
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Код:
function PointInArea(X, Y: Real): Boolean;
begin
  PointInArea := false;
  If y > 0 then // верхняя часть
    PointInArea := (sqr(x) + sqr(y) <= 4) and (x <= 1)
  else if x < 0 then // или левая нижнаяя часть
    PointInArea := (sqr(x) + sqr(y) <= 4);
end;
Знак "меньше или равно" можно заменить просто на "меньше", если по условию точка не может находиться на границах областей.

Последний раз редактировалось Stilet; 16.02.2012 в 08:22.
deathNC вне форума Ответить с цитированием
Старый 15.02.2012, 22:23   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

верхняя граница не правильно определяется!
Отгадайте, почему?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 15.02.2012, 22:54   #4
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Hacker19_90, забыл :-[

Сейчас будет

Код:
function PointInArea(X, Y: Real): Boolean;
begin
  PointInArea := false;
  If y > 0 then // верхняя часть
    PointInArea := (sqr(x) + sqr(y) <= 4) and (x <= 1) and (y >= -x)
  else if x < 0 then // или левая нижнаяя часть
    PointInArea := (sqr(x) + sqr(y) <= 4);
end;

Последний раз редактировалось Stilet; 16.02.2012 в 08:29.
deathNC вне форума Ответить с цитированием
Старый 16.02.2012, 00:21   #5
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию

PointInArea := false; - лишнее
Если лень что-то делать, заставь это делать машину ... =,
Katus вне форума Ответить с цитированием
Старый 16.02.2012, 00:23   #6
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Katus, не, не лишнее. Это нужно для случая
Код:
(y =< 0) and (x >= 0)
который тут не описан. то есть для правого нижнего сектора
deathNC вне форума Ответить с цитированием
Старый 16.02.2012, 01:09   #7
Katus
Форумчанин
 
Регистрация: 30.11.2011
Сообщений: 161
По умолчанию

понял... то есть ваш код эквивалентен
Код:
function PointInArea(X, Y: Real): Boolean;
begin
  If y > 0 then // верхняя часть // да1
    PointInArea := (sqr(x) + sqr(y) <= 4) and (x <= 1) and (y >= -x)
  else if x < 0 then // или левая нижнаяя часть // да2
    PointInArea := (sqr(x) + sqr(y) <= 4)
  else
    PointInArea := false; // нет2
end;
помоему мой вариант эффективнее... т.к. не делаются лишние действия по ветвям да1 и да2

извините, а функциям разве нельзя по умолчанию задавать значение? =.

например, function f(x:byte):boolean=false;
Если лень что-то делать, заставь это делать машину ... =,

Последний раз редактировалось Stilet; 16.02.2012 в 08:30.
Katus вне форума Ответить с цитированием
Старый 16.02.2012, 01:26   #8
deathNC
Пользователь
 
Аватар для deathNC
 
Регистрация: 10.01.2010
Сообщений: 44
По умолчанию

Да, в таком случае Ваш вариант более разумный

А про значение по умолчанию - по-моему такого нет.
deathNC вне форума Ответить с цитированием
Старый 16.02.2012, 08:44   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ничего не понимаю: а где код Katus?!

Цитата:
извините, а функциям разве нельзя по умолчанию задавать значение? =.
например, function f(x:byte):boolean=false;
в Pascal/Delphi - нет, нельзя!


и вообще не понимаю, какие тут могут быть дискуссии, имхо, код deathNC из пост #4 выглядит вполне рабочим, надёжным и понятным.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.02.2012, 23:07   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ничего не понимаю: а где код Katus?!
Цитата:
Код:
function PointInArea(X, Y: Real): Boolean;
begin
  If y > 0 then // верхняя часть // да1
    PointInArea := (sqr(x) + sqr(y) <= 4) and (x <= 1) and (y >= -x)
  else if x < 0 then // или левая нижнаяя часть // да2
    PointInArea := (sqr(x) + sqr(y) <= 4)
  else
    PointInArea := false; // нет2
end;
и ,Katus, пора определиться : в одном случае вы пишете 'If', в другом 'if'.
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа которая вычисляет принадлежит ли ли данная точка «заштрихованной» области. Kesida Помощь студентам 3 05.10.2011 03:48
Определение принадлежности точки druger Помощь студентам 1 18.09.2011 16:45
Поиск принадлежности точки области CrazyN00b Win Api 3 13.04.2010 00:19
Принадлежность точки заштрихованной области или нет. Gren-de-vald Microsoft Office Excel 5 15.11.2009 14:41
Определение принадлежности точки к сектору. Vistar Паскаль, Turbo Pascal, PascalABC.NET 12 09.05.2009 20:46