Jump to content
Sign in to follow this  
Laweit

[C++] Calculadora de Frações

Recommended Posts

Laweit    0
Laweit

Esse código eu fiz a poucos dias para um amigo meu qual estava com "problemas" com a frações:

Eu sei que tem algumas variáveis inúteis, pedaços descartáveis mas isso foi só pra quebrar o galho. Conforme o tempo passa eu irei editando:

 

Fractions.h

 

////////////////////////////////////////////////////////////////////////////////
//                   Esse é o arquivo cabeçalho do projeto                    //
//                               Fractions Tool                               //
//                          Feito por Marcelo Muzzi                           //
//                        Copyright Marcelo Muzzi 2009                        //
//                          Todos direitos reservados                         //
////////////////////////////////////////////////////////////////////////////////

int result, total, cima;

class Fraction {
     public:
            int gcd(int, int);
            void lgc(int, int);
            void pF(int);
            void reduzir(int, int);
            void dividir(int, int, int, int);
            void multiplicar(int, int, int, int);
            void subtrair(int, int, int, int);
            void somar(int, int, int, int);
            };


void Fraction::pF(int kind)
{
    Fraction a; int num1, den1, num2, den2;
    if (kind == 5){
             cout << "Esse programa foi totalmente desenvolvido por Marcelo Muzzi" << "\nCopyright Marcelo Muzzi 2009\nTodos direitos reservados" << endl;
             }
    else if (kind > 5){
         cout << "Erro!" << endl;
         }
   else{
   cout << "Digite o numerador da primeira fracao: " << endl; cin >> num1;
   cout << "Digite o denominador da primeira fracao: " << endl; cin >> den1;       
   cout << "Digite o numerador da segunda fracao: " << endl; cin >> num2;
   cout << "Digite o denominador da segunda fracao: " << endl; cin >> den2;
   if (kind == 1){
            a.somar(num1, den1, num2, den2);}

   else if (kind == 2){
         a.subtrair(num1, den1, num2, den2);}

   else if (kind == 3){
        a.multiplicar(num1, den1, num2, den2);}

   else if (kind == 4){
        a.dividir(num1, den1, num2, den2);}
   else{
        cout << "Digite algo válido" << endl;}

   cout << "Resultado: " << cima << "/" << total << endl;
   a.reduzir(cima, total);
   cout << "Simplicado: " << cima << "/" << total << endl;}
}
//Esse é o Algoritimo de Euclides
int Fraction::gcd(int num1, int num2){
   return ( num2 == 0 ? num1 : gcd(num2, num1 % num2) ); 
   //ou se não intendeu:
        /*if (num2 == 0) return num1;
          else return gcd(num2, num1 % num2);}*/}
//esse é meu
void Fraction::lgc(int num1, int num2){
    result = ((num1 * num2) / gcd(num1, num2));
    /*leia-se: result é igual a num1 vezes num2 dividido pelo mdc de num1 e num2*/}
//esse também é meu
void Fraction::reduzir(int num1, int num2){
    int factor = gcd(num1, num2);
    cima /= factor; total /= factor;
    /*pra quem não intendeu: essa é uma formula que eu aprendi a poucos dias:
          cima é igual a cima(matematicamente impossível) dividido por fator
          que por sua vez é igual ao mdc de num1 e num2. e o mesmo para total*/}

void Fraction::dividir(int num1, int den1, int num2, int den2){
    cima = num1*den2;
    total = num2*den1;
    /*cima igual a num1 vezes den2
    total é igual a num2 vezes den1*/}

void Fraction::multiplicar(int num1, int den1, int num2, int den2){
    cima = num1*num2;
    total = den1*den2;
    /*cima é igual a num1 vezes num2 e
    total igual a den1 vezes den2*/}

void Fraction::subtrair(int num1, int den1, int num2, int den2)
{
    if (den1 == den2){
             cima = num1 - num2; total = den1;}
    else{
         lgc(den1, den2);
        if (result == den1){
                   cima = num1 - ((result/den2)*num2);}
        else if (result == den2){
             cima = num2 - ((result/den1)*num1);}
        else{
             cima = (num1*result) - (num2*result);}
        total = result;}
}
void Fraction::somar(int num1, int den1, int num2, int den2)
{
    if (den1 == den2){
             cima = num1 + num2; total = den1;}
    else{
         lgc(den1, den2);
        if (result == den1){
                   cima = num1 + ((result/den2)*num2);}
        else if (result == den2){
             cima = num2 + ((result/den1)*num1);}
        else{
             cima = (num1*result) + (num2*result);}
        total = result;}
}

 

 

Fractions.cpp:

 

 

////////////////////////////////////////////////////////////////////////////////
//                   Esse é o arquivo principal do projeto                    //
//                               Fractions Tool                               //
//                          Feito por Marcelo Muzzi                           //
//                        Copyright Marcelo Muzzi 2009                        //
//                          Todos direitos reservados                         //
////////////////////////////////////////////////////////////////////////////////

#include <iostream.h>
#include "fraction.h"

int main()
{
   int num1, den1, num2, den2; Fraction a; int ch;
   cout << "/////////////////////////////////////////////////////////////////////////" << endl;
   cout << "//                           Fractions Tool                            //" << endl;
   cout << "//                        Feito por Marcelo Muzzi                      //" << endl;
   cout << "//                     Copyright Marcelo Muzzi 2009                    //" << endl;
   cout << "//                      Todos direitos reservados                      //" << endl;
   cout << "/////////////////////////////////////////////////////////////////////////" << endl;
   cout << "\n1) Somar\n2) Subtrair\n3) Multiplicar\n4) Dividir\n5) Creditos" << endl;
   cin >> ch;
   if (ch == 1){a.pF(1);}
   else if (ch == 2){a.pF(2);}
   else if (ch == 3){a.pF(3);}
   else if (ch == 4){a.pF(4);}
   else if (ch == 5){a.pF(5);}
   cout << "\n\n\n\n";
   #ifdef WIN32
   system("pause");
   #endif
   return 0;
}

 

 

Divirtam-se

Share this post


Link to post
Share on other sites
Ruquan    2
Ruquan

legal

Share this post


Link to post
Share on other sites
the_labrax    0
the_labrax

bem organizado

eu acho que ficaria melhor com switch no começo, mas tá ótimo

Share this post


Link to post
Share on other sites
Striker_Sky    0
Striker_Sky

Bem creativo, mais acho q vc errou uma função no Fractions.h linha #13

 

 

else if (ch == 2){a.pF(1);}

else if (ch == 2){a.pF(2-1);}

else if (ch == 2){a.pF(2+1);}

Share this post


Link to post
Share on other sites
Dartier    0
Dartier

nossa cara muito boa, é exelente pra quem tá na 7ª~8ª série. ;)

Share this post


Link to post
Share on other sites
Mickfern    32
Mickfern

Cara eu gostei muito da ideia, porém, sou noob.

Como eu uso ? voce poderia me explicar?

Share this post


Link to post
Share on other sites
dragonlorde    0
dragonlorde

/\ To com mesma duvida..

Tem que compilar? qual programa usar?

Share this post


Link to post
Share on other sites
Dark Skyllen    7
Dark Skyllen
/\ To com mesma duvida..

Tem que compilar? qual programa usar?

 

Sim, tem que compilar.. pode ser usando o DevC++

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×