NERDCORE FOR LIFE
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Verwijderd
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
ff zoeken op de PHP site naar operators$a % $b Modulus Remainder of $a divided by $b.
http://nl.php.net/manual/nl/language.operators.php
1
| <?//integer$int1=2;$int2=floor($int1);if ($int1==$int2) { echo "Integer"; }//geen integer$int1=2.2;$int2=floor($int1);if ($int1==$int2) { echo "Integer"; }?> |
Zo werkt het toch gewoon?
Verwijderd
Al die variabelen noem je toch strings? Naja ik iig wel, zal er idd wat beter op gaan letten. Het zijn idd getallen, maar ik d8 toch dat je het altijd strings noemde (sorry als ik 't fout had). iig leek me de bedoeling wel duidelijk.Op maandag 13 mei 2002 13:08 schreef Janoz het volgende:
string???? We hebben het hier over getallen hoor... Gewoon ($a % $b == 0) en je hebt je test of de deling geheel zal zijn.
(oeps, zelfs als mod kun je nog wel eens op het verkeerde knopje drukken
Vergelijk:Op maandag 13 mei 2002 13:13 schreef WOmBaT het volgende:
PHP:
1 <?//integer$int1=2;$int2=floor($int1);if ($int1==$int2) { echo "Integer"; }//geen integer$int1=2.2;$int2=floor($int1);if ($int1==$int2) { echo "Integer"; }?>
Zo werkt het toch gewoon?
if (($a/$b)==floor($a/$b)) echo "geheel";
en
if (($a%$b)==0) echo "geheel";
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Je hebt gelijk. Ik dacht dat het enkel om een integer-controle ging. Jouw manier klopt ookOp maandag 13 mei 2002 13:16 schreef Janoz het volgende:
Vergelijk:
if (($a/$b)==floor($a/$b)) echo "geheel";
en
if (($a%$b)==0) echo "geheel";
Ja, dat dacht ik nu dan ook dat dat zou moeten werken, maar het gaat nog niet goed. Ik zal even m'n code laten zien:Op maandag 13 mei 2002 13:08 schreef Janoz het volgende:
string???? We hebben het hier over getallen hoor... Gewoon ($a % $b == 0) en je hebt je test of de deling geheel zal zijn.
1
| <?$hoogte = 200;$breedte = 300;echo "Verhouding is $hoogte : $breedte<hr>andere afmetingen:";$i = 1;while ($hoogte-$i > 0) { $value = $hoogte-$i; if ($value % $breedte == 0) { echo $value." : ".($breedte/$value)."<br>"; } $i++; }?> |
Misschien zit ik hier wel iets heeeel omslachtigs te doen, maar wat ik wil, is zonder al te veel moeite (ahum, ben er nu alweer een uurtje of 2 mee bezig ...) een rijtje uitpoepen van hele getallen die dezelfde verhouding hebben als het origineel (200:300 in dit geval). Maak ik misschien ergens een domme denkfout ofzo? Thanx all so far!
NERDCORE FOR LIFE
String- een rij karakters.Op maandag 13 mei 2002 13:16 schreef Egrimm het volgende:
[..]
Al die variabelen noem je toch strings? Naja ik iig wel, zal er idd wat beter op gaan letten. Het zijn idd getallen, maar ik d8 toch dat je het altijd strings noemde (sorry als ik 't fout had). iig leek me de bedoeling wel duidelijk.
Integer- een geheel getal met een maximum/minimum afhankelijk van waarin deze integer is opgeslagen (8, 16, 32 of 64 bit)
float- speciale representatie waarbij er een getal + een exponent wordt opgeslagen waardoor een veel groter bereik mogelijk is met een beperkte significantie.
Er zit fundamenteel verschil tussen dit soort types, maar doordat talen als php lose typing ondersteund (en van te voren dus niet vast staat wat voor type dfe verschillende vars zijn) hebben veel mensen die leren programeren met dit soort talen niet door waar ze eigenlijk mee besig zijn...
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Vervolgens kun je een algoritme toepassen als dit:
1
2
3
4
5
6
| ggd=ggd(hoogte,breedte);
dh=hoogte/ggd;
db=breedte/ggd;
for (i=1;i<=ggd;i++){
echo (dh*i)." x ".(db*i)."<br>";
} |
Om de orginele afmeting niet mee te laten doen moet je ipv i<=ggd i<ggd gebruiken.
na wat zoeken een recursief algoritme voor ggd:
Deze grootste gemene deler (ggd) kan als volgt berekend worden. Als a gelijk is aan b, dan is ggd(a,b)=ggd(a,a)=a.
Als a verschillend is van b, stel bijvoorbeeld a groter dan b. Dan is ggd(a,b)=ggd(a-b,b). Dus het grootste getal a is vervangen door het grootste getal min het kleinste getal.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
1
| <?$hoogte = 160;$breedte = 490;echo "Verhouding is $hoogte : $breedte <hr> andere afmetingen:<br>";$verh = $hoogte/$breedte;//BEREKENING:$i = 1;while ($hoogte-$i > 0) { $value = $hoogte-$i; // HIER MOET IE DE NIET-HELE GETALLEN VOORKOMEN: if ($value % $verh == 0) { echo $value." : ".$value/$verh."<br>"; } $i++; }?> |
Heb nu iets 'lastiger' getallen genomen, anders kreeg ik wel heeel veel resultaten ....
Maar nu krijg ik dus (samenvatting):
Verhouding is 160 : 490
--------------------------------------------------------------------------------
andere afmetingen:
159 : 486.9375
158 : 483.875
157 : 480.8125
156 : 477.75
155 : 474.6875
154 : 471.625
153 : 468.5625
152 : 465.5
151 : 462.4375
150 : 459.375
149 : 456.3125
148 : 453.25
147 : 450.1875
146 : 447.125
145 : 444.0625
144 : 441
143 : 437.9375
etc.
NERDCORE FOR LIFE
Inderdaad, die resultaten met een breuk moet ie achterwege laten. Althans, daar wil ik op uitkomen. Zie jij wat ik verkeerd doe?Op maandag 13 mei 2002 14:38 schreef ddc het volgende:
Wil je die breuken niet zien dan ofzo ?
NERDCORE FOR LIFE
www.php.net/is_float
(verh is een float)
Modulo accepteert alleen gehele getallen
Wat probeer je eigenlijk te doen. Dus niet wat je nu aan het doen bent maar waar wil je dit script voor gebruiken. Wat is het doel van dit script.
Programmer - an organism that turns coffee into software.
Wat is wil is dit: ik maak een filmpje in Flash die bv. de afmetingen 160 x 490 heeft. Maar aangezien Flash movies schaalbaar zijn, kan je in je code ook opgeven dat ie weergegeven moet worden als 144 bij 441. En zodoende wil ik dus _eenvoudig_ een lijstje genereren wat de andere mogelijke afmetingen zijn als het origineel 160 X 490 is.Op maandag 13 mei 2002 15:10 schreef LuCarD het volgende:
Je gaat de fout in omdat je een float naar een modulo toe stuurt.
(verh is een float)
Modulo accepteert alleen gehele getallen
Wat probeer je eigenlijk te doen. Dus niet wat je nu aan het doen bent maar waar wil je dit script voor gebruiken. Wat is het doel van dit script.
Verder maakt jouw verhaal erg veel sense aangezien al m'n resultaten een FALSE krijgen op de is_int functie. Maar het begint me inmiddels dus erg te frustreren dat het niet zo simpel was als ik hoopte ...
NERDCORE FOR LIFE
1
| <?$value1=$deel1=160;$value2= $deel2=490;$rest=1;while ($rest != 0) {// Grootste gemeene deler $rest=$deel1 % $deel2; $deel1=$deel2; $deel2=$rest;}for($i=0;$a<$value2 && $p<$value1;$i++) { $i++; $a=$value1/$deel1 * $i; $p=$value2/$deel1 * $i; echo $value1,":",$value2," == ",$a,":",$p,"<BR>";} ?> |
PS. 144 x 441 klopt niet...
Programmer - an organism that turns coffee into software.
Maar: je hebt geen gelijk hoor volgens mij met 144:441.
Oftewel, jouw methode mist volgens mij een hoop gelijke verhoudingen ...
Jouw uitkomst:
16 : 49
48 : 147
80 : 245
Dan missen volgens mij:
32 : 98
64 : 196
96 : 294
112 : 343
128 : 392
en dus 144 : 441
mee eens?
NERDCORE FOR LIFE
probeer deze maar eens
1
| <?$value1=$deel1=160;$value2= $deel2=490;$rest=1;while ($rest != 0) { $rest=$deel1 % $deel2; $deel1=$deel2; $deel2=$rest;}$deel2=$value2/$deel1;$deel1=$value1/$deel1;for($i=0;$a<$value1 && $p<$value2;$i++) { $i++; $a=$deel1 * $i; $p=$deel2 * $i; echo $value1,":",$value2," == ",$a,":",$p,"<BR>";?> |
Programmer - an organism that turns coffee into software.
1
| <?function groted( $a, $b ){ if( $a == $b ) return $a; else { if( $a > $b ) { $c = $b; $b = $a; $a = $c; } return groted( $b-$a, $a ); }}print "GGD: ".groted( 50, 100 );?> |
uit het hoofd, dus incl. eventuele fouten
16:49
48:147
80:245
112:343
144:441
176:539
Komt wel in de buurt, maar mist er nog steeds een paar:
32:98
64 : 196
96 : 294
128 : 392
en ook - hahahaha, da's lachen - hij gaat te ver door, 176:539 is groter dan het origineel
Poe poe, het is niet zo simpel als het lijkt hè?
NERDCORE FOR LIFE
Wat denk je het volgende doet?
1
| <?while ($rest != 0) { $rest=$deel1 % $deel2; $deel1=$deel2; $deel2=$rest;}?> |
Alleen dan sneller
Programmer - an organism that turns coffee into software.
oops tik fout in de for lus staat een $i++ die moet weg.Op maandag 13 mei 2002 15:57 schreef Dr.Bob het volgende:
Uitkomst =
16:49
48:147
80:245
112:343
144:441
176:539
Komt wel in de buurt, maar mist er nog steeds een paar:
32:98
64 : 196
96 : 294
128 : 392
en ook - hahahaha, da's lachen - hij gaat te ver door, 176:539 is groter dan het origineel
Poe poe, het is niet zo simpel als het lijkt hè?
En als je de optie 0:0 niet wilt hebben moet je $i op 1 laten beginnen...
Programmer - an organism that turns coffee into software.
Er staat een $i++ teveel in.. Daarom slaat ie d'r altijd 1tje over...Op maandag 13 mei 2002 15:57 schreef Dr.Bob het volgende:
Uitkomst =
16:49
48:147
80:245
112:343
144:441
176:539
Komt wel in de buurt, maar mist er nog steeds een paar:
32:98
64 : 196
96 : 294
128 : 392
en ook - hahahaha, da's lachen - hij gaat te ver door, 176:539 is groter dan het origineel
Poe poe, het is niet zo simpel als het lijkt hè?
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Nu je het zegt, dit komt me ook wel iets bekende voorOp maandag 13 mei 2002 15:58 schreef LuCarD het volgende:
eborn:
Wat denk je het volgende doet?
PHP:
1 <?while ($rest != 0) { $rest=$deel1 % $deel2; $deel1=$deel2; $deel2=$rest;}?>
Alleen dan sneller
PERFECT, thanx a lot LuCarD, het werkt helemaal. Ik ga me er nu dan maar even in verdiepen om te kijken _waarom_ het werktOp maandag 13 mei 2002 16:00 schreef LuCarD het volgende:
[..]
oops tik fout in de for lus staat een $i++ die moet weg.
En als je de optie 0:0 niet wilt hebben moet je $i op 1 laten beginnen...
NERDCORE FOR LIFE