Выход из бесконечного цикла - 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 не станет истинным. Внутри цикла выполняются следующие действия:

  1. Значение переменной s делится на 2.
  2. Значение переменной i увеличивается на 1.
  3. Выводится значение переменной i и значение переменной s в формате с 20 знаками после запятой.
  4. Строка, представляющая значение переменной s, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
  5. Копия строки x, начиная с первого символа и заканчивая 12-ым, записывается в вывод.
  6. Строка, представляющая значение переменной s, умноженное на 1E10, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
  7. Копия строки x, начиная с позиции, следующей за последней десятичной точкой, и заканчивая 10-ым символом, записывается в вывод.
  8. Строка, представляющая значение переменной s, умноженное на 1E20, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
  9. Копия строки x, начиная с позиции, следующей за последней десятичной точкой, и заканчивая 10-ым символом, записывается в вывод.
  10. Строка, представляющая значение переменной s, умноженное на 1E30, преобразуется в строку с 10 знаками после запятой и записывается в переменную x.
  11. Копия строки x, начиная с позиции, следующей за последней десятичной точкой, и заканчивая 10-ым символом, записывается в вывод.
  12. Выводится символ ^, который указывает на сравнение с этим символом.
  13. Выводится символ новой строки. После выполнения всех действий в цикле, программа ожидает ввода от пользователя, чтобы прекратить выполнение.

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы