преобразование записи из инфиксной в польскую обратную нотацию

Ноброго времени суток.
есть проблемка =( Надо из инфиксной записи преобразовать в польскую обратную запись... (пример из 3*(2+2) долно получиться 3 2 2 + *; причем должны после каждой цифры и символа присутствовать пробелы!) ссылку на википедию не бросайте. уже читала, вот что сделала:
PHP:
function convert(){  //преобразую из инфиксной нотации в ОПН
    $exp0=chunk_split($exp); //?разбить строку на символы
    $stack0=array(); //стэк
    $exit=array(); // выходная строка
        while (count($expr0)!==0){
        if is_numeric($exp0){
            array_push($exit, $exp0);
        } elseif (in_array($exp0, array('*','/','+','-'))) {
            array_push($stack0, ); // добавить этот знак в стэк
        }
    }
    return array_push($exit, $stack0);
}
но естественно программа не работает, да и я пока значения не все вписала =(
и тут нет учета скобак... =(
 
=) уже тоже изучала (и по алгоритму пыталась написать, получилась то, что вверху в виде php кода написано)... да и Си я не знаю( и php тоже =)
 

WMix

герр M:)ller
Партнер клуба
НатальяПавлинкович
ты хочешь поучиться или чтоб за тебя сделали, написано более менее правильно, поправь синтакс и подгляди еще раз откуда слизывала там приоритет операций есть. и финиш
 

hell0w0rd

Продвинутый новичок
Девушка(если девушка), уже неделю ищешь алгоритм)
Методом пристального взгляда изучения алгоритма видно, что ничего сложнее циклов и ветвлений там нет. Проще всего взять ide и дебагером посмотреть как все преобразуется)
потрать день на изучение синтаксиса для этой задачи ничего более не надо) Или не пудри мозги себе и преподам;)
 
GusakovNick
я прекрасно понимаю, что там только циклы, но я еще, блин, php только изучаю(. почти ничего не знаю. и алгоритм я попробовала реализовать, как-то сильно хорошего из этого не вышло.
я думала здесь помогут с синтаксисом... а не ссылки бросать. думаете я не все облазила, прежде, чем сюда писать?
если взялся за какую-то задачу, значит надо ее добить.
дая я не поняла даже что за предложение : Проще всего взять ide и дебагером посмотреть как все преобразуется)
 

hell0w0rd

Продвинутый новичок
НатальяПавлинкович
Что по синтаксису не понятно?
Качаешь M VC++ studio express копипастишь туда код из вики и изучаешь:)
 

WMix

герр M:)ller
Партнер клуба
дальше справишься?
PHP:
function convert($exp){  //преобразую из инфиксной нотации в ОПН
    $expArr=explode(' ', $exp); //?разбить строку на символы
    $stack0=array(); //стэк
    $exit=array(); // выходная строка
    foreach($expArr as $exp0){
        if( is_numeric($exp0)){
        	$exit[]=$exp0;
           // array_push($exit, $exp0);
        } elseif (in_array($exp0, array('*','/','+','-'))) {
           // array_push($stack0,$exp0 ); // добавить этот знак в стэк
            $stack0[]=$exp0;
        }
    }
    return array($exit, $stack0);
}
print_r(convert('10 + 12'));
 
добавила еще
PHP:
    $exprArray=array_merge($exit, $stack0);
    $expr=implode(" ", $exprArray);
    return $expr;

echo convert($exp);
так он вообще ничего не показывает - белый экран браузера =(
 

WMix

герр M:)ller
Партнер клуба
идея хорошая, мне нравится!
PHP:
echo convert($exp);
чему равен $exp?

и самое время прочесть эту статейку
http://phpfaq.ru/debug
 

WMix

герр M:)ller
Партнер клуба
ну великолепно.
делаем по шагам проверяясь.

пробую воссоздать (не тестил)
PHP:
function convert($exp){  //преобразую из инфиксной нотации в ОПН
    $expArr=explode(' ', $exp); //?разбить строку на символы
    $stack0=array(); //стэк
    $exit=array(); // выходная строка
    foreach($expArr as $exp0){
        if( is_numeric($exp0)){
            $exit[]=$exp0;
           // array_push($exit, $exp0);
        } elseif (in_array($exp0, array('*','/','+','-'))) {
           // array_push($stack0,$exp0 ); // добавить этот знак в стэк
            $stack0[]=$exp0;
        }
    }
    $exprArray=array_merge($exit, $stack0);
    echo 'exprArray='.print_r($exprArray, true);
    $expr=implode(" ", $exprArray);
    return $expr;
    //return array($exit, $stack0);
}
$exp=$_POST['expression']; 
echo 'exp='.print_r($exp, true);
echo 'RESULT='.convert($exp);
 

WMix

герр M:)ller
Партнер клуба
все правильно значит
в моем случае было написано
PHP:
$expArr=explode(' ', $exp); //?разбить строку на символы
те я подразумевал что будут пробелы
причем должны после каждой цифры и символа присутствовать пробелы
подгляди сюда и замени
Код явно не запускался. Разбиение на токены неправильное, например. Там проще через preg_split:
PHP:
$tokenList = preg_split('#([+\-*/\^()]|\d+)#', '2+2(6^2*8-4)+7/4', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
 
Сверху