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 funzionante, ma dimostra carenze di linguaggio
// <GRASSI> <CLAUDIO> <150718> <STUD12> e-mail(grassi@datek.it)
// 18/06/2003 - Esame di fondamenti di informatica A
// Corso di laurea in ingegneria elettronica
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <limits.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <fstream.h>
#include <iomanip.h>
char c[31];
char testo[100];
float metri1,altezza1,metri2,altezza2; //FIXME float non necessari
float disls = 0,disld = 0; //FIXME float non necessari
float pendenza,pendenzas = 0,pendenzad = 0;
float m1s,h1s,m2s,h2s; //FIXME float non necessari
float m1d,h1d,m2d,h2d; //FIXME float non necessari
int main (void)
{
cout << "Introduci il nome del file in cui sono contenuti i numeri" << endl;
cout << endl;
cout << "File: ";
cin >> c; // FIXME il nome del file era gia' dato
ifstream file_num (strcat(c,".txt")); //Definisco il file inserito dall utente e aggiungo l'estensione ".txt"
//FIXME allora doveva specificare che non si doveva inserire l'estensione del file
//Apro il file che serve al programma per la conversione
//Mi occorre anche per leggere le righe successive
file_num.getline(testo,100,' '); //Leggo l altezza e i metri
metri1 = atof(testo);
file_num.getline(testo,100,char(10)); //FIXME char(10) non si capisce '\n' sarebbe stato piu' chiaro ma comunque bastava omettere il terzo argomento
altezza1 = atof(testo);
//FIXME tutte le 4 righe e relative istruzioni viste sopra erano banalmente sostituibili con:
// file_num >> metri1 >> altezza1;
while(1)//Ciclo di lettura dei numeri
{
file_num.getline(testo,100,' '); //Leggo l altezza e i metri
metri2 = atol(testo);
file_num.getline(testo,100,char(10));
altezza2 = atol(testo);
//FIXME come sopra, e a parte cio' se proprio era convinto di questo poteva usare una funzione
if(!strcmp(testo,""))
{
break; //FIXME se qui esco dal ciclo dubito che l'istruzione successiva venga eseguita
file_num.close();//Chiudo i file che ho aperto
}
if ( (altezza2 - altezza1) > 0) //Controllo se sono in salita o in discesa
{
disls = disls + altezza2 - altezza1;//Calcolo il dislivello in salita
pendenza = (altezza2 - altezza1)/(metri2 - metri1);//Calcolo la pendenza
if (pendenzas < pendenza)//Salvo i metri e il dislivello in
//cui la pendenza e maggiore in salita
{
m1s = metri1;
m2s = metri2;
h1s = altezza1;
h2s = altezza2;
pendenzas = pendenza;
}
}
else
{
disld = disld + altezza1 - altezza2;//Calcolo il dislivello in discesa
pendenza = (altezza1 - altezza2)/(metri2 - metri1);
if (pendenzad < pendenza)//Salvo i metri e il dislivello in
//cui la pendenza e maggiore in discesa
{
m1d = metri2;
m2d = metri1;
h1d = altezza2;
h2d = altezza1;
pendenzad = pendenza;
}
}
altezza1 = altezza2;//Inverto le variabili x potere
//fare la sottrazione successiva
metri1 = metri2;
}
cout << endl;//Stampo i dati ottenuti
cout << "Dislivello in salita " << disls << endl ;
cout << "Dislivello in discesa " << disld << endl ;
cout << "Maggior pendenza in salita tra " << m1s << " (" << h1s <<") " << m2s << " (" << h2s <<") "<< endl ;
cout << "Maggior pendenza in discesa tra " << m2d << " (" << h2d <<") " << m1d << " (" << h1d <<") "<< endl ;
cout << endl;
//system("PAUSE");
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT