Русскоязычное программирование (План А)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Калькулятор

Сообщений 1 страница 17 из 17

1

Я бы сформулировал такие требования к калькулятору:
1) Калькулятор должен уметь работать с константами:
1.1) Должна быть константа "пи".
2) Калькулятор должен выполнять операции:
2.1) деление (левоассоциативная);
2.2) возведение в степень (правоассоциативная);
2.3) унарный минус (неассоциативная).
3) Калькулятор должен уметь работать со скобками, чтобы изменять порядок вычислений.
4) Операции не должны стоять рядом
      (Т.е. пи/-пи это некорректное выражение. Скобки операциями не считаются. пи/(-пи) - корректно.).
5) Калькулятор должен уметь вычислять функции:
5.1) должна быть функция "знак"
      (пример: знак(-пи^пи));

Чтобы не писать лексер, "пи" и "знак" сократить до первой буквы.

Этого достаточно.

Отредактировано Лис (2017-09-12 15:35:25)

0

2

Рекурсивный разбор выражений вида:

а операция б

(с учетом приоритета операций), дополнение унарных операций типа -а до 0-а :).

4) Операции не должны стоять рядом

При такой модели вычислений данный пункт будет приводить к ошибке без дополнительных проверок, так как будет возникать ошибка - отсутствие одного из операндов.

5.1) должна быть функция "знак"

"знак выражение" преобразовывать в выражение: "0 знак выражение" - так все операции будет представлены двумя параметрами.

5) Калькулятор должен уметь вычислять функции:

Так он должен вычислять функции или только одну - знак? Это тогда потребует перестройку кода.

Чтобы не писать лексер, "пи" и "знак" сократить до первой буквы.

Да в чем проблема-то? Все равно числа многоциферные. Это было бы критично для случаев, если абсолютно каждый элемент выражения был односимвольным.

4) Операции не должны стоять рядом
      (Т.е. пи/-пи это некорректное выражение. Скобки операциями не считаются. пи/(-пи) - корректно.).

Вот именно это выражение является корректным это выражение вида пи/(0-пи). Нет проблем. Выражение пи/+пи уже приведет к ошибке (хотя строго говоря, в математике ведь есть и унарный плюс, просто программисты часто строят из себя умников и не заводят унарный плюс).

Отредактировано utkin (2017-09-12 16:02:28)

0

3

utkin написал(а):

числа многоциферные


у меня особые требования. Цифр в моём калькуляторе нет, если присмотреться внимательно.

0

4

В данной теме это не прослеживается.

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

Да, для этого и нужна рекурсия.

Отредактировано utkin (2017-09-12 16:07:31)

0

5

utkin написал(а):

В данной теме это не прослеживается.

Программа должна соответствовать требованиям и при этом быть минимальной (это нужно для сокращения трудозатрат). Если в требованиях чего-то нет, то и в программе этого не должно быть.

Отредактировано Лис (2017-09-12 16:15:53)

0

6

Если в требованиях чего-то нет, то и в программе этого не должно быть.

Но Ваше требования не четкие. Калькулятор это хрень для вычислений. Абсолютное большинство известных мне калькуляторов умеют работать с числами у которых больше одной цифры. Вывод - Вам нужен не калькулятор, а очень очень ограниченное подмножество чего-то похожего на калькулятор. А такие вещи всегда должны быть обговорены. А если нет, разработчик пользуется общепринятыми обозначениями и терминами. А общепринятый калькулятор вычисляет числа отличные от одной цифры. Да и чему у Вас равно пи из одной цифры? 3 или 4? А если так то почему пи? А не а? Тогда ведь для константы а не нужно сокращать ее имя. Абсолютно все заказчики очень плохо понимают чего им хочется.

Отредактировано utkin (2017-09-12 16:12:49)

0

7

utkin написал(а):

общепринятый калькулятор вычисляет числа отличные от одной цифры.

Ещё раз обращаю внимание, что в этом калькуляторе нет чисел даже из одной цифры.

Зачем нам общепринятый калькулятор?

Отредактировано Лис (2017-09-12 16:15:42)

0

8

Ещё раз обращаю внимание, что в этом калькулятор нет чисел даже из одной цифры.

Это нужно расписать подробно. Я в таком описании вижу вообще только одну константу пи. И чему она равна? И как должен вычислять калькулятор выражения, если цифр нет? Какие правила суммирования констант? И константы чего? Вы отвратительно составили ТЗ и мне это же ставите в укор. Если Вам нужно что-то особенное так и нужно написать.

Зачем нам общепринятый калькулятор?

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

ЗЫ. Альтернативой рекурсии может быть преобразование к обратной польской записи (что по сути есть та же самая рекурсия в извращенной форме). Имеет широкое распространение из-за удобства пихания полученной галиматьи в стек в случае преобразования в какой-нибудь ассемблер.  Высокий уровень - рекурсия, низкий - избавление от скобок путем загона данных в обратную польскую нотацию.

ЗЫ.ЗЫ. По-человечески эта тема называется не калькулятор, а разбор алгебраических выражений (раз уже Вы цифры токенами заменяете).

Отредактировано utkin (2017-09-12 16:30:16)

0

9

utkin написал(а):

Это нужно расписать подробно.

Я этим и занимаюсь. Яр поставил задачу - "написать калькулятор". Я внёс свой вклад в разработку, расписав требования, которым по моему мнению этот калькулятор должен удовлетворять. Я же не виноват, что такие требования пока не опубликовал Яр?

Отредактировано Лис (2017-09-12 16:30:14)

0

10

Я же не виноват, что такие требования пока не опубликовал Яр?

Я таки-думаю, что ему нужен обычный калькулятор :). И то чисто риторически, как результат наличия инструмента с русским синтаксисом.

0

11

utkin написал(а):

думаю, что ему нужен обычный калькулятор

пока он молчит - неизвестно, что ему нужно. Поэтому я пишу то, что нужно мне, как я это вижу.

Русскость синтаксиса будет обеспечиваться тем, что буквы 'п' и 'з' будут русскими.

Отредактировано Лис (2017-09-12 16:36:25)

0

12

пока он молчит - неизвестно, что ему нужно.

Я думаю, он уже забыл про это даже :). Если это прямо вот горит и сверхсуперважно могу у него спросить.

Русскость синтаксиса будет обеспечиваться тем, что буквы 'п' и 'з' будут русскими.

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

0

13

utkin написал(а):

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

С тех пор было выявлено следующее:
1) Кумира достаточно, чтобы написать таблично-управляемый парсер типа того, который генерирует yacc
2) известно, как написать алгоритм генерирования таблицы переходов для МП-автомата

план действий:
- сформулировать требования
- описать грамматику под требования
- прогнать алгоритм построения таблицы
- зашить таблицу в кумир-программу

Таким образом мечта Яр-а будет воплощена (Будет написана программа "калькулятор" на русском языке программирования).

Отредактировано Лис (2017-09-12 16:44:46)

0

14

Лис написал(а):

2.3) унарный минус (неассоциативная).

У т-ща budden'a по этому поводу было иное мнение:
можно 0-<выражение>

Лис написал(а):

Зачем нам общепринятый калькулятор?<...>Я же не виноват, что такие требования пока не опубликовал Яр?

Ну, я, например, некоторые озвучивал. Что это меняет?

Лис написал(а):

Таким образом мечта Яр-а будет воплощена (Будет написана программа "калькулятор" на русском языке программирования).

Сомнительно, учитывая, что он не высказал свои требования.

Отредактировано MihalNik (2017-09-12 17:16:22)

0

15

MihalNik написал(а):

Ну, я, например, некоторые озвучивал. Что это меняет?

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

Отредактировано Лис (2017-09-12 19:16:50)

0

16

В то время пока кое-кто очередной раз "окончательно" закрывает тему (собирался в сентябре на новую работу),
по-прежнему считаю вопрос понятия калькулятора открытым. То, что у Вас называется первый этап - для этого ни грамматика ни таблица не нужны - взять любой исходный код подобного калькулятора и перевести на КуМир много проще и быстрее. Только неужели на нём до сих пор не написано калькулятора? Ну как-то в это не верится. И неужели надо объяснять, почему обычный калькулятор крив?

0

17

MihalNik написал(а):

То, что у Вас называется первый этап - для этого ни грамматика ни таблица не нужны

Первым этапом у меня является получение возможности парсить произвольные грамматики на КуМир'е. На примере калькулятора. Поэтому МНЕ грамматика и таблица нужны. Хотя, конечно, можно было в 53 раза быстрее написать рекурсивным спуском.

0