Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 14:28
Оценка: 12 (1)
Коллеги,

поругайте пожалуйста код :

http://pastebin.com/U505pmkr


Из кода ясно что алгоритмы это не мой конек, но это
единственное что из себя удалось выжать за 4.5 часа
Re: Строчный калькулятор
От: watchmaker  
Дата: 17.12.13 14:47
Оценка: 2 (1)
Здравствуйте, sjukov, Вы писали:

S>поругайте пожалуйста код :

S>http://pastebin.com/U505pmkr

std::string  sExpression = "1+12/2";

6.5

А что такой длинный код даже с приоритетами операций работать не умеет?
Re: Строчный калькулятор
От: collider  
Дата: 17.12.13 15:24
Оценка: -1
Здравствуйте, sjukov, Вы писали:

S>Коллеги,


S>поругайте пожалуйста код :


S>http://pastebin.com/U505pmkr



S>Из кода ясно что алгоритмы это не мой конек, но это

S>единственное что из себя удалось выжать за 4.5 часа

на мой взгляд лучше потратить один раз время и разобраться с flex+bison, чем придумывать свои велосипеды.
Тем более что в документации в качестве примера приводится реализация калькулятора)
Re: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 15:35
Оценка:
Здравствуйте, sjukov, Вы писали:

S>Из кода ясно что алгоритмы это не мой конек, но это

S>единственное что из себя удалось выжать за 4.5 часа

это какой язык-то? VС++ пятилетней давности?

собери код с /W4 /WX компилятор сразу тебе скажет что в коде не так.

и где там юнит-тесты?

олсо 4.5 часа это очень долго. такой код за полчаса-час надо писать.
In Zen We Trust
Re[2]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 17:12
Оценка: +3
Здравствуйте, collider, Вы писали:

S>>Из кода ясно что алгоритмы это не мой конек, но это

S>>единственное что из себя удалось выжать за 4.5 часа

C>на мой взгляд лучше потратить один раз время и разобраться с flex+bison, чем придумывать свои велосипеды.

почему именно flex+bison, чем они лучше 100500 остальных генераторов парсеров, и как это поможет ТСу научиться лучше программировать?
In Zen We Trust
Re[2]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 17:15
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, sjukov, Вы писали:


S>>поругайте пожалуйста код :

S>>http://pastebin.com/U505pmkr

W>
std::string  sExpression = "1+12/2";

W>

6.5

W>А что такой длинный код даже с приоритетами операций работать не умеет?


Спасибо за замечание. Там вкралась ошибка — есть на самом деле приоритет операций.
Сейчас попробую поправить
Re[2]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 17:16
Оценка:
Здравствуйте, collider, Вы писали:




S>>Из кода ясно что алгоритмы это не мой конек, но это

S>>единственное что из себя удалось выжать за 4.5 часа

C>на мой взгляд лучше потратить один раз время и разобраться с flex+bison, чем придумывать свои велосипеды.

C>Тем более что в документации в качестве примера приводится реализация калькулятора)
Ну тут стояла задача чисто алгоритмическая — просто разминка для мозгов. Если бы мне надо было считать я бы
уже какую то автоматизацию бы прилепил — vba или javascript .
Re[2]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 17:24
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, sjukov, Вы писали:


S>>Из кода ясно что алгоритмы это не мой конек, но это

S>>единственное что из себя удалось выжать за 4.5 часа

A>это какой язык-то? VС++ пятилетней давности?


Это С-код с использованием С++ потоков для вывода и откомпилированный msvc с опцией компиляции C++ кода


A>собери код с /W4 /WX компилятор сразу тебе скажет что в коде не так.

Эти опции мне не укажут, полагаю, на ошибки в алгоритме парсинга выражения .

A>и где там юнит-тесты?

Зачем ? Это не библиотека, а вообще была разминка.

A>олсо 4.5 часа это очень долго. такой код за полчаса-час надо писать.

Да? А если это первый "строчный калькулятор" в жизни ?
На самом деле это по мотивам топика на хабре — где это было тестовым заданием на собеседовании .
Для каких-то либо референтных значений времени выполнения автор попросил сделать двух людей сделать такое задание.

Один был боевым программистом Яндекса — сделал за 2 часа примерно, второй был менеджером (в отрочестве программистом) — так тот справился за
4.5 часа.

На Хабре есть код.. Там было все — и классы, и методы.. только я не понимаю зачем это лепить тут. Можно завернуть все те же функции что у меня
(при условии что я их исправлю в класс — и будет лишнее ненужное нагромождение букв.

Я бы еще реализовал перевод строк в числа без sscanf ....

Ах да.. проблема еще что программирую я давно и это я не учусь, это я уже умею
Не работать вообщем мне в Яндексе
Re[3]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 18:10
Оценка: -2
Здравствуйте, sjukov, Вы писали:

S>Это С-код с использованием С++ потоков для вывода и откомпилированный msvc с опцией компиляции C++ кода


Си не нужен т.к. если типобезопасный, современный, mature язык C++.

A>>собери код с /W4 /WX компилятор сразу тебе скажет что в коде не так.

S>Эти опции мне не укажут, полагаю, на ошибки в алгоритме парсинга выражения .

да, в алгоритме врядли, но это не поврод игнорировать предупреждения компилятора.

A>>и где там юнит-тесты?

S>Зачем ? Это не библиотека, а вообще была разминка.

зачем что test-driven development не дает совершать ошибки и сокращает время на разработку.

A>>олсо 4.5 часа это очень долго. такой код за полчаса-час надо писать.

S>Да? А если это первый "строчный калькулятор" в жизни ?
ок, если это первый раз, то надо потратить время на изучение матчасти, но изучение теории не относится к написанию кода.
S>На самом деле это по мотивам топика на хабре — где это было тестовым заданием на собеседовании .
угу, я так и подумал.

S>Для каких-то либо референтных значений времени выполнения автор попросил сделать двух людей сделать такое задание.

S>Один был боевым программистом Яндекса — сделал за 2 часа примерно, второй был менеджером (в отрочестве программистом) — так тот справился за
S>4.5 часа.
там про менеджеров написано что они auto_ptr юзают, что какбэ намекает на их профессиональный уровень.

S>На Хабре есть код.. Там было все — и классы, и методы.. только я не понимаю зачем это лепить тут. Можно завернуть все те же функции что у меня

S>(при условии что я их исправлю в класс — и будет лишнее ненужное нагромождение букв.

для такого простого парсера классы не нужны.
но если добавлять лексер, GC и т.п. — то классы понадобятся.
кроме того класс создает неймспейс которого у Вас нет.


S>Ах да.. проблема еще что программирую я давно и это я не учусь, это я уже умею

По коду незаметно.
Просто глядя на неряшливое неоднородное оформление, создается впечатление что писал какой-то студент первокурсник.
Бессмысленные имена переменных (p2_, s2_) говорят о том, что Вы не задумываетесь о поддержке кода — ни о коллегах-программистах, ни о том, что Вам надо будет поддерживать собственный прошлогодний код.
Функции в 50+ строк, arrowhead antipattern тоже не есть хорошо.
In Zen We Trust
Re[4]: Строчный калькулятор
От: niXman Ниоткуда https://github.com/niXman
Дата: 17.12.13 18:12
Оценка: +1
Здравствуйте, Abyx, Вы писали:

A>Си не нужен т.к. если типобезопасный, современный, mature язык C++.

мне это напомнило нацистов, с их лозунгами.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Строчный калькулятор
От: skeptic  
Дата: 17.12.13 18:27
Оценка:
Здравствуйте, sjukov, Вы писали:

S>Коллеги,


S>поругайте пожалуйста код :


S>http://pastebin.com/U505pmkr



S>Из кода ясно что алгоритмы это не мой конек, но это

S>единственное что из себя удалось выжать за 4.5 часа

Ты совершенно прав — нет никакого смысла решать такую задачу на собеседовании,
если у тебя нет какой то ну очень большой мотивации идти работать именно к этому работодателю.
Более того — этот работодатель, я так думаю, и сам в курсе что нет в этом никакого смысла, но
поток соискателей надо чем то сбивать, вот и глумятся

P.S. надеюсь я правильно понял подтекст твоего поста
Re[5]: Строчный калькулятор
От: skeptic  
Дата: 17.12.13 18:30
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, Abyx, Вы писали:


A>>Си не нужен т.к. если типобезопасный, современный, mature язык C++.

X>мне это напомнило нацистов, с их лозунгами.

+100500 — сам хотел сказать что в его ответе многое на мантры какие то похоже,
вот ещё это например — "зачем что test-driven development не дает совершать ошибки и сокращает время на разработку."
Re[4]: Строчный калькулятор
От: night beast СССР  
Дата: 17.12.13 18:41
Оценка:
Здравствуйте, Abyx, Вы писали:

S>>Для каких-то либо референтных значений времени выполнения автор попросил сделать двух людей сделать такое задание.

S>>Один был боевым программистом Яндекса — сделал за 2 часа примерно, второй был менеджером (в отрочестве программистом) — так тот справился за
S>>4.5 часа.
A>там про менеджеров написано что они auto_ptr юзают, что какбэ намекает на их профессиональный уровень.

а что не так с авто_птром? ну и на анатоликса наезжаешь тоже напрасно.
Re[3]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 19:45
Оценка:
Здравствуйте, sjukov, Вы писали:

A>>олсо 4.5 часа это очень долго. такой код за полчаса-час надо писать.


прошу прощения, я несколько погорячился насчет "полчаса-час".
сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all
при этом этот код неплохо бы еще порефакторить, и дописать еще тестов.
In Zen We Trust
Re[4]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 19:57
Оценка: -1 :))
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, sjukov, Вы писали:


A>>>олсо 4.5 часа это очень долго. такой код за полчаса-час надо писать.


A>прошу прощения, я несколько погорячился насчет "полчаса-час".

A>сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all
A>при этом этот код неплохо бы еще порефакторить, и дописать еще тестов.

Если Ваш код работает — то он безусловно лучше моего . Если не работает на 100% (как у меня) то вот мои замечания :

Излишнее увлечение этой всякой ооп-фигней, извините

Я такое вижу периодически, когда новый и молодой сотрудники начинает
разбивать даже ничтожно малую сущность на мириаду классов.

Приступы, как правило, начинаться после прочтения новой книжки.

Т.е. в соответствии с распространеными критериями — Ваш код хорош. Он еще и небось работает
Re[5]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 19:58
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, Abyx, Вы писали:


S>>>Для каких-то либо референтных значений времени выполнения автор попросил сделать двух людей сделать такое задание.

S>>>Один был боевым программистом Яндекса — сделал за 2 часа примерно, второй был менеджером (в отрочестве программистом) — так тот справился за
S>>>4.5 часа.
A>>там про менеджеров написано что они auto_ptr юзают, что какбэ намекает на их профессиональный уровень.

NB>а что не так с авто_птром? ну и на анатоликса наезжаешь тоже напрасно.


auto_ptr был deprecated в стандарте 11го года, это было более двух лет назад.
при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.

люди, которые не в курсе современного состояния языка вполне заслуживают наездов.
In Zen We Trust
Re[5]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 20:24
Оценка: 3 (2)
Здравствуйте, sjukov, Вы писали:

S>Здравствуйте, Abyx, Вы писали:


A>>Здравствуйте, sjukov, Вы писали:


A>>>>олсо 4.5 часа это очень долго. такой код за полчаса-час надо писать.


A>>прошу прощения, я несколько погорячился насчет "полчаса-час".

A>>сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all
A>>при этом этот код неплохо бы еще порефакторить, и дописать еще тестов.

S>Если Ваш код работает — то он безусловно лучше моего .Если не работает на 100% (как у меня) то вот мои замечания :

он работает на 100% в пределах того что написано в тестах

S>Излишнее увлечение этой всякой ооп-фигней, извините


Ничуть. Там меньше классов чем надо.

Например там у parse_* функций есть общие аргументы — входная строка и GC,
если эти функции сделать методами класса — код упростится.

S>Я такое вижу периодически, когда новый и молодой сотрудники начинает

S>разбивать даже ничтожно малую сущность на мириаду классов.

S>Приступы, как правило, начинаться после прочтения новой книжки.


Конечно любое разбиение на классы должно быть оправдано.

Но тут есть один интересный момент, все эти новые книжки, типа Clean Code Мартина, пишутся практиками которые десятки лет профессионально занимаются программированием, и эти люди знают о чем они пишут.

Проблема как всегда в реализации этих замечательных идей, написанных в книжках.
Допустим если у нас есть функция в 10 строк, и мы заменяем ее кучей мелких классов, строк этак на 100 — код естественно становится менее читабельным.
Если мы эту функцию еще и постоянно переписываем, то конечно 10 строк переписывать проще чем 100 строк классов.
Кажется что ООП и мелкие классы не нужны.

Но ситуация может быть другой — может оказаться что мы к этой 10 строчной функции начнем приписывать функциональность — она начнет расти, и допустим вырастет в функцию из 50 строк.
И допустим мы захотим в ней переделать какую-то функциональность, и поменяем строк 10 в разных местах.
Тут начинаются проблемы — функция большая, читать ее сложно. Изменения размазываются по коду, смотреть историю изменений кода становится сложнее.
Функцию можно разбить на мелкие функции, и передавать между ними структуры с состоянием.
Но это уже начинает уже что-то напоминать, да? Структуры данных + функции которые их обрабатывают — это же ООП.
И вот оказывается что если бы у нас была не функция в 10 строк, а 100 строк мелких классов, то добавлять новый код проще — читабельность отдельных классов не меняется. И менять код проще — меняются только отдельные классы, отвечающие за фичу которая изменилась.
И тестировать проще.

Применительно к калькулятору строк — то там код будет только дополняться, а не меняться. По этому лучше иметь много узкоспециализированых классов, а не огромные функции.
In Zen We Trust
Re[2]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 20:47
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, sjukov, Вы писали:


W>
std::string  sExpression = "1+12/2";

W>

6.5

W>А что такой длинный код даже с приоритетами операций работать не умеет?

Все Исправился

http://pastebin.com/zg2BiuL1
Re[6]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 20:50
Оценка: :)
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, sjukov, Вы писали:


S>>Здравствуйте, Abyx, Вы писали:


A>>>Здравствуйте, sjukov, Вы писали:


A>>>>>олсо 4.5 часа это очень долго. такой код за полчаса-час надо писать.


A>>>прошу прощения, я несколько погорячился насчет "полчаса-час".

A>>>сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all
A>>>при этом этот код неплохо бы еще порефакторить, и дописать еще тестов.

S>>Если Ваш код работает — то он безусловно лучше моего .Если не работает на 100% (как у меня) то вот мои замечания :

A>он работает на 100% в пределах того что написано в тестах

Я тут подсуетился- теперь мой код опять , я считаю, лучше чем Ваш

Ну по крайней мере до первого несработавшего тест-кейса
Re[7]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 21:40
Оценка: 1 (1)
Здравствуйте, sjukov, Вы писали:

S>Я тут подсуетился- теперь мой код опять , я считаю, лучше чем Ваш


это легко проверить — попробуйте расширить функциональность.
если код хороший, то это будет очень просто сделать, изменений существующего кода будет мало, в основном надо будет только дописать новый код.

а такой новой функциональностью могут быть новые операторы с другими приоритетами, и многосимвольные операторы ('<=', '>=', 'shl' или '<<' и т.п.)
или можно пойти "вглубь" и добавить унарные операторы — и ~, например константу Pi и вызов функции sin()

как я понимаю новые операторы усложнят код

            if ((op == OP_DIV || op == OP_MUL) && (exp[i] == '-' || exp[i] == '+') && !stack)
                return i;
 
            if ((op == OP_PLUS|| op == OP_MINUS) && (exp[i] == '*' || exp[i] == '/') && !stack)
                continue ;
 
            if ((exp[i] == '/' || exp[i] == '*' || exp[i] == '-' || exp[i] == '+') && !stack)
                return i ;


многосимвольные операторы сломают switch(c)
усложнение грамматики раздует функцию Eval,
а вызов функции — наверное сломает поиск скобок
In Zen We Trust
Re[2]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 21:45
Оценка:
Здравствуйте, skeptic, Вы писали:

S>Здравствуйте, sjukov, Вы писали:


S>>Коллеги,


S>>поругайте пожалуйста код :


S>>http://pastebin.com/U505pmkr



S>Ты совершенно прав — нет никакого смысла решать такую задачу на собеседовании,

S>если у тебя нет какой то ну очень большой мотивации идти работать именно к этому работодателю.
S>Более того — этот работодатель, я так думаю, и сам в курсе что нет в этом никакого смысла, но
S>поток соискателей надо чем то сбивать, вот и глумятся

S>P.S. надеюсь я правильно понял подтекст твоего поста


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

Когда я нанимал людей к нам в отдел я давал задание уровня — "длинная арифметика" (там где символы в столбик надо оперировать)

Самым сложным заданием что я давал это был многопоточный TCP/IP сервер(echo) . Это задание нужно было сделать дома максимум за неделю.
Re[8]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 21:55
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, sjukov, Вы писали:


S>>Я тут подсуетился- теперь мой код опять , я считаю, лучше чем Ваш


A>это легко проверить — попробуйте расширить функциональность.

A>если код хороший, то это будет очень просто сделать, изменений существующего кода будет мало, в основном надо будет только дописать новый код.
Я попробую завтра сделать вечером , обещаю !

A>а такой новой функциональностью могут быть новые операторы с другими приоритетами, и многосимвольные операторы ('<=', '>=', 'shl' или '<<' и т.п.)

A>или можно пойти "вглубь" и добавить унарные операторы — и ~, например константу Pi и вызов функции sin()

С константами проблем вообще нет —

вместо этой строчки проверять sval по таблице на соответствие константе и подставлять значение . PI,E,...
...
if (_p == std::string::npos)
{
if (sval[0] == '(')
return Eval(sval.substr(1, FindClosePar(sval.substr(1, sval.length()))));
else
/*ТУТ >>>*/return float(atof(sval.c_str()));
}
else
...


A>многосимвольные операторы сломают switch(c)

Не сломают... многосивольные операторы для внутреннего представления можно заменить на спец-символы (любой ASCII символ не используемый в мат выражениях)

A>усложнение грамматики раздует функцию Eval,

Не думаю что значительно — завтра посмотрим.

A>а вызов функции — наверное сломает поиск скобок

Не сломает — а потребует дополнительный код для поддержки новой функциональности (функции)
Это пожалуй сейчас самая сложная для меня часть... завтра отпишусь о результатах
Re[3]: Строчный калькулятор
От: watchmaker  
Дата: 17.12.13 22:08
Оценка:
Здравствуйте, sjukov, Вы писали:
S>Все :) Исправился :) :) :)
S>http://pastebin.com/zg2BiuL1

Не, всё ещё плохо. Вот, "120/1/2/3/4/5" посчитай.
И ещё что хочется сказать — твой калькулятора не проверяет корректность работы разбора. Довольно опасное свойство для вычислителя, который уверенно выдаёт чушь при ошибке ввода вместо того, чтобы сообщить что имеет место именно ошибка ввода. Вот почему у тебя можно смайлики складывать, например, "(0_o)+8D"? Как такой программе можно доверять?
Re[9]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 22:46
Оценка:
Здравствуйте, sjukov, Вы писали:

S>>>Я тут подсуетился- теперь мой код опять , я считаю, лучше чем Ваш


A>>это легко проверить — попробуйте расширить функциональность.

A>>если код хороший, то это будет очень просто сделать, изменений существующего кода будет мало, в основном надо будет только дописать новый код.
S>Я попробую завтра сделать вечером , обещаю !

