Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/35: Рейтинг темы: голосов - 35, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 04.07.2014
Сообщений: 83
1

Алгоритм нахождения сокращенной днф и кнф

25.09.2014, 18:11. Показов 7299. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать програмку нахождения сднф и скнф.
Подкиньте идею.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2014, 18:11
Ответы с готовыми решениями:

Правильность нахождения КНФ и ДНФ
Подскажите правильно нашел кнф и днф? (AC\rightarrow B)(\bar{BC}+\bar{A\rightarrow \bar{C}}) КНФ...

Алгоритм приведения к КНФ/ДНФ
Что-то я запарился, никак придумать не могу... Допустим имеется у нас формула x&y|z Дерево...

Логическое выражение. ДНФ в КНФ. КНФ в ДНФ
Здравствуйте. Помогите с решением задачки. Что-то не понятное творится.:( Дано такое логическое...

Упростить формулы (привести их к сокращенной ДНФ)

10
813 / 421 / 169
Регистрация: 08.02.2013
Сообщений: 711
25.09.2014, 19:28 2
Цитата Сообщение от bez Посмотреть сообщение
Нужно написать програмку нахождения сднф и скнф.
сднф и скнф чего?
0
0 / 0 / 1
Регистрация: 04.07.2014
Сообщений: 83
25.09.2014, 19:31  [ТС] 3
сднф и скнф булевых функции четырех переменных
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
25.09.2014, 19:45 4
bez,
Алгоритмы находятся без всяких проблем, в чем проблема?
СДНФ
СКНФ
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
26.09.2014, 10:16 5
bez, вот тебе мега-идея: спросить у гугла. обычно достаточно потратить 5 минут чтоб найти решение.
0
0 / 0 / 1
Регистрация: 04.07.2014
Сообщений: 83
26.09.2014, 13:56  [ТС] 6
Теперь такой вопрос, как построить таблицу истинности от n-переменных. Понятно, что n я ввожу с клавиатуры.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
26.09.2014, 16:55 7
bez,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
       
//булева ф-ция. наугад написал
 private static void f(BitArray a)
        {
            foreach (bool v in a)
            {
                Console.Write(v?1:0);
            }
            Console.WriteLine(" {0}", a[0]&&(a[1]||a[2])&&a[3] || a[0]);
        }
static void Main(string[] args)
        {
            int N = 4;
            BitArray bitarray = new BitArray(N);
            bool c1, c2;c1=c2 = false;
            for (int i = 0; i < Math.Pow(2, N); i++)
            {
                f(new BitArray(new[] {i}));
                c1 = bitarray[bitarray.Length - 1] & true;
                bitarray[bitarray.Length - 1] = bitarray[bitarray.Length - 1] ^ true;
                for (int r = bitarray.Length - 2; r >= 0; r--)
                {
                    c2 = bitarray[r] & c1;
                    bitarray[r] = bitarray[r] ^ c1;
                    c1 = c2;
                }
            }
}
0
0 / 0 / 1
Регистрация: 04.07.2014
Сообщений: 83
26.09.2014, 17:55  [ТС] 8
а если через двумерный массив заполнить, то как.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
26.09.2014, 19:10 9
bez, можно поменять BitArray на Bool[]. я просто думал,что там уже есть увеличение, но пришлось сумматор самому писать, потому ничего не изменится.
0
0 / 0 / 1
Регистрация: 04.07.2014
Сообщений: 83
29.09.2014, 18:42  [ТС] 10
написал примитивным кодом, скорее даже говнокодом)
хотелось бы из этого кода сделать отдельную функцию и в мэйне просто вызвать ее. Дабы я не совсем разобрался в функциях, прошу помощи.

m-строка таблицы истинности
n-столбец таблицы
func[i] - функция
mas[i, j] - собственно сама таблица
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Console.WriteLine(" Совершенная ДНФ: \n");
            for(int i=0; i<m;i++)
            {
                for(int j=0; j<n;j++)
                {
                    if(func[i]==1)
                    {
                        if (mas[i, j] == 0)
                            Console.Write(" |X[" + (j+1)+ "]");
                        if (mas[i, j] == 1)
                            Console.Write("*X[" + (j + 1) + "]"); 
                    }
                }
                Console.Write(" ");
            }
p.s можно поржать
Миниатюры
Алгоритм нахождения сокращенной днф и кнф  
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
30.09.2014, 15:28 11
bez,
лучше так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<string> dnf=new List<string>();             
List<string> k = new List<string>();
for(int i=0; i<m;i++)
{           
     k = new List<string>();
     if(func[i]==1)
     {               
           for(int j=0; j<n;j++)
           {
                 k.Add((mas[i, j] == 0? "!X" : "X")+(j+1).ToString());
           }
     }
     if(k.Count>0)  dnf.Add("("+string.Join("&", k)+")");
}
Console.WriteLine(string.Join("|", dnf));
1
30.09.2014, 15:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2014, 15:28
Помогаю со студенческими работами здесь

Доказать что функция представима в сокращенной КНФ единственным образом
Собственно задача. Доказать что существует единственное представление булевой функции в виде...

ДНФ и КНФ
Как найти ДНФ и КНФ ?????

ДНФ<->КНФ
1) Из КНФ прихожу к ДНФ посредством перемножения :(A\vee \bar{C})(C\vee \bar{D})=AC\vee A\bar{D}...

ДНФ и КНФ
Здавствуйте. Подскажите пожалуйста, здесь я где-то ошибся или ... Ответ получается U :(( Может я со...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru