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

Спасибо. сейчас буду со всем этим разбираться, вы мне уже очень помогли, довольно-таки много ошибок ....
 
Автор оригинала: Вурдалак
— и наоборот...
)) обратно пока что не пересаживался но думаю да,будет проблематично, хотя код на паскале все еще хорошо читаю.
 
Когда я делал лабы на Pascal'е, то постоянно матерился :) Неудобный синтаксис, in my humble opinion.
 
Возник вопрос, справочник облазил вдолб и поперек и не нашел функции Которая возвращала бы не часть строки, а символ, находящийся в опреденной позиции.

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

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

Нет решений проще? и вообще работоспособен ли такой вариант?
 
разницы нет никакой.
символ - это и есть часть строки.
а если ты имеешь в виду КОД символа, то да - готовой функции нету, но никто не мешает использовать две.
но сравнивать коды нет смысла - можно точно так же сравнивать и сами символы.
 
То есть в принципе , если вместо "[a-Z]" написать возможнве значения: "a", "b", "c" и т.д., то PHP выполнит сравнение?

И еще маленький вопросик ... прочитал, сравниваются значения не с помощью =, а операцией ==?
 
если соблюдать синтаксис.
понятия "сравнивать возможные значения" в пхп нету.

а вот написать ($char == "+" OR $char == "-") - это то же самое, что ($code == 43 OR $code == 45)
 
craz
На тему сравнения есть очень хорошая практика всегда сначала писать литерал. То есть писать не так
if ($a=="[a-Z]")
а вот так.
if ("[a-Z]" == $a)
Очень удобно. И вообще дисциплинирует)))
 
Seregarival
соответственно, для диапазона можно писать
($char > "a" AND $char < "z") или ($code > 65 AND $code < 90)
 
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 кода и посмотреть как меняются значения и что происходит на каждом шаге кода?
 
есть, xdebug
но можно просто добавить несколько print-ов, с тем же самым эффектом

-~{}~ 10.03.10 14:54:

Опять 25.
квадратные скобки в строках пхп не имеют НИКАКОГО ОСОБЕННОГО ЗНАЧЕНИЯ
 
Извините, надоел уже, новая редакция, волшебные 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 строки?
 
Seregarival
тебе не нужен пока отладчик
отладчик помогает только тому кто понимает, что он делает.

отладчик не нужен, чтобы разобраться с одной-единственной строчкой.
а тебе надо разбиратья именно с одной
сначала разберись, что ты хочешь от строчки
if ('["a", "b", "c", "d", "e", "f", "g", "h"]'==$simbol)
и как это на самом деле получить
а потом уже пиши все целиком.
 
Я закомментил эту строку и попробовал сравнить с символом a, по крайней мере один раз он по-моему должен был вывести символ a...
 
должен
лично я не вижу, почему не сравнивает.
во-первых, вместо print используй var_dump
во-вторых, разбирайся - почему не выводит
напечатай, что тебе возвращает strcmp
 
Еще небольшой вопросик =)
Как сложить 2 строки узнал, но в учебнике почему-то не стали писать как из строки вычесть другую.
Например:
'PH'.'P' - получится PHP
А как получить из 'NORTH' -> 'NO', то есть отрезать последних 3 символа, есть что-то типа точки?
Пока на ум пришло заменить соответствующий символ строки на '', т.е. на пустой символ...
 
Понял твою мысль, т.е. вернуть всю строку без последнего символа ... спасибо!
 
Сверху