Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
2pizza
Зарегистрирован: 22.10.2005 Сообщения: 8
|
Добавлено: Сб Окт 22 2005 21:44 Заголовок сообщения: Логика предикатов |
|
|
Задача состоит в следующем:имеются 2 предиката, требуется сравнить их , то есть выяснить однby и тот же предикат, но записанный по-разному или это разные предикаты. Каким образом это можно сделать, хотя бы идею подскажите, plz. Надо всё сделать на С _________________ the hole thing i think is sic |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
sniper::p
Зарегистрирован: 04.10.2005 Сообщения: 237 Откуда: rus/73
|
Добавлено: Пн Окт 24 2005 00:38 Заголовок сообщения: Re: Логика предикатов |
|
|
2pizza писал(а): | требуется сравнить их , то есть выяснить однby и тот же предикат, но записанный по-разному или это разные предикаты. |
А что у нас предикаты делают? по-моему, вычисляют логические значения конкретизируй _________________ Нет предела совершенствованию |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Dmitry K
Зарегистрирован: 19.09.2004 Сообщения: 31
|
Добавлено: Пн Окт 24 2005 05:43 Заголовок сообщения: |
|
|
Если логические предикаты. И есил в них одинаковое количество переменных например A B C. То надо сделать вот что:
Predikat1(int A, int B , int C);//Функция 1 предиката
Predikat2(int A, int B, int C);//Фуникция 2 предиката
////////////////////////////////////////
//Определяем переменные для предикатов
int A=NULL;
int B=NULL;
int C=NULL;
int PR=1;//Predikati Ravni :0)
//ПЕременная признак. если после
//выполнения программы она 1 то предикаты делают одно и тоже
//А если после выполнения программы предикаты не равны
//то эта переменная равна 0
for(A=0; A<2; A++)
for(B=0; B<2;B++)
for(C=0; C<2; C++){
if(Predikat1(A,B,C)!=Predikat2(A,B,C)) PR=NULL;
}
if(PR) cout<<"Предикаты делают одно и тоже! "<<endl;
else cout<<"Предикаты делают разные вещи!"<<endl;
////////////////////////////////////////
Ну а в случае если предикаты сравниваемые имеют разное количество
переменных то обращайся. Что-нибудь придумаем.
Дмитрий. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
2pizza
Зарегистрирован: 22.10.2005 Сообщения: 8
|
Добавлено: Пн Окт 24 2005 22:20 Заголовок сообщения: |
|
|
ПРоблема как раз и в том, что предикаты эти могут быть совершенно разные. Сама запись их тоже может отличаться и как придумать какой-то алгоритм который как-то что-то преобразует не понятно=( _________________ the hole thing i think is sic |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Dmitry K
Зарегистрирован: 19.09.2004 Сообщения: 31
|
Добавлено: Вт Окт 25 2005 06:35 Заголовок сообщения: |
|
|
Все достаточно просто:
Проблема которую ты обговорил в самом общем плане делится на две части.
1) Получение предиката из строки
2) Сравнение двух предикатов.
Начну говорить сразу о второй проблеме. Так как доставание предикатов из строки это муторный долгий и тривиальный процесс. тем паче он к математической части програмирования ни как не отностится.
Перехожу сразу к сравнению двух предикатов.
Если у нас есть две функции которые возвращают значения предикатов. То путь котоырй я вижу это подать в эти функция все возможные значения (кобинации значений) аргументов функции и если хоть раз эти функции дадут разные значения - сделать вывод что предикаты не равны.
Смотрим далее:
Переменная в нашем логичеком (в логическом ?) предикате имеет только два значения 1 или 0. Истина или ложь.
Значит елси в предикатах по 1 аргумету всего есть 2 варианта подаваемых значений. Елсми 2 аргумента то 4 варианта подаваемых значений. Елси у нас N аргуметов то 2^N вариантов входных значений.
И перебрав все аргументы функции таким образом мы получим ответ.
Это решение задачи в лоб.
Есть еще всяческие математические ухищрения, мне про них надо спросить у метематиков.
А что касается кода, то я подумаю над ним после того как две лабы сдам:0). Т.е. в пятницу....
Да, вот еще. удобно прербирать значения с помощью байтов.
вот посмотри в чаре у нас 8 бит - те е с помощю переменной чар мы сможетм проверить целых два предиката с 8 входными аргументами. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
GREA
Зарегистрирован: 14.05.2003 Сообщения: 758 Откуда: Новосибирск
|
Добавлено: Ср Ноя 09 2005 00:30 Заголовок сообщения: |
|
|
Краткая формулировка всего, что сдесь было сказано.
Предикаты считаются равными, если для любых входных наборов их результаты совпадают.
Алгоритм проверки - проверять все возможные наборы. Как только одно несовпадение - дальше проверять бессмысленно. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Dmitry K
Зарегистрирован: 19.09.2004 Сообщения: 31
|
Добавлено: Чт Ноя 10 2005 14:36 Заголовок сообщения: |
|
|
не в бровь, а в глаз :0) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|