AND vettore

di il
5 risposte

AND vettore

Dovrei calcolare l'and di un vettore di dim 15 è esatto così?

#include <iostream>
#include <cstdlib>
#include <ctime>

#define dim 15

using namespace std;

int main(){

bool vet[dim]={0};
time_t t;
int i,x;


srand((unsigned)time(&t));

cout<<"Vettore:"<<endl;
for(i=0;i<dim;i++){
    x= rand()%2;
    if(x==0){vet[i]=false;}
    else{vet[i]=true;}
}
for(i=0;i<dim;i++){
    cout<<vet[i]<<" ";
}
int AND=vet[0];
cout<<endl<<endl;

cout<<"L'AND e'"<<endl;
for(i=0;i<dim;i++){
    AND &= vet[i];
}
cout<<AND;
return 0;
}

5 Risposte

  • Re: AND vettore

    Per essere giusto è giusto. Però il risultato sarà zero nel 99,97% dei casi
  • Re: AND vettore

    Weierstrass ha scritto:


    Per essere giusto è giusto. Però il risultato sarà zero nel 99,97% dei casi
    Ok grazie, pensavo mi dovesse restituire true o false apposta credevo fosse sbagliato. E se dovessi calcolare l'OR basterebbe sostituire a simbolo
    &=
    il simbolo
    |=
    , giusto?
  • Re: AND vettore

    Anche SE ""false"" e' rappresentato con 0 e ""true"" e' rappresentato con qulcosa che e' DIVERSO da zero (1 e'un valore valido)

    NON TRATTARE i valori booleani come interi.

    E' CONCETTUALMENTE SBAGLIATO.

    Non si dovrebbe MAI mescolare i ""domini"" dei valori (in questo caso ""interi"" e ""boolean""), a meno di non sapere ESATTAMENTE che e' quello che si vuol fare.

    In questo caso ""NON E' il caso""

    Ed infatti stai facendo una serie di pasticci CONCETTUALI:
    stai mescolando operazioni tra boolean con operazioni tra bit.
    
    vett[i]=false
    
    va bene MA
    
    int AND=vet[0];
    
    stai convertendo un boolean in un intero: e' ESATTAMENTE quello che volevi fare?? Non penso, ma questo lo sai solo tu
    
    AND &= vet[i];
    
    stai mescolando operazioni tra bit (&=) con un valore booleano convertito in intero.

    Ricorda che
    a && b
    viene valutato tra BOOLEAN e ritorna un boolean
     a & b
    viene valutato tra INTERI e ritorna un intero.

    NON SONO la stessa cosa, anche se in PARTICOLARI condizioni ritornano valori compatibili (nel senso che considerando il risultato e' lo stesso considerando il valore come intero oppure boolean).
  • Re: AND vettore

    migliorabile ha scritto:


    Anche SE ""false"" e' rappresentato con 0 e ""true"" e' rappresentato con qulcosa che e' DIVERSO da zero (1 e'un valore valido)

    NON TRATTARE i valori booleani come interi.

    E' CONCETTUALMENTE SBAGLIATO.

    Non si dovrebbe MAI mescolare i ""domini"" dei valori (in questo caso ""interi"" e ""boolean""), a meno di non sapere ESATTAMENTE che e' quello che si vuol fare.

    In questo caso ""NON E' il caso""

    Ed infatti stai facendo una serie di pasticci CONCETTUALI:
    stai mescolando operazioni tra boolean con operazioni tra bit.
    
    vett[i]=false
    
    va bene MA
    
    int AND=vet[0];
    
    stai convertendo un boolean in un intero: e' ESATTAMENTE quello che volevi fare?? Non penso, ma questo lo sai solo tu
    
    AND &= vet[i];
    
    stai mescolando operazioni tra bit (&=) con un valore booleano convertito in intero.

    Ricorda che
    a && b
    viene valutato tra BOOLEAN e ritorna un boolean
     a & b
    viene valutato tra INTERI e ritorna un intero.

    NON SONO la stessa cosa, anche se in PARTICOLARI condizioni ritornano valori compatibili (nel senso che considerando il risultato e' lo stesso considerando il valore come intero oppure boolean).
    Ok ora mi è più chiaro grazie, in questo caso se volessi ottenere un boolean come risultato dovrei mettere && quindi? E soprattutto convertire l’and in bool?
  • Re: AND vettore

    
    #include <iostream>
    #include <iomanip>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    #define DIM 3
    
    int main(){
    
    bool vet[DIM];
    int i;
    
    srand(time(NULL));
    
    cout<<"Vettore:"<<endl;
    for(i=0;i<DIM;i++){
        vet[i] = rand() & 1;
        cout << boolalpha << vet[i] <<" ";
    }
    cout << endl;
    
    bool AND = vet[0];
    
    cout<<"L'AND e'"<<endl;
    for(i=1;i<DIM;i++)
        AND &= vet[i];
    cout << boolalpha << AND;
    return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte