калькулятор на php

Василий М.

Новичок
Коллеги, я вчера был на собеседовании. Человек видел мой код, даже похвалил, беседовали мы час. Говорили о СУБД, о фреймворках, о моем опыте, смотрели код, который пишется в компании, о различных интересных задачах и способах их решения. Да и человек вроде адекватный..

Итог - тестовое задание - написать калькулятор на php, который из консоли даст ответ на строку "2 * 3.44 / ((2/5) - 1)"

Я стою на распутье - либо спросить у уважаемой публики алгоритм или послушать внутренний голос, который просто кричит "им шашечки или ехать?!".

Алгоритм калькулятора я не вижу простым. Тут регулярками не обойдешься. В идеале надо писать парсер. С чего начать - не могу пока сообразить.

Какие варианты решения подскажите?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
PHP:
php -r 'echo 2 * 3.44 / ((2/5) - 1);'
ЗЫ: я вообще не понял вопроса =)
 

Василий М.

Новичок
PHP:
php -r 'echo 2 * 3.44 / ((2/5) - 1);'
ага, щас.
Написать на php консольный калькулятор, который на входе принимает последовательность данных в виде

111.1 * 222.2 + 33

либо

(45 + 6) * 7

либо

12 + 3 * (4 - (5/6))

Допустимые операции: +, -, *, /, возведение в степень

Калькулятор должен учитывать наличие ( ) Не стесняйтесь использовать классы, интерфейсы
Я просто немного не понимаю, какова цель этого задания.
 

WMix

герр M:)ller
Партнер клуба
мдя....
Код:
wmix ~/Desktop $  cat 1.php
<?php
eval ('$str = '.$argv[1].';');
echo $argv[1].' = ' . $str . "\n";
wmix ~/Desktop $  php 1.php "2 * 3.44 / ((2/5) - 1)"
2 * 3.44 / ((2/5) - 1) = -11.466666666667
wmix ~/Desktop $
 

WMix

герр M:)ller
Партнер клуба
добавь регекс "допустимые операции: +, -, *, /, возведение в степень" ну и возведение в степень вычлени и трансформируй в pow(x,y)
eval и есть калькулятор
 

Василий М.

Новичок
да меня просто раздражают подобные тестовые задачи.
в чем смысл этого задания? что бы я строку в eval впихнул? это я озвучил как самый первый вариант решения прямо на собеседовании, как только мне сказали про домашнее задание.
что еще? парсер-анализатор текста писать?
 

Redjik

Джедай-мастер
блин задача же элементарная =(
разбитие на лексемы и применение шаблона visitor...
если ты уж так понравился, то можно было это просто на пальцах обьяснить
 

whirlwind

TDD infected, paranoid
Неужели собеседующему настолько лень посмотреть на имеющиеся у кандидата примеры? Ну это же бред, давать профессионалу с многолетним опытом какие-то идиотские задачки для студентов. Когда это началось и почему это продолжается? Платите бабки и будет вам хоть калькулятор, хоть перфоратор.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
whirlwind, есть подозрение, что если бы ТС озвучил аббревиатуру "rpn", никакого задания бы не было :) Просто так такое давать - это лишнее, согласен, видимо возникли подозрения.
 

hell0w0rd

Продвинутый новичок
whirlwind, а мне кажется очень даже норм) Можно понять уровень человека, от "берем выражение, трансформируем в rpn, подсчитываем", "эм, ок, прийду домой, сделаю, гуглить то я умею", и до "я хз как это сделать, зато вот с этим фреймворком готов сайтики вам делать".
Только лучше не rpn, а какую-то более реальную задачку давать, но тоже на знание базовых алгоритмов. Работа с строка, сортировки, деревья.
 

whirlwind

TDD infected, paranoid
hell0w0rd, Уровень человека на собеседовании понять практически невозможно. Можно понять способность мобилизации в состоянии стресса. Но стресс - это не типичная ситуация для разраба. Стресс в программировании это косяки управления и говнокод. Если собеседующий этого не понимает, то профессионал из него сомнительный. Ну вот очень мало компаний, ради работы в которых хочется рвать попу. По этому, взаимное уважение должно быть на первом месте. Вам принесли резюме, вам предоставили код - время уже потрачено на это. Будьте любезны ознакомиться. А то начинается говно типа "нам интересно узнать ход ваших мыслей". Так и хочется сказать, да идите вы в ж.
 

AmdY

Пью пиво
Команда форума
Вообще, очень показательная задача. Обратная польская запись разбирается в лучшей книге по php, которую я встречал, так что у профессионала проблем с алгоритмом быть не должно. Но для ТЗ это фуфло, я бы точно отказался писать, сославшись на Шлосснейгла.
 
Сверху