Я создал простую программу на языке Ada, которая позволяет пользователю заполнить массив максимум 100 неотрицательными и ненулевыми целыми числами, а затем распечатать их. Когда я вызываю функцию для вывода чисел, она их выводит, но в то же время выводит кучу странных и, казалось бы, случайных чисел. Какую ошибку я допустил в своем коде, из-за которой программа выводит такие странные результаты? Я впервые пишу на Аде. Например, когда я заполняю пустой массив числами [1,2,3,4,5], он выводит следующее:
1
2
3
4
5
32624
911328835
32624
911328836
32624
67043328
134217726
134217726
2013265921
134217726
134217726
134217726
67043328
909181968
32624
2114692683
89452
914381552
32624
1543503876
2
14
2
14
Я использую компилятор gnatmake в Ubuntu, и при компиляции исходного кода он не выдает никаких сообщений об ошибках/предупреждениях.
Вот мой исходный код, я знаю, что мне, вероятно, не нужно использовать отдельные функции, но я все равно реализовал их для целей обучения.
with Ada.Containers.Vectors;
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
use Ada.Containers;
procedure thing is
type Vector is array (1..100) of Integer;
A: Vector;--array doesn't need to be completely filled up
K: Integer;
--array filling function below
function mkarr return Vector is --asks user to fill empty array with positive and non zero integers
begin
Ada.Text_IO.Put ("enter numbers to fill array, negative or 0 will stop process: ");
for I in 1..100 loop
Ada.Integer_Text_IO.Get(K);
if K>0 then
A(I) := K;
end if;
if K<=0 then
return A;
end if;
end loop;
return A;
end;
--array printing prodcedure below
procedure printarr(A: in out Vector) is
begin
for I in A'Range loop
if A(I)>0 then
Ada.Integer_Text_IO.Put(A(I));
New_Line(1);
end if;
end loop;
end printarr;
B: Vector := mkarr;
--main method below
begin
printarr(A);
end thing;