Ошибка в коде "неверное число параметров процедуры" - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Выдает ошибку в 29 строке: "неверное число параметров процедуры". Помогите пожалуйста с этой процедурой. Открывал через PascalABC.NET
Листинг программы
  1. program StackDemo;
  2. { Название файла с данными }
  3. const
  4. AFileName = 'file.txt';
  5. { Описание стека }
  6. type
  7. PIntStack = ^TIntStack;
  8. TIntStack = record
  9. Data: Integer;
  10. Next: PIntStack;
  11. end;
  12. { Инициализация стека }
  13. procedure Init(var AStack: PIntStack);
  14. begin
  15. AStack := nil;
  16. end;
  17. { Завершение работы со стеком }
  18. procedure Done(var AStack: PIntStack);
  19. var
  20. P: PIntStack;
  21. begin
  22. while (AStack <> nil) do
  23. begin
  24. P := AStack^.Next;
  25. Delete(AStack);
  26. AStack := P;
  27. end;
  28. end;
  29. { Проталкивание элемента в стек }
  30. procedure Push(AData: Integer;var AStack: PIntStack);
  31. var
  32. P: PIntStack;
  33. begin
  34. P := nil;
  35. New(P);
  36. if (P = nil) then Exit;
  37. P^.Data := AData;
  38. P^.Next := AStack;
  39. AStack := P;
  40. end;
  41. { Выталкивание элемента из стека }
  42. function Pop(var AData: Integer; var AStack: PIntStack): Boolean;
  43. var
  44. P: PIntStack;
  45. begin
  46. if (AStack = nil) then
  47. begin
  48. Pop := False;
  49. Exit;
  50. end;
  51. P := AStack^.Next;
  52. AData := AStack^.Data;
  53. Delete(AStack);
  54. AStack := P;
  55. Pop := True;
  56. end;
  57. var
  58. F: file of Integer; { переменная файла }
  59. S: Stack; { переменная стека }
  60. X, Y, Z: Integer; { временные переменные для работы }
  61. begin
  62. { Привязка переменной к имени }
  63. Assign(F, AFileName);
  64. { Отключение встроенной проверки Паскаля }
  65. {$I-}
  66. { Открытие файла }
  67. Reset(F);
  68. { Включение встроенной проверки Паскаля }
  69. {$I+}
  70. { Проверка прошло ли открытие файла успешно }
  71. if (IOResult <> 0) then
  72. begin
  73. WriteLn('Не могу открыть файл!');
  74. Halt(0);
  75. end;
  76. { Создание пустого стека }
  77. Init(S);
  78. { Заталкивание элементов файла в стек }
  79. while not Eof(F) do
  80. begin
  81. Read(F, X);
  82. Push(X, S);
  83. end;
  84. { Закрытие файла }
  85. Close(F);
  86. { Подсчет суммы и количества элементов в стеке }
  87. Z := 0;
  88. Y := 0;
  89. while Pop(X, S) do
  90. begin
  91. Y := Y + X;
  92. Z := Z + 1;
  93. end;
  94. { Собственно расчет среднего арифметического }
  95. { Считал в целочисленном варианте, хотя это не принципиально }
  96. X := Y div Z;
  97. WriteLn('Среднее арифметическое элементов файла: ', X);
  98. { Удаление стека }
  99. { Конкретно в этой проге это вобщем-то не нужно, }
  100. { Но на всякий случай - чтобы препод проперся:) }
  101. Done(S);
  102. end.

Решение задачи: «Ошибка в коде "неверное число параметров процедуры"»

textual
Листинг программы
  1. program StackDemo;
  2.  
  3. { Название файла с данными }
  4. const
  5.   AFileName = 'file.txt';
  6.  
  7. { Описание стека }
  8. type
  9.   PIntStack = ^TIntStack;
  10.   TIntStack = record
  11.     Data: Integer;
  12.     Next: PIntStack;
  13.   end;
  14.  
  15. { Инициализация стека }
  16. procedure Init(var AStack: PIntStack);
  17. begin
  18.   AStack := nil;
  19. end;
  20.  
  21. { Завершение работы со стеком }
  22. procedure Done(var AStack: PIntStack);
  23. var
  24.   P: PIntStack;
  25. begin
  26.   while (AStack <> nil) do
  27.   begin
  28.     P := AStack^.Next;
  29.     dispose(AStack);
  30.     AStack := P;
  31.   end;
  32. end;
  33.  
  34. { Проталкивание элемента в стек }
  35. procedure Push(AData: Integer; var AStack: PIntStack);
  36. var
  37.   P: PIntStack;
  38. begin
  39.   P := nil;
  40.   New(P);
  41.   if (P = nil) then Exit;
  42.   P^.Data := AData;
  43.   P^.Next := AStack;
  44.   AStack := P;
  45. end;
  46.  
  47. { Выталкивание элемента из стека }
  48. function Pop(var AData: Integer; var AStack: PIntStack): Boolean;
  49. var
  50.   P: PIntStack;
  51. begin
  52.   if (AStack = nil) then
  53.   begin
  54.     Pop := False;
  55.     Exit;
  56.   end;
  57.   P := AStack^.Next;
  58.   AData := AStack^.Data;
  59.   dispose(AStack);
  60.   AStack := P;
  61.   Pop := True;
  62. end;
  63.  
  64. var
  65.   F: file of Integer; { переменная файла }
  66.   S: PIntStack;           { переменная стека }
  67.   X, Y, Z: Integer;   { временные переменные для работы }
  68.  
  69. begin
  70.   { Привязка переменной к имени }
  71.   Assign(F, AFileName);
  72.   try
  73.     { Открытие файла }
  74.     Reset(F);
  75.   { Проверка прошло ли открытие файла успешно }
  76.   except
  77.     WriteLn( 'Не могу открыть файл!');
  78.     Halt(0);
  79.   end;
  80.   { Создание пустого стека }
  81.   Init(S);
  82.   { Заталкивание элементов файла в стек }
  83.   while not Eof(F) do
  84.   begin
  85.     Read(F, X);
  86.     Push(X, S);    
  87.   end;
  88.   { Закрытие файла }
  89.   Close(F);
  90.   { Подсчет суммы и количества элементов в стеке }
  91.   Z := 0;
  92.   Y := 0;
  93.   while Pop(X, S) do
  94.   begin
  95.     Y := Y + X;
  96.     Z := Z + 1;
  97.   end;
  98.   { Собственно расчет среднего арифметического }
  99.   { Считал в целочисленном варианте, хотя это не принципиально }
  100.   X := Y div Z;
  101.   WriteLn('Среднее арифметическое элементов файла: ', X);
  102.   { Удаление стека }
  103.   { Конкретно в этой проге это вобщем-то не нужно, }
  104.   { Но на всякий случай - чтобы препод проперся:) }
  105.   Done(S);
  106. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы