Toon posts:

[PHP] even || oneven

Pagina: 1
Acties:
  • 144 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoe kan ik erachter komen of de waarde even of oneven is? dus 1 of 3 of 5 etc.

voorbeeldje!
code:
1
2
3
4
5
6
7
8
if(...)
{
   echo"Oneven";
}
else
{
   echo"Even";
}

edit-
nu goed dan

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

D2k

eeen string kan niet even zijn
een getal wel

Doet iets met Cloud (MS/IBM)


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

PHP:
1
2
3
4
5
6
7
<?
if ($getal % 2 == 1) {
   //--- oneven
} else {
   //--- even
}
?>

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
mm ja

maar deze getallen komen uit een Array

dus het kan oplopen tot weet ik hoeveel.

ik moet dus van de waarde $MyArray weten of het even of oneven is

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

PHP:
1
2
3
4
5
6
7
<?
if ($MyArray[23] % 2 == 1) {
   //--- oneven
} else {
   //--- even
}
?>

daar doe ik niet moeilijk over.. ;)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • vinnux
  • Registratie: Maart 2001
  • Niet online
het % teken betekent in de voorgaande berekening dat je het restwaarde van de deling terugkrijgt. De delingen vinden alleen plaats met natuurlijke getallen;

2%2=0
7%2=1
13%13=0
14%20=14

dus eigenlijk
a%b=a-(((Integer)(a/b))*b)

Verwijderd

Topicstarter
Op vrijdag 28 december 2001 19:41 schreef thomaske het volgende:
PHP:
1
2
3
4
5
6
7
<?
if ($MyArray[23] % 2 == 1) {
   //--- oneven
} else {
   //--- even
}
?>

daar doe ik niet moeilijk over.. ;)
lol ik zie het :D

Maar zeg je nu dus als de waarde 1 is of geef je hier ook mee aan dat de waarde 3 of 5 of 7 etc. kan zijn :?

Verwijderd

Topicstarter
Op vrijdag 28 december 2001 19:42 schreef vgouw het volgende:
het % teken betekent in de voorgaande berekening dat je het restwaarde van de deling terugkrijgt. De delingen vinden alleen plaats met natuurlijke getallen;

2%2=0
7%2=1
13%13=0
14%20=14

dus eigenlijk
a%b=a-(((Integer)(a/b))*b)
Oké thnx! :D :D

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

die uitkomst van
$MyArray[23] % 2
geeft de restwaarde van de deling..

wanneer je dus een getal door 2 deelt, komt er een bepaalde rest uit (1 of 0) als deze 1 is, dan is het getal oneven en als deze 0 is dan issie (jawel) even!

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
ok got it! }:O

dit houden we maar ff op de vrijdag :)

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

ik ga even wiskundig zeiken:
0 is officieel niet even en ook niet oneven... hoe ga je dat oplossen?
(0%2) = 0 => zou suggereren dat het even was... Is 'ie niet.

Localhost, sweet localhost


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Sorry we hebben het hiet over programma's niet over wiskunde.
Programmeertalen zijn niet geheel wiskundig correct.
Maar ja de ABC formule klopt ook niet meer bij hele kleine getallen.
Dus.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
vgouw: Programmeertalen zijn niet geheel wiskundig correct.
Ach, wat is wiskundige correctheid als je geeneens de correctheid van de rekenkunde kunt bewijzen :+ .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Grum
  • Registratie: Juni 2001
  • Niet online
PHP:
1
2
3
4
5
6
<?
if ($bla &amp; 1)
  echo 'oneven';
else
  echo 'even';
?>

sneller >:)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Op zaterdag 29 december 2001 13:07 schreef Grum_ het volgende:
PHP:
1
2
3
4
5
6
<?
if ($bla &amp;amp; 1)
  echo 'oneven';
else
  echo 'even';
?>

sneller >:)
Pas maar op.. Straks moet je dat ook nog uitleggen.. D'r zijn hier nog genoeg mensen die denken dat een getal in het geheugen in het 10-tallig stelsel worden opgeslagen :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Op zaterdag 29 december 2001 13:28 schreef Janoz het volgende:

[..]

Pas maar op.. Straks moet je dat ook nog uitleggen.. D'r zijn hier nog genoeg mensen die denken dat een getal in het geheugen in het 10-tallig stelsel worden opgeslagen :)
uhm... jah toch 1 2 3 4 5 6 7 8 9 ? :) leg uit leg uit ;)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 29 december 2001 13:07 schreef Grum_ het volgende:
sneller >:)
[edit2]
Ok, toch:

Zoveel sneller is dat niet, dus tenzij je echt snelheid nodig hebt kan je beter voor duidelijkheid gaan.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
[acm@server public_html]$ php check.php
&-check in 1.5620330572128 seconds
%-check in 1.7875679731369 seconds
[acm@server public_html]$ php check.php
&-check in 1.6235229969025 seconds
%-check in 1.8597919940948 seconds
[acm@server public_html]$ php check.php
&-check in 1.618873000145 seconds
%-check in 1.8049030303955 seconds
[acm@server public_html]$ php check.php
&-check in 1.5750410556793 seconds
%-check in 1.8000169992447 seconds
[acm@server public_html]$

De code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?
function getmicrotime()
{ 
    list($usec, $sec) = explode(" ",microtime()); 
    return ((float)$usec + (float)$sec); 
} 

$time_start = getmicrotime();

