login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP] Wiskunde dilemma - volgende functie :)

Offline flance - 02/03/2005 16:15 (laatste wijziging 03/03/2005 16:19)
Avatar van flanceHTML interesse Ik ben voor mijn wiskunde kennis wat grappige en ingewikkelde functies aan het bouwen. (Word ook mijn inzicht wat beter) Maar ik loop vast.

Wat ben ik aan het bouwen?
Een converter die,door punt gescheiden waardes van 0 tot 255, een hexadecimale string bouwd. Ik wil dus bereiken als je 255.255.255 invoerd, dat je FFFFFF terug krijgt. Nu is hier een php functie voor, dat weet ik.. Maar ik wil het zelf eens bouwen.
Ik heb nu dit:
  1. <?
  2. function rgb2hex ($str,$methekje=FALSE)
  3. {
  4. $waardes = explode(".",$str);
  5. if (!is_numeric($waardes[0]) OR !is_numeric($waardes[1]) OR !is_numeric($waardes[2]))
  6. {
  7. RETURN FALSE;
  8. }
  9. else
  10. {
  11. $output = array();
  12.  
  13. foreach ($waardes as $key => $value)
  14. {
  15. if ($value <= 81)
  16. {
  17. //2 numerieke dingen
  18. $hexwaarde = ''; //wat berekend is
  19. }
  20. elseif ($value > 135)
  21. {
  22. //2letters
  23. $hexwaarde = ''; //wat berekend is
  24. }
  25. else
  26. {
  27. //1 letter 1 getal
  28. $hexwaarde = ''; //wat berekend is
  29. }
  30.  
  31. $output[$key] = $hexwaarde;
  32. unset($hexwaarde);
  33. }
  34. }
  35.  
  36. $output = strtoupper($output[0].$output[1].$output[2]);
  37. if ($methekje)
  38. {
  39. $output = "#".$output;
  40. }
  41.  
  42. RETURN $output;
  43. }
  44. ?>

Maar ik kom niet verder. Mijn probleem is alsvolgt. Ik weet niet hoe ik moet terugrekenen. Stel ik prop er 255 in, dan weet ik dat dit FF is, maar hoe BEREKEN ik dit. (ook voor andere waarden natuurlijk).

:$

12 antwoorden

Gesponsorde links
Offline Stijn1 - 30/11/1999 00:00
Avatar van Stijn1 Gouden medaille

PHP ver gevorderde
httpwww.wmcity.nlscripts.phpactie=bekijk&id=479rnhttpwww.wmcity.nlscripts.phpactie=bekijk&id=470rnVeel suc6 d
Offline flance - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van flance HTML interesse [..] Ik snapte het even niet.. zie mijn volgende post )
Offline numlockrond - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van numlockrond Onbekend lezen blijft moeilijk hè...rnrndie 1e gebruikt de standaard php functie(s) en de 2e knipt alleen een string in drieën en gebruikt inval() om ong. hetzelfde te doen als hexdec().rnDan doe je dus nog niks zelf.rnrnHet lijkt erop dat je gewoon uit je hoofd geleerd hebt dat 255 == FF, maar dat je niet echt weet hoe je van hexadecimaal naar decimaal rekent. ff google gebruiken en dan hoef je alleen maar een paar rekensommetjes in je script te zetten.rnVervolgens een array gebruiken om de getallen 10 en hoger om te zetten naar letters en je bent klaar.rnrnEdit typornrnEdit2rn[quote]edit die 2e. sorry[quote] Ik dacht dat je het zelf wilde doen.... rnrnEdit3rn[quote]Die had ik al, maar ik wil andersom ;)[quote] Na het lezen van je edit blijkt dat dat dus over dat 1e script gaat, maar die doet (ong) hetzelfde als dat 2e en bij allebei doe je het dus niet zelf...
Offline flance - 30/11/1999 00:00
Avatar van flance HTML interesse Ik loop even in het niets. Ik weet wel wat hexadecimaal is hoor ) Maar jullie snappen me verkeerd geloof ik. Ik wil niet van hexadecimaal naar decimaal, maar van decimaal naar hexadecimaal 
Offline bosgroen - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van bosgroen Gouden medaille

PHP interesse
het getal delen door zestien, het geheel gedeelte is het eerste deel van het hexadeciamale getal, de rest het tweede.rnrn2716 = 1 en rest 11, dus hexadecimaal wordt dit 1B.rnrnde rest ve deling kan je bijvoorbeeld berekenen door [ (2716)-floor(2716) ]16 te doenrnwil je ook de floor functie niet gebruiken, dan kun je 2716 in een loopje zetten waarin je telkens -1 aftrekt tot je een getal tussen 0 en 1 krijgt, het aantal loops kan je dan gebruiken als de gehele deel. De rest door weer met 16 te vermenigvuldigen.rnrnvoor iedereen anders, gebruik maar de snelle ingebouwde functies 
Offline flance - 30/11/1999 00:00
Avatar van flance HTML interesse Hmm, ik was al ongeveer zo ver gekomen met het forum waar ik moderator ben..rnrnHier mijn laatste postrnrnHmm oke, vertalen naar php is half gelukt P Eerst denk ik stop ik alles in een array, maar dat werkt niet. Nu heb ik maar met veel i'tjes gewerkt, sorry dat het beetje onoverzichtelijk is.rn[code]rnrnfunction rgb2hex ($str,$methekje=FALSE)rn{rn $waardes = explode(.,$str);rn if (!is_numeric($waardes[0]) OR !is_numeric($waardes[1]) OR !is_numeric($waardes[2]))rn {rn die (niet numeriek); only for debuggingrn RETURN FALSE;rn }rn elsern {rn rn $getallen = array(0,1,2,4,5,6,7,8,9,A,B,C,D,E,F);rn $output='';rn foreach($waardes as $key = $value)rn {rn $ii = $value-16;rn $iii = $ii16;rn $iiii = ceil($iii);rn $eerste = $getallen[$iii];rn $iiiii = $iiii16;rn $iiiiii = $value - $iiiii;rn $tweede = $getallen[$iiiiii];rn $output .= $eerste.$tweede; rn }rn rn }rn if ($methekje)rn {rn $output = #.$output;rn }rn RETURN $output; rn}rnecho rgb2hex(255.255.0,TRUE);rnrnoutput #FFrn[code]rnDe foreach lus word wél 3x uitgevoerd, want als ik er een echo in zet, krijg ik em 3x
Offline flance - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van flance HTML interesse Oke, ik ben nu weer wat verder.. rnrnIk heb nu de volgende functiern[code]rnrnfunction rgb2hex ($str,$methekje=FALSE)rn{rn $waardes = explode(.,$str);rn if (!is_numeric($waardes[0]) OR !is_numeric($waardes[1]) OR !is_numeric($waardes[2]))rn {rn die (niet numeriek); only for debuggingrn RETURN FALSE;rn }rn elsern {rn rn $getallen = array(0,1,2,4,5,6,7,8,9,A,B,C,D,E,F,F);rn $output=array();rn foreach($waardes as $key = $value)rn {rn $a = $value-16;rn $b = $a16;rn $c = ceil($b);rn $eerste = $getallen[$c];rn $d = $c16;rn $e = $value - $d;rn $tweede = $getallen[$e];rn $output[$key]= $eerste.$tweede; rn }rn rn }rn rn $output=$output[0].$output[1].$output[2];rn rn if ($methekje)rn {rn $output = #.$output;rn }rn RETURN $output; rn}rnecho rgb2hex(92.149.206,TRUE);rnoutput #6DA6DF Volgens Photoshop #5C95CErnrn[code]rnJe ziet dat ik in de array een extra F heb staan. Anders is er maar een enkele F. Voor debuggen maak ik er X of Q van ofzo, maar dat doet er niet toe. Hoewat moet ik nu veranderen dat die beetje goed werkt is dat met ceil fout danrnDit
Offline bosgroen - 30/11/1999 00:00
Avatar van bosgroen Gouden medaille

PHP interesse
$a = $value-16;rn $b = $a16;rn $c = ceil($b);rnrndoe toch gewoon rn $c = floor($value16);rnrnhmm, photoshop komt blijkbaar telkens een getal lager dan jij uit, waarom doe jij toch zo in het begin -16. en die laatste F is echt niet nodig, je zal nooit het zestiende getal uit je array nodig hebben, enkel het vijftiende, heb jiij dit wel, dan ligt het aan dat ceil gedeelte.
Offline Thomas - 30/11/1999 00:00
Avatar van Thomas Moderator Het 16e getal uit je array heeft index 15.rnArrays beginnen hun indexering nog altijd bij 0, niet bij 1 (tenzij je dit zelf aangeeft).
Offline flance - 30/11/1999 00:00
Avatar van flance HTML interesse domdomdomdomdomd, hij werkt nu helemaal ,jippiyayeah
Offline flance - 30/11/1999 00:00 (laatste wijziging 30/11/1999 00:00)
Avatar van flance HTML interesse Ik ben nu met een nieuwe functie aan het bouwen, met de zelfde reden )rnmaar ik snap niet waarom ik in dit beginstadium nog geen fatsoenlijke output krijgrn[code]rnrnfunction bin2dec($int)rn{rn if(!is_int($int))rn {rn RETURN FALSE;rn }rn elsern {rn $lengte = strlen($int);rn $all_int = array();rn rn for ($i=0;$i$lengte;$i++)rn {rn $all_int[$i] = $int{$i};rn }rn rn print_r($all_int);rn }rn}rnbin2dec(101);rnrn[code]rnOutputrnrnArrayrn(rn [0] = rn [1] = rn [2] = rn)rnrnrnrnDan gebruik ik dus {$i} en ik denk dat daar de fout ligt. Ik wil dus gewoon een stukje string pakken, maar het is een integer.. Moet ik dit eerst om zetten(en hoe) en waarom werkt het anders nietrnrnedit, het ligt dus aan dat het geen string is maar een int, dit zegt genoegrn[code]rnrn$string = 101010;rnecho $string{4};rnoutput 1rnrn$integer = 101010;rnecho $integer{4};rngeen outputrnrn[code]rnrnWeer edit, ik heb al wat gevonden, maar hij doet nog niet veel anders, ik heb nu ditrn[code]rnrnfunction bin2dec($int)rn{rn if(!is_int($int))rn {rn RETURN FALSE;rn }rn elsern {rn $string = settype($int,string);rn $lengte = strlen($int);rn $all_int = array();rn rn for ($i=0;$i$lengte;$i++)rn {rn $all_int[$i] = $string{$i};rn }rn rn print_r($all_int);rn }rn}rnrn[code]rnrnLaat maar ^^ rnJe settype geeft TRUE of FALSE terug, dus dat was mijn fout, het moet dus zo zijnrn[code]rnrnfunction bin2dec($int)rn{rn if(!is_int($int))rn {rn RETURN FALSE;rn }rn elsern {rn settype($int,string);rn $string = $int;rn $lengte = strlen($int);rn $all_int = array();rn rn for ($i=0;$i$lengte;$i++)rn {rn $all_int[$i] = $string{$i};rn }rn rn print_r($all_int);rn $aantal = count($all_int);rn }rn}rnbin2dec(101);rnrn[code]rnrnMoet ik vaker doen, heletijd posten en het alsnog zelf oplossen 
Offline flance - 30/11/1999 00:00
Avatar van flance HTML interesse Oke, ik heb alles inmiddels af en werkend, zit nu alleen met een volgend probleem. Als ik er een binaire reeks van 11 of meer in stop, dan krijg ik niets meer terug. Dus 10 keer een 1 is het maximaal haalbare (decimaal is dat 1023). Waar licht dit aan Dit is mijn functiern[code]rnrnfunction is_bin ($bin)rn{rn nog bouwen!rn rn if (ereg([0-1],$bin))rn RETURN is_int($bin); tijdelijk..rn rn}rnfunction bin2dec($int)rn{rn if(!is_bin($int)) Check if the input string binair isrn {rn RETURN FALSE;rn }rn else if binairrn {rn settype($int,string); make integer a stringrn $string = $int; rn $string = strrev($string); reverse stringrn $lengte = strlen($int); get lenght of stringrn $all_int = array(); define arra for all valuesrn rn for ($i=0;$i$lengte;$i++) loop throuw every charrn {rn $all_int[$i] = $string{$i}; put all chars in arrayrn }rn rn $new_all_int = array(); define new arrayrn foreach ($all_int as $key = $value) loop through new arrayrn {rn $new_all_int[$key+1] = $value; put the key one higher, else we cannot powrn }rn rn $total = 0; start total with 0rn $aantal_keer = 1;rn foreach($new_all_int as $key = $value) count each charrn {rn if ($key == 1) if the key was onern {rn if ($value == 1) and it is set (value = 1)rn {rn $total++; plus onern }rn }rn elseif ($key == 2) if the there is a second characterrn {rn if ($value == 1) and the second character is set (value = 1)rn { rn $total=$total+2; plus tworn }rn }rn else for every other characterrn {rn if ($value == 1) if it is set(value = 1)rn { rn $total = $total+$aantal_keer;total+number of stringcharrn }rn }rn $aantal_keer = $aantal_keer2;rn }rn RETURN $total; return everythingrn }rn}rnrn[code]
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.248s