Тема: массив
Показать сообщение отдельно
  #3  
Старый 28.12.2009, 18:16
Аватар для student2009
student2009 student2009 вне форума
Прохожий
 
Регистрация: 27.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

А если массив ну ооооочень большой (порядка 20 тысяч значений) и его надо обработать за примерно полсекунды? Не отразится ли прогон через 2 цикла на скорости? Я пытался сделать след. образом:

Код:
procedure holl(M: arr; Length: Integer; Rate: Double; var Freq: double; var Counter: integer;
                      var t0, t: integer; var NextKadr: boolean);
var i: integer;
begin
i:=0;
if HiLevel(M[i], 3.0)=true then
if NextKadr=true then
begin
        repeat
                inc(i);
        until HiLevel(M[i], 3.0)=false;
        t0:=t;
        t:=i;
        Freq:=60*1000*Rate/abs(Length-t0+t);
        NextKadr:=false;
end;
repeat
        if HiLevel(M[i], 3.0)=true then
        begin
             repeat
                inc(i);
                if i=Length-1 then NextKadr:=true;
             until (HiLevel(M[i], 3.0)=false) or (NextKadr=true);
             if NextKadr=false then
             begin
                t0:=t;
                t:=i;
                inc(counter);
                Freq:=60*1000*Rate/abs(t-t0)
             end;
        end;
until i=Length;
end;

function HiLevel(Data, MAX: Double): boolean;
begin
        if abs(Data)>MAX then result:=true else result:=false;
end;
Проблема заключается еще и в том, что массивы надо обрабатывать один за другим и учитывать то, что единицы могут продолжаться в следующем массиве. Как при всем этом проследить, чтобы не посчитать один за два? Там такая ситуация возникает практически в каждом кадре и погрешность выйдет за все рамки. Хотя эта процедура вообще вешает программу так, что проц грузится на все 100% и выдает результат явно неправильный - очень много знаков до запятой! ЭТОГО БЫТЬ ТОЧНО НЕ ДОЛЖНО!!! Короче, то ли я дурак, то ли лыжи не едут
Ответить с цитированием