Newsgroup: it.comp.lang.delphi
Titolo: operatori AND e OR

Ciao a tutti, mi sento un idiota ma non ne vengo a capo!!!!
Se faccio questo:
2>3=false...e fin qui ci siamo,
(1>2)and(4>3)=false per chè 1 non è maggiore di 2 quindi il risultato 
è tutto falso,
(1>2)or(4>3)= false o true??
In sostanza sto diventato matto per sapere se l'ora attuale è compresa 
tra quattro orari che l'utente imposta,ad esempio dalle 8 alle 12 e 
dalle 15 alle 19, se l'ora attuale è compresa in questi intervalli 
deve venire eseguita una procedura. Il problema è che non trovo una 
soluzione perchè fino a che devo verificare tra due orari non ci sono 
problemi, però ce ne sono altri due e mi da sempre FALSE.
time1:=8.00;
time2:=12.00;
time3:=15.00;
time4:=19.00;
now:=11.00; (mettiamo che siano le 11);
if ((now>time1)and(now<time2)) then 
     //sono le 11 e il result è true e mi sta bene
....
se invece metto
if ((now>time1)and(now<time2))or((now>time3)and(now<time4)) then
....
//il result è sempre false perchè è vera la prima condizione ma è 
falsa la seconda tra time3 e 4.
Domanda: come faccio a sapere se l'orario attuale è compreso tra gli 
intervalli?
Grazie a tutti, ciao.
Inviato da 
www.mynewsgate.net

 falsa la seconda tra time3 e 4.
Impossibile: se la prima condizione è vera, la seconda condizione non viene
neanche elaborata.

now:=11.00; (mettiamo che siano le 11);
if (
   ((now >= time1) and (now<=time2))
OR ((now >= time3) and (now<=time4))
) then // ci siamo!
"Se now e' compreso nel primo intervallo OPPURE nel secondo..."
Avevi intuti giusto, devi usare l'OR perche' "O uno, O l'altro..." il
significato dell'OR e' che basta che una delle nmila condizioni sia vera, che
tutta l'or e' vera. (le altre possono anche essere false).
Ciao!
-- 
Morde. 
(
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

Avevi intuti giusto, 
       ^^^^^^
ehm.. intendevo "intuito".
ciao


falsa la seconda tra time3 e 4.
Stai sbagliando qualcosa. 
Se non ne sei convinto, prova questo codice in una applicazione console:
var
  time1, time2, time3, time4, tnow: double;
begin
  time1:=8.00;
  time2:=12.00;
  time3:=15.00;
  time4:=19.00;
  tnow:=11.00;
  WriteLn((1>2)or(4>3));
  Writeln(((tnow > time1) and (tnow<time2)) or ((tnow > time3) and (tnow <
time4)));
  ReadLn;
end.
*Deve* risultare due volte TRUE. Tra l'altro se la Boolean Short Circuit
Evaluation è abilitata, non dovrebbe neppure valutare la parte dopo l'or.
Ah, occhio a non chimare una variabile "now", c'è una funzione della VCL
con quel nome...
Luigi D. Sandon - D&amp;D Support Team
--- posted by geoForum on 
http://www.delphiedintorni.it

FUNZIONA FUNZIONA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Il malefico componente RxDateTimePicker che uso memorizza anche il 
valore della data e anche se io scrivo
..
Tnow:=time;
rxDatTimeMalefico.Time>TNow è sempre falso perchè il componente ha 
memorizzato la data del giorno in cui l'ho schiaffato sulla form e 
quindi è già passata. Allora prima di tutto dico
rxDateTimeMalefico.Date:=(now);
..
così lo frego e gli dico che giorno è oggi, e poi comparo l'ora con and 
e or e funziona!!!
Il codice che avevo scritto prima non l'ho modificato, ho solo assegnato 
al RxDateTime la data di oggi e funziona tutto, quindi AND e OR 
funzionavano correttamente solo che il result era false perchè la data 
era vecchia e quindi anche l'ora era riferita a quel giorno.
Mi sembra strano perchè io chiedo solo l'ora e comunque sia mi verifica 
anche il giorno, comunque con questa soluzione funziona e per ora non è 
importante il perchè ma è importante che vada.
GRAZIE A TUTTI!!!! 
 
Inviato da 
www.mynewsgate.net