Correzione prova pratica del 18 giugno 2003
Correzione prova pratica del 18 giugno 2003
Istruzioni:
il commento iniziale rappresenta il giudizio complessivo sul programma. Nei commenti trovate:
- FIXME: segnalazione di un errore, non necessariamente sono tutti segnalati e non necessariamente sono tutti presi in considerazione
per il voto finale
- TODO: segnala l'assenza di parti di codice
- XXX: segnala qualcosa di non chiaro o inutile ai fini del codice, commenti di ordine generale, errori di battitura o suggerimenti
Il codice presentato non è necessariamente identico a quello consegnato in quanto possono essere state effettuate modifiche per
renderlo compilabile e/o per la corretta indentazione.
//XXX corretto
//autore:<SANTINI> <RICCARDO>,<119644> <STUD15>
//<18/06/03> - Esame di fondamenti di informatica I diploma Ing. Elettronica
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char string[100];
long int distanza1, altezza1, dislivello, dislivello_discesa;
long int distanza2, altezza2, dislivello_salita;
long int max_distanza1 ,max_distanza2,max_altezza1,max_altezza2;
long int min_distanza2,min_distanza1,min_altezza1,min_altezza2;
//XXX onestamente bastavano degli int anche su architetture a 16 bit
float pendanza_salita, max_salita,pendanza_discesa,max_discesa;
max_salita=0.0;
max_discesa=0.0;
FILE *fp;
dislivello_salita=0;
dislivello_discesa=0;
fp=fopen("percorso.txt","r");
fgets(string,10,fp);
sscanf(string,"%d %d",&distanza1,&altezza1); //FIXME bastava un fscanf(fp,"%d %d",&distanza1,&altezza1);
while(fgets(string,10,fp)!=NULL)
{
sscanf(string,"%d %d",&distanza2,&altezza2); //FIXME analogo a sopra (in questo caso doveva essere !=2 nel while)
dislivello=altezza2 - altezza1;
if(dislivello>0)
{
dislivello_salita=dislivello_salita + dislivello;
pendanza_salita=((float)dislivello)/(distanza2 - distanza1);
if(pendanza_salita>max_salita)
{
max_salita=pendanza_salita;
max_distanza2=distanza2;
max_distanza1=distanza1;
max_altezza1=altezza1;
max_altezza2=altezza2;
}
}
else
{
dislivello=dislivello * (-1);
//printf("pendenza=%f\n",dislivello);
dislivello_discesa+=dislivello;
pendanza_discesa= ((float)dislivello)/(distanza2 - distanza1);
//printf("pendenza=%f\n",pendanza_discesa);
if(pendanza_discesa>max_discesa)
{
max_discesa=pendanza_salita;
//printf("max_pendenza=%f\n",max_discesa);
min_distanza2=distanza2;
min_distanza1=distanza1;
min_altezza1=altezza1;
min_altezza2=altezza2;
}
}
distanza1=distanza2;
altezza1=altezza2;
}
fclose(fp);
printf("dislivello in salita=%d\n",dislivello_salita);
printf("dislivello in discesa=%d\n",dislivello_discesa);
printf("maggior pendenza in salita %d(%d) e %d(%d) metri\n",max_distanza1,max_altezza1,max_distanza2,max_altezza2);
printf("maggior pendenza in discesa %d(%d) e %d(%d) metri",min_distanza1,min_altezza1,min_distanza2,min_altezza2);
//XXX un '\n' non guastava...
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT