Newsgroup: it.comp.lang.delphi
Titolo: Problema con if...then...else

ho un codice del tipo
....
if ([condizione1]and[condizione2]and[condizione3]) then
        begin
                [istruzioni]
        end;
else [istruzione]
.....
Benkč le condizioni siano TRUE (verificate ad 1 ad 1 e tutte insieme con
l'evaluate/modify) il Delphi mi salta all'else e questo succede solo alcune
volte, in altri casi se la condizione č vera mi esegue le [istruzioni].
Non riesco a capire il problema, aiuto!!!
--
Ciao dal "(S)Kaiser"
akira_sendo[at]
libero.it
Togli "NOSPAM" per risposte via E-Mail
----------
When i'm walking a dark road I am a man who walks alone
----------
Dio nn č ke il primo e fino ad ora meglio riuscito esempio di strategia di
marketing basata sull'immagine
[M.B.]

 volte, 
Se e' vero che le condizioni sono tutte true, questo
non e' possibile.  Non so se il problema sia attribuibile
al fatto che "and", in Pascal, vuol dire sia and logico
che and bit a bit, ma non credo, perche' il linguaggio
esegue uno strong-type checking ed e' quindi impossibile
cadere in codice ambiguo.  Dovresti postare il codice reale,
con la specificazione di tutti i tipi di variabile 
coinvolti.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

""(S)Kaiser"" <akira_se...@libNOSPAMero.it> ha scritto nel messaggio
news:HKK18.4790$ly.1...@twister1.libero.it...

Prova cosi
if ([condizione1])and([condizione2])and([condizione3]) then


""(S)Kaiser"" <akira_se...@libNOSPAMero.it> ha scritto nel messaggio
news:HKK18.4790$ly.1...@twister1.libero.it...

Se le condizioni sono del tipo (numero1=numero2 ) ed i numeri sono di tipo
double o extended
e' possibile che, anke se li vedi uguali nell'evaluate, ci sia una piccola
differenza (di solito alla settima cifra decimale....)
Devi arrotondare almeno alla sesta (non usare la round di delphi, e'
bacata).
Usa questa:
RoundExtended(x, 100)  //Arrotonda x al secondo decimale
(* Arrotonda un numero Extended al numero di decimali richiesti *)
Function RoundExtended(Value : Extended; nRound : Extended): Extended;
var
   E : Extended;
begin
   E := Value * nRound;
   if E < 0 then
      E := E - 0.5
   else
      E := E + 0.5;
   E := int(E);
   E := E / nRound;
   Result := E;
end;

 bacata).
[...]
Come bacata? puoi portare qualche esempio?
Saluti
Paolo Arosio

"\"\(S\)Kaiser\" <akira_se...@libNOSPAMero.it> wrote in message
news:HKK18.4790$ly.1...@twister1.libero.it...
 > ho un codice del tipo
 >
 > ....
 > if ([condizione1]and[condizione2]and[condizione3]) then
 >         begin
 >                 [istruzioni]
 >         end;
 > else [istruzione]
 > .....
 >
Ma sei proprio sicuro che nel tuo codice ci sia un ' ; '
subito prima l' else ?!!?  O l'hai digitato erroneamente
qui nel body dalla mail ??
Cosi' come l'hai scritto ti salta direttamente all'else
per disperazione :)
Le parentesi quadre ci stanno solo per motivi
di spiegazione in questo contesto o le hai usate
veramente ?
saluti,
Lorenzo

 
sono istruzioni che uso parecchio e mi funzionano cosě
 if (condizione1)and(condizione2)and(condizione3) then
   begin
   end
   else
   begin
   end;
senza ; dopo il primo end, parentesi tonde e non quadre e prova a mettere
anche begin & and per l'else anche se hai una sola istruzione
ciao


 coinvolti.
dati[x].giocatore[x].ruolocampo č stringa
dati[x].giocatore[x].entrato č stringa
flag č boolean
----------> l'if ke da i problemi
For Contatore3 := 1 To 6 Do
Begin
    flag:=False;
    TOT := 0;
    For Contatore := 1 To 5 do //Calcolo
    Begin
        temp:=dati[contatore3].giocatore[contatore].totale;//integer
        If dati[contatore3].giocatore[contatore].totale <>null then
        begin
             //Routine di controllo del punteggio
             If dati[contatore3].giocatore[contatore].totale < 10 Then
                begin
                     For Contatore2 := 6 To 11 do
                         begin
------>  if
(dati[contatore3].giocatore[contatore].ruolocampo=dati[contatore3].giocatore
[contatore2].ruolocampo)and(flag=false)and(dati[contatore3].giocatore[contat
ore2].entrato<>'x') then
                                 begin
                                  if
dati[contatore3].giocatore[contatore2].totale<>null then
                                     begin
                                       if
dati[contatore3].giocatore[contatore2].totale>dati[contatore3].giocatore[con
tatore].totale then
                                          begin
temp:=dati[contatore3].giocatore[contatore2].totale;
                                            flag:=true;
                                            break;
                                          end
                                       else flag:=false
                                     end
                                  else flag:=false;
                                 end
                              else flag:=false;
                         end;
                         if flag=false
                         then dati[contatore3].giocatore[contatore].entrato
:= 'x'
                         else dati[contatore3].giocatore[contatore2].entrato
:= 'x';
                end
             Else dati[contatore3].giocatore[contatore].entrato:='x';
        end;
        TOT := TOT + Temp;
        End;
    totalesquadra[Contatore3]:= TOT;  //Scrivo
    End;