сделал изменения у себя в коде — https://bitbucket.org/goldfinch/stringcompiler (без констант)
как я и говорил, если классы сделаны удачно, при добавлении новой функциональности надо только добавлять новые строчки кода, а старый код менять не надо — https://bitbucket.org/goldfinch/stringcompiler/commits/2dbaea48c507050f7d84c4f00738afb2720cdfd6
In Zen We Trust
Re[10]: Строчный калькулятор
От: niXman Ниоткуда https://github.com/niXman
Дата: 17.12.13 23:12
Оценка:
Здравствуйте, Abyx, Вы писали:

с проектированием у тебя все впорядке
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Multi-Edit 7.0 DOS - "shift-reduce" строчный Calc
От: SergeCpp Россия http://zoozahita.ru
Дата: 18.12.13 00:58
Оценка:
(Раз уж тут (да и "там") "парад строчных калькуляторов" образовался.)

Давным-давно (лет десять уже прошло, это видно по комментариям в тексте; я-то уже и позабыл, когда) писал я строчный калькулятор для Multi-Edit 7.0 DOS (так как тот, что там был (и остался) — совсем по другому принципу работает). Язык там почти C.

Метод разбора взят из "Книги Дракона" ("shift-reduce" syntax analyzer, есть матрица приоритетов и ассоциативности), там в комментарии есть номера страниц русского перевода. То есть, "строго научный метод".

Особо распространяться не буду (с телефона не очень-то).

(Ужас — позабыл даже, что там скобки обрабатываются.)

Писал, конечно, не "час-два-три", а, скорее, с неделю или даже больше — потихоньку. Что помню — точную позицию ошибки тогда не стал определять (хотя там всё для этого было подготовлено), только сам факт ошибки (ибо не нужна была позиция).

Если есть интерес, то по ссылке на архивы (внизу тут) берите архив ME_PLUS и в нём — файл MATH.S на почти 1400 строк (ещё есть MATH.SH — интерфейс вызова). Язык, повторюсь, почти C. Попробовать в работе — архив ME (он строкой выше там). Калькулятор запускается по Alt+C из редактора. В калькуляторе есть справка по F1.

Да. Редактор работает и в Win 7 32-bit.

Ссылки
----------

Архивы: http://old-dos.ru/files/file_1328.html

Скрин калькулятора в работе: http://old-dos.ru/screenshot/1328/ME_CONVNUM_4.PNG

"Посмотреть вообще" (ностальгия, etc): http://forum.old-dos.ru/viewtopic.php?f=4&amp;t=263
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
multi-edit калькулятор
Re[6]: Строчный калькулятор
От: night beast СССР  
Дата: 18.12.13 04:13
Оценка: +2
Здравствуйте, Abyx, Вы писали:

S>>>>Для каких-то либо референтных значений времени выполнения автор попросил сделать двух людей сделать такое задание.

S>>>>Один был боевым программистом Яндекса — сделал за 2 часа примерно, второй был менеджером (в отрочестве программистом) — так тот справился за
S>>>>4.5 часа.
A>>>там про менеджеров написано что они auto_ptr юзают, что какбэ намекает на их профессиональный уровень.

NB>>а что не так с авто_птром? ну и на анатоликса наезжаешь тоже напрасно.


A>auto_ptr был deprecated в стандарте 11го года, это было более двух лет назад.


и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.
если и кого-то по этому поводу комплексы, то это их личные трудности.

A>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.


ага, нужно было в демонстрационный пример обязательно буст протащить. куда же без него.

A>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.


вы знакомы лично?
добавь побольше пафоса, это всегда помогает.
Re[6]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:36
Оценка: +2
Здравствуйте, Abyx, Вы писали:

A>auto_ptr был deprecated в стандарте 11го года, это было более двух лет назад.

A>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.

С auto_ptr все нормально, просто некоторые получали граблями по лбу из-за непонимания эстафетного владения, ну так С++ наполовину состоит из вещей которыми можно получить по лбу, если не знать как ими пользоваться
Re[4]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:39
Оценка: :)
Здравствуйте, Abyx, Вы писали:

A>сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all


[Abyx-style on]
MS VS не нужен т.к. есть современный, mature g++ доступный на всех платформах.
[Abyx-style off]
Re[5]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:41
Оценка:
Здравствуйте, sjukov, Вы писали:

S>Излишнее увлечение этой всякой ооп-фигней, извините


Его код читать можно спокойно и развивать, а вот твой, без обид, на выброс.
Re[5]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:46
Оценка:
Здравствуйте, niXman, Вы писали:

A>>Си не нужен т.к. если типобезопасный, современный, mature язык C++.

X>мне это напомнило нацистов, с их лозунгами.

Ты еще Кобол начни защищать, типа каждый имеет право на существование. Конечно имеет, в музее программирования, на соседней полке с Си.
Re[6]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:47
Оценка:
Здравствуйте, skeptic, Вы писали:

S>вот ещё это например — "зачем что test-driven development не дает совершать ошибки и сокращает время на разработку."


Но это так и есть.
Re[7]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 07:43
Оценка:
Здравствуйте, night beast, Вы писали:

NB>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

о как. это какой такой конкретный код? покажи.

чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?

A>>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.

NB>ага, нужно было в демонстрационный пример обязательно буст протащить. куда же без него.

в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?

A>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>вы знакомы лично?
NB>добавь побольше пафоса, это всегда помогает.

а что, надо быть знакомым лично, чтобы кого-то критиковать?
In Zen We Trust
Re[5]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 07:47
Оценка:
Здравствуйте, MTD, Вы писали:

MTD>Здравствуйте, Abyx, Вы писали:


A>>сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all


MTD>[Abyx-style on]

MTD>MS VS не нужен т.к. есть современный, mature g++ доступный на всех платформах.
MTD>[Abyx-style off]

вообще я сначала хотел писать этот код под mingw, чтоб еще и засунуть его на coliru
но потом я подумал что для этого надо текстовый редактор, а еще лучше IDE, и вдруг мне в какой-то момент понадобится отладчик — в итоге я стал писать в студии.
In Zen We Trust
Re[8]: Строчный калькулятор
От: night beast СССР  
Дата: 18.12.13 08:27
Оценка:
Здравствуйте, Abyx, Вы писали:

NB>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>о как. это какой такой конкретный код? покажи.

здесь

A>чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?


естественно. применение goto в чистых сях вполне оправдано.
что такое comefrom я не совсем понял. это что-то личное, да?

A>>>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.

NB>>ага, нужно было в демонстрационный пример обязательно буст протащить. куда же без него.

A>в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?


мда.

A>>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>>вы знакомы лично?
NB>>добавь побольше пафоса, это всегда помогает.

A>а что, надо быть знакомым лично, чтобы кого-то критиковать?


чтобы делать выводы о том, что кто-то чего то не знает, было бы не плохо иметь на руках какие-то подтверждения этому.
без этого ты выставляешь себя обычным пустозвоном. ничего личного, но со стороны это выглядит не очень красиво.
Re[9]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 09:39
Оценка:
Здравствуйте, night beast, Вы писали:

NB>>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>>о как. это какой такой конкретный код? покажи.

NB>здесь


и чем именно там оправдано применение auto_ptr?
тем что в 2013 году код писался на языке 98года? или тем что #include <boost/scoped_ptr.hpp> не написать?

действительно, если код пишется на выброс, то можно применить auto_ptr и написать прочие using namespace std;
но тогда хорошо бы написать комментарий типа "do not write this in real code", и уж точно не стоит гордиться применением auto_ptr, как сделал anatolix

A>>чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?

NB>естественно. применение goto в чистых сях вполне оправдано.
угу, только применение Си не оправдано.
NB>что такое comefrom я не совсем понял. это что-то личное, да?
http://en.wikipedia.org/wiki/COMEFROM


A>>в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?

NB>мда.
что "мда"?

A>>>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>>>вы знакомы лично?
NB>>>добавь побольше пафоса, это всегда помогает.
A>>а что, надо быть знакомым лично, чтобы кого-то критиковать?
NB>чтобы делать выводы о том, что кто-то чего то не знает, было бы не плохо иметь на руках какие-то подтверждения этому.
NB>без этого ты выставляешь себя обычным пустозвоном. ничего личного, но со стороны это выглядит не очень красиво.
код в той статье на хабре вполне себе является подтверждением. комментарий про auto_ptr тоже.
In Zen We Trust
Re[6]: Строчный калькулятор
От: sjukov Украина  
Дата: 18.12.13 09:43
Оценка: -1 :))
Здравствуйте, MTD, Вы писали:


S>>Излишнее увлечение этой всякой ооп-фигней, извините

MTD>Его код читать можно спокойно и развивать, а вот твой, без обид, на выброс.
Ммм... ну как вариант На выброс потому что он не работает... Вот я его подлатаю, и тогда уххх...
На самом деле жалею что выложил неработоспособный код — надо было проверить вначала тщательней.

Дуракам не показывают половину работы, но конкретно в этом случае дурак я.
Re[10]: Строчный калькулятор
От: night beast СССР  
Дата: 18.12.13 10:04
Оценка: :)
Здравствуйте, Abyx, Вы писали:

NB>>>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>>>о как. это какой такой конкретный код? покажи.

NB>>здесь


A>и чем именно там оправдано применение auto_ptr?

A>тем что в 2013 году код писался на языке 98года? или тем что #include <boost/scoped_ptr.hpp> не написать?

ответ очевиден
тем что результат работает на любом компиляторе и не требует установки левых библиотек.

A>>>чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?

NB>>естественно. применение goto в чистых сях вполне оправдано.
A>угу, только применение Си не оправдано.

угу. ложки нет (с)

NB>>что такое comefrom я не совсем понял. это что-то личное, да?

A>http://en.wikipedia.org/wiki/COMEFROM


A>>>в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?

NB>>мда.
A>что "мда"?

это довольно показательно. сначала наговорить ерунды, а потом выяснять, что же это мы обсуждаем

A>>>>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>>>>вы знакомы лично?
NB>>>>добавь побольше пафоса, это всегда помогает.
A>>>а что, надо быть знакомым лично, чтобы кого-то критиковать?
NB>>чтобы делать выводы о том, что кто-то чего то не знает, было бы не плохо иметь на руках какие-то подтверждения этому.
NB>>без этого ты выставляешь себя обычным пустозвоном. ничего личного, но со стороны это выглядит не очень красиво.
A>код в той статье на хабре вполне себе является подтверждением. комментарий про auto_ptr тоже.

