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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2009, 13:23   #1
random7
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 15
По умолчанию ООП, Паскаль, графика

Осталось сдать последнню лабу и никак не могу разобраться, помогите плз кто может... Задача такая: реализовать вращение креста в центре экрана. Программа должна быть написана с использованием ООП, содержать от 3х объектов и должны использоваться виртуальные методы.
Есть прога с одним объектом, так что можно только переделать. Буду очень благодарен за любую помощь.
Код:
program test;
uses crt, graph;
{-----------------------------------------------------------}
type
    Tkrest = object
        private
            radius : integer;
            timeDelay : integer;
        public
            procedure setRadius(pradius : integer);
            function getRadius : integer;
            procedure setTimeDel(ptime : integer);
            function getTimeDel : integer;
            procedure drawKrest;
            constructor init;
    end;
{-----------------------------------------------------------}
{ctor by default}
constructor Tkrest.init;
begin
end;
{-----------------------------------------------------------}
{установка радиуса}
procedure Tkrest.setRadius(pradius : integer);
begin
    if(pradius <= 0) then
        pradius := 50;
    radius := pradius;
end;
{-----------------------------------------------------------}
{получение радиуса}
function Tkrest.getRadius : integer;
begin
    getRadius := radius;
end;
{-----------------------------------------------------------}
{установка времени задержки}
procedure Tkrest.setTimeDel(ptime : integer);
begin
    if(ptime <= 0) then
        ptime := 1000;
    timeDelay := ptime;
end;
{-----------------------------------------------------------}
{получение времени задержки}
function Tkrest.getTimeDel : integer;
begin
    getTimeDel := timeDelay;
end;
{-----------------------------------------------------------}
{отрисовка креста}
procedure Tkrest.drawKrest;
var
    gd, gm, x1, y1, x2, y2, x3, y3, x4, y4, r, d, i, j : integer;
    ch :char;
begin
    gd := 0;
    initgraph(gd, gm, '');
    i := 1;
    j := 90;
    setcolor(5);
    setlinestyle(1, 0, 3);
    repeat
        x1 := round(getRadius * cos(i * pi / 180)) + getmaxx div 2;
        y1 := round(getRadius * sin(i * pi / 180)) + getmaxy div 2;
        x2 := round(getRadius * cos(i * pi / 180 + pi)) + getmaxx div 2;
        y2 := round(getRadius * sin(i * pi / 180 + pi)) + getmaxy div 2;
        x3 := round(getRadius * cos(j * pi / 180)) + getmaxx div 2;
        y3 := round(getRadius * sin(j * pi / 180)) + getmaxy div 2;
        x4 := round(getRadius * cos(j * pi / 180 + pi)) + getmaxx div 2;
        y4 := round(getRadius * sin(j * pi / 180 + pi)) + getmaxy div 2;
        line(x1, y1, x2, y2);
        line(x3, y3, x4, y4);
        delay(getTimeDel);
        cleardevice;
        if(i < 360) then inc(i) else i := 1;
        if(j < 450) then inc(j) else j := 90;
        if(keypressed) then ch := readkey;
    until(ch = #27);
end;
{-----------------------------------------------------------}
var
    krest : Tkrest;
    r, d : integer;
BEGIN
    clrscr;
    krest.init;
    write('Введите радиус: '); readln(r);
    krest.setRadius(r);
    write('Введите задержку: '); readln(d);
    krest.setTimeDel(d);
    krest.drawKrest;
END.
random7 вне форума Ответить с цитированием
Старый 24.11.2009, 13:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну если так с потолка...
Код:
var
    krest :array[1..3] of Tkrest;
    r, d,i : integer;
BEGIN
    clrscr;
  for i:=1 to 3 do begin    krest[i].init;
    write('Введите радиус: '); readln(r);
    krest[i].setRadius(r);
    write('Введите задержку: '); readln(d);
    krest[i].setTimeDel(d);
  end;
  repeat
   for i:=1 to 3 do    krest[i].drawKrest;
  until keypressed;
END.
и освобождать кресты не забудь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2009, 13:36   #3
random7
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 15
По умолчанию

не, я имел ввиду создание именно 3х разных объектов.
random7 вне форума Ответить с цитированием
Старый 24.11.2009, 13:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поясни. Для меня объект - это экземпляр класса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2009, 14:03   #5
random7
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 15
По умолчанию

не силен в терминологии, но тогда наверно я имел ввиду 3 разных класса... objecta 3 разных.
random7 вне форума Ответить с цитированием
Старый 24.11.2009, 14:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но тогда наверно я имел ввиду 3 разных класса
Во-первых: уточни у преподавателя чо понимается под словом "Объект"
Во-вторых: Три разных класса это достаточно сложная работа, занимает порядочно времени. Да еще и неизвесно что они делать должны.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2009, 14:45   #7
random7
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 15
По умолчанию

1) Под словом "объект" понимается объектный тип. Нужно 3 разных объектных типа (object). Тут надеюсь неясностей больше нет.
2) Если бы я мог сделать это сам, уверяю вас я бы тут не писал... Делать они могут что угодно, но в результате должен быть вращающийся крест.

Последний раз редактировалось random7; 24.11.2009 в 14:48.
random7 вне форума Ответить с цитированием
Старый 24.11.2009, 14:53   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Делать они могут что угодно, но в результате должен быть вращающийся крест.
Извини, но я смысл такой задачи не понимаю...
Сделай такой же класс, но его методы и поля назови по другому и так три раза - получишь решение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2009, 15:08   #9
random7
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 15
По умолчанию

Цитата:
Сделай такой же класс, но его методы и поля назови по другому и так три раза - получишь решение.
Я бы с удовольствием, но боюсь не прокатит)
Вот первое чего я не понимаю и есть этот момент: что выбрать в качестве этих классов... Думал так:
1) 1я линия креста
2) 2я линия креста
3) пересчет координат
random7 вне форума Ответить с цитированием
Старый 24.11.2009, 15:26   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

т.е. три класса - первый рассчитывает линию горизонтальную, второй вертикальную третий их наследует и отрисовывает с вращением?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
4 задачи паскаль ООП. Срок вторник днем по москве thebestneo Фриланс 2 21.12.2010 13:03
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55
графика, паскаль, ООП HoOpe Помощь студентам 18 25.03.2009 12:38
2 задачки по ООП Паскаль. по цене договоримся thebestneo Фриланс 1 21.12.2008 19:32