Часто студентам дают задание реализовать класс обыкновенных дробей Fraction на языке С++ с помощью ООП. Поэтому сегодня я покажу как должно выглядеть решение этой задачи. Пример выполнения программы:
Мой преподаватель не нашёл данных и операций, с которыми этот класс не работает, но небольшой сюрприз я решил вам оставить:
В этой функции уже при x=24 у вас будет неправильный результат. Почему?
Потому что в результате переполнения вы получаете неправильные данные.
double_max = 9 223 372 036 854 775 807 int_max = 2 147 483 647
Везде по разному, но различие в порядках значений очевидно. Поэтому в строчке 29, если выражение (value_1 - value_2) не умещается в int, то получим переполнение -> неправильный числитель.
Наилучшим решением будет переписать алгоритм так, чтобы он, в зависимости от "x", умножал на 10 в нужной степени, а не с запасом, как здесь.
Блок CONTROL_INPUT описан здесь.
Остальное всё просто, поэтому если возникнут вопросы - пишите их в комментарии.
|