Arrays 阿达的希普索尔 我是艾达的初学者,我有一个任务,它是一个C++中堆排序程序的逐行转换,艾达。

Arrays 阿达的希普索尔 我是艾达的初学者,我有一个任务,它是一个C++中堆排序程序的逐行转换,艾达。,arrays,ada,heapsort,Arrays,Ada,Heapsort,我写了ada代码,但我似乎在指针、数组和循环计数器方面有问题 这就是我得到的: with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; procedure prob1 is n : integer; type arr1 is array (1..n) of integer ; type Int_Acc is access all arr1 ; -- declaration of a pointer procedure max_he

我写了ada代码,但我似乎在指针、数组和循环计数器方面有问题

这就是我得到的:

with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
procedure prob1 is
n : integer;
type arr1 is array (1..n) of integer ;
type Int_Acc is access all arr1 ; -- declaration of a pointer
procedure max_heapify (Int_Acc : access arr1 ; n : integer; i : integer)  is
  j : integer;
  temp : integer;
begin
  temp := Int_Acc(i);
  j := 2*i;

  while j <= n loop
     if j < n and Int_Acc(j+1) > Int_Acc(j) then
        j := j+1;
     elsif temp > Int_Acc(j) then
     exit when temp > Int_Acc(j);
     elsif temp <= Int_Acc(j) then
        Int_Acc(j/2) := Int_Acc(j);
         j := 2*j;
     end if;
   Int_Acc(j/2) := temp;
     end loop;
end max_heapify;
procedure heapsort (Int_Acc : access arr1 ; n : integer) is
   i : integer;
  temp : integer;
  begin
  while i>=2 loop
    temp := Int_Acc (i);
  Int_Acc(i) := Int_Acc (1);
     Int_Acc (1) := temp;
     i := i -1;
  max_heapify (arr1,1,i);
  end loop;
end heapsort;
procedure build_maxheap (Int_Acc : access arr1 ; n : integer) is
  begin
  while i >= 1 loop
      i := i -1;
     max_heapify (Int_Acc,n,i);
 end loop;
 end build_maxheap;
 m:integer ;
 i: integer;
 x:integer;
 begin
 put_line ("enetr the number of elemets of the array : ");
 Ada.Integer_Text_IO.Get(n);
  for k in arr1'Range loop
    put_line ("enter element" & integer'Image(k));
   Ada.Integer_Text_IO.Get(arr1(i));
end loop;
build_maxheap (arr1,m);
heapsort(arr1 , m);
put_line("sorted output is : ");
  for j in arr1'Range loop
    put_line(Integer'Image (arr1(i)));
 end loop;
 end prob1;
带有Ada.Text\u IO;
使用Ada.Text\u IO;
使用Ada.Integer\u Text\u IO;
程序问题1是
n:整数;
类型arr1是整数的数组(1..n);
Int_Acc类型为访问所有arr1;——指针的声明
程序max_heapify(Int_Acc:access arr1;n:integer;i:integer)为
j:整数;
温度:整数;
开始
温度:=Int_Acc(i);
j:=2*i;
而j Int_Acc(j)则
j:=j+1;
如果温度>Int_Acc(j),则
当温度>Int_Acc(j)时退出;
elsif温度=2循环
温度:=Int_Acc(i);
国际会计准则(i):=国际会计准则(1);
内部附件(1):=温度;
i:=i-1;
max_heapify(arr1,1,i);
端环;
端堆;
过程build\u maxheap(Int\u Acc:access arr1;n:integer)为
开始
而i>=1循环
i:=i-1;
max_heapify(国际会计准则,n,i);
端环;
结束构建\u maxheap;
m:整数;
i:整数;
x:整数;
开始
放置_行(“eNet表示数组的元素数:”);
Ada.Integer\u Text\u IO.Get(n);
对于arr1'范围循环中的k
放置_行(“输入元素”和整数图像(k));
Ada.Integer_Text_IO.Get(arr1(i));
端环;
构建最大堆(arr1,m);
堆头(arr1,m);
put_行(“排序输出为:”);
对于arr1'范围循环中的j
放线(整数图像(arr1(i));
端环;
末端探针1;

我真的没有弄明白,但我真的认为问题出在数组的指针上。 我希望你能为我提供任何可能的帮助,这项任务很快就要到期了,我需要提交它运行


提前谢谢。

很抱歉,我不明白你的意思。你是说它被复制了吗?或者你只是不喜欢它的样子?我更喜欢一个有用的清晰的建议:)这意味着,如果你看这些问题,你可能会得到你需要的答案。@BrianDrummond你发布的第一个链接是关于一个他在运行时有一些错误的问题。这个OP还没有编译他的代码。我看不出这是一个重复,我也看不出他如何通过查看那里来回答他的问题。
arr1
是一个类型名,您已经在程序需要变量或其他类型为
arr1
的表达式的几个地方使用过它。这就像在C++代码中编写代码> int /代码>,其中需要一个类型的变量<代码> int <代码>。这就是问题的原因,加上我使用了in-out引用,没有更改循环。现在运行正常了,非常感谢大家。