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) corretto
// RUGGERI LETIZIA, 117633, rfelettro@libero.it , dis09

// 03/10/2003 - esame di fondamenti di informatica,

// corso di Laurea in Ing. Telecomunicazioni


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

const int lmax = 20;
main()
{ int n, m, DL, costo;
  char s [lmax], t[lmax];
  cout <<"Inserire stringa s (massimo 19 caratteri): ";
  cin.getline(s,lmax);
  cout << endl;
  cout <<"Inserire stringa t (massimo 19 caratteri): ";
  cin.getline(t,lmax);
  cout << endl;
  cout << endl;
  n = strlen (s);
  m = strlen (t);
  if (n == 0) { DL = m;
    cout <<"La distanza di Levenshtein Š ";
    cout << DL << endl;
    exit (1);
  }
  if (m == 0) { DL = n;
    cout <<"La distanza di Levenshtein Š ";
    cout << DL << endl;
    exit (2);
  }
  int d[lmax][lmax];
  int i, j, k, h; //XXX non vi era necessita' di 4 variabili, ne bastavano due (le variabili sono ecologiche e si possono riciclare)

  for (k=0; k <=n; k++) d[0][k]=k;
  for (h=0; h <=m; h++) d[h][0]=h;
  for (i=0; i<n; i++)
    for (j=0; j<m; j++)
    { if (t[j]==s[i]) costo = 0;
      else costo = 1;
      int min = 100;
      if ( (d[j+1][i] + 1) < min) min = d[j+1][i]+1;
      // XXX poteva direttamente scrivere int min = d[j+1][i]+1;

      if ( (d[j][i+1] + 1) < min) min = d[j][i+1]+1;
      if ( (d[j][i] + costo) < min ) min = d[j][i]+costo;
      d[j+1][i+1] = min;
    }
  DL = d[m][n];
  cout <<"La distanza di Levenshtein Š ";
  cout << DL << endl;
  getchar();
  return 0;
}


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