$string = "";
for ($i=0; $i < 100000; $i++)
{
    if ($i &amp; 1)
        $string .= ".";
    else
        $string .= ",";
}
$time_end = getmicrotime();
$time = $time_end - $time_start;

echo "&amp;-check in $time seconds\n";

$time_start = getmicrotime();

$string = "";
for ($i=0; $i < 100000; $i++)
{
    if ($i % 2 == 1)
        $string .= ".";
    else
        $string .= ",";
}
$time_end = getmicrotime();
$time = $time_end - $time_start;

echo "%-check in $time seconds\n";
?>

Btw, bedenk ik me ook nog dat het wel redelijk klopte wat ik net dacht als bug gepost te hebben :)
if($bla % 2) is ook al correct :)
Dat hoeft niet perse if($bla % 2 == 1) te zijn (alleen voor 2 geldt dat)

  • Grum
  • Registratie: Juni 2001
  • Niet online
je benched niet goed >:)

je neemt in je berekening ook de tijd mee die het kost om de splitten/optetellen ... je cheat >:)

grin :P

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
  
$sStart = microtime();  
// 
// hier je script
// 
$sEnd = microtime();
$aA = explode(' ',$sStart.' '.$sEnd);
printf('%03.8f Seconds<br>',($aA[2]+$aA[3])-($aA[0]+$aA[1]));  
exit;  
?>

is dan ook een betere manier >:)

je scheid hierbij de berekening van de benchmark met het ophalen van de seconden :D dus tel je dat er niet bij.....

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 29 december 2001 14:23 schreef Grum_ het volgende:
je benched niet goed >:)

je neemt in je berekening ook de tijd mee die het kost om de splitten/optetellen ... je cheat >:)

grin :P
Mwoh, die is nog niet zo erg...
Het creeren van de $string bij de eerste en het truncaten ervan bij de 2e test is dan erger...

Anyway, test het zelf maar zo perfect mogelijk, dan kom je er alsnog achter dat het weinig scheelt.

Bovendien doe ik dat splitten in beide gevallen, waardoor het verschil net zo groot blijft...
Op zaterdag 29 december 2001 14:27 schreef raymanontweakers het volgende:

[php]<?
is dan ook een betere manier >:)

je scheid hierbij de berekening van de benchmark met het ophalen van de seconden :D dus tel je dat er niet bij.....
En maakt dat iets uit voor het berekende verschil ??

Anyway, benchmark het gerust zelf nog op 10 verschillende systemen onder 10 verschillende OS-en met je eigen code...

Het verschil is dusdanig klein dat ik me er alleen druk om maak als het in een significant (vaak uitgevoerd in dit geval) stuk code staat.

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 14-09 21:15

TrailBlazer

Karnemelk FTW

Op zaterdag 29 december 2001 12:15 schreef vgouw het volgende:
Sorry we hebben het hiet over programma's niet over wiskunde.
Programmeertalen zijn niet geheel wiskundig correct.
Maar ja de ABC formule klopt ook niet meer bij hele kleine getallen.
Dus.
hier heb ik maar een ding op te zeggen :? huh kan je dit ff uitleggen. stel ik neem de beroemde 3 4 5 driehoek als ik die door allemaal door oneindig deel komt dat er nog steeds gewoon goed uit hoor

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Op zaterdag 29 december 2001 15:17 schreef TrailBlazer het volgende:

[..]

hier heb ik maar een ding op te zeggen :? huh kan je dit ff uitleggen. stel ik neem de beroemde 3 4 5 driehoek als ik die door allemaal door oneindig deel komt dat er nog steeds gewoon goed uit hoor
ABCformule & driehoeken? die hebben niet direct iets met elkaar te maken:

Abcformule:
code:
1
2
3
4
5
6
7
    -b + V(b^2 - 4AC)
x = ----------------
         2A 

    -b - V(b^2 - 4AC)
x = ----------------        (V = wortel...)
         2A

En bij hele kleine getallen is die even correct als bij hele grote getallen. Dat je computer niet tegen kleine getallen kan is wat anders. Wellicht moet je dan een float gebruiken IPV een integer...

Localhost, sweet localhost


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 29 december 2001 15:46 schreef kvdveer het volgende:
Wellicht moet je dan een float gebruiken IPV een integer...
Mja, als je met integers gaat werken als er wortel van toepassing is, dan ben je niet handig bezig :)

Wellicht bedoel je double's enzo? :)

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 14-09 21:15

TrailBlazer

Karnemelk FTW

Op zaterdag 29 december 2001 15:46 schreef kvdveer het volgende:

[..]

ABCformule & driehoeken? die hebben niet direct iets met elkaar te maken:

Abcformule:
code:
1
2
3
4
5
6
7
    -b + V(b^2 - 4AC)
x = ----------------
         2A 

    -b - V(b^2 - 4AC)
x = ----------------        (V = wortel...)
         2A

En bij hele kleine getallen is die even correct als bij hele grote getallen. Dat je computer niet tegen kleine getallen kan is wat anders. Wellicht moet je dan een float gebruiken IPV een integer...
dom zat te denken aan Pythogaras. Maar verhaal blijft hetzelfde de theorie blijft altijd hetzelfde ongeacht degroote van de getallen dat computers lopen te kloten ja jammer joh

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Beste mensen,

Het bewijs kan ik ik zo niet leveren, daar moet ik even de boeken voor controleren.
Ik zal volgend jaar (Wat klinkt dat leuk) Het bewijs geven
Pagina: 1