|
#1
|
||||
|
||||
массив
Здрасьте! Уже сломал всю голову над следующей задачей.
На вход функции подается большой массив, состоящий из значений, достаточно близких к нулю(0), и значений больше наперед заданного числа(1). Получается вроде логической последовательности: ...000000111000000111... На выходе должно быть расстояние между группами единиц и их счетчик. Такая задача необходима для обработки входных данных с АЦП, подключенного к датчику Холла, поэтому алгоритм должен быть достаточно быстрым. |
#2
|
||||
|
||||
Задача не тривиальная...ИМХО...
Для начала давай определимся в каком виде должны быть выходные данные...Ведь промежутков много, а количество одно...т.е. в данных вида 001110000111000111 1-ый промежуток = 2 2-ой промежуток = 4 3-ий промежуток = 3 Количество 3 Счетчики групп и промежутков, должны быть в разных функциях... Или чтобы программа понимала, последовательность вида 2-4-3-3 где первые числа, это промежутки, а последнее число количество групп... В начале был Бит, потом Байт и только потом появилось Слово... |
#3
|
||||
|
||||
А если массив ну ооооочень большой (порядка 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; Последний раз редактировалось student2009, 28.12.2009 в 18:26. |
#4
|
||||
|
||||
Все это время изучал железную часть интерфейса. Теперь опять вернулся к прграмме, а вопрос остался. Кто-нибудь, помогите плиз. Курсовую сдавать уже скоро, а у меня полный ноль. Нужны хотя бы источники информации по обработке прямоугольных импульсов. С программированием проблем нет, нужна теория. Заранее спасибо.
|