<?php
Function KtoEto($Simbol)
{
if ($simbol != "")
if ($simbol="[a-Z]")
$all=$all+$simbol;
if ($simbol = "["*","/"]")
{$prior=2;
if ($predprior <= $prior)
{
$mass=$mass+$simbol;
$predprior = $prior; } else
{
$a=strlen($mass);
for ($j=strlen($mass); $j >= 0; $j--)
{
$simbol1=substr($mass,$j,2);
$all=$all+$simbol1;
}
}
$mass=$mass+$simbol;
$predprior=$prior; }
if ($simbol= "["+", "-"]")
{$prior=1;
if ($predprior <= $prior)
{
$mass=$mass+$simbol;
$predprior = $prior;
} else
{
$a=strlen($mass);
for ($j=strlen($mass); $j >= 0; $j--)
{
$simbol1=substr($mass,$j,2);
$all=$all+$simbol1;
}
}
$mass=$mass+$simbol;
$predprior=$prior;
}
if ($simbol="(")
{$mass = $mass+$simbol;}
if ($simbol = ")")
for ($j=strlen($mass);; $j--)
{
$simbol1=substr($mass,$j,2);
$all=$all+$simbol1;
}
return($all);
}
Function Polsha($formula)
{
$formula = str_replace(" ","", $formula);
$dl=strlen($formula);
$x="";
$all="";
$predprior=0;
$mass="";
for ($i = 0; $i <= $dl; $i++)
{
$simbol=substr($Formula,$i,2);
KtoEto($simbol);
}
return($all);
}
$formula = "a*b+c-d/e";
echo(Polsha($formula));
?>
Думаю, что делаю что-то не так с функцией substr
Выдает ошибки:
if ($simbol = "["*","/"]") - деление на ноль, незнаю почему ...
$simbol1=substr($mass,$j,2); - Fatal error: Maximum execution time of 60 seconds exceeded in H:\home\testfirst.ru\www\index.php on line 43
Спустя 1 час, 19 минут, 15 секунд (9.03.2010 - 09:07) twin написал(а):
По подсветке же видно, * и / интерпретируются как операторы. Нужно в апострофах эту строку, а не в кавычках.
По поводу второй ошибки - там бесконечный цикл, так как не задано условие выхода. Скрипт вылетает по таймауту. На его работу отведено максимум 60 секунд.
По поводу второй ошибки - там бесконечный цикл, так как не задано условие выхода. Скрипт вылетает по таймауту. На его работу отведено максимум 60 секунд.
Спустя 13 часов, 1 минута, 7 секунд (9.03.2010 - 22:08) Seregarival написал(а):
<?php
Function KtoEto($Simbol)
{
if ($simbol != "")
if ($simbol="[a-Z]")
$all=$all+$simbol;
if ($simbol = '["*","/"]')
{$prior=2;
if ($predprior <= $prior)
{
$mass=$mass+$simbol;
$predprior = $prior; } else
{
$a=strlen($mass);
for ($j=strlen($mass); $j >= 0; $j--)
{
$simbol1=substr($mass,$j,2);
$all=$all+$simbol1;
}
}
$mass=$mass+$simbol;
$predprior=$prior; }
if ($simbol= '["+", "-"]')
{$prior=1;
if ($predprior <= $prior)
{
$mass=$mass+$simbol;
$predprior = $prior;
} else
{
$a=strlen($mass);
for ($j=strlen($mass); $j > 0; $j--)
{
$simbol1=substr($mass,$j,2);
$all=$all+$simbol1;
}
}
$mass=$mass+$simbol;
$predprior=$prior;
}
if ($simbol="(")
{$mass = $mass+$simbol;}
if ($simbol = ")")
for ($j=strlen($mass); $j > 0; $j--)
{
$simbol1=substr($mass,$j,2);
$all=$all+$simbol1;
}
return($all);
}
Function Polsha($formula)
{
$formula = str_replace(" ","", $formula);
$dl=strlen($formula);
$x="";
$all="";
$predprior=0;
$mass="";
for ($i = 0; $i <= $dl; $i++)
{
$simbol=substr($Formula,$i,2);
KtoEto($simbol);
}
return($all);
}
$formula = "a*b+c-d/e";
echo(Polsha($formula));
?>
Теперь ошибок никаких нету, но код не выполняется, только что читал про глобальные переменные, и возникла мысль, может переменные (Например $Simbol) не передаются в другие функции и их надо объявить глобально, хотя не уверен ... посмотрите пожалуйста.
Спустя 1 год, 11 месяцев, 16 дней, 18 часов, 56 минут, 38 секунд (26.02.2012 - 16:05) Guest написал(а):
нашел решение, нет? понимаю, что опоздал порядком, но:
if ($simbol="[a-Z]")
тут ты присваеваешь $simbol строку....
на первых порах вижу как вариант замену
if(($simbol>='a'&&$simbol<='z')||($simbol>='A'&&$simbol<='Z'))
if ($simbol="[a-Z]")
тут ты присваеваешь $simbol строку....
на первых порах вижу как вариант замену
if(($simbol>='a'&&$simbol<='z')||($simbol>='A'&&$simbol<='Z'))