Correzione prova pratica del 3 maggio 2003

Correzione prova pratica del 3 maggio 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 legge per riga ma poi considera solo la prima parola, qualche ingenuita'
// esame di Fondamenti di Informatica, corso di laurea in Ingegneria Informatica (teledidattico)

// Cognome: Garcia 

// Nome: Martin 

// Matricola: 156001

// Postazione: stud06

// data:03/05/2003  

// e-mail: mgarcia@mundodiarios.net


#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main (int argc, char *argv[])
{
  FILE *fp;
  char filename[80];
  char buffer[80];
  char seac;
  char word[80];

  long int sea_len_max=0, sea_len_min=0;
  long int nwords = 0;
  const int  NEWLINE = '\n';
  int  i;

  /* rilevamento argomenti parametri */
  switch (argc - 1)
  {
    case (0):
      printf("Nome del file assente come parametro\n");
      return 1;
    case (1):
      break;
    default:
      printf("Troppi parametri\n");
      return 1;
  }

  strcpy(filename,argv[1]);

  /* apertura del file */
  fp = fopen(filename,"rb"); // XXX il b e' tutto sommato inutile

  if (fp == NULL)
  {
    printf("Impossibile aprire il file %s\n",filename);
    return 1;
  }

  /* richiesta all'utente */
  printf("Immettere un carattere da ricercare: ");
  scanf("%c", &seac);
  /* controllo validita' carattere */
  if (!isalpha(seac)){
    printf("Carattere non alfabetico\n");
    return 1; // XXX era piu' elegante ripetere la richiesta

  }

  /* ciclo di scansione delle parole */
  while (fgets(buffer, 80, fp)!=NULL)
  {
    for(i=0; i < strlen(buffer); i++)
    {
      if(isspace(buffer[i])) //FIXME al limite if(!isalhpa(buffer[i]))

  break;  
      word[i]=buffer[i];        
    }      

    // TODO il ciclo sopra mi isola la prima parola. E le altre???


    word[i]='\0';

    if(strchr(word, (int)seac)){
      printf("%s\n", word);
      i=strlen(word);
      if(i>sea_len_max){
  sea_len_max=i;
      }else{
  if (sea_len_min<i) //FIXME visto che sea_len_min viene inizializzato a zero cio' non capita

    sea_len_min=i;
      }
      ++nwords;  
    }
  }

  fclose(fp);

  printf("%ld Parole, lunghezza massima: %d, lunghezza minima: %d", nwords,sea_len_max, sea_len_min);
  return 0;
}



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