fork download
  1. <?php
  2.  
  3. /*Задача: написать программу, имитирующую работу обычного кнопочного калькулятора (если у тебя нет калькулятора, можешь
  4.  попробовать запустить его на телефоне/айфоне/компьютере). Калькулятору на вход дается строка, содержащая целые числа и
  5.  знаки «+», «-», «*» и «=». По знаку «=» калькулятор выводит ответ.
  6.  
  7. идея примерно такая: мы заводим переменные $result (результат предыдущих действий), $number (число, которое сейчас
  8. набирается) и $op (предыдущая операция). Затем разбираем строку посимвольно (циклом for). Если это цифра — добавляем ее
  9. к числу $number (умножаем на 10 и прибавляем цифру), если это операция — то выполняем предыдущую операцию (которую мы
  10. храним в $op) над $result и $number, сохраняем итог в $result, а текущую операцию на будущее сохраняем в op. Если это
  11.  «=», то выполняем предыдущую операцию и выводим $result */
  12.  
  13. $input='123+345=';
  14. $inputLenght=mb_strlen($input);
  15.  
  16. $number=null; //число, которое сейчас набирается
  17. $result=null; //результат предыдущих действий
  18. $op=null; //предыдущая операция
  19.  
  20. for ($i=0; $i<$inputLenght; $i++){
  21. $char=mb_substr($input,$i,1);
  22. if($char=='+' || $char=='-' || $char=='*' || $char=='/'){
  23. if(isset($op)){
  24. switch ($op){
  25. case '+':
  26. $result=intval($result)+intval($number);
  27. echo $result;
  28. unset($number);
  29. $op=$char;
  30. break;
  31. case '-':
  32. $result=$result-intval($number);
  33. unset($number);
  34. $op=$char;
  35. break;
  36. case '/':
  37. $result=$result/intval($number);
  38. unset($number);
  39. $op=$char;
  40. break;
  41. case '*':
  42. $result=$result*intval($number);
  43. unset($number);
  44. $op=$char;
  45. break;
  46. }
  47. }
  48. else{
  49. $op=$char;
  50. }
  51. }
  52. elseif ($char=='='){
  53. switch ($op){
  54. case '+':
  55. $result=$result+intval($number);
  56. break;
  57. case '-':
  58. $result=$result-intval($number);
  59. break;
  60. case '/':
  61. $result=$result/intval($number);
  62. break;
  63. case '*':
  64. $result=$result*intval($number);
  65. break;
  66. }
  67. echo "Result is $result \n";
  68. }
  69. elseif (is_numeric($char)){
  70. if(isset($number)){
  71. $number=intval($number.$char);
  72. }
  73. else{
  74. $number=intval($char);
  75. }
  76. }
  77. else{
  78. echo "Corrupt symbol '$char'\n";
  79. }
  80. }
Runtime error #stdin #stdout #stderr 0s 82880KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
PHP Fatal error:  Uncaught Error: Call to undefined function mb_strlen() in /home/8DynTa/prog.php:14
Stack trace:
#0 {main}
  thrown in /home/8DynTa/prog.php on line 14