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:
- FIXME: segnalazione di un errore, non necessariamente sono tutti segnalati e non necessariamente sono tutti presi in considerazione
per il voto finale
- TODO: segnala l'assenza di parti di codice
- XXX: segnala qualcosa di non chiaro o inutile ai fini del codice, commenti di ordine generale, errori di battitura o suggerimenti
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