Ошибка в коде "неверное число параметров процедуры" - 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.

Объяснение кода листинга программы

  1. Название файла с данными - file.txt
  2. Описание стека - тип данных PIntStack и TIntStack
  3. Инициализация стека - процедура Init
  4. Завершение работы со стеком - процедура Done
  5. Проталкивание элемента в стек - процедура Push
  6. Выталкивание элемента из стека - функция Pop
  7. Привязка переменной к имени - переменная файла F
  8. Открытие файла - операция Reset(F)
  9. Проверка открытия файла - обработка исключения
  10. Создание пустого стека - процедура Init(S)
  11. Заталкивание элементов файла в стек - цикл while и операция Push(X, S)
  12. Закрытие файла - операция Close(F)
  13. Подсчет суммы и количества элементов в стеке - переменные Z и Y
  14. Вспомогательная переменная X для хранения прочитанного значения из файла
  15. Подсчет среднего арифметического - операция Y div Z
  16. Вывод результата на экран - WriteLn('Среднее арифметическое элементов файла: ', X)
  17. Удаление стека - процедура Done(S)
  18. Файл file.txt не найден - вывод сообщения об ошибке
  19. Ошибка в коде - неверное число параметров процедуры (в данном случае, при вызове функции Pop)
  20. Ошибка в коде - возможное отсутствие освобождения памяти после вызова операции New(P)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы