Programma c++

di il
6 risposte

Programma c++

DATI 2 VETTORI CONTENENTI UNO LE PAROLE IN ITALIANO IN ORDINE ALFABETICO E L'ALTRO LE CORRISPONDENTI IN INGLESE (NATURALMENTE NON IN ORDINE ALFABETICO), CREARE UN PROGRAMMA A MENU CHE PERMETTA:
1)INSERIRE I DATI NEI DUE VETTORI
2)RICERCARE UNA PAROLA IN ITALIANO E STAMPARE LA CORRISPONDENTE IN INGLESE
3)RICERCARE UNA PAROLA IN INGLESE E STAMPARE LA CORRISPONDENTE IN ITALIANO
ES:
ITALIANO
ALBERGO ALBERO .......... CANE CASTELLO
INGLESE
HOTEL TREE ............. DOG CASTLE
questo è quello che ho fatto ma non riesco a fare i due algoritmi principali
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
string vet[20],vet1[20];
int i=0;
int n;
int main(int argc, char *argv[])
{int scelta;

    do{
    cout<<"menu:"<<endl;
    cout<<endl;
    cout<<"1) Ricercare una parola in italiano e stampare la corrispondente in inglese"<<endl;
    cout<<"2) Ricercare una parola in inglese la corrispondente in italiano"<<endl;
    
    
              cout<<"inserisci la scelta=";
              cin>>scelta;
               }while(scelta<1 || scelta>2);
              
              do { cout<<"inserisci n elementi=";
                  cin>>n;
                  }while(n<0 || n==0 );
                  
                   
                  do{i=i+1;
                  cout<<"inserisci la parola in italiano=";
                  cin>>vet[i];
                  cout<<"inserisci la parola in inglese=";
                  cin>>vet1[1];
                  }while(i<n);
              switch(scelta){
                             case 1:
                                 
                                  break;
                                  case 2:
                                       break;
             
             }
                  
                              
    system("PAUSE");
    return EXIT_SUCCESS;
}
Edit skynet: inserimento code tags

6 Risposte

  • Re: Programma c++

    Sarebbe utile incorpare il binomio italiano-inglese in una struttura del tipo:
    
    struct Parola{
        string italiano;
        string inglese;
    };
    
    così hai la giusta corrispondenza senza la necessità di aggiustare eventuali indici di posizione (infatti se inserisci una nuova parola 'italiano' nel corrispondente vettore ordinato, dovrai agire di conseguenza anche sull'altro vettore per le parole inglesi.
    Inoltre dato che ti trovi in C++, consiglio l'utilizzo della std::vector per il vettore e l'algoritmo della STL 'sort' per l'ordinamento;
  • Re: Programma c++

    È possibile utilizzare la ricerca sequenziale o quella binaria?????
  • Re: Programma c++

    Si è possibile. Se proprio vuoi utilizzare gli array e non 'vector' , puoi lo stesso usare gli algoritmi 'qsort' e 'bsearch' contenuti nello std. qui alcune informazioni:
    http://cplusplus.com/reference/clibrary/cstdlib/qsort
    e qui
    http://cplusplus.com/reference/clibrary/cstdlib/bsearch/
  • Re: Programma c++

    Abbiamo appena iniziato i vettori e quei due algortmi che mi hai citato sono per me ora incomprensibili grazie lo stesso
  • Re: Programma c++

    Figurati . Ti ho citatato 'qsort' e 'bsearch' perché risultano estremamente utili nel caso in cui bisogna effettuare un ordinamento o una ricerca binaria su un array di qualsiasi tipo , anche di una struttura o classe implementata da te. Infatti questi due algoritmi utilizzano una funzione di comparazione definita in modo standard,ricevuta come parametro, così che l'ordinamento o la ricerca avvengono in base a ciò che la funzione da te scelta restituisce. La funzione di comparazione deve essere del tipo
     int QualsiasiNomeFunzione(const void *a,const void *b)
    ed essa deve restituire
    
     a == b  ----> valore nullo (0)
     a > b ------> int >0 (es. 1)
     a < b ------> int <0 (es. -1)
    
    Usando una funzione di questo tipo, sei tu a decidere in base a quali criteri 'a' è minore, maggiore o uguale a 'b' . Nel tuo specifico caso, essendo l'ordinamento fatto solo sui vocaboli italiani, ed utilizzando la struttura da me precedentemente suggerita, si può usare 'qsort' ad esempio:
    
    struct Parola{
        string ita;
        string eng;
    };
    
    int Compara_Ita(const void *a,const void *b){
        Parola *lop = (Parola*)a;  //casting da void* a Parola*
        Parola *rop = (Parola*)b;
        if(lop->ita == rop->ita) return 0; //se i vocaboli in 'ita' sono uguali ritorno un valore nullo
        else if (lop->ita > rop->ita) return 1; //altrimenti se 'ita' di a è maggiore di 'ita' di b ritorno un valore positivo
        else return -1; //altrimenti un valore negativo
    }
    
    int main(){
        Parola dizionario[20]; //dichiaro un dizionario ita-eng di 20 elementi;
        for(int i=0;i<20;i++){
            cout<<"\n Vocabolo n."<<i+1;
            cout<<"\n     ita: ";cin.getline(dizionario[i].ita,100);
            cout<<"\n     eng: ";cin.getline(dizionario[i].eng,100);
        }
        //ordino il dizionario in ordine alfabetico su 'ita'
        qsort(dizionario,20,sizeof(Parola),Compara_Ita);
    }
    
    Spero che ti abbia fatto capire un pò l'utilità di tali algoritmi
  • Re: Programma c++

    Grazie sei stato molto gentile
Devi accedere o registrarti per scrivere nel forum
6 risposte