Ir ao conteúdo

Posts recomendados

Postado

Como faço para exibir um resultado em formato de fração: a/b?

cout << a << "/" << b;
cout << 5 << "/" << 2;

Isso está correto?

  • Curtir 1
  • Amei 1
Postado
Em 27/07/2018 às 15:22, phk1 disse:

Como faço para exibir um resultado em formato de fração: a/b?

cout << a << "/" << b;

cout << 5 << "/" << 2;

Isso está correto?

Depende do que você está querendo quer:

  1. Exibir o resultado,
  2. Exibir a expressão,
  3. Exibir resultado e mais expressão?

 

Para exibir só resultado? É como@devair1010 disse e somente.

 

 

Ai você combina todo em um função [Exibir o resultado, exibir sua expressão],

Analise esse programa:

//
//  Programa C++11  --  Exemplo de Função Divisão                             
//  enconding: OEM 860, compilador: GCC 3.7.0  MinGW.org                      
//  [MSC v.6.3.0-1 32b (AMD6 4)] on win32 editor: Notepad++ 7.5.7 32 32 bits  
//  OS: win7 64 bits                                                          
//  file: drafts.cpp                                              ver: 1.0.0  
//  
#include <iostream>
using namespace std;
//
//  divisao_com_print -- calcula a proporção de a/b
//    param :float:  a dividendo
//    param :float:  b divisor
//
//      deve ter valor diferente de 0
//      Se b == 0
//            e a > 0: print +infinito
//            e a < 0: print -infinito
//            e a = 0: print resultado  NaN
//
//    param :int:    print 1 ou true para imprimir no prompt
float divisao_com_print (float a, float b, int print){
    if (print  !=  0){
        // Se a referencia para saída é nula, ou tem False:
        // Não imprimir.
        //  
        cout << a << "/" << b;
        if (b  ==  0){
            cout << endl;
            cout << "Divisao por 0: Improbabilidade que resulta em ";
            if (a  >  0){cout << "+infinito" << endl;} else
            if (a  <  0){cout << "-infinito" << endl;} else
                  {cout << "Nao e um Numero" << endl;} }
        cout <<"= " <<  a/b << endl;}
  return a/b;}
//
//  Função: principal do programa.
int main (void){
  float quociente = divisao_com_print (0, 0, true);
                    // Calcule a fração 5/2, e imprimer o resultado no prompt.
                    // Teste novos valores para a, b, print.
                    //
    cout << "Quociente: " << quociente << endl;
  return 0;}

Dúvidas?

 

 

  • Curtir 1
Postado

Pelo que entendi ele quer expressar os números na forma de fração ao invés da forma decimal, ou seja imprimir como uma fração de inteiros na forma a/b, por exemplo imprimir 1/2 ou 24/5, ao invés de 0.5 e 4.8.

 

E sim é assim mesmo que tem que fazer @phk1 , mas se quiser uma implementação para usar números nessa forma precisa criar uma classe para frações e implementar o comportamento das operações matemáticas usando eles. Se fizer uma busca por "C++ Fraction Class" acha facilmente algumas implementações:

https://github.com/featdd/FractionClass/blob/master/Fraction.cpp

https://martin-thoma.com/fractions-in-cpp/

  • Curtir 2
Postado

Isso mesmo, agora vou estudar com calma para ver como funciona. Muitas vezes queremos mostrar em formato fracionário e não em decimal. Por exemplo aqueles programas de sequência de números, muitos colocam em formato decimal e no final só mostra o resultado da divisão, não é isso, tem de mostrar a sequência  da fração. 1/2, 1/3, 1/4...

Muito obrigado pela ajuda a todos. Vou colocar no meu código e testar para ver se funciona e depois eu mostro o resultado.

  • Curtir 2
Postado

Aqui está o código resolvido. A única parte que não consegui resolver e tive de pesquisar foi a da divisão por zero. Aí eu entendi, tem de saber se a divisão é exata para simplificar as duas frações ao mesmo tempo. Depois tudo funcionou certo. Muito obrigado a todos. Valeu isrnick!

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

using namespace std;
int main()
{
    
setlocale(LC_ALL, "Portuguese");
int a,b,c,d,e,f,i,g,h;
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));
f = b * d;

cout << "A soma das fracoes é:  " << e << "/" << f << "\n";
for (i=2;i<=10;i++)
{
    if (e == 0 && f == 0)
       cout << "A simplificação nao é possivel\n";
    if(e % i == 0 && f % i == 0)
    {
       g = e / i;
       h = f / i;
    }
}
cout << "O resultado da soma da fracao é:\n  " << g << "/" << h;
return 0;
}

adicionado 28 minutos depois

Na verdade tinha um erro. Consertei, eu acho, porém quando eu executo o windows diz que o programa parou de funcionar. 

int a,b,c,d,e,f,i,g,h;
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));
f = b * d;

cout << "A soma das fracoes é:  " << e << "/" << f << "\n";
if (e % i != 0 && f % i != 0)
     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;
    }
    
}
Eu acho, agora, que está certo.

adicionado 37 minutos depois

Não consigo achar o erro para o congelamento.

  • Curtir 3
Postado
#include <iostream>


using namespace std;

int main (int argc, char **argv){
    int a, b, c, d, e, f, i, g, h;
    cout << "Entre com os valores da primeira fracao: ";
    cin >> a >> b;

    cout << "Entre com os valores da segunda fracao: ";
    cin >> c >> d;

    e = ((a * d) + (b * c));
    f = b * d;

    cout << "A soma das fracoes é:  " << e << "/" << f << "\n";
    
    if (e % i != 0  &&  f % i != 0){ 
          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;
                return  0; }}
    
    return  0; }

está no [ IF ]: if (e % i != 0  &&  f % i != 0){ ... }, porque a variável não foi inicializada, e tem um valor irregular que não pior das hipóteses é 0.

 

 

 

  • Curtir 1
Postado

Valeu pela resposta, mas o programa continua congelando, iniciei a variável i logo no início, mas mesmo assim não deu certo.

  • Curtir 1
Postado

Olá tudo bem?

Para esse algoritmo deu certo, pelo menos não temos crashed.

#include <iostream>  //! as funções padrões de entrada e saída.
using namespace std;

int main (int argc, char **argv){
    int numa, dena, numb, denb;

    cout << endl;
    cout << "Entre com os valores da primeira fracao" << endl;
    cout << "1] numerador..: "; cin >> numa;
    cout << "   denominador: "; cin >> dena;

    cout << endl;
    cout << "Entre com os valores da segunda fracao" << endl;
    cout << "2] numerador..: "; cin >> numb;
    cout << "   denominador: "; cin >> denb;

    cout << endl;
    cout << endl;

    int numerad =  ((numa * denb) + (numb * dena));
    int denomin =  dena * denb;

    cout << "A soma das fracoes é:  " << numerad << "/" << denomin << endl;
    
    int mdc =  1;
    for (int d =  denomin; 1  <  d; d --){
          if (denomin % d  ==  0  &&  numerad % d  ==  0){
                mdc =  d;
                d =  0; }}

    if (mdc  !=  1){
          numerad /=  mdc;
          denomin /=  mdc;
          cout << "A soma (reduzida) das frações é: " << numerad << "/"; 
          cout << denomin;
          cout << endl; }
    
    cout << endl;

    return  0; }

 

 

Ok tchau!

  • Curtir 1
Postado

Fiquei testando o programa, o estranho é que o erro acontece neste if: if (e % i == 0 || f % i == 0). Tanto faz se é ou ou e lógico. Na execução o programa congela do mesmo jeito. Quando vai testar o if. Antes do if tudo corre bem.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...