[VB] 3 condities; welke operatoren

Pagina: 1
Acties:

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
Voor mijn sudoku-solver heb ik 3 condities (noem ze voor het gemak ff 1 2 en 3)
Nu wil ik dat wanneer 1 2 3 NIET allemaal aan elkaar gelijk zijn, dat er een 1 uitkomt, en als ze alledrei gelijk zijn dat er een 0 uitkomt.

Nu heb ik dat nu opgelost met
Visual Basic:
1
2
3
4
5
(1 and (not 2 or not 3)) or (2 and (not 1 or not 3)) or (3 and (not 1 or not 2)) 

of

(1 and 2 and 3) or (not 1 and not 2 and not 3)


Dit werkt, alleen beide zijn vrij lang in mijn code (400+ letters)
Heb de volgende al geprobeerd:
  • (1 xor 2) xor 3
  • (1 xor 2) or 3
  • (1 or 2) or 3
  • (1 and 2) or 3
  • (1 and 2) xor 3
Deze werken allemaal niet, weet iemand anders misschien diegene die ik moet hebben ?
Ik ben dus op zoek naar een wat kortere code.
In een waarheidstabel wil ik het volgende:
code:
1
2
3
4
5
6
7
8
9
c1 c2 c3 Uitkomst;
0  0  0  0
0  0  1  1
0  1  0  1
0  1  1  1
1  0  0  1
1  0  1  1
1  1  0  1
1  1  1  0

btw ik gebruik vb, deze kan dus alleen and or xor en not.

Ik vermoedt dat mijn 2de code het kortst is, maar misschien ziet iemand anders een mogelijkheid ?

[ Voor 3% gewijzigd door Shuisman op 26-02-2006 00:51 . Reden: Typo ]


  • the_stickie
  • Registratie: Juli 2001
  • Laatst online: 14-09-2025
if ((a=b) and (b=c)) then result=0 (als a=b en b=c dan is a=c => a=b=c)

else result=1
:?

[ Voor 5% gewijzigd door the_stickie op 26-02-2006 00:54 ]


  • Jeldert
  • Registratie: Juni 2001
  • Niet online

Jeldert

Rozijntjes

Maak van 1, 2 en 3 gewoon methodes die een waarde teruggeven. Nu kan je heel simpel iets doen als:
code:
1
2
3
4
5
if (methode1() == methode2() == methode3()) {
return 1;
} else {
return 0;
}


Dit is Java, maar het idee kan je natuurlijk ook in VB uitvoeren.

Juist


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

c1 and c2 and c3 = c1 or c2 or c3

ASSUME makes an ASS out of U and ME


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
HIGHGuY schreef op zondag 26 februari 2006 @ 00:53:
c1 and c2 and c3 = c1 or c2 or c3
Leuke variant, maar die is even lang als TS' 2e poging. The_Stickie heeft al een kortere, namelijk met maar 1 conditie dubbel.

{signature}


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
Jeldert schreef op zondag 26 februari 2006 @ 00:52:
Maak van 1, 2 en 3 gewoon methodes die een waarde teruggeven. Nu kan je heel simpel iets doen als:
code:
1
2
3
4
5
if (methode1() == methode2() == methode3()) {
return 1;
} else {
return 0;
}


Dit is Java, maar het idee kan je natuurlijk ook in VB uitvoeren.
Ja dat is ook een optie, alleen die in vb kun je niet = en dan weer = in 1 conditie, dat moet je;
code:
1
methode1()=methode2() and methode2() = methode3()

Echter als ik er 3 methodes van maak en dat gebruik, wordt het niet echt kleiner denk ik zo ;)
Ik zat meer te denken aan zoiets als:

1 xor,or,and 2 xor,or,and 3 (eventueel met wat haakjes :P)

Ik denk dat die van The_Stickie het kortst is...

Hoe simpel hij eigenlijk ook is
/me vraagt zichzelf af waarom hij daar niet zelf op kwam

[ Voor 11% gewijzigd door Shuisman op 26-02-2006 01:00 ]


  • the_stickie
  • Registratie: Juli 2001
  • Laatst online: 14-09-2025
SHuisman schreef op zondag 26 februari 2006 @ 00:56:
[...]


Hoe simpel hij eigenlijk ook is
/me vraagt zichzelf af waarom hij daar niet zelf op kwam
Dat vroeg ik me ook af ja :+

  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
c1 and c2 and c3 = c1 or c2 or c3

Deze loopt spaak met 1 1 1

eerste deel = 1
tweede deel = 1
dus 1 = 1 --> 1 (deze zou ik 0 willen)
1. dat zoeken op google gaat verrot met zulk soort dingen want 'and' mag al niet ;)
2. Ik had al zo'n lange code, dat ik denk ik te moeilijk dacht ofzo :9

[ Voor 54% gewijzigd door Shuisman op 26-02-2006 01:05 ]


Verwijderd

Dan denk je te moeilijk :P wat ik dan doe (kom er ook altijd te laat achter) is het een paar dagen met rust laten (of iig er een nachtje over slapen).

