Array c++???

di il
4 risposte

Array c++???

Ho dei problemi con questo esercizio:
Una piccola compagnia aerea ha appena acquistato un computer da dedicare al sistema di prenotazione automatica dei voli. La compagnia vi ha chiesto di programmare il sistema. Il vostro compito è scrivere un programma che assegna i posti di ogni volo dell’unico aereo posseduto dalla compagnia (10 posti in tutto). Il vostro programma dovrebbe visualizzare questo menù di opzioni:

Digitare 1 per fumatori o 2 per non fumatori:

Se la persona digita 1, il programma le assegna un posto nel reparto fumatori (posti 1-5). Se invece digita 2, il posto si troverà nel reparto non fumatori (posti 6-10). Il programma deve visualizzare una carta di imbarco che indica il numero del posto della persona e se si trova nel reparto non fumatori o fumatori, del tipo

Reparto fumatori, posto 3

Utilizzate un array per rappresentare i posti dell’aereo. Inizializzate tutti gli elementi dell’array a 0, per indicare che all’inizio tutti i posti sono vuoti. Man mano che vengono assegnati, impostate i posti occupati a 1.
Il programma, ovviamente, non deve riassegnare i posti già occupati. Quando il reparto fumatori si è riempito, chiedete al passeggero se è accettabile andare nel reparto non fumatori (e viceversa). Se sì, assegnategli un posto nell’altro reparto. Se no, visualizzate

Il prossimo volo parte tra 3 ore.
IL problema e che anche se il contaFumatori supera il 5,mi segna come "occupato" il posto 6..Potete aiutarmi ci sto uscendo pazzo con questo esercizio..Anche se sembra semplice..
#include<iostream>
using namespace std;

const int dim = 10;


void StampaArray(int aereo[],int dim)
{
   for(int i = 0;i < dim;i++)
      cout << aereo[i] << " ";
   cout << endl;
}

void TrovaPosto(int aereo[],int dim,int l,int m)
{
   bool trovato = false;
   for(int i = l; i < m; i++)
      if(aereo[i] == 0 && ! trovato)
      {
         aereo[i] = 1;
         trovato = true;
      }
}


int main()
{

   int i = 0;
   int j = dim/2;
   int m = dim;

   int aereo[dim];
   for(int i = 0;i < dim;i++)
   {
      aereo[i] = 0;
   }

   int contaFumatori = 0;
   int contaNonFumatori = 5;

   for(int i = 0; i < dim; i++)
   {
      while(contaFumatori < dim/2 && contaNonFumatori < dim)
      {
         StampaArray(aereo,dim);
         cout << "fumatori: " << contaFumatori << endl;
         cout << "non fumatori: " << contaNonFumatori << endl;


         cout << "1 per reparto fumatori,2 per non fumatori." << endl;
         int risposta;
         cin >> risposta;

         if(risposta == 1)
         {
            contaFumatori++;
            aereo[contaFumatori-1] = 1;
         }
         if(risposta == 2)
         {
            contaNonFumatori++;
            aereo[contaNonFumatori-1] = 1;
         }
      }

      if(contaFumatori >= 5)
         {
            cout << "Reparto al completo,posto in NON fumatori va bene?" << endl;
            char risposta;
            cin >> risposta;
            if(risposta == 'N')
            {
               cout << "Prossimo volo parte tra 3 ore." << endl;
                  return 0;
            }
            if(risposta == 'S')
            {
               TrovaPosto(aereo,dim,j,m);
               StampaArray(aereo,dim);
               cout << "fumatori: " << contaFumatori << endl;
               cout << "non fumatori: " << contaNonFumatori << endl;
            }
         }

      if(contaNonFumatori == 10)
         {
            cout << "Reparto al completo,posto in FUMATORI va bene?" << endl;
            char risposta;
            cin >> risposta;
            if(risposta == 'N')
            {
               cout << "Prossimo volo parte tra 3 ore." << endl;
               return 0;
            }
            if(risposta == 'S')
            {
               TrovaPosto(aereo,dim,i,j);
               StampaArray(aereo,dim);
            }

         }

      }




return 0;
}

4 Risposte

  • Re: Array c++???

    Nessuno mi da una mano?
  • Re: Array c++???

    Forse perché non hai spiegato bene il problema.

    Quali dati inserisci? In quale caso hai problemi? Esattamente cosa succede che non va?
  • Re: Array c++???

    Si inserisce 1 se si vuole il reparto fumatori,e 2 se si vuole quello non fumatori.
    Se metto 6 fumatori,li mette lo stesso,anche se i posti sono 5..e lo stesso credo succeda per i non fumatori.
  • Re: Array c++???

    L ho praticamente risolto,ho ricominciato da capo..L unica cosa e la carta d imbarco che non stampa esattamente quando si fa il cambio reparto, e il ciclo che non si arresta appena i 2 contatori sono a 5,ma si aspetta l altra iterazione,ma in linea di massima direi che va bene.Che ne dite?
    #include<iostream>
    using namespace std;
    
    const int dim = 10;
    
    
    bool libero(int aereo[],int l,int m)
    {
    	for(int i = l;i < m; i++)
    		if(aereo[i] == 0)
    			return true;
    	return false;
    }
    
    void DaiPosto(int aereo[],int l,int m)
    {
    	bool occupato = false;
    	for(int i = l;i < m; i++)
    	{
    		if(aereo[i] == 0 && !occupato)
    		{
    			aereo[i] = 1;
    			occupato = true;
    
    		}
    	}
    }
    
    int main()
    {
    	int aereo[dim] = {0,0,0,0,0,0,0,0,0,0};
    	int contaFumatori = 0;
    	int contaNonFumatori = 0;
    	while(contaFumatori <= dim/2 && contaNonFumatori <= dim/2)
    	{
    		for(int i  = 0; i < dim; i++) /// STAMPA
    			cout << aereo[i] << " ";//// ARRAY PER PROVA
    		cout << endl;
    
    		cout << "domanda" << endl;
    		int risposta;
    		cin >> risposta;
    
    		if(risposta == 1)
    		{
    			if(libero(aereo,0,dim/2))
    			{
    				DaiPosto(aereo,0,dim/2);
    				contaFumatori++;
    				cout << "Reparto fumatori,posto " << contaFumatori << endl;
    			}
    
    			else if(!libero(aereo,0,dim/2))
    				{
    				cout << "Vuoi posto in NON fumatori?" << endl;
    			char risposta;
    			cin >> risposta;
    			if(risposta == 'N')
    				{
    				cout << "Prossimo volo parte tra 3 ore" << endl;
    				return 0;
    				}
    			else if(risposta == 'S')
    			{
    				if(libero(aereo,dim/2,dim))
    				{
    					DaiPosto(aereo,dim/2,dim);
    				}
    				else
    					{
    					cout << "Reparto gia pieno.";
    					return 0;
    					}
    			}
    				}
    		}
    	if(risposta == 2)
    	{
    			if(libero(aereo,dim/2,dim))
    			{
    				DaiPosto(aereo,dim/2,dim);
    				contaNonFumatori++;
    				cout << "Reparto non fumatori,posto " << contaNonFumatori << endl;
    
    			}
    			else if(!libero(aereo,dim/2,dim))
    			{
    			cout << "Vuoi posto in reparto fumatori?" << endl;
    		char risposta;
    		cin >> risposta;
    		if(risposta == 'N')
    			{
    			cout << "Prossimo volo parte tra 3 ore" << endl;
    			return 0;
    			}
    			else if(risposta == 'S')
    			{
    			if(libero(aereo,0,dim/2))
    			{
    				DaiPosto(aereo,0,dim/2);
    			}
    			else
    				{
    				cout << "Reparto gia pieno.";
    				return 0;
    				}
    			}
    			}
    	}
    	}
    
    	return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
4 risposte