Correzione prova pratica del 7 luglio 2004

Correzione prova pratica del 7 luglio 2004


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  non funzionante e non compila, sbaglia lettura tabella ma sensato algoritmo di sostituzione

// BOSIO ANDREA , 103931 , andrea.bosio@studenti.unipr.it, DIS 16,

// 07/07/2004 esame di informatica A, corso di laurea in ingegneria delle 

// telecomunicazioni! 


#include <iostream>
#include <cstdlib>
#include <fstream>
#include <ctype>

using namespace std;

const char*file1="testo.txt";
const char*file2="tabella.txt";

const int size=100;

void search(int&location, int&found, const char a[], const int n, char target){
  found=location=0;                    // algoritmo di ricerca lineare

  while (!found && location<n)         // all'interno di un array unidimensionale

    found = (a[location++]==target); 
  --location;
}

int main(){
  ifstream tabf(file2);
  if(!tabf){
    cerr<<" Errore: impossibile aprire file "<< file2<<".\n";
    exit(1);  
  }
  ifstream fin(file1);
  if(!fin){cerr<<" Errore: impossibile aprire file "<< file1<<".\n";
    exit(1);
  } 

  char ch1,ch2,lettera;
  char tab[size]; 
  int num1=0,num2=0,ris[size];
  int found,loc;

  while(tabf.get(ch1)){    
    if(toupper(ch1)){ //FIXME toupper è sempre vero, forse lei si confonde con isupper()

      tab[num1]=ch1;
      num1++;
    }
    else{ ris[num2]=ch1;
      num2++;
    } 
  } //FIXME pessima struttura dati

  tabf.close();

  const int n=sizeof(tab)/sizeof(char);       
  cout<<"\n Questo è il contenuto del file " <<file2<<".\n";
  while(fin.get(ch)){  //FIXME e chi e' ch?

    if(ch="["){ //FIXME i doppi apici si usano con le stringhe e non con i char

      fin.get(lettera);
      search(loc,found,tab,n,lettera);
      if(found)cout<<ris[loc];  
    }
    else if(ch="]")cout<<" "; //FIXME i doppi apici si usano con le stringhe e non con i char, a parte cio' chi le ha detto di stampare uno spazio?

    else cout<<ch; 
  }             
  fin.close();            
  system("PAUSE");
  return 0;       
}        







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