ясно. очередной ыксперт.
Re[10]: Строчный калькулятор
От: Stanislav V. Zudin Россия  
Дата: 18.12.13 10:20
Оценка: +1 -3
Здравствуйте, Abyx, Вы писали:

NB>>>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>>>о как. это какой такой конкретный код? покажи.

NB>>здесь


A>и чем именно там оправдано применение auto_ptr?

A>тем что в 2013 году код писался на языке 98года? или тем что #include <boost/scoped_ptr.hpp> не написать?

Ну например, тем, что auto_ptr будет компиляться в любой Студии, хоть в VS6. Если понимаешь, как он работает, то никаких проблем он не доставляет.
Кстати, твой вариант калькулятора я у себя собрать не смогу — мои работодатели все еще пользуются Студией 2008 (а код ТС — запросто).
Ни одна компания, в которой я работал, не горит желанием апгрейдить компилятор. Некоторые даже на VS2005 сидят.

Насчет буста — тоже. Только в одной компании его активно применяли.
В некоторых он был явно запрещен, как и любая сторонняя библиотека. И на это были основания. А в некоторых просто не нашел применения. А втаскивать тонну кода ради одного файла никто не станет.
_____________________
С уважением,
Stanislav V. Zudin
Re[11]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 10:42
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Ну например, тем, что auto_ptr будет компиляться в любой Студии, хоть в VS6. Если понимаешь, как он работает, то никаких проблем он не доставляет.

SVZ>Кстати, твой вариант калькулятора я у себя собрать не смогу — мои работодатели все еще пользуются Студией 2008 (а код ТС — запросто).
SVZ>Ни одна компания, в которой я работал, не горит желанием апгрейдить компилятор. Некоторые даже на VS2005 сидят.

ну и что что кто-то сидит на VC6 ?
это не повод пропагандировать устаревшие технологии.

новые версии языка и компиляторов появляются не просто так. если кто-то думает что всё это не нужно — ну наверное это диагноз.

SVZ>Насчет буста — тоже. Только в одной компании его активно применяли.

SVZ>В некоторых он был явно запрещен, как и любая сторонняя библиотека. И на это были основания. А в некоторых просто не нашел применения. А втаскивать тонну кода ради одного файла никто не станет.

ага, а где-то запрещена стандартная библиотека. и тоже кто-то думает что на это есть основания.
In Zen We Trust
Re[12]: Строчный калькулятор
От: Stanislav V. Zudin Россия  
Дата: 18.12.13 11:05
Оценка:
Здравствуйте, Abyx, Вы писали:

SVZ>>Ну например, тем, что auto_ptr будет компиляться в любой Студии, хоть в VS6. Если понимаешь, как он работает, то никаких проблем он не доставляет.

SVZ>>Кстати, твой вариант калькулятора я у себя собрать не смогу — мои работодатели все еще пользуются Студией 2008 (а код ТС — запросто).
SVZ>>Ни одна компания, в которой я работал, не горит желанием апгрейдить компилятор. Некоторые даже на VS2005 сидят.

A>ну и что что кто-то сидит на VC6 ?

A>это не повод пропагандировать устаревшие технологии.

A>новые версии языка и компиляторов появляются не просто так. если кто-то думает что всё это не нужно — ну наверное это диагноз.


Очень хорошо, что появляются. Только реалии таковы, что приходится учитывать и старые компиляторы.
Поэтому в коде на Си приходится придерживаться синтаксиса времен K&R, ибо поддерживать приходится не только Win & Linux.
И Студию старую используем по этой же самой причине.

В других проектах можно перейти и на что-то новое. Только отваливать пачку денег за возможность писать "auto" мне кажется неоправданным.

SVZ>>Насчет буста — тоже. Только в одной компании его активно применяли.

SVZ>>В некоторых он был явно запрещен, как и любая сторонняя библиотека. И на это были основания. А в некоторых просто не нашел применения. А втаскивать тонну кода ради одного файла никто не станет.

A>ага, а где-то запрещена стандартная библиотека. и тоже кто-то думает что на это есть основания.


Ты не поверишь.
Мне дважды в жизни довелось с таким столкнуться.
Один раз при портировании на HP-UX, другой раз — на zOS. В первом проблемы были с шаблонами вообще (это было до 2006, сейчас может и есть улучшения), а во втором — конкретно с std::vector (а это "свежак" — 2011г.)
_____________________
С уважением,
Stanislav V. Zudin
Re[7]: Строчный калькулятор
От: skeptic  
Дата: 18.12.13 13:24
Оценка:
Здравствуйте, MTD, Вы писали:

MTD>Здравствуйте, skeptic, Вы писали:


S>>вот ещё это например — "зачем что test-driven development не дает совершать ошибки и сокращает время на разработку."


MTD>Но это так и есть.


