Дан файл целых чисел. Записать в другой файл те элементы исходного файла, у которых ровно три четных делителя. Есть такая программа, но она выдает неправильный ответ. Помогите найти ошибку Var f1,f2: text; i, j, k, x: integer; Begin Assign(f1, 'file1.txt'); reset(f1); Assign(f2, 'file2.txt'); Rewrite(f2); k:=0; While not eof(f1) do Begin Readln(f1,x); for i:=2 to x do If (x mod i=0) and (i mod 2=0) then inc(k); if k=3 then Writeln(f2,x); End; Close(f1); Close(f2); Writeln('Второй файл содержит числа:'); Reset(f2); While not eof(f2) do Begin Readln(f2,x); Writeln(x); End; End.
Проблема в том, что переменная k, которая считает количество четных делителей числа x, не обнуляется после каждой итерации цикла. Это приводит к неверному результату при проверке следующего числа.
Исправленный код:
Var f1, f2: text; i, j, k, x: integer; Begin Assign(f1, 'file1.txt'); reset(f1); Assign(f2, 'file2.txt'); Rewrite(f2); While not eof(f1) do Begin Readln(f1, x); k := 0; for i := 2 to x do begin if (x mod i = 0) and (i mod 2 = 0) then inc(k); end; if k = 3 then Writeln(f2, x); End; Close(f1); Close(f2); Writeln('Второй файл содержит числа:'); Reset(f2); While not eof(f2) do Begin Readln(f2, x); Writeln(x); End; End.
Теперь переменная k обнуляется перед проверкой каждого числа, что позволяет корректно подсчитывать количество четных делителей каждого числа и записывать в результат только те числа, у которых их количество равно 3.
Проблема в том, что переменная k, которая считает количество четных делителей числа x, не обнуляется после каждой итерации цикла. Это приводит к неверному результату при проверке следующего числа.
Исправленный код:
Varf1, f2: text;
i, j, k, x: integer;
Begin
Assign(f1, 'file1.txt');
reset(f1);
Assign(f2, 'file2.txt');
Rewrite(f2);
While not eof(f1) do
Begin
Readln(f1, x);
k := 0;
for i := 2 to x do
begin
if (x mod i = 0) and (i mod 2 = 0) then
inc(k);
end;
if k = 3 then
Writeln(f2, x);
End;
Close(f1);
Close(f2);
Writeln('Второй файл содержит числа:');
Reset(f2);
While not eof(f2) do
Begin
Readln(f2, x);
Writeln(x);
End;
End.
Теперь переменная k обнуляется перед проверкой каждого числа, что позволяет корректно подсчитывать количество четных делителей каждого числа и записывать в результат только те числа, у которых их количество равно 3.