Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Oder OR/XOR


Christian V. - Mo 12.02.07 18:47
Titel: Oder OR/XOR
Hallo, ich habe 2 gruppen mit Werten
adv_linex[1..3] und adv_liney[1,,3]
Es soll wahr sein, wenn EIN Wert des Arrays grösser als Null ist in EINER der beiden Gruppen.
Beispiele

Wahr:
adv_linex[1]=2
adv_linex[2]=0
adv_linex[2]=0

adv_liney[1]=1
adv_liney[2]=1
adv_liney[3]=0

Falsch:
adv_linex[1]=0
adv_linex[2]=1
adv_linex[2]=0

adv_liney[1]=0
adv_liney[2]=1
adv_liney[3]=0

Ich habe mir das so gedacht:

Delphi-Quelltext
1:
if ((adv_linex[1]<>0)OR(adv_linex[2]<>0)OR(adv_linex[3]<>0))OR((adv_liney[1]<>0)OR(adv_liney[2]<>0)OR(adv_liney[3]<>0))                    

Allerdings geht das nicht so wie ich es mir gedacht habe.

PS: wegen den <>: minus werte sind nicht möglich.


jakobwenzel - Mo 12.02.07 18:58

Wenn Minus-Werte nicht Möglich Sind:

Delphi-Quelltext
1:
2:
if ((adv_linex[1]+adv_linex[2]+adv_linex[3])>0xor ((adv_liney[1]+adv_liney[2]+adv_liney[3])>0then
...


Christian V. - Mo 12.02.07 19:08

Danke für die Antwort, das funktioniert aber irgendwie nicht.


delfiphan - Mo 12.02.07 19:10

Du meinst wenn in genau einer Gruppe genau ein Wert nichtnull ist.

Solcher Code ist zwar fast unbrauchbar, da unlesbar, aber wenn's in einem Ausdruck sein muss:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if 
 (((adv_linex[1]<>0)xor(adv_linex[2]<>0)xor(adv_linex[3]<>0)) and 
    not ((adv_linex[1]<>0and (adv_linex[2]<>0and (adv_linex[3]<>0))) xor
 (((adv_liney[1]<>0)xor(adv_liney[2]<>0)xor(adv_liney[3]<>0)) and 
    not ((adv_liney[1]<>0and (adv_liney[2]<>0and (adv_liney[3]<>0))) 
then
...


Delete - Mo 12.02.07 19:14

sorry, verstehe jetzt nicht was du meinst. aber kannst mal 'ne wahrheitstabelle posten? damit ich auch verstehe was du gerne möchtest, danke.


Christian V. - Mo 12.02.07 19:17

Wow, danke vielmals. Nun funktioniert es.
@Grenzgaenger: So wie es Delphifan formuliert hat ists besser zu verstehen.