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 a parola e di conseguenza non ignora caratteri non alfabetici
//ROBERTO D'ANGELO  MATR.155962  E-MAIL ROBERTODANGEL@LIBERO.IT



#include <fstream.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAX_PAROLA 20 //lunghezza accettabile della parola

#define CAR_NULL 1  //carattere nullo


char inserisci_carattere();

int main() { //XXX main deve restituire int


  char file[40];// 40 è un valore accettabile per un nome file

  char chok;
  int cont=0,max=0,min=0; //FIXME era piu' ragionevole fissare min ad un valore molto alto

  int lungh=0;
  bool okparola;//flag di controllo aumento contatore

  // richiesta nome file

  char parola[MAX_PAROLA+CAR_NULL];
  cout<<"inserire il nome del file da leggere\n";
  cin>>file;
  // apro il file

  ifstream fin(file);
  if (!fin){

    cerr << "Errore: file input non puo' essere aperto.\n";
    exit(1);
  }
  //procedura di inserimento carattere

  chok=inserisci_carattere();
  if(!chok) return -1; //XXX aggiustato


  //ciclo di lettura del file parola per parola

  while(fin>>parola){ //FIXME non del tutto corretto, in questo caso vengono considerati anche altri caratteri oltre a quelli alfabetici

    okparola=false;
    lungh=strlen(parola);
    for( int i=0;i<lungh;i++)
      if (parola[i]==chok) {
  okparola=true;
  if (lungh <= min || min==0) min=lungh;
  if (lungh >= max) max=lungh;
      }// FIXME le operazioni fatte sono sensate ma a questo punto era meglio uscire dal ciclo

    if(okparola) cont++;
  }
  //Output

  cout<<"Il file contiene:\n"<<cont<<" parole contenenti il carattere '"<<chok<<"'";
  cout<<"\nla lunghezza minima delle parole e':"<<min;
  cout<<"\nla lunghezza massima delle parole e':"<<max<<"\n";

  fin.close();

  return 0; //XXX aggiunto

}


char inserisci_carattere(){
  char ch;
  cout<<"inserire il carattere da ricercare  \n";
  cin>>ch;
  if (!isalpha(ch)){
    cout<<"Carattere non corretto\n";
    return 0; //XXX era piu' elegante ripetere la richiesta

  }
  return ch;
}


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