fork(3) download
  1. <?php
  2. $input = "1+2*3/2*4-6=";
  3.  
  4. $tester = '#[\d\+\-*/=\s]#';
  5. for ($i=0; $i<mb_strlen($input); $i++) {
  6. if (!preg_match($tester, mb_substr($input, $i, 1))) {
  7. echo "Формат неверен";
  8. exit();
  9. }
  10. }
  11.  
  12. echo "Вычисляем значение выражения: $input\n";
  13.  
  14. $devider = '#(\+|-|\*|=|/)#';
  15. $parts = preg_split($devider, $input,0, PREG_SPLIT_DELIM_CAPTURE);
  16. $length = count($parts);
  17. $result = $parts[0];
  18.  
  19. for($i=1; $i<$length; $i++) {
  20. if ($parts[$i] == "+") {
  21. echo "$result + {$parts[$i+1]} = ";
  22. $result += $parts[$i+1];
  23. echo "$result\n";
  24. } elseif ($parts[$i] == "-") {
  25. echo "$result - {$parts[$i+1]} = ";
  26. $result -= $parts[$i+1];
  27. echo "$result\n";
  28. } elseif ($parts[$i] == "*") {
  29. echo "$result * {$parts[$i+1]} = ";
  30. $result *= $parts[$i+1];
  31. echo "$result\n";
  32. } elseif ($parts[$i] == "/") {
  33. echo "$result / {$parts[$i+1]} = ";
  34. $result /= $parts[$i+1];
  35. echo "$result\n";
  36. }
  37. }
  38.  
  39. echo "Ответ равен: $result";
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
Вычисляем значение выражения: 1+2*3/2*4-6=
1 + 2 = 3
3 * 3 = 9
9 / 2 = 4.5
4.5 * 4 = 18
18 - 6 = 12
Ответ равен: 12