Advertisement
Guest User

Untitled

a guest
May 26th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.49 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace DMath_lab5
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             //тут всё ток для одной функции. Если надо две, то надо просто продублировать все переменные, кроме результатов, и два раза сделать все проверки
  14.             string[] f = new string[] { "~(x|y)" };//список функций(не обязателен)
  15.             string[] r = new string[6];//сюда будут записываться характеристики системы
  16.             int k1 = ~(1|1)+2;//сюда записывается результат на сохранение константы 1(просто результат функции при обеих единицах)(на +2 не обращай внимания, оно для "не" нужно)
  17.             int k0 = ~(0|0)+2;//то же само, только с 0
  18.             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
  19.             int[] sm = new int[4] { ~~(1 | 1), ~~(1 | 0), ~~(0 | 1), ~~(0 | 0) };//для проверки функции на самодвойственность(обратный результат функции с обратными переменными)
  20.             int[] l1 = new int[] { 0, 1, 0, 0, 1, 1, 0, 1 };//l1 l2 l3 - массивы для полинома(что все 8 вариантов значений для 3 переменных получить)
  21.             int[] l2 = new int[] { 0, 0, 1, 0, 1, 0, 1, 1 };
  22.             int[] l3 = new int[] { 0, 0, 0, 1, 0, 1, 1, 1 };
  23.             int[] a = new int[8];//хранилище коофов полинома
  24.             int k1r = 0,k0r = 0,mr = 0,sr = 0,lr = 0;//результаты проверки
  25.             if (k1 == 0)//оба ифа - проверка на сохранение константы
  26.                 k1r = 1;
  27.             if (k0 == 1)
  28.                 k0r = 1;
  29.             for(int i = 0;i<8;i++)//полином
  30.             {
  31.                 a[i] = Math.Abs(~(l1[i] | l2[i] | l3[i])+2-a[0]);//считаем полином по схеме f(l1[i] l2[i] l3[i]) минус кооф при 0,0,0
  32.                 if (i == 4)//для 1,1,0 отнимаем также коефы при 1,0,0 и 0,1,0(для остальных такой же прикол)
  33.                     a[i] -= a[1] - a[2];
  34.                 else if (i == 5)
  35.                     a[i] -= a[1] - a[3];
  36.                 else if (i == 6)
  37.                     a[i] -= a[2] - a[3];
  38.                 else if (i == 7)
  39.                     a[i] -= a[1] - a[2] - a[3] - a[4] - a[5] - a[6];
  40.                 if (i > 3 && a[i] == 1)//если это кооф, начиная с 4, то если он единица, то система уже не линейная
  41.                 {
  42.                     lr = 1;//отмечаем, что система не линейная
  43.                     break;
  44.                 }
  45.             }
  46.             for (int i=0;i<4;i++)//проверка на самодвойственность
  47.             {
  48.                 if(mm[i]!=sm[i])
  49.                 {
  50.                     sr = 1;//если единица, то система не самодвойственна
  51.                     break;
  52.                 }
  53.             }
  54.             if(mm[0]>mm[1]||mm[0]>mm[2]||mm[0]>mm[3]||mm[1]>mm[3]||mm[2]>mm[3])//проверка на монотонность(просто сравниваешь то, что должно быть меньше с тем, что должно быть больше)
  55.             {
  56.                 mr= 1;
  57.             }
  58.             //проверка переменных, отвечающих за характеристики системы
  59.             if (k1r == 0)
  60.                 r[0] = "Сохраняющая константу 1, ";
  61.             else
  62.                 r[0] = "Не сохраняющая константу 1, ";
  63.             if (k0r == 0)
  64.                 r[1] = "сохраняющая константу 0, ";
  65.             else
  66.                 r[1] = "не сохраняющая константу 0, ";
  67.             if (mr == 0)
  68.                 r[2] = "монотонная, ";
  69.             else
  70.                 r[2] = "не монотонная, ";
  71.             if (sr==0)
  72.                 r[3] = "самодвойственная, ";
  73.             else
  74.                 r[3] = "не самодвойственная, ";
  75.             if (lr == 0)
  76.                 r[4] = "линейная, ";
  77.             else
  78.                 r[4] = "не линейная, ";
  79.             //если все штуки равны единице, значит всё ок и система полная
  80.             if (k0r == 1 && k1r == 1 && lr == 1 && mr == 1 && sr == 1)
  81.                 r[5] = "полная.";
  82.             else
  83.                 r[5] = "не полная";
  84.             Console.Write("Система булевых функций { ");
  85.             for(int i = 0;i<f.Length;i++)
  86.             {
  87.                 Console.Write(f[i] + " ");
  88.             }
  89.             Console.WriteLine("}:");
  90.             for(int i = 0;i<r.Length;i++)
  91.             {
  92.                 Console.WriteLine(r[i]);
  93.             }
  94.         }
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement