Devo analizzare dei dati relativi a N "oggetti" (potrebbero essere persone, prodotti o altro) per ciascuno dei quali dispongo
di due tipi di informazioni numeriche P e Q.
P(i) e Q(i) siano le informazioni relative all'oggetto i-esimo.
Con un programma o un'altra applicazione devo contare il totale Tot degli oggetti che rientrano in almeno una tra le seguenti categorie:
- oggetti che hanno P maggiore di Q
- oggetti che hanno solo una delle due informazioni uguale a 1
Come devo indicare, usando gli operatori logici, la condizione che corrisponde agli oggetti da conteggiare?
Ossia, se, ad es., impiegassi R, cosa dovrei mettere al posto di CCC nella seguente istruzione?
T <- 0; for(i in 1:N) if(CCC) T <- T+1
(a) Rispondi come ritieni meglio usando operatori scelti tra ! (NOT), | (OR), & (AND) e xor
(b) Rispondi uando solo !, & e |
(c) Rispondi usando solo ! e &
["è maggiore o uguale a", "è minore o uguale a", "è diverso da" si indicano con, rispettivamente,
">=", "<=", "!="]
(a) P(i) > Q(i) | xor(P(i)==1,Q(i)==1)
(b) P(i) > Q(i) | ((P(i)==1 | Q(i)==1) & NOT((P(i)==1 & Q(i)==1))
o: P(i) > Q(i) | ((P(i)==1 & Q(i)!=1) | ((Q(i)==1 & P(i)!=1))
(c) !(P(i) <= Q(i) & !(P(i)==1 & Q(i)==1) & !(P(i)!=1 & Q(i)!=1)
Alle risposte si arriva facilmente con un po' di ragionamento.
Esse potrebbero essere controllabili con le tavole di verità. A mano sarebbe una cosa un po' lunga.
Possiamo usare un foglio eletronico o, più comodamente, un programma. Verifichiamo ad es. l'equivalenza
tra (a) e (b) con R, tenendo conto che TRUE e FALSE possono essere rappresentate con 1 e 0.
Per l'uso di "cat" vedi qui; per "\t" vedi qui.
for(A in 1:0) for(B in 1:0) for(C in 1:0) cat( A,B,C, '\t', A|xor(B,C), '\t', A | ( (B & !C)|(C & !B) ), '\n' ) 1 1 1 TRUE TRUE 1 1 0 TRUE TRUE 1 0 1 TRUE TRUE 1 0 0 TRUE TRUE 0 1 1 FALSE FALSE 0 1 0 TRUE TRUE 0 0 1 TRUE TRUE 0 0 0 FALSE FALSE