Somebody of the crowd
  11.11.2012 17:10
  
 
  Доброго времени суток уважаемые форумчане! Столкнулась с проблемой, из-за которой не могу двигаться дальше.
Подзадача: Вводится любая десятичная дробь, с любым количеством знаков до и после запятой. Перевести ее в обыкновенную, т.е. вида (a/b).
Все казалось бы очень просто, вот только введенная десятичная дробь, даже если ничего с ней не делать, не совпадает с выводом этой же дроби, появляются какие-то лишние цифры.
Отсюда, как следствие:
Int(x)+Frac(x) не равняется х! 
Кто знает, подскажите, что нужно сделать, чтобы Паскаль не добавлял лишние цифры к введенной десятичной дроби?
 
 
 
 
  Вы спользуете тип real, а работа с вещественными числами обладает своей спецификой.
Например вещественные числа нельзя сравнивать напрямую а=b, они сравниваются abs(a-b)<eps.
Поскольку значения вещественного типа являются приблизительными,  результат сравнения значений различного вещественного типа не  всегда можно предсказать.  Например,  если Х - переменная вещественного типа с одинарной точностью,  а Y - переменная вещественного типа с двойной точностью,  то результатом выполнения следующих операторов будет значение False:
    X := 1/3;
    Y := 1/3;
    Writeln(X = Y);
Причина этого состоит в том,  что Х имеет точность только до 7-8 цифр, а Y - точность до 15-16 цифр, и когда оба значения преобразуются к типу с повышенной точностью,  то  после  первых  7-8 цифр остальные цифры будут различаться.  Аналогично,  результатом выполнения операторов:
X := 1/3;
Writeln(X = 1/3);
будет значение False,  результат 1/3 в операторе Writeln вычисляется с точностью до 20 значащих цифр.
Поэтому единственный способ, который мне щас приходит в голову, это создавать массив целых чисел, записывать туда ваще число и работать с с ним.
 
 
 
  Somebody of the crowd
  11.11.2012 20:23
  
 
  Большое спасибо, Krjuger )))