Correzione prova pratica del 17 settembre 2003
Correzione prova pratica del 17 settembre 2003
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 (9.5) lieve non aderenza al testo e non corretta dimensione della stringa
//Rossi Leonardo, 150080, rougeleone@libero.it, computer portatile
// 17/09/03 - Esame di Fondamenti di Informatica A, corso di laurea in Ingegneria Informatica
//
//compilatore usato: Borland C++ 3.1
#include<iostream.h>
#include<string.h>
//
char stringa[80]; //FIXME anche lei e' uno di quelli che i caratteri di fine stringa li conserva in tasca?
int n;
//
void acquisisci_stringa();
int trova_periodo();
//-----------------------------------------------------------------------------
//-------------------------------------------------------------------------------
main() //
{ //
cout<<"ISTRUZIONI: \n\tspazio per terminare \n\tMAX caratteri accetati: 80\n";//
//FIXME peccato che il testo fosse differente
do{ //
acquisisci_stringa(); //
cout<<"\nIl periodo + piccolo: "<<trova_periodo()<<endl; //
}while(stringa[0]!=' '); //FIXME cosi' anche quando viene inserito ' ' viene calcolato il periodo
// la condizione si doveva mettere anche altrove
return 0; //
} //
//-------------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void acquisisci_stringa() //BLOCCO 1:acquisizione della stringa
{
cout<<"\n Inserisci la stringa da analizzare: ";
cin.getline(stringa,80);
n=strlen(stringa);
}
int trova_periodo() //BLOCCO 2: trovare il periodo pił piccolo
{
int periodo_da_testare=0,p=0;
for(int i=1;i<=n;i++)
{
if(!(n%i))
{
p=0;
for(int j=i;j<n;j+=i,p++)
{
if(!strncmp(stringa,stringa+j,i)) { periodo_da_testare++; }
}
}
if(p==(periodo_da_testare)) { return i;}
periodo_da_testare=0;
}
return n;
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT