04.06.2008 | 22:12:22
immagine
Ing. Emanuele Scapin

C, es1, correzione compito della classe 4D del 21 Ottobre 2015, gestione array di voli.
  •  

  • Definizione della struct.

            typedef struct volo {
                char nome[20];
                char cognome[20];
                char data[16];
                char codice[10];
                int classe; // 1=first, 2=business, 3=economy
                char posto[4];  
            } t_volo;
            
  • Funzione per contare posti prenotati (checkin con posto a sedere).

            int nonprenotati(t_volo v[], int n) {
                int num = 0;
    
                int i = 0;
                for(i=0; i<n; i++) {
                    if (strcmp(v[i].posto,"") == 0) {
                        num++;
                    }
                }
    
                return num;
            } 
            
  • Procedura per l'ordinamento di una copia dell'array.

            void ordinaprenotazioni(t_volo v[], int n, t_volo p[], int *m) {
                int i,j;
    
                *m=n;
                for(i=0; i<n; i++) {
                    p[i] = v[i];
                }   
    
                for(i=0; i<n-1; i++) {
                    for(j=i+1; j<n; j++) {
                        // scambio se non ordinati
                        if (p[i].classe > p[j].classe) {
                            t_volo app = p[i];
                            p[i] = p[j];
                            p[j] = app;
                        }
                    }
                }
            }
            
  • Procedura per esportare l'array su un file binario.

            void esporta(char *nomefile, t_volo v[], int n) {
                if (strlen(nomefile) > 0) { 
                    FILE *f;
                    f = fopen(nomefile, "wb");
                    if (f != NULL) {
                        int i;
                        for(i=0; i<n; i++) {
                            fwrite(&v[i], sizeof(t_volo), 1, f);
                        }
                    }
                    fclose(f);
                }
            }
            
  • Procedura per importare l'array da un file di testo.
    Si utilizzi %[^;] anzichè %s per leggere una stringa fino al primo ; trovato, altrimenti si leggerebbe una stringa qualsiasi, quindi l'intera riga.

            void importa(char *nomefile, t_volo v[], int *n) {
                if (strlen(nomefile) > 0) { 
                    FILE *f;
                    f = fopen(nomefile, "r");
                    if (f != NULL) {
                        int i = 0;
                        while(fscanf(f, "%[^;];%[^;];%[^;];%[^;];%d;%[^;];\n", 
                                    v[i].nome, v[i].cognome, 
                                    v[i].data, v[i].codice,
                                    &v[i].classe, v[i].posto) != EOF) {
    
                            i++;
                        }
                        *n = i;
                    }
                    fclose(f);
                }    
            }
            

© Emanuele Scapin 2009-2015

 

Valid HTML 4.01! Valid CSS!