Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace DMath_lab5
- {
- class Program
- {
- static void Main(string[] args)
- {
- //тут всё ток для одной функции. Если надо две, то надо просто продублировать все переменные, кроме результатов, и два раза сделать все проверки
- string[] f = new string[] { "~(x|y)" };//список функций(не обязателен)
- string[] r = new string[6];//сюда будут записываться характеристики системы
- int k1 = ~(1|1)+2;//сюда записывается результат на сохранение константы 1(просто результат функции при обеих единицах)(на +2 не обращай внимания, оно для "не" нужно)
- int k0 = ~(0|0)+2;//то же само, только с 0
- int[] mm = new int[4] { ~(0 | 0)+2, ~(0 | 1)+2, ~(1 | 0)+2, ~(1 | 1)+2 };//для проверки на монотонность(просто результаты функции при 0 0, 1 0, 0 1,1 1
- int[] sm = new int[4] { ~~(1 | 1), ~~(1 | 0), ~~(0 | 1), ~~(0 | 0) };//для проверки функции на самодвойственность(обратный результат функции с обратными переменными)
- int[] l1 = new int[] { 0, 1, 0, 0, 1, 1, 0, 1 };//l1 l2 l3 - массивы для полинома(что все 8 вариантов значений для 3 переменных получить)
- int[] l2 = new int[] { 0, 0, 1, 0, 1, 0, 1, 1 };
- int[] l3 = new int[] { 0, 0, 0, 1, 0, 1, 1, 1 };
- int[] a = new int[8];//хранилище коофов полинома
- int k1r = 0,k0r = 0,mr = 0,sr = 0,lr = 0;//результаты проверки
- if (k1 == 0)//оба ифа - проверка на сохранение константы
- k1r = 1;
- if (k0 == 1)
- k0r = 1;
- for(int i = 0;i<8;i++)//полином
- {
- a[i] = Math.Abs(~(l1[i] | l2[i] | l3[i])+2-a[0]);//считаем полином по схеме f(l1[i] l2[i] l3[i]) минус кооф при 0,0,0
- if (i == 4)//для 1,1,0 отнимаем также коефы при 1,0,0 и 0,1,0(для остальных такой же прикол)
- a[i] -= a[1] - a[2];
- else if (i == 5)
- a[i] -= a[1] - a[3];
- else if (i == 6)
- a[i] -= a[2] - a[3];
- else if (i == 7)
- a[i] -= a[1] - a[2] - a[3] - a[4] - a[5] - a[6];
- if (i > 3 && a[i] == 1)//если это кооф, начиная с 4, то если он единица, то система уже не линейная
- {
- lr = 1;//отмечаем, что система не линейная
- break;
- }
- }
- for (int i=0;i<4;i++)//проверка на самодвойственность
- {
- if(mm[i]!=sm[i])
- {
- sr = 1;//если единица, то система не самодвойственна
- break;
- }
- }
- if(mm[0]>mm[1]||mm[0]>mm[2]||mm[0]>mm[3]||mm[1]>mm[3]||mm[2]>mm[3])//проверка на монотонность(просто сравниваешь то, что должно быть меньше с тем, что должно быть больше)
- {
- mr= 1;
- }
- //проверка переменных, отвечающих за характеристики системы
- if (k1r == 0)
- r[0] = "Сохраняющая константу 1, ";
- else
- r[0] = "Не сохраняющая константу 1, ";
- if (k0r == 0)
- r[1] = "сохраняющая константу 0, ";
- else
- r[1] = "не сохраняющая константу 0, ";
- if (mr == 0)
- r[2] = "монотонная, ";
- else
- r[2] = "не монотонная, ";
- if (sr==0)
- r[3] = "самодвойственная, ";
- else
- r[3] = "не самодвойственная, ";
- if (lr == 0)
- r[4] = "линейная, ";
- else
- r[4] = "не линейная, ";
- //если все штуки равны единице, значит всё ок и система полная
- if (k0r == 1 && k1r == 1 && lr == 1 && mr == 1 && sr == 1)
- r[5] = "полная.";
- else
- r[5] = "не полная";
- Console.Write("Система булевых функций { ");
- for(int i = 0;i<f.Length;i++)
- {
- Console.Write(f[i] + " ");
- }
- Console.WriteLine("}:");
- for(int i = 0;i<r.Length;i++)
- {
- Console.WriteLine(r[i]);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement