aiuto x esame

Pubblicità

ritita

Nuovo Utente
Messaggi
2
Reazioni
0
Punteggio
24
salve ragazzi..sono una nuova iscritta a questo forum e spero ke sia giusto il mio modo di approcciarmi a questo forum.
a breve ho un esame di programmazione e sono un po' bloccata in un progetto.
lo incollo qui e..qualcuno può aiutarmi?grazie..

Algoritmo di analisi di un testo. L’algoritmo legge da tastiera un testo in italiano di almeno 5 linee (80 caratteri per linea); poi costruisce e visualizza un array 1D dove viene memorizzato, nella componente i-sima, il numero di volte in cui la i-sima consonante dell’alfabeto è presente nel testo. L’algoritmo costruisce e visualizza anche, un array di char in cui le consonanti dell’alfabeto sono ordinate (in ordine crescente) base al loro numero di occorrenze nel testo. L’algoritmo determina se il
testo è un pangramma di consonanti, ovvero contiene, almeno una volta, tutte le consonanti dell’alfabeto. Infine l’algoritmo visualizza, in ordine alfabetico, tutte le parole che compaiono nel testo e che iniziano con le prime 5 consonanti più frequenti.
 
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.
 
Pubblicità
Pubblicità
Indietro
Top