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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2011, 21:50   #1
DooD
 
Регистрация: 11.05.2011
Сообщений: 7
По умолчанию перевести программу рисования графиков с Pascal на Delphi

помогите перевести
Привет. В общем есть код на паскале,хочу перевести на delphi, однако не получается.вот код
Код:
Код:
{$n-,e+,f+}
uses graph,crt;
type TDFunc=function(t:real):real;
var alpha,beta,maxt,a,b,e1,e2,p,k,t,dt:real;
i,drv,mode:integer;


procedure sls(x:byte);
begin
setlinestyle(0,0,3*byte(x<>0))
end;

function v(t:real):real;
begin
v:=a*t+b+e1*sin(p*t+alpha);
end;

function x(t:real):REAL;
begin
x:=a*t*t/2+b*t+k+e2*sin(p*t+beta);
end;

function floattostr(x:real;p:byte):string;
var s:string;
begin
str(x:0:p,s);
floattostr:=s;
end;

procedure drawfunc(x1,y1,x2,y2:longint;tm:real;f:tdfunc;s1,s  2:string);
const dm=1.15;
var t,dt,ax,bx,ay,by,maxy,maxx:real;

function toscreenx(x:real):integer;
begin
toscreenx:=round(ax*x+bx);
end;

function toscreeny(y:real):INTEGER;
begin
toscreeny:=round(ay*y+by);
end;

begin
t:=0;
maxy:=0;
dt:=dm*tm/(x2-x1);
ax:=1/dt;
bx:=x1;
while t<tm do
begin
if f(t)>maxy then
begin

maxy:=f(t);
maxx:=t;
end;
t:=t+dt;
end;

maxy:=maxy*dm;

by:=y2;
ay:=(y1-by)/maxy;

sls(1);
setcolor(2);
line(x1,y1,x2,y2);
line(x1,y2,x2,y2);
sls(1);
setcolor(4);

moveto(x1,toscreeny(f(0)));
t:=0;
while t<tm do

begin

lineto(toscreenx(t),toscreeny(f(t)));
t:=t+dt;
end;

settextjustify(0,2);
setcolor(0);
setlinestyle(1,0,0);
line (toscreenx(tm),y2,toscreenx(tm),toscreeny(f(tm)));  

line (x1,toscreeny(maxy/dm),toscreenx(maxx),toscreeny(maxy/dm));
outtextxy(x1+5,y1,s1);
outtextxy(x2-15,y2+4,s2);
settextjustify(1,2);
outtextxy(toscreenx(tm),y2+4,floattostr(tm,2));
settextjustify(0,0);
outtextxy(x1+5,toscreeny(maxy/dm),floattostr(maxy,2));
end;

begin
write('a=');
read(a);
write('b=');
read(b);
write('E1=');
read(e1);
write('E2=');
read(e2);
write('p=');
read(p);
write('k=');
read(k);
write('alpha=');
read(alpha);
write('beta=');
read(beta);
directvideo:=false;
initgraph(drv,mode,'');
floodfill(1,1,1);
if a>0 then
maxt:=2*pi/p
else
begin
t:=0;
while v(t)>0 do
t:=t+0.0002;
maxt:=t
end;
drawfunc(0,100,310,410,maxt,v,'v,m/s','t,s');
drawfunc(320,100,630,410,maxt,x,'x,m','t,s');
t:=0;
dt:=maxt/8;

textattr:=$87;
writeln(' a=',a:0:2,' b=',b:0:2,' e1=',e1:0:2,' e2=',e2:0:2,
'p=',p:0:2,' k=',k:0:2,' alpha=',alpha:0:2,' beta=',beta:0:2,^m^j);
write('t,s ');
for i:=0 to 8 do
write(floattostr(i/8*maxt,3):8);
write(#13#10'v,m/s');
for i:=0 to 8 do
write(floattostr(v(i/8*maxt),3):8);
write(#13#10'x,m');
for i:= 0 to 8 do
write(floattostr(x(i/8*maxt),3):8);
readkey;
closegraph;
end.
рисовать я думал через paintbox вводить значения нужно с типом риал,можно взять edit и делать через floattostr.выводить тоже в edit или memo, но у меня чет не получается сами графики построить, я так понял line заменяется на moveto->lineto.
в общем кто может помогите с самим выводом графиков.спасибо.
DooD вне форума Ответить с цитированием
Старый 11.05.2011, 22:08   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Что конкретно не получается?

Последний раз редактировалось Son Of Pain; 11.05.2011 в 22:11.
Son Of Pain вне форума Ответить с цитированием
Старый 11.05.2011, 22:17   #3
DooD
 
Регистрация: 11.05.2011
Сообщений: 7
По умолчанию

построить графики.пытаюсь строить функцию v или х-не получается.+ в delphi нету line, по идее должно быть moveto liineto заместь line.
DooD вне форума Ответить с цитированием
Старый 11.05.2011, 23:16   #4
DooD
 
Регистрация: 11.05.2011
Сообщений: 7
По умолчанию

кто сделает-с меня $
DooD вне форума Ответить с цитированием
Старый 12.05.2011, 10:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Line легко реализуется с помощью MoveTo и LineTo

вот, посмотрите код просто как иллюстрацию к моим словам:
Код:
procedure Line(Cvs: TCanvas; x1, y1, x2, y2: integer);
begin
  Cvs.MoveTo(x1, y1);
  Cvs.LineTo(x2, y2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Canvas.Brush.Color := ClWhite;
  Canvas.Ellipse(200, 140, 250, 190);
  Line(Canvas, 229, 191, 229, 355);
  Line(Canvas, 192, 224, 228, 224);
  Line(Canvas, 191, 223, 152, 238);
  Line(Canvas, 231, 224, 274, 223);
  Line(Canvas, 274, 223, 297, 188);
  Line(Canvas, 225, 350, 150, 399);
  Line(Canvas, 153, 399, 150, 469);
  Line(Canvas, 151, 469, 117, 470);
  Line(Canvas, 231, 349, 306, 397);
  Line(Canvas, 307, 398, 308, 459);
  Line(Canvas, 308, 461, 344, 461);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.05.2011, 23:15   #6
DooD
 
Регистрация: 11.05.2011
Сообщений: 7
По умолчанию

апаю!
не получается,люди добрые кто может сделать,заплачу
DooD вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно перевести программу из Turbo Pascal в Delphi Insensible Doll Помощь студентам 3 27.05.2010 13:41
Скорость рисования графиков Master07 Общие вопросы C/C++ 3 16.07.2009 21:45
перевести программу из Pascal с использованием компонента Stringgrid в delphi. evrey Компоненты Delphi 4 02.06.2008 18:57