//edit: aan TS, ik heb een paar maand geleden ook eens iets gemaakt met VB en Sudoku puzzel: http://www.visualbasicforum.com/ daar vond ik ook veel hulp, misschien een tip.

[ Voor 37% gewijzigd door Verwijderd op 26-02-2006 01:09 ]


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
Verwijderd schreef op zondag 26 februari 2006 @ 01:08:
Dan denk je te moeilijk :P wat ik dan doe (kom er ook altijd te laat achter) is het een paar dagen met rust laten (of iig er een nachtje over slapen).

//edit: aan TS, ik heb een paar maand geleden ook eens iets gemaakt met VB en Sudoku puzzel: http://www.visualbasicforum.com/ daar vond ik ook veel hulp, misschien een tip.
De exe is aan pure code vandaag en gister 24 kb groter geworden, (dat zijn dus geen plaatjes)...denk dat het daar aan ligt :P

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

SHuisman schreef op zondag 26 februari 2006 @ 01:04:
c1 and c2 and c3 = c1 or c2 or c3

Deze loopt spaak met 1 1 1

eerste deel = 1
tweede deel = 1
dus 1 = 1 --> 1 (deze zou ik 0 willen)


[...]


1. dat zoeken op google gaat verrot met zulk soort dingen want 'and' mag al niet ;)
2. Ik had al zo'n lange code, dat ik denk ik te moeilijk dacht ofzo :9
1 and 1 and 1 = 1
1 or 1 or 1 = 1
1 = 1 -> 1

0 and 0 and 0 = 0
0 or 0 or 0 = 0
0 = 0 -> 1

al de rest geeft ie 0 voor terug.
een simpele not en je probleem is opgelost.

bovendien doe ik het normaal ook zoals The_Stickie het zegt, maar om een of andere reden dacht ik dat dat niet kon (het is namelijk de meest voor de hand liggende en simpelste manier)

ASSUME makes an ASS out of U and ME


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
Oke heb mijn code geupdate, het grappige is dat de exe precies even groot blijft !
thanks everyone :Y)


/me *goes to his bed, and Sleep()

[ Voor 20% gewijzigd door Shuisman op 26-02-2006 01:22 ]


  • the_stickie
  • Registratie: Juli 2001
  • Laatst online: 14-09-2025
SHuisman schreef op zondag 26 februari 2006 @ 01:19:
Oke heb mijn code geupdate, het grappige is dat de exe precies even groot blijft !
thanks everyone :Y)
waarschijnlijk heeft de compiler gewoon je truukje door ;)
Feit is wel dat je oorspronkelijke code niet bepaald leesbaar was :+

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

(jarig!)
Jeldert schreef op zondag 26 februari 2006 @ 00:52:
Maak van 1, 2 en 3 gewoon methodes die een waarde teruggeven. Nu kan je heel simpel iets doen als:
code:
1
2
3
4
5
if (methode1() == methode2() == methode3()) {
return 1;
} else {
return 0;
}


Dit is Java, maar het idee kan je natuurlijk ook in VB uitvoeren.
Ten eerste maakt het natuurlijk niets uit of het een methode-aanroep is of gewoon een boolean variabele; zowel 'methode1()' als 'boolVar' zijn expressies die gewoon een bool opleveren.

Ten tweede werkt dit niet zo. Je kunt idd meerdere variabelen dezelfde waarde toekennen dmv a = b = c = 1. De reden waarom dat werkt is omdat dat geparsed wordt als a = (b = (c = 1)), oftewel, je kent 1 aan c toe, vervolgens ken je het resultaat van de expressie c = 1 (wat dus gewoon de nieuwe waarde van c oplevert) aan b toe, en idem voor a. De expressie a == b == c wordt geparsed als (a == b) == c. Als a gelijk is aan b dan levert a == b true op, anders false. Die waarde controleer je vervolgens weer met c. Dus als a en b false zijn, dan is a == b true. Je vergelijkt dus niet de 3 waarden met elkaar, je kijkt alleen of de uitkomst van de expressie a == b gelijk is aan de waarde van c.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

SHuisman schreef op zondag 26 februari 2006 @ 01:19:
Oke heb mijn code geupdate, het grappige is dat de exe precies even groot blijft !
thanks everyone :Y)


/me *goes to his bed, and Sleep()
de reden waarom de exe even groot blijft is omdat deze een veelvoud moet zijn van een bepaald getal.

ASSUME makes an ASS out of U and ME


  • the_stickie
  • Registratie: Juli 2001
  • Laatst online: 14-09-2025
HIGHGuY schreef op zondag 26 februari 2006 @ 18:35:
[...]


de reden waarom de exe even groot blijft is omdat deze een veelvoud moet zijn van een bepaald getal.
is dat idd zo? een velvoud van welk getal dan? Waarom is dat zo?
* the_stickie 's interesse is gewekt :D

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:11

Robtimus

me Robtimus no like you

.oisyn schreef op zondag 26 februari 2006 @ 15:15:
Ten eerste maakt het natuurlijk niets uit of het een methode-aanroep is of gewoon een boolean variabele; zowel 'methode1()' als 'boolVar' zijn expressies die gewoon een bool opleveren.
Behalve wanneer method1() er een half uur over doet voordat ie een boolean returned. Dan wil je niet iets doen als "methode1() = methode2() and methode2() = methode3()" omdat methode2() dan 2x wordt uitgevoerd.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

(jarig!)
En lees nu nog eens de suggestie van de persoon die ik quote ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
The_Stickie schreef op zondag 26 februari 2006 @ 18:46:
[...]
is dat idd zo? een velvoud van welk getal dan? Waarom is dat zo?
* the_stickie 's interesse is gewekt :D
* Shuisman 's interesse is ook gewekt :D

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Dat dacht ik toch zo eens gehoord, gelezen te hebben...

[ Voor 82% gewijzigd door H!GHGuY op 27-02-2006 16:44 ]

ASSUME makes an ASS out of U and ME


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Lijkt me een veelvoud van de pagesize, welke op een 32-bits i386 veelal 4096 bytes is :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

als je iets op je hd opslaat, is er een minimum block om iets in op te slaan. (ik dacht dat ze het ook een cluster noemen) De grootte van zo'n block of cluster is bijvb 512 bytes. Als je iets opslaat van 100 bytes, is het op de hd nog steeds 512 bytes groot omdat dat de minimum grootte is. logisch gevolg is dus je bestandsgrootte altijd kunt delen door dat minimum block. het verschil tussen de minimum grootte en de "echte" grootte noemen ze slack.

http://www.dewassoc.com/kbase/hard_drives/fat_slack.htm

ik ben niet zeker of het nog van toespassing op ntfs is, maar ik vermoed wel.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

(jarig!)
bart: klopt niet helemaal. Bestandsgrootte is altijd exact. Een bestand van 1 byte is ook maar 1 byte. Dat hij op disk meer inneemt dan die ene byte is idd omdat er met blokken wordt gewerkt (vaak 4k of veelvouden daarvan, omdat de pagesize van de CPU ook 4k is), maar als je de bestandsgrootte opvraagt dan wordt altijd de grootte van het bestand zelf gerapporteerd, niet hoeveel hij op disk daadwerkelijk inneemt.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Vandaar je met eigenschappen van een bestand 2 groottes kunt bekijken.
Grootte en Grootte op schijf.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

(jarig!)
En voor NTFS zijn die twee dingen voor een executable vaak gelijk, omdat de clustersize van een NTFS partitie typisch 4k is, en de sections in een executable ook altijd veelvouden van 4k zijn omdat je rechten alleen toe kunt passen op hele pages. Een datasection (met read/write rechten) kan dus niet per definitie direct volgen op een code section (met read/execute rechten) van willekeurige lengte, omdat je dan een stukje code en een stukje data in dezelfde page krijgt.

[ Voor 9% gewijzigd door .oisyn op 27-02-2006 17:38 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
kenneth schreef op maandag 27 februari 2006 @ 16:50:
Lijkt me een veelvoud van de pagesize, welke op een 32-bits i386 veelal 4096 bytes is :)
4096bytes = 4 KiloByte.
Als ik op *.exe zoek, vindt ik genoeg exe's die niet een veelvoud van 4 KB hebben !

offtopic:
dit gaat vrij offtopic..

[ Voor 9% gewijzigd door Shuisman op 27-02-2006 18:18 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

pages * 4kb + 2kb header + 9kb data oid ... varianten daarop. Je zal zien dat een programma groeit per 4kb, niet per byte, dat is het punt.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Shuisman
  • Registratie: Maart 2004
  • Laatst online: 04-04 19:20
kenneth schreef op maandag 27 februari 2006 @ 23:09:
pages * 4kb + 2kb header + 9kb data oid ... varianten daarop. Je zal zien dat een programma groeit per 4kb, niet per byte, dat is het punt.
Het is niet 4kB; klein voorbeeldje:
Ik vind exe's van 53,54,55,56,57en 58 kB (en nog veel meer btw).
misschien 4kb ?

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Ik heb het louter over het code-gedeelte dat uit 4k pages bestaat ... 53kb kan dan 12 * 4kb code + 5kb data zijn.

En nu weer ontopic B)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • TheBlasphemer
  • Registratie: September 2004
  • Laatst online: 13-11-2025
Normaal meng ik me niet zo in VB discussies, maar hier kan ik het echt niet laten ;)
HEt is bij de *meeste* compilers zo dat ze het code-gedeelte in blokken van 4 kb doen. Echter dit *hoeft* niet. Met wat simpele switches kun je dit zo omlaag halen (en zo vaak wat kb van je .exe afsnoepen!).
Maarja, tuurlijk zijn er exes van 53kb, en weetikveelhoeveel.nogwat kb, maar over het algemeen is de standaard van compilers dat de code in blokken van 4kb wordt gemaakt :)

[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]

Pagina: 1