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