IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Турбо Паскаль и его объектно ориентированные средства, Объектно-ориентированные приложения
сообщение
Сообщение #1


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Снова я( я всем наверно надоел(со своими темами)

Есть код проги которая гоняет точку и окружность по экрану случайным образом...до нажатия какой-либо клавиши...не могли вы бы мне помочь ее как то усложнить? К примеру.. Можно изменить цвет окружности и точку(точку вобще хотелось поменять на другую фигуру на пример квадрат который крутится) Менять радиус окружности вообщем размеры фигур(любые действия над фигурами) или поворачивать фигуры против часовой стрелки и наоборот---- и это все может менять пользователь при помощи нажатия какой либо клавиши или меню Программа сделана на принципе модульного программирования!

Создадим модуль графических объектов GraphObj.
 Unit GraphObj; {Модуль графических объектов}
INTERFACE {Интерфейсная часть}
Type
PLocation = ^TLocation;
TLocation = object
X,Y: Word; {Координаты позиции на экране}
Constructor Init(InitX, InitY: Word);
{Инициализация объекта}
Function GetX: Word; {Возвращает координату Х}
Function GetY: Word; {Возвращает координату Y}
Procedure GetCoords(Var CoordX, CoordY: Word);
{Возвращает обе координаты}
Destructor Done; virtual; {Уничтожает объект}
End;
PPoint = ^TPoint;
TPoint = object(TLocation)
Clr: Byte; {Цвет}
Visib: Boolean; {Видимость}
Constructor Init(InitX,InitY:Word; InitColor:Byte);
{Переопределяем метод инициализации-добавляем цвет}
Function GetColor: Byte; {Возвращает цвет}
Procedure Show; virtual;
Procedure Hide; virtual;
Function IsVisib: Boolean;
Procedure ChangeColor(NewColor:Byte);{Меняет цвет}
Procedure MoveTo(NewX, NewY: Word);
{Перемещает в новую позицию}
Destructor Done; virtual;
end;
PCircle = ^TCircle;
TCircle = object(TPoint)
R: Word; {Радиус}
Constructor Init(InitX,InitY,InitR:Word;InitC:Byte);
Procedure Show; virtual;
Procedure Hide; virtual;
Destructor Done; virtual;
end;
IMPLEMENTATION {Раздел реализации}
Uses Graph; {Подключаем графическую библиотеку}
Constructor TLocation.Init;
Begin
X := InitX;
Y := InitY
end;
Function TLocation.GetX: Word;
begin
GetX := X
end;
Function TLocation.GetY: Word;
begin
GetY := Y
end;
Procedure TLocation.GetCoords;
begin
CoordX := GetX;
CoordY := GetY
end;
Destructor TLocation.Done;
begin
end;
Constructor TPoint.Init;
begin
inherited Init(InitX, InitY);
Clr := InitColor;
Visib := False
end;
Function TPoint.GetColor: Byte;
begin
GetColor := Clr
end;
Procedure TPoint.Show;
begin
PutPixel(X, Y, Clr);
Visib := True
end;
Procedure TPoint.Hide;
begin
PutPixel(X, Y, GetBkColor);
Visib := False
end;
Function TPoint.IsVisib: Boolean;
begin
IsVisib := Visib
end;
Procedure TPoint.ChangeColor;
begin
Clr := NewColor;
If IsVisib then Show
end;
Procedure TPoint.MoveTo;
Var St: Boolean;
begin
St := IsVisib;
Hide;
X := NewX;
Y := NewY;
If St then Show
end;
Destructor TPoint.Done;
begin
Hide;
Clr := GetBkColor
end;
Constructor TCircle.Init;
begin
inherited Init(InitX, InitY, InitC);
R := InitR
end;
Procedure TCircle.Show;
begin
SetColor(Clr);
Circle(X, Y, R);
Visib := True
end;
Procedure TCircle.Hide;
begin
SetColor(GetBkColor);
Circle(X, Y, R);
Visib := False
end;
Destructor TCircle.Done;
begin
inherited Done;
R := 0
end;
{Пустая секция инициализации}
END.



Основной код проги к которому привязан графический модуль:

В приложении будут созданы экземпляры объектов TPoint и TCircle, причем экземпляр объекта TPoint мы разместим в области динамической памяти.
Program AppExample;
Uses Graph, CRT, GraphObj;
Type
TApplication = object
Procedure Init;
Procedure Run;
Procedure Done;
end;
Var
Application: TApplication;
p: PPoint;
c: TCircle;

Procedure TApplication.Init;
Var
D, R, MaxX, MaxY: Integer;
Begin
{Инициализация графического режима}
D := Detect;
InitGraph(D, R, 'C:\B\BGI');
SetBkColor(White);
ClearDevice;
{Создаем точку и окружность}
MaxX := GetMaxX;
MaxY := GetMaxY;
Randomize;
New(p,Init(Random(MaxX), Random(MaxY),Red));
p^.Show;
c.Init(Random(MaxX-40)+20,Random(MaxY-40)+20,20,Blue);
c.Show
End;
Procedure TApplication.Run;
Var
MaxX, MaxY: Integer;
Begin
MaxX := GetMaxX;
MaxY := GetMaxY;
Repeat
p^.MoveTo(Random(MaxX),Random(MaxY));
c.MoveTo(Random(MaxX-40)+20,Random(MaxY-40)+20);
Delay(4000)
Until KeyPressed
End;
Procedure TApplication.Done;
Begin
Dispose(p,Done);
c.Done;
CloseGraph
End;
BEGIN
Application.Init;
Application.Run;
Application.Done
END.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 14)
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


 ! 
dron4ik, почему тема про Турбо Паскаль в разделе Другие Языки?? Ты забыл, на какой форум зашел?? В следующий раз буду штрафовать за такое издевательство..
Тема перенесена



Цитата(dron4ik @ 9.05.2009 23:47) *
не могли вы бы мне помочь ее как то усложнить? К примеру..
Запросто. Скажи, в чем затруднение - мы поможем.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
Программа сделана на принципе модульного программирования!
Программа неправильно написана с использованием ООП, это все, что я могу тебе сказать. Окружность не является подвидом Точки, чтоб от нее наследоваться. А если тебе понадобится теперь ввести в иерархию еще и Квадрат, от чего ты его будешь наследовать, от Окружности что-ли? Скорее, и Точка и Окружность, и Квадрат являются подвидами какой-то абстрактной Фигуры, что могло бы быть описано так:

type
TFigure = object
{ ... }
end;

TPoint = object(TFigure)
{ ... }
end;
TCircle = object(TFigure)
{ ... }
end;
{ Ну, и остальное, что тебе может понадобиться }
Кроме всего прочего это позволит минимизировать количество вносимых изменений при добавлении объектов в иерархию наследования. Так что, прежде чем усложнять, надо сделать правильно, а то потом эту "усложненную" версию придется переписывать с нуля, чтоб она заработала.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Извините а куда перенесена тема?( В какой раздел?(

Добавлено через 4 мин.
А что мне теерь делать? Как ее изменить?(я профан по ООП)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(dron4ik @ 10.05.2009 9:47) *
Извините а куда перенесена тема?( В какой раздел?(
А посмотреть строку навигации Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи пока ты писал этот мессадж было трудно?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Я иммею ввиду задачу.

Добавлено через 4 мин.
От какой фигуры они могут наследоваться(квадрат, окружность, и точка) По сути мне можно сделать тему курсовой любую можно взять, кроме программ написанных по принципу процедурного программирования(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


У меня есть другая программа написанная на СИ++ . Она находит кратчайший путь между двумя любымми вершинамми графа.т.е пользователь вводит количество вершин потом вводит вес ребер(их длину между раз-ными вершинами)потом пользователь вводит две вершины между которыми он должен найти кратчайшиий путь... потом прога выводит длинну кратчайшего пути. Может она прапвильно выполнена с использованием ООП?т.е. абстрактной фигурой является граф.. на графе вершины(точки) и ребра т.е. точки и ребра являются подвидами графа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(dron4ik @ 10.05.2009 9:53) *
От какой фигуры они могут наследоваться(квадрат, окружность, и точка)
Тебе же это явно написал volvo. Зачем спрашивать то, на что уже отвечено?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


У меня есть другая программа написанная на СИ++ . Она находит кратчайший путь между двумя любымми вершинамми графа.т.е пользователь вводит количество вершин потом вводит вес ребер(их длину между раз-ными вершинами)потом пользователь вводит две вершины между которыми он должен найти кратчайшиий путь... потом прога выводит длинну кратчайшего пути. Может она прапвильно выполнена с использованием ООП?т.е. абстрактной фигурой является граф.. на графе вершины(точки) и ребра т.е. точки и ребра являются подвидами графа.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(dron4ik @ 10.05.2009 10:42) *
У меня есть другая программа написанная на СИ++
Ну и зачем дублировать мессаджи? Типа погромче прокричать? Оба эти мессаджа - чистый флуд. Задаешь влпросы про программу - слушай ответы и внимай им. Никого тут не интересуют твои курсовые. Спрашиваешь по программированию - пожалуйста. А подбирать тебе программу, чтобы ты свалил курсовик - уволь. Сам признаешь, что "профан в ООП". Хочешь научиться - милости просим, только слушай. Хочешь свалить курсовик - не по адресу..

Еще один флуд типа "а может там правильно" - закрываю тему.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Извините( Мне просто не с кем посоветоваться(

Добавлено через 3 мин.
Является ли вершины и ребра подклассами или подвидами графа?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
Является ли вершины и ребра подклассами или подвидами графа?
Вершины и ребра - отдельные классы, не являющиеся подвидами графа. Они составляют граф (т.к. граф состоит из вершин и ребер). Следовательно, здесь есть агрегация - в класс Граф включены переменные классов Вершина и Ребро - (отношение "имеет"), но не наследование (которое определяло бы отношение "является подвидом").
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Т.е есть программа написанная по такому принципу не является Обьектно Ориентированной?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Программа написанная по КАКОМУ принципу? Где
Цитата
точки и ребра являются подвидами графа
? Объектно-ориентированной может и является. Но она в первую очередь не является правильной. По какому принципу она написана - это уже дело десятое.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Бывалый
****

Группа: Пользователи
Сообщений: 318
Пол: Мужской

Репутация: -  0  +


Мне вообщем нужно чтобы прога была написана по ООП. Главное чтобы она не была написана процедурным программированием. Прога готова могу выложить код.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2024 18:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name