Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - chicainge

#11
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...
#12
#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;
#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

#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??
#13
MUCHÍSIMAS GRACIAS:)
#14
Gracias pero el programa me sigue dejando de funcionar, mira ;
este es el main:
#include <iostream>
#include <string>
#include <cctype>
#include "hotel.hpp"
using namespace std;
using namespace umalcc;

void leer_num(unsigned& num, const string& msj)
{
    cout << msj ;
    cin >> num;
}
void leer_str(string& str, const string& msj)
{
    cout << msj ;
    cin >> str;
}
void leer_cliente(string& nombre)
{
    leer_str(nombre, "Introduzca el nombre del cliente: ");
}
void check_ok(bool ok, const string& msj)
{
    if (ok) {
        cout << "Operacion Correcta. [" << msj << "]" << endl;
    } else {
        cout << "Operacion Erronea. [" << msj << "]" << endl;
    }
}
char menu()
{
    char op;
    cout << "X: Fin" << endl;
    cout << "A: Mostrar Datos Hotel" << endl;
    cout << "B: Alojar Nuevo Cliente" << endl;
    cout << "C: Desalojar Cliente" << endl;
    do {
        cout << endl << "    Opcion: ";
        cin >> op;
        op = char(toupper(op));
    } while (!((op == 'X')||((op >= 'A')&&(op <= 'E'))));
    cout << endl;
    return op;
}
int main()
{
    unsigned n_plantas, n_habs;
leer_num(n_plantas, "Introduzca el numero de plantas del hotel: ");
leer_num(n_habs, "Introduzca el numero de habitaciones por planta: ");
Hotel hotel(n_plantas, n_habs);
    bool ok;
    string nombre, msj;
    unsigned planta, n_hab;
    char op = ' ';
    do {
op = menu();
switch(op) {
case 'A':
hotel.Mostrar();
break;
case 'B':
leer_cliente(nombre);
hotel.Alojar(nombre, planta, n_hab, ok);
check_ok(ok, "Alojar");
if (ok) {
cout << " Alojar: " << nombre
<< " Planta: " << planta
<< " Hab: " << n_hab << endl;
}
break;
case 'C':
leer_str(nombre, "Introduzca el nombre del cliente: ");
hotel.Desalojar(nombre, ok);
check_ok(ok, "Desalojar");
break;
}
    } while (op != 'X');
}

este el hpp:
#ifndef hotel_hpp__
#define hotel_hpp__ 1
#include <iostream>
#include <string>
#include <queue>
#include <vector>
using namespace std;
namespace umalcc {
//--------------------------------------------------------------------------

class Hotel {
public:
Hotel(unsigned n_plantas, unsigned n_habs);
void Mostrar() const;
void Alojar(const std::string& nombre,
unsigned& plant, unsigned& n_hab, bool& ok);
void Desalojar(const std::string& nombre, bool& ok);
private:
//- tipos ----------------------
typedef struct habitacion{
      string nombre;
        };
        vector<  vector<habitacion>  > planta;
unsigned MAXPLANTA,MAXHABITACIONES;
};
}
#endif


y este el cpp del hpp:

#include <iostream>
#include "hotel.hpp"
#include <string>
#include <queue>
#include <vector>

using namespace std;
using namespace umalcc;

Hotel::Hotel(unsigned n_plantas, unsigned n_habs){
    MAXPLANTA=n_plantas;
    MAXHABITACIONES = n_habs;
    planta[MAXHABITACIONES][MAXPLANTA];
}
void Hotel::Mostrar() const{
    for(unsigned j=0; j<=planta.size();j++){
    cout<<"PLANTA "<< j <<" : "<<endl;
    for(unsigned i=0;i<MAXHABITACIONES;i++){
        cout<<"HABITACION "<< i <<" : "<<planta[i][0].nombre<<endl;
    }
    }
}
void Hotel::Alojar(const std::string& nombre, unsigned& plant, unsigned& n_hab, bool& ok){
    ok=false;

    unsigned j,n_p=planta.size();
    while(ok!=true || j!=(n_p+1)){
    for(j=0; j<=n_p;j++){
        for(unsigned i=0;i<MAXHABITACIONES;i++){
            if(planta[i][j].nombre!="") {
                    plant=j;
                    n_hab=i;
                    planta[i][j].nombre=nombre;
                    ok=true;
               }
            }
    }
    j++;
    }
}
void Hotel::Desalojar(const std::string& nombre, bool& ok){
    ok=false;
    unsigned j,n_p;
    n_p=planta.size();
    while(ok!=true || j<=(n_p+1)){
    for(j=0; j<=planta.size();j++){
        for(unsigned i=0;i<MAXHABITACIONES;i++){
            if(planta[i][j].nombre==nombre){
               planta[i][j].nombre="";
               ok=true;
            }
        }
    }
    j++;
    }
}
#15
Programación C/C++ / CONTENEDORES STL vector
7 Junio 2014, 01:43 AM
Hola tengo una duda sobre como acceder a el nombre de esta estructura:
       
        typedef struct habitacion{
         string nombre;
        };
        typedef vector<habitacion> habitaciones;
        vector<habitaciones> planta;

Esta declarado dentro de una clase privada, pero al intentar incluir un nombre..
planta [hab][pla]=nombre;
me sale un error, como puedo entonces acceder a nombre?