Correzione prova pratica del 3 ottobre 2003

Correzione prova pratica del 3 ottobre 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 (4.5) quasi corretto fino all'inizializzazione della matrice, dopo pero' dimostra di non sapere come si fanno due cicli nidificati. Utilizza cin>> invece di cin.getline()
/*Iemmi Alessandro, 143657, riserphoenix@inwind.it, DIS01

  esame del 03/10/2003*/
////////////////////////////////

#include <iostream.h>///////////

#include <string.h>  // header//

#include <stdlib.h>  ///////////

////////////////////////////////


//////////////////////////////////////////////////////

int const max_L= 21;// variabile globale max stringa//

int i=0, j=0;       // indici dei cicli             // 

// FIXME definire variabili globali quando non necessario a mio avviso e' indice di scarsa pulizia del codice

//////////////////////////////////////////////////////




main(){
  char s[max_L], t[max_L];
  int n=0, m=0, dl=0, costo=0, min1=0, min2=0;
  cout<<"\t\tInserire stringhe con massimo 20 caratteri!\n\n";
  cout<<"Inserire stringa s : \t";
  cin>>s; //FIXME si doveva usare cin.getline()

  n=strlen(s);
  while (n>20){             //controllo per inserimento superiore a 20 caratteri

    cerr<<"\aErrore: Stringa di lunghezza fuori dai limiti!!"; //FIXME se questo si avverava il suo programma probabilmente

                                                               //      era gia' andato in crash!

    cout<<"Inserire nuovamente s: ";
    cin>>s;
    n=strlen(s);
  }
  cout<<"\nInserire stringa t : \t";
  cin>>t;
  m=strlen(t);
  while (m>20){        //controllo per inserimento superiore a 20 caratteri

    cerr<<"\aErrore: Stringa di lunghezza fuori dai limiti!!";
    cout<<"Inserire nuovamente t: ";
    cin>>t;
    m=strlen(t);
  }
  if (!n){                //restituisce m 

    dl=m;
    cout<<m;
    exit(1);
  }
  else if (!m){           //restituisce n FIXME l'else e' inutile

    dl=n;
    cout<<n;
    exit(1);
  }
  int matrix[m+1][n+1];
  for (i=0; i<=n; i++)
    matrix[i][0]=i;     //controllato ok!


  for (j=0; j<=m; j++)
    matrix[0][j]=j;     //controllato ok!


  for (i=0, j=0; i<n, j<m; i++, j++){ //FIXME questi non sono due cicli nidificati!

    if (t[j]==s[i]) costo=0;
    else costo =1;  //costo varia ok!

    min1= (matrix[j][i+1]+1 < matrix[j][i]+costo ? matrix[j][i+1]+1:matrix[j][i]+costo);
    //min1= minimo tra i 2

    min2= (min1 < matrix[j+1][i]+1 ? min1:matrix[j+1][i]+1);
    //min2 = minimo tra i 3

    matrix[j+1][i+1]=min2;
  }

  dl=min2; 
  cout<<"\nLa distanza di Levensthein: "<<dl;     //NO!!! valore errato crash con parole lunghe O_o?

  //funziona con le parole casa e cose O_o?



  return 0;

}





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