Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Consulta con código orientado a objetos

Estas en el tema de Consulta con código orientado a objetos en el foro de C/C++ en Foros del Web. Tengo el siguiente código cuya función es crear 10 objetos, 3 salas de un teatro y cada una con 3 funciones diferentes, pero para crear ...
  #1 (permalink)  
Antiguo 29/09/2012, 13:12
 
Fecha de Ingreso: septiembre-2012
Mensajes: 1
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Consulta con código orientado a objetos

Tengo el siguiente código cuya función es crear 10 objetos, 3 salas de un teatro y cada una con 3 funciones diferentes, pero para crear la venta de sillas de todas me vi obligado a crear 9 salas.

El problema es que cada objeto funciona correctamente con sus método excepto a la hora de ocupar la silla(metodo "ocupar"), trabajo con una matriz despues de inicializarla y convertir en 0 todos sus datos claramente, que al intentar ocupar una silla me retorna que ya estan ocupadas... llevo mucho en este problema y me serían de gran ayuda

Cita:
#include <iostream>
//~ #include <stdlib.h>
//~ #include <string>
//~ #include <vector>

using namespace std;

class Sala{
public:
Sala();
void iniciar(int s[6][12]);
void imprimir(int s[6][12]);
void ocupar(int s[6][12]);
void menuSala();
void setear();
void buscar();
void sillas();
};

Sala Sala1A1;
Sala Sala1B1;
Sala Sala1C1;

Sala Sala2A1;
Sala Sala2B1;
Sala Sala2C1;

Sala Sala3A;
Sala Sala3B;
Sala Sala3C;

Sala::Sala(){;};

Sala salaX;

void Sala::iniciar(int s[6][12]) {
int x, y;

for(x=0;x<6;x++) {
for(y=0;y<12;y++) {
s[x][y] = 0;
}
}
}

void Sala::imprimir(int s[6][12]) {
int x, y;
int libre=0, libres=0;

cout << " --------------------- " <<endl;
cout << " | | " <<endl;
cout << " --------------------- " <<endl;
cout << endl;
for(x=0;x<6;x++) {
cout <<"Fila " << x+1 << " ";
for(y=0;y<12;y++) {
if (s[x][y] == 1) {
cout<<" X ";
} else {
cout<<" - ";
libre++;
libres++;
}
}
cout << " ... Libres " << libre << endl;
libre=0;
}
cout<<"Asiento 01 02 03 04 05 06 07 08 09 10 11 12"<<endl;
cout<<libres<< " Asientos disponibles"<<endl;
}

void Sala::ocupar(int s[6][12]) {
int x, y;
int reserva[6][12];

iniciar(reserva);
imprimir(s);

cout << "\nElija la fila y butaca que quiera coger, para parar de reservar introduzca un 0 en la fila...\n";

do {
cout << "Fila: ";
cin >> x;
if (x != 0) {
cout << "Butaca: ";
cin >> y;
if (reserva[x-1][y-1] == 0 && s[x-1][y-1] == 0){
reserva[x-1][y-1] = 1;}
else
cout <<"\nLa butaca " << x << " de la fila " << y <<" esta ocupada, reserve otra localidad...\n";
}
} while(x != 0);

for (x=0;x<6;x++) {
for(y=0;y<12;y++) {
if (reserva[x][y] == 1) {
s[x][y] = 1;
}
}
}
cout << "\n12a ha reservado sus butacas, gracias.\n";}


void Sala::setear(){
int sala[6][12];
cout << "Que sala desea reiniciar?" << endl;
cout << "1) Reiniciar sala 1 en la franja 1" << endl;
cout << "2) Reiniciar sala 1 en la franja 2" << endl;
cout << "3) Reiniciar sala 1 en la franja 3" << endl;
cout << "4) Reiniciar sala 2 en la franja 1" << endl;
cout << "5) Reiniciar sala 2 en la franja 2" << endl;
cout << "6) Reiniciar sala 2 en la franja 3" << endl;
cout << "7) Reiniciar sala 3 en la franja 1" << endl;
cout << "8) Reiniciar sala 3 en la franja 2" << endl;
cout << "9) Reiniciar sala 3 en la franja 3" << endl;
cout << "0) Reiniciar todas" << endl;
int opc;
cin >> opc;
switch(opc){
case 1: Sala1A1.iniciar(sala); break;
case 2: Sala1B1.iniciar(sala); break;
case 3: Sala1C1.iniciar(sala); break;
case 4: Sala2A1.iniciar(sala); break;
case 5: Sala2B1.iniciar(sala); break;
case 6: Sala2C1.iniciar(sala); break;
case 7: Sala3A.iniciar(sala); break;
case 8: Sala3B.iniciar(sala); break;
case 9: Sala3C.iniciar(sala); break;
case 0: Sala1A1.iniciar(sala);
Sala1B1.iniciar(sala);
Sala1C1.iniciar(sala);
Sala2A1.iniciar(sala);
Sala2B1.iniciar(sala);
Sala2C1.iniciar(sala);
Sala3A.iniciar(sala);
Sala3B.iniciar(sala);
Sala3C.iniciar(sala); menuSala(); break;
default: cout << "Numero ingresado incorrecto" << endl;}}

