Ayuda con el siguiente programa, lo que debe de hacer es que al ingresar una fraccion este determine si es fraccion impropia y transformarla en fraccion mixta y reducirla a su minima expresion y en el caso contrario de no ser fraccion impropia solo redusca la fraccion, el problema es que al introducir una fraccion que no es impropia el programa se comporta algo extraño.
Nesecito ayuda porfavor!!!!!!!!!
Nesecito ayuda porfavor!!!!!!!!!
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
float reduce(int *, int * );
using namespace std;
int main(){
int num, den;
int mix;
float resultado;
cout << "Ingresa el numerador: " ,cin >> num;
cout << endl;
cout << "Ingresa el denominador: " ,cin >> den;
cout << endl;
if(num>den){
cout << "La fraccion " << num << "/" << den << " es impropia." << endl;
mix=num/den;
if(num % den ==0)
{
cout << "La fraccion mixta es: " << mix ;
cout << endl;}
else
if(num%den>0){
cout << "La fraccion mixta es: " << mix << " " << num%den << "/" << den;
cout << endl;
}
}
else
if(num<den){
cout << "La fraccion "<< num << "/" << den << " no es impropoia por lo tanto no se puede convertir a fraccion mixta";
cout << endl;
}
if(num<den){
resultado=reduce(&num, &den);
cout << num << "/" << den << "= " << resultado << endl;}
if(num>den){
resultado=reduce(&num, &den);
cout << mix << " " << num%den << "/" << den << "= " << resultado << endl;}
system("pause");
return 0;
}
float reduce (int * nume, int * deno)
{ int multi=9;
// ------------ busca comun denominador -----------
while (multi != 1)
{ multi=9;
while (*nume%multi != 0 || *deno%multi != 0)
multi--;
*nume=*nume/multi;
*deno=*deno/multi;
}
// ---- busca simplificar en caso de ser primos ---
while (*nume%*deno==0 || *deno%*nume==0){
if (*nume%*deno==0)
{ *nume/= *deno;
*deno %= *nume;
}
else
if (*deno%*nume==0)
{ *deno /= *nume;
*nume %= *deno;
}
}
return *nume/float(*deno);
}