<?php
/*Задача: написать программу, имитирующую работу обычного кнопочного калькулятора (если у тебя нет калькулятора, можешь
попробовать запустить его на телефоне/айфоне/компьютере). Калькулятору на вход дается строка, содержащая целые числа и
знаки «+», «-», «*» и «=». По знаку «=» калькулятор выводит ответ.
идея примерно такая: мы заводим переменные $result (результат предыдущих действий), $number (число, которое сейчас
набирается) и $op (предыдущая операция). Затем разбираем строку посимвольно (циклом for). Если это цифра — добавляем ее
к числу $number (умножаем на 10 и прибавляем цифру), если это операция — то выполняем предыдущую операцию (которую мы
храним в $op) над $result и $number, сохраняем итог в $result, а текущую операцию на будущее сохраняем в op. Если это
«=», то выполняем предыдущую операцию и выводим $result */
$input = '123+345=' ;
$number = null ; //число, которое сейчас набирается
$result = null ; //результат предыдущих действий
$op = null ; //предыдущая операция
for ( $i = 0 ; $i < $inputLenght ; $i ++ ) {
if ( $char == '+' || $char == '-' || $char == '*' || $char == '/' ) {
switch ( $op ) {
case '+' :
echo $result ;
$op = $char ;
break ;
case '-' :
$result = $result - intval ( $number ) ; $op = $char ;
break ;
case '/' :
$result = $result / intval ( $number ) ; $op = $char ;
break ;
case '*' :
$result = $result * intval ( $number ) ; $op = $char ;
break ;
}
}
else {
$op = $char ;
}
}
elseif ( $char == '=' ) {
switch ( $op ) {
case '+' :
$result = $result + intval ( $number ) ; break ;
case '-' :
$result = $result - intval ( $number ) ; break ;
case '/' :
$result = $result / intval ( $number ) ; break ;
case '*' :
$result = $result * intval ( $number ) ; break ;
}
echo "Result is $result \n " ;
}
$number = intval ( $number . $char ) ; }
else {
}
}
else {
echo "Corrupt symbol '$char '\n " ;
}
}
PD9waHAKCi8q0JfQsNC00LDRh9CwOiDQvdCw0L/QuNGB0LDRgtGMINC/0YDQvtCz0YDQsNC80LzRgywg0LjQvNC40YLQuNGA0YPRjtGJ0YPRjiDRgNCw0LHQvtGC0YMg0L7QsdGL0YfQvdC+0LPQviDQutC90L7Qv9C+0YfQvdC+0LPQviDQutCw0LvRjNC60YPQu9GP0YLQvtGA0LAgKNC10YHQu9C4INGDINGC0LXQsdGPINC90LXRgiDQutCw0LvRjNC60YPQu9GP0YLQvtGA0LAsINC80L7QttC10YjRjAog0L/QvtC/0YDQvtCx0L7QstCw0YLRjCDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0LXQs9C+INC90LAg0YLQtdC70LXRhNC+0L3QtS/QsNC50YTQvtC90LUv0LrQvtC80L/RjNGO0YLQtdGA0LUpLiDQmtCw0LvRjNC60YPQu9GP0YLQvtGA0YMg0L3QsCDQstGF0L7QtCDQtNCw0LXRgtGB0Y8g0YHRgtGA0L7QutCwLCDRgdC+0LTQtdGA0LbQsNGJ0LDRjyDRhtC10LvRi9C1INGH0LjRgdC70LAg0LgKINC30L3QsNC60LggIMKrK8K7LCDCqy3Cuywgwqsqwrsg0Lggwqs9wrsuINCf0L4g0LfQvdCw0LrRgyDCqz3CuyDQutCw0LvRjNC60YPQu9GP0YLQvtGAINCy0YvQstC+0LTQuNGCINC+0YLQstC10YIuCgrQuNC00LXRjyDQv9GA0LjQvNC10YDQvdC+INGC0LDQutCw0Y86INC80Ysg0LfQsNCy0L7QtNC40Lwg0L/QtdGA0LXQvNC10L3QvdGL0LUgJHJlc3VsdCAo0YDQtdC30YPQu9GM0YLQsNGCINC/0YDQtdC00YvQtNGD0YnQuNGFINC00LXQudGB0YLQstC40LkpLCAkbnVtYmVyICjRh9C40YHQu9C+LCDQutC+0YLQvtGA0L7QtSDRgdC10LnRh9Cw0YEK0L3QsNCx0LjRgNCw0LXRgtGB0Y8pINC4ICRvcCAo0L/RgNC10LTRi9C00YPRidCw0Y8g0L7Qv9C10YDQsNGG0LjRjykuINCX0LDRgtC10Lwg0YDQsNC30LHQuNGA0LDQtdC8INGB0YLRgNC+0LrRgyDQv9C+0YHQuNC80LLQvtC70YzQvdC+ICjRhtC40LrQu9C+0LwgZm9yKS4g0JXRgdC70Lgg0Y3RgtC+INGG0LjRhNGA0LAg4oCUINC00L7QsdCw0LLQu9GP0LXQvCDQtdC1CtC6INGH0LjRgdC70YMgJG51bWJlciAo0YPQvNC90L7QttCw0LXQvCDQvdCwIDEwINC4INC/0YDQuNCx0LDQstC70Y/QtdC8INGG0LjRhNGA0YMpLCDQtdGB0LvQuCDRjdGC0L4g0L7Qv9C10YDQsNGG0LjRjyDigJQg0YLQviDQstGL0L/QvtC70L3Rj9C10Lwg0L/RgNC10LTRi9C00YPRidGD0Y4g0L7Qv9C10YDQsNGG0LjRjiAo0LrQvtGC0L7RgNGD0Y4g0LzRiwrRhdGA0LDQvdC40Lwg0LIgJG9wKSDQvdCw0LQgJHJlc3VsdCDQuCAkbnVtYmVyLCDRgdC+0YXRgNCw0L3Rj9C10Lwg0LjRgtC+0LMg0LIgJHJlc3VsdCwg0LAg0YLQtdC60YPRidGD0Y4g0L7Qv9C10YDQsNGG0LjRjiDQvdCwINCx0YPQtNGD0YnQtdC1INGB0L7RhdGA0LDQvdGP0LXQvCDQsiBvcC4g0JXRgdC70Lgg0Y3RgtC+CiDCqz3Cuywg0YLQviDQstGL0L/QvtC70L3Rj9C10Lwg0L/RgNC10LTRi9C00YPRidGD0Y4g0L7Qv9C10YDQsNGG0LjRjiDQuCDQstGL0LLQvtC00LjQvCAkcmVzdWx0ICAgKi8KCiRpbnB1dD0nMTIzKzM0NT0nOwokaW5wdXRMZW5naHQ9bWJfc3RybGVuKCRpbnB1dCk7CgokbnVtYmVyPW51bGw7IC8v0YfQuNGB0LvQviwg0LrQvtGC0L7RgNC+0LUg0YHQtdC50YfQsNGBINC90LDQsdC40YDQsNC10YLRgdGPCiRyZXN1bHQ9bnVsbDsgLy/RgNC10LfRg9C70YzRgtCw0YIg0L/RgNC10LTRi9C00YPRidC40YUg0LTQtdC50YHRgtCy0LjQuQokb3A9bnVsbDsgLy/Qv9GA0LXQtNGL0LTRg9GJ0LDRjyDQvtC/0LXRgNCw0YbQuNGPCgpmb3IgKCRpPTA7ICRpPCRpbnB1dExlbmdodDsgJGkrKyl7CiAgICAkY2hhcj1tYl9zdWJzdHIoJGlucHV0LCRpLDEpOwogICAgaWYoJGNoYXI9PScrJyB8fCAkY2hhcj09Jy0nIHx8ICRjaGFyPT0nKicgfHwgJGNoYXI9PScvJyl7CiAgICAgICAgaWYoaXNzZXQoJG9wKSl7CiAgICAgICAgICAgIHN3aXRjaCAoJG9wKXsKICAgICAgICAgICAgICAgIGNhc2UgJysnOgogICAgICAgICAgICAgICAgICAgICRyZXN1bHQ9aW50dmFsKCRyZXN1bHQpK2ludHZhbCgkbnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICBlY2hvICRyZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJG51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgJG9wPSRjaGFyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdD0kcmVzdWx0LWludHZhbCgkbnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICB1bnNldCgkbnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAkb3A9JGNoYXI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICAgICAkcmVzdWx0PSRyZXN1bHQvaW50dmFsKCRudW1iZXIpOwogICAgICAgICAgICAgICAgICAgIHVuc2V0KCRudW1iZXIpOwogICAgICAgICAgICAgICAgICAgICRvcD0kY2hhcjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAgICAgICAgICRyZXN1bHQ9JHJlc3VsdCppbnR2YWwoJG51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJG51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgJG9wPSRjaGFyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgICRvcD0kY2hhcjsKICAgICAgICB9CiAgICB9CiAgICBlbHNlaWYgKCRjaGFyPT0nPScpewogICAgICAgIHN3aXRjaCAoJG9wKXsKICAgICAgICAgICAgY2FzZSAnKyc6CiAgICAgICAgICAgICAgICAkcmVzdWx0PSRyZXN1bHQraW50dmFsKCRudW1iZXIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgICAgICAgJHJlc3VsdD0kcmVzdWx0LWludHZhbCgkbnVtYmVyKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICRyZXN1bHQ9JHJlc3VsdC9pbnR2YWwoJG51bWJlcik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgICAgICAkcmVzdWx0PSRyZXN1bHQqaW50dmFsKCRudW1iZXIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVjaG8gIlJlc3VsdCBpcyAkcmVzdWx0IFxuIjsKICAgIH0KICAgIGVsc2VpZiAoaXNfbnVtZXJpYygkY2hhcikpewogICAgICAgIGlmKGlzc2V0KCRudW1iZXIpKXsKICAgICAgICAgICAgJG51bWJlcj1pbnR2YWwoJG51bWJlci4kY2hhcik7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgICRudW1iZXI9aW50dmFsKCRjaGFyKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlewogICAgICAgIGVjaG8gIkNvcnJ1cHQgc3ltYm9sICckY2hhcidcbiI7CiAgICB9Cn0=