| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 472 人关注过本帖
标题:论坛里面有人学ada的吗 出了问题想找人解决?
取消只看楼主 加入收藏
chinaboris
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-2-4
结帖率:0
收藏
已结贴  问题点数:20 回复次数:0 
论坛里面有人学ada的吗 出了问题想找人解决?
我最近用ada编写了一个FFT 的程序包 但是发现 可以通过编译 但是却无法运行 总是出现Error while trying to execute C:\Users\chinaboris\Exec\dit_2_fft: not an executable

我的程序分为三部分  申明 执行包  主程序包 分别如下:
申明:package DIT_2_FFT is

type FFT_Complex is

      record

         real,imag : float;

      end record;



   Subtype Positive is Integer range 0..Integer'Last;
   type Signal_arrays is array (Positive range <>) of FFT_Complex;


   function EE (FFT_Complex_a,FFT_Complex_b:FFT_Complex) return FFT_Complex;
   procedure bitumkehrordnung (X:in out Signal_arrays;Punkte_Zahl:integer);
   procedure DIT_base2_FFT (X:in out Signal_arrays;Punkte_Zahl:integer);



   end DIT_2_FFT;

程序包部分
with Ada.Integer_Text_IO;use Ada.Integer_Text_IO;
with Ada.Numerics.Generic_Elementary_Functions;
use Ada.Numerics;

with Ada.Text_IO;use Ada.Text_IO;








package body DIT_2_FFT is


   package Numerics is new
     Ada.Numerics.Generic_Elementary_Functions (Float_Type => float);






   function EE (FFT_Complex_a,FFT_Complex_b:FFT_Complex) return FFT_Complex is
      --man kann die Gleichung für FFT_Complex definieren.
      FFT_Complex_c:FFT_Complex;
   begin
      FFT_Complex_c.real:=FFT_Complex_a.real*FFT_Complex_b.real - FFT_Complex_a.imag*FFT_Complex_b.imag;

      FFT_Complex_c.imag:=FFT_Complex_a.real*FFT_Complex_b.imag + FFT_Complex_a.imag*FFT_Complex_b.real;

      return FFT_Complex_c;
   end EE;




   procedure bitumkehrordnung (X:in out Signal_arrays;Punkte_Zahl:integer) is
      --Bevor man ein Signal FFT mancht,muss man die Ordnung umkehren.Danach kann man die richtige Ordnung bekommen.
      k:integer:=Punkte_Zahl/2;
      Z:FFT_Complex;
      P:Integer;
   begin

      for Counter in 1..Punkte_Zahl-2 loop


         if Counter<k then
            Z:=X(Counter);
            X(Counter):=X(k);
            x(k):=Z;
         end if;


         p:=Punkte_Zahl/2;


         while k>=p loop
         k:=k-p;
         p:=p/2;
         end loop;

         k:=k+p;

      End loop;
   end bitumkehrordnung;

   procedure DIT_base2_FFT (X:in out Signal_arrays;Punkte_Zahl:integer) is--Abtastwerten von X[n]
      use Numerics;

      function Potenz (Punkte_Zahl:Integer) return Integer is
      --Berechnung der Potenz der Base 2 von Punkte_Zahl.


        Counter:integer:=1;
        P:integer:=Punkte_Zahl;

      begin
            if p/2/=1 then

               p:=p/2;
               Counter:=Counter+1;
         end if;
         return Counter;
   end Potenz;

      Stufe_FFT    :    integer;
      Abstand    :    Integer;--Abstand von zwei eingegebenen Daten
      W        :    FFT_Complex;--übertragungsfaktoren
      K_W    :    FFT_Complex;--Beziehung K_W=W(i)/W(i-1);
      T        :    FFT_Complex;
      i_b,i_a    :    Integer;
      Variable    :    Float;

begin
   Stufe_FFT:=Potenz(Punkte_Zahl);
   for counter in 1..Stufe_FFT loop
      Abstand:=2**(counter-1);
      W.real:=1.0;
         W.imag:=0.0;
         Variable:=pi/float(Abstand);
         K_W.real:=Numerics.Cos (Variable) ;
       K_W.imag:=-Numerics.Sin (Variable) ;

      for Counter in 0..Abstand-1 loop
         i_a:=Counter;
            while i_a <= Punkte_Zahl - 1 loop
            i_b := i_a + Abstand;
            T := dit_2_fft.EE(X(i_b),W);
            X(i_a).real := X(i_a).real + T.real;
            X(i_a).imag := X(i_a).imag + T.imag;
            X(i_b).real := X(i_a).real - T.real;
            X(i_a).imag := X(i_a).imag - T.imag;
            i_a:=i_a+2**Stufe_FFT;
         end loop;
         W:=dit_2_fft.EE(W,K_W);
      end loop;
   end loop;

end  DIT_base2_FFT;
end dit_2_fft;

主程序部分

with ada.Text_io;use ada.text_io;
with Ada.Integer_Text_IO;use Ada.Integer_Text_IO;
with Ada.Float_Text_IO;use Ada.Float_Text_IO;
with DIT_2_FFT;use DIT_2_FFT;
with Ada.Numerics.Generic_Elementary_Functions;use Ada.Numerics;


procedure FFT_main is
   package Numerics is new
     Ada.Numerics.Generic_Elementary_Functions (Float_Type => float);


     N:Integer;
   real,imag:float;
   Variable:float;

   procedure Array_length is

   begin
      put("Wie viele Punkte brauchen Sie:");get(N);
   end Array_Length;

FFT_array:Signal_arrays (1..n-1);


begin

   for Counter in 0..N-1 loop
      Variable:=2.0*pi*float(Counter)/float(N);
      FFT_array(Counter).real:=Numerics.Sin(Variable);
      FFT_array(Counter).imag:=0.0;
   end loop;

   DIT_base2_FFT (X => FFT_array,Punkte_Zahl => N);

   for Counter in 0..N-1 loop
      real:=FFT_array(Counter).real;
      put(real);
      put("    ");
      imag:=FFT_array(Counter).imag;
      put(imag);new_line;
   end loop;
end FFT_main;

如果 谁能帮我  也可以 私密我 我的邮箱是 chinaboris1986@  谢谢了  我也是初学者  找不到 能帮我的人
搜索更多相关主题的帖子: package record 主程序 
2013-02-04 22:50
快速回复:论坛里面有人学ada的吗 出了问题想找人解决?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026039 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved