Advertisement
imedvedev

VSSIT1

Feb 10th, 2014
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.47 KB | None | 0 0
  1. <?
  2. // показываем исходник
  3. if(isset($_GET["source"])) {
  4.     show_source(__FILE__);
  5. }
  6.  
  7.  
  8. ini_set('display_errors', 1);
  9.  
  10. define("DEBUG", false);
  11.  
  12. // обрабатываем число
  13. function checkConverter($num, $lastss, $ss, $result = "") {
  14.     if($lastss != 10 && $ss == 10) {
  15.         return converterDec($num, $lastss);
  16.     } else {
  17.         return converter($num, $ss, $result);
  18.     }
  19. }
  20.  
  21. // конвертер в недесятичную систему
  22. function converter($num, $ss, $result = "") {
  23.     if(is_float($num+0)) {
  24.         $accuracy = strlen(substr(strrchr($num, "."), 1));
  25.        
  26.         $int = floor($num);
  27.         $float = $num - $int;
  28.        
  29.         $i = converterInt($int, $ss, $result);
  30.         $f = converterFloat($float, $ss, $accuracy, $result);
  31.         return "$i.$f";
  32.     } else {
  33.         return converterInt($num, $ss, $result);
  34.     }
  35. }
  36.  
  37. // конвертер целых чисел
  38. function converterInt($num, $ss, $result = "") {
  39.     $rest = $num / $ss;
  40.     $rest = floor($rest);
  41.    
  42.     $result[] = $num % $ss;
  43.    
  44.     if($rest > 0) {
  45.         return converterInt($rest, $ss, $result);
  46.     } else {
  47.         return return_array($result);
  48.     }
  49. }
  50.  
  51. // конвертер после ,
  52. function converterFloat($num, $ss, $accuracy, $result = "") {
  53.     for($i = 0; $i <= $accuracy; $i++) {
  54.         $rest = $num * $ss;
  55.         $r = floor($rest);
  56.        
  57.         if(DEBUG) {
  58.             echo "$num * $ss = $rest ($r) <br>";
  59.         }
  60.        
  61.         $result[] = $r;
  62.        
  63.         $num = $rest - $r;
  64.     }
  65.    
  66.     return return_array($result, false);
  67. }
  68.  
  69. // конвертер в десятичную
  70. function converterDec($num, $lastss) {
  71.     if(is_float($num+0)) {
  72.         $int = floor($num);
  73.         $float = $num - $int;
  74.        
  75.         $i = converterDecInt($int, $lastss);
  76.         $f = converterDecFloat($float, $lastss);
  77.         return "$i.$f";
  78.     } else {
  79.         return converterDecInt($num, $lastss);
  80.     }
  81. }
  82.  
  83. // конвертер целых десятичных
  84. function converterDecInt($num, $lastss) {
  85.     $chars = str_split($num);
  86.     $chars = array_reverse($chars);
  87.     $str = "";
  88.    
  89.     foreach($chars as $i=>$c){
  90.         if(is_numeric($c)) {
  91.             if(DEBUG) {
  92.                 echo "$c * $lastss <sup>$i</sup> <br>";
  93.             }
  94.             $str += $c * pow($lastss, $i);
  95.         } else {
  96.             $str += letterConverter($c) * pow($lastss, $i);
  97.         }
  98.     }
  99.     return $str;
  100. }
  101.  
  102. // конвертер целых десятичных
  103. function converterDecFloat($num, $lastss) {
  104.     $num = substr($num, strpos($num, ".") + 1);
  105.     $accuracy = strlen($num);
  106.     $chars = str_split($num);
  107.     $str = "";
  108.    
  109.     foreach($chars as $i=>$c){
  110.         $i++;
  111.         if(is_numeric($c)) {
  112.             if(DEBUG) {
  113.                 echo "$c * $lastss <sup>-$i</sup> <br>";
  114.             }
  115.             $str+= $c * pow($lastss, -$i);
  116.         } else {
  117.             $str+= letterConverter($c) * pow($lastss, -$i);
  118.         }
  119.     }
  120.     $rr = round($str, $accuracy);
  121.     return substr($rr, strpos($rr, ".") + 1);
  122. }
  123.  
  124.  
  125. // конвертер букв в цифры и обратно
  126. function letterConverter($l) {
  127.     if(is_numeric($l)) {
  128.         return strtoupper(chr($l + 87));
  129.     } else {
  130.         return ord(strtolower($l)) - 87;
  131.     }
  132. }
  133.  
  134. // возврат массива с числами в строку
  135. function return_array($result, $rev = true) {
  136.     if($rev) {
  137.         $result = array_reverse($result);
  138.     }
  139.     $string = "";
  140.    
  141.     foreach($result as $r) {
  142.         if($r > 9) {
  143.             $string.= letterConverter($r);
  144.         } else {
  145.             $string.= $r;
  146.         }
  147.     }
  148.    
  149.     return $string;
  150. }
  151.  
  152.  
  153. ?>
  154. <!doctype html>
  155. <html>
  156. <head>
  157.     <meta charset="UTF-8">
  158.     <title>Системы счисления</title>
  159.     <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css">
  160.     <style>
  161.         .wrapper {
  162.             width: 500px;
  163.             margin: 40px auto;
  164.         }
  165.        
  166.         .big {
  167.             padding: 25px;
  168.         }
  169.        
  170.         .center {
  171.             text-align: center;
  172.         }
  173.        
  174.         footer {
  175.             margin-top: 30px;
  176.             text-align: center;
  177.             border-top: 1px solid #ccc;
  178.             padding-top: 10px;
  179.             font-size: 12px;
  180.         }
  181.        
  182.         .big-wrapper {
  183.             width: 960px;
  184.         }
  185.        
  186.         header {
  187.             width: 100%;
  188.             height: 10px;
  189.             background: url(http://thepatternlibrary.com/img/aq.jpg);
  190.         }
  191.     </style>
  192. </head>
  193. <body>
  194.     <header></header>
  195.     <div class="wrapper <?=isset($_POST["submit"]) ? "big-wrapper" : ""?>">
  196.         <?
  197.        
  198.         if(isset($_POST["submit"])) {
  199.             $num = $_POST["num"];
  200.             $num = str_replace(',', '.', $num);
  201.             if(is_numeric($num) || is_float($num+0)) {
  202.                 $result = array();
  203.                
  204.                 $c10 = checkConverter($num, 12, 10, $result);
  205.                 $c21 = checkConverter($c10, 10, 28, $result);
  206.                 $c25 = checkConverter($c10, 28, 9, $result);
  207.                
  208.                 ?>
  209.                 <div class="big bg-info">
  210.                     <strong>Результат:</strong><br>
  211.                     <div class="center">
  212.                         <strong><?=$num?></strong><sub>12</sub> —> <strong><?=$c10?></strong><sub>10</sub> —> <strong><?=$c21?></strong><sub>28</sub> —> <strong><?=$c25?></strong><sub>9</sub>
  213.                     </div>
  214.                 </div>
  215.                 <p class="text-right"><a href="#" onclick="location.reload(true)">Еще разок?</a></p>
  216.                 <?
  217.                
  218.                
  219.             } else {
  220.                 echo '<p class="big bg-danger">Ошибка! Вы должны ввести <strong>число</strong></p>';
  221.             }
  222.         } else {
  223.         ?>
  224.        
  225.         <form method="post">
  226.             <label for="num">Введите десятичное число:</label>
  227.             <input id="num" class="form-control" name="num" type="text" placeholder="Например: <?=rand(5,15)?>">
  228.             <br>
  229.             <input class="btn btn-default" type="submit" name="submit">
  230.         </form>
  231.        
  232.         <?
  233.         }
  234.         ?>
  235.        
  236.         <footer>
  237.             <a href="http://medvedev.im"><img src="http://medvedev.im/favicon.png" alt=""></a>
  238.             <br>
  239.             Автор: <a href="http://medvedev.im">Медведев Илья</a>, ПИЭ-31.
  240.         </footer>
  241.     </div>
  242. </body>
  243. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement