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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 13:38   #1
Александр 588
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 15
По умолчанию графика в паскале

парни помогите есть програмка, в ней движение окружности по окружности, и мне нужно переделать её что было движение прямоугольника по прямоугольнику

program LABA4;
uses graph, crt;
type mir = object
driver, mode: integer;
procedure create;
procedure destroy;
end;
procedure mir.create;
begin
driver:= vga;
mode:= vgahi;
InitGraph(driver,mode,'C:\');
end;
procedure mir.destroy;
begin
CloseGraph;
end;
type coord = object
x, y: integer;
constructor Init(ix,iy: integer);
destructor Delete;
function GetX: integer;
function GetY: integer;
procedure SetX(cx: integer);
procedure SetY(cy: integer);
end;
procedure coord.SetX(cx: integer);
begin
x:= cx;
end;
procedure coord.SetY(cy: integer);
begin
y:= cy;
end;
function coord.GetX: integer;
begin
GetX:= x;
end;
function coord.GetY: integer;
begin
GetY:= y;
end;
destructor coord.Delete;
begin
x:= 0;
y:= 0;
end;
constructor coord.Init(ix,iy: integer);
begin
x:= ix;
y:= iy;
end;
type pt = object (coord)
visible: boolean;
color: integer;
constructor PtInit(c,ix,iy:integer;v:boolean);
procedure Draw;
procedure Show; virtual;
procedure Hide; virtual;
end;
constructor Pt.PtInit(c,ix,iy: integer;v:boolean);
begin
color:= c;
x:= ix;
y:= iy;
visible:= v;
end;
procedure Pt.Show;
begin
visible:= true;
putpixel(x,y,color);
end;
procedure Pt.Hide;
begin
visible:= false;
putpixel(x,y,getBkColor);
end;
procedure Pt.Draw;
begin
if visible = true then putpixel(x,y,color);
end;
type circ = object (Pt)
rad: integer;
procedure move(dx,dy: integer);
procedure show; virtual;
procedure hide; virtual;
constructor initialize(ix,iy,ic,irad:integer;iv :boolean);
end;
procedure circ.show;
begin
visible:= true;
end;
procedure circ.hide;
begin
visible:= false;
end;
constructor circ.initialize(ix,iy,ic,irad:integ er;iv:boolean);
begin
x:= ix;
y:= iy;
color:= ic;
rad:= irad;
visible:= iv;
end;
procedure circ.move(dx,dy: integer);
begin
x:= dx;
y:= dy;
end;
type drawtype = object
procedure drawing(cx: circ; c: integer);
end;
procedure drawtype.drawing(cx: circ; c: integer);
begin
setcolor(c);
if cx.visible then circle(cx.x,cx.y,cx.rad);
end;
type sysobj = object
sdelay: integer;
procedure SetDelay(id: integer);
function GetDelay: integer;
procedure sysdelay;
function ButtonPressed: boolean;
procedure IncNum(var i: integer;n: integer);
procedure SetIntValue(var i: integer; n: integer);
end;
procedure sysobj.SetIntValue(var i: integer; n: integer);
begin
i:=n;
end;
procedure sysobj.IncNum(var i: integer;n: integer);
begin
i:= i + n;
end;
function sysobj.ButtonPressed: boolean;
begin
if keypressed then buttonpressed:= true
else buttonpressed:= false;
end;
procedure sysobj.SetDelay(id: integer);
begin
sdelay:= id;
end;
function sysobj.GetDelay: integer;
begin
GetDelay:= sdelay;
end;
procedure sysobj.sysdelay;
begin
delay(sdelay);
end;
type
pcirc = ^circ;
var
world: mir;
gm, gd, n, i, x, y: integer;
c1,c2: pcirc;
dr1: drawtype;
sysob: sysobj;
begin
world.create;
sysob.setintvalue(n,200);
c1:= new(pcirc,initialize(0,0,8,20,true) );
c2:= new(pcirc,initialize(320,240,8,178, false));
sysob.setintvalue(i,0);
sysob.setdelay(10000);
while 1 = 1 do
begin
c1^.move(trunc(c2^.x+(c2^.rad+22)*c os(6.28*(i/n))),trunc(c2^.y-(c2^.rad+22)*sin(6.28*(i/n))));
dr1.drawing(c1^,9);
dr1.drawing(c2^,9);
sysob.sysdelay;
dr1.drawing(c1^,0);
sysob.incnum(i,1);
if(sysob.ButtonPressed) then break;
end;
world.destroy;
end.
Александр 588 вне форума Ответить с цитированием
Старый 20.12.2009, 14:57   #2
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

неохота искать паскаль) написал на делфи, думаю сможешь переделать. там ничего сложного

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
dx,dy,i,vlx,vly,npx,npy:integer;
begin

