T
tatar
[codebox]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RxGrdCpt, RxNotify, PageMngr, ExtCtrls, SpeedBar, OleServer,
AccessXP, StdCtrls, ToolWin, ActnMan, ActnCtrls, Spin;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Timer1: TTimer;
Image1: TImage;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array [0..10000] of real;
c:array [0..10000] of smallint;
vv,Fd,NN:longint;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
vv:=0;FD:=1000; NN:=1000;
SpinEdit1.Value:=Fd;
SpinEdit2.Value:=NN;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
W5,H5,x,y:integer;
i,e:longint;
tt:string;
kx,ky,max, min:real;
begin
W5:=Image1.Width-20;kx:=(W5-25)/NN;
for e:=0 to nn do a[e]:=random(3)+70+100*sin(e/100+vv/10);вот этот синус неопознается
{asm
pusha
//*************LTP initialization***************
mov dx,37ah
in al,dx
or al,20h
out dx,al
//*************Выборочный запрет прерывания ****
mov al,11111101b
out $021,al
mov al,00000001b
out $0a1,al
//*************Задание границ памяти для ввода данных*
mov edi,offset c[0]
mov ecx,NN
add ecx,02
//************* Проверка готовности АЦП ***************
@1: mov dx,379h
@2: in al,dx
test al,80h
Jz @2
@3: in al,dx
test al,80h
Jz @3
//************Ввод данных с АЦП ***********************
mov dx,378h
in ax,dx
shr ah,5
xor ah,02h
test ah,02h
Jz @4
and ah,01h
neg ax
@4: mov word ptr ds:[edi],ax
inc edi
inc edi
loop @1
//************Срятие запрета всех прерываний***********
mov al,00000000b
out $021,al
out $0a1,al//sti
popa }
//end;
for i:=0 to NN do a[e]:=(c);
max:=1e-10; min:=1e10;
for i:=0 to NN do begin
if max<(a) then max:=a;
if min>(a) then min:=a;
end;
H5:=Image1.Height;
if max>min then ky:=(H5-40)/(max-min) else ky:=1;
with Image1.Canvas do begin
Brush.Color:=clwhite;
Pen.Width:=2;
FillRect(ClipRect);
Pen.Color:=clRed;
moveto(35,round(h5-30-(a[0]-min)*ky));
end;
for i:=1 to NN do begin
with Image1.Canvas do begin
x:=35+round(i*kx);
y:=round(h5-30-(a-min)*ky);
LineTo(x,y);
end;end;
//************Text******************
with Image1.Canvas do begin
Pen.color:=cllime;
//************horizontal************
MoveTo(35,H5-25);Lineto(W5+10,H5-25);
TextOut(W5 div 2,H5-12,'Time,s');
For i:=0 to 10 do begin
x:=35+round(i*(W5-25)/10);
Moveto(x,H5-25);LineTo(x,H5-30);
str((NN/Fd*i/10):4:2,tt);
TextOut(x-10,H5-22,tt);end;
//**********Vertical**************
MoveTo(35,0);lineto(35,H5-25);
For i:=0 to 10 do begin
y:=h5-30-round(i*(H5-40)/10);
Moveto(35,y);LineTo(38,y);
str(((max-min)/10*i+min):4:1,tt);
TextOut(0,y-5,tt);
end;end;
if vv<100000 then inc(vv) else vv:=0; Str(VV:4,tt);
Label1.Caption:=TT+' Cycle';
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
if SpinEdit1.Text<>'' then
SpinEdit1.Value else Fd:=1000;
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
if SpinEdit2.Text<>'' then
NN:=SpinEdit2.Value else NN:=1000;
end;end.[/codebox]
мой перевод на C++ все отображает кроме графика если убрать
функцию синуса
поиогите кто чем может
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RxGrdCpt, RxNotify, PageMngr, ExtCtrls, SpeedBar, OleServer,
AccessXP, StdCtrls, ToolWin, ActnMan, ActnCtrls, Spin;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Timer1: TTimer;
Image1: TImage;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array [0..10000] of real;
c:array [0..10000] of smallint;
vv,Fd,NN:longint;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
vv:=0;FD:=1000; NN:=1000;
SpinEdit1.Value:=Fd;
SpinEdit2.Value:=NN;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
W5,H5,x,y:integer;
i,e:longint;
tt:string;
kx,ky,max, min:real;
begin
W5:=Image1.Width-20;kx:=(W5-25)/NN;
for e:=0 to nn do a[e]:=random(3)+70+100*sin(e/100+vv/10);вот этот синус неопознается
{asm
pusha
//*************LTP initialization***************
mov dx,37ah
in al,dx
or al,20h
out dx,al
//*************Выборочный запрет прерывания ****
mov al,11111101b
out $021,al
mov al,00000001b
out $0a1,al
//*************Задание границ памяти для ввода данных*
mov edi,offset c[0]
mov ecx,NN
add ecx,02
//************* Проверка готовности АЦП ***************
@1: mov dx,379h
@2: in al,dx
test al,80h
Jz @2
@3: in al,dx
test al,80h
Jz @3
//************Ввод данных с АЦП ***********************
mov dx,378h
in ax,dx
shr ah,5
xor ah,02h
test ah,02h
Jz @4
and ah,01h
neg ax
@4: mov word ptr ds:[edi],ax
inc edi
inc edi
loop @1
//************Срятие запрета всех прерываний***********
mov al,00000000b
out $021,al
out $0a1,al//sti
popa }
//end;
for i:=0 to NN do a[e]:=(c);
max:=1e-10; min:=1e10;
for i:=0 to NN do begin
if max<(a) then max:=a;
if min>(a) then min:=a;
end;
H5:=Image1.Height;
if max>min then ky:=(H5-40)/(max-min) else ky:=1;
with Image1.Canvas do begin
Brush.Color:=clwhite;
Pen.Width:=2;
FillRect(ClipRect);
Pen.Color:=clRed;
moveto(35,round(h5-30-(a[0]-min)*ky));
end;
for i:=1 to NN do begin
with Image1.Canvas do begin
x:=35+round(i*kx);
y:=round(h5-30-(a-min)*ky);
LineTo(x,y);
end;end;
//************Text******************
with Image1.Canvas do begin
Pen.color:=cllime;
//************horizontal************
MoveTo(35,H5-25);Lineto(W5+10,H5-25);
TextOut(W5 div 2,H5-12,'Time,s');
For i:=0 to 10 do begin
x:=35+round(i*(W5-25)/10);
Moveto(x,H5-25);LineTo(x,H5-30);
str((NN/Fd*i/10):4:2,tt);
TextOut(x-10,H5-22,tt);end;
//**********Vertical**************
MoveTo(35,0);lineto(35,H5-25);
For i:=0 to 10 do begin
y:=h5-30-round(i*(H5-40)/10);
Moveto(35,y);LineTo(38,y);
str(((max-min)/10*i+min):4:1,tt);
TextOut(0,y-5,tt);
end;end;
if vv<100000 then inc(vv) else vv:=0; Str(VV:4,tt);
Label1.Caption:=TT+' Cycle';
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
if SpinEdit1.Text<>'' then
SpinEdit1.Value else Fd:=1000;
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
if SpinEdit2.Text<>'' then
NN:=SpinEdit2.Value else NN:=1000;
end;end.[/codebox]
мой перевод на C++ все отображает кроме графика если убрать
функцию синуса
поиогите кто чем может