Сегодня 30 ноября, суббота ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7276
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Сайт Ильи Азарова.
Сайт Ильи Азарова.
Голосов: 2
Адрес блога: http://brainstorm.name
Добавлен: 2008-03-13 01:05:02
 

Простой пример реализации польской обратной записи на PHP

2011-09-29 23:28:32 (читать в оригинале)

Программирование
Алгоритмы
Обратная польская запись

Попросили простенький пример реализации обратной польской записи. Функция получает ряд чисел и знаков операций и производит их. Посмотрев как делают коллеги с eval(), задался вопросом, а можно ли без него и без рекурсии. Потратил 10 минут.

function revpl($str) {

  $list = explode(' ', $str);

  $numbers = array();

  $ops = array();

  $firstop = -1;

  foreach ($list as $key => $val) {

    if (preg_match('#^([\+\-\*\/]{1})$#', $val) ) {

      if($firstop < 0) {

        $firstop = $key;

      }

      $ops []= $val;

    }

    elseif (preg_match('#^(-[0-9]+|[0-9]+)$#', $val) ) {

      if($firstop < 0) {

        $numbers []= $val;

      }

      else{

         return FALSE;

      }

    }

  }

  $numbers = array_reverse($numbers);

  if(count($numbers) ) {

    $res = $numbers[0];

    $k =count($numbers);

    for($i = 1; $i < $k; $i++) {

      $j = $i -1;

      if(!isset($ops[$j] ) ) {

        return FALSE;

      }

      switch($ops[$j] ) {

        case '*':

          $res = $res * $numbers[$i];

          break;

        case '/':

          $res = $res / $numbers[$i];

          break;

        case '+':

          $res = $res + $numbers[$i];

            break;

        case '-':

          $res = $res - $numbers[$i];

        break;

      }

    }

    return $res;

  }

  return FALSE;

}

var_dump(revpl('5 8 3 + *') ); //55

Можно правда избавиться от регулярных выражений и оптимизировать еще, но пока нет необходимости.

 

 




 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»
Изменения рейтинга
Категория «Журналисты»
Взлеты Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.