Correzione prova pratica del 3 maggio 2003
Correzione prova pratica del 3 maggio 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 legge per riga ma poi considera solo la prima parola, qualche ingenuita'
// esame di Fondamenti di Informatica, corso di laurea in Ingegneria Informatica (teledidattico)
// Cognome: Garcia
// Nome: Martin
// Matricola: 156001
// Postazione: stud06
// data:03/05/2003
// e-mail: mgarcia@mundodiarios.net
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main (int argc, char *argv[])
{
FILE *fp;
char filename[80];
char buffer[80];
char seac;
char word[80];
long int sea_len_max=0, sea_len_min=0;
long int nwords = 0;
const int NEWLINE = '\n';
int i;
/* rilevamento argomenti parametri */
switch (argc - 1)
{
case (0):
printf("Nome del file assente come parametro\n");
return 1;
case (1):
break;
default:
printf("Troppi parametri\n");
return 1;
}
strcpy(filename,argv[1]);
/* apertura del file */
fp = fopen(filename,"rb"); // XXX il b e' tutto sommato inutile
if (fp == NULL)
{
printf("Impossibile aprire il file %s\n",filename);
return 1;
}
/* richiesta all'utente */
printf("Immettere un carattere da ricercare: ");
scanf("%c", &seac);
/* controllo validita' carattere */
if (!isalpha(seac)){
printf("Carattere non alfabetico\n");
return 1; // XXX era piu' elegante ripetere la richiesta
}
/* ciclo di scansione delle parole */
while (fgets(buffer, 80, fp)!=NULL)
{
for(i=0; i < strlen(buffer); i++)
{
if(isspace(buffer[i])) //FIXME al limite if(!isalhpa(buffer[i]))
break;
word[i]=buffer[i];
}
// TODO il ciclo sopra mi isola la prima parola. E le altre???
word[i]='\0';
if(strchr(word, (int)seac)){
printf("%s\n", word);
i=strlen(word);
if(i>sea_len_max){
sea_len_max=i;
}else{
if (sea_len_min<i) //FIXME visto che sea_len_min viene inizializzato a zero cio' non capita
sea_len_min=i;
}
++nwords;
}
}
fclose(fp);
printf("%ld Parole, lunghezza massima: %d, lunghezza minima: %d", nwords,sea_len_max, sea_len_min);
return 0;
}
Se avete commenti o osservazioni su questa pagina
mandate un messaggio di posta elettronica a
bertozzi@CE.UniPR.IT