20 Ноя 2009 19:39 Aurora_Borealis писав(ла): У меня она не устанавливается!) я не могу посмотреть твою прогу и хотя бы высказаться по поводу лично своего впечатления.
А ты можешь рассказать, почему ты выбрал именно такой язык программирования, именно такое представление результатов и т.д. Какие это дает преимущества? интересно именно твоё мнение - ТИМно это или нет.
Насколько я понял, для того чтобы опробовать программу alexxst, не нужно ничего устанавливать. В папке "EtalonCalc-Release" есть запускаемый файл "EtalonCalc.exe", который должен работать в системе Windows без дополнительных установок. Я его опробовал -- программа работает хорошо, даже есть возможность оценить время, затраченное на вычисления. Вот с самим исходником я ещё не разбирался. Исходник -- это файл "EtalonCalc-Program.cs". Дефисы в кавычках надо заменить на обратные косые черты.
20 Ноя 2009 19:39 Aurora_Borealis писав(ла): Преимущества (пользовательские) у калькулятора sein очевидны -не требуется дополнительных девайсов и плагинов, чтоб посмотреть, как что работает.
Спасибо на добром слове. Я старался.
P.S. Боюсь что я рано похвалил -- мне кажется программа делает что-то не то (или я не понимаю, как надо с ней общаться). Не видите ли вы странности в первом из следующих примеров: [imagesein1258770964]
По-моему, проблема проявляется в ситуации, когда операция с более высоким приоритетом появляется без скобок перед операцией с более низким приоритетом. 1 відвідувач подякували sein за цей допис
да, там описка есть в методе:
private static int calcMultExpression(FormulaParser parser)
в 114 строке надо заменить
var val2 = calcExpression(parser);
на
var val2 = calcPrimitive(parser);
P.S. На коленке писалось за 20 минут, так что не ругайте сильно)))
Почему выбрал C#, а не JavaScript.. хмм. да потому что я JavaScript не знаю, и учить его не охота. Выбрал собственно то, что под рукой оказалось, в тот момент когда писал у меня был ноут, а на нём только C# Express стоял. Ещё стоял Chez Scheme и PHP но я решил, что настолько экзотичным быть не стоит)
P.P.S. У меня сегодня самолёт, как прилечу, Аврора, специально для тебя, на Delphi вариант его напишу, и устанавливать.NET не надо будет 1 відвідувач подякували alexxst за цей допис
21 Ноя 2009 14:45 alexxst писав(ла): P.P.S. У меня сегодня самолёт, как прилечу, Аврора, специально для тебя, на Delphi вариант его напишу, и устанавливать.NET не надо будет
Спасибо, Саш)) Но разобраться -почему у меня.NET не устанавливается -тоже надо бы -видимо у меня тут всё вообще криво встало. Баль же винду и линукс ставил
Удачного тебе полета и мы тебя ждем)))
21 Ноя 2009 06:45 alexxst писав(ла): Выбрал собственно то, что под рукой оказалось, в тот момент когда писал у меня был ноут, а на нём только C# Express стоял. Ещё стоял Chez Scheme и PHP но я решил, что настолько экзотичным быть не стоит)
Мне было бы очень интересно посмотреть на программу калькулятора, написанную на Scheme.
P.S. Если мы согласимся считать "top level" языка Scheme за консоль, то, конечно, программа префиксного калькулятора на Scheme будет пустой (так как "top level" сам по себе включает в себя все функции такого калькулятора). Поэтому мой вопрос относится в основном к инфиксному и постфиксному вариантам. 1 відвідувач подякували sein за цей допис
24 Ноя 2009 12:15 Basil22 писав(ла): Delphi не стоит, суть исходников от этого нисколько не измениться. А вот Scheme посмотреть было бы интересно.
Что до меня, я бы использовал язык Forth, и тогда программа состояла бы только из одного символа - "."
(распечатать результат со стека).
Какой интересный язык! Basil22, спасибо за наводку! Значит, постфиксный калькулятор на Forth выглядит по сути дела так же как префиксный на Lisp или Scheme -- как пустая программа.
Кстати не знаете ли Вы, есть ли какие-то глубокие причины, по которым Lisp не использует постфиксную запись? Тогда он, наверное, сильно напоминал бы Forth, избежав своего перегруза скобками. Конечно, одна из возможностей Lisp'а, недоступная при обычной постфиксной записи -- это операции с разным количеством операндов, как например ( + 3 4 5 ) = 12 и ( + 3 4 ) = 7. А есть ли ещё какие-нибудь и насколько они важны?
27 Ноя 2009 04:49 barvinsky писав(ла): Понятно. Инструкции обычно не читаю :-D А почему не съедаете пробелы? По сути ничего бы не изменилось.
Пробелы используются как разделители ради 1) простоты разбиения введённой строки на токены и 2) унификации правил ввода. У моего калькулятора три варианта: префиксный, инфиксный и постфиксный. Для префиксного и постфиксного калькулятора нужны символы-разделители (иначе не различить границу между двумя числами, следующими друг за другом).
27 Ноя 2009 04:49 barvinsky писав(ла): Свою версию не хочу - лень :-) Да и решение довольно очевидно - рекурсивно разбираем выражение по частям в порядке приоритета, т.е.
У меня другое решение: однопроходный индуктивный (а не рекурсивный) алгоритм, основанный на переводе инфиксной строки в постфиксную.
27 Ноя 2009 04:49 barvinsky писав(ла): Предложить могу - для начала несложное :-)
Спасибо! Если остальным будет интересна эта задача, подумаем над её решением.
26 Ноя 2009 13:18 barvinsky писав(ла): Во всех выложенных решениях сходу виден косяк типа 1--1 или 1*-1 (это корректные выражения, если что). :-)
1--1 - это IMHO некорректное выражение. Если необходимо вычесть минус единицу, то пишется 1-(-1). А то что С++ допускает конструкцию i+++++i, еще ни о чем не говорит
Прежде чем зачинать новый конкурс, я бы предложил таки закончить старый , то есть подвести его итоги.
Лично я просмотрел (и заценил) предложенные программы до такому критерию - насколько легко программа воспринимается в целом. Критерий взят умышленно, я сейчас на основной работе вожусь со старым кодом. И там нередко встречается проблема, когда понять что делает код еще можно, но вот разобраться ДЛЯ ЧЕГО он это делает - очень и очень трудно. В этом свете мне больше всего понравилась программа от sein, у которой отличные комментарии, причем они поясняют как суть и необходимость того, что собственно делается. Возможно их многовато (я например не люблю делать комментарии к 2..3 строчным функциям, считая что такая функция говорит сама за себя), но именно этот исходник зацепил меня.
Теперь вы высказывайтесь и обсуждайтесь
P.S. На конкурс тоже есть идея, но давайте доведем до конца старый. Василий
1 відвідувач подякували Basil22 за цей допис
3 Дек 2009 13:36 Basil22 писав(ла): Прежде чем зачинать новый конкурс, я бы предложил таки закончить старый , то есть подвести его итоги.
ну у нас был не совсем конкурс, мы собирались просто высказаться и обсудить -кто, что и почему использовал -и как -где различия и все такое. Это была такая стартовая разминка.)
3 Дек 2009 13:36 Basil22 писав(ла): В этом свете мне больше всего понравилась программа от sein, у которой отличные комментарии, причем они поясняют как суть и необходимость того, что собственно делается. Возможно их многовато (я например не люблю делать комментарии к 2..3 строчным функциям, считая что такая функция говорит сама за себя), но именно этот исходник зацепил меня.
да, sein просто молодец!!! Что касается комментов и их количества -это я его попросила всё подробно, вы не забывайте, что это вы тут все монстры, а я блондинка -но вам как раз полезно моё присутствие.
Еще у sein мне нравится то, что он выбрал такой язык, что не требуется дополнительная установка девайсов и всего такого. Я хоть и не программист, но думаю, что в конечном итоге программа должна выдавать что-то типа ехе-шника или вот такой страницы, чтоб любая блондинка могла ей пользоваться, прочитав несколько строк инструкции.
Но я еще не смотрела труды barvinsky)) посмотрю, может, в выходные.
И Саша-alexxst не вернулся кажется еще.
Basil22, а Вы не хотите тоже принимать участие в конкурсах? А не только в обсуждениях?)))
Хорошо, а 2*-2? Или ты на бумажке всегда пишешь 2*(-2)? :-)
Насколько я знаю, скобки используются для задания порядка вычисления выражения, и только. В данном случае этого не требуется - унарные операторы и так имеют больший приоритет.
4 Дек 2009 11:31 barvinsky писав(ла): Хорошо, а 2*-2? Или ты на бумажке всегда пишешь 2*(-2)? :-)
так и пишу да -всегда))) и в бумажках и в статьях)
4 Дек 2009 11:31 barvinsky писав(ла): Насколько я знаю, скобки используются для задания порядка вычисления выражения, и только. В данном случае этого не требуется - унарные операторы и так имеют больший приоритет.
ну есть некоторые правила, которые общеприняты, это как в любом языке, мы тут вот общаемся и не ставим всех знаков препинания и ломаем слова, но если пишем официальные письма или статьи -то без вопросов придерживаемся правил, которые общие для всех.
ну а не требуется и не надо))
7 Дек 2009 03:55 barvinsky писав(ла): В случае стандартных типов
...(выражение i+++++i)...
ошибка. Будет работать вот так i+++i. Или i+(++++i). А вот так не будет (i++++)+i.
Да, и в самом деле не работает. А я, грешным делом, понял это как (i++) + (++i), т.е. как завуалированный набор предписаний:
(i++) = запомнить, что в конце работы надо увеличить i на единицу;
(++i) = увеличить немедленно переменную i на единицу
(i) + (i) = прибавить переменную к самой себе, т.е. удвоить
(Иначе говоря, если обозначить через x первоначальное значение переменной i, получим для самого выражения значение 2*( x + 1 ), а для переменной: i = x + 2.)
7 Дек 2009 05:09 barvinsky писав(ла): Не совсем так. Немедленно увеличить i на единицу, но вернуть в результате копию i в предыдущем состоянии
Это объяснение, вкупе с написанным выше классом, совершенно проясняет ситуацию. Спасибо.
7 Дек 2009 05:09 barvinsky писав(ла): Немедленно увеличить i на единицу, вернуть ссылку на i. Тогда надо писать i++ + ++i :-) А сплошные плюсы он воспринимает как i++ ++ + i.
Удивительно -- не думал что пробелы тут на что-то повлияют, но действительно i++ ++ + i работает, a i+++++i -- нет.