Como faço para imprimir uma fração na tela, não em decimal, mas em a/b

Algoritmo

C++

27/07/2018

Como faço para imprimir uma fração na tela, não em decimal, mas em a/b
Devo usar alguma biblioteca específica?
Paulo Kutwak

Paulo Kutwak

Curtidas 0

Melhor post

Venancio Alves

Venancio Alves

27/07/2018

Olá Paulo Kutwak!

Poste o código de exemplo para entendermos a sua dúvida e ajudá-lo da melhor forma.
GOSTEI 1

Mais Respostas

Paulo Kutwak

Paulo Kutwak

27/07/2018

Ainda não fiz o código, mas posso explicar. Quero mostrar a saída do programa no formato racional, 5/3, 4/5 e não em formato 5.3, 4.2.

Por exemplo:

cout << a << "/" << b;
a vale 5 e b vale 3.
A saída que eu quero é 5/3.
Por exemplo, sabemos que 0.5 equivale a 1/2, quero que a saída seja 1/2 e não 0.5
GOSTEI 0
Paulo Kutwak

Paulo Kutwak

27/07/2018

#include <iostream>
#include <stdio.h>

using namespace std;
int main()
{

setlocale(LC_ALL, "Portuguese");
int a,b,c,d,i,e,f,g,h;
i = 0;
a = 0;
b = 0;
c = 0;
d = 0;
e = 0;
f = 0;

cout << "Entre com os valores da primeira fracao: ";
cin >> a;
cin >> b;

cout << "Entre com os valores da segunda fracao: ";
cin >> c;
cin >> d;
//e = ((a*d)+(b*c));
//e = a * d + b * c;
f = b * d;
cout << "A soma das fracoes é: " << e << "/" << f << "\\n";


//if (e % i == 0) || (f % i == 0) //dessa forma não pode, parenteses isolados.
if (e % i == 0 || f % i == 0)//correto
//if ((e % i == 0) || (f % i == 0))//correto
cout << "A simplificação nao é possivel\\n";

for (i=2;i<=10;i++)
{
if((e % i != 0) || (f % i != 0))
{
g = e / i;
h = f / i;

cout << "\\nO resultado da simplificação da fracao é:\\n " << g << "/" << h;
}

system("pause");

return 0;
}
}
Há um problema no qual eu não consigo resolver. O programa compila corretamente, mas sempre congela na execução.
Obrigado
GOSTEI 0
Felipe Morais

Felipe Morais

27/07/2018

Boa noite, Paulo.

Você precisa escrever a sua própria classe para calcular e exibir números fracionários ao invés de flutuantes. Tente isto:

class Rational
{
public:
    int numerator, denominator;

    Rational(int num, int den=1){
        numerator = num;
        denominator=den;
    }
    Rational(Rational other){
        numerator = other.numerator;
        denominator = other.denominator;
    }
    double operator / (int divisor){
            denominator *= divisor;
            simplificate();
            return getrealformat();
    }
    Rational& operator / (int divisor){
            denominator *= divisor;
            simplificate();
            return this;
    }
    Rational& operator / (Rational &divisor){
            numerator *= divisor.numerator;
            denominator *= divisor.denominator;
            simplificate();
            return this;
    }
    double operator / (int divisor){
            denominator *= divisor;
            simplificate();
        return getrealformat();
    }
    double getrealformat(){
        return numerator/denominator;
    }
    simplificate(){
        int commondivisor = 1;
        for(int i=2;i<=min(abs(numerator), abs(denominator));i++)
            if( numerator%i == 0 && denominator%i == 0 )
                commondivisor = i;
        numerator /= commondivisor;
        denominator /= commondivisor;
    }
};


Uso da classe:

Rational r1(45), r2(90), r3=r1/r2;
cout<<r3.numerator<<'/'<<r3.denominator;
cout<<r3.getrealformat();
GOSTEI 0
POSTAR