Problema con Array

Iniciado por Ja_90, 9 Febrero 2015, 18:30 PM

0 Miembros y 1 Visitante están viendo este tema.

Ja_90

Buenas Companieros tengo el siguiente problema del libro Deitel:

(Sistema de reservaciones para una aerolínea.) Una pequeña aerolínea acaba de comprar una computadora para su
nuevo sistema automático de reservaciones. A usted se le ha pedido que programe el nuevo sistema. Usted debe es-
cribir un programa que asigne los asientos, en cada vuelo, del único avión de la aerolínea (capacidad: 10 asientos).
Su programa debe desplegar el siguiente menú de alternativas:
Por favor, digite 1 para "primera clase"
Por favor, digite 2 para "económico"
Si la persona digita 1, su programa debe asignar un asiento en la sección de primera clase (asientos 1 a 5). Si la
persona digita 2, su programa debe asignar un asiento en la sección económica (asientos 6 a 10). Su programa de-
be imprimir un pase de abordar que indique el número de asiento de la persona y si está en la sección de primera
clase o en la sección económica del avión.
Utilice un arreglo con un solo subíndice para representar la tabla de asientos del avión. Inicialice en 0 todos los ele-
mentos del arreglo para indicar que todos los asientos están vacíos. Mientras se asigna cada asiento, el valor de los
elementos correspondientes del arreglo se establece en 1, para indicar que el asiento ya no está disponible.
Por supuesto, su programa nunca debe asignar un asiento que ya está asignado. Cuando la sección de primera clase
está llena, su programa debe preguntar a la persona si acepta que se le coloque en la sección económica (y viceversa).
Si acepta, entonces haga la asignación apropiada del asiento. Si no acepta, entonces despliegue el mensaje "El
siguiente vuelo parte en tres horas".

Código (cpp) [Seleccionar]

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

void Mostrar(int Sillas[]);

int main()
{
    cout << "\t RESERVACIONES AEROLINEA \n\n";

    int Asientos[10] = {};
    int k=0; // contador de los 10 turnos

    cout << " Por favor, digite 1 para 'primera clase'\n";
    cout << " Por favor, digite 2 para 'economico'\n\n";

    cout << " Asientos: ";
    Mostrar(Asientos);

    do{
        int puesto, x;
        cout << "\n\nDigite su asiento: ";
        cin >>  puesto;

        if(puesto == 1)
        {
            for(int i=0 ; i<5 ; i++)
            {
                if(Asientos[i] == 0 && i<5)
                {
                    Asientos[i] = 1;
                    x = i+1;
                    break;
                }
            }
            cout << "\nPASE DE ABORDAJE:" << endl;
            cout << "El asiento asignado es: " << x << endl;
            cout << "Se encuentra en 1ra clase" << endl << endl;
        }

        if(puesto == 2)
        {
            for(int i=5 ; i<10 ; i++)
            {
                if(Asientos[i] == 0 && i<10)
                {
                    Asientos[i] = 1;
                    x = i+1;
                    break;
                }
            }
            cout << "\nPASE DE ABORDAJE:" << endl;
            cout << "El asiento asignado es: " << x << endl;
            cout << "Se encuentra en clase economico" << endl << endl;
        }

        Mostrar(Asientos);

        k++;
    }while(k<10);

    return 0;
}

void Mostrar(int Sillas[])
{
    for(int i=0 ; i<10 ; i++)
    {
        cout << " " << Sillas[i];
    }
}



Ahora bn hasta aca el programa pide 10 veces la entrada o la asignacion de los puestos pero no logro ver como hacer para que cuando ya no hallan puestos disponibles el programa pregunte si desea un puesto en la otra clase y si la respuesta es SI que lo asigne... Si alguien me puede guiar se lo agradeceria.
:D  ::::Ja_90::::   :D

Orubatosu

Se me ocurren varios mecanismos.

Uno de ellos sería que comprobaras en cada entrada que:

1: El asiento no está ocupado
2: Que hay asientos libres

Si contiene un 0 está libre, en otro caso, no lo está. El comprobar si esta o no libre lo puedes hacer o bien con un bucle que recorra desde el primer al último asiento y devuelva "true" si hay libres (si alguno es 0) y false si no, y así lo miras.

Otra sería un contador que incrementaras en cada reserva en cada clase, cuando ese contador llegue al tope no quedan reservas.
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

crack81

Te dejo mi verision del programa en las pruebas que le hize funciona bien, te muestra los lugares vacios por clase y si escoges alguna no ya reservado te muestra que esta lleno

checalo espero te ayude saludos....


Código (cpp) [Seleccionar]
#include<iostream>
#include<cstdlib>
using namespace std;

void Disponibles(int *asientos,int clase){

    int i=0,f=0,asiento;
    bool vacantes=false;;
    if(clase==1){
       i=0;
       f=4;
    }
    else if(clase==2){
        i=5;
        f=9;
    }
    cout<<"\nAsientos disponibles en la clase "<<clase<<": ";
    for(;i<=f;i++){
        if(asientos[i]==0){
            cout<<i+1<<" ";
            vacantes=true;
        }
    }
    if(vacantes==false){cout<<"No hay vancantes en la clase #"<<clase<<endl; cin.get();cin.get();return;}

    cout<<"\nEscoga un asiento "<<endl;
    cout<<"===> ";
    cin>>asiento;

    if((clase==1) && (asiento>5) || (asiento<1)){cout<<"Escogio uno no valido "<<endl; cin.get(); cin.get(); return;}
    if((clase==2) && (asiento<6) || (asiento>10)){cout<<"Escogio uno no valido "<<endl; cin.get(); cin.get(); return;}

    if(asientos[asiento-1]==1 ){
        cout<<"Escogio uno no valido "<<endl;
        cin.get();
        cin.get();
    }
    else{
       asientos[asiento-1]=1;
       cout<<"Asiento #"<<asiento<<" reservado"<<endl;
       cin.get();
       cin.get();

    }
}


int main(){

    int avion[]={0,0,0,0,0,0,0,0,0,0};
    int clase;
    int asiento;

    while(true){

       cout<<"                    Sistema de reserva de Vuelos"<<endl;
       cout<<"Digite 1 para primera clase"<<endl;
       cout<<"Digite 2 para segunda clase"<<endl;
       cout<<"Digite 3 para salir "<<endl;
       cout<<"===> ";
       cin>>clase;

       if(clase==1){Disponibles((int*)avion,1);}
       else if(clase==2){Disponibles((int*)avion,2);}
       else if(clase==3){break;}

       system("cls");
    }

    cout<<"Programa finalizado"<<endl;

cin.get();
cin.get();
return 0;}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

Ja_90

Muchas gracias por sus respuestas....
crack81 gracias por esa muestra pero lo que verdaderamente necesito es
hasta ahi el programa pide 10 veces la entrada o la asignacion de los puestos pero no logro ver como hacer para que cuando ya no hallan puestos disponibles el programa pregunte si desea un puesto en la otra clase y si la respuesta es SI que lo asigne... Si alguien me puede guiar se lo agradeceria.
:D  ::::Ja_90::::   :D

eferion

Cita de: Ja_90 en 15 Febrero 2015, 22:02 PM
no logro ver como hacer para que cuando ya no hallan puestos disponibles el programa pregunte si desea un puesto en la otra clase y si la respuesta es SI que lo asigne

Código (cpp) [Seleccionar]
if(vacantes==false){cout<<"No hay vancantes en la clase #"<<clase<<endl; cin.get();cin.get();return;}

Ese if se ejecuta cuando no hay asientos en la clase seleccionada... solo tienes que poner ahí la lógica para que pregunte por un puesto en la nueva clase.

Un saludo.

Ja_90

Este problema lo habia planteado hace algun tiempo, espero  no ser inoportuno, pero asi fue como lo resolvi, creo que funciona bastante bien...

Código (cpp) [Seleccionar]

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <cstdlib>   // system("clear")

#define TAMANIO 10

void MostrarSillas(int Silla[]);

int main() {

    int Sillas[TAMANIO] = {};
    int clase, asiento;
    int turnos = 0;
    char respuesta;

    while(true){
        cout << " \t     SISTEMA RESERVACIONES PARA AEROLINEA LA XXX  \n\n";
        cout << " Estos son los asientos del avion: \n\n";
        MostrarSillas(Sillas);
        cout << "\n ------------------------------------------------ \n";
        cout << " Por favor, digite 1 para "primera clase".\n";
        cout << " Por favor, digite 2 para "económico".\n\n";
        cout << " Su respuesta es: ";
        cin >> clase;

        if(clase == 1) {
            cout << "\n Elija un asiento del 0 al 4, gracias: ";
            cin >> asiento;

            if(Sillas[asiento] == 1){
                cout << " Desea un Asiento en 'economico' (s/n): ";
                cin >> respuesta;

                if(respuesta == 's'){
                    cout << " \n Elija un asiento del 6 al 9, gracias: ";
                    cin >> asiento;

                    if(Sillas[asiento] == 1){
                        cout << " \n Lo sentimos, no hay asientos disponibles...." << endl;
                        cout << " El proximo vuelo sale en 3 horas..." << endl;
                        break;
                    }
                    else {
                        Sillas[asiento] = 1;
                        system("clear");
                    }
                }
            }
            else {
                Sillas[asiento] = 1;
                system("clear");
            }
        }

        if(clase == 2){
            cout << " \n Elija un asiento del 5 al 9, gracias: ";
            cin >> asiento;

            if(Sillas[asiento] == 1){
                cout << " Desea un Asiento en 'primera clase' (s/n): ";
                cin >> respuesta;

                if(respuesta == 's'){
                    cout << " \n Elija un asiento del 0 al 4, gracias: ";
                    cin >> asiento;

                    if(Sillas[asiento] == 1){
                        cout << " \n Lo sentimos, no hay asientos disponibles...." << endl;
                        cout << " El proximo vuelo sale en 3 horas..." << endl;
                        break;
                    }
                    else {
                        Sillas[asiento] = 1;
                        system("clear");
                    }
                }
            }
            else {
                Sillas[asiento] = 1;
                system("clear");
            }
        }
    }
    return 0;
}

void MostrarSillas(int Silla[]) {

    for(int i=0 ; i<TAMANIO ; i++) {
        cout << " " <<  Silla[i];
    }
    cout << endl << endl;
}
:D  ::::Ja_90::::   :D