Ошибка в коде "неверное число параметров процедуры" - PascalABC.NET
Формулировка задачи:
Выдает ошибку в 29 строке: "неверное число параметров процедуры". Помогите пожалуйста с этой процедурой. Открывал через PascalABC.NET
Листинг программы
- 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;
- Delete(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;
- Delete(AStack);
- AStack := P;
- Pop := True;
- end;
- var
- F: file of Integer; { переменная файла }
- S: Stack; { переменная стека }
- X, Y, Z: Integer; { временные переменные для работы }
- begin
- { Привязка переменной к имени }
- Assign(F, AFileName);
- { Отключение встроенной проверки Паскаля }
- {$I-}
- { Открытие файла }
- Reset(F);
- { Включение встроенной проверки Паскаля }
- {$I+}
- { Проверка прошло ли открытие файла успешно }
- if (IOResult <> 0) then
- begin
- 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.
Решение задачи: «Ошибка в коде "неверное число параметров процедуры"»
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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д