Это да, но в том сообщении это было похоже на лозунг.
Написание тестов к коду на собеседовании полнейшая профанация идеи тестирования.
Да и чего лукавить — написания кода на собеседовании профанация собеседования в принципе.
Потому что собеседование — от слова беседа.
Вот и стоит побеседовать на тему как решить и как тестировать и т.д.
Для испытания человека в работе есть, пусть меня закидают камнями, испытательный срок.
Нужен работник — вот вам работник, побеседовали, вроде нормально, берём, смотрим, если нет берём другого.
А, денюжков жалко отдавать? Конечно жалко. Это понятно.
И как бы там не ныли компании по поводу недостатка кадров,всё это пустое — им выгодно перебирать поток кандидатов
в поисках абстрактной звезды, порой даже без чёткого понятия цели этих поисков, придумывая всё более
размашистые процессы собеседований. Ну а у нас, программистов, похоже есть всё таки одна уникальная
профессиональная деформация — доказать что я круче, даже если приходиться грызть кактус надо так грызть
что бы меньше иголок на лице осталось чем у других соискателей... И не понимаем мы что разводят нас как детей,
ну или понимаем но нам самим нравится, мазохизм короче
Понятно что компания ищет себе людей и вправе это делать любым законным способом, потому
всё мной вышесказанное исключительно имхо.
Re[4]: Строчный калькулятор
От: Topknot Украина  
Дата: 19.12.13 09:03
Оценка:
Здравствуйте, Abyx, Вы писали:

S>>Ах да.. проблема еще что программирую я давно и это я не учусь, это я уже умею

A>По коду незаметно.
A>Просто глядя на неряшливое неоднородное оформление, создается впечатление что писал какой-то студент первокурсник.
A>Бессмысленные имена переменных (p2_, s2_) говорят о том, что Вы не задумываетесь о поддержке кода — ни о коллегах-программистах, ни о том, что Вам надо будет поддерживать собственный прошлогодний код.
A>Функции в 50+ строк, arrowhead antipattern тоже не есть хорошо.

По коду как раз видно что человек опыт не пропил
Нормально написано. А одними фломастерами всем не угодишь.
«Украина – это та Русь, которая осталась дома».
В. Новодворская.
Re: Строчный калькулятор
От: Аноним  
Дата: 20.12.13 09:53
Оценка:
Здравствуйте, sjukov, Вы писали:

S>Коллеги,


S>поругайте пожалуйста код :


S>http://pastebin.com/U505pmkr



S>Из кода ясно что алгоритмы это не мой конек, но это

S>единственное что из себя удалось выжать за 4.5 часа
Фигасе. Это ж школьная задачка. Вот таку фигню когда-то в школе делали http://pastebin.com/FN0XQmRS

#include "SimpleParser.h"
...
double r=SimpleParser("sin(1+1/3)^2+cos(1+1/3)^2").getexpr();


Посмотрите на класс Expression там простой рекурсивный разбор устроен.
Методы L1,L2,L3,L4,L5,L6.
Надеюсь идея там изложена очевидно.
Re: Строчный калькулятор
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 20.12.13 10:40
Оценка:
Здравствуйте, sjukov, Вы писали:

S>Коллеги,


S>поругайте пожалуйста код :


S>http://pastebin.com/U505pmkr


S>Из кода ясно что алгоритмы это не мой конек, но это

S>единственное что из себя удалось выжать за 4.5 часа

Основная проблема в том, что такой подход жутко нерасширяем, и в нем легко ошибиться.
Re[2]: Строчный калькулятор
От: uzhas Ниоткуда  
Дата: 20.12.13 11:02
Оценка: +2
Здравствуйте, Mystic, Вы писали:

M>Основная проблема в том, что такой подход жутко нерасширяем, и в нем легко ошибиться.


зато вот этот подход очень расширяем:
>>Посмотрите на класс Expression там простой рекурсивный разбор устроен.
>>Методы L1,L2,L3,L4,L5,L6.
>>Надеюсь идея там изложена очевидно.

можно легко добавить методы L7, L8 и L9
Re[3]: Строчный калькулятор
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 20.12.13 12:28
Оценка: +1
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, Mystic, Вы писали:


M>>Основная проблема в том, что такой подход жутко нерасширяем, и в нем легко ошибиться.


U>зато вот этот подход очень расширяем:

>>>Посмотрите на класс Expression там простой рекурсивный разбор устроен.
>>>Методы L1,L2,L3,L4,L5,L6.
>>>Надеюсь идея там изложена очевидно.

U>можно легко добавить методы L7, L8 и L9


Да, там намного понятнее идея. L и приоритет. С таким кодом можно работать.
Re[4]: Строчный калькулятор
От: Аноним  
Дата: 08.01.14 05:12
Оценка: :)
A>Си не нужен т.к. если типобезопасный, современный, mature язык C++.

Нужен, не нужен... плохому танцору всегда яйца мешают )))

Ну и что принципиально изменится если я в таком вот тривиальном калькуляторе заменю расширение .с на .cpp? Он сразу обрастёт ветвистой иерархией классов или заколосится метазагибами шаблонной магии?

http://pastebin.com/BzSAy74P
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.