Ребята, подскажите:
Как сделать так, чтобы после решения элементарной задачки, результат на экране был дробным числом?
Чтобы результат выражения: 1/4+2/3 был 11/12, а не 0.91...
C/C++
Помогите с элементарной задачей в С++
Это не элементарная задача, тут подразумевается применение специфических библиотек, приёмов вычислений и вывода или математических движков.
Смотрите в сторону boost::rational, как наиболее доступного средства, например:
https://cppsecrets.com/users/1494100103111117100974948485064103109971051084699111109/C00-boostrational.php
Но rational не позволит победить ограничения дискретной математики и ошибки округления.
Смотрите в сторону boost::rational, как наиболее доступного средства, например:
https://cppsecrets.com/users/1494100103111117100974948485064103109971051084699111109/C00-boostrational.php
Но rational не позволит победить ограничения дискретной математики и ошибки округления.
Никита Старжинский
Интересная информация. Спасибо!
Именно на С++ надо? А то на Scheme - работает из коробки:
scheme@(guile-user)> (+ 1/4 2/3)
$1 = 11/12
scheme@(guile-user)> (+ 1/4 2/3)
$1 = 11/12
Если вы не хотите использовать stl, то можите просто написать функцию перевода десятичных дробей в обычные.
Почитайте как это делается.

Почитайте как это делается.

Делается уже не первый раз.
Просто для каждого аргумента отдельно хранится числитель, отдельно — знаменатель (все целочисленное). Результат тоже разделён.
Знаменатель равен произведению знаменателей аргументов.
Числитель есть сумма произведений числителя и знаменателя из разных аргументов.
При желании можно добавить функцию вычисления НОД числителя и знаменателя, это позволяет сократить дробь.
✓ Если результат равен целому числу, то он хранится с единичным знаменателем.
Также можно добавить функцию перестановки знака в числитель (если знаки числителя и знаменателя различаются).
✓ Потоковый ввод iostream позволяет вводить простые дроби ввиде последовательности: число→символ→число, даже без пробелов между элементами; ошибок не возникает.
int numer, denom;
char divid;
std::cin >> numer >> divid >> denom;
// корректно воспринимает дроби вида 1/4
Просто для каждого аргумента отдельно хранится числитель, отдельно — знаменатель (все целочисленное). Результат тоже разделён.
Знаменатель равен произведению знаменателей аргументов.
Числитель есть сумма произведений числителя и знаменателя из разных аргументов.
При желании можно добавить функцию вычисления НОД числителя и знаменателя, это позволяет сократить дробь.
✓ Если результат равен целому числу, то он хранится с единичным знаменателем.
Также можно добавить функцию перестановки знака в числитель (если знаки числителя и знаменателя различаются).
✓ Потоковый ввод iostream позволяет вводить простые дроби ввиде последовательности: число→символ→число, даже без пробелов между элементами; ошибок не возникает.
int numer, denom;
char divid;
std::cin >> numer >> divid >> denom;
// корректно воспринимает дроби вида 1/4
можешь написать свой класс, содержащий как компоненты целочисленные числитель и знаменатель и переопределить операторы плюс, минус, умножить, делить, а также преобразование в "обычные" double и float. Можешь воспользоваться готовыми библиотеками (сервис ответов не дает вставить ссылку на гитхаб почему-то). Удачи и упорства в изучении cpp
Никита Старжинский
Благодарю!
Александр Гризин
Этот класс неоднократно публиковали даже в проекте «Ответы».
Ммм не знаю есть ли такое в си++. Но сделайте просто согласно математике, приведите к общему основанию.
Похожие вопросы
- Помогите с кодом задачи c++. задача на фото
- Помогите с решением задачи на языке СИ
- Помогите пожалуйста с задачей на c++, если кто-нибудь захочет помочь.
- Помогите с двумя задачами на с++.
- Помогите пожалуйста с задачей по С++
- Помогите пожалуйста решить задачу на языке С#.
- Помогите пожалуйста составить задачу на программе С++
- Помогите пожалуйста решить задачу по с++
- Помогите пожалуйста решить задачу на Си
- Прошу помочь с двумя задачами по C++. Есть код моей попытки. Буду рад если напишите проги.