Gestione Funzione ricerca minimo Help Please

di il
3 risposte

Gestione Funzione ricerca minimo Help Please

Ciao ragazzi, stavo aiutando un collega per un suo progetto di programmazione 1 e abbiamo riscontrato un problema per quanto riguarda la gestione della selezione della minima parola ll' interno di un dizionario creato da noi vi inserisco il codice;
Main

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//#include "Header.h"  //inclusione dell' Header//

struct parola { //dichiarazione della struct dizionario: formata da quattro elementi di tipo char
    char lettera;
    char nome [50];
    char significato [500];
    char sinonimo [5][20];
} dizionario [100];

int ricerca_parola (struct parola dizionario [], int n, char chiave[]);
void Ricerca_min(struct parola dizionario[], int n);
void Elimina_parola(struct parola dizionario[], int n, char chiave[]);

void inizializza (struct parola dizionario[100]);

int main(int argc, char *argv[]){
    
    int opzione;
    
    int k=0;
    
    int n=21; //grandezza del dizionario
    
    char chiave[20]; //chiave di ricerca binaria
    
    inizializza(dizionario); //riempimento dizionario
    
    while(opzione>=0 && opzione <=3)
	{
		printf ("Dizionario della Lingua Italiana\n\n");
    	printf ("inserisci un numero e premi invio:\n\n1) Ricerca una parola\n2) Elimina una parola\n3) Trova la parola piu' corta!\n0) Esci\n");
    	scanf("%d", &opzione);
    	if (opzione==1){
        
            fflush(stdin);
    
    	//funzione ricerca significato parola
    
   	 	    printf("\tRICERCA PAROLA\n\n");
    
    	    fflush(stdin);
    
   		    printf("Inserisci la parola: ");
    
    	    scanf("%s", &chiave);
    		k=ricerca_parola (dizionario, n, chiave);
    
    		if (k!=-1)
    		{
    
        		printf("\nNome: %s\n",dizionario[k].nome);
        
        		printf("\nSignificato: %s\n",dizionario[k].significato);
        
       		    printf("\nSinonimi: %s, %s, %s, %s, %s\n\n",dizionario[k].sinonimo[0],dizionario[k].sinonimo[1],dizionario[k].sinonimo[2],dizionario[k].sinonimo[3],dizionario[k].sinonimo[4]);
        
    		}
    
    		else
            {
        		printf("\nParola non trovata!\n\n");
        	}
       }
       else if (opzione==3)
       {
          Ricerca_min(dizionario, n);
           fflush(stdin);
       }
       else if(opzione ==2)
       {
			 
		 fflush(stdin);
    	 printf("Inserisci la parola: ");
         scanf("%s", &chiave);
    	 Elimina_parola(dizionario,n,chiave);
       }
	else
       break;
	}
    return 0;
    
}
Inizializza

void inizializza (struct parola dizionario[100]){
    dizionario[0].lettera='a';
    strcpy (dizionario[0].nome, "antico");
    strcpy(dizionario[0].significato, "appartenente ad un'epoca remota");
    strcpy (dizionario[0].sinonimo[0], "vecchio");
    strcpy (dizionario[0].sinonimo[1], "preistorico");
    strcpy (dizionario[0].sinonimo[2], "primitivo");
    strcpy (dizionario[0].sinonimo[3], "remoto");
    strcpy (dizionario[0].sinonimo[4], "arcaico");

    dizionario[1].lettera='b';
    strcpy (dizionario[1].nome, "bocciare");
    strcpy(dizionario[1].significato, "Negare a uno studente l'ammissione alla classe successiva o un'esame");
    strcpy (dizionario[1].sinonimo[0], "respingere");
    strcpy (dizionario[1].sinonimo[1], "rifiutare");
    strcpy (dizionario[1].sinonimo[2], "silurare");
    strcpy (dizionario[1].sinonimo[3], "escludere");
    strcpy (dizionario[1].sinonimo[4], "scartare");

    dizionario[2].lettera='c';
    strcpy (dizionario[2].nome, "complicato");
    strcpy(dizionario[2].significato, "Intricato, complesso, di difficile soluzione");
    strcpy (dizionario[2].sinonimo[0], "astruso");
    strcpy (dizionario[2].sinonimo[1], "cabalistico");
    strcpy (dizionario[2].sinonimo[2], "complesso");
    strcpy (dizionario[2].sinonimo[3], "difficile");
    strcpy (dizionario[2].sinonimo[4], "machiavellico");
    
    dizionario[3].lettera='d';
    strcpy (dizionario[3].nome, "duttile");
    strcpy(dizionario[3].significato, "Che si modifica a seconda delle necessità e delle circostanze");
    strcpy (dizionario[3].sinonimo[0], "agile");
    strcpy (dizionario[3].sinonimo[1], "cedevole");
    strcpy (dizionario[3].sinonimo[2], "malleabile");
    strcpy (dizionario[3].sinonimo[3], "elastico");
    strcpy (dizionario[3].sinonimo[4], "trattabile");
    
    dizionario[4].lettera='e';
    strcpy (dizionario[4].nome, "estroverso");
    strcpy(dizionario[4].significato, "Tendenza a privilegiare il rapporto con il mondo esterno e la socializzazione");
    strcpy (dizionario[4].sinonimo[0], "aperto");
    strcpy (dizionario[4].sinonimo[1], "brillante");
    strcpy (dizionario[4].sinonimo[2], "comunicativo");
    strcpy (dizionario[4].sinonimo[3], "gioviale");
    strcpy (dizionario[4].sinonimo[4], "socievole");

    dizionario[5].lettera='f';
    strcpy(dizionario[5].nome,"conto");
    strcpy(dizionario[5].significato,"Insieme di scritture relative ad un dato oggetto di cui si mette in evidenza la variabile e commensurabile grandezza");
    strcpy (dizionario[5].sinonimo[0], "calcolo");
    strcpy (dizionario[5].sinonimo[1], "conteggio");
    strcpy (dizionario[5].sinonimo[2], "computo");
    strcpy (dizionario[5].sinonimo[3], "dovuto");
    strcpy (dizionario[5].sinonimo[4], "parcella");
    
    dizionario[6].lettera='g';
    strcpy(dizionario[6].nome,"giocare");
    strcpy(dizionario[6].significato,"dedicarsi a qualche esercizio piacevole per divertimento o anche per guadagno");
    strcpy (dizionario[6].sinonimo[0], "svagarsi");
    strcpy (dizionario[6].sinonimo[1], "scherzare");
    strcpy (dizionario[6].sinonimo[2], "giocherellare");
    strcpy (dizionario[6].sinonimo[3], "baloccare");
    strcpy (dizionario[6].sinonimo[4], "gareggiare");
    
    dizionario[7].lettera='h';
    strcpy(dizionario[7].nome,"hotel");
    strcpy(dizionario[7].significato,"Impresa ricettiva che fornisce un alloggio previo pagamento, utilizzato solitamente per soggiorni di breve durata e specialmente dai turisti.");
    strcpy (dizionario[7].sinonimo[0], "albergo");
    strcpy (dizionario[7].sinonimo[1], "pensione");
    strcpy (dizionario[7].sinonimo[2], "motel");
    strcpy (dizionario[7].sinonimo[3], "BnB");
    strcpy (dizionario[7].sinonimo[4], "casa vacanze");
    
    dizionario[8].lettera='i';
    strcpy(dizionario[8].nome,"incorniciare");
    strcpy(dizionario[8].significato,"mettere in cornice");
    strcpy (dizionario[8].sinonimo[0], "inquadrare");
    strcpy (dizionario[8].sinonimo[1], "circondare");
    strcpy (dizionario[8].sinonimo[2], "delimitare");
    strcpy (dizionario[8].sinonimo[3], "contorinare");
    strcpy (dizionario[8].sinonimo[4], "NULL");
    
    
    dizionario[9].lettera='l';
    strcpy(dizionario[9].nome,"lontano");
    strcpy(dizionario[9].significato,"che si trova a grande distanza, che è separato da un lungo spazio");
    strcpy (dizionario[9].sinonimo[0], "distante");
    strcpy (dizionario[9].sinonimo[1], "staccato");
    strcpy (dizionario[9].sinonimo[2], "separato");
    strcpy (dizionario[9].sinonimo[3], "diviso");
    strcpy (dizionario[9].sinonimo[4], "discosto");

    
    dizionario[10].lettera='m';
    
    strcpy(dizionario[10].nome,"maldestro");
    strcpy(dizionario[10].significato,"inesperto; non abile");
    strcpy (dizionario[10].sinonimo[0], "incapace");
    strcpy (dizionario[10].sinonimo[1], "inesperto");
    strcpy (dizionario[10].sinonimo[2], "inabile");
    strcpy (dizionario[10].sinonimo[3], "goffo");
    strcpy (dizionario[10].sinonimo[4], "sprovveduto");

    dizionario[11].lettera='n';
    strcpy(dizionario[11].nome,"nano");
    strcpy(dizionario[11].significato,"che ha dimensioninotevolmente ridotte rispetto alla norma");
    strcpy (dizionario[11].sinonimo[0], "piccolo");
    strcpy (dizionario[11].sinonimo[1], "basso");
    strcpy (dizionario[11].sinonimo[2], "bassissimo");
    strcpy (dizionario[11].sinonimo[3], "di bassissima statura");
    strcpy (dizionario[11].sinonimo[4], "minuscolo");
    
    
    
    dizionario[12].lettera='o';
    strcpy(dizionario[12].nome,"origliare");
    strcpy(dizionario[12].significato,"ascoltare di nascosto");
    strcpy (dizionario[12].sinonimo[0], "orecchiare");
    strcpy (dizionario[12].sinonimo[1], "usciolare");
    strcpy (dizionario[12].sinonimo[2], "spiare");
    strcpy (dizionario[12].sinonimo[3], "NULL");
    strcpy (dizionario[12].sinonimo[4], "NULL");

    dizionario[13].lettera='p';
    strcpy(dizionario[13].nome,"peso");
    strcpy(dizionario[13].significato,"forza che un corpo esercita su ciò che losostiene per effetto della gravità terrestre");
    strcpy (dizionario[13].sinonimo[0], "pesantezza");
    strcpy (dizionario[13].sinonimo[1], "zavorra");
    strcpy (dizionario[13].sinonimo[2], "carico");
    strcpy (dizionario[13].sinonimo[3], "pesatura");
    strcpy (dizionario[13].sinonimo[4], "pesante");
    
    dizionario[14].lettera='q';
    strcpy(dizionario[14].nome,"quadrare");
    strcpy(dizionario[14].significato,"ridurre a forma quadrata");
    strcpy (dizionario[14].sinonimo[0], "squadrare");
    strcpy (dizionario[14].sinonimo[1], "rinquadrare");
    strcpy (dizionario[14].sinonimo[2], "equilibrare");
    strcpy (dizionario[14].sinonimo[3], "coincidere");
    strcpy (dizionario[14].sinonimo[4], "combaciare");
    
    dizionario[15].lettera='r';
    strcpy(dizionario[15].nome,"razzare");
    strcpy(dizionario[15].significato,"disegnare un tessuto, un foglio di carta o altro con figure simili a raggi");
    strcpy (dizionario[15].sinonimo[0], "NESSUNO");
   

    
    dizionario[16].lettera='s';
    
    strcpy(dizionario[16].nome,"sottile");
    strcpy(dizionario[16].significato,"che ha spessore o grossezza inferiore alla media");
    strcpy (dizionario[16].sinonimo[0], "fine");
    strcpy (dizionario[16].sinonimo[1], "magro");
    strcpy (dizionario[16].sinonimo[2], "affilato");
    strcpy (dizionario[16].sinonimo[3], "aguzzo");
    strcpy (dizionario[16].sinonimo[4], "accurato");
    
    dizionario[17].lettera='t';
    strcpy(dizionario[17].nome,"trovare");
    strcpy(dizionario[17].significato,"rinvenire una cosa che si cerca, che si desidera, di cui si vuole disporre");
    strcpy (dizionario[17].sinonimo[0], "scorgere");
    strcpy (dizionario[17].sinonimo[1], "vedere");
    strcpy (dizionario[17].sinonimo[2], "rivelare");
    strcpy (dizionario[17].sinonimo[3], "segnalare");
    strcpy (dizionario[17].sinonimo[4], "rinvenire");
    
    dizionario[18].lettera='u';
    strcpy(dizionario[18].nome,"utile");
    strcpy(dizionario[18].significato," che può essere usato, che può appagare un bisogno.");
    strcpy (dizionario[18].sinonimo[0], "efficace");
    strcpy (dizionario[18].sinonimo[1], "valido");
    strcpy (dizionario[18].sinonimo[2], "vantaggioso");
    strcpy (dizionario[18].sinonimo[3], "proficuo");
    strcpy (dizionario[18].sinonimo[4], "giovevole");
    
    dizionario[19].lettera='v';
    strcpy(dizionario[19].nome,"vero");
    strcpy(dizionario[19].significato,"che possiede realmente la qualità che gli si attribuisce");
    strcpy (dizionario[19].sinonimo[0], "reale");
    strcpy (dizionario[19].sinonimo[1], "effettivo");
    strcpy (dizionario[19].sinonimo[2], "autentico");
    strcpy (dizionario[19].sinonimo[3], "puro");
    strcpy (dizionario[19].sinonimo[4], "originale");
    
    dizionario[20].lettera='z';
    strcpy(dizionario[20].nome,"zoa"); // è zona ma l ho accorciato a zoa per avere una parola corta
    strcpy(dizionario[20].significato,"che possiede realmente la qualità che gli si attribuisce");
    strcpy (dizionario[20].sinonimo[0], "fascia");
    strcpy (dizionario[20].sinonimo[1], "porzione");
    strcpy (dizionario[20].sinonimo[2], "territorio");
    strcpy (dizionario[20].sinonimo[3], "area");
    strcpy (dizionario[20].sinonimo[4], "striscia");

}
E ora la nota dolente in quanto non so che pesci prendere Ricerca Minimo
so che il codice è totalmente sbagliato ma non saprei rimediare

void Ricerca_min(struct parola dizionario[], int n )
{
	int i,k;
    char min="";
    strcpy(dizionario[0].nome,min);
	for(i=0;i<n;i++)
	{
		  if( min>dizionario[i].nome)
		  {  
		      strcpy(dizionario[i].nome,min);
		  }
	}
	printf("\nLa parola con meno caratteri e' %c",min);
	printf("\n");
}

3 Risposte

  • Re: Gestione Funzione ricerca minimo Help Please

    Quella condizione del tuo if non significa niente.
    Scusami a te cosa serve? La parola con meno caratteri? Si. Quindi devi contare i caratteri della parola perchè le confronti direttamente così?

    Devi usare la funzione strlen() e vedere quale delle due ha meno caratteri.
  • Re: Gestione Funzione ricerca minimo Help Please

    Grazie del suggerimento, ma siccome devo confrontare tutte le parola di dizionario.nome
    e scrivendo così:
    
    void Ricerca_min(struct parola dizionario[], int n )
    {
    	int i,k;
        
    	[b]for(i=0;i<n;i++)
    	{
    		  strlen( dizionario[i].nome);
    		  {  
    		      k=i;
    		  }
    	}[/b]
    	printf("\nLa parola con meno caratteri e' %s",dizionario[k].nome); 
    	printf("\n");
    }
    
    mi restituisce solo l' ultima parola, ma io vorrei cercare la minore in tutto l' array di struct come posso fare?
  • Re: Gestione Funzione ricerca minimo Help Please

    Risolto il problema, grazie ancora
Devi accedere o registrarti per scrivere nel forum
3 risposte