Выход из бесконечного цикла - Pascal
Формулировка задачи:
Здравствуйте
Посмотрите вот такой интересный код
Я понимаю что выход идёт из-за потери манитсы т.к. большя разность порядков, но я вот чего никак не пойму почему этот выход не происходит раньше. Ведь на последних шагах ужё идут еденицы...
Решение задачи: «Выход из бесконечного цикла»
textual
Листинг программы
program zikl; var i: Integer; s: real; x: String; begin s := 1; i := 1; repeat s := s/2; inc(i); Writeln(i:2, ' ', s:1:20, ' - standartnii vivod'); Str(s:1:10, x); Write(i:2, ' ', Copy(x, 1, 12)); Str(s*1E10:1:10, x); Write(Copy(x, Pos('.', x) + 1, 10)); Str(s*1E20:1:10, x); Write(Copy(x, Pos('.', x) + 1, 10)); Str(s*1E30:1:10, x); Write(Copy(x, Pos('.', x) + 1, 10)); Writeln; Writeln(' ^ - Sravnivaet do etogo simvola'); Writeln; until (1 + s) = 1; Readln; end.
Объяснение кода листинга программы
В данном коде используется бесконечный цикл while, который выполняется до тех пор, пока условие (1 + s) = 1 не станет истинным. Внутри цикла выполняются следующие действия:
- Значение переменной s делится на 2.
- Значение переменной i увеличивается на 1.
- Выводится значение переменной i и значение переменной s в формате с 20 знаками после запятой.
- Строка, представляющая значение переменной s, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
- Копия строки x, начиная с первого символа и заканчивая 12-ым, записывается в вывод.
- Строка, представляющая значение переменной s, умноженное на 1E10, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
- Копия строки x, начиная с позиции, следующей за последней десятичной точкой, и заканчивая 10-ым символом, записывается в вывод.
- Строка, представляющая значение переменной s, умноженное на 1E20, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
- Копия строки x, начиная с позиции, следующей за последней десятичной точкой, и заканчивая 10-ым символом, записывается в вывод.
- Строка, представляющая значение переменной s, умноженное на 1E30, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
- Копия строки x, начиная с позиции, следующей за последней десятичной точкой, и заканчивая 10-ым символом, записывается в вывод.
- Выводится символ
^
, который указывает на сравнение с этим символом. - Выводится символ новой строки. После выполнения всех действий в цикле, программа ожидает ввода от пользователя, чтобы прекратить выполнение.