Advertisement
imedvedev

Untitled

Feb 23rd, 2014
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.88 KB | None | 0 0
  1. <?
  2. // показываем исходник
  3. if(isset($_GET["source"])) {
  4.     show_source(__FILE__);
  5. }
  6.  
  7. ini_set('display_errors', 1);
  8.  
  9. define("DEBUG", false);
  10.  
  11. function if_cc($num, $first_cc) {
  12.     if(ctype_alnum($num) || is_numeric($num)) {
  13.         $chars = str_split($num);
  14.         $chars = array_reverse($chars);
  15.         $e = 1;
  16.        
  17.         foreach($chars as $c) {
  18.             if(!is_numeric($c)) {
  19.                 $n = letterConverter($c);
  20.             } else {
  21.                 $n = $c;
  22.             }
  23.            
  24.             if($n > $first_cc) {
  25.                 $e = 0;
  26.             }
  27.         }
  28.        
  29.         if($e) {
  30.             return true;
  31.         } else {
  32.             return false;
  33.         }
  34.        
  35.     } else {
  36.         return false;
  37.     }
  38. }
  39.  
  40. // обрабатываем число
  41. function checkConverter($num, $lastss, $ss, $result = "") {
  42.     if($lastss != 10 && $ss == 10) {
  43.         return converterDec($num, $lastss);
  44.     } else {
  45.         return converter($num, $ss, $result);
  46.     }
  47. }
  48.  
  49. // конвертер в недесятичную систему
  50. function converter($num, $ss, $result = "") {
  51.     if(is_float($num+0)) {
  52.         $accuracy = strlen(substr(strrchr($num, "."), 1));
  53.        
  54.         $int = floor($num);
  55.         $float = $num - $int;
  56.        
  57.         $i = converterInt($int, $ss, $result);
  58.         $f = converterFloat($float, $ss, $accuracy, $result);
  59.         return "$i.$f";
  60.     } else {
  61.         return converterInt($num, $ss, $result);
  62.     }
  63. }
  64.  
  65. // конвертер целых чисел
  66. function converterInt($num, $ss, $result = "") {
  67.     $rest = $num / $ss;
  68.     $rest = floor($rest);
  69.    
  70.     $result[] = $num % $ss;
  71.    
  72.     if($rest > 0) {
  73.         return converterInt($rest, $ss, $result);
  74.     } else {
  75.         return return_array($result);
  76.     }
  77. }
  78.  
  79. // конвертер после ,
  80. function converterFloat($num, $ss, $accuracy, $result = "") {
  81.     for($i = 0; $i <= $accuracy; $i++) {
  82.         $rest = $num * $ss;
  83.         $r = floor($rest);
  84.        
  85.         if(DEBUG) {
  86.             echo "$num * $ss = $rest ($r) <br>";
  87.         }
  88.        
  89.         $result[] = $r;
  90.        
  91.         $num = $rest - $r;
  92.     }
  93.    
  94.     return return_array($result, false);
  95. }
  96.  
  97. // конвертер в десятичную
  98. function converterDec($num, $lastss) {
  99.     if(is_float($num+0)) {
  100.         $int = floor($num);
  101.         $float = $num - $int;
  102.        
  103.         $i = converterDecInt($int, $lastss);
  104.         $f = converterDecFloat($float, $lastss);
  105.         return "$i.$f";
  106.     } else {
  107.         return converterDecInt($num, $lastss);
  108.     }
  109. }
  110.  
  111. // конвертер целых десятичных
  112. function converterDecInt($num, $lastss) {
  113.     $chars = str_split($num);
  114.     $chars = array_reverse($chars);
  115.     $str = "";
  116.    
  117.     foreach($chars as $i=>$c){
  118.         if(is_numeric($c)) {
  119.             if(DEBUG) {
  120.                 echo "$c * $lastss <sup>$i</sup> <br>";
  121.             }
  122.             $str += $c * pow($lastss, $i);
  123.         } else {
  124.             $str += letterConverter($c) * pow($lastss, $i);
  125.         }
  126.     }
  127.     return $str;
  128. }
  129.  
  130. // конвертер целых десятичных
  131. function converterDecFloat($num, $lastss) {
  132.     $num = substr($num, strpos($num, ".") + 1);
  133.     $accuracy = strlen($num);
  134.     $chars = str_split($num);
  135.     $str = "";
  136.    
  137.     foreach($chars as $i=>$c){
  138.         $i++;
  139.         if(is_numeric($c)) {
  140.             if(DEBUG) {
  141.                 echo "$c * $lastss <sup>-$i</sup> <br>";
  142.             }
  143.             $str+= $c * pow($lastss, -$i);
  144.         } else {
  145.             $str+= letterConverter($c) * pow($lastss, -$i);
  146.         }
  147.     }
  148.     $rr = round($str, $accuracy);
  149.     return substr($rr, strpos($rr, ".") + 1);
  150. }
  151.  
  152.  
  153. // конвертер букв в цифры и обратно
  154. function letterConverter($l) {
  155.     if(is_numeric($l)) {
  156.         return strtoupper(chr($l + 87));
  157.     } else {
  158.         return ord(strtolower($l)) - 87;
  159.     }
  160. }
  161.  
  162. // возврат массива с числами в строку
  163. function return_array($result, $rev = true) {
  164.     if($rev) {
  165.         $result = array_reverse($result);
  166.     }
  167.     $string = "";
  168.    
  169.     foreach($result as $r) {
  170.         if($r > 9) {
  171.             $string.= letterConverter($r);
  172.         } else {
  173.             $string.= $r;
  174.         }
  175.     }
  176.    
  177.     return $string;
  178. }
  179.  
  180.  
  181. ?>
  182. <!doctype html>
  183. <html>
  184. <head>
  185.     <meta charset="UTF-8">
  186.     <title>Системы счисления</title>
  187.     <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css">
  188.     <style>
  189.         .wrapper {
  190.             width: 500px;
  191.             margin: 40px auto;
  192.         }
  193.        
  194.         .big {
  195.             padding: 25px;
  196.         }
  197.        
  198.         .center {
  199.             text-align: center;
  200.         }
  201.        
  202.         footer {
  203.             margin-top: 30px;
  204.             text-align: center;
  205.             border-top: 1px solid #ccc;
  206.             padding-top: 10px;
  207.             font-size: 12px;
  208.         }
  209.        
  210.         .big-wrapper {
  211.             width: 960px;
  212.         }
  213.        
  214.         header {
  215.             width: 100%;
  216.             height: 10px;
  217.             background: url(http://thepatternlibrary.com/img/aq.jpg);
  218.         }
  219.     </style>
  220. </head>
  221. <body>
  222.     <header></header>
  223.     <div class="wrapper <?=isset($_POST["submit"]) ? "big-wrapper" : ""?>">
  224.         <?
  225.         $first_cc = 12; // первая СС
  226.        
  227.         function calccc($a, $b, $cc) {
  228.             if(is_float($a+0) || is_float($b+0)){
  229.                 $Apos = strpos(strrev($a), ".");
  230.                 $Bpos = strpos(strrev($b), ".");
  231.                
  232.                 if($Apos > $Bpos) {
  233.                     $o = $Apos - $Bpos;
  234.                     for($i = 1; $i < $o; $i++){
  235.                         $b = $b."0";
  236.                     }
  237.                 }
  238.                
  239.                 if($Bpos > $Apos) {
  240.                     for($i = 1; $i < $o; $i++){
  241.                         $a = $a."0";
  242.                     }
  243.                 }
  244.                
  245.                 $Alen = strlen(substr($a, 0, strpos($a, ".")));
  246.                 $Blen = strlen(substr($b, 0, strpos($b, ".")));
  247.                
  248.                 if($Blen > $Alen) {
  249.                     $o = $Blen - $Alen;
  250.                     for($i = 0; $i < $o; $i++){
  251.                         $a = "0".$a;
  252.                     }
  253.                 }
  254.                
  255.                 if($Alen > $Blen) {
  256.                     $o = $Alen - $Blen;
  257.                     for($i = 0; $i < $o; $i++){
  258.                         $b = "0".$b;
  259.                     }
  260.                 }
  261.             } else {
  262.                 $Alen = strlen($a);
  263.                 $Blen = strlen($b);
  264.                
  265.                 if($Blen > $Alen) {
  266.                     $o = $Blen - $Alen;
  267.                     for($i = 0; $i < $o; $i++){
  268.                         $a = "0".$a;
  269.                     }
  270.                 }
  271.                
  272.                 if($Alen > $Blen) {
  273.                     $o = $Alen - $Blen;
  274.                     for($i = 0; $i < $o; $i++){
  275.                         $b = "0".$b;
  276.                     }
  277.                 }
  278.             }
  279.            
  280.             $Achars = str_split($a);
  281.             $Achars = array_reverse($Achars);
  282.            
  283.             $Bchars = str_split($b);
  284.             $Bchars = array_reverse($Bchars);
  285.        
  286.    
  287.             $new = array();
  288.             $rest = 0;
  289.             foreach($Achars as $key=>$ac) {
  290.                 if($ac == ".") {
  291.                     $new[] = ".";
  292.                 } else {
  293.                     if(is_numeric($ac)) {                  
  294.                         $na = $ac;
  295.                     } else {
  296.                         $na = letterConverter($ac);
  297.                     }
  298.                    
  299.                     if(is_numeric($Bchars[$key])) {                
  300.                         $nb = $Bchars[$key];
  301.                     } else {
  302.                         $nb = letterConverter($Bchars[$key]);
  303.                     }
  304.                    
  305.                     $nn = $rest + $na + $nb;
  306.  
  307.                     $rest = 0;
  308.                     if($nn > $cc) {
  309.                         $x = $nn - $cc;
  310.                         $rest = ($nn-$x)/$cc;
  311.                     } else {
  312.                         $x = $nn;
  313.                     }
  314.                    
  315.                     if(is_numeric($nn)) {                  
  316.                         $new[] = $x;
  317.                     } else {
  318.                         $new[] = letterConverter($x);
  319.                     }
  320.                 }
  321.             }
  322.             if($rest > 0) { $new[] = $rest; }
  323.            
  324.             return return_array($new, true);
  325.         }
  326.        
  327.         if(isset($_POST["submit"])) {
  328.             $A = $_POST["A"];
  329.             $A = str_replace(',', '.', $A);
  330.            
  331.             $B = $_POST["B"];
  332.             $B = str_replace(',', '.', $B);
  333.            
  334.             $C = $_POST["C"];
  335.             $C = str_replace(',', '.', $C);
  336.            
  337.             $ACheck = str_replace(".", "", str_replace(",", "", $A));
  338.             $BCheck = str_replace(".", "", str_replace(",", "", $B));
  339.             $CCheck = str_replace(".", "", str_replace(",", "", $C));
  340.            
  341.             $n = 0;
  342.            
  343.             if(if_cc($ACheck, $first_cc) && if_cc($BCheck, $first_cc) && if_cc($CCheck, $first_cc)){
  344.                 ?>
  345.                 <h3>Результат:</h3>
  346.                 <div class="big bg-info">
  347.                 <table class="table">
  348.                     <thead style="font-weight:bold;">
  349.                         <tr>
  350.                             <td width="8%"><span class="text-muted">№</span></td>
  351.                             <td width="23%"><?=$first_cc?></td>
  352.                             <td width="23%">10</td>
  353.                             <td width="23%">28</td>
  354.                             <td width="23%">9</td>
  355.                         </tr>
  356.                     </thead>
  357.                     <tbody>
  358.                 <?
  359.                 $result = array();
  360.                 $i = 0;
  361.                 while($A < $C) {
  362.                     $A = calccc($A, $B, $first_cc);
  363.                     ?>
  364.                     <tr>
  365.                         <td><?=++$i?></td>
  366.                         <td><?=$A?></td>
  367.                         <td><?=checkConverter($A, $first_cc, 10, $result)?></td>
  368.                         <td><?=checkConverter($A, $first_cc, 28, $result)?></td>
  369.                         <td><?=checkConverter($A, $first_cc, 9, $result)?></td>
  370.                     </tr>
  371.                     <?
  372.                 }
  373.                
  374.                 ?>
  375.                     </tbody>
  376.                 </table>
  377.                
  378.                    
  379.                 </div>
  380.                 <p class="text-right"><a href="#" onclick="location.reload(true)">Еще разок?</a></p>
  381.                 <?
  382.                
  383.                
  384.             } else {
  385.                 echo '<p class="big bg-danger">Ошибка! Вы должны ввести <strong>число в '.$first_cc.'-ричной системе счисления</strong></p>';
  386.             }
  387.         } else {
  388.         ?>
  389.        
  390.         <form method="post">
  391.             <label for="num">Введите число "A" в <?=$first_cc?>-ричной системе счисления:</label>
  392.             <input id="num" class="form-control" name="A" type="text" placeholder="Например: <?=rand(5,15)?>" value="100.10">
  393.            
  394.             <label for="num">Введите число "B":</label>
  395.             <input id="num" class="form-control" name="B" type="text" placeholder="Например: <?=rand(5,15)?>" value="4.32">
  396.            
  397.             <label for="num">Введите число "C":</label>
  398.             <input id="num" class="form-control" name="C" type="text" placeholder="Например: <?=rand(5,15)?>" value="12341.22">
  399.             <br>
  400.             <input class="btn btn-default" type="submit" name="submit">
  401.         </form>
  402.        
  403.         <?
  404.         }
  405.         ?>
  406.     </div>
  407. </body>
  408. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement