Advertisement
frentzy

ceva program random 2p in C

Jan 12th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.40 KB | None | 0 0
  1. // Mai jos de program am observatii pt. o buna functionare a programului cand scrieti prop. logice
  2.  
  3. #include <iostream>
  4. //#include <conio>
  5. #include <stdio.h>
  6. #include <fstream>
  7. #include <math.h>
  8. #include <conio.h>
  9. // am Folosit Code Blocks 13.12 si C++
  10. #define NOT !
  11. #define SI &   // In loc de a folosi clasicele ^ | & ! (xor,si,sau,not) am inlocuit cu define folosind macro
  12. #define SAU |
  13. #define XOR ^
  14.  
  15.  
  16. using namespace std;
  17. int * Alocare(int dimensiune){
  18.     // return new [int]*dimensiune;
  19.     return (int*)malloc(sizeof(int)*dimensiune);
  20. }
  21.  
  22. int ** AlocareDoublePointer(int dimensiune){
  23.     int **p;
  24.     p = (int **)malloc(sizeof(int*)*dimensiune);
  25.     for(int i=0;i<dimensiune;i++){
  26.         p[i] = Alocare(pow(2,dimensiune));
  27.     }
  28.     return p;
  29. }
  30.  
  31. void AlocareUnuZero(int **p,int dimensiune){
  32.     int a=2,b=4,i=0,r,contor=1,k=0;
  33.     r = pow(2,dimensiune);
  34.    
  35.     for (i = 0; i<r; i++)
  36.             if (k == 1) {
  37.                 p[0][i] = 1;
  38.                 k = 0;
  39.             }
  40.             else {
  41.                 p[0][i] = 0;
  42.                 k++;
  43.             }
  44.  
  45.             k = 0;
  46.            
  47.     while(contor<dimensiune){
  48.         for (i = 0; i<r; i++)
  49.             if (k >= a && k<b) {
  50.                 p[contor][i] = 1;
  51.                 k++;
  52.                 if (k == b)  k = 0;
  53.             }
  54.             else
  55.             {
  56.                 p[contor][i] = 0;
  57.                 k++;
  58.             }
  59.         a=b;
  60.         b=b*2;
  61.         k=0;
  62.         i=0;
  63.         contor++;
  64.     }
  65. }
  66.  
  67. void AfisareDoublePointer(int **p,int dimensiune){
  68.     for(int i=0;i<dimensiune;i++){
  69.         for(int j=0;j<pow(2,dimensiune);j++)
  70.             cout<<p[i][j]<<" ";
  71.         cout<<endl;
  72.     }
  73. }
  74.  
  75. int Echivalenta(int a, int b) {
  76.     if ((a == 1 && b == 1) || (a == 0 && b == 0))
  77.         return 1;
  78.     else
  79.         return 0;
  80. }
  81.  
  82. int Implica(int a, int b) {
  83.     a == 1 && b == 0 ? 0 : 1;
  84.     if (a == 1 && b == 0)
  85.         return 0;
  86.     else
  87.         return 1;
  88. }
  89.  
  90. void Afisare(int n, int r, int a[], int b[], int c[], int d[], int e[], int f[], int AsiF) {
  91.     if (n >= 1)
  92.         printf("A ");
  93.     if (n >= 2)
  94.         printf("B ");
  95.     if (n >= 3)
  96.         printf("C ");
  97.     if (n >= 4)
  98.         printf("D ");
  99.     if (n >= 5)
  100.         printf("E ");
  101.     if (n >= 6)
  102.         printf("F");
  103.     printf("\n");
  104.     for (int i = 0; i<r; i++) {
  105.         if (n >= 1) {
  106.             if (AsiF == 1)
  107.                 if (a[i] == 1)
  108.                     printf("A ");
  109.                 else
  110.                     printf("F ");
  111.             else
  112.                 printf("%d ", a[i]);
  113.         }
  114.         if (n >= 2) {
  115.             if (AsiF == 1)
  116.                 if (b[i] == 1)
  117.                     printf("A ");
  118.                 else
  119.                     printf("F ");
  120.             else
  121.                 printf("%d ", b[i]);
  122.         }
  123.         if (n >= 3) {
  124.             if (AsiF == 1)
  125.                 if (c[i] == 1)
  126.                     printf("A ");
  127.                 else
  128.                     printf("F ");
  129.             else
  130.                 printf("%d ", c[i]);
  131.         }
  132.         if (n >= 4) {
  133.             if (AsiF == 1)
  134.                 if (d[i] == 1)
  135.                     printf("A ");
  136.                 else
  137.                     printf("F ");
  138.             else
  139.                 printf("%d ", d[i]);
  140.         }
  141.         if (n >= 5) {
  142.             if (AsiF == 1)
  143.                 if (e[i] == 1)
  144.                     printf("A ");
  145.                 else
  146.                     printf("F ");
  147.             else
  148.                 printf("%d ", e[i]);
  149.         }
  150.         if (n >= 6) {
  151.             if (AsiF == 1)
  152.                 if (f[i] == 1)
  153.                     printf("A ");
  154.                 else
  155.                     printf("F ");
  156.             else
  157.                 printf("%d ", f[i]);
  158.         }
  159.         cout << endl;
  160.     }
  161.     cout << endl;
  162. }
  163.  
  164. int main()
  165. {
  166.     int **pointer;
  167.     int n, r;
  168.  
  169.     cout << "n= ";
  170.     cin >> n;
  171.  
  172.     r = pow(2, n);
  173.     pointer = AlocareDoublePointer(n);
  174.     AlocareUnuZero(pointer,n);
  175.     AfisareDoublePointer(pointer,n);
  176.     int a[r], b[r], c[r], d[r], e[r], f[r], i, nr = 0, validitate = 2, nesatisfiabilitate = 2, k = 0;
  177.     int *p;
  178.  
  179.     if (n >= 1)
  180.         for (i = 0; i<r; i++)
  181.             if (k == 1) {
  182.                 a[i] = 1;
  183.                 k = 0;
  184.             }
  185.             else {
  186.                 a[i] = 0;
  187.                 k++;
  188.             }
  189.  
  190.             k = 0;
  191.             if (n >= 2)
  192.                 for (i = 0; i<r; i++)
  193.                     if (k >= 2 && k<4) {
  194.                         b[i] = 1;
  195.                         k++;
  196.                         if (k == 4)  k = 0;
  197.                     }
  198.                     else
  199.                     {
  200.                         b[i] = 0;
  201.                         k++;
  202.  
  203.                     }
  204.  
  205.             k = 0;
  206.             if (n >= 3)
  207.                 for (i = 0; i<r; i++)
  208.                     if (k >= 4 && k<8) {
  209.                         c[i] = 1;
  210.                         k++;
  211.                         if (k == 8)  k = 0;
  212.                     }
  213.                     else
  214.                     {
  215.                         c[i] = 0;
  216.                         k++;
  217.  
  218.                     }
  219.             for (i = 0; i<r; i++)
  220.                 if (k >= 8 && k<16) {
  221.                     d[i] = 1;
  222.                     k++;
  223.                     if (k == 16) k = 0;
  224.                 }
  225.                 else {
  226.                     d[i] = 0;
  227.                     k++;
  228.                 }
  229.                 for (i = 0; i<r; i++)
  230.                     if (k >= 16 && k<32) {
  231.                         e[i] = 1;
  232.                         k++;
  233.                         if (k == 32) k = 0;
  234.                     }
  235.                     else {
  236.                         e[i] = 0;
  237.                         k++;
  238.                     }
  239.                     for (i = 0; i<r; i++)
  240.                         if (k >= 32 && k<64) {
  241.                             f[i] = 1;
  242.                             k++;
  243.                             if (k == 64) k = 0;
  244.                         }
  245.                         else {
  246.                             f[i] = 0;
  247.                             k++;
  248.                         }
  249.  
  250.                         int DAsauNU;
  251.                         int AsiF;
  252.                         printf("\nDoriti afisare? Apasati 1 pentru da si 0 pentru nu\n< 1/0 > ");
  253.                         cin >> DAsauNU;
  254.  
  255.                         printf("\nPentru afisare cu A si F apasati 1 pentru da si 0 pentru nu\n< 1/0 > ");
  256.                         cin >> AsiF;
  257.                         printf("\n");
  258.                         if (DAsauNU == 1)
  259.                             Afisare(n, r, a, b, c, d, e, f, AsiF);
  260.  
  261.                         switch (n) {  // Exemplu: Daca sunt 5 variabile va merge pe case 5 , si trebuie modificata expresia din define-ul din case 5 daca nu vreti pe cea standard
  262.  
  263. #define A a[i]
  264. #define B b[i]
  265. #define C c[i]
  266. #define D d[i]
  267. #define E e[i]
  268. #define F f[i]
  269. #define T 1
  270. #define F 0
  271.                         case 1: for (i = 0; i<r; i++) {
  272. #define PROP1 (Implica(1,A))  // 1 -> a
  273.                                                 if (validitate == 2 && (PROP1 == 0))
  274.                                 validitate = 0;
  275.                             if (nesatisfiabilitate == 2 && (PROP1 == 1))
  276.                                 nesatisfiabilitate = 0;
  277.                             if (AsiF == 1)
  278.                                 if (PROP1 == 1)
  279.                                     printf("A ");
  280.                                 else
  281.                                     printf("F ");
  282.                             else
  283.                                 printf("%d ", PROP1);
  284.                         }
  285.                                 break;
  286.                                 // A = 1 . F=0
  287.                         case 2: for (i = 0; i<r; i++) {
  288. #define PROP2 (   A SI B ) // Echivalenta( ( Implica( A SAU B ,NOT (A SI B)) ),B ) ( (a SAU b) -> Not( a SI b) ) <-> b
  289.                             if (validitate == 2 && (PROP2 == 0))
  290.                                 validitate = 0;
  291.                             if (nesatisfiabilitate == 2 && (PROP2 == 1))
  292.                                 nesatisfiabilitate = 0;
  293.                             if (AsiF == 1)
  294.                                 if (PROP2 == 1)
  295.                                     printf("A ");
  296.                                 else
  297.                                     printf("F ");
  298.                             else
  299.                                 printf("%d ", PROP2);
  300.                         }
  301.                                 break;
  302.  
  303.                         case 3: for (i = 0; i<r; i++) {
  304. #define PROP3 (  (A SI (B SAU C))SI B   )   // ( a SI ( b SAU C) ) SI b
  305.                             if (validitate == 2 && (PROP3 == 0))
  306.                                 validitate = 0;
  307.                             if (nesatisfiabilitate == 2 && (PROP3 == 1))
  308.                                 nesatisfiabilitate = 0;
  309.                             if (AsiF == 1)
  310.                                 if (PROP3 == 1)
  311.                                     printf("A ");
  312.                                 else
  313.                                     printf("F ");
  314.                             else
  315.                                 printf("%d ", PROP3);
  316.                         }
  317.                                 break;
  318.  
  319.                         case 4: for (i = 0; i<r; i++) {
  320. #define PROP4 (  NOT Echivalenta(A,B) SI (D XOR C)  ) // NOT (a <-> b) SI ( d XOR c) x
  321.                             if (validitate == 2 && (PROP4 == 0))
  322.                                 validitate = 0;
  323.                             if (nesatisfiabilitate == 2 && (PROP4 == 1))
  324.                                 nesatisfiabilitate = 0;
  325.                             if (AsiF == 1)
  326.                                 if (PROP4 == 1)
  327.                                     printf("A ");
  328.                                 else
  329.                                     printf("F ");
  330.                             else
  331.                                 printf("%d ", PROP4);
  332.                         }
  333.  
  334.                                 break;
  335.  
  336.                         case 5: for (i = 0; i<r; i++) {
  337. #define PROP5 (  Implica(Echivalenta(A,B),Implica((D SI E) XOR (A SAU NOT C),C))  ) //(a <-> b) -> ( ( (d & e) XOR (a SAU NOT c) ) -> c )
  338.                             if (validitate == 2 && (PROP5 == 0))
  339.                                 validitate = 0;
  340.                             if (nesatisfiabilitate == 2 && (PROP5 == 1))
  341.                                 nesatisfiabilitate = 0;
  342.                             if (AsiF == 1)
  343.                                 if (PROP5 == 1)
  344.                                     printf("A ");
  345.                                 else
  346.                                     printf("F ");
  347.                             else
  348.                                 printf("%d ", PROP5);
  349.                         }
  350.                                 break;
  351.  
  352.                         case 6: for (i = 0; i<r; i++) {
  353. #define PROP6 (  Implica(((A SI B SAU C) XOR D ) SAU (E XOR F),0 ) )  //  ( ( (a SI b SAU c ) XOR d ) SAU (e XOR f) ) -> 0
  354.  
  355.                             if (validitate == 2 && (PROP6 == 0)) // testare validitate
  356.                                 validitate = 0; // Nu e valid daca valid =0
  357.  
  358.                             if (nesatisfiabilitate == 2 && (PROP6 == 1))
  359.                                 nesatisfiabilitate = 0; // Nu e nesatisfiabila daca e 0
  360.                             if (AsiF == 1)
  361.                                 if (PROP6 == 1)
  362.                                     printf("A ");
  363.                                 else
  364.                                     printf("F ");
  365.                             else
  366.                                 printf("%d ", PROP6);
  367.                         }
  368.                                 break;
  369.                         default: printf("Refaceti programul pentru ca programul poate doar pana la 6 variabile");
  370.                             break;
  371.                         }
  372.  
  373.                         if (n<7 || n>0) {
  374.                             if (validitate == 2 && nesatisfiabilitate == 0)
  375.                                 printf("\nPropozitia este: Valida si satisfiabila \nNu este: Nesatisfiabila si contingenta");
  376.                             if (validitate == 0 && nesatisfiabilitate == 2)
  377.                                 printf("\nPropozitia este: Nesatisfiabila \nNu este: Valida ,Contingenta,Satisfiabila");
  378.                             if (validitate == 0 && nesatisfiabilitate == 0)
  379.                                 printf("\nPropozitia este: Contingenta si Satisfiabila \nNu este: Valida si Nesatisfiabila");
  380.                         }
  381.                         return 0;
  382. }
  383.  
  384. // pt case 4
  385. // #define PROP4 (  NOT Echivalenta(a[i],b[i]) SI (d[i] XOR c[i])  )     // NOT (a <-> b) SI ( d XOR c)
  386.  
  387. // pt case 2
  388. // #define PROP2 (  ( ( (a[i] SAU b[i]) SI (a[i] SI b[i]) ) SAU b[i] ) SI (NOT b[i] SAU ( (NOT a[i] SI NOT b[i]) SAU (NOT a[i] SAU NOT b[i]) ))  )  //  (( (a & b) & (a & b) ) | b ) & ( !b | ( (  !a & !b ) | ( !a | !b) ) )
  389.  
  390. // pt case 4
  391. // #define PROP4 ( ( ( (a[i] SI NOT b[i]) ) SAU (b[i] SI NOT a[i])) SI (d[i] XOR c[i])  )
  392.  
  393. // pt case 6
  394. // PROP6 ( Echivalenta(a[i],Implica(b[i],NOT c[i]) )  XOR Implica(d[i] SI e[i],f[i] ) ) //  ( a <-> (b -> NOT c) ) XOR ( (d SI e) -> f )
  395.  
  396. /* Trebuie mare atentie atunci cand se aseaza functia dupa '#define PROP' cum se aseaza parantezele , pentru ca in functie de cum sunt asezate pot modifica programul sau sa nu dea rezultatul dorit
  397.  
  398. Exemple de utitilizare a functiilor:
  399.  
  400. Echivalenta(a[i],b[i])  ==== a <-> b
  401. Implica(a[i],b[i]) ====== a -> b
  402. Implica(a[i],Echivalenta(c[i],b[i])) ===== a -> ( b <-> c )
  403.  
  404. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement