Código:
#include<iostream>
#include<fstream>
#include<string>
#include "CRacional.hpp"
using namespace std;
using namespace racionales;
void menu(){
cout<<"1.INSERTAR RACIONALES"<<endl;
cout<<"2.CONSULTAR EL VALOR DEL NUMERADOR"<<endl;
cout<<"3.CONSULTAR EL VALOR DEL DENOMINADOR"<<endl;
cout<<"4.MOVER LOS RACIONALES AL FICHERO"<<endl;
cout<<"5.SUMAR "<<endl;
cout<<"6.RESTAR "<<endl;
cout<<"7.MULTIPLICAR"<<endl;
cout<<"8.DIVIDIR "<<endl;
cout<<"10.SALIR"<<endl;
cout<<"que desea hacer?"<<endl;
};
int main(){
CRacional rr1,rr2,c;
int e,d;
int num1,num2;
string nombrecarpeta;
ofstream sal;
int f;
menu();
while(f!=10){
cin>>f;
switch(f){
case 1:
cout<<"Inserte el numerador : ";
cin>>e;
cout<<endl<<"Inserte el denominador : ";
cin>>d;
while(d==0){
cin.ignore();
cout<<"no vale 0, inserte otro numero:";
cin>>d;
}
rr1.leerracionales(e,d);
cout<<"ahora el segundo racional; "<<endl;
cout<<"Inserte el numerador : ";
cin>>e;
cout<<endl<<"Inserte el denominador : ";
cin>>d;
while(d==0){
cin.ignore();
cout<<"no vale 0, inserte otro numero:";
cin>>d;
}
rr2.leerracionales(e,d);
menu();
break;
case 2:
cout<<"Racional 1: "<< rr1.obtnumerador();
cout<<endl<<"Racional 2: "<< rr2.obtnumerador();
cout<<endl;
break;
case 3:
cout<<"Racional 1: "<<rr1.obtdenominador();
cout<<endl<<"Racional 2: "<<rr2.obtdenominador();
cout<<endl;
break;
case 4:
cout<<"nombre de la carpeta donde desea guardar el racional 1 y 2: ";
cin>> nombrecarpeta;
sal.open(nombrecarpeta.c_str());
if(sal.fail()){
cout<<"error fichero";
}
else {
sal<<"racional 1: ";
rr1.volcar_a_fichero(sal);
sal<<"racional 2: ";
rr2.volcar_a_fichero(sal);
}
sal.close();
break;
case 5: c.suma(rr1,rr2);
c.mostrar();
cout<<"nombre de la carpeta donde desea guardar el racional: ";
cin>> nombrecarpeta;
sal.open(nombrecarpeta.c_str());
if(sal.fail()){
cout<<"error fichero";
}
else {
sal<<"suma: ";
c.volcar_a_fichero(sal);
}
sal.close();
break;
case 6: c.resta(rr1,rr2);
cout<<c.obtnumerador() << "/"<< c.obtdenominador()<<endl;
cout<<"nombre de la carpeta donde desea guardar el racional: ";
cin>> nombrecarpeta;
sal.open(nombrecarpeta.c_str());
if(sal.fail()){
cout<<"error fichero";
}
else {
sal<<"resta: ";
c.volcar_a_fichero(sal);
}
sal.close();
break;
case 7: c.multiplicar(rr1,rr2);
cout<<c.obtnumerador() << "/"<< c.obtdenominador()<<endl;
cout<<"nombre de la carpeta donde desea guardar el racional: ";
cin>> nombrecarpeta;
sal.open(nombrecarpeta.c_str());
if(sal.fail()){
cout<<"error fichero";
}
else {
sal<<"multiplicacion: ";
c.volcar_a_fichero(sal);
}
sal.close();
break;
case 8: c.dividir(rr1,rr2);
cout<<c.obtnumerador() << "/"<< c.obtdenominador()<<endl;
cout<<"nombre de la carpeta donde desea guardar el racional: ";
cin>> nombrecarpeta;
sal.open(nombrecarpeta.c_str());
if(sal.fail()){
cout<<"error fichero";
}
else {
sal<<"division: ";
c.volcar_a_fichero(sal);
}
sal.close();
break;
}
cin.ignore();
}
}
Código:
#ifndef __CRACIONAL__HPP__
#define __CRACIONAL__HPP__
#include <fstream>
#include <string>
using namespace std;
namespace racionales{
//constantes
class CRacional{
public:
//costructor por defecto
CRacional();
//costructor de copia
CRacional (const CRacional &otroracional);
//costructor extendido,leer
CRacional (int &e, int &d);
//destructor
~CRacional();
//leer
void leerracionales(int &e,int &d);
//consultar denominador y numerador
int obtnumerador();
int obtdenominador();
void mostrar();
//escribir en pantalla
void volcar_a_fichero(ofstream &sal);
//suma
CRacional suma(CRacional rr1,CRacional rr2);
//resta
CRacional resta(CRacional rr1,CRacional rr2);
//multiplicacion
CRacional multiplicar(CRacional rr1,CRacional rr2);
//dividir
CRacional dividir(CRacional rr1,CRacional rr2);
private:
int a;
int b;
void mismodenominador(CRacional &ra,CRacional &ra2);
void simplificar();
int mcd (int a, int b);
};
}
#endif
Código:
#include <iostream>
#include "CRacional.hpp"
#include<fstream>
using namespace std;
namespace racionales{
//constructores
CRacional::CRacional(): a(0),b(0){}
CRacional::CRacional (const CRacional &otroracional): a(otroracional.a),b(otroracional.b){};
CRacional::CRacional (int &a, int &b): a(a),b(b){};
CRacional::~CRacional(){};
//metodos
void CRacional::leerracionales(int &e,int &d){
a=e;
b=d;
}
int CRacional::obtnumerador(){
return a;
}
int CRacional::obtdenominador(){
return b;
}
void CRacional::mostrar(){
cout<<a<<"/"<<b<<endl;
}
void CRacional::volcar_a_fichero(ofstream &sal){
sal<<a<<"/"<<b<<endl;
}
void CRacional::mismodenominador(CRacional &ra,CRacional &ra2){
if(ra.b!=ra2.b){
CRacional aux1=ra,aux2=ra2;
aux1.b=aux1.b*aux2.b;
aux2.b=aux1.b;
aux1.a=ra.a*ra2.b;
aux2.a=ra.b*ra2.a;
ra=aux1;
ra2=aux2;
}
}
int CRacional::mcd (int a, int b){
int resul=1;
if(a<0){
a=a*(-1);
}
if(b<0){
b=b*(-1);
}
if(a<b){
int c;
c=a;
a=b;
b=c;
}
for(int i=2;i<=b;i++){
if((a%i)==0 && (b%i)==0){
resul=i;
}
}
return resul;
}
void CRacional::simplificar(){
CRacional rresul;
int mccd=mcd(a,b);
a=a/mccd;
b=b/mccd;
}
CRacional CRacional::suma(CRacional rr1,CRacional rr2){
CRacional c;
mismodenominador(rr1,rr2);
c.a=rr1.a+rr2.a;
c.b=rr1.b;
c.simplificar();
cout<<"muesta desde suma: "<<c.a<<"/"<<c.b<<endl; //sale bn
return c;
}
CRacional CRacional::resta(CRacional rr1,CRacional rr2){
CRacional c;
mismodenominador(rr1,rr2);
c.a=rr1.a-rr2.a;
c.b=rr1.b;
c.simplificar();
return c;
}
CRacional CRacional::multiplicar(CRacional rr1,CRacional rr2){
CRacional c;
c.a=rr1.a*rr2.a;
c.b=rr1.b*rr2.b;
c.simplificar();
return c;
}
CRacional CRacional::dividir(CRacional rr1,CRacional rr2){
CRacional c;
c.a=rr1.b*rr2.a;
c.b=rr1.a*rr2.b;
c.simplificar();
return c;
}
}
me podrían decir que problema hay en c.mostrar??