void Sala::buscar(){
int opc;
int sala[6][12];
cout << "Que sala desea ver? " << endl;
cout << "1) Ver sala 1" << endl;
cout << "2) Ver sala 2" << endl;
cout << "3) Ver sala 3" << endl;
cin >> opc;
switch(opc){
case 1: cout << "En que franja desea ver la sala" << endl;
cout << "1) Ver franja 1 (14:00 - 16:30)" << endl;
cout << "2) Ver franja 2 (16:30 - 19:00)" << endl;
cout << "3) Ver franja 3 (19:00 - 21:00)" << endl;
cin >> opc;
switch(opc){
cin >> opc;
case 1: Sala1A1.imprimir(sala); menuSala(); break;
case 2: Sala1B1.imprimir(sala); menuSala(); break;
case 3: Sala1C1.imprimir(sala); menuSala(); break;
default: cout << "error" << endl;}; break;
case 2: cout << "En que franja desea ver la sala" << endl;
cout << "1) Ver franja 1 (14:00 - 16:30)" << endl;
cout << "2) Ver franja 2 (16:30 - 19:00)" << endl;
cout << "3) Ver franja 3 (19:00 - 21:00)" << endl;
cin >> opc;
switch(opc){
case 1: Sala2A1.imprimir(sala); menuSala(); break;
case 2: Sala2B1.imprimir(sala); menuSala(); break;
case 3: Sala2C1.imprimir(sala); menuSala(); break;
default: cout << "error" << endl;}; break;
case 3: cout << "En que franja desea ver la sala" << endl;
cout << "1) Ver franja 1 (14:00 - 16:30)" << endl;
cout << "2) Ver franja 2 (16:30 - 19:00)" << endl;
cout << "3) Ver franja 3 (19:00 - 21:00)" << endl;
cin >> opc;
switch(opc){
case 1: Sala3A.imprimir(sala); menuSala(); break;
case 2: Sala3B.imprimir(sala); menuSala(); break;
case 3: Sala3C.imprimir(sala); menuSala(); break;
default: cout << "error" << endl;}; break;
default: cout << "Error" << endl;}}

void Sala::sillas(){
int sala[6][12];
int opc;
cout << "En que sala desea reservar?" << endl;
cout << "1) Reservar en sala 1" << endl;
cout << "2) Reservar en sala 2" << endl;
cout << "3) Reservar en sala 3" << endl;
cin >> opc;
switch(opc){
case 1: cout << "En que franja desea su reserva?" << endl;
cout << "1) Reservar en la franja 1" << endl;
cout << "2) Resarvar en la franja 2" << endl;
cout << "3) Resarvar en la franja 3" << endl;
cin >> opc;
switch(opc){
case 1: Sala1A1.ocupar(sala); break;
case 2: Sala1B1.ocupar(sala); break;
case 3: Sala1C1.ocupar(sala); break;
default: cout << "error" <<endl;}; break;
case 2: cout << "En que franja desea su reserva?" << endl;
cout << "1) Reservar en la franja 1" << endl;
cout << "2) Resarvar en la franja 2" << endl;
cout << "3) Resarvar en la franja 3" << endl;
cin >> opc;
switch(opc){
case 1: Sala2A1.ocupar(sala); break;
case 2: Sala2B1.ocupar(sala); break;
case 3: Sala2C1.ocupar(sala); break;
default: cout << "error" <<endl;}; break;
case 3: cout << "En que franja desea su reserva?" << endl;
cout << "1) Reservar en la franja 1" << endl;
cout << "2) Resarvar en la franja 2" << endl;
cout << "3) Resarvar en la franja 3" << endl;
cin >> opc;
switch(opc){
case 1: Sala3A.ocupar(sala); break;
case 2: Sala3B.ocupar(sala); break;
case 3: Sala3C.ocupar(sala); break;
default: cout << "error" <<endl;}; break;}}

void Sala::menuSala() {
int opc;
cout <<"1. Iniciar sala" << endl;
cout <<"2. Imprimir la ocupación de la sala"<<endl;
cout <<"3. Ocupar butaca"<< endl;
cout <<"0. Salir"<<endl;
cout <<"Elije una opcion: ";
cin >> opc;
switch(opc){
case 1: salaX.setear(); menuSala(); break;
case 2: salaX.buscar(); menuSala(); break;
case 3: salaX.sillas(); menuSala(); break;
default: cout <<"n\nNo ha introducido una opción valida"<<endl;}}

int main(){
salaX.menuSala();
return 0;}
O si tienen otra solución al problema de una sala de un teatro con X filas y Y columnas y ocuparlas a través de consola mientras que este orientada a objetos sería perfecto

Última edición por YoxD111; 29/09/2012 a las 13:20
  #2 (permalink)  
Antiguo 29/09/2012, 15:26
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Consulta con código orientado a objetos

La matriz s que creas en el metodo setear se pierde cuando este metodo termina.
Lo que deberias hacer es crea la matriz como una variable de la clase

class Sala{
public:
Sala();
void iniciar(int s[6][12]);
void imprimir(int s[6][12]);
void ocupar(int s[6][12]);
void menuSala();
void setear();
void buscar();
void sillas();
private:
int s [6][12];
};

Y ahora los metodos no necesitan que les pase la matriz por argumento. Pueden acceder directamente a la matriz s.

Saludos

Etiquetas: matriz, objetos, salas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:52.