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 il programma funziona, ma dimostra ampiamente di non aver studiato
//<SEMROV><TOMMASO><143450><STUD19>
//<18/6/03>
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int main()
{
char riga[50];
char metri[10];
char dislivello[10];
char *dato;
int m=0, dis=0, old_m=0, old_dis=0;
int estremosx_sal=0, estremodx_sal=0, estremosx_disc=0, estremodx_disc=0;
int dissx_sal=0, disdx_sal=0, dissx_disc=0, disdx_disc=0;
float pendenzaup=0, max_pendenzaup=0, pendenzadown=0, max_pendenzadown=0;
int dis_sal=0, dis_disc=0;
ifstream percorso("percorso.txt");
if (!percorso)
{
cout<<"Impossibile aprire il file\n";
exit(0); //XXX di norma il codice di uscita nullo si utilizza quando il programma finisce senza errori
}
while (percorso.getline(riga, 50, '\n')) //FIXME il '\n' si poteva omettere
{
dato=strtok(riga, " ");
ofstream temp("tmp.txt"); //FIXME un file di appoggio non era richiesto e decisamente per un problema di questa banalita' non serviva
while (dato)
{
temp<<dato<<"\n"; //XXX ???
dato=strtok(NULL, " ");
}
temp.close();
ifstream temp2("tmp.txt"); //FIXME mi faccia capire meglio: lei legge una riga dal file, la spezza con gli spazi e la salva in
// un secondo file che poi chiude, riapre e rilegge? Ma dico io il costrutto >> lo conosce?
temp2.getline(metri, 10);
temp2.getline(dislivello, 10);
temp2.close();
m=atoi(metri);
dis=atoi(dislivello);
//FIXME in c++ un file asci una cui riga contiene due interi si legge cosi':
// file >> intero1 >> intero2; tutte le altre soluzioni sono da evitare
cout<<"metri: "<<m<<" dislivello: "<<dis<<"\n";
if (dis>old_dis)
{
if (m!=0) //FIXME si poteva leggere i primi due valori al di fuori del ciclo
{
dis_sal+=(dis-old_dis);
float diff11=(dis-old_dis);
float diff22=(m-old_m);
pendenzaup=(diff11/diff22);
if (pendenzaup>max_pendenzaup)
max_pendenzaup=pendenzaup;
estremosx_sal=old_m;
estremodx_sal=m;
dissx_sal=old_dis;
disdx_sal=dis;
}
}
if (dis<old_dis)
{
if (m!=0)
{
dis_disc+=(old_dis-dis);
float diff1=(old_dis-dis);
float diff2=(m-old_m);
pendenzadown=(diff1/diff2);
if (pendenzadown>max_pendenzadown)
max_pendenzadown=pendenzadown;
estremosx_disc=old_m;
estremodx_disc=m;
dissx_disc=old_dis;
disdx_disc=dis;
}
}
old_m=m;
old_dis=dis;
}
percorso.close();
cout<<"dislivello in salita: "<<dis_sal<<" metri\n";
cout<<"dislivello in discesa: "<<dis_disc<<" metri\n";
cout<<"maggior pendenza in salita: "<<max_pendenzaup<<" tra "<<estremosx_sal<<" ("<<dissx_sal<<") e "<<estremodx_sal<<" ("<<disdx_sal<<")\n";
cout<<"maggior pendenza in discesa: "<<max_pendenzadown<<" tra "<<estremosx_disc<<" ("<<dissx_disc<<") e "<<estremodx_disc<<" ("<<disdx_disc<<")\n";
return 0;
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT