Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 21.03.2012, 00:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от deniks
но он работает
Конечно , но ужасно написанный код не служит оправданием. Там еще нужно исправить:
Код:
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  
Старый 21.03.2012, 19:45
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

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

Думаю ошибка в том, что оно как-то не может заполнить массив 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  
Старый 24.03.2012, 22:21
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

дошёл наверное до 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  
Старый 24.03.2012, 22:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Обычная система координат, основанная на пикселах. Выводишь в Image1, его размеры (Width и Height) даны в пикселах. Отсюда и "танцуй".
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #35  
Старый 25.03.2012, 00:20
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

всю процедуру выложу, и еще скрин программы

Для оси Х строит норм, а для 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  
Старый 25.03.2012, 00:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так навскидку не скажешь, создай временные переменные и в отладчике посмотри их значения:
Код:
  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;
тогда хоть увидишь какое значение принимает переменная III и не выходит ли она за пределы Image1.

P.S. И форматируй код, невозможно в таком бардаке что-либо увидеть.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #37  
Старый 25.03.2012, 01:57
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

получилось... исправил
Ответить с цитированием
  #38  
Старый 26.04.2012, 22:37
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

делаю программу, столкнулся с простой проблемой. не получается сделать счетчик для кнопки. тоесть нажимаю на кнопку Отчёт например и переменной 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  
Старый 26.04.2012, 22:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А зачем проверять состояние кнопки? Если она запрещена, то и так не нажмёшь.
Код:
var
  m : integer;

procedure TForm1.Button3Click(Sender: TObject);
begin
  inc(m);
  Label4.Caption := IntToStr(m);
end;
m должна быть глобальной.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #40  
Старый 26.04.2012, 22:51
deniks deniks вне форума
Прохожий
 
Регистрация: 08.03.2012
Сообщения: 25
Репутация: 10
По умолчанию

огромное вам спасибо!!!)

я пробывал и другие варианты, но у меня всегда была m локальной, из-за этого и не получалось

Последний раз редактировалось deniks, 26.04.2012 в 22:54.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter