Ciao a tutti, mi chiamo Pir e sono nuovo in questo forum cui mi sono iscritto per migliorare le mie "competenze" informatiche di programmazione e a tal proposito inizio col chiedervi aiuto
Premettendo che al liceo non ho studiato il linguaggio C perchè il nostro docente ha preferito virare su altri linguaggi più recenti e quindi (dovendolo studiare all'Università) ho provveduto ad arrangiarmi da autodidatta(con il corso siamo ancora ai vettori -abbiamo iniziato a ottobre-) ,ma ci sono delle cose che non ho idea di come risolvere.
Ho visto alcuni temi d'esame del mio docente e ho provveduto a risolverli, tuttavia sono incappato in uno che mi ha dato dei guai.
Il testo dice in sostanza che in un file ci sono delle camere d'hotel ed ogni riga contiene il <numero camera>, <numero di persone ospitabili> e un numero <1/0> (1 se occupata, 0 se libera). Da linea di comando sono dati dei parametri di questo tipo " 3 2 1 2" che significano che si vogliono prenotare 3 camere da 2,1,2 persone oppure 4 3 3 1 (4 camere da 3,3,1 persone). Si chiede di creare un programma che esegua queste sistemazioni tenendo a mente che le camere ospitano un numero persone pari al secondo numero della riga (in altri termini una camera per 2 persone non va bene per 1 persona) .
Ora, io ho buttato giù il mio codice ma quando avevo quasi finito mi sono accorto del fatto che potrebbe accadere che una camera venga assegnata due volte. Ossia se avessi un file nel quale la prima riga è
1 3 0 (cioè camera n1, 3 persone ospitabili, libera) facendo il classico ciclo while(fscanf()!=EOF) ecc la camera 1 potrebbe essere assegnata due volte se io mettessi in input 4 3 3 1. Come risolvere questo? ossia come fare in modo che la camera dopo essere stata assegnata non venga più considerata? Avevo pensato di aggiornare la lista ad ogni lettura cambiando lo 0 con 1 ma non ho idea di come fare.
L'altro problema è che (dato che l'output deve essere il numero della camera e il numero di persone assegnate) io avevo pensato di usare due vettori ma non ho idea poi di come confrontare la loro dimensione (che sarà sempre uguale contenendo uno il numero della camera e l'altro quello degli ospitati) con il numero di camere richieste.
Ossia potrebbe accadere che io voglia 3 camere di 2 , 1 ,1 persone e magari ce ne sono 2 che soddisfano la prima richiesta e con cui riempio i miei vettori ma non per la terza . Come faccio?
Vi mostro il codice fino a dove ho scritto perchè poi non ho idea di cosa fare per quei 2 problemi , sicuramente ci saranno errori (magari anche gravi) spero possiate perdonarmi. studio C da soli 2 mesi
#include <stdio.h> #include <stdlib.h> #include <string.h> #define d 1000 int main(int argc, const char* argv[]) { FILE* fp; int ncam_f, noccup_f, stato_f; //variabili di lettura da file int i,parametri[d],n,flag; //non so a priori quante camere e quanti ospitanti richiederà l'utente int vett_r[d], noccup_r[d]; //struttura dati per il risultato printf("camere e persone: "); scanf("%d%*c", &n); //lettura del numero camere richieste (dimensione del mio vettore parametri) for(i=0;i<n;i++){ scanf("%d%*c", ¶metri[i]); //riempimento parametri } fp=fopen("camere1.txt", "r"); if (fp==NULL){ printf("file non aperto correttamente"); return -1; } for(i=0;i<n;i++){ //ogni giro (pari al numero di camere che mi servono) confronto il parametro con tutte le righe e mi fermo qundo ne trovo una flag=1; while(fscanf(fp, "%d %d %d", &ncam_f, &noccup_f, &stato_f ) !=EOF && flag==1){ //finchè ho righe da leggere if(noccup_f == parametri[i] && stato_f==0){ //cioè se combaciano gli ospiti possibili e la camera è libera vett_r[i]=ncam_f; noccup_r[i]=noccup_f ; flag=0; }//chiuso while } fclose(fp);