Advertisement
100hahahaha

Untitled

May 28th, 2023
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.60 KB | None | 0 0
  1. #include <chrono>
  2. #include <locale.h>
  3. #include <stdio.h>
  4. #include <stdbool.h>
  5. #include <string>
  6.  
  7. #define SIZE 4
  8. #define A_SIZE 4
  9. #define Y_SIZE 11
  10. #define S_SIZE 3
  11. #define R_SIZE 3
  12. #define _CRT_SECURE_NO_WARNINGS
  13.  
  14. using namespace std;
  15. using namespace std::chrono;
  16. bool mnoj(int arr[], int len, int res) {
  17.     for (int i = 0; i < len; i++) {
  18.         if (arr[i] == res) return true;
  19.     }
  20.     return false;
  21. }
  22. int toDec(bool a[]) {
  23.     int num = 0;
  24.     for (int i = SIZE - 1; i >= 0; i--)
  25.         num += (1 << (SIZE - 1) - i) * a[i];
  26.     return num;
  27. }
  28.  
  29. void updateY(bool a[], bool x[], bool y[]) {
  30.     y[1] = !a[1] * !a[2] * !a[3];
  31.     y[2] = !a[1] * !a[2] * a[3];
  32.     y[3] = !a[1] * !a[2] * a[3];
  33.     y[4] = !a[1] * a[2] * !a[3] * x[0];
  34.     y[5] = !a[1] * a[2] * a[3];
  35.     y[6] = !a[1] * a[2] * a[3];
  36.     y[7] = !a[1] * a[2] * a[3];
  37.     y[8] = a[1] * !a[2] * !a[3] * x[1] * x[2];
  38.     y[9] = a[1] * !a[2] * a[3] * x[3];
  39.     y[10] = a[1] * !a[2] * !a[3] * x[1] * !x[2];
  40. }
  41.  
  42. void updateS(bool a[], bool s[], bool x[]) {
  43.     s[1] = !a[1] * a[2] * a[3];
  44.     s[2] = !a[1] * !a[2] * a[3] + a[1] * !a[2] * !a[3] * !x[1];
  45.     s[3] = !a[1] * !a[2] * !a[3] + !a[1] * a[2] * !a[3] * !x[0] + !a[1] * a[2] * !a[3] * x[0] + a[1] * !a[2] * !a[3] * x[1] * x[2];
  46. }
  47.  
  48. void updateR(bool a[], bool x[], bool r[]) {
  49.     r[1] = a[1] * !a[2] * !a[3] * x[1] * !x[2] + a[1] * !a[2] * !a[3] * !x[1] + a[1] * !a[2] * a[3] * x[3] + a[1] * !a[2] * a[3] * !x[3];
  50.     r[2] = !a[1] * a[2] * a[3];
  51.     r[3] = !a[1] * !a[2] * a[3] + !a[1] * a[2] * a[3] + a[1] * !a[2] * a[3] * x[3] + a[1] * !a[2] * a[3] * !x[3];
  52. }
  53. void changeA(bool a[], bool s[], bool r[]) {
  54.     for (int i = 1; i <= A_SIZE; i++) {
  55.         if (s[i])
  56.             a[i] = true;
  57.         if (r[i])
  58.             a[i] = false;
  59.     }
  60. }
  61.  
  62. void printVector(bool v[]) {
  63.     for (int i = 1; i < Y_SIZE; i++)
  64.         printf("%d ", v[i]);
  65. }
  66. void printVectorA(bool v[]) {
  67.     for (int i = 1; i < A_SIZE; i++)
  68.         printf("%d ", v[i]);
  69. }
  70.  
  71. void addState(int S, bool a[], bool y[]) {
  72.  
  73.     printf("Я сейчас в S%d\n", S);
  74.     printf("Вывод состояний a: ");
  75.     printVectorA(a);
  76.     printf("\n");
  77.     printf("Вывод состояний y: ");
  78.     printVector(y);
  79.     /*for (int i = 1; i <= Y_SIZE; i++) {
  80.         if (y[i])
  81.             printf("%d ", i);
  82.     }*/
  83.     printf("\n\n");
  84. }
  85.  
  86. int main() {
  87.  
  88.     setlocale(LC_ALL, "Russian");
  89.     printf("1. Логические выражения. 2. Множество единичных наборов.");
  90.     int check;
  91.     scanf_s("%d", &check);
  92.     if (check == 1) {
  93.  
  94.  
  95.         bool x[SIZE] = { false };
  96.         for (int i = 0; i < SIZE; i++) {
  97.             printf("Введите x: ");
  98.             scanf_s("%hhu", &x[i]);
  99.         }
  100.  
  101.         auto start = high_resolution_clock::now();
  102.  
  103.         printf("\n\n");
  104.  
  105.         bool a[A_SIZE + 1] = { false };
  106.         bool y[Y_SIZE + 1] = { false };
  107.         bool s[S_SIZE + 1] = { false };
  108.         bool r[R_SIZE + 1] = { false };
  109.         bool checkFirst[1 << SIZE] = { false };
  110.         bool checkSecond[1 << SIZE] = { false };
  111.  
  112.         int S;
  113.         do {
  114.             S = toDec(a);
  115.             if (checkFirst[S])
  116.                 checkSecond[S] = true;
  117.             else
  118.                 checkFirst[S] = true;
  119.  
  120.             if (checkSecond[S])
  121.                 break;
  122.  
  123.  
  124.             addState(S, a, y);
  125.             updateY(a, x, y);
  126.             updateR(a, x, r);
  127.             updateS(a, s, x);
  128.             changeA(a, s, r);
  129.         } while (!checkSecond[S]);
  130.  
  131.         if (S == 0) {
  132.             addState(S, a, y);
  133.             auto stop = high_resolution_clock::now();
  134.             auto elapsed_time = duration_cast<duration<double, milli>>(stop - start);
  135.             printf_s("\nВремя работы: %f секунд\n", elapsed_time.count() / 1000);
  136.  
  137.             printf("ЗАВЕРШИЛ\n");
  138.         }
  139.         else {
  140.             addState(S, a, y);
  141.             auto stop = high_resolution_clock::now();
  142.             auto elapsed_time = duration_cast<duration<double, milli>>(stop - start);
  143.             printf_s("\nВремя работы: %f секунд\n", elapsed_time.count() / 1000);
  144.  
  145.             printf("ЦИКЛ\n");
  146.         }
  147.     }
  148.     else {
  149.         int y1[16] = {
  150.  
  151.             0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
  152.  
  153.         };
  154.         int y2[16] = {
  155.             16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
  156.         };
  157.         int y3[16] = {
  158.             16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
  159.         };
  160.         int y4[8] = {
  161.             40, 41, 42, 43, 44, 45, 46, 47
  162.         };
  163.         int y5[16] = {
  164.             48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  165.         };
  166.         int y6[16] = {
  167.             48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  168.         };
  169.         int y7[16] = {
  170.             48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  171.         };
  172.         int y8[4] = {
  173.             70, 71, 78, 79
  174.         };
  175.         int y9[8] = {
  176.             81, 83, 85, 87, 89, 91, 93, 95
  177.         };
  178.         int y10[4] = {
  179.             68, 69, 76, 77
  180.  
  181.         };
  182.  
  183.         int w1[16] = {
  184.             48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  185.         };
  186.         int w2[24] = {
  187.             16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 73, 74, 75, 72
  188.         };
  189.         int w3[36] = {
  190.             0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 40, 41, 42, 43, 44, 45, 46, 47, 32,33,34,35,36,37,38,39, 70, 71, 78, 79
  191.         };
  192.  
  193.         int u1[28] = {
  194.             68, 69, 77, 76, 64, 65, 66, 67, 73, 74, 75, 72, 81, 83, 85, 87, 89, 91, 93, 95, 80, 82, 84, 86, 88, 90, 92, 94
  195.         };
  196.         int u2[16] = {
  197.             48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  198.         };
  199.         int u3[48] = {
  200.             16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,  81, 83, 85, 87, 89, 91, 93, 95, 80, 82, 84, 86, 88, 90, 92, 94, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
  201.  
  202.         };
  203.  
  204.  
  205.         int X[4];
  206.         int Y[10];
  207.         int S[] = { 0, 0, 0 };
  208.  
  209.         for (int i = 0; i < 4; i++) scanf_s("%d", &X[i]);
  210.  
  211.         auto start = high_resolution_clock::now();
  212.  
  213.         int CS[7];
  214.  
  215.         auto stop = high_resolution_clock::now();
  216.         auto elapsed_time = duration_cast<duration<double, milli>>(stop - start);
  217.         printf_s("\nВремя работы: %f секунд\n", elapsed_time.count() / 1000);
  218.  
  219.         auto start2 = high_resolution_clock::now();
  220.  
  221.         for (int i = 0; i < 3; i++) CS[i] = S[i];
  222.         for (int i = 0; i < 4; i++) CS[i + 3] = X[i];
  223.         int res;
  224.         for (int i = 0; i < 8; i++) {
  225.             res = 0;
  226.             for (int j = 6; j >= 0; j--) {
  227.  
  228.                 res += pow(2, j) * CS[6 - j];
  229.  
  230.             }
  231.  
  232.             printf_s("\nS(");
  233.             for (int j = 0; j < 3; j++) printf_s("%d", S[j]);
  234.             if (mnoj(y1, 16, res)) Y[0] = 1;
  235.             else Y[0] = 0;
  236.             if (mnoj(y2, 16, res)) Y[1] = 1;
  237.             else Y[1] = 0;
  238.             if (mnoj(y3, 16, res)) Y[2] = 1;
  239.             else Y[2] = 0;
  240.             if (mnoj(y4, 8, res)) Y[3] = 1;
  241.             else Y[3] = 0;
  242.             if (mnoj(y5, 16, res)) Y[4] = 1;
  243.             else Y[4] = 0;
  244.             if (mnoj(y6, 16, res)) Y[5] = 1;
  245.             else Y[5] = 0;
  246.             if (mnoj(y7, 16, res)) Y[6] = 1;
  247.             else Y[6] = 0;
  248.             if (mnoj(y8, 4, res)) Y[7] = 1;
  249.             else Y[7] = 0;
  250.             if (mnoj(y9, 8, res)) Y[8] = 1;
  251.             else Y[8] = 0;
  252.             if (mnoj(y10, 4, res)) Y[9] = 1;
  253.             else Y[9] = 0;
  254.  
  255.  
  256.             if (mnoj(w1, 16, res)) S[0] = 1;
  257.             if (mnoj(w2, 24, res)) S[1] = 1;
  258.             if (mnoj(w3, 36, res)) S[2] = 1;
  259.             if (mnoj(u1, 28, res)) S[0] = 0;
  260.             if (mnoj(u2, 16, res)) S[1] = 0;
  261.             if (mnoj(u3, 48, res)) S[2] = 0;
  262.  
  263.             printf_s(") -> S(");
  264.             for (int j = 0; j < 3; j++) printf_s("%d", S[j]);
  265.             printf_s(") Y(1-10):");
  266.             for (int j = 0; j < 10; j++) printf_s(" %d", Y[j]);
  267.             for (int j = 0; j < 3; j++) CS[j] = S[j];
  268.             if (S[0] + S[1] + S[2] == 0) {
  269.                 printf_s("\nПрограмма завершена");
  270.                 break;
  271.             }
  272.         }
  273.  
  274.         auto stop2 = high_resolution_clock::now();
  275.         auto elapsed_time2 = duration_cast<duration<double, milli>>(stop2 - start2);
  276.         printf_s("\nВремя работы: %f секунд\n", elapsed_time2.count() / 1000);
  277.  
  278.  
  279.     }
  280.     return 0;
  281. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement