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);
}
}