Ricerca elementi tra due array

di Anonimizzato13790 il
13 risposte
Si scriva un programma completo in C++ che, lette da input due sequenze di caratteri entrambe terminate dal
carattere “.” (PUNTO), verifichi se le sequenze sono “disgiunte”. Due sequenze si dicono disgiunte se non
hanno elementi in comune. Nel caso in cui le due sequenze siano disgiunte, il programma deve stampare su
standard output la stringa DISGIUNTE. Qualora invece le due sequenze non fossero disgiunte, il programma
deve stampare il primo carattere della prima sequenza in comune con la seconda.
ESEMPIO: le due sequenze a b a c d . e e f g . sono disgiunte; quindi il programma dovrebbe stampare
DISGIUNTE.
invece, le due sequenze a b a c d . e e f c g b . non sono disgiunte; il programma dovrà stampare b poiché ‘b’
è il primo carattere della prima sequenza che si trova anche nella seconda....


bool controllo(char string_a[], char string_b[],int cont,int cont2);
bool controllo(char string_a[], char string_b[],int cont,int cont2)
{
for(int x=0; x<dim; x++)
{
for(int y=0; y!=x && y<dim; y++)
{
if (string_a [x] != string_b [y])
return true;
return false;
}
}
}
int main()
{
char string_a[dim];
char string_b[dim];
char c;
char s;
int cont=0;
int cont2=0;
while(c != '.')
{
cin>>c;
string_a[cont]=c;
cont++;

}
while (s != '.')
{
cin>>s;
string_b[cont2]=c;
cont2++;
}
if(controllo( string_a, string_b, cont, cont2))
cout<<"DISGIUNTE";
else
cout<<"non disgiunte";
return 0;
}
per adesso ho scriito questo ma nn riesco a fare l algoritmo che mi controlla i due array della funzione controlllo..... grazie per chiarimenti

13 Risposte

  • Perche questo algoritmo nel mio programma non funziona????

    for(int x=0; x<cont2-1; x++)
    for(int y=0 ;y<cont-1; y++)
    if (string_a [x] == string_b [y])
    {

    cout<<string_a[x];
    return 0;
    }
    cout<<"DISGIUNTE";


    mi dice sempre disgiunte
  • Quando valgono cont e cont2 prima di entrare nei cicli?
  • oregon ha scritto:


    Quando valgono cont e cont2 prima di entrare nei cicli?
    0....il resto del programma è sopra solo che al posto della funzione ho inserito quell algoritmo
  • Se le due variabili valgono 0, le for non saranno eseguite ... ecco perché visualizzi sempre "disgiunte".

    Controlla perché quei due contatori sono a zero.
  • oregon ha scritto:


    Se le due variabili valgono 0, le for non saranno eseguite ... ecco perché visualizzi sempre "disgiunte".

    Controlla perché quei due contatori sono a zero.
    cont e cont 2 rappresentano le dimensioni delle due stringhe....li ho inizializzati a 0 e ogni volta che inserisco un carattere aumentano di 1....scusa mi sono confuso prima
  • Allora ripeto ... prima di entrare nei cicli, hai controllato l'effettivo valore delle due variabili?
  • oregon ha scritto:


    Allora ripeto ... prima di entrare nei cicli, hai controllato l'effettivo valore delle due variabili?
    si si e sono uguali alla lunghezza della stringe
  • Ma il codice completo è quello del primo post (che non si riesce a leggere ...)?
  • oregon ha scritto:


    Ma il codice completo è quello del primo post (che non si riesce a leggere ...)?
    si quello
  • Ma quello è diverso dalle doppie for che hai postato adesso.

    E poi l'input delle stringhe è poco sensato (oltre che sbagliato ad esempio in string_b[cont2]=c; )

    Proponi un codice completo, scritto tra i tag CODE (e quindi leggibile), compilabile senza errori e solo in quel caso ne discutiamo ... così non saprei cosa provare e andremmo avanti perdendo tempo tutti e due.
  • oregon ha scritto:


    Ma quello è diverso dalle doppie for che hai postato adesso.

    E poi l'input delle stringhe è poco sensato (oltre che sbagliato ad esempio in string_b[cont2]=c; )

    Proponi un codice completo, scritto tra i tag CODE (e quindi leggibile), compilabile senza errori e solo in quel caso ne discutiamo ... così non saprei cosa provare e andremmo avanti perdendo tempo tutti e due.
    using namespace std;
    const int dim=50;

    int main()
    {
    char string_a[dim];
    char string_b[dim];
    char c;
    char s;
    int cont=0;
    int cont2=0;
    while(c != '.')
    {
    cin>>c;
    string_a[cont]=c;
    cont++;

    }
    while (s != '.')
    {
    cin>>s;
    string_b[cont2]=c;
    cont2++;
    }
    for(int x=0; x<cont-1; x++)
    for(int y=0 ;y<cont2-1; y++)
    if (string_a [x] == string_b [y])
    {

    cout<<string_a[x];
    return 0;
    }
    cout<<"DISGIUNTE";

    return 0;
    }

    questa versione compila soltanto che mi da sempre disgiunte ....se riesci ad aggiustare qualcosa va bene senno grazie per la disponibilita
  • Io vedo che c ed s non sono inizializzati per i primi due while(); sarebbe meglio inizializzarli anche se di sicuro non è il problema.
    Per capire dove sbagli, e risolvere il problema, ti suggerisco di inserire delle printf() nei punti strategici per vedere i valori di cont e cont2 (ad esempio stampa il contenuto di string_a [x] e string_b [y] ad ogni test che fai...).
  • Risolto grazie a tutti
Devi accedere o registrarti per scrivere nel forum
13 risposte