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 (7) sbaglia calcolo del minimo e altri errori minori
// erika rampini 149919 erikarampini297@msn.com



#include<iostream.h>

#include<string.h>

main(){
  char s[20],t[20];
  cin.getline(s,20);
  cin.getline(t,20);
  int n=strlen(s);
  int m=strlen(t),DL;
  int d[m+1][n+1];
  int costo,min;
  // cout<<n<<" "<<m<<endl;

  if(n==0){
    DL=m;
    cout<<"la distanza di Levenshtein e'"<<" "<<DL<<endl;
    exit(0);
  }
  else if(m==0){ //FIXME l'else e' inutile

    DL=n;
    cout<<"la distanza di Levenshtein e'"<<" "<<DL<<endl;
    exit(0);
  }
  for(int p=0,s=0;p<n+1,s<=n;p++,s++) //FIXME durante questo ciclo p ed s hanno sempre lo stesso valore (ovvero una e' di troppo)

    d[0][p]= s;
  for(int x=0,z=0;x<m+1,z<=m;x++,z++) //FIXME vedi sopra

    d[x][0]= z;
  // provo a vedere se mi da la matrice

  // for(int r=0;r<m+1;r++){

  // for(int g=0;g<n+1;g++){

  //  cout<<d[r][g];

  //  }

  //cout<<endl;

  //  }

  for(int i=0;i<=n-1;i++){
    for(int j=0;j<=m-1;j++){
      if(t[j]==s[i]) costo=0;
      else costo=1;
      if(d[j+1][i]+1<d[j][i+1]+1) min=d[j+1][i]+1;
      else min=d[j][i+1];
      if(d[j][i+1]+1<d[j][i]+costo) min=d[j][i+1]+1; //FIXME cosi' non funziona, una volta inizializzato min deve poi usarlo per i confronti

      else min=d[j][i]+costo;
      if(d[j][i]+costo<d[j+1][i]+1) min=d[j][i]+costo;
      else min=d[j+1][i]+1;
      d[j+1][i+1]=min;
    }
  }
  DL=d[m][n];
  cout<<"la distanza di Levenshtein e'"<<" "<<DL;
  return 0;
}


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