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 (10) tutto a posto
// stefano corleto 149813 corleto1@interfree.it

#include <iostream.h>
#include <string.h>

void acapo()
{ while(cin.get() != '\n') continue;
}

main()
{ int DL,m,n,costo,min;
  int a,b,c;
  char s[20];
  char t[20];
  cout<<"inserire stringa s: ";    
  cin.getline(s,20,'\n');         // inserimento stringa s

  cout<<"inserire stringa t: ";
  cin.getline(t,20,'\n');         // inserimento stringa t

  n=strlen(s);                    
  m=strlen(t);

  int d[n+1][m+1];    // definisce la matrice di n+1 colonne e m+1 righe

  // XXX e' uno GNUismo


  if (n == 0) 
  { DL=m;
    cout<<"la distanza di Levenshtein e' "<<DL<<endl;
  exit(0);
  }
  if (m == 0)
  { DL=n;
    cout<<"la distanza di Levenshtein e' "<<DL<<endl;
  exit(1);
  }
  for (int i=0; i<=n; i++)  // ciclo che inizializza la prima riga della matrice

    d[0][i]=i;
  for (int j=0; j<=m; j++)  // ciclo che inizializza la prima colonna della matrice

    d[j][0]=j;
  for (int i=0; i<n; i++)   
    for (int j=0; j<m; j++) 
  { if (t[j]==s[i]) costo=0;
    else costo=1; 
      a = d[j+1][i]+1;
    b = d[j][i+1]+1;
    c = d[j][i]+costo;      
      min=a;               // calcola il minimo tra i tre valori a,b,c 

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


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