PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
  • OpenCart
Календарь
Март (2023)
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031  
В продаже

  • Что нового?

    • Тест №2
    • Тест №1 для разработчиков
    • PHP 5.6 RC1
    • SQL. Как cкопировать данные одной колонки в другую, в той же таблице
    • GRUB изменить порядок загрузки OS в Linux
    • SSH - вход на сервер без ввода пароля
    • PhpMyAdmin - проблема с загрузкой большого файла на сервер
  • Комментарии

    • Hello
    • тут нечего не понятно
    • Может уже пора на WebStorm переходит...
    • Здравствуйте. 10 лет пользуюсь др...
    • Была такая проблема, решалась пе...
  • TOP-5

    • Метод POST (2945759 )
    • Привет, МИР! (911033 )
    • Метод GET (667533 )
    • Операторы (605801 )
    • Firefox уже запущен, но не отвечает... (353345 )

Перевод из обыкновенной дроби в периодическую дробь

Главная» Array » Перевод из обыкновенной дроби в периодическую дробь
PHP урок № 308
Перевод в периодическую дробь.
Задача:
Как найти результат деления двух чисел, а если есть период в десятичной дроби, то заключить его в скобки? Бесконечная десятичная дробь называется периодической, если ее последовательность цифр после запятой, начиная с некоторого места, представляет собой периодически повторяющуюся группу цифр. Период дроби принято заключать в скобки.
К примеру:
Найти результат деления, а если есть период, то заключить его в скобки.
Решение:
Данная функция находит частное двух чисел, а если есть период в дроби, то заключает его в скобки. Надеюсь, что мой код кому-нибудь понадобится, не считая меня.
Алгоритм работы функции:
В функцию поступают числовые значения: числитель (делимое) - $numerator и знаменатель (делитель) - $denominator.
  • Создается вспомогательный массив $array, в который будут записываться результаты деления.
  • Затем находим остаток от деления $numerator на $denominator - это $modulo.
  • Задаем счетчик $counter на 1. Образовываем цикл, который будет работать до тех пор, пока остаток $modulo будет равен нулю.
  • Заносим в массив значение счетчика. Остаток умножаем на 10, т.е. как при делении добавляем ноль.
  • При помощи функции explode извлекаем то, что находится до точки. И опять находим остаток - $modulo%=$denominator.
  • Добавляем еденицу счетчику. Цикл будет прокручиваться до тех пор, пока не начнет повторяться остаток. Если остаток повторяется, то цикл обрывается.
  • Затем стоит вспомогательное условие. Если найден модуль, то отображается часть при делении до точки и обработанный период в скобках после точки. Иначе, если периода нет, то просто отображаем результат деления.
  • Листинг № Array - Перевод из десятичной дроби в периодическую дробь. Функция.
    <?php
    function period($numerator,$denominator){
       
    $array=array();
       
    $modulo=$numerator%$denominator;
       
    $counter=1;
       while(
    $modulo!=0){
          if(
    $array[$modulo-1]!=0)break;
          
    $array[$modulo-1]=$counter;
          
    $modulo*=10;
          
    $explode=explode('.',$modulo/$denominator);
          
    $period.=$explode[0];
          
    $modulo%=$denominator;
          
    $counter++;
       }
       if(
    $modulo!=0){
          
    $part=explode('.',$numerator/$denominator);
          return 
    $part[0].'.'.substr($period,0,$array[$modulo-1]-1).'('.substr($period,$array[$modulo-1]-1).')';
       }
       else return 
    $numerator/$denominator;
    }
    echo 
    period(3870,36).'<br>';
    echo 
    period(397,259).'<br>';
    echo 
    period(183498,36).'<br>';
    echo 
    period(333,496);
    ?>
    Результат работы функции:
    107.5
    1.(532818)
    5097.1(6)
    0.6713(709677419354838)
    Проверить работу приложения.
    Урок закончен.
    PROcessor © LPHP.RU
    Администрация сайта
    Array
    Обсудить на форуме.
    • lphp.ru © 2009-2023