Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
5 / 5 / 0
Регистрация: 29.10.2009
Сообщений: 56

Ошибка в вычислениях

12.10.2010, 23:34. Показов 813. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изучаю php, как задачку решил написать простенькую программку, которая переводит десятичное число в двоичное и наоборот. Написать-то написал, но работает правильно только та часть, что десятичное в двоичное переходит.
Помогите отыскать ошибку, скорее всего где-то в "function dtot()" она.
Вот листинг:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
<head>
    <title>Преобразование чисел</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
 
<body>
    <form action="preobraz.php" method="post">
        Введите десятичное число: <input type=text name=tnumber size=5>
        или двоичное число: <input type=text name=dnumber size=5><br>
        <input type=submit name="Преобразовать">
    </form>
    
    <?php
        function ttod($chislo)  //Функция перевода десятичного числа в двоичное, тут всё правильно
        {
            if ($chislo%2==0)
                {
                    $itog="0";
                }
                else
                {
                    $itog="1";
                }
            while ($chislo>=2)
            {
                if ($chislo%2==0)
                {
                    $chislo=$chislo/2;
                    $res=$chislo%2;
                }
                else
                {
                    $chislo=($chislo-$chislo%2)/2;
                    $res=$chislo%2;
                }
                $itog=$res.$itog;
            }
            return $itog;
        }
        
        function stepen ($x,$y) //2 , dlina-1  Функция вычисления степени двойки, используется в переводе двоичного числа в десятичное
        {
            if ($y>0)
            {
                $stepen=pow($x,$y);
            }
            else
            {
                $stepen=1;
            }
            echo "Степень равна $stepen"; ?> <br> <?php
            return $stepen;
        }
        
        function dtot($chislo)  // Функция перевода двоичного числа в десятичное, тут-то вся и заморочка
        {
            $dlina=strlen($chislo);
            echo "Длина равна $dlina";?> <br> <?php
            if ($dlina == 0)
            {
                return $res;
            }
            else
            {
                switch ($chislo[0]) //Просмотр первой цифры двоичного числа
                {
                    case "0": // Если "0" - то просто "отрезаем и выкидываем" эту цифру от числа, вызываем функцию снова
                        $chislo=substr($chislo, 1, $dlina-1);?> <br> <?php
                        dtot($chislo);
                        break;
                    case "1": // Если "1" - то $res увеличивается на необходимую степень двойки (см. функцию stepen() ), уже ненужная цифра "отрезается и выкидывается", вызываем функцию снова
// различные echo вставил для того, чтобы понятней было, что, как и когда программа вычисляет и всё это на экран выводилось
                        $res=$res+stepen(2,$dlina-1);
                        $chislo=substr($chislo, 1, $dlina-1);
                        echo "Результат равен $res";?> <br> <?php 
                        dtot($chislo);
                        break;
                }
            }
            return $res;
        }
        
        if ($_POST["tnumber"]) echo $_POST["tnumber"]."<sub>10</sub> = ".ttod($_POST["tnumber"])."<sub>2</sub>";
        elseif ($_POST["dnumber"]) echo $_POST["dnumber"]."<sub>2</sub> = ".dtot($_POST["dnumber"])."<sub>10</sub>";
        ?>
</body>
</html>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2010, 23:34
Ответы с готовыми решениями:

непонятка в вычислениях
делаю следующие вычисления $cost=7.95; $cost_tax=round(($cost+0.3+(($cost/100)*15)-$cost),2); # 0.3 + 15% от $cost ...

Ошибка в вычислениях
Вот почему, начиная с 31вой строчки в листбоксе идёт такая фигня: сначала отрицательное число, а потом вообще нули? procedure...

Ошибка в вычислениях
Есть задание, решить СЛАУ методом простой итерации. Программа написана, но выдает такую вот ошибку ??? Error using ==&gt; minus Matrix...

2
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
13.10.2010, 07:41
ты все правильно написал, но кое-что не учел
допиши одну строчку:
PHP
1
2
3
4
function dtot($chislo)
{
    GLOBAL $res;
    // все остальное
проблема была в том, что когда ты увеличиваешь $res, а после этого рекурсивно вызываешь dtot(), то значение переменной $res не сохраняется т.к. она локальная в функции

а, вообще, на будущее:
PHP
1
echo base_convert('10111010101', 2, 10);
2
5 / 5 / 0
Регистрация: 29.10.2009
Сообщений: 56
14.10.2010, 19:17  [ТС]
Ясненько, спасибо!
Всё заработало)))) Демаю, тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2010, 19:17
Помогаю со студенческими работами здесь

Ошибка в вычислениях
Здравствуйте, подскажите пожалуйста, в чем может быть ошибка, переношу программу из Fortran в Pascal и есть разница в вычислениях в...

Ошибка в вычислениях
Добрый день. Пишу простенькую программу для вычисления формулы, казалось бы, всё работает правильно, но в результате (при любых значениях...

ошибка в вычислениях
Здравствуйте, помогите, пожалуйста! Что здесь может быть? Почему выдает ошибку?

Ошибка в вычислениях
Я пишу расчёт ввожу числа, а при нажатии на кнопку вычислить получаю ошибку будто бы входные данные равны 0. Не понимаю в чём дело,как...

Ошибка в вычислениях
Пишу в emu8086. Ассемблер не изучаю! Но надо сделать задание на нём Не могу ничего понять. Прога рассчитывает не правильно. В данном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru