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