vlx:=50;//левая верхняя координата внешнего прямоугольника
vly:=50;
npx:=450;//нижняя правая
npy:=250;

dx:=30;//ширина мелкого квадрата
dy:=20;//высота

for i:=vlx to npx do
begin
Canvas.Rectangle(i-dx,vly-dy,i+dx,vly+dy);
sleep(10);
end;

for i:=vly to npy do
begin
Canvas.Rectangle(npx-dx,i-dy,npx+dx,i+dy);
sleep(10);
end;

for i:=npx downto vlx do
begin
Canvas.Rectangle(i-dx,npy-dy,i+dx,npy+dy);
sleep(10);
end;

for i:=npy downto vly do
begin
Canvas.Rectangle(vlx-dx,i-dy,vlx+dx,i+dy);
sleep(10);
end;

end;
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 20.12.2009, 15:07   #3
Александр 588
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 15
По умолчанию

не не смогу переделать, я даже не знаю чё такое делфи
Александр 588 вне форума Ответить с цитированием
Старый 20.12.2009, 17:04   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Александр, а что такое Pascal Вы знаете?
я полностью согласен, движение по кругу переделывать смысла нет. Вам предложили правильный, простой алгоритм, решающий Вашу задачу.

перепишите его под Pascal и всё...
Canvas.Rectangle(vlx-dx,i-dy,vlx+dx,i+dy);
это нарисовать прямоугольник, задаются координаты x,y левого верхнего угла и правого нижнего.

sleep(10) — это то же самое, что delay(10) в Pascal
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.12.2009, 17:21   #5
Александр 588
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 15
По умолчанию

да я и паскаль толком не знаю, просто я не программист,у меня есть програмирование для общего развития оно идёт один семестр, поэтому мне тяжеловато переделать!!
Александр 588 вне форума Ответить с цитированием
Старый 20.12.2009, 17:29   #6
Александр 588
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 15
По умолчанию

а как вот это на паскале написать Canvas.Rectangle(vlx-dx,i-dy,vlx+dx,i+dy);
Александр 588 вне форума Ответить с цитированием
Старый 20.12.2009, 17:37   #7
Александр 588
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 15
По умолчанию

вот я тут переделал, но он мне выдаёт ошибку в конце посмотрите пожалуйста правельно ли я переделал?

program LABA4;
uses graph, crt;
type mir = object
driver, mode: integer;
procedure create;
procedure destroy;
end;
procedure mir.create;
begin
driver:= vga;
mode:= vgahi;
InitGraph(driver,mode,'C:\');
end;
procedure mir.destroy;
begin
CloseGraph;
end;
type coord = object
x, y: integer;
constructor Init(ix,iy: integer);
destructor Delete;
function GetX: integer;
function GetY: integer;
procedure SetX(cx: integer);
procedure SetY(cy: integer);
end;
procedure coord.SetX(cx: integer);
begin
x:= cx;
end;
procedure coord.SetY(cy: integer);
begin
y:= cy;
end;
function coord.GetX: integer;
begin
GetX:= x;
end;
function coord.GetY: integer;
begin
GetY:= y;
end;
destructor coord.Delete;
begin
x:= 0;
y:= 0;
end;
constructor coord.Init(ix,iy: integer);
begin
x:= ix;
y:= iy;
end;
type pt = object (coord)
visible: boolean;
color: integer;
constructor PtInit(c,ix,iy:integer;v:boolean);
procedure Draw;
procedure Show; virtual;
procedure Hide; virtual;
end;
constructor Pt.PtInit(c,ix,iy: integer;v:boolean);
begin
color:= c;
x:= ix;
y:= iy;
visible:= v;
end;
procedure Pt.Show;
begin
visible:= true;
putpixel(x,y,color);
end;
procedure Pt.Hide;
begin
visible:= false;
putpixel(x,y,getBkColor);
end;
procedure Pt.Draw;
begin
if visible = true then putpixel(x,y,color);
end;
type rect = object (Pt)
y1: integer;
procedure move(dx,dy: integer);
procedure show; virtual;
procedure hide; virtual;
constructor initialize(ix1,iy1,ix2,iy2:integer; iv:boolean);
end;
procedure rect.show;
begin
visible:= true;
end;
procedure rect.hide;
begin
visible:= false;
end;
constructor rect.initialize(ix1,iy1,ix2,iy2:int eger;iv:boolean);
begin
ix1:= ix1;
iy1:= iy1;
ix2:= ix2;
iy2:= iy2;
visible:= iv;
end;
procedure rect.move(dx,dy: integer);
begin
x:= dx;
y:= dy;
end;
type drawtype = object
procedure drawing(cx: rect; c: integer);
end;
procedure drawtype.drawing(cx: rect; c: integer);
begin
setcolor(c);
if cx.visible then bar(cx.x,cx.y,cx.x,cx.y);
end;
type sysobj = object
sdelay: integer;
procedure SetDelay(id: integer);
function GetDelay: integer;
procedure sysdelay;
function ButtonPressed: boolean;
procedure IncNum(var i: integer;n: integer);
procedure SetIntValue(var i: integer; n: integer);
end;
procedure sysobj.SetIntValue(var i: integer; n: integer);
begin
i:=n;
end;
procedure sysobj.IncNum(var i: integer;n: integer);
begin
i:= i + n;
end;
function sysobj.ButtonPressed: boolean;
begin
if keypressed then buttonpressed:= true
else buttonpressed:= false;
end;
procedure sysobj.SetDelay(id: integer);
begin
sdelay:= id;
end;
function sysobj.GetDelay: integer;
begin
GetDelay:= sdelay;
end;

procedure Button1Click(Sender: TObject);
var
dx,dy,i,vlx,vly,npx,npy:integer;
begin

vlx:=50;//ëåâàÿ âåðõíÿÿ êîîðäèíàòà âíåøíåãî ïðÿìîóãîëüíèêà
vly:=50;
npx:=450;//íèæíÿÿ ïðàâàÿ
npy:=250;

dx:=30;//øèðèíà ìåëêîãî êâàäðàòà
dy:=20;//âûñîòà

for i:=vlx to npx do
begin
bar(i-dx,vly-dy,i+dx,vly+dy);
delay(10);
end;

for i:=vly to npy do
begin
bar(npx-dx,i-dy,npx+dx,i+dy);
delay(10);
end;

for i:=npx downto vlx do
begin
bar(i-dx,npy-dy,i+dx,npy+dy);
delay(10);
end;

for i:=npy downto vly do
begin
bar(vlx-dx,i-dy,vlx+dx,i+dy);
delay(10);
end;
end;

end.
Александр 588 вне форума Ответить с цитированием
Старый 20.12.2009, 18:22   #8
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

ну почти... осталось пару строк удалить) но то что вставил до "end." это уже хорошо.
там готовый алгоритм. инициализируй граф режим и пиши все это дело без процедуры
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 20.12.2009, 18:33   #9
Александр 588
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 15
По умолчанию

т.е просто убрать последнюю процедуру??
и как инициализировать граф режим?
Александр 588 вне форума Ответить с цитированием
Старый 20.12.2009, 18:50   #10
Александр 588
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 15
По умолчанию

ни чё не понимаю, вот так вот???

program LABA4;
uses graph, crt;
type mir = object
driver, mode: integer;
procedure create;
procedure destroy;
end;
procedure mir.create;
begin
driver:= vga;
mode:= vgahi;
InitGraph(driver,mode,'C:\');
end;
procedure mir.destroy;
begin
CloseGraph;
end;
type coord = object
x, y: integer;
constructor Init(ix,iy: integer);
destructor Delete;
function GetX: integer;
function GetY: integer;
procedure SetX(cx: integer);
procedure SetY(cy: integer);
end;
procedure coord.SetX(cx: integer);
begin
x:= cx;
end;
procedure coord.SetY(cy: integer);
begin
y:= cy;
end;
function coord.GetX: integer;
begin
GetX:= x;
end;
function coord.GetY: integer;
begin
GetY:= y;
end;
destructor coord.Delete;
begin
x:= 0;
y:= 0;
end;
constructor coord.Init(ix,iy: integer);
begin
x:= ix;
y:= iy;
end;
type pt = object (coord)
visible: boolean;
color: integer;
constructor PtInit(c,ix,iy:integer;v:boolean);
procedure Draw;
procedure Show; virtual;
procedure Hide; virtual;
end;
constructor Pt.PtInit(c,ix,iy: integer;v:boolean);
begin
color:= c;
x:= ix;
y:= iy;
visible:= v;
end;
procedure Pt.Show;
begin
visible:= true;
putpixel(x,y,color);
end;
procedure Pt.Hide;
begin
visible:= false;
putpixel(x,y,getBkColor);
end;
procedure Pt.Draw;
begin
if visible = true then putpixel(x,y,color);
end;
type rect = object (Pt)
y1: integer;
procedure move(dx,dy: integer);
procedure show; virtual;
procedure hide; virtual;
constructor initialize(ix1,iy1,ix2,iy2:integer; iv:boolean);
end;
procedure rect.show;
begin
visible:= true;
end;
procedure rect.hide;
begin
visible:= false;
end;
constructor rect.initialize(ix1,iy1,ix2,iy2:int eger;iv:boolean);
begin
ix1:= ix1;
iy1:= iy1;
ix2:= ix2;
iy2:= iy2;
visible:= iv;
end;
procedure rect.move(dx,dy: integer);
begin
x:= dx;
y:= dy;
end;
type drawtype = object
procedure drawing(cx: rect; c: integer);
end;
procedure drawtype.drawing(cx: rect; c: integer);
begin
setcolor(c);
if cx.visible then bar(cx.x,cx.y,cx.x,cx.y);
end;
type sysobj = object
sdelay: integer;
procedure SetDelay(id: integer);
function GetDelay: integer;
procedure sysdelay;
function ButtonPressed: boolean;
procedure IncNum(var i: integer;n: integer);
procedure SetIntValue(var i: integer; n: integer);
end;
procedure sysobj.SetIntValue(var i: integer; n: integer);
begin
i:=n;
end;
procedure sysobj.IncNum(var i: integer;n: integer);
begin
i:= i + n;
end;
function sysobj.ButtonPressed: boolean;
begin
if keypressed then buttonpressed:= true
else buttonpressed:= false;
end;
procedure sysobj.SetDelay(id: integer);
begin
sdelay:= id;
end;
function sysobj.GetDelay: integer;
begin
GetDelay:= sdelay;
end;

procedure sysobj.sysdelay;
var
dx,dy,i,vlx,vly,npx,npy:integer;
begin

vlx:=50;//ëåâàÿ âåðõíÿÿ êîîðäèíàòà âíåøíåãî ïðÿìîóãîëüíèêà
vly:=50;
npx:=450;//íèæíÿÿ ïðàâàÿ
npy:=250;

dx:=30;//øèðèíà ìåëêîãî êâàäðàòà
dy:=20;//âûñîòà

for i:=vlx to npx do
begin
bar(i-dx,vly-dy,i+dx,vly+dy);
delay(10);
end;

for i:=vly to npy do
begin
bar(npx-dx,i-dy,npx+dx,i+dy);
delay(10);
end;

for i:=npx downto vlx do
begin
bar(i-dx,npy-dy,i+dx,npy+dy);
delay(10);
end;

for i:=npy downto vly do
begin
bar(vlx-dx,i-dy,vlx+dx,i+dy);
delay(10);
end;
end;
end.
Александр 588 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика на паскале Dark-cz Помощь студентам 0 13.12.2009 19:24
Графика в Паскале Igomax Помощь студентам 0 04.06.2009 20:50
графика в паскале Kravec Паскаль, Turbo Pascal, PascalABC.NET 5 16.04.2009 17:27
Графика в Паскале Win't Паскаль, Turbo Pascal, PascalABC.NET 2 16.12.2007 21:54