fork download
  1. /*Калькулятор
  2.  
  3. Задача: написать программу, имитирующую работу обычного кнопочного калькулятора (если у тебя нет калькулятора, можешь
  4. попробовать запустить его на телефоне/айфоне/компьютере). Калькулятору на вход дается строка, содержащая целые числа
  5. и знаки «+», «-», «*» и «=». По знаку «=» калькулятор выводит ответ. Порядок действий не соблюдается (как и в
  6. обычном калькуляторе), то есть 2+2*2= выведет 8. Скажу по секрету, писать калькулятор со скобками и порядком действий
  7. — в разы сложнее!
  8.  
  9. Если сложно, попробуй начать с всего 2 действий, например 345+567=
  10.  
  11. Усложнение: ввести поддержку дробных чисел и деления*/
  12. <?php
  13. function getResult(float $result, string $op, float $number)
  14. {
  15. switch ($op) {
  16. case '+':
  17. $result += $number;
  18. break;
  19. case '-':
  20. $result -= $number;
  21. break;
  22. case '*':
  23. $result *= $number;
  24. break;
  25. case '/':
  26. $result /= $number;
  27. break;
  28. case '^':
  29. $result = pow($result, $number);
  30. }
  31. return $result;
  32. }
  33.  
  34. $operations = "2.2+2-2+1+0*0+23-32+9+2*3^2/3*0+9990009.2=";//"345+234+3-2*2/2=";
  35. $inputLength = mb_strlen($operations);
  36.  
  37. $number = "";
  38. $result = 0;
  39. $op = ''; //предыдущая операция
  40.  
  41. for ($i = 0; $i < $inputLength; $i++) {
  42. $char = mb_substr($operations, $i, 1);
  43. if ($char == '+' || $char == '-' || $char == '*' || $char == '/' || $char == '^') {
  44. if ($result != 0 && $number != "") {
  45. $result = getResult($result, $op, (float)$number);
  46. $number = "";//Обнуляем $number, т.к. иначе к уже полученному числу ещё добавются цифры, следующие за арифметическими знаками
  47. $op = $char;
  48. } elseif($result == 0){
  49. $result = (float)$number;
  50. $number = "";//$number уже хранится в $result => обнуляем
  51. $op = $char;
  52. }
  53. } elseif ($char == '=') {
  54. $result = getResult($result, $op, $number);
  55. $i = $inputLength;//Для случаев, когда в строке полсе равно ещё есть символы после знака равно
  56. } else {
  57. if(is_numeric($char) || $char == '.'){
  58. $number .= $char;
  59. }
  60. }
  61. }
  62. echo "Result: " . $result . "\n";
  63. ?>
Runtime error #stdin #stdout #stderr 0s 82560KB
stdin
Standard input is empty
stdout
/*Калькулятор

Задача: написать программу, имитирующую работу обычного кнопочного калькулятора (если у тебя нет калькулятора, можешь
попробовать запустить его на телефоне/айфоне/компьютере). Калькулятору на вход дается строка, содержащая целые числа
и знаки  «+», «-», «*» и «=». По знаку «=» калькулятор выводит ответ. Порядок действий не соблюдается (как и в
обычном калькуляторе), то есть 2+2*2= выведет 8. Скажу по секрету, писать калькулятор со скобками и порядком действий
— в разы сложнее!

Если сложно, попробуй начать с всего 2 действий, например 345+567=

Усложнение: ввести поддержку дробных чисел и деления*/
stderr
PHP Fatal error:  Uncaught Error: Call to undefined function mb_internal_encoding() in /home/PTUzFQ/prog.php:34
Stack trace:
#0 {main}
  thrown in /home/PTUzFQ/prog.php on line 34