Вопрос задан 24.07.2026 в 18:01. Предмет Информатика. Спрашивает Yermakov Artemik.

Как исправить? 23242.pas(18) : Ошибка времени выполнения: Входная строка имела неверный формат.
вот код:
var
f1: text;
b, c, i: integer; d: real;

begin
randomize;
assign(f1, '6161.txt');
rewrite(f1);
for i := 1 to 100 do
begin
c := random(1001);
write(f1, c, ' ')
end;
close(f1);reset(f1);
while not EOln(f1) do
begin
read(f1, d); c:= round(d);
if (c div 3 = 0) and (c div 10 div 10 div 10 = 0) and (c = 0) then b := c;
end;
close(f1);append(f1);writeln(f1);writeln(f1);
if b <> 0 then writeln(f1, 'Число ', b, ' является трехзначным и нацело делится на 3')
else writeln(f1, 'В файле нет трехзначных чисел, которые нацело делятся на 3');
close(f1);
end.

Перейти к ответам

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

Отвечает Громак Оля.

Ошибка:

23242.pas(18) : Ошибка времени выполнения: Входная строка имела неверный формат.

возникает из-за этой строки:

pascal
read(f1, d);

Вы записываете в файл целые числа:

pascal
c := random(1001);
write(f1, c, ' ')

То есть в 6161.txt находятся числа, например:

125 7 900 34 1000 ...

А потом пытаетесь читать их как real:

pascal
read(f1, d);

В некоторых версиях Pascal это может вызвать ошибку преобразования строки в число. Проще читать в ту же переменную, в которую записывали:

pascal
read(f1, c);

Также в программе есть несколько логических ошибок.

  1. Проверка трехзначности неправильная:

pascal
(c div 10 div 10 div 10 = 0)

Она проверяет, что число меньше 1000, но не проверяет, что оно больше или равно 100.

Правильно:

pascal
(c >= 100) and (c <= 999)
  1. Проверка деления на 3 написана неверно:

pascal
(c div 3 = 0)

Оператор div дает целую часть от деления. Например:

100 div 3 = 33

Это не проверка делимости.

Нужно использовать остаток от деления:

pascal
(c mod 3 = 0)
  1. Условие:

pascal
and (c = 0)

делает поиск нулевого числа. Но случайное число от random(1001) может быть 0, и одновременно оно не может быть трехзначным. Это условие надо удалить.

  1. Цикл чтения:

pascal
while not EOln(f1) do

читает только до конца строки. Вы записали все числа в одну строку, поэтому это сработает, но лучше использовать:

pascal
while not eof(f1) do

чтобы читать весь файл.

Исправленный фрагмент:

pascal
reset(f1);
b := 0;

while not eof(f1) do begin read(f1, c); if (c >= 100) and (c <= 999) and (c mod 3 = 0) then b := c; end;

Полная причина ошибки именно в несовпадении типа чтения с тем, что записано в файл: записываются целые числа (integer), а читаются как вещественные (real). В данном случае real вообще не нужен.

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

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

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

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