Дан файл целых чисел. Записать в другой файл те элементы исходного файла, у
которых ровно три четных делителя.
Есть такая программа, но она выдает неправильный ответ. Помогите найти ошибку
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.

21 Авг 2019 в 19:41
241 +1
0
Ответы
1

Проблема в том, что переменная 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.

20 Апр 2024 в 13:02
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир