fork(2) download
  1. <?php
  2.  
  3. // куркулятор
  4. $input = '2.5+7.5/2*10=';
  5. $inputLength = mb_strlen ($input);
  6.  
  7. $result = 0; // Текущее число, которое набирает пользователь
  8. $number = 0; // Результат предыдущих действий
  9. $op = ''; // Предыдущая операция
  10. $resultatText = "Ответ: ";
  11.  
  12. for ($i = 0; $i < $inputLength; $i++) {
  13. $char = mb_substr($input, $i, 1);
  14. if ($char =='*' || $char =='+' || $char =='-' || $char =='=' || $char =='/') {
  15. echo "op = [$op], result = [$result], number = [$number], char = [$char]\n";
  16. $resultatText .= $number . $char;
  17.  
  18. if ($op=='') {
  19. $op = $char;
  20. $result = $number;
  21. $number=0;
  22. } else {
  23. $result = operation($result, $number, $op);
  24. $number = 0;
  25. $op = $char;
  26. }
  27.  
  28. } elseif (is_numeric($char) | $char=='.') {
  29. if ($number==0) {
  30. $number = $char;
  31. } else {
  32. $number .= $char;
  33. }
  34. } else {
  35. echo "Неверный символ: '$char'\n";
  36. }
  37. }
  38. echo "$resultatText$result\n";
  39.  
  40. function operation ($result, $number, $op) {
  41. $number = floatval($number);
  42.  
  43. if ($op =='*' ) {
  44. $result *= $number;
  45. } elseif ($op =='/') {
  46. $result /= $number;
  47. } elseif ($op =='+') {
  48. $result += $number;
  49. } elseif ($op =='-') {
  50. $result -= $number;
  51. } elseif ($op =='=') {
  52. echo "result: $result\n";
  53. exit();
  54. }
  55. return $result;
  56. }
  57.  
  58. ?>
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
op = [], result = [0], number = [243], char = [+]
op = [+], result = [243], number = [6743], char = [-]
op = [-], result = [6986], number = [78], char = [*]
op = [*], result = [6908], number = [2], char = [=]
Ответ: 243+6743-78*2=13816