Newsgroup: it.comp.lang.javascript
Titolo: controllo su variabili (aiuto)

Innanzi tutto chiedo scusa per la banalità del quesito, ma sono
davvero agli inizi con JS. Dico questo per non dare eccessivo fastidio
ai tanti "GURU" che frequentano il ng.
vengo alla domanda:
all'interno di un form, ammettiamo che io abbia due variabili
dicotomiche con valori 0 e 1 (per esempio v1 e v2) 
allora 
se v1=0 e v2=0 allora v3 sarà uguale a "a"
se v1=1 e v2=0 allora v3 sarà uguale a "b"
se v1=0 e v2=1 allora v3 sarà uguale a "c"
se v1=1 e v2=1 allora v3 sarà uguale a "d".
v3 dovrebbe essere una variabile nascosta e dovrebbe apparire
automaticamente come risultato del form (ma a questo penso di saperci
arrivare).
Vorreste essere così gentili da aiutarmi?
grazie

 se v1=1 e v2=1 allora v3 sarà uguale a "d".
Credo possa tradursi cosi':
if (v1==0 && v2==0) { 
v3="a";
}
else if (v1==1 && v2==0) {
v3="b";
}
else if (v1==0 && v2==1) {
v3="c";
}
else if (v1==1 && v2==1) {
v3="d";
} }
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)

grazie 1000 ma sono ancora in alto mare. ho postato un altro
messaggio, vedi, per piacere se puo darci una occhiata.
grazie ancora.


 se v1=1 e v2=1 allora v3 sarà uguale a "d".
v3 = new Array("a", "b", "c", "d")[v2 * 2 + v1];
Maurizio.

 Vorreste essere così gentili da aiutarmi?
Allora, premesso che se sistemi le tue condizioni forse le leggi meglio:
se v1=0 e v2=0 allora v3 sarà uguale a "a"
se v1=0 e v2=1 allora v3 sarà uguale a "c"
se v1=1 e v2=0 allora v3 sarà uguale a "b"
se v1=1 e v2=1 allora v3 sarà uguale a "d".
mi vengono in mente almeno 5 maniere di risolvere :-)
Due maniere banali, due "furbe", ed una "elegante" come diceva il mio prof. di 
Fisica :-)
- La prima usa un banalissimo "if () ... else ()" che magari ti pure offendi se 
te lo propongo! :-)
Questo non l'ho provato, ma dovrebbe essere corretto fatto in questa maniera:
if (v1==0)
	if (v2==0)
		v3="a"
	else
		v3="c";
else
	if (v2==1)
		v3="b"
	else
		v3="d";
- La seconda rielabora la prima.
Tenendo conto che per JavaScript dire "0" significa dire "false" e dire "1" 
significa "true" il ciclo si semplifica (da scrivere e leggere) in questo modo:
if (v1)
	if (v2)
		v3="d"
	else
		v3="b";
else
	if (!v2)
		v3="a"
	else
		v3="c";
- La terza fa uso dell'operatore ternario " (condizione)?[se vero]:[se falso] "
(questa l'ho provata e funziona): v3=v1==0?v2==0?"a":"c":v2==1?"d":"b";
- La quarta, come la seconda, si semplifica:
v3=v1?v2?"d":"b":!v2?"a":"c";
Provata anche questa.
Nota che cambia l'ordine delle lettere risultato perche' nei primi due casi 
iniziamo la verifica da "0-false", nelle seconde iniziamo da "1-true".
-------
Per la quinta, ti chiedo di guardare bene la sequenza di "1" e "0" della tua 
tabella come l'ho riscritta io:
se v1=0 e v2=0 allora v3 sarà uguale a "a"
se v1=0 e v2=1 allora v3 sarà uguale a "c"
se v1=1 e v2=0 allora v3 sarà uguale a "b"
se v1=1 e v2=1 allora v3 sarà uguale a "d".
Ottieni:
0 0
0 1
1 0
1 1
Che non e' altro che contare da 0 a 3 in binario:
0 0 = 0
0 1 = 1
1 0 = 2
1 1 = 3
Dunque se i tuoi valori a,b,c,d li metti in un array (sempre con il *mio* 
ordinamento):
var lettere=new Array("a","c","b","d");
puoi leggerli puntanto all'array.
Non ti resta che trasformare i tuo valori binari in decimale, e lo puoi fare 
usanto parseInt() che oltre a far diventare numeri interi le stringhe, le 
stesse stringhe le puo' anche convertire in numeri *DA* base n *A* decimale.
Ad esempio
	parseInt("10100101",2) restituisce 165.
Allora non ci resta che prendere le variabili "v1" e "v2", sommarle come 
fossero stringhe (ci basta sommarle con una stringa vuota: ""+v1+v2), ottenerne 
un numero binario che convertiamo a decimale con parseInt(numero,base) ed usare 
il numero convertito per pescare dall'array.
In due righe:
var lettere=new Array("a","c","b","d");
v3=l[parseInt(""+v1+v2,2)];
Buon divertimento! :->>
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
              All the JavaScript you need
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------

Il Fri, 27 Jul 2001 16:19:36 GMT, Maurizio. ha scritto.....

Questa la chiamo una "figata"!!! :-))))


 Questa la chiamo una "figata"!!! :-))))
Quest'altra mi sembra anche meglio: :-)
v3 = "abcd".charAt(v2*2 + v1);
Ciao,
Maurizio.

non ho davvero parole per esprimervi la mia gratitudine.