Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamienianie z systemu bianarnego na dziesiętny
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Raz0r
Program zamieniający liczby binarne na dziesiętne.
Wiem, że istnieje do tego prościutka funkcja "bindec()", ale to jest program na zaliczenie z informatyki i musiałem przedstawic to od strony czysto matematycznej...

Kod
<?php

error_reporting(0); // hehe, lepiej nie wyłączac

$first = $_GET['first'];

if(!empty($first)) {
  if(is_numeric($first)) {

  for($potega=(strlen($first)-1); $potega>=0; $potega--) {

     $pow[$potega] = pow(2,$potega);
     $p[] = $pow[$potega];
    
    }

  for($i=0;$i<strlen($first);$i++){

     $cyfra[$i] = substr($first, $i, 1);
    
    }

  for($x=0;$x<count($cyfra);$x++){

     $f[] = $cyfra[$x];
    
    }

  for($t=0, $u=0; $t<=count($p), $u<=count($f); $t++, $u++) {

     $v[] = ($p[$t]*$f[$u]);

    }

echo "<center><b>Wynik:</b><br />" . array_sum($v) . "</center>";
   }
}

?>


Może się komuś przyda na lekcję infy biggrin.gif Bo ogólnie to zamienianie w ten sposób jest wysoce niepraktyczne...
zegarek84
  1. <?php
  2. $a='001011';$d=0;$i=0;
  3. while(($z=substr($a,--$i,1)) != null){$d+=($z=='1')?pow(2,-$i-1):0;};
  4. echo $d;
  5.  
  6. // lub mniej czytelny kod ale trochu szybciej ;)
  7.  
  8. $a='001011';$d=0;$i=0;
  9. while(($z=substr($a,--$i,1)) != null){$d|=$z<<-$i-1;};
  10. echo '<br />'.$d.'<br />';
  11. ?>
Raz0r
Hmm... chyba coś jest nie tak, bo mi ten twój wynalazek nie działa...
zegarek84
nie wiem jak kopiowałeś ale na localhost to działa winksmiley.jpg
ALMER
Ani jeden ani drugi program nie dziala. Moze ktos podpowie mi dlaczego?questionmark.gifquestionmark.gif?
zegarek84
jakie błedy pokazują się...
bounty
http://forum.codecall.net/classes-code-sni...hp-bin2dec.html
  1. <?php
  2.  
  3. /**
  4.  * Convert a binary number with our without
  5.  * a radix point to its decimal equivalent.
  6.  *
  7.  * @param $binary The binary number to convert.
  8.  * @param $output Show the calculations.
  9.  * @return The decimal conversion
  10.  */
  11. function bin2dec($binary, $output = false) {
  12.    $N = 0;
  13.    $o = "";
  14.    list ( $rhs, $lhs ) = explode ( ".", $binary );
  15.    $rhs = strrev ( $rhs );
  16.    for($i = 0; $i < strlen ( $rhs ); $i ++) {
  17.        $d = $rhs [$i] * pow ( 2, $i );
  18.        $N = $d + $N;
  19.        $o = ($d == 0) ? $o : $o . $d . " + ";
  20.    }
  21.    
  22.    for($i = 0; $i < strlen ( $lhs ); $i ++) {
  23.        $d = $lhs [$i] * pow ( 2, - ($i + 1) );
  24.        $N = $d + $N;
  25.        $o = ($d == 0) ? $o : $o . $d . " + ";
  26.    }
  27.    
  28.    return ($output) ? substr ( $o, 0, - 3 ) . " = " . $N : $N;
  29. }
  30.  
  31. ?>

Przyklad
  1. <?php
  2. echo bin2dec ("110"); //6
  3. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.