/*Калькулятор
Задача: написать программу, имитирующую работу обычного кнопочного калькулятора (если у тебя нет калькулятора, можешь
попробовать запустить его на телефоне/айфоне/компьютере). Калькулятору на вход дается строка, содержащая целые числа
и знаки «+», «-», «*» и «=». По знаку «=» калькулятор выводит ответ. Порядок действий не соблюдается (как и в
обычном калькуляторе), то есть 2+2*2= выведет 8. Скажу по секрету, писать калькулятор со скобками и порядком действий
— в разы сложнее!
Если сложно, попробуй начать с всего 2 действий, например 345+567=
Усложнение: ввести поддержку дробных чисел и деления*/
<?php
function getResult( float $result , string $op , float $number )
{
switch ( $op ) {
case '+' :
$result += $number ;
break ;
case '-' :
$result -= $number ;
break ;
case '*' :
$result *= $number ;
break ;
case '/' :
$result /= $number ;
break ;
case '^' :
$result = pow ( $result , $number ) ; }
return $result ;
}
$operations = "2.2+2-2+1+0*0+23-32+9+2*3^2/3*0+9990009.2=" ; //"345+234+3-2*2/2=";
$number = "" ;
$result = 0 ;
$op = '' ; //предыдущая операция
for ( $i = 0 ; $i < $inputLength ; $i ++ ) {
if ( $char == '+' || $char == '-' || $char == '*' || $char == '/' || $char == '^' ) {
if ( $result != 0 && $number != "" ) {
$result = getResult( $result , $op , ( float) $number ) ;
$number = "" ; //Обнуляем $number, т.к. иначе к уже полученному числу ещё добавются цифры, следующие за арифметическими знаками
$op = $char ;
} elseif ( $result == 0 ) {
$result = ( float) $number ;
$number = "" ; //$number уже хранится в $result => обнуляем
$op = $char ;
}
} elseif ( $char == '=' ) {
$result = getResult( $result , $op , $number ) ;
$i = $inputLength ; //Для случаев, когда в строке полсе равно ещё есть символы после знака равно
} else {
$number .= $char ;
}
}
}
echo "Result: " . $result . "\n " ;
?>
LyrQmtCw0LvRjNC60YPQu9GP0YLQvtGACgrQl9Cw0LTQsNGH0LA6INC90LDQv9C40YHQsNGC0Ywg0L/RgNC+0LPRgNCw0LzQvNGDLCDQuNC80LjRgtC40YDRg9GO0YnRg9GOINGA0LDQsdC+0YLRgyDQvtCx0YvRh9C90L7Qs9C+INC60L3QvtC/0L7Rh9C90L7Qs9C+INC60LDQu9GM0LrRg9C70Y/RgtC+0YDQsCAo0LXRgdC70Lgg0YMg0YLQtdCx0Y8g0L3QtdGCINC60LDQu9GM0LrRg9C70Y/RgtC+0YDQsCwg0LzQvtC20LXRiNGMCtC/0L7Qv9GA0L7QsdC+0LLQsNGC0Ywg0LfQsNC/0YPRgdGC0LjRgtGMINC10LPQviDQvdCwINGC0LXQu9C10YTQvtC90LUv0LDQudGE0L7QvdC1L9C60L7QvNC/0YzRjtGC0LXRgNC1KS4g0JrQsNC70YzQutGD0LvRj9GC0L7RgNGDINC90LAg0LLRhdC+0LQg0LTQsNC10YLRgdGPINGB0YLRgNC+0LrQsCwg0YHQvtC00LXRgNC20LDRidCw0Y8g0YbQtdC70YvQtSDRh9C40YHQu9CwCtC4INC30L3QsNC60LggIMKrK8K7LCDCqy3Cuywgwqsqwrsg0Lggwqs9wrsuINCf0L4g0LfQvdCw0LrRgyDCqz3CuyDQutCw0LvRjNC60YPQu9GP0YLQvtGAINCy0YvQstC+0LTQuNGCINC+0YLQstC10YIuINCf0L7RgNGP0LTQvtC6INC00LXQudGB0YLQstC40Lkg0L3QtSDRgdC+0LHQu9GO0LTQsNC10YLRgdGPICjQutCw0Log0Lgg0LIK0L7QsdGL0YfQvdC+0Lwg0LrQsNC70YzQutGD0LvRj9GC0L7RgNC1KSwg0YLQviDQtdGB0YLRjCAyKzIqMj0g0LLRi9Cy0LXQtNC10YIgOC4g0KHQutCw0LbRgyDQv9C+INGB0LXQutGA0LXRgtGDLCDQv9C40YHQsNGC0Ywg0LrQsNC70YzQutGD0LvRj9GC0L7RgCDRgdC+INGB0LrQvtCx0LrQsNC80Lgg0Lgg0L/QvtGA0Y/QtNC60L7QvCDQtNC10LnRgdGC0LLQuNC5CuKAlCDQsiDRgNCw0LfRiyDRgdC70L7QttC90LXQtSEKCtCV0YHQu9C4INGB0LvQvtC20L3Qviwg0L/QvtC/0YDQvtCx0YPQuSDQvdCw0YfQsNGC0Ywg0YEg0LLRgdC10LPQviAyINC00LXQudGB0YLQstC40LksINC90LDQv9GA0LjQvNC10YAgMzQ1KzU2Nz0KCtCj0YHQu9C+0LbQvdC10L3QuNC1OiDQstCy0LXRgdGC0Lgg0L/QvtC00LTQtdGA0LbQutGDINC00YDQvtCx0L3Ri9GFINGH0LjRgdC10Lsg0Lgg0LTQtdC70LXQvdC40Y8qLwo8P3BocApmdW5jdGlvbiBnZXRSZXN1bHQoZmxvYXQgJHJlc3VsdCwgc3RyaW5nICRvcCwgZmxvYXQgJG51bWJlcikKewogICAgc3dpdGNoICgkb3ApIHsKICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgJHJlc3VsdCArPSAkbnVtYmVyOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICctJzoKICAgICAgICAgICAgJHJlc3VsdCAtPSAkbnVtYmVyOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICcqJzoKICAgICAgICAgICAgJHJlc3VsdCAqPSAkbnVtYmVyOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgJHJlc3VsdCAvPSAkbnVtYmVyOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdeJzoKICAgICAgICAgICAgJHJlc3VsdCA9IHBvdygkcmVzdWx0LCAkbnVtYmVyKTsKICAgIH0KICAgIHJldHVybiAkcmVzdWx0Owp9CgptYl9pbnRlcm5hbF9lbmNvZGluZygidXRmLTgiKTsKZXJyb3JfcmVwb3J0aW5nKC0xKTsKJG9wZXJhdGlvbnMgPSAiMi4yKzItMisxKzAqMCsyMy0zMis5KzIqM14yLzMqMCs5OTkwMDA5LjI9IjsvLyIzNDUrMjM0KzMtMioyLzI9IjsKJGlucHV0TGVuZ3RoID0gbWJfc3RybGVuKCRvcGVyYXRpb25zKTsKCiRudW1iZXIgPSAiIjsKJHJlc3VsdCA9IDA7CiRvcCA9ICcnOyAvL9C/0YDQtdC00YvQtNGD0YnQsNGPINC+0L/QtdGA0LDRhtC40Y8KCmZvciAoJGkgPSAwOyAkaSA8ICRpbnB1dExlbmd0aDsgJGkrKykgewogICAgJGNoYXIgPSBtYl9zdWJzdHIoJG9wZXJhdGlvbnMsICRpLCAxKTsKICAgIGlmICgkY2hhciA9PSAnKycgfHwgJGNoYXIgPT0gJy0nIHx8ICRjaGFyID09ICcqJyB8fCAkY2hhciA9PSAnLycgfHwgJGNoYXIgPT0gJ14nKSB7CiAgICAgICAgaWYgKCRyZXN1bHQgIT0gMCAmJiAkbnVtYmVyICE9ICIiKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBnZXRSZXN1bHQoJHJlc3VsdCwgJG9wLCAoZmxvYXQpJG51bWJlcik7CiAgICAgICAgICAgICRudW1iZXIgPSAiIjsvL9Ce0LHQvdGD0LvRj9C10LwgJG51bWJlciwg0YIu0LouINC40L3QsNGH0LUg0Log0YPQttC1INC/0L7Qu9GD0YfQtdC90L3QvtC80YMg0YfQuNGB0LvRgyDQtdGJ0ZEg0LTQvtCx0LDQstGO0YLRgdGPINGG0LjRhNGA0YssINGB0LvQtdC00YPRjtGJ0LjQtSDQt9CwINCw0YDQuNGE0LzQtdGC0LjRh9C10YHQutC40LzQuCDQt9C90LDQutCw0LzQuAogICAgICAgICAgICAkb3AgPSAkY2hhcjsKICAgICAgICB9IGVsc2VpZigkcmVzdWx0ID09IDApewogICAgICAgICAgICAkcmVzdWx0ID0gKGZsb2F0KSRudW1iZXI7CiAgICAgICAgICAgICRudW1iZXIgPSAiIjsvLyRudW1iZXIg0YPQttC1INGF0YDQsNC90LjRgtGB0Y8g0LIgJHJlc3VsdCA9PiDQvtCx0L3Rg9C70Y/QtdC8CiAgICAgICAgICAgICRvcCA9ICRjaGFyOwogICAgICAgIH0KICAgIH0gZWxzZWlmICgkY2hhciA9PSAnPScpIHsKICAgICAgICAkcmVzdWx0ID0gZ2V0UmVzdWx0KCRyZXN1bHQsICRvcCwgJG51bWJlcik7CiAgICAgICAgJGkgPSAkaW5wdXRMZW5ndGg7Ly/QlNC70Y8g0YHQu9GD0YfQsNC10LIsINC60L7Qs9C00LAg0LIg0YHRgtGA0L7QutC1INC/0L7Qu9GB0LUg0YDQsNCy0L3QviDQtdGJ0ZEg0LXRgdGC0Ywg0YHQuNC80LLQvtC70Ysg0L/QvtGB0LvQtSDQt9C90LDQutCwINGA0LDQstC90L4KICAgIH0gZWxzZSB7CiAgICAgICAgaWYoaXNfbnVtZXJpYygkY2hhcikgfHwgJGNoYXIgPT0gJy4nKXsKICAgICAgICAgICAgJG51bWJlciAuPSAkY2hhcjsKICAgICAgICB9CiAgICB9Cn0KZWNobyAiUmVzdWx0OiAiIC4gJHJlc3VsdCAuICJcbiI7Cj8+
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