Вопрос задан 19.07.2023 в 03:23. Предмет Информатика. Спрашивает Смирнов Евгений.

Дан файл целых чисел. Записать в другой файл те элементы исходного файла, у которых ровно три

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

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Гудим Даша.

Ответ:

Объяснение:

После строки  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);                                 


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

В данной программе проблема заключается в том, что переменная k, отвечающая за подсчет четных делителей, не сбрасывается в ноль для каждого нового числа из файла. Это приводит к неверным результатам подсчета делителей.

Для исправления проблемы необходимо сбрасывать значение k в ноль перед началом подсчета делителей для каждого числа. Вот исправленный вариант программы:

pascal
Var 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 будет сбрасываться в ноль перед каждым числом, и подсчет четных делителей будет происходить корректно.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос