Urca...
allora il problemi da risolvere sono 4.
1. Fare un array con il conteggio delle consonanti
2. Ordinare le consonanti per frequenza
3. Verificare che tutte le consonanti dell'alfabeto sono state inserite
4. Cercare le parole che cominciano con le consonanti più frequenti
Il primo e il terzo sono semplici. Poi viene il 4 e infine il 3. O il 3 e poi il 4 a seconda.
Su come fare la funzione per inserire il testo credo che non ciano problemi. La funzione di conteggio può operare in 2 modi: mentre si digita il testo, più facile se tutto è corretto, un po' meno se bisogna tenere conto della possibile correzione di un battuta errata. O deferito, cioè si inserisce tuto il testo e poi lo si da in pappa alla funzione che lo elabora ed estrae tutte le info che sono state richieste.
Io userei il secondo metodo, perchè di permette di separare il problema dell'input del testo da quello della sua elaborazione. Ti permetterà anche di poter dare in pasto alla funzione di elaborazione un testo partendo da un file o da qualsiasi altro input.
Non specifichi in che linguaggio deve essere scritto il codice. Io ti do i consigli come se dovessi scriverlo in C.
La funzione di elaborazione prenderà dunque come input il testo digitato e restituirà i 4 risultati.
Per contare le consonanti devi costruire un array di (21-5 =) 16 elementi, diciamo int (non usare i char perchè la loro capacità non basta se il testo che è di 400 lettere è tutto fatto della stessa consonante). Ogni elemento corrisponde ad una consonante dell'alfabeto. Ovvero, l'elemento in posizione 0 corrisponderà alla B, in posizione 1 alla C, in posizione 2 alla D, in posizione 3 alla F etc.. etc... Vengono escluse le consonanti non facenti capo dell'alfabeto italiano ovviamente (JKWX). Chiamiamo questo array
conteggio e impostiamo il valore di tuti i suoi 16 elementi a zero.
Il testo viene passato in input alla funzione come un array di char la cui dimensione può essere definita a priori a 400 caratteri (5 linee x 80 caratteri). Chiamiamo questo input
text.
Per ogni carattere in
text si verifica che sia una consonante. Se lo è si determina quale consonante sia nell'alfabeto in modo da trovare la sua posizione in
conteggio e si incrementa il valore dell'elemento corrispondente alla consonante. Per fare queste operazioni la cosa più facile che mi viene in mente è quello di costruirsi un secondo array fisso contenente tutte le nostre consonanti già ordinate e di usarlo per fare sia il controllo che la lettera sia una consonante, sia trovare la sua posizione.
Un po' di codice:
Codice:
char consonanti[16] = "abcdfghlmnpqrstvz"; // array di riferimento
int conteggio[16] = {0}; // questo azzera tutti gli elementi dell'array
void contaconsonanti( char text[400] ) {
char c;
for ( int i=0; i<400; i++ ) {
c = text[i]; // estraggo la i-esima lettera dal testo in input
for ( int k=0; k<16; k++ ) {
if ( c = consonanti[k] ) // Se la consonante è presente nel nostro array
conteggio[k]++; // incrementa il punteggio della consonante
}
}
}
Non ho usato puntatori, allocazioni di memoria dinamiche, define o qualunque "attrezzo" avanzato del C. Solo variabili globali e allocate staticamente.
Alla fine del ciclo i, ovvero in fondo alla funzione tutte le lettere del testo saranno state prese in considerazione e confrontate con l'array di riferimento delle consonanti. Se la lettera è presente in tale array allora il contantore relativo nell'array conteggio viene incrementato. Altrimenti la lettera viene ignorata e si passa alla successiva, fino al raggiungimento dell'ultima lettera del testo.
Il punto 3 si fa in un baleno: basta controllare che nell'array conteggio non vi sia nessun elemento a zero (che vuol dire che non è mai stata incontrata quella consonante):
Codice:
bool ispangramma() {
for (i=0; i<16; i++)
if ( conteggio[i] == 0)
return false;
return true;
}
La funzione non ha input ma opera sull'array globale
conteggio.
Mi fermo qui. Dimmi se questa impostazione al problema va bene.