Prenotazione accettata/rifiutata..perchè non funziona?

di il
19 risposte

Prenotazione accettata/rifiutata..perchè non funziona?

Il mio programma gestisce le prenotazioni di 3 settori all'interno di un teatro,e mi dovrebbe visualizzare un messaggio di prenotazione accettata o rifiutata in base ai posti disponibili..il problema è che se per esempio voglio fare 3 prenotazioni, la prima va bene mentre le altre 2 qualsiasi cosa digito mi dice "prenotazione rifiutata" anche se non è vero...questo è il codice

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

typedef struct{
int numposti;
int numerazione;
int codice;
char settore[20];
int postirichiesti;
int postiliberi;
}settore_t;
settore_t sett[MAX];


void inserisci (settore_t sett[], int dim);

int main (){
int n;
printf("Quanti settori vuoi inserire in tabella?\n)");
scanf("%i", &n);
inserisci(sett,n);

system("pause");
return 0;
}

void inserisci(settore_t sett[], int dim){
int i;
int num;
for(i=0;i<dim;++i){
printf("Inserire nome del settore(SETTOREI, SETTOREII, SETTOREIII ECC...\n\n)");
scanf("%s", sett.settore);
printf("Inserisci numero totale dei posti:\n");
scanf("%i", &sett.numposti);
printf("Inserisci numero totale dei posti liberi:\n");
scanf("%i", &sett.postiliberi);

printf("Quante prenotazioni vuoi fare?\n");
scanf("%i", &num);


printf("PRENOTAZIONE :\n");
for(i=0; i<num; i++){

printf("In quale settore vuoi prenotare?(scegli tra SETTOREI, II o III)\n");
scanf("%s", sett.settore);
printf("Quanti biglietti vuoi prenotare?\n");
scanf("%i", &sett.postirichiesti);

if(sett.postiliberi < sett.postirichiesti){

printf("PRENOTAZIONE RIFIUTATA\n");}
if(sett.postiliberi >= sett.postirichiesti)
{

printf("PRENOTAZIONE ACCETTATA\n");
printf("SETTORE : %I\n\n", sett.settore);
}
} }
}

19 Risposte

  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Ciao fabiana, intanto ti consiglio di utilizzare i tag
     e l'indentazione per rendere più leggibile il tuo codice.
    Ho dato solo un'occhiata veloce al tuo codice, ma c'è una cosa che non capisco: se i settori sono 3, perché crei un'array di MAX oggetti 'settore_t'?
    Tralasciando le variabili 'numerazione' e 'codice' che immagino utilizzerai altrove nel tuo codice, vedo qualche altro errore:
     - se utilizzi MAX come numero limite, allora devi anche controllare che il numero 'n' inserito dall'utente sia effettivamente minore di MAX
     - ciò che fai nel secondo ciclo for all'interno della funzione inserisci è sbagliato. Sovrascrivi sett[i].settore che avevi definito all'interno del ciclo precedente; la variabile postirichiesti è inutile all'interno della struttura settore_t: basta avere un intero che crei e gestisci localmente nella funzione
     - inoltre, una volta effettuata la prenotazione, dovresti sottrarre il numero di posti prenotati dal numero complessivo di posti disponibili.
    Infine, ti sconsiglio di utilizzare la stessa variabile (nel tuo caso 'i' per cicli nested, ovvero l'uno dentro l'altro).
    Utilizza il tag code, e facci sapere se hai risolto il problema  f1
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Ciao e grazie per la tua risposta..ho risolto il mio problema finalmente!
    scusa se ti faccio ancora delle domande stupide ma sono alle prime armi e sto studiando tutto da sola...devo fare il minimo e il massimo dei posti da prenotare, mi sai dire come fare?
    io ho fatto questo ma il massimo mi risulta sempre l'ultimo che digito...

    void max(prenotazione_t pre[], int dim){
    int i,max;
    max = pre[0].postirichiesti;
    for(i=0; i<dim; i++){
    if(max < pre.postirichiesti){
    max= pre.postirichiesti;

    }
    }
    printf("IL NUMERO MASSIMO DI POSTI RICHIESTI E: %i\n", max);
    }
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Quel codice mi sembra sostanzialmente corretto, credo che l'errore sa da qualche altra parte. Sei sicura che l'array venga popolato correttamente?
    Un piccolo consiglio: nel tuo caso, dato che la quantità di memoria in gioco è minima, ciò può essere ininfluente; tuttavia, dichiarando [code[void inserisci (settore_t sett[], int dim);[/code], passi alla funzione una copia dell'array, e non l'array stesso. Se avrai a che fare con oggetti più grandi e numerosi, ciò porta ad uno spreco di memoria evitabile: è consigliabile in questi casi utilizzare puntatori o references.
    Mi raccomando, utilizza i tag
     e l'indentazione quando posti il codice sul forum.
    Facci sapere se fai progressi  f28
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Non riesco a risolvere il problema del massimo, penso che il codice sia giusto,perchè per altri programmi fatti in precedenza funziona..non so dove sia l'errore
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    A questo punto posta il codice completo e compilabile per controllarlo (usa i tag CODE per postarlo nel forum )
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Questo è il codice
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 100
    
    typedef struct{
    	int numposti;
    	int codice;
    	char settore[20];
    	int postirichiesti;
    	int postiliberi;
    }settore_t;
    settore_t sett[MAX];
    
    
    void inserisci (settore_t sett[], int dim);
    void massimo(settore_t sett[], int dim);
    
    int main ()
    {
    	int n;
    	printf("Quanti settori vuoi inserire in tabella?\n)");
    	scanf("%i", &n);
            inserisci(sett,n);
    	massimo(sett, n);
        system("pause");
        return 0;
    }
    
    void inserisci(settore_t sett[], int dim)
    {
    	int i,j;
    	int num;
    	char settore[20];
        for(i=0;i<dim;++i)
    	{
         	printf("Inserire nome del settore(SETTOREI, SETTOREII, SETTOREIII ECC...\n\n)");	
    		scanf("%s", sett[i].settore);
    		printf("Inserisci numero totale dei posti:\n");
    		scanf("%i", &sett[i].numposti);
    		printf("Inserisci numero totale dei posti liberi:\n");
    		scanf("%i", &sett[i].postiliberi);
    		
    		printf("Quante prenotazioni vuoi effettuare?\n");
    		scanf("%i", &num);
    	
    
    		printf("PRENOTAZIONE :\n");
    		for(j=0; j<num; j++)
    		{
    	
    			printf("In quale settore vuoi prenotare?(scegli tra SETTOREI, II o III)\n");
    			scanf("%s", settore);
    			printf("Quanti biglietti vuoi prenotare?\n");
    			scanf("%i", &sett[i].postirichiesti);
    		
    			if(sett[i].postiliberi < sett[i].postirichiesti)
    			{
    		
    				printf("PRENOTAZIONE RIFIUTATA\n");
    			}
    				if(sett[i].postiliberi >= sett[i].postirichiesti)
    		    	{
    			
    					printf("PRENOTAZIONE ACCETTATA\n");
    					printf("SETTORE : %I\n\n", sett[i].settore);
    					sett[i].postiliberi= (sett[i].postiliberi- sett[i].postirichiesti);
    		        }
    	    }		 
        }
    }
    		
    
    void massimo(settore_t sett[], int dim)
    {
    	int i, max=0;
    	for(i=0; i<dim; i++)
    	{
    		if(max< sett[i].postirichiesti)
    		{
    			max = sett[i].postirichiesti;
            }
    	} 	
    	   printf("IL MASSIMO E' : %i", max);
    }
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Parli di "massimo dei posti da prenotare" ma nella funzione massimo utilizzi il campo

    postirichiesti
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Non so se magari mi sono spiegata male io, ma io devo visualizzare,tra tutte le varie prenotazioni quella con il massimo numero di posti richiesti da prenotare(indipendentemente se la prenotazione è accettata o rifiutata)....
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Ok, allora per capirci meglio, quando esegui il programma quali dati inserisci e cosa ottieni?

    Fai un esempio concreto di utilizzo con dei dati che inserisci e con che cosa vorresti ottenere dalla funzione massimo.
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Io dopo avere inserito tutti i dati( nome del settore, posti disponibili, posti occupati ecc) chiedo all'utente "Quante prenotazioni vuoi effettuare?"
    L'utente digita per esempio 2 prenotazioni...esempio:
    1° prenotazione : 5 posti richiesti da prenotare
    2° prenotazione : 3 posti richiesti da prenotare

    A questo punto vorrei visualizzare : "IL NUMERO MASSIMO DI POSTI RICHIESTI E': 5"
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Ma le prenotazioni che fai sono nello stesso settore. Se dici 2 prenotazioni il valore 5 va nella struttura e dopo ci va il valore 3 (e il 5 viene perso). Quando chiami la funzione, quella lavorerà sul 3 e non sul 5 che è perso.
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Cosa mi consigli di fare? dovrei salvare il valore 5 altrove ? Come faccio per salvare tutti le prenotazioni in modo da calcolare il massimo?
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Hai due strade ... o salvi il massimo dentro la struttura in un elemento apposito (scelta semplice) oppure devi prevedere un vettore di prenotazioni (che comunque deve essere limitato) sempre dentro la struttura.
  • Re: Prenotazione accettata/rifiutata..perchè non funziona?

    Mi sa che non ne sono capace
Devi accedere o registrarti per scrivere nel forum
19 risposte