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: 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