|
Mostrar Mensajes
|
Páginas: 1 [2]
|
11
|
Programación / Programación C/C++ / Re: TAB de OPERACIONES CON RACIONALES
|
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...
|
|
|
12
|
Programación / Programación C/C++ / TAB de OPERACIONES CON RACIONALES
|
en: 9 Junio 2014, 15:45 pm
|
#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??
|
|
|
14
|
Programación / Programación C/C++ / Re: CONTENEDORES STL vector
|
en: 7 Junio 2014, 14:36 pm
|
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 / Programación C/C++ / CONTENEDORES STL vector
|
en: 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?
|
|
|
|
|
|
|