Вычислить четные числа в файле с помощью рекурсивной процедуры - Free Pascal

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

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

помгите, задача очень простая но у меня рекурсия как-то странно себя ведет, когда я выполняю программу она вываливается с ошибкой RunError(5) я так понял это от того что он обращается к процедуре с самого начала,а не с того момента где if, короче пожалуйста поправьте меня или хотя бы скажите что я не так сделал)
Листинг программы
  1. program project1;
  2. {$mode objfpc}{$H+}
  3. uses
  4. {$IFDEF UNIX}{$IFDEF UseCThreads}
  5. cthreads,
  6. {$ENDIF}{$ENDIF}
  7. Classes, SysUtils, CustApp
  8. { you can add units after this };
  9. type tip=file of integer;
  10. { TMyApplication }
  11.  
  12. procedure file_import (var createfile:tip);
  13. var i,x:byte;
  14. begin
  15. assign(createfile,'data.dat');
  16. rewrite(createfile);
  17. x:=0;
  18. for i:=1 to 10 do begin
  19. inc(x);
  20. write(createfile,x);
  21. end;
  22. close(createfile);
  23. end;
  24.  
  25. procedure file_output (var createfile:tip);
  26. var count:byte;
  27. x:integer;
  28. begin
  29. write('file= ');
  30. assign(createfile,'data.dat');
  31. reset(createfile);
  32. for count:=1 to 10 do begin
  33. read(createfile,x);
  34. write(x,' ');
  35. end;
  36. close(createfile);
  37. end;
  38.  
  39. procedure chet (var createfile:tip);
  40. var sum,x:integer;
  41. begin
  42. sum:=0;
  43. assign(createfile,'data.dat');
  44. reset(createfile);
  45. writeln;
  46. write('sum= ');
  47. if not eof(createfile) then
  48. begin
  49. read(createfile,x);
  50. if x mod 2=0 then begin
  51. sum:=sum+x;
  52. end;
  53. chet(createfile);
  54. end;
  55. writeln(sum);
  56. close(createfile);
  57. end;
  58. var
  59. createfile:tip;
  60. begin
  61. file_import(createfile);
  62. chet(createfile);
  63. file_output(createfile);
  64. readln;
  65. end.

Решение задачи: «Вычислить четные числа в файле с помощью рекурсивной процедуры»

textual
Листинг программы
  1. program RecRecRec;
  2.  
  3. type
  4.   tip = file of integer;
  5. const
  6.   asFileName = 'Set.dat';
  7.  
  8.   procedure chet(var createfile: tip);
  9.  
  10.     procedure Recurse;
  11.     var
  12.       x: integer;
  13.     begin
  14.       if EOF(createfile) then
  15.         exit;
  16.       Read(createfile, x);
  17.       if not odd(x) then
  18.       begin
  19.         writeln(x);
  20.       end;
  21.       Recurse;
  22.     end;
  23.  
  24.   begin
  25.     Assign(createfile, asFileName);
  26.     reset(createfile);
  27.     Recurse;
  28.     Close(createfile);
  29.   end;
  30.  
  31. var
  32.   f: tip;
  33.   i: integer;
  34. begin
  35.   Assign(f, asFileName);
  36.   rewrite(f);
  37.   for i := 0 to 21 do
  38.     Write(f, i);
  39.   Close(f);
  40.   chet(f);
  41. end.

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

В данном коде представлена программа на языке Free Pascal, которая вычисляет и выводит в консоль все четные числа из файла 'Set.dat' с помощью рекурсивной процедуры. В первой строке объявлен тип данных tip, который представляет собой файл целых чисел. Далее, в константах, указано имя файла 'asFileName', в котором хранятся числа для обработки. В следующей строке объявлена сама рекурсивная процедура chet, которая принимает в качестве параметра файловую переменную createfile. Внутри процедуры chet находится вложенная рекурсивная процедура Recurse, которая выполняет следующие действия:

  1. Проверяет, достигнут ли конец файла (EOF). Если это так, то процедура завершается.
  2. Считывает из файла следующее число и сохраняет его в переменной x.
  3. Проверяет, является ли число четным, используя функцию odd (если число нечетное, то оно выводится на экран).
  4. Если число четное, то оно выводится на экран.
  5. Рекурсивно вызывается процедура Recurse для продолжения обработки следующего числа из файла. В основной части программы создается файловая переменная f, которая ссылается на файл 'asFileName'. Затем, в цикле, в файл записываются числа от 0 до 21. После этого файл закрывается, и вызывается процедура chet, передавая в нее файловую переменную f. Это приводит к запуску рекурсивного процесса обработки чисел из файла и их вывода на экран.

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


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

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

7   голосов , оценка 3.714 из 5

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

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

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