Ошибка в коде "неверное число параметров процедуры" - PascalABC.NET
Формулировка задачи:
Выдает ошибку в 29 строке: "неверное число параметров процедуры". Помогите пожалуйста с этой процедурой. Открывал через PascalABC.NET
Решение задачи: «Ошибка в коде "неверное число параметров процедуры"»
textual
Листинг программы
program StackDemo;
{ Название файла с данными }
const
AFileName = 'file.txt';
{ Описание стека }
type
PIntStack = ^TIntStack;
TIntStack = record
Data: Integer;
Next: PIntStack;
end;
{ Инициализация стека }
procedure Init(var AStack: PIntStack);
begin
AStack := nil;
end;
{ Завершение работы со стеком }
procedure Done(var AStack: PIntStack);
var
P: PIntStack;
begin
while (AStack <> nil) do
begin
P := AStack^.Next;
dispose(AStack);
AStack := P;
end;
end;
{ Проталкивание элемента в стек }
procedure Push(AData: Integer; var AStack: PIntStack);
var
P: PIntStack;
begin
P := nil;
New(P);
if (P = nil) then Exit;
P^.Data := AData;
P^.Next := AStack;
AStack := P;
end;
{ Выталкивание элемента из стека }
function Pop(var AData: Integer; var AStack: PIntStack): Boolean;
var
P: PIntStack;
begin
if (AStack = nil) then
begin
Pop := False;
Exit;
end;
P := AStack^.Next;
AData := AStack^.Data;
dispose(AStack);
AStack := P;
Pop := True;
end;
var
F: file of Integer; { переменная файла }
S: PIntStack; { переменная стека }
X, Y, Z: Integer; { временные переменные для работы }
begin
{ Привязка переменной к имени }
Assign(F, AFileName);
try
{ Открытие файла }
Reset(F);
{ Проверка прошло ли открытие файла успешно }
except
WriteLn( 'Не могу открыть файл!');
Halt(0);
end;
{ Создание пустого стека }
Init(S);
{ Заталкивание элементов файла в стек }
while not Eof(F) do
begin
Read(F, X);
Push(X, S);
end;
{ Закрытие файла }
Close(F);
{ Подсчет суммы и количества элементов в стеке }
Z := 0;
Y := 0;
while Pop(X, S) do
begin
Y := Y + X;
Z := Z + 1;
end;
{ Собственно расчет среднего арифметического }
{ Считал в целочисленном варианте, хотя это не принципиально }
X := Y div Z;
WriteLn('Среднее арифметическое элементов файла: ', X);
{ Удаление стека }
{ Конкретно в этой проге это вобщем-то не нужно, }
{ Но на всякий случай - чтобы препод проперся:) }
Done(S);
end.
Объяснение кода листинга программы
- Название файла с данными -
file.txt - Описание стека - тип данных PIntStack и TIntStack
- Инициализация стека - процедура Init
- Завершение работы со стеком - процедура Done
- Проталкивание элемента в стек - процедура Push
- Выталкивание элемента из стека - функция Pop
- Привязка переменной к имени - переменная файла F
- Открытие файла - операция Reset(F)
- Проверка открытия файла - обработка исключения
- Создание пустого стека - процедура Init(S)
- Заталкивание элементов файла в стек - цикл while и операция Push(X, S)
- Закрытие файла - операция Close(F)
- Подсчет суммы и количества элементов в стеке - переменные Z и Y
- Вспомогательная переменная X для хранения прочитанного значения из файла
- Подсчет среднего арифметического - операция Y div Z
- Вывод результата на экран - WriteLn('Среднее арифметическое элементов файла: ', X)
- Удаление стека - процедура Done(S)
- Файл
file.txtне найден - вывод сообщения об ошибке - Ошибка в коде - неверное число параметров процедуры (в данном случае, при вызове функции Pop)
- Ошибка в коде - возможное отсутствие освобождения памяти после вызова операции New(P)