Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- // показываем исходник
- if(isset($_GET["source"])) {
- show_source(__FILE__);
- }
- ini_set('display_errors', 1);
- define("DEBUG", false);
- // обрабатываем число
- function checkConverter($num, $lastss, $ss, $result = "") {
- if($lastss != 10 && $ss == 10) {
- return converterDec($num, $lastss);
- } else {
- return converter($num, $ss, $result);
- }
- }
- // конвертер в недесятичную систему
- function converter($num, $ss, $result = "") {
- if(is_float($num+0)) {
- $accuracy = strlen(substr(strrchr($num, "."), 1));
- $int = floor($num);
- $float = $num - $int;
- $i = converterInt($int, $ss, $result);
- $f = converterFloat($float, $ss, $accuracy, $result);
- return "$i.$f";
- } else {
- return converterInt($num, $ss, $result);
- }
- }
- // конвертер целых чисел
- function converterInt($num, $ss, $result = "") {
- $rest = $num / $ss;
- $rest = floor($rest);
- $result[] = $num % $ss;
- if($rest > 0) {
- return converterInt($rest, $ss, $result);
- } else {
- return return_array($result);
- }
- }
- // конвертер после ,
- function converterFloat($num, $ss, $accuracy, $result = "") {
- for($i = 0; $i <= $accuracy; $i++) {
- $rest = $num * $ss;
- $r = floor($rest);
- if(DEBUG) {
- echo "$num * $ss = $rest ($r) <br>";
- }
- $result[] = $r;
- $num = $rest - $r;
- }
- return return_array($result, false);
- }
- // конвертер в десятичную
- function converterDec($num, $lastss) {
- if(is_float($num+0)) {
- $int = floor($num);
- $float = $num - $int;
- $i = converterDecInt($int, $lastss);
- $f = converterDecFloat($float, $lastss);
- return "$i.$f";
- } else {
- return converterDecInt($num, $lastss);
- }
- }
- // конвертер целых десятичных
- function converterDecInt($num, $lastss) {
- $chars = str_split($num);
- $chars = array_reverse($chars);
- $str = "";
- foreach($chars as $i=>$c){
- if(is_numeric($c)) {
- if(DEBUG) {
- echo "$c * $lastss <sup>$i</sup> <br>";
- }
- $str += $c * pow($lastss, $i);
- } else {
- $str += letterConverter($c) * pow($lastss, $i);
- }
- }
- return $str;
- }
- // конвертер целых десятичных
- function converterDecFloat($num, $lastss) {
- $num = substr($num, strpos($num, ".") + 1);
- $accuracy = strlen($num);
- $chars = str_split($num);
- $str = "";
- foreach($chars as $i=>$c){
- $i++;
- if(is_numeric($c)) {
- if(DEBUG) {
- echo "$c * $lastss <sup>-$i</sup> <br>";
- }
- $str+= $c * pow($lastss, -$i);
- } else {
- $str+= letterConverter($c) * pow($lastss, -$i);
- }
- }
- $rr = round($str, $accuracy);
- return substr($rr, strpos($rr, ".") + 1);
- }
- // конвертер букв в цифры и обратно
- function letterConverter($l) {
- if(is_numeric($l)) {
- return strtoupper(chr($l + 87));
- } else {
- return ord(strtolower($l)) - 87;
- }
- }
- // возврат массива с числами в строку
- function return_array($result, $rev = true) {
- if($rev) {
- $result = array_reverse($result);
- }
- $string = "";
- foreach($result as $r) {
- if($r > 9) {
- $string.= letterConverter($r);
- } else {
- $string.= $r;
- }
- }
- return $string;
- }
- ?>
- <!doctype html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Системы счисления</title>
- <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css">
- <style>
- .wrapper {
- width: 500px;
- margin: 40px auto;
- }
- .big {
- padding: 25px;
- }
- .center {
- text-align: center;
- }
- footer {
- margin-top: 30px;
- text-align: center;
- border-top: 1px solid #ccc;
- padding-top: 10px;
- font-size: 12px;
- }
- .big-wrapper {
- width: 960px;
- }
- header {
- width: 100%;
- height: 10px;
- background: url(http://thepatternlibrary.com/img/aq.jpg);
- }
- </style>
- </head>
- <body>
- <header></header>
- <div class="wrapper <?=isset($_POST["submit"]) ? "big-wrapper" : ""?>">
- <?
- if(isset($_POST["submit"])) {
- $num = $_POST["num"];
- $num = str_replace(',', '.', $num);
- if(is_numeric($num) || is_float($num+0)) {
- $result = array();
- $c10 = checkConverter($num, 12, 10, $result);
- $c21 = checkConverter($c10, 10, 28, $result);
- $c25 = checkConverter($c10, 28, 9, $result);
- ?>
- <div class="big bg-info">
- <strong>Результат:</strong><br>
- <div class="center">
- <strong><?=$num?></strong><sub>12</sub> —> <strong><?=$c10?></strong><sub>10</sub> —> <strong><?=$c21?></strong><sub>28</sub> —> <strong><?=$c25?></strong><sub>9</sub>
- </div>
- </div>
- <p class="text-right"><a href="#" onclick="location.reload(true)">Еще разок?</a></p>
- <?
- } else {
- echo '<p class="big bg-danger">Ошибка! Вы должны ввести <strong>число</strong></p>';
- }
- } else {
- ?>
- <form method="post">
- <label for="num">Введите десятичное число:</label>
- <input id="num" class="form-control" name="num" type="text" placeholder="Например: <?=rand(5,15)?>">
- <br>
- <input class="btn btn-default" type="submit" name="submit">
- </form>
- <?
- }
- ?>
- <footer>
- <a href="http://medvedev.im"><img src="http://medvedev.im/favicon.png" alt=""></a>
- <br>
- Автор: <a href="http://medvedev.im">Медведев Илья</a>, ПИЭ-31.
- </footer>
- </div>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement