Дан файл целых чисел. Записать в другой файл те элементы исходного файла, у которых ровно три
четных делителя. Есть такая программа, но она выдает неправильный ответ. Помогите найти ошибку 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.Ответы на вопрос
Ответ:
Объяснение:
После строки if k=3 then Writeln(f2,x);
нужно поставить k:=0;
Var f1,f2: text;
i, 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);
writeln(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);
k:=0;
End;
Close(f1);
Close(f2);
Writeln('Второй файл содержит числа:');
Reset(f2);
While not eof(f2) do
Begin
Readln(f2,x);
Writeln(x);
End;
readln;
Close(f2);

В данной программе проблема заключается в том, что переменная k, отвечающая за подсчет четных делителей, не сбрасывается в ноль для каждого нового числа из файла. Это приводит к неверным результатам подсчета делителей.
Для исправления проблемы необходимо сбрасывать значение k в ноль перед началом подсчета делителей для каждого числа. Вот исправленный вариант программы:
pascalVar f1, f2: text; i, x: integer; k: 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 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 будет сбрасываться в ноль перед каждым числом, и подсчет четных делителей будет происходить корректно.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili
