Вычислить четные числа в файле с помощью рекурсивной процедуры - Free Pascal
Формулировка задачи:
помгите, задача очень простая но у меня рекурсия как-то странно себя ведет, когда я выполняю программу она вываливается с ошибкой RunError(5) я так понял это от того что он обращается к процедуре с самого начала,а не с того момента где if, короче пожалуйста поправьте меня или хотя бы скажите что я не так сделал)
program project1; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes, SysUtils, CustApp { you can add units after this }; type tip=file of integer; { TMyApplication } procedure file_import (var createfile:tip); var i,x:byte; begin assign(createfile,'data.dat'); rewrite(createfile); x:=0; for i:=1 to 10 do begin inc(x); write(createfile,x); end; close(createfile); end; procedure file_output (var createfile:tip); var count:byte; x:integer; begin write('file= '); assign(createfile,'data.dat'); reset(createfile); for count:=1 to 10 do begin read(createfile,x); write(x,' '); end; close(createfile); end; procedure chet (var createfile:tip); var sum,x:integer; begin sum:=0; assign(createfile,'data.dat'); reset(createfile); writeln; write('sum= '); if not eof(createfile) then begin read(createfile,x); if x mod 2=0 then begin sum:=sum+x; end; chet(createfile); end; writeln(sum); close(createfile); end; var createfile:tip; begin file_import(createfile); chet(createfile); file_output(createfile); readln; end.
Решение задачи: «Вычислить четные числа в файле с помощью рекурсивной процедуры»
textual
Листинг программы
program RecRecRec; type tip = file of integer; const asFileName = 'Set.dat'; procedure chet(var createfile: tip); procedure Recurse; var x: integer; begin if EOF(createfile) then exit; Read(createfile, x); if not odd(x) then begin writeln(x); end; Recurse; end; begin Assign(createfile, asFileName); reset(createfile); Recurse; Close(createfile); end; var f: tip; i: integer; begin Assign(f, asFileName); rewrite(f); for i := 0 to 21 do Write(f, i); Close(f); chet(f); end.
Объяснение кода листинга программы
В данном коде представлена программа на языке Free Pascal, которая вычисляет и выводит в консоль все четные числа из файла 'Set.dat' с помощью рекурсивной процедуры.
В первой строке объявлен тип данных tip
, который представляет собой файл целых чисел.
Далее, в константах, указано имя файла 'asFileName', в котором хранятся числа для обработки.
В следующей строке объявлена сама рекурсивная процедура chet
, которая принимает в качестве параметра файловую переменную createfile
.
Внутри процедуры chet
находится вложенная рекурсивная процедура Recurse
, которая выполняет следующие действия:
- Проверяет, достигнут ли конец файла (EOF). Если это так, то процедура завершается.
- Считывает из файла следующее число и сохраняет его в переменной
x
. - Проверяет, является ли число четным, используя функцию
odd
(если число нечетное, то оно выводится на экран). - Если число четное, то оно выводится на экран.
- Рекурсивно вызывается процедура
Recurse
для продолжения обработки следующего числа из файла. В основной части программы создается файловая переменнаяf
, которая ссылается на файл 'asFileName'. Затем, в цикле, в файл записываются числа от 0 до 21. После этого файл закрывается, и вызывается процедураchet
, передавая в нее файловую переменнуюf
. Это приводит к запуску рекурсивного процесса обработки чисел из файла и их вывода на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д