Dizionario Inglese-Italiano in C

di il
30 risposte

Dizionario Inglese-Italiano in C

Salve a tutti ho un esame ormai prossimo e un progetto QUASI completo ... sono riuscito a buttare giu un programma che riesce a tradurmi una parola immessa nel dizionario da italiano a inglese ma non riesco a tradurre un intera frase ... grazie a priori dell'aiuto
#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[]={"Abbattere","Abitante del sud","Affamato","Alzato","Avventura","Cane","Compleanno","Fondere","Gamba","Incontrare","Intenso","Maiale","Misto","Nota","Passeggiata","Potere","Quantità","Ristampa","Ritornare","Tempestivo","Vivace","Vuoto"};
    char *parole2[]={"abbattere","abitante del sud","affamato","alzato","avventura","cane","compleanno","fondere","gamba","incontrare","intenso","maiale","misto","nota","passeggiata","potere","quantitò","ristampa","ritornare","tempestivo","vivace","vuoto"};
    char *vocab[]={"Overthrow","Southerner","Hungry","Up","Adventure","Dog","Birthday","Found","Leg","Encounter","Intense","Pig","Mixed","Note","Walk-over","Can","Quantity","Reprint","Go back","Timely","Zippy","Void"};
    char testo[20],finepar[3];
    printf("Inserisci la parola da tradurre : ");
    gets(chiave);
    n=22;
    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;
}

30 Risposte

  • Re: Dizionario Inglese-Italiano in C

    Ok per il grazie a priori ... ma che aiuto ?
  • Re: Dizionario Inglese-Italiano in C

    Sono alle prime armi e studiando l'algoritmo di ricerca binaria sono riuscito a "buttare giù" questo programmino che però non rispecchia la richiesta della traccia la quale mi chiede non solo di tradurre un vocabolo ma un intera frase .... il concetto credo sia quello di "spacchettare" la frase e di tradurre ogni suo singolo vocabolo se inserito nel dizionario ma non riesco a mettere in atto tale pensiero !!
  • Re: Dizionario Inglese-Italiano in C

    Ovviamente non rispetterai le regole nella formazione delle frasi ... devi solamente tradurre le singole parole ...

    Quindi puoi utilizzare la funzione

    strtok

    per separare tutte le parole, passandole una per una alla funzione che traduce.
  • Re: Dizionario Inglese-Italiano in C

    Grazie per l'aiuto ho eseguito un semplice programmino nel quale inserivo io da tastiera una frase e mi dava in output la frase spacchetata come serve a me ora non riesco a far si che la parola spacchetata venga tradotta con l'algoritmo di ricerca binaria ...
  • Re: Dizionario Inglese-Italiano in C

    Ma questo codice dello "spacchettamento" dov'è?
  • Re: Dizionario Inglese-Italiano in C

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int ricerca_binaria(char chiave[], char *parole[], int n);
    void main ()
    {
    char chiave[50];
    int n,indice;
    //*sono stati creati due array di stringhe denominati *parola[] e *parole2[]in modo tale che in qualsiasi modo venga scritta la parola (maiuscolo o minuscolo )l'esecutore riesca a tradurla *//
    char *parole[]={"Abbattere","Abitante del sud","Affamato","Alzato","Avventura","Cane","Compleanno","Fondere","Gamba","Incontrare","Intenso","Maiale","Misto","Nota","Passeggiata","Potere","Quantità","Ristampa","Ritornare","Tempestivo","Vivace","Vuoto"};
    char *parole2[]={"abbattere","abitante del sud","affamato","alzato","avventura","cane","compleanno","fondere","gamba","incontrare","intenso","maiale","misto","nota","passeggiata","potere","quantitò","ristampa","ritornare","tempestivo","vivace","vuoto"};
    //*Rd un array di stringhe denominato *vocab[] contenente le corrispettive parole tradotte in inglese *//
    char *vocab[]={"Overthrow","Southerner","Hungry","Up","Adventure","Dog","Birthday","Found","Leg","Encounter","Intense","Pig","Mixed","Note","Walk-over","Can","Quantity","Reprint","Go back","Timely","Zippy","Void"};
    char testo[20],finepar[3];


    printf("Inserisci la frase da tradurre : ");
    gets(chiave);
    //*Questa funzione da quel che ho appena approfondito mi "spacchettera" la frase in parole *//
    char *word = strtok(chiave," .");
    //*questo procedimento verrà effetuato fino a che la frase non sia terminata *//
    while (word != NULL)
    {
    printf("%s\n",word);
    word = strtok (NULL," .");

    }
    //* n=22 indica il totale di vocaboli e parole presenti nel mio dizionario *//
    n=22;

    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");


    //*L'algoritmo di ricerca binaria é un algoritmo di ricerca di una chiava in un array ordinato di dati *//
    //* Ha come dati di input la chiave di ricerca,un array e il suo size,e ha come dato di output un dato scalare intero*//
    int ricerca_binaria(char chiave[], char *parole[], int n)
    {
    int mediano, primo=0, ultimo=n-1;
    //*Il while gestisce i passi dell'ARBINI.Il predicato di permanenza nel cilo primo <= ultimo indica che il processo iterativo *//
    //*continua se la posizione di array su cui effettuare la ricerca è costitutita da almeno un elemento. *//
    while (primo<=ultimo)
    {
    //*Ruolo importante è giocato dall'elemento centrale dell'array detto mediano *//
    mediano=(primo+ultimo)/2;
    if(strcmp(word,parole[mediano])==0)
    return mediano;
    else if(strcmp(word,parole[mediano])<0)
    //*Modificando il valore di ultimo si dovrà operare sulla semi-porzione di sinistra *//
    ultimo=mediano-1;
    else
    //*Modificando il valore di primo si dovrà operare sulla semi-porzione di destra *//
    primo=mediano+1;
    }

    }

    }
  • Re: Dizionario Inglese-Italiano in C

    E' nel ciclo in cui usi la strtok che devi passare la parola corrente alla funzione di ricerca e visualizzare il risultato.
  • Re: Dizionario Inglese-Italiano in C

    Potresti essere più chiaro per piacere ...
  • Re: Dizionario Inglese-Italiano in C

    Questo ciclo
    
    while (word != NULL)
    {
       printf("%s\n",word);
       
       word = strtok (NULL," .");
    } 
    
    ti consente di avere in word ogni parola della frase .... In questo ciclo devi passare word alla funzione di ricerca e visualizzi la traduzione (al posto della printf ...).
  • Re: Dizionario Inglese-Italiano in C

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int ricerca_binaria(char chiave[], char *parole[], int n);
    void main ()
    {
    char chiave[50];
    int n,indice;
    //*sono stati creati due array di stringhe denominati *parola[] e *parole2[]in modo tale che in qualsiasi modo venga scritta la parola (maiuscolo o minuscolo )l'esecutore riesca a tradurla *//
    char *parole[]={"Abbattere","Abitante del sud","Affamato","Alzato","Avventura","Cane","Compleanno","Fondere","Gamba","Incontrare","Intenso","Maiale","Misto","Nota","Passeggiata","Potere","Quantità","Ristampa","Ritornare","Tempestivo","Vivace","Vuoto"};
    char *parole2[]={"abbattere","abitante del sud","affamato","alzato","avventura","cane","compleanno","fondere","gamba","incontrare","intenso","maiale","misto","nota","passeggiata","potere","quantitò","ristampa","ritornare","tempestivo","vivace","vuoto"};
    //*Ed un array di stringhe denominato *vocab[] contenente le corrispettive parole tradotte in inglese *//
    char *vocab[]={"Overthrow","Southerner","Hungry","Up","Adventure","Dog","Birthday","Found","Leg","Encounter","Intense","Pig","Mixed","Note","Walk-over","Can","Quantity","Reprint","Go back","Timely","Zippy","Void"};
    char testo[20],finepar[3];


    printf("Inserisci la frase da tradurre : ");
    gets(chiave);
    //*Questa funzione da quel che ho appena approfondito mi "spacchettera" la frase in parole *//
    char *word = strtok(chiave," .");

    //*questo procedimento verrà effetuato fino a che la frase non sia terminata *//
    while (word != NULL)
    {
    //* tenendo conto del numero di parole del mio dizionario *//
    n=22;
    //*se l'indice sarà maiuscolo verrà ricercato attraverso la ricerca binaria nell'array parole[] *//
    indice=ricerca_binaria(chiave,parole,n);
    //*se l'indice sarà minuscolo verrà ricercato attraverso l'algoritmo di ricerca binaria nell'array parole2[] *//
    if (indice<0)
    indice=ricerca_binaria(chiave,parole2,n);

    if(indice>=0)
    //*se la parola viene trovata sarà tradotta grazie all'array vocab[] *//
    printf("%s: %s\n",*word,vocab[indice]);
    //*altrimenti comparirà la scritta chiave non trovata *//
    else
    printf("Chiave non trovata\n");


    //*Uscita dal ciclo:la parola é terminata *//
    word = strtok (NULL," .");
    };

    int ricerca_binaria(char chiave[], char *parole[], int n)
    {
    int mediano, primo=0, ultimo=n-1;
    //*Il while gestisce i passi dell'ARBINI.Il predicato di permanenza nel cilo primo <= ultimo indica che il processo iterativo *//
    //*continua se la posizione di array su cui effettuare la ricerca è costitutita da almeno un elemento. *//
    while (primo<=ultimo)
    {
    //*Ruolo importante è giocato dall'elemento centrale dell'array detto mediano *//
    mediano=(primo+ultimo)/2;
    if(strcmp(chiave,parole[mediano])==0)
    return mediano;
    else if(strcmp(chiave,parole[mediano])<0)
    //*Modificando il valore di ultimo si dovrà operare sulla semi-porzione di sinistra *//
    ultimo=mediano-1;
    else
    //*Modificando il valore di primo si dovrà operare sulla semi-porzione di destra *//
    primo=mediano+1;
    }

    }

    }

    Continuo A Sbagliare ..??!!
  • Re: Dizionario Inglese-Italiano in C

    Scusa... mi sembra ovvio che devi passare word alla funzione di ricerca e non chiave ...
  • Re: Dizionario Inglese-Italiano in C

    In pratica, nel ciclo dovrai passare word ... nella printf non usare *word ma word ...
    
    	while (word != NULL)
    	{ 
    		indice=ricerca_binaria(word,parole,22); 
    
    		if(indice>=0) 
    			printf("%s: %s\n",word,vocab[indice]);
    		else
    			printf("Chiave non trovata\n");
    
    		word = strtok (NULL," .");
    	}
    
  • Re: Dizionario Inglese-Italiano in C

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int ricerca_binaria(char word[], char *parole[], int n);
    void main ()
    {
    char chiave[50];
    int n,indice;
    //*sono stati creati due array di stringhe denominati *parola[] e *parole2[]in modo tale che in qualsiasi modo venga scritta la parola (maiuscolo o minuscolo )l'esecutore riesca a tradurla *//
    char *parole[]={"Abbattere","Abitante del sud","Affamato","Alzato","Avventura","Cane","Compleanno","Fondere","Gamba","Incontrare","Intenso","Maiale","Misto","Nota","Passeggiata","Potere","Quantità","Ristampa","Ritornare","Tempestivo","Vivace","Vuoto"};
    char *parole2[]={"abbattere","abitante del sud","affamato","alzato","avventura","cane","compleanno","fondere","gamba","incontrare","intenso","maiale","misto","nota","passeggiata","potere","quantitò","ristampa","ritornare","tempestivo","vivace","vuoto"};
    //*Ed un array di stringhe denominato *vocab[] contenente le corrispettive parole tradotte in inglese *//
    char *vocab[]={"Overthrow","Southerner","Hungry","Up","Adventure","Dog","Birthday","Found","Leg","Encounter","Intense","Pig","Mixed","Note","Walk-over","Can","Quantity","Reprint","Go back","Timely","Zippy","Void"};
    char testo[20],finepar[3];


    printf("Inserisci la frase da tradurre : ");
    gets(chiave);
    //*Questa funzione da quel che ho appena approfondito mi "spacchettera" la frase in parole *//
    char *word = strtok(chiave," .");

    //*questo procedimento verrà effetuato fino a che la frase non sia terminata *//
    while (word != NULL)
    {
    //* tenendo conto del numero di parole del mio dizionario *//
    n=22;
    //*se l'indice sarà maiuscolo verrà ricercato attraverso la ricerca binaria nell'array parole[] *//
    indice=ricerca_binaria(word,parole,n);
    //*se l'indice sarà minuscolo verrà ricercato attraverso l'algoritmo di ricerca binaria nell'array parole2[] *//
    if (indice<0)
    indice=ricerca_binaria(word,parole2,n);

    if(indice>=0)
    //*se la parola viene trovata sarà tradotta grazie all'array vocab[] *//
    printf("%s: %s\n",word,vocab[indice]);
    //*altrimenti comparirà la scritta chiave non trovata *//
    else
    printf("Chiave non trovata\n");


    //*Uscita dal ciclo:la parola é terminata *//
    word = strtok (NULL," .");
    };

    int ricerca_binaria(char word[], char *parole[], int n)
    {
    int mediano, primo=0, ultimo=n-1;
    //*Il while gestisce i passi dell'ARBINI.Il predicato di permanenza nel cilo primo <= ultimo indica che il processo iterativo *//
    //*continua se la posizione di array su cui effettuare la ricerca è costitutita da almeno un elemento. *//
    while (primo<=ultimo)
    {
    //*Ruolo importante è giocato dall'elemento centrale dell'array detto mediano *//
    mediano=(primo+ultimo)/2;
    if(strcmp(word,parole[mediano])==0)
    return mediano;
    else if(strcmp(word,parole[mediano])<0)
    //*Modificando il valore di ultimo si dovrà operare sulla semi-porzione di sinistra *//
    ultimo=mediano-1;
    else
    //*Modificando il valore di primo si dovrà operare sulla semi-porzione di destra *//
    primo=mediano+1;
    }

    }

    }

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int ricerca_binaria(char word[], char *parole[], int n);
    void main ()
    {
    char chiave[50];
    int n,indice;
    //*sono stati creati due array di stringhe denominati *parola[] e *parole2[]in modo tale che in qualsiasi modo venga scritta la parola (maiuscolo o minuscolo )l'esecutore riesca a tradurla *//
    char *parole[]={"Abbattere","Abitante del sud","Affamato","Alzato","Avventura","Cane","Compleanno","Fondere","Gamba","Incontrare","Intenso","Maiale","Misto","Nota","Passeggiata","Potere","Quantità","Ristampa","Ritornare","Tempestivo","Vivace","Vuoto"};
    char *parole2[]={"abbattere","abitante del sud","affamato","alzato","avventura","cane","compleanno","fondere","gamba","incontrare","intenso","maiale","misto","nota","passeggiata","potere","quantitò","ristampa","ritornare","tempestivo","vivace","vuoto"};
    //*Ed un array di stringhe denominato *vocab[] contenente le corrispettive parole tradotte in inglese *//
    char *vocab[]={"Overthrow","Southerner","Hungry","Up","Adventure","Dog","Birthday","Found","Leg","Encounter","Intense","Pig","Mixed","Note","Walk-over","Can","Quantity","Reprint","Go back","Timely","Zippy","Void"};
    char testo[20],finepar[3];


    printf("Inserisci la frase da tradurre : ");
    gets(chiave);
    //*Questa funzione da quel che ho appena approfondito mi "spacchettera" la frase in parole *//
    char *word = strtok(chiave," .");

    //*questo procedimento verrà effetuato fino a che la frase non sia terminata *//
    while (word != NULL)
    {
    //* tenendo conto del numero di parole del mio dizionario *//
    n=22;
    //*se l'indice sarà maiuscolo verrà ricercato attraverso la ricerca binaria nell'array parole[] *//
    indice=ricerca_binaria(word,parole,n);
    //*se l'indice sarà minuscolo verrà ricercato attraverso l'algoritmo di ricerca binaria nell'array parole2[] *//
    if (indice<0)
    indice=ricerca_binaria(word,parole2,n);

    if(indice>=0)
    //*se la parola viene trovata sarà tradotta grazie all'array vocab[] *//
    printf("%s: %s\n",word,vocab[indice]);
    //*altrimenti comparirà la scritta chiave non trovata *//
    else
    printf("Chiave non trovata\n");


    //*Uscita dal ciclo:la parola é terminata *//
    word = strtok (NULL," .");
    };

    int ricerca_binaria(char word[], char *parole[], int n)
    {
    int mediano, primo=0, ultimo=n-1;
    //*Il while gestisce i passi dell'ARBINI.Il predicato di permanenza nel cilo primo <= ultimo indica che il processo iterativo *//
    //*continua se la posizione di array su cui effettuare la ricerca è costitutita da almeno un elemento. *//
    while (primo<=ultimo)
    {
    //*Ruolo importante è giocato dall'elemento centrale dell'array detto mediano *//
    mediano=(primo+ultimo)/2;
    if(strcmp(word,parole[mediano])==0)
    return mediano;
    else if(strcmp(word,parole[mediano])<0)
    //*Modificando il valore di ultimo si dovrà operare sulla semi-porzione di sinistra *//
    ultimo=mediano-1;
    else
    //*Modificando il valore di primo si dovrà operare sulla semi-porzione di destra *//
    primo=mediano+1;
    }

    }

    }

    Continua a darmi errori tipo : undefined reference to 'ricerca _binaria' :@
  • Re: Dizionario Inglese-Italiano in C

    Controlla le parentesi graffe aperte e chiuse... Probabilmente ne manca qualcuna o sono messe al posto sbagliato.

    P.S. Ogni volta che proponi il codice usa i tag code nel forum e indentalo, in maniera che sta più leggibile.
Devi accedere o registrarti per scrivere nel forum
30 risposte