PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
Календарь
Апрель (2021)
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930  
В продаже

  • Что нового?

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

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

    • Метод POST (2940402)
    • Привет, МИР! (907353)
    • Метод GET (662403)
    • Операторы (602295)
    • Firefox уже запущен, но не отвечает... (347604)

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

Главная » Уроки PHP » Перевод из обыкновенной дроби в периодическую дробь
PHP урок № 308

Перевод в периодическую дробь.

Задача:

Как найти результат деления двух чисел, а если есть период в десятичной дроби, то заключить его в скобки? Бесконечная десятичная дробь называется периодической, если ее последовательность цифр после запятой, начиная с некоторого места, представляет собой периодически повторяющуюся группу цифр. Период дроби принято заключать в скобки.
К примеру:
  • 1/3 = 0.3333333.... = 0.(3)
  • 111/13 = 8.5384615384... = 8.(538461)
  • 251/6 = 41.83333333... = 41.8(3)
Найти результат деления, а если есть период, то заключить его в скобки.

Решение:

Данная функция находит частное двух чисел, а если есть период в дроби, то заключает его в скобки. Надеюсь, что мой код кому-нибудь понадобится, не считая меня.
Алгоритм работы функции:
  1. В функцию поступают числовые значения: числитель (делимое) - $numerator и знаменатель (делитель) - $denominator.
  2. Создается вспомогательный массив $array, в который будут записываться результаты деления.
  3. Затем находим остаток от деления $numerator на $denominator - это $modulo.
  4. Задаем счетчик $counter на 1. Образовываем цикл, который будет работать до тех пор, пока остаток $modulo будет равен нулю.
  5. Заносим в массив значение счетчика. Остаток умножаем на 10, т.е. как при делении добавляем ноль.
  6. При помощи функции explode извлекаем то, что находится до точки. И опять находим остаток - $modulo%=$denominator.
  7. Добавляем еденицу счетчику. Цикл будет прокручиваться до тех пор, пока не начнет повторяться остаток. Если остаток повторяется, то цикл обрывается.
  8. Затем стоит вспомогательное условие. Если найден модуль, то отображается часть при делении до точки и обработанный период в скобках после точки. Иначе, если периода нет, то просто отображаем результат деления.

Листинг № 1 - Перевод из десятичной дроби в периодическую дробь. Функция.

<?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
Администрация сайта
26.05.2010 15:31:11

Обсудить на форуме.
Понравился урок? Не пропусти следующий!
Рекомендованные уроки этого раздела:
  • Проверка квадратного уравнения
  • Перевод из обыкновенной дроби в периодическую дробь
  • Zend Framework 2 установка
  • Бегущая строка в HTML, тег MARQUEE.

Напишите свой комментарий
Ваше имя
Сообщение
Введите цифры с картинки:
 

Комментарии

паша 23.04.2020 20:37:37
тут нечего не понятно
  • Яндекс.Метрика Здесь находится аттестат нашего WM идентификатора 185571665285
  • "LPHPRU" © 2009-2021