Devo realizzare e ci ho provato un programmino in C che faccia queste cose:
Prova scritta di programmazione (13 gennaio 2010)
Realizzare un programma in linguaggio C per calcolare le statistiche relative alla puntualit` di una serie di voli a aerei.
Il programma elabora un file di testo, il cui nome e passato come primo parametro sulla linea di comando, che contiene i dati dei voli da considerare. Tale file contiene un numero imprecisato (ma certamente elevatissimo) di linee, ciascuna delle quali e composta da 3 campi: il primo campo e un codice alfanumerico (di 6 caratteri) che identifica il volo, mentre il secondo e terzo campo identificano rispettivamente l’orario di atterraggio previsto e quello effettivo, entrambi nella forma HH:MM.
Si considerano come regolari tutti i voli il cui atterraggio e avvenuto con un ritardo non superiore ad un numero di minuti pari a RMAX. Questo valore e impostato per default a 5 ma pu` essere modificato specificando il suo valore come secondo parametro sulla linea di comando.
Il programma deve calcolare e scrivere nel file le seguenti informazioni:
• la percentuale di puntualità , calcolata come numero di voli regolari rispetto al totale dei voli esaminati;
• il ritardo massimo, espresso in minuti;
• la sigla del volo che ha riportato tale ritardo massimo.
Esempio. Supponiamo che il programma si chiami volstat.c e che il file 'voli.txt' contenga le seguenti
linee:
IX0034 09:37 09:39
BZ6969 20:40 21:35
WA0001 13:00 12:57
WA1009 17:03 17:08
Attivando il programma con la seguente linea di comando:
(e quindi con RMAX pari a 5 minuti) il programma dovrà creare il file 'stat.txt' col seguente contenuto:
puntualita’ = 75.0%
ritardo massimo = 55 minuti
volo ritardo massimo = BZ6969
Se invece il programma venisse attivato col comando:
allora RMAX varrebbe 3 minuti ed il file 'stat.txt' dovrà contenere:
puntualita’ = 50.0%
ritardo massimo = 55 minuti
volo ritardo massimo = BZ6969
ecco il programma che ho scritto:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RMAX 5
#define STAT "stat.txt"
#define MAXRIGA 127+1
#define VOLO 6+1
int main(int argc, char *argv[])
{
FILE *inDati;
FILE *inStat;
char riga[MAXRIGA], volo[VOLO], vrit[VOLO];
int hprev, heff, mprev, meff;
int ritarmax=0;
double puntual=0;
double ritardo=0;
int nvolo=0;
int nritardo=0;
int tardissimo=0;
/*controllo argomenti*/
if ((argc<2) || (argc>3))
{
printf("ERRORE: numero argomenti errato.\n");
printf("\n");
printf("USO: <%s nomefile.txt>\n", argv[0]);
printf(" oppure\n");
printf(" <%s nomefile.txt minuti>\n", argv[0]);
exit(1);
}
if ((inDati=fopen(argv[0],"r"))==NULL)
{
printf("ERRORE: il file %s è corrotto o non esiste.\n", argv[1]);
exit(1);
}
if (argc==2)
ritarmax=RMAX;
else if (argc==3)
{
if ((sscanf(argv[1],"%d",&ritarmax))!=1)
{
printf("ERRORE: minuti di ritardo %s non valido.",argv[1]);
exit(0);
}
}
/*leggo il file ed elaboro i dati*/
while (fgets(riga,MAXRIGA,inDati)!=NULL)
{
sscanf(riga,"%s %d:%d %d:%d",volo, &hprev, &mprev, &heff, &meff);
if ((hprev==23) && (heff==00))
heff=24;
if ((hprev==00) && (heff==23))
hprev=24;
ritardo = (((heff*60)+meff)-((hprev*60)+mprev));
if ((int)ritardo>ritarmax)
++nritardo;
if (tardissimo<(int)ritardo)
{
tardissimo=(int)ritardo;
strcpy(vrit,volo);/*memorizzo il codice del volo con ritado massimo */
}
++nvolo;
}
/*chiudo file dati*/
if (fclose(inDati)!=0)
{
printf("ERRORE: impossibile chiudere il file %s", argv[1]);
exit(1);
}
puntual=(((double)nritardo)/((double)nvolo))*100;
/*apro file statistiche*/
if ((inStat=fopen(STAT,"w"))==NULL)
{
printf("ERRORE: il file %s è corrotto o non esiste.\n", STAT);
exit(1);
}
/*scrivo le stat richieste*/
/*finchè non vedo che funziona scrivo a video*/
printf("puntualità = %f%%\n",puntual);
printf("ritardo massimo = %d minuti\n",tardissimo);
printf("volo ritardo massimo = %s\n",vrit);
/*chiudo file statistiche*/
if (fclose(inStat)!=0)
{
printf("ERRORE: impossibile chiudere il file %s", argv[1]);
exit(1);
}
return (0);
}due-desktop:~/C_program/Tes13gen2010$ ./volstat voli.txt
puntualità = 17803.289863%
ritardo massimo = 1946186866 minuti
volo ritardo massimo = �Y
gT��bss_start
le ho già provate tutte..Sicuramente sarà una stupidaggine che non riesco a vedere
help me
