[php] Welke operators? *

Pagina: 1
Acties:

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
als ik het volgende heb:

if ($a operator $b operator $c) {
//bla
} else {
//bla
}

hoe krijg ik het nu alsvolgt

$a $b $c
0 0 1 = 1
0 1 0 = 1
1 0 0 = 1

en de rest = 0

ik heb al wat met xor geprobeerd, maar dat is een beetje vaag allemaal

als ik bijv $a xor ($b xor $c) doe, geeft hij bij 1 1 1 ook een 1 als output en dat moet niet :?

  • flat
  • Registratie: Mei 2000
  • Niet online
ranzige * flat -oplossing: tel ze op, en kijken of 't 1 is of niet :X
maar er zal best wel iets beters ovoor zijn hoor

"Happiness is a way of travel, not a destination."
--Roy Goodman


Verwijderd

Das wel logisch hoor.
$a xor $b xor $c == ($a xor $b) xor $c

Nou er even vanuit gaan dat alles 1 is, dan:
$a xor $b = 0, en
0 xor $c = 1 :)

Oplossing zou inderdaad zijn om ze op te tellen. Zoals flat(c) zegt.

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Met 0 en 1 bedoel ik dan false en true, dus optellen gaat niet zo makkelijk. Ja dat dat zo is dat er 1 uit moet komen dat begrijp ik wel. Maar ik begrijp niet welke operators en in welke volgorde ik ze moet zetten om het te realisren, heb al het een en ander geklust, maar is best lastig.. ik doe het dmv trial en error, niet de meest efficienste manier zeg maar...

Verwijderd

Op zondag 19 mei 2002 21:46 schreef RSD het volgende:
Met 0 en 1 bedoel ik dan false en true, dus optellen gaat niet zo makkelijk
Moet het van de vorm $a op $b op $c zijn?

  • flat
  • Registratie: Mei 2000
  • Niet online
wie heeft die topictitel veranderd? D2k, jij zeker? :P
[/ot]

"Happiness is a way of travel, not a destination."
--Roy Goodman


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op zondag 19 mei 2002 21:50 schreef Flat© het volgende:
wie heeft die topictitel veranderd? D2k, jij zeker? :P
[/ot]
O-)
</ot>

Doet iets met Cloud (MS/IBM)


  • Grum
  • Registratie: Juni 2001
  • Niet online
code:
1
2
3
4
5
6
7
if( 
    (  $a && !$b && !$c )
  ||
    ( !$a &&  $b && !$c )
  ||
    ( !$a && !$b &&  $c )
  )

Hoe anders :?

Als je lastige dingen wilt krijg je ook lastig leesbare & lange oplossingen :D

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
uh nee dat maakt niet uit.. als A=1 en B=0 en C=0, dan moet er 1 uitkomen, maakt niet uit hoe...het liefst zo eenvoudig mogelijk en zo ook bij die andere combinaties als ik eerst vermelde. Maar wel allemaal in 1 zin

  • flat
  • Registratie: Mei 2000
  • Niet online
da's idd een nette oplossing grum, beter dan mijn stukkie code... :D

"Happiness is a way of travel, not a destination."
--Roy Goodman


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:17
Grum:
Hoe anders :?
xor dus

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:17
code:
1
2
3
4
if ($a xor $b xor $c)
  // 1
else
  // 0

Verwijderd

Op zondag 19 mei 2002 21:53 schreef RSD het volgende:
uh nee dat maakt niet uit.. als A=1 en B=0 en C=0, dan moet er 1 uitkomen, maakt niet uit hoe...het liefst zo eenvoudig mogelijk en zo ook bij die andere combinaties als ik eerst vermelde. Maar wel allemaal in 1 zin
Grum heeft het antwoord al gegeven :) En veel meer/minder zul je er niet uit kunnen halen vrees ik.

Verwijderd

Op zondag 19 mei 2002 21:53 schreef ddc het volgende:

[..]

xor dus
Hebben wij niet helemaal opgelet? xor geeft ook bij {$a,$b,$c} = {1,1,1} de oplossing 1 eruit, wat geenszins de bedoeling was.

edit:
Parodn, 2 posts onder elkaar

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 14:17
Hieronymus:
Hebben wij niet helemaal opgelet?
Dat is het ja.
Wel vaag trouwens, mag php wel wat aan doen naar mijn mening. Bij een xor geldt dat maar 1 geldig mag zijn, dus als er 2 geldig zijn (van de drie) is het fout naar mijn mening.

