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 corretto
//autore:<SANTINI> <RICCARDO>,<119644> <STUD15>

//<18/06/03> - Esame di fondamenti di informatica I diploma Ing. Elettronica


#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<math.h>



int main()
{
  char string[100];

  long int distanza1, altezza1, dislivello, dislivello_discesa;
  long int distanza2, altezza2, dislivello_salita;
  long int max_distanza1 ,max_distanza2,max_altezza1,max_altezza2;
  long int min_distanza2,min_distanza1,min_altezza1,min_altezza2; 
  //XXX onestamente bastavano degli int anche su architetture a 16 bit

  float pendanza_salita, max_salita,pendanza_discesa,max_discesa;

  max_salita=0.0;
  max_discesa=0.0; 

  FILE *fp;
  dislivello_salita=0;
  dislivello_discesa=0;

  fp=fopen("percorso.txt","r");

  fgets(string,10,fp);
  sscanf(string,"%d %d",&distanza1,&altezza1); //FIXME bastava un fscanf(fp,"%d %d",&distanza1,&altezza1);


  while(fgets(string,10,fp)!=NULL)
  {
    sscanf(string,"%d %d",&distanza2,&altezza2);  //FIXME analogo a sopra (in questo caso doveva essere !=2 nel while)


    dislivello=altezza2 - altezza1;

    if(dislivello>0)
    {
      dislivello_salita=dislivello_salita + dislivello;        
      pendanza_salita=((float)dislivello)/(distanza2 - distanza1);
      if(pendanza_salita>max_salita)
      {
  max_salita=pendanza_salita;
  max_distanza2=distanza2;
  max_distanza1=distanza1;
  max_altezza1=altezza1;
  max_altezza2=altezza2;
      }
    }
    else
    {
      dislivello=dislivello * (-1);
      //printf("pendenza=%f\n",dislivello);

      dislivello_discesa+=dislivello;
      pendanza_discesa= ((float)dislivello)/(distanza2 - distanza1);
      //printf("pendenza=%f\n",pendanza_discesa);

      if(pendanza_discesa>max_discesa)
      {
  max_discesa=pendanza_salita;
  //printf("max_pendenza=%f\n",max_discesa);

  min_distanza2=distanza2;
  min_distanza1=distanza1;
  min_altezza1=altezza1;
  min_altezza2=altezza2;
      }

    }

    distanza1=distanza2;
    altezza1=altezza2;                
  }
  fclose(fp);

  printf("dislivello in salita=%d\n",dislivello_salita);
  printf("dislivello in discesa=%d\n",dislivello_discesa);
  printf("maggior pendenza in salita %d(%d) e  %d(%d) metri\n",max_distanza1,max_altezza1,max_distanza2,max_altezza2); 
  printf("maggior pendenza in discesa %d(%d) e  %d(%d) metri",min_distanza1,min_altezza1,min_distanza2,min_altezza2);
  //XXX un '\n' non guastava...

}








Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a bertozzi@CE.UniPR.IT