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 (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