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 (9.5) alcune deviazioni dal testo ed ingenuita' ma per lo piu' corretto
// SANTONE GIOVANNI matr. 153443 , ego1983@libero.it, stud01

// 03/10/2003   FONDAMENTI DI INFORMATICA A - INGEGNERIA ELETTRONICA

#include <iostream.h>
#include <string.h>
int main()
{
  int m,n,DL,costo,min;
  char s[20],t[20];
  cout<<"inserisci la prima stringa: ";
  cin.getline(s,20);
  cout<<endl;
  cout<<"inserisci la seconda stringa: ";
  cin.getline(t,20);
  cout<<endl;
  n=strlen(s);
  m=strlen(t);

  if (n==0){ cout<<"DL="<<m<<endl;exit(0);}
  if (m==0){ cout<<"DL="<<n<<endl;exit(0);}

  int d[m+1][n+1];

  for (int i=0;i<m+1;i++)
  {  
    for (int j=0;j<n+1;j++) d[i][j]=0; //FIXME a che serve? non era richiesto e comunque in tal caso bastava

                                       //      definire la matrice usando int d[m+1][n+1]={};

  }


  if (n!=0 && m!=0) //FIXME inutile, nel caso il programma e' gia' terminato

  {
    for (int i=0;i<n+1;i++) d[0][i]=i;

    for (int k=0;k<m+1;k++) d[k][0]=k;

    for (int i=0; i<n;i++)
    {
      for(int j=0;j<m;j++)
      {
  if (s[i]==t[j]) costo=0;
  else costo=1;
  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;

      }


    }


  }
  cout<<"Dl="<<d[m][n];








}


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