Verwijderd

Op zondag 19 mei 2002 22:07 schreef ddc het volgende:

[..]

Dat is het ja.
Wel vaag trouwens, mag php wel wat aan doen naar mijn mening. Bij een xor geldt dat maar 1 geldig mag zijn, dus als er 2 geldig zijn (van de drie) is het fout naar mijn mening.
Nee hoor.. Ligt in geen geval aan php. Zo werkt logica. Moet je maar es opletten in het eerste jaar van een willekeurige informatica opleiding.
xor is een operator die alleen maar op het linker en rechter lid van de vergelijking werkt. En je hebt een precedentie omdat er maar een van de twee operatoren tegelijk bekeken kan worden.
Een oplossing zou kunnen zijn om een functie te definieren xor(var1,var2,var3) als die er nog niet is ;) waarbij je dus wel tussen 3 variabelen kan xor-ren. Maar dan bestaat die intern uit de code die Grum al gaf >:)

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

* Erik Jan Jan zijn gare inzending (laat):
code:
1
if ((($a || $b) != $c) && !($a && $b))

Of mag je geen comparisons gebruiken?
Op zondag 19 mei 2002 23:03 gaat Soultaker het volgende schrijven:

Van mij wel hoor. B-) Hij's cool (en lijkt nog te kloppen ook). Haakje om die comparison had wel gemogen though. ;)
Tnx. :) Welke haakjes mis je precies? O-)

This can no longer be ignored.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:44
De Karnaugh-map van de operatie:
code:
1
2
3
4
5
    AB
    | 00 01 10 11
  --+------------
C 0 |  0  1  1  0
  1 |  1  0  0  0

Als we de enen beschouwen hebben we drie termen nodig (aangezien we geen enen samen kunnen nemen) en als we de nullen beschouwen hebben we zelfs vier termen nodig.

Geschreven als som van producten kom je dan uit bij Grum's expressie. Een alternatief zou zijn:
(!B || !C) && (!A || !C) && (!A || !B) && (A || B || C)
Dat scheelt precies één operatie ten opzichte van Grum's oplossing, maar veel beter zal het (met uitsluitend het gebruik van !, || en &&) niet worden.

edit:

Dat is trouwens nog wel te reduceren tot:
!(B && C) && !(A && C) && !(A && B) && (A || B || C)
Dat scheelt weer drie uitroeptekentjes. :)


(Ik zou trouwens gewoon voor ($a + $b + $c = 1) gaan.)

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 15:40

TheDane

1.618

Op zondag 19 mei 2002 22:51 schreef Soultaker het volgende:
De Karnaugh-map van de operatie:
code:
1
2
3
4
5
    AB
    | 00 01 10 11
  --+------------
C 0 |  0  1  1  0
  1 |  1  0  0  0

Als we de enen beschouwen hebben we drie termen nodig (aangezien we geen enen samen kunnen nemen) en als we de nullen beschouwen hebben we zelfs vier termen nodig.

Geschreven als som van producten kom je dan uit bij Grum's expressie. Een alternatief zou zijn:
(!B || !C) && (!A || !C) && (!A || !B) && (A || B || C)
Dat scheelt precies één operatie ten opzichte van Grum's oplossing, maar veel beter zal het (met uitsluitend het gebruik van !, || en &&) niet worden.

edit:

Dat is trouwens nog wel te reduceren tot:
!(B && C) && !(A && C) && !(A && B) && (A || B || C)
Dat scheelt weer drie uitroeptekentjes. :)


(Ik zou trouwens gewoon voor ($a + $b + $c = 1) gaan.)
whaa, dit heb ik ook ooit zo geleerd bij discrete wiskunde @ hio

niks van onthouden though :+

zeer net !

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:44
Op zondag 19 mei 2002 22:42 schreef Erik Jan het volgende:
* Soultaker Jan zijn gare inzending (laat):
code:
1
if ($a || $b) != $c && !($a && $b)

Of mag je geen comparisons gebruiken?
Van mij wel hoor. B-) Hij's cool (en lijkt nog te kloppen ook). Haakje om die comparison had wel gemogen though. ;)
Pagina: 1