Tento skript zobrazi cislo zadane formou mocniny dvojky dekadicky, binarne i hexadecimalne jednak klasickym vycislenim a prevodem (funkce pow
a decbin/dechex
) nebo trojici specialnich algoritmu, z nichz nejzajimavejsi je ten pro vycisleni dekadickeho cisla.
Binarni je totiz uplne primitivni (proste napise jednicku a pak vpodstate zadany pocet nul, hexa je na tom podobne, ale s tim dekadickym je to horsi. Historicky moment nastal 28. cervna 2011 ve 22:02, kdy jsem napsal prvni verzi tohoto algoritmu a na monitoru se objevilo kouzelne 0 0 0 0 0 0 1 0 2 4
).
Do finalni, usporne podoby jsem jej prepracoval az dalsi den, a to nekdy kolem 13:00.
$cislo=$_REQUEST["cislo"];
if ($cislo<0) {$cislo=0; echo "";}
if ($cislo>5000) {$cislo=5000; echo "";}
$oddel=$_REQUEST["oddel"]=="on";
echo "\n\n";
echo "Cislo zapsane klasicky dekadicky: | ".pow(2,$cislo)." D | \n";
echo "Cislo zapsane klasicky binarne: | ".decbin(pow(2,$cislo))." B | \n";
echo "Cislo zapsane klasicky hexadecimalne: | ".dechex(pow(2,$cislo))." H | \n";
echo " | ";
/*Toto je nuda. Ale ten můj algoritmus... to se všeci poserete:*/
echo "\n";
echo "Cislo zapsane zajimave dekadicky: | ";
/*//vypis posledni cislice
$pc=$cislo%4;
echo "* ".((($pc<3)&&($pc>0))?(2*$pc):(6+$pc*2/3));*/
// samotné generování
$p[1]=1;$pc=2;
for ($a=1;$a<=$cislo;$a++)
{ $co=0;
for ($b=1;$b<=$pc;$b++)
{
$p[$b]*=2;
if ($p[$b]>9) {$p[$b]%=10;
$cn=1; } else $cn=0;
$p[$b]+=$co;
if($b==$pc) if ($co==1) $pc++;
$co=$cn;
} }
//výpis na obrazovku
$cn=sizeof($p);
foreach (array_reverse($p) as $pc=>$a) {
if ($pc>0) {
if (((($cn-$pc)%3)==0)&&$oddel) echo " ";
echo $a;
} }
echo " D | \nCislo zapsane zajimave binarne: | ";
echo "1";
for ($a=$cislo;$a>=1;$a--) {
if ($oddel&&(($a%4)==0)) echo " ";
echo "0";
}
echo " B | \nCislo zapsane zajimave hexadecimalne: | ";
$pc=pow(2,$cislo%4);
echo $pc;
$pc=floor($cislo/4);
for ($a=$pc;$a>=1;$a--) {
if ($oddel&&(($a%2)==0)) echo " ";
echo "0";
}
echo " H | \n";
echo " |
";
?>