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

Seregarival

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

craz

Нестандартное звание
Автор оригинала: Вурдалак
— и наоборот...
)) обратно пока что не пересаживался но думаю да,будет проблематично, хотя код на паскале все еще хорошо читаю.
 

Вурдалак

Продвинутый новичок
Когда я делал лабы на Pascal'е, то постоянно матерился :) Неудобный синтаксис, in my humble opinion.
 

Seregarival

Новичок
Возник вопрос, справочник облазил вдолб и поперек и не нашел функции Которая возвращала бы не часть строки, а символ, находящийся в опреденной позиции.

Пока на ум приходит решение: выделить часть строки длиной в один символ, преобразовать её в символ, а далее производить сравнение по таблице ASCII, например:

Функцией chr() вернуть код сивола и сравнивать его:
65-90 - переменная
42, 47 - *, /
43, 45 - +, -
40, 41 - (, )

Нет решений проще? и вообще работоспособен ли такой вариант?
 

Фанат

oncle terrible
Команда форума
разницы нет никакой.
символ - это и есть часть строки.
а если ты имеешь в виду КОД символа, то да - готовой функции нету, но никто не мешает использовать две.
но сравнивать коды нет смысла - можно точно так же сравнивать и сами символы.
 

Seregarival

Новичок
То есть в принципе , если вместо "[a-Z]" написать возможнве значения: "a", "b", "c" и т.д., то PHP выполнит сравнение?

И еще маленький вопросик ... прочитал, сравниваются значения не с помощью =, а операцией ==?
 

Фанат

oncle terrible
Команда форума
если соблюдать синтаксис.
понятия "сравнивать возможные значения" в пхп нету.

а вот написать ($char == "+" OR $char == "-") - это то же самое, что ($code == 43 OR $code == 45)
 

Mols

Новичок
craz
На тему сравнения есть очень хорошая практика всегда сначала писать литерал. То есть писать не так
if ($a=="[a-Z]")
а вот так.
if ("[a-Z]" == $a)
Очень удобно. И вообще дисциплинирует)))
 

Фанат

oncle terrible
Команда форума
Seregarival
соответственно, для диапазона можно писать
($char > "a" AND $char < "z") или ($code > 65 AND $code < 90)
 

Seregarival

Новичок
PHP:
<?php

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);
				if ($simbol != '')
				if ('["a", "b", "c", "d", "e", "f", "g", "h"]'==$simbol)
					$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);	
}

						
$formula = 'a*b+c-d/e';
print(Polsha($formula));
?>
Подскажите пожалуйста, немного переделал прогу, но все равно ошибку выявить не могу, ничего не выводится, а есть какие-нибудь программы, чтобы можно было выполнить трассировку php кода и посмотреть как меняются значения и что происходит на каждом шаге кода?
 

Фанат

oncle terrible
Команда форума
есть, xdebug
но можно просто добавить несколько print-ов, с тем же самым эффектом

-~{}~ 10.03.10 14:54:

Опять 25.
квадратные скобки в строках пхп не имеют НИКАКОГО ОСОБЕННОГО ЗНАЧЕНИЯ
 

Seregarival

Новичок
Извините, надоел уже, новая редакция, волшебные print-ы выявили много ошибок + для соединения строк используется точка .... много нового почерпнул, но отладка встала:

PHP:
<?php

Function Polsha($formula)
{
	print('Ok <br>');
	print("$formula <br>");
	$formula = str_replace(" ","", $formula);
			$dl=strlen($formula);
			$x='';
			$all='';
			$predprior=0;
			$mass='';
			for ($i = 0; $i <= $dl; $i++)
			{
				$simbol=substr($formula,$i,2);

// Если вот тут написать print($simbol), то выводится то, что нужно, то есть посимвольно он считывает и выдает a * и b и т.д.

			//	if ('' != $simbol)
				if ( strcmp(/*'("a", "b", "c", "d", "e", "f", "g", "h")'*/"a", $simbol)==0 )
					{

// Если тут, то уже не выводится, и непонятно ... Если он считал символ "a" почему не может сравнить ...


					print($simbol);
					$all=$all.$simbol;
					} else
				if ('("*", "/")'==$simbol)
					{
					print($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;
					}
					} else
				if ('("+", "-")'==$simbol)
					{
					$prior=1;
					if ($predprior <= $prior)
						{
						$mass=$mass.$simbol;
						print($mass);
						$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);
print($all);
}

						
$formula = 'a*b+c-d/e';
print(Polsha($formula));
?>
Никто не знает почему он не может сравнить 2 строки?
 

Фанат

oncle terrible
Команда форума
Seregarival
тебе не нужен пока отладчик
отладчик помогает только тому кто понимает, что он делает.

отладчик не нужен, чтобы разобраться с одной-единственной строчкой.
а тебе надо разбиратья именно с одной
сначала разберись, что ты хочешь от строчки
if ('["a", "b", "c", "d", "e", "f", "g", "h"]'==$simbol)
и как это на самом деле получить
а потом уже пиши все целиком.
 

Seregarival

Новичок
Я закомментил эту строку и попробовал сравнить с символом a, по крайней мере один раз он по-моему должен был вывести символ a...
 

Фанат

oncle terrible
Команда форума
должен
лично я не вижу, почему не сравнивает.
во-первых, вместо print используй var_dump
во-вторых, разбирайся - почему не выводит
напечатай, что тебе возвращает strcmp
 

Seregarival

Новичок
Еще небольшой вопросик =)
Как сложить 2 строки узнал, но в учебнике почему-то не стали писать как из строки вычесть другую.
Например:
'PH'.'P' - получится PHP
А как получить из 'NORTH' -> 'NO', то есть отрезать последних 3 символа, есть что-то типа точки?
Пока на ум пришло заменить соответствующий символ строки на '', т.е. на пустой символ...
 

Seregarival

Новичок
Понял твою мысль, т.е. вернуть всю строку без последнего символа ... спасибо!
 
Сверху