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 (6) segue il filo ma va fuori testo sia nell'inizializzazione matrice che nella selezione risultato
// Egidio D'Elia, 138217, gigi.delia@katamail.com, DIS07

// 03/10/03 - Esame di Fondamenti di Informatica A, corso di laurea in Ingegneria Informatica



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

int min (int &, int &, int &);

main(){
  int DL;
  char s[20], t[20];
  cout<<"Inserire due stringhe al max di 20 caratteri: "<<endl;
  cin.getline(s, 20);
  cin.getline(t, 20);
  int n=strlen(s);
  int m=strlen(t);
  if (n==0){
    DL=m;
    cout<< DL <<endl;
    exit (1);
  }
  else if (m==0){ //FIXME questo else NON ci vuole

    DL=n;
    cout<< DL <<endl;
    exit (2);
  }
  char d[21][21];
  unsigned short i, j, costo;
  for (i=0;i<=n;i++)
    d[0][i]=s[i]; //FIXME nel testo era differente!

  for (j=0;j<=m;j++)
    d[j][0]=t[j]; //FIXME come sopra

  for (i=0;i<n;i++)
    for (j=0;j<m;j++)
    {
      if (s[i]==t[j])
  costo=0;
      else costo=1;
      int x=d[j+1][i]+1, y=d[j][i+1]+1, z=d[j][i]+costo;
      int minimo=min(x,y,z);
      d[j+1][i+1]=minimo;
    }
  DL=d[j+1][i+1]; //FIXME il testo diceva di prendere la cella di coordinate m ed n, non era vietato fare altrimenti ma

                  //      nel suo caso ha sbagliato


  cout<< "DL= "<< DL <<endl;
  return 0;
}

int min (int &x, int &y, int &z){ //FIXME l'utilizzo dei riferimenti ove non necessario e' sbagliato

  int temp;
  if (x<y)
    temp=x;
  else temp=y;
  if (temp<z)
    return temp;
  else return z;
}



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