Visualizzare la parola contenente più consonanti.

di il
3 risposte

Visualizzare la parola contenente più consonanti.

Ciao a tutti,
a breve avrei un esame e dovrei consegnare inizialmente un progetto in C, di cui una delle tracce sarebbe questa:
Si vuole simulare la gestione di un dizionario della lingua italiana. Il dizionario è
indicizzato tramite le lettere dell’alfabeto ed ogni parola contiene i sinonimi (massimo 5)
e la sua spiegazione.
Permettere all’utente di:
· Inserire una parola, ricercarla nel dizionario e visualizzare il significato (usare
la ricerca binaria)
· Visualizzare la parola del dizionario contenente più consonanti.
Implementare l’algoritmo per la simulazione del dizionario ed effettuare almeno un test
per ognuna delle opzioni richieste dall’utente.
Non so se sia strano, ma sono riuscito a risolvere il primo punto ma non il secondo! (quello della parola con più consonanti, appunto)

Vi mostro il codice:
#include <stdio.h>
#include <string.h>
int ricerca_binaria(char chiave[], char *parole[], int n);
void main()
{
     char chiave[10];
    int n,indice,m,i,res=0;
    char *parole[]={"Abete","Abiosfera","Abisso","Antonio","Argilla","Bambu","Bomba","Buca","Buddismo","Buongiorno","Carne","Chioma","Cicca","Collare","Coppia"};
    char *parole2[]={"abete","abiosfera","abisso","antonio","argilla","bambu","bomba","buca","buddismo","buongiorno","carne","chioma","cicca","collare","coppia"};
    char *vocab[]={"Nome di alcuni alberi","Parte del nostro pianeta dove non e' possibile la vita","Luogo in cui la grande profondita' conferisce un aspetto buio e pauroso","Nome proprio di persona","Tipo di roccia sedimentaria","Nome comune di una pianta","Involucro contenente esplosivo","Cavita del terreno","Religione indiana","Forma di saluto","La parte dei tessuti molli del corpo","Folta capigliatura","Avanzo di sigaro o di sigaretta","Oggetto da mettere al collo degli animali","Abbinamento di due cose o persone"};
    char testo[20],finepar[3];
    printf("Inserisci la parola da cercare: ");
    gets(chiave);
    n=15;
    indice=ricerca_binaria(chiave,parole,n);
    if (indice<0)
    indice=ricerca_binaria(chiave,parole2,n);

    if(indice>=0)
                    printf("%s: %s\n",chiave,vocab[indice]);

     else
                  printf("Chiave non trovata\n");

     
}


int ricerca_binaria(char chiave[], char *parole[], int n)
{
    int mediano, primo=0, ultimo=n-1;
    while (primo<=ultimo)
    {
          mediano=(primo+ultimo)/2;
          if(strcmp(chiave,parole[mediano])==0)
             return mediano;
          else if(strcmp(chiave,parole[mediano])<0)
             ultimo=mediano-1;
          else
             primo=mediano+1;
    }
    return -1;
}
Non vi sto chiedendo di risolvermi il codice perchè sarebbe troppo facile e non imparerei nulla, ma non riesco a capire come muovermi, anche qualche semplice suggerimento o farmici arrivare con la testa sarebbe davvero utile.
Vi ringrazio di cuore già da adesso!

3 Risposte

  • Re: Visualizzare la parola contenente più consonanti.

    Se tutto il dizionario è in minuscolo, puoi semplicemente prendere una parola, confrontare ogni lettera con le 5 vocali, contando quelle diverse da tutte e 5, conservando una copia di tale parola o un puntatore a tale parola e puntandone eventuali altre con più lettere, scrivendo un algoritmo tipo quelli usati comunemente per cercaree il massimo o il minimo...

    piccola modifica: diversa anche dallp spazio...
  • Re: Visualizzare la parola contenente più consonanti.

    Ti bastano due cicli for per creare una versione iterativa.
    Un ciclo che scorre il dizionario l'altro scorre la parola e ne conta le consonanti con un if che se non è uguale ad 'a','e','i','o','u' aumenta il contatore di uno. Al termine del for confronti questo numero con il numero max di consonanti trovate in una parola e se è maggiori memorizzi questo nuovo numero e questa nuova parola o solamente il indice.
    Non è molto difficile, prova a buttarne giù una bozza e magari ti aiuto piano piano
  • Re: Visualizzare la parola contenente più consonanti.

    Chiedo scusa per l'assenza e per aver scritto inutilmente!
    Ho avuto un altro esame in questi giorni e nel frattempo sono anche riuscito a risolvere il problema!

    Vi ringrazio anche semplicemente delle risposte!
Devi accedere o registrarti per scrivere nel forum
3 risposte