Польская запись

Seregarival

Новичок
Польская запись

Я новичок, ничего большого пока не делал, делаю программу для перевода выражения в польскую запись:
PHP:
<?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) не передаются в другие функции и их надо объявить глобально, хотя не уверен ... посмотрите пожалуйста.
 

craz

Нестандартное звание
вообще-то все что нужно выводиться судя по коду. Вам поучиться, или шашечки?

если шашечки посмотрите в функции Polsha вы выводите пустое значение как результат.
 

Seregarival

Новичок
Автор оригинала: craz
если шашечки посмотрите в функции Polsha вы выводите пустое значение как результат.
В теле этой функции выполняется функция KtoEto, а она возвращает значение $all, или так нельзя делать?
 

Фанат

oncle terrible
Команда форума
кому возвращает?
и что потом с этой возвращенной $all происходит?

-~{}~ 10.03.10 11:19:

кстати
Ошибок никаких нету
error_reporting(E_ALL); в начало скрипта - появятся %)
 

Seregarival

Новичок
Не надо так грубо отвечать, я здесь не для того, чтобы посмеялись над моим неумением, а для того, чтоб научиться! Нет нормального ответа, лучше наверное пройти мимо ...
Я сразу сказал, что новичок.
Функция KtoEto возвращает значение $all при вызове насколько я понимаю ( т.к. в ней есть строка return($all)), а вызываю её в функции Polsha ...

Что потом происходит с $all если честно не знаю, но думаю её значение должно где-то хранится ...
 

Seregarival

Новичок
Re: Re: Польская запись

Это то, что мы можем встретить при обходе выражения ....
 

Вурдалак

Продвинутый новичок
Ну а с чего ты взял, что PHP тебя «поймёт»? У него его свой синтаксис.
 

craz

Нестандартное звание
Seregarival
Вурдалак - прав

Вы чего то недопонимаете, у вас не может быть в выражении

45[a-Z] - или это выражение будет единственным с которым будет работать этот код.


Короче вам подумать надо бы сначала что вы хотите а уж потом пытаться запрограммировать

P.s. и старайтесь ставить скобки везде где только можно - так в нормальном иде вы сможете отслеживать их закрытие в нужном месте.
PHP:
if ($simbol != "") 
if ($simbol="[a-Z]")
у вас заканчивается это условие на строке $all=$all+$simbol; так должно быть?
 

Seregarival

Новичок
Старался отталкиваться от его синтаксиса.

$simbol=substr($Formula,$i,2); - отрываем первый символ выражения и запускается блок проверки с условиями.

if ($simbol="[a-Z]") - если встретили переменную, то ...
if ($simbol = '["*","/"]') - если встретили знак операции , то ...

Выполняем нужные действия, $massiv выполняет роль стека, в $all периодически выталкиваются значения ...

Подскажи пожалуйста где с синтаксисом наврал ...
 

craz

Нестандартное звание
Автор оригинала: Seregarival
Старался отталкиваться от его синтаксиса.

$simbol=substr($Formula,$i,2); - отрываем первый символ выражения и запускается блок проверки с условиями.

if ($simbol="[a-Z]") - если встретили переменную, то ...
if ($simbol = '["*","/"]') - если встретили знак операции , то ...

Выполняем нужные действия, $massiv выполняет роль стека, в $all периодически выталкиваются значения ...

Подскажи пожалуйста где с синтаксисом наврал ...
вот тут к примеру
PHP:
if ($simbol="[a-Z]")
если встретил не переменную а все выражение
PHP:
[a-Z]

Скажи честно откуда пытался выдрать алгоритм, а?
ставлю на паскаль.
 

Seregarival

Новичок
craz, я для начала пытаюсь сделать, чтоб хоть с простенькими выражениями что-то получилось, как будет запускаться, приступлю к более сложным названиям переменных, большему количеству операций ... просто сильно простые скрипты, описанные в учебниках посмотрел, вроде все нормально, делаю - работают, поставил задачу и что-то не получается ....

-~{}~ 10.03.10 11:35:

Вурдалак, Пишу сам, алгоритм из лекций ... да, раньше на Delphi это делал ....

craz, не понял, в электронном учебнике вроде четко написано было, что это значит любой символ из диапазона a-Z, т.е. все маленькие и большие буквы...
 

craz

Нестандартное звание
Автор оригинала: Seregarival
craz, я для начала пытаюсь сделать, чтоб хоть с простенькими выражениями что-то получилось, как будет запускаться, приступлю к более сложным названиям переменных, большему количеству операций ... просто сильно простые скрипты, описанные в учебниках посмотрел, вроде все нормально, делаю - работают, поставил задачу и что-то не получается ....
if ($simbol="[a-Z]")
вы понимаете, что вы сравниваете $simbol со строкой??? Если нет, то продолжайте читать книги пока что - а уж тем более не выражения на польскую запись разбирать. Я бы щас вот не решился этого делать на php, если бы у меня не было дня 2 свободного абсолютно времени


-~{}~ 10.03.10 11:38:

Автор оригинала: Seregarival
craz, я для начала пытаюсь сделать, чтоб хоть с простенькими выражениями что-то получилось, как будет запускаться, приступлю к более сложным названиям переменных, большему количеству операций ... просто сильно простые скрипты, описанные в учебниках посмотрел, вроде все нормально, делаю - работают, поставил задачу и что-то не получается ....

-~{}~ 10.03.10 11:35:

Вурдалак, Пишу сам, алгоритм из лекций ... да, раньше на Delphi это делал ....

craz, не понял, в электронном учебнике вроде четко написано было, что это значит любой символ из диапазона a-Z, т.е. все маленькие и большие буквы...
ЭЭЭ - поделитесь ссылкой я может чего-то не знаю...
 

craz

Нестандартное звание
да я признать тоже

if ($simbol="[a-Z]") - это что вы еще раз сделали то? как проверяется равенство в php?
 

Фанат

oncle terrible
Команда форума
Не надо так грубо отвечать, я здесь не для того, чтобы посмеялись над моим неумением, а для того, чтоб научиться!
Во-первых, никто тебе грубо не отвечал. Не надо быть таким нервным.
Во-вторых, зачем ты здесь - мы все поняли. Но не забывай, что вокруг тоже люди. И, возможно, кто-то пришел и посмеяться. Ты же не собираешься указывать им что им делать и как себя вести?
В любом случае, над тобой никто не смеялся. Пока.

но думаю её значение должно где-то хранится ...
РНР не умеет читать мысли.
если ты ХОЧЕШЬ чтобы переменная где-то хранилась - ее надо куда-то положить.
программа делает только то, что ты в ней написал. а то, что подумал - она не делает.
 

craz

Нестандартное звание
<?php
$a = '[a-Z]';
if ($a=="[a-Z]"){ echo 'да';}
?>
<?php
$a = 'a';
if ($a=="[a-Z]"){;}else{ echo 'а так нет';}
?>

<?php
$a = 'a';
if ($a="[a-Z]"){ echo $a;}
?>

втыкайте

-~{}~ 10.03.10 11:48:

это кстати ошибка всех паскальщиков, про сравнение я имею ввиду, тоже раньше ошибался)
 
Сверху