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