Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Логика предикатов

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
2pizza



Зарегистрирован: 22.10.2005
Сообщения: 8

СообщениеДобавлено: Сб Окт 22 2005 21:44    Заголовок сообщения: Логика предикатов Ответить с цитатой

Задача состоит в следующем:имеются 2 предиката, требуется сравнить их , то есть выяснить однby и тот же предикат, но записанный по-разному или это разные предикаты. Каким образом это можно сделать, хотя бы идею подскажите, plz. Надо всё сделать на С
_________________
the hole thing i think is sic
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sniper::p



Зарегистрирован: 04.10.2005
Сообщения: 237
Откуда: rus/73

СообщениеДобавлено: Пн Окт 24 2005 00:38    Заголовок сообщения: Re: Логика предикатов Ответить с цитатой

2pizza писал(а):
требуется сравнить их , то есть выяснить однby и тот же предикат, но записанный по-разному или это разные предикаты.

А что у нас предикаты делают? по-моему, вычисляют логические значения Idea конкретизируй
_________________
Нет предела совершенствованию
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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;
////////////////////////////////////////

Ну а в случае если предикаты сравниваемые имеют разное количество
переменных то обращайся. Что-нибудь придумаем.

Дмитрий.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
2pizza



Зарегистрирован: 22.10.2005
Сообщения: 8

СообщениеДобавлено: Пн Окт 24 2005 22:20    Заголовок сообщения: Ответить с цитатой

ПРоблема как раз и в том, что предикаты эти могут быть совершенно разные. Сама запись их тоже может отличаться и как придумать какой-то алгоритм который как-то что-то преобразует не понятно=(
_________________
the hole thing i think is sic
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dmitry K



Зарегистрирован: 19.09.2004
Сообщения: 31

СообщениеДобавлено: Вт Окт 25 2005 06:35    Заголовок сообщения: Ответить с цитатой

Все достаточно просто:
Проблема которую ты обговорил в самом общем плане делится на две части.
1) Получение предиката из строки
2) Сравнение двух предикатов.

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

Перехожу сразу к сравнению двух предикатов.

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

Смотрим далее:
Переменная в нашем логичеком (в логическом ?) предикате имеет только два значения 1 или 0. Истина или ложь.

Значит елси в предикатах по 1 аргумету всего есть 2 варианта подаваемых значений. Елсми 2 аргумента то 4 варианта подаваемых значений. Елси у нас N аргуметов то 2^N вариантов входных значений.

И перебрав все аргументы функции таким образом мы получим ответ.

Это решение задачи в лоб.

Есть еще всяческие математические ухищрения, мне про них надо спросить у метематиков.

А что касается кода, то я подумаю над ним после того как две лабы сдам:0). Т.е. в пятницу....

Да, вот еще. удобно прербирать значения с помощью байтов.
вот посмотри в чаре у нас 8 бит - те е с помощю переменной чар мы сможетм проверить целых два предиката с 8 входными аргументами.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Ср Ноя 09 2005 00:30    Заголовок сообщения: Ответить с цитатой

Краткая формулировка всего, что сдесь было сказано.
Предикаты считаются равными, если для любых входных наборов их результаты совпадают.
Алгоритм проверки - проверять все возможные наборы. Как только одно несовпадение - дальше проверять бессмысленно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dmitry K



Зарегистрирован: 19.09.2004
Сообщения: 31

СообщениеДобавлено: Чт Ноя 10 2005 14:36    Заголовок сообщения: Ответить с цитатой

не в бровь, а в глаз :0)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...