|
6 / 6 / 1
Регистрация: 22.10.2012
Сообщений: 36
|
|||||||||||
Калькулятор множеств13.08.2013, 20:09. Показов 5066. Ответов 13
Метки нет (Все метки)
Есть список множеств, хранятся множества так [("1",["1","2","3"]),("2",["4","5","77"])].
+ - объединение * - пересечение Пользователь вводит выражение, к примеру 1+2, вводит имя нового множества.В итоге получается [("1",["1","2","3"]),("2",["4","5","77"]),("3",["1","2","3","4","5","77"])]. Собственно для подобных примеров мой код работает, но для примеров посложнее уже нет. Например: 3*(1+2). Подскажите пожалуйста как реализовать калькулятор, подобный этому:
0
|
|||||||||||
| 13.08.2013, 20:09 | |
|
Ответы с готовыми решениями:
13
Калькулятор множеств Калькулятор множеств Поменять местами значения множеств a и b без использования дополнительных множеств |
|
Супер-модератор
|
||||||
| 13.08.2013, 21:10 | ||||||
|
Ну почему используешь строки вместо целых? Чем это вызвано???
Вот здесь [("1",["1","2","3"]),("2",["4","5","77"])] какой смысл в первых элементах кортежей (выделены красным)? И зачем кортежи? "От веку" множества прекрасно моделируются списками:
1
|
||||||
|
6 / 6 / 1
Регистрация: 22.10.2012
Сообщений: 36
|
|
| 13.08.2013, 21:30 [ТС] | |
|
Catstail, пользователь может создать сколько угодно множеств, поэтому для удобства работы каждому множеству дается какое-то имя.
Спасибо за код,но само объединение и пересечение у меня реализовано. Проблема именно в том как считать сложные выражение вроде 1*(2+3)+(4*(5+6)), где 1,2,3,4,5,6 это имена множеств.
0
|
|
|
6 / 6 / 1
Регистрация: 22.10.2012
Сообщений: 36
|
|
| 13.08.2013, 21:51 [ТС] | |
|
Catstail, пока что достаточно операций объединения и пересечения.
0
|
|
|
Супер-модератор
|
||||||
| 13.08.2013, 22:52 | ||||||
|
Начнем с предварительного разбора строки на лексемы (имена множеств, знаки операций и скобки):
0
|
||||||
|
6 / 6 / 1
Регистрация: 22.10.2012
Сообщений: 36
|
|
| 13.08.2013, 22:59 [ТС] | |
|
Catstail, забыл написать,но это я реализовал. Выражение парсится в ОПЗ, то есть получается что-то вроде ["1","2","+"].
0
|
|
|
6 / 6 / 1
Регистрация: 22.10.2012
Сообщений: 36
|
|
| 14.08.2013, 11:16 [ТС] | |
|
Catstail, может оно и лучше,но не хотелось бы переписывать что уже написано..
0
|
|
|
|
|||||||||||||||||||||||||||||||
| 14.08.2013, 11:20 | |||||||||||||||||||||||||||||||
|
Предлагаю свой вариант, который может использоваться для интерактивного общения.
Здесь используются 4 монады, список как монада не используется. Потому нужно быть аккуратным при чтении, следя за тем, в какой монаде работаем. Пусть мы распарсили выражение и представили результат в виде дерева
Напишем функцию, которая из базы данных (по сути ассоциативный массив с ключом n и значением [v] получает значения множеств, заданных буквами, и возвращает оценённое выражение:
Мы можем желать добавлять множество в базу:
Парсинг
Полный текст: Кликните здесь для просмотра всего текста
Что я недоделал: 1. Нормальный вывод множеств, по всем канонам, абстрагированно от типа v. 2. Добавление нового множества, вводимого пользователем, в базу. Лень парсить множество.
1
|
|||||||||||||||||||||||||||||||
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||||||||||||||||||||
| 14.08.2013, 11:34 | ||||||||||||||||||||||||||
|
Набросал простенький интерпретатор.
Программа интерпретатора состоит из последовательности инструкций (statements). Типов инструкций две: присваивание переменной значения выражения и печать значения выражения. Каждая инструкция должна заканчиваться точкой с запятой. Выражением может быть бинарная операция (объединение |, пересечение &, разность \ и симметричная разность - двух множеств), имя переменной (которое вычисляется в значение переменной) и множество-литерал. Бинарные операции левоассоциативные с одинаковым приоритетом, скобки могут использоваться для изменения приоритета операций. Пример скрипта для интерпретатора:
Lexer.y:
2
|
||||||||||||||||||||||||||
|
Супер-модератор
|
||||||
| 14.08.2013, 13:24 | ||||||
|
Nameless One, класс!
Добавлено через 1 час 39 минут Ну, и детское решение (без сохранения состояния):
1
|
||||||
|
6 / 6 / 1
Регистрация: 22.10.2012
Сообщений: 36
|
||
| 15.08.2013, 09:33 [ТС] | ||
|
Catstail, спасибо большое
![]() Добавлено через 1 минуту Catstail, нашел небольшую ошибочку в вашем коде:
Так же выражение вроде 1*(2+3) считаются некорректно. Почему-пока не разобрался.Не подскажете? Например: есть множество [("1",["1","2","3","4"]),("2",["5","6","7","8"]),("4",["0","2"]),("3",["0","234","23432","4342"])] выражение 4*(1+3) должно давать результат ["0","2"], но кидает пустой список. Однако если ввести (1+3)*4 все прекрасно работает.. Добавлено через 14 часов 27 минут так же не считает выражения вроде (1+2), именно в скобках
1
|
||
|
Супер-модератор
|
||||||
| 15.08.2013, 11:16 | ||||||
|
Сейчас посмотрю.
Добавлено через 1 час 36 минут Проблема оказалась в функции parse (добавлялись лишние пустые лексемы):
1
|
||||||
| 15.08.2013, 11:16 | |
|
Помогаю со студенческими работами здесь
14
Доказать равенство множеств с помощью основных законов алгебры множеств
Найти объединение, разность, мощности каждого из множеств, для равномощных множеств задать биекции Для заданного набора множеств определить, какая группа множеств представляет их пересечение и объединение Доказать, что симметрическая разность множеств равна симметрической разности дополнений этих множеств Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|