Логическая игра Кэрролла!, Силлогизмы |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Логическая игра Кэрролла!, Силлогизмы |
Руслан |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
Ребяты, нужно написать программу, которая бы решала Силлогизмы, самые обыкновенные (хотя бы) с двумя посылками. Не могу разработать алгоритм! Может кто-нить может подсказать что по этому поводу, а то ощущаю себя полным дураком!
|
Michael_Rybak |
Сообщение
#2
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Формализовать их сначала надо. Ты ж не будешь семантику разбирать сам
Придумай, как юзеру задавать силлогизмы. Какого вида бывают предпосылки? Надо чтоб юзер только задавал названия множеств и отношения. Например, фраза "все кролики любят морковку, если только на них не смотрят искоса" будет для юзера выглядеть как фраза "ALL x є С: NOT F(x) -> x є A", где С - множество кроликов, x - элемент множества кроликов, А - подмножество кроликов, которые любят морковку, F(x) - функция, возвращающая True тогда и только тогда, когда на кролика смотрят искоса. Вот. И юзер должен сначала указать, что есть у нас множества A и C, что есть функция F из А в {True, False}, что между множествами А и С имеет место отношение "А - подмножество С", а дальше задавать формулы аналогичные той, которую я привел. Вообще это все сложновато как для дз. Тебе наверное определенный вид силлогизмов надо решать. Какой? Сообщение отредактировано: Michael_Rybak - |
Руслан |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
Тебе наверное определенный вид силлогизмов надо решать. Какой? Нужно решать силлогизмы следующего типа, например: Все люди смертны Все ученые люди _______________ Все ученые смертны. В общем, чтоб из двух посылок, выводилось заключение. Нужно чтоб программа, определяла к какому модусу относиться силлогизм, и исходя из этого выводила заключение! Препод сказал, что программу писать часа 3 не больше, я уже неделю над алгоритмом сижу! Чего-то недопонимаю, а чего хрен знает! |
Michael_Rybak |
Сообщение
#4
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Перечитай мое сообщение и примени его к своему примеру.
Юзер не должен вводить "Все люди смертны". Юзер должен вводить ALL x: x in A -> x in B. А точнее не вводить вот так прямо, а выбирать: задаю правило вида "все из А являются В". Понимаешь к чему я вообще это всё? |
Руслан |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
Вот это я понимаю,
Ввод ведеться следующим образом: Все (Некоторые, Ни один) Х Суть (Не суть) (не) У Вся проблема в том, каким образом мне из двух посылок получить заключение и как определить модус!!!!! |
Michael_Rybak |
Сообщение
#6
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%....83.D1.81.D1.8B
Сначала определяешь M, потом S и P. Сразу получаешь фигуру. Теперь http://www.refstar.ru/data/r/id.9903_1.html Код n общеутвердительные (А) n общеотрицательные (Е) n частноутвердительные (I) n частноотрицательные (O Первая фигура AAA - Barbara EAE - Celarent AII - Darii EAI - Ferio AAI - Barbari EAO - Celaront Вторая фигура EAE - Cesare AEE - Camestres EIO - Festino AOO - Baroco EAO - Cesaro AEO - Cameostro Третья фигура AAI - Darapti IAI - Disamis AII - Datisi EAO - Felapton OAO - Bocardo EIO - Ferison Четвертая фигура AAI - Bramantip AEE - Camenes IAI - Dimaris EAO - Fesapo EIO - Fresison AEO - Cameno |
Руслан |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
Спасибо, буквально открыл глаза, ща попробую и напишу чо получилось!
И вот еще вопросик!!!! Как определить, что силлогизм неверен или частично неверен? |
Michael_Rybak |
Сообщение
#8
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Цитата Сначала определяешь M, потом S и P. Сразу получаешь фигуру... Это что касается классификации. А вот что касается решения. Силлогизм записываешь в терминах теории множеств. Код Все А суть В - A^B = A - -A^ B пусто Все А не суть В - A^-B = A - -A^-B пусто Некоторые А суть В - A^ B не пусто Некоторые А не суть В - A^-B не пусто Некоторые А суть не В - A^-B не пусто Ни один А не суть В - А^ B пусто Ни один А не суть не В - А^-B = A - A^ B = не пусто Записываешь обе предпосылки в такой форме. Получается, у тебя есть утверждения для (M, P) и для (S, M), а тебе надо для (S, P). Т.е. тебе нужно получить S ^ P, S ^ -P, -S ^ P, -S ^ -P. Для каждого из мы либо скажем, пусто ли оно, либо скажем, что сказать нельзя. Для этого переберем все способы заполнения такой матрицы Код S M P ? 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 В каждой строке мы запишем в четвертом столбике либо "пусто", либо "не пусто", и проверим, чтобы обе предпосылки выполнялись. Например, "не пусто", записанно в пятой строке (1 0 0) означает, что пересечение множеств S, -M и -P - не пусто. Поскольку нас интересует результат сравнения S и P, то, если обе предпосылки выполняются, мы вычисляем S^P, S^-P, -S^P и -S^-P, постоянно накапливая результат. Как проверять, выполняются ли предпосылки, и накапливать результат, лучше сразу посмотреть на примере. Все люди смертны Некоторые ученые люди _______________ Некоторые ученые смертны. S = ученые, M = люди, P = смертны Пусть в переборе сейчас получена такая матрица: Код S M P ? 0 0 0 не пусто 0 0 1 пусто 0 1 0 пусто 0 1 1 не пусто 1 0 0 пусто 1 0 1 не пусто 1 1 0 не пусто 1 1 1 пусто Проверим предпосылки Все люди смертны = M ^ P = M = -М ^ P пусто Некоторые ученые люди = S ^ M не пусто Проверим, что -М ^ P пусто. Выполняем операции так: V берет лучшее из двух ("пусто" хуже "не пусто"). -M ^ P = -M^P^S V -M^P^-S = S^-M^P V -S^-M^P = f(101) V f(001) = "пусто" V "пусто" = "пусто". Проверим, что S ^ M не пусто. S ^ M = S^M^P V S^M^-P = f(111) V f(110) = "пусто" V "не пусто" = "не пусто". Предпосылки выполняются. Вычисляем S^P, S^-P, -S^P и -S^-P. Рассмотрим, например, S^P. S^P = S^P^M V S^P^-M = S^M^P V S^-M^P = f(111) V f(101) = "пусто" V "не пусто" = "не пусто". Итак, только что получен результат: существует возможность того, что предпосылки выполняются, и S^P не пусто. Если потом, для других вариантов заполнения матрицы (всего их 2^8), будет получен результат, существует возможность того, что предпосылки выполняются, и S^P пусто, это будет означать, что из данного силлогизма нельзя однозначно сказать, пусто ли S^P. То же самое проделываем для S^-P, -S^P и -S^-P. В результате получаем выводы, которые толкуем по той же таблице: Код Все А суть В - A^B = A - -A^ B пусто Все А не суть В - A^-B = A - -A^-B пусто Некоторые А суть В - A^ B не пусто Некоторые А не суть В - A^-B не пусто Некоторые А суть не В - A^-B не пусто Ни один А не суть В - А^ B пусто Ни один А не суть не В - А^-B = A - A^ B = не пусто Твой препод довольно крут, если ему это всё (с классификацией) писать часа 3 ;) Может он все таки хочет чтобы ты просто всё if'ами расписал? Это будет проще. |
Руслан |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
ну ты мозг! я то и подумал описывать ифами, а ща растерялся и не знаю, как закодить то что ты накатал! я не силен в программировании, недавно начал им заниматься!
Добавлено через 2 мин. А препод действительно крут, он эту прогу писал на бэйсике, си++, прологе, паскале, а меня заставил на Делфи и красиво и тогда экзамен с отметкой олично! а при хорошем раскладе, сказал что на 5 курсе можно будет и диплом хороший написать, по этой теме! |
Michael_Rybak |
Сообщение
#10
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Если ты недавно начал заниматься, то я думаю, препод как раз ждет от тебя ифов. Там их не смертельно много будет, в принципе.
Главное не запутаться ;) Диплом - да, интересно повозиться. Хотя бы чтобы оно парсило строки. И там, окончания понимало ("ученый-ученые"). |
Руслан |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
|
Michael_Rybak |
Сообщение
#12
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Парсило. Парсило Ну разбирало что там в строке написано.
У комбобокса есть что-то типа SelectedItem или ItemIndex, я уже не помню. Посмотри. |
Руслан |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
Пасибо!
|
Руслан |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Руслан Репутация: 0 |
Программу написал с тупим перебором по 19 верным модусам, в дальнейшем буду работать над привидением ее в приемлимый вид! Спасибо тебе, Михаил!
Добавлено через 9 мин. А я вот еще думаю, как реализовать саму игру придуманную Кэрроллом, с квадратами и диаграмами! Книжка Кэрролла "Логическая игра" прикреплена, если будут идеи делитесь! |
Текстовая версия | 17.09.2024 12:22 |