Salve, avrei un problema con lo svolgimento di un programma dove la traccia è la seguente:
Sia dato un file di testo (come da esempio) che contiene una sequenza di parole.
Si progettino (almeno) tre funzioni:
- leggi_parole, che riceve in ingresso una stringa che contiene il nome di un file di testo e legge da questo file la sequenza di parole in esso contenuta, memorizzandola in un vettore di stringhe (vett_str);
- crea_stringa_max che riceve in ingresso un vettore di stringhe (vett_str) ed il suo riempimento (riemp), e restituisce come parametro di uscita una nuova stringa (max_car) che contiene un carattere per ogni elemento del vettore vett_str. In particolare, ogni elemento di max_car dovrà essere il carattere più grande (nel senso lessicografico) contenuto nella corrispondente stringa di vett_str (vedi esempio che segue: il carattere più grande di ciascuna parola è visualizzato in grassetto). La funzione crea_stringa_max può utilizzare altre funzioni, opportunamente definite;
- stampa_vett_str che stampa a video un vettore di stringhe (vedi esempio);
e si scriva un programma che, dopo aver letto da tastiera il nome del file di testo e utilizzando la funzioni sopra descritte (ed eventuali altre), legga da questo file la sequenza di parole, la stampi a video, provveda a costruire la stringa max_car e la stampi a video.
Il programma dovrà essere suddiviso in moduli, uno contenente prototipi e dichiarazioni, uno contenente le funzioni leggi_parole, crea_stringa_max, stampa_vett_str (ed eventuali altre funzioni) ed un terzo contenente il main.
Esempio
INPUT (da file di testo):
ogni
tanto
porta
dei
miei
doni
OUTPUT (a video):
Parole lette da file:
ogni tanto porta dei miei doni
Stringa ottenuta:
ottimo
INSERISCO IL MIO SVOLGIMENTO:
codice:// libreria creata da me file lib.h const int MAX_ELEM=30; const int MAX_DIM=30; typedef char stringa [MAX_ELEM+1]; typedef stringa vett_str [MAX_DIM]; void leggi_parole ( vett_str, int &, const char*); void stampa_vett_str ( const vett_str, int); void crea_stringa_max (const vett_str, int, stringa); int strcmp ( const stringa, const stringa); void strcpy ( const stringa, stringa); // definizione delle funzioni lib.cpp #include <iostream> #include <cstdlib> #include "lib.h" using namespace std; void leggi_parole ( vett_str s, int & riemp, const char* filename) { int i; FILE* fp; fp= fopen (filename, "r"); if(!fp){ cout<< " il file " <<filename << " non e' stato trovato. impossibile proseguire l'elaborazione del programma\n"; system ("pause"); exit(1); } riemp=0; while ( ! feof (fp)){ fscanf (fp, "%s", &s[riemp]); riemp++; } fclose(fp); } void stampa_vett_str ( const vett_str s, int riemp){ int i; for (i=0; i<riemp; i++) cout << s[i] <<"\n"; } void crea_stringa_max (const vett_str s, int riemp, stringa max){ int i; for (i=0; i<riemp; i++){ if(strcmp( s[i], s[i])>0) strcpy (s[i], max); } cout <<max; } void strcpy ( const stringa c, stringa str){ int i=0; while (c[i] != '\0'){ str[i]=c[i]; i++; } str[i]='\0'; } int strcmp(const char s[], const char t[]){ int i=0; while (s[i]==t[i] && s[i]!='\0') i++; return s[i]-t[i]; } // main.cpp #include <cstdlib> #include <iostream> #include "lib.h" using namespace std; int main(){ vett_str s; int riemp; stringa max; leggi_parole ( s , riemp, "dati.txt"); stampa_vett_str ( s, riemp); crea_stringa_max (s, riemp, max); system("PAUSE"); return EXIT_SUCCESS; }
Il programma cosi svolto legge solo da file ma non copia esattamente le lettere maggiori, quindi la parole OTTIMO non comprare a video. Grazie in anticipo.

Rispondi quotando
