![]() |
|
|
#31
|
||||
|
||||
|
Цитата:
, но ужасно написанный код не служит оправданием. Там еще нужно исправить:Код:
function PODSHIPNIK1(WOB : Single; Index : Integer) : Single;
var
MAXF : Single;
IM : Integer;
begin
Result := 0;
knn := Round(0.9 * wob / 60 / f[1]);
kvv := Round(1.1 * wob / 60 / f[1]);
MK := A[KNN];
IM := KNN;
maxf := fmax * (km / 2) / k * im;
for I := KNN to KVV do
begin
if A[i] > MK then
begin
IM := I;
maxf := fmax * (km / 2) / k * im;
WOB1 := MAXF * 60;
end;
end;
{ AM := MAX(A); }
WOB1 := MAXF * 60;
Result := MAXF * SKRAT[Index];
end;
...
for I := 1 to L do
FT[i] := podshipnik1(wob, I);![]() |
|
#32
|
|||
|
|||
|
каждый день, новые проблемы( теперь дошел до след. процедуры и ее опять не считает(
Думаю ошибка в том, что оно как-то не может заполнить массив YG. Это я уже попытался переделать, но все-равно не считает Данная проблема уже решилась заменой m=1 YG[J,1]Код:
function SUMGARM(knn, kvv : integer) : real;
var S : real;
begin
Result := 0;
S := 0;
for I := KNN to KVV do
begin
S := S + sqr(A[i]);
end;
Result := sqrt(S);
end;
...
for J := 1 to L do
begin
kn:=round(0.98*Ft[J]/f[1]);
kv:=round(1.05*Ft[J]/f[1]);
IG := Maxgarm(kn,kv);
{ Maxgarm(A,kn,kv,ig); }
FG[J,M] := IG * F[1];
KN := round(IG - 3);
KV := round (IG + 3);
YG[J,m] := SUMGARM(KN, KV);
end;Последний раз редактировалось deniks, 21.03.2012 в 21:41. |
|
#33
|
|||
|
|||
|
дошёл наверное до 3/4 работы. При построении графика, система координат у делфи не такая ж как у паскаля, пытался и минус добавлять и ничего не хочет строить(
Код:
for i:=0 to 10 do
begin
a1[i]:=Amax/10*i;
form1.Image1.Canvas.moveTo(Xc-2,YC-round(a1[i]*ly));
form1.Image1.Canvas.LineTo(Xc+2,YC-round(a1[i]*ly));
str(a1[i]:2:3,sd1);
form1.Image1.Canvas.TextOut(Xc-46,YC-round(a1[i]*ly),sd1);
end; |
|
#34
|
||||
|
||||
|
Обычная система координат, основанная на пикселах. Выводишь в Image1, его размеры (Width и Height) даны в пикселах. Отсюда и "танцуй".
|
|
#35
|
|||
|
|||
|
всю процедуру выложу, и еще скрин программы
Для оси Х строит норм, а для Y не хочет ( выделил жырным ) Наконец-то я догадываюсь что не так. Оно берет макс значение, разбивает на 10 отрезков и их наносит на шкалу, но видать макс знач. не берется ![]() Код:
Procedure BUILD(AA, TT : MASK1; FT: MASK1; wob11, w : real);
Function Max(var p: mask1):single;
var mk:single;
begin
mk:=P[1];
For i:=2 to k do
if p[i]>mk then mk:=p[i];
Max:=mk;
end;
Function Min(var pp: mask1): single;
var mmk:single;
begin
mmk:=PP[1];
For i:=2 to k do
if pp[i] < mmk then mmk:=pp[i];
Min:=mmk;
end;
var Fg: maskdd;
fgr, AMIN,Amax,Fmaxx : real;
a1,t1: mas3;kf,k1: integer;
begin
if w=2 then
begin
Amin:=Min(aa);
if Amin <= 0 then
begin
for i:=1 to k do
aa[i]:=aa[i]+abs(Amin);
end
else begin
for i:=1 to k do
aa[i]:=aa[i];
end;
Fmaxx:=tt[k];
Amax := Max(aa);
end;
if w=1 then begin
Fmaxx:=1.05*fd;
Amax := Max(aa);
end;
Xc:=100;
Xb:=(form1.Image1.Height div 2);
Yc:=420;Yb:=50;
dlinaOsiX:=500;
dlinaOsiY:=400;
if Amax>0 then
ly:=dlinaOsiY/(1.1*Amax);
lx:=dlinaOsiX/Fmaxx*0.9;
form1.Image1.Canvas.moveTo(Xc,Yc);
form1.Image1.Canvas.LineTo(Xc+dlinaOsiX,Yc);
form1.Image1.Canvas.moveTo(Xc,Yc);
form1.Image1.Canvas.LineTo(Xc,Yc-dlinaOsiY);
form1.Image1.Canvas.TextOut(xc-20,yc-dlinaOsiY-10,'A ');
if w=2 then
form1.Image1.Canvas.TextOut(xc+dlinaOsiX-10,yc-14,'T,c')
else
form1.Image1.Canvas.TextOut(xc+dlinaOsiX-5,yc-14,'f,Гц');
{ось X}
for i:=0 to 10 do
begin
t1[i]:=(Fmaxx/10)*i;
form1.Image1.Canvas.moveTo(Xc+round(t1[i]*lx),Yc-2);
form1.Image1.Canvas.LineTo(Xc+round(t1[i]*lx),Yc+2);
if (w=2) then
str(t1[i]:2:2,sd)
else
str(t1[i]:2:0,sd);
form1.Image1.Canvas.TextOut(Xc+round(t1[i]*lx),Yc+6,sd);
end;
{ось Y}
for i:=0 to 10 do
begin
a1[i]:=(Amax/10)*(i);
form1.Image1.Canvas.moveTo(Xc-2,YC-round(a1[i]*ly));
form1.Image1.Canvas.LineTo(Xc+2,YC-round(a1[i]*ly));
str(a1[i]:2:3,sd1);
form1.Image1.Canvas.TextOut(400,YC-round(a1[i]*ly),sd1);
end;
if w=2 then
k1:=k;
if (w=1) or (w=3) then
k1:=round(fd*1.05/f[1]);
form1.Image1.Canvas.moveTo(Xc + round(tt[1]*lx),Yc-round(aa[1]*ly));
for i:=2 to k1 do
begin
form1.Image1.Canvas.pen.Color:=clGreen;
form1.Image1.Canvas.LineTo(Xc + round(tt[i]*lx),Yc-round(aa[i]*ly));
end;
End;Последний раз редактировалось deniks, 25.03.2012 в 01:00. |
|
#36
|
||||
|
||||
|
Так навскидку не скажешь, создай временные переменные и в отладчике посмотри их значения:
Код:
for I :=0 to 10 do
begin
a1[i] := Amax / 10 * I;
III := YC-round(a1[i] * ly;
form1.Image1.Canvas.moveTo(Xc-2, III));
form1.Image1.Canvas.LineTo(Xc+2, III);
str(a1[i]:2:3,sd1);
form1.Image1.Canvas.TextOut(400, YC-round(a1[i] * ly), sd1);
end;P.S. И форматируй код, невозможно в таком бардаке что-либо увидеть. |
|
#37
|
|||
|
|||
|
получилось... исправил
|
|
#38
|
|||
|
|||
|
делаю программу, столкнулся с простой проблемой. не получается сделать счетчик для кнопки. тоесть нажимаю на кнопку Отчёт например и переменной m:=1. нажимаю еще раз и m:=2 тоесть увеличивается на 1н.
попытался сделать так Код:
procedure TForm1.Button3Click(Sender: TObject);
var m : integer;
begin
m :=0;
if form1.Button2.Enabled = True then
m := m+1;
form1.Label4.Caption := IntToStr(m);
end;Пример программы ![]() |
|
#39
|
||||
|
||||
|
А зачем проверять состояние кнопки? Если она запрещена, то и так не нажмёшь.
Код:
var m : integer; procedure TForm1.Button3Click(Sender: TObject); begin inc(m); Label4.Caption := IntToStr(m); end; |
|
#40
|
|||
|
|||
|
огромное вам спасибо!!!)
я пробывал и другие варианты, но у меня всегда была m локальной, из-за этого и не получалось Последний раз редактировалось deniks, 26.04.2012 в 22:54. |