Код:
Global NewList in.d() Global NewList out.d() ;косинусовое преобразование ProcedureDLL DCT() ClearList(out()) n = ListSize(in()) For k = 0 To n - 1 sum.d = 0 For i = 0 To n - 1 SelectElement(in(), i) sum + in() * Cos(#PI / n * (i + 0.5) * k) Next AddElement(out()) If k = 0 out() = sum * Sqr(1.0 / n) Else out() = sum * Sqr(2.0 / n) EndIf Next EndProcedure ;обратное косинусовое преобразование ProcedureDLL IDCT() ClearList(out()) n = ListSize(in()) For i = 0 To n - 1 sum.d = 0 For k = 0 To n - 1 SelectElement(in(),k) If k = 0 sum + in() * Sqr(1.0 / n) * Cos(#PI / n * (i + 0.5) * k) Else sum + in() * Sqr(2.0 / n) * Cos(#PI / n * (i + 0.5) * k) EndIf Next AddElement(out()) out() = sum Next EndProcedure ;получить данные для вычислений ProcedureDLL Set(*Pointer.Double, Count) ClearList(in()) For i = 1 To Count AddElement(in()) in()=*Pointer\d *Pointer + SizeOf(Double) Next EndProcedure ;отправить результаты вычислений ProcedureDLL Get(*Pointer.Double, Count) For i = 0 To Count-1 SelectElement(out(), i) *Pointer\d = out() *Pointer + SizeOf(Double) Next EndProcedure