elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  TAB de OPERACIONES CON RACIONALES
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: TAB de OPERACIONES CON RACIONALES  (Leído 1,891 veces)
chicainge

Desconectado Desconectado

Mensajes: 15


Ver Perfil
TAB de OPERACIONES CON RACIONALES
« en: 9 Junio 2014, 15:45 pm »

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 es el racional el cual guarda el resultado pero este no se guarda;
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??


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: TAB de OPERACIONES CON RACIONALES
« Respuesta #1 en: 9 Junio 2014, 15:59 pm »

así a bote pronto... ninguno... qué te sucede exactamente??

espero que no pretendas que nos copiemos tu código, lo depuremos, corrijamos los errores y te demos un informe sobre los fallos que tienes y cómo corregirlos???


En línea

chicainge

Desconectado Desconectado

Mensajes: 15


Ver Perfil
Re: TAB de OPERACIONES CON RACIONALES
« Respuesta #2 en: 9 Junio 2014, 20:36 pm »

solo tiene uno; compila perfectamente pero la función mostrar falla siempre sale 0/0 cuando el resultado dentro de las funciones en el cpp sale bn y no entiendo cual es el fallo para que no se pase del cpp del tab, al principal y del principal a mostrar, es un fallo muy simple pero no veo como correguirlo...
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: TAB de OPERACIONES CON RACIONALES
« Respuesta #3 en: 9 Junio 2014, 21:49 pm »

Código
  1. c.suma(rr1,rr2);
  2. c.mostrar();

Código
  1. CRacional CRacional::suma(CRacional rr1,CRacional rr2){
  2.          CRacional c;
  3.          mismodenominador(rr1,rr2);
  4.          c.a=rr1.a+rr2.a;
  5.          c.b=rr1.b;
  6.          c.simplificar();
  7.          cout<<"muesta desde suma: "<<c.a<<"/"<<c.b<<endl; //sale bn
  8.          return c;
  9.      }

en la operación de suma creas una nueva instancia de CRacional y la devuelves... pero no modificas la instancia actual, por lo que en el código de arriba, "c", no cambia el valor de sus variables.

Una forma de solucionar esto sería retocar la operación tal que:

Código
  1. CRacional CRacional::suma(CRacional rr1,CRacional rr2){
  2.          mismodenominador(rr1,rr2);
  3.          a=rr1.a+rr2.a;
  4.          b=rr1.b;
  5.          simplificar();
  6.          cout<<"muesta desde suma: "<<a<<"/"<<b<<endl; //sale bn
  7.          return *this;
  8.      }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Operaciones con videos...
Multimedia
-=CaZZaDoR=- 8 3,797 Último mensaje 13 Febrero 2004, 18:52 pm
por Songoku
2 operaciones con el boton X
Programación Visual Basic
fraktal 4 1,449 Último mensaje 14 Octubre 2006, 01:28 am
por NYlOn
Operaciones con
.NET (C#, VB.NET, ASP)
David Vans 0 2,528 Último mensaje 25 Abril 2007, 18:06 pm
por David Vans
Funciones polinomicas y racionales
Programación C/C++
clodan 5 3,781 Último mensaje 27 Agosto 2010, 14:53 pm
por clodan
Calcular las n raices racionales de un polinomio grado n (dudas particulares)
Programación C/C++
tenshi96 2 5,950 Último mensaje 23 Mayo 2016, 04:12 am
por JavierScars
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines