По сути, я пытаюсь составить запись (1 запись - это 2 строковые переменные, и их 3, но я бы хотел на время собрать хотя бы 1). Я думаю, что установка хотела бы что-то вроде этого для моего алгоритма:
Клиент: Значения задаются для строк в записи, вызываются процедуры для стека (т. Е. Push, pop, display)
Пакет: Запись объявлена, элементы помещены в стек, отображены в стеке.
У меня вообще проблемы. Я пытался держать все это локально. Он действительно открывает файл и читает в строках (пробовал читать в целочисленном значении, работает нормально), это я протестировал в клиентской программе, используя аналогичную настройку (вместо записи я сохранил ее в строку длиной 40). ). Однако, когда я собирался вывести все, что получал, это набор случайных символов (таких как ╤cß≈Ä), без слов, подобных содержащемуся в файле.
Вот мои фрагменты кода:
Спецификация пакета:
StackMaximum: constant integer := 10;
TYPE StackItem IS Record
str1: string (1..20);
str2: string (1..20);
end record;
type Stack is PRIVATE
PROCEDURE Push (Item: IN StackItem; AStack: IN OUT Stack);
PROCEDURE display (AStack : in Stack);
Корпус:
procedure Push (Item: in StackItem;
AStack: in out Stack) is
begin
if AStack.Top < StackMaximum then
AStack.Top := AStack.Top + 1;
AStack.Store(AStack.Top) := Item;
else
raise StackOverflow;
end if;
END Push;
procedure display(AStack: in stack) is
BEGIN
FOR I IN 1..AStack.Top LOOP
Put(AStack.Store(I.lastname));
END LOOP;
END display;
PRIVATE
type int_arry is array (1..StackMaximum) of StackItem;
type Stack is record
Store: int_arry;
Top: integer range 0..StackMaximum;
END RECORD;
Клиент:
Lt: Integer;
New_Stack2: Stack;
A: StackItem;
Stackitems: Ada.Text_IO.File_Type;
Get_Line(File => Stackitems, Item => A.str1, Last => Lt);
Get_Line(File => Stackitems, Item => A.str2, Last => Lt);
Push(A, New_Stack1);
display(New_Stack1);
Файл (содержит только «This..var.»):
This is the test input for the file var.
Есть предложения, что я делаю не так с этой частью? Также вот моя другая установка, где я держал все это локально:
Клиент:
Lt: Integer;
AB: String(1..40);
New_Stack2: Stack;
A: StackItem;
Stackitems: Ada.Text_IO.File_Type;
begin
Get_Line(File => Stackitems, Item => AB, Last => Lt);
Put(item=> AB);
end;
Это то, что дало мне все эти символы. Но это чтение в файле, я просто понятия не имею, почему я получаю плохой вывод.