1. PHP / Говнокод #23169

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    /* сделать логику переводчика из 10 системы в 2, 8 и 16, что бы на вход было десятичное число, 
    а на выходе двоичное, восьмеричное и шеснадцатиричное представление */
    
    // для проверки, функциями php
    $i=378;
    echo "$i в двоичной системе = " . base_convert ($i, 10, 2) . PHP_EOL;
    echo "$i в восьмеричной системе = " . base_convert ($i, 10, 8) . PHP_EOL;
    echo "$i в шестнадцатиричной системе = " . base_convert ($i, 10, 16) . PHP_EOL;
    unset ($i);
    
    // десятичное в двоичное, используя алгоритм http://vestikinc.narod.ru/AB/dec_bin_tr.htm
    $a = 378;
    $b = ''; // пустая строковая переменная
        while ($a != 0) {
            $b = ($a % 2) . $b; //добавляем в начало остаток от деления, как младший бит двоичного числа
            $a = (int)($a / 2); //принимаем целую часть частного за новое делимое
        }
    echo $b . PHP_EOL;
    
    unset ($a, $b);
    
    // десятичное в восьмеричное, используя алгоритм http://vestikinc.narod.ru/AB/dec_oct_tr.htm
    $a = 378;
    $b = ''; // пустая строковая переменная
        while ($a != 0 & $a % 8 < 8) {
            $b = ($a % 8) . $b; //добавляем в начало остаток от деления, как младший бит двоичного числа
            $a = (int)($a / 8); //принимаем целую часть частного за новое делимое
        }
    echo $b . PHP_EOL;
    unset ($a, $b);
    
    // десятичное в шестнадцатеричное, через двоичное
    $a = 378;
    $b = ''; // пустая строковая переменная
        while ($a != 0) {
            $b = ($a % 2) . $b; //добавляем в начало остаток от деления, как младший бит двоичного числа
            $a = (int)($a / 2); //принимаем целую часть частного за новое делимое
    }
    $count = strlen($b);
        while(($count % 4) != 0) { // если количество символов не кратно 4
            $b='0'. $b;            // то добавляем в начало 0
            $count = strlen($b);   // снова вычисляем длину
    }
        $c = '';                                     // пустая строковая переменная
        for($d = 0; $d < $count; $d = $d + 4)        //пока счётчик меньше количества символов, прибавляем 4
        {
            $c = $c . strtr(substr($b, $d,4), //добавляем к $c замену 4-х символов $b с позиции $d
                array('0000'=>'0',
                      '0001'=>'1',
                      '0010'=>'2',
                      '0011'=>'3',
                      '0100'=>'4',
                      '0101'=>'5',
                      '0110'=>'6',
                      '0111'=>'7',
                      '1000'=>'8',
                      '1001'=>'9',
                      '1010'=>'A',
                      '1011'=>'B',
                      '1100'=>'C',
                      '1101'=>'D',
                      '1110'=>'E',
                      '1111'=>'F'));
        }
    echo $c . PHP_EOL;
    
    unset ($a, $b, $c, $d);
    
    // десятичное в шестнадцатеричное, используя алгоритм http://vestikinc.narod.ru/AB/dec_hex_tr.htm
    $a = 378;
    $b = ''; // пустая строковая переменная
    while ($a != 0) {
        if ($a % 16 > 0 & $a % 16 < 10):
            $b = ($a % 16) . $b;
        elseif ($a % 16 == 10):
            $b = 'A' . $b;
        elseif ($a % 16 == 11):
            $b = 'B' . $b;
        elseif ($a % 16 == 12):
            $b = 'C' . $b;
        elseif ($a % 16 == 13):
            $b = 'D' . $b;
        elseif ($a % 16 == 14):
            $b = 'E' . $b;
        elseif ($a % 16 == 15):
            $b = 'F' . $b;
        endif;
        $a = (int)($a / 16);     //принимаем целую часть частного за новое делимое
    }
    echo $b . PHP_EOL;

    логика переводчика из 10 системы исчисления в 2, 8 и 16, чтобы на входе было десятичное число, а на выходе двоичное, восьмеричное и шеснадцатиричное представление

    прошу сильно гавном не бросать - на старости лет, впервые в жизни учу программирование, месяц всего-то как заглянул за экран

    Запостил: iconoclastov, 09 Июля 2017

    Комментарии (2) RSS

    • > на старости лет, впервые в жизни учу программирование
      > PHP
      Виртуальный старческий маразм? Хмм...
      Ответить
      • не, надоело друзей задрачивать да всяким задротам деньги платить за разработку... а задачки - это с курсов, на которые пошёл, fullstack developer называются. а чёб и нет?
        Ответить

    Добавить комментарий