Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C++] confronto array elementi diversi

    ciao raga, mi servirebbe una mano, sto facendo un po' di pratica con il c++, e nn so come, volevo fare un programmino che dati due vettori numerici (di uguale lunghezza) mi stampasse a video tutti gli elementi non comuni ai due vettori

    mi potete dare una mano a fare questo semplice prorammino ci sto sbattendo la testa da giorni

    grazie

  2. #2
    asp vi faccio un esempio:

    ho due vettori:
    V1 V2

    1 1
    7 3
    8 4
    9 9
    5 5
    4 0

    il risultato dovrebbe essere:

    7 3 8 0

    aiutatemi

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Immagino che l'output dovesse essere un po' diverso.. manca il 4 che differisce nel primo vettore, ultimo elemento.
    Comunque, il programma è abbastanza semplice:
    codice:
    #include <iostream>
    using namespace std;
    
    int main() {
       // creiamo i vettori e li popoliamo
       int v1[10] = {1, 5, 7, 3, 4, 0, 2, 6, 8, 9};
       int v2[10] = {5, 7, 2, 3, 4, 0, 1, 9, 6, 8};
       int i = 0;
       
       // Ora li confrontiamo:
       for(i=0; i<10; i++) {
          if (v1[i] != v2[i]) {   // se troviamo delle differenze...
             cout << v1[i] << "   " << v2[i] << endl;   // ... le stampiamo!
          }
       }
    
       return 0;
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Mmmmh..non mi sembra che questa soluzione sia corretta,ora la provo ma a naso non mi sembra.io ne ho buttato giù una in c,poi te la converti tu in c++ tanto è semplice.
    codice:
    #include <stdio.h>
    int not_condiv(int a1[], int a2[],int elements[],int len);
    
    int main()
    {
        //Poi vedi tu come acquisire gli array e la diemensione
        int len = 6,dim,i;
        int a1[] = {1,7,8,9,5,4};
        int a2[] = {1,3,4,9,5,0};
        int* elements = (int*)malloc(sizeof(int) * 2 * len) ;
        dim = not_condiv(a1,a2,elements,len);
        for(i=0;i<dim;i++)
            printf("%d ",elements[i]);
        getchar();
        free(elements);
    }
    int not_condiv(int a1[], int a2[],int *elements,int len)
    {
        //questa è la soluzione più ingenua poi sicuramente
        //si può fare di meglio ma ora non ho tempo per pensarci
        int i,j,flag,dir,k=0;
        int *ar1,*ar2;
        for(dir = 0 ;dir < 2; dir++)
        {
            if(dir)
            {
                ar1 = a1;
                ar2 = a2;
            }
            else
            {
                ar1 = a2;
                ar2 = a1;
            }
            for (i = 0; i<len ; i++)
            {
                flag = 0;
                for(j = 0;j<len;j++)
                        flag |= (ar1[i] == ar2[j]);
                if(!flag)
                        elements[k++] = ar1[i];
            }
        }
        return k;
    }
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    xò complimenti io ci sto sbattendo la testa da due GG XD
    ho ancora molto da imparare.

    e pensare che x giungere alla soluzione (ma cmq nn mi veniva) facevo: creo vettore e ci butto gli elementi comuni, unisco gli array iniziali e da questo nuovo array elimino i comuni
    e cmq nn mi veniva!

    sei mitico!

    una sola cosa, che significa flag |= ??

    ps: imparerò il codice a memoria

  6. #6
    codice:
    for (i = 0; i<len ; i++)
            {
                flag = 0;
                for(j = 0;j<len;j++)
                        flag |= (ar1[i] == ar2[j]);
                if(!flag)
                        elements[k++] = ar1[i];
            }
    flag significa bandierina in inglese,in pratica è un indicatore (che ad ogni ciclo viene posto a zero) del fatto che almeno un elemento in ar2 sia uguale a quello correntemente in esame di ar1.

    codice:
    flag |= (ar1[i] == ar2[j]); sta per flag = flag | ((ar1[i] == ar2[j]);
    ,il simbolo | è un OR, il valore di flag alla fien del ciclo sarà ad uno solo e soltanto se almeno un elemento del secondo array è uguale a quello in esame del primo array,se flag resta a zero l'elemento corrente va inserito nell'insieme finale da restituire

    Hai ancora molto da imparare magari ma se impari questo a memoria non sei sulla buona strada per progredire,devi cercare di capire ogni singola istruzione e soprattutto provare sempre per tuo conto dopo aver imparato dal codice degli altri
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Mi sa che non avevo capito bene quello che chiedeva... Pensavo che dovesse confrontare gli elementi nella stessa posizione all'interno dei due array...

    Infatti mi sembrava troppo banale...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    chiaro, praticamente è come +=, /= ecc giusto? soltanto che lo esegue se si verifica la condizione (ar1[i] == ar2[j])
    una cosa simile si sarebbe potuta fare utilizzando if,else
    ho capito bene?

    ps: ovviamente nn indendevo che mi sarei imparato il codice a memoria (ma pensavo fosse sottointeso) il suo funzionamento.

    cmq grazie x la disponibilità e i chiarimenti


  9. #9
    Originariamente inviato da LeleFT
    Mi sa che non avevo capito bene quello che chiedeva... Pensavo che dovesse confrontare gli elementi nella stessa posizione all'interno dei due array...

    Infatti mi sembrava troppo banale...


    Ciao.
    Capita.Anche io a colpo d'occhioho capito così ma poi ho letto meglio.Ciao ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  10. #10
    forse mi sono spiegato un po' male

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.