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 gravi lacune di linguaggio e problem solving
//FIXME mancano nome, cognome e gli altri dati
# include <stdio.h>
# include <stdlib.h>
# define NUM 20
main() {
int spazio=' ';
int n;
int i=0;
int max_salita=0;
int max_discesa=0;
int min_salita=99999;
int min_discesa=99999;
int percorso1=0;
int percorso2=0;
int percorso3=0;
int percorso4=0;
int somma_dislivello=0;
int salita=0;
int discesa=0;
/*le 2 sotto sono array d'alloggio in cui
metto il percorso ed il dislivello appena letti*/
int appoggiopercorso[100];
int appoggiodislivello[100]; //FIXME non serviva memorizzare tutto il percorso, anche
// perche' cosi' lei e' obbligato a mettere un numero massimo di tappe
int buf[NUM];
FILE *ptr;
/*apro e leggo, riga per riga, il file*/
ptr=fopen("percorso.txt","r");
do {
n=fscanf(ptr,"%d %d\n",buf); //FIXME se tenta di leggere due interi (%d %d) lei deve metterli in *2* variabili
// e comunque buf e' un array di int
// //FIXME se n!=2 dovrebbe uscire dal ciclo con un break; (infatti si poteva usare un while(1)
/*quando la lettura del file arriva allo spazio
'travaso' quella parte di buffer,gia' letta,in appoggiopercorso*/
if (buf==' ') { //FIXME buf cosi' da solo e' un int* e quindi non sara' mai ==' '
appoggiopercorso[i]=buf;
i=i+1; }
/*esco dall'if e leggo la parte successiva del buffer*/
/*'travaso la 2a parte del buffer in appoggiodislivello*/
appoggiodislivello[i]=buf;
i=i+1;
} while (n>0); //FIXME appena si accorge che non e' riuscito a leggere due interi deve uscire, non dopo tutte le operazioni
/*calcolo la max discesa e la max salita*/
/*e prendo nota dei rispettivi percorsi*/
for (i=0;i<=100;i++) {
if (i==i*2) { /*cioe' se n e' pari*/
if (appoggiodislivello[i]>max_discesa) {
max_discesa=appoggiodislivello[i];
percorso1=appoggiopercorso[i]; }
else if (appoggiodislivello[i]<min_discesa) {
min_discesa=appoggiodislivello[i];
percorso2=appoggiopercorso[i]; }
}
else {
if (appoggiodislivello[i]>max_salita) {
max_salita=appoggiodislivello[i];
percorso3=appoggiopercorso[i]; }
else if (appoggiodislivello[i]<min_discesa) {
min_discesa=appoggiodislivello[i];
percorso4=appoggiopercorso[i]; }
}
}
/*calcolo differenza max in discesa e salita*/
discesa=max_discesa-min_discesa;
salita=max_salita-min_salita;
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT