|
#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); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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) даны в пикселах. Отсюда и "танцуй".
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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. И форматируй код, невозможно в таком бардаке что-либо увидеть. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#40
|
|||
|
|||
огромное вам спасибо!!!)
я пробывал и другие варианты, но у меня всегда была m локальной, из-за этого и не получалось Последний раз редактировалось deniks, 26.04.2012 в 22:54. |