Дан файл целых чисел. Записать в другой файл те элементы исходного файла, у
которых ровно три четных делителя.
Есть такая программа, но она выдает неправильный ответ. Помогите найти ошибку
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
198 +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 Апр в 13:02
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 348 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир