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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 20:00   #1
Ardentis
 
Регистрация: 23.04.2011
Сообщений: 4
По умолчанию Построение класса

Помогите пожалуйста с заданием: Разработать приложение, позволяющее определять, принадлежит ли точка с координатами (X,Y) кругу или кольцу.
Постройте класс “кольцо” как потомок класса “круг”. Все данные для создания объектов задаются в программе, в которой выводятся характеристики объектов, их размеры и сообщение “Точка принадлежит кругу (кольцу)” или “Точка не принадлежит кругу (кольцу)”.
Окно приложения должно включать компоненты для ввода данных и вывода результата, командные кнопки запуска и закрытия приложения.

С чего вообще начинать и какие поля у этих классов должны быть?
Ardentis вне форума Ответить с цитированием
Старый 06.04.2012, 22:17   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Навскидку:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
  Tdot=class
    x,y:real;
    constructor create(x1,y1:real);
  end;

  Tround=class//центр - начало координат. При желании можно ввести еще два поля с координатами центра и переделать формулы в CheckDot
    R:real;//круг описываем при помощи радиуса
    constructor create(R1:real);
    function CheckDot(D:Tdot):boolean;
  end;

  Tring=class(Tround)
    R2:real;//кольцо - двумя радиусами, внутренним и внешним
    constructor create(R1,R_2:real);
    function CheckDot(D:Tdot):boolean;
  end;

constructor Tdot.create(x1: Real; y1: Real);
begin
  x:=x1;
  y:=y1;
end;

constructor Tround.create(R1: Real);
begin
  r:=r1;
end;

constructor Tring.create(R1: Real; R_2: Real);
begin
  if r1<r_2 then
    begin
      R:=r1;
      R2:=r_2;
    end
  else
    begin
      R:=r_2;
      R2:=r1;
    end
end;

function Tround.CheckDot(D:Tdot):boolean;
begin
  if sqr(d.x)+sqr(d.y)=sqr(R) then
    result:=true
  else
    result:=false;
end;

Function Tring.CheckDot(D:Tdot):boolean;
var
  tmp:real;
begin
  tmp:=sqr(d.x)+sqr(d.y);
  if (tmp<=sqr(R2))and(tmp>=sqr(R)) then
    result:=true
  else
    result:=false;
end;



var
  dot:Tdot;
  round:Tround;
  ring:Tring;
begin
  dot:=Tdot.create(5,0);
  round:=Tround.create(5);
  ring:=Tring.create(3,8);
  writeln(round.CheckDot(dot));
  writeln(ring.CheckDot(dot));
  dot.Free;
  round.Free;
  ring.Free;
  readln
end.
С кольцами работать будет достаточно успешно, с кругами могут быть ошибки из-за округлений. Возможно следует ввести погрешность.

Дерзай, идею я тебе подкинул.

На всякий случай:

Как я написал в комментариях, в моем примере x0=y0=0. Но можно и переделать
Все тривиальное просто

Последний раз редактировалось whatever; 06.04.2012 в 22:25.
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция базового класса вызывает критическую ошибку при вызове для класса-потомка Archet Общие вопросы C/C++ 7 17.01.2012 20:17
Конструктор класса не хочет принимать в качестве параметра адрес объекта другого класса Jugger Помощь студентам 3 05.01.2012 04:10
Построение класса Steam.dll Помощь студентам 2 15.05.2011 15:58
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться zipwind C++ Builder 1 09.04.2011 17:18
Определение типа класса по переменной на объект этого класса при компиляции phomm Общие вопросы Delphi 24 08.04.2011 14:11