Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Mai jos de program am observatii pt. o buna functionare a programului cand scrieti prop. logice
- #include <iostream>
- //#include <conio>
- #include <stdio.h>
- #include <fstream>
- #include <math.h>
- #include <conio.h>
- // am Folosit Code Blocks 13.12 si C++
- #define NOT !
- #define SI & // In loc de a folosi clasicele ^ | & ! (xor,si,sau,not) am inlocuit cu define folosind macro
- #define SAU |
- #define XOR ^
- using namespace std;
- int * Alocare(int dimensiune){
- // return new [int]*dimensiune;
- return (int*)malloc(sizeof(int)*dimensiune);
- }
- int ** AlocareDoublePointer(int dimensiune){
- int **p;
- p = (int **)malloc(sizeof(int*)*dimensiune);
- for(int i=0;i<dimensiune;i++){
- p[i] = Alocare(pow(2,dimensiune));
- }
- return p;
- }
- void AlocareUnuZero(int **p,int dimensiune){
- int a=2,b=4,i=0,r,contor=1,k=0;
- r = pow(2,dimensiune);
- for (i = 0; i<r; i++)
- if (k == 1) {
- p[0][i] = 1;
- k = 0;
- }
- else {
- p[0][i] = 0;
- k++;
- }
- k = 0;
- while(contor<dimensiune){
- for (i = 0; i<r; i++)
- if (k >= a && k<b) {
- p[contor][i] = 1;
- k++;
- if (k == b) k = 0;
- }
- else
- {
- p[contor][i] = 0;
- k++;
- }
- a=b;
- b=b*2;
- k=0;
- i=0;
- contor++;
- }
- }
- void AfisareDoublePointer(int **p,int dimensiune){
- for(int i=0;i<dimensiune;i++){
- for(int j=0;j<pow(2,dimensiune);j++)
- cout<<p[i][j]<<" ";
- cout<<endl;
- }
- }
- int Echivalenta(int a, int b) {
- if ((a == 1 && b == 1) || (a == 0 && b == 0))
- return 1;
- else
- return 0;
- }
- int Implica(int a, int b) {
- a == 1 && b == 0 ? 0 : 1;
- if (a == 1 && b == 0)
- return 0;
- else
- return 1;
- }
- void Afisare(int n, int r, int a[], int b[], int c[], int d[], int e[], int f[], int AsiF) {
- if (n >= 1)
- printf("A ");
- if (n >= 2)
- printf("B ");
- if (n >= 3)
- printf("C ");
- if (n >= 4)
- printf("D ");
- if (n >= 5)
- printf("E ");
- if (n >= 6)
- printf("F");
- printf("\n");
- for (int i = 0; i<r; i++) {
- if (n >= 1) {
- if (AsiF == 1)
- if (a[i] == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", a[i]);
- }
- if (n >= 2) {
- if (AsiF == 1)
- if (b[i] == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", b[i]);
- }
- if (n >= 3) {
- if (AsiF == 1)
- if (c[i] == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", c[i]);
- }
- if (n >= 4) {
- if (AsiF == 1)
- if (d[i] == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", d[i]);
- }
- if (n >= 5) {
- if (AsiF == 1)
- if (e[i] == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", e[i]);
- }
- if (n >= 6) {
- if (AsiF == 1)
- if (f[i] == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", f[i]);
- }
- cout << endl;
- }
- cout << endl;
- }
- int main()
- {
- int **pointer;
- int n, r;
- cout << "n= ";
- cin >> n;
- r = pow(2, n);
- pointer = AlocareDoublePointer(n);
- AlocareUnuZero(pointer,n);
- AfisareDoublePointer(pointer,n);
- int a[r], b[r], c[r], d[r], e[r], f[r], i, nr = 0, validitate = 2, nesatisfiabilitate = 2, k = 0;
- int *p;
- if (n >= 1)
- for (i = 0; i<r; i++)
- if (k == 1) {
- a[i] = 1;
- k = 0;
- }
- else {
- a[i] = 0;
- k++;
- }
- k = 0;
- if (n >= 2)
- for (i = 0; i<r; i++)
- if (k >= 2 && k<4) {
- b[i] = 1;
- k++;
- if (k == 4) k = 0;
- }
- else
- {
- b[i] = 0;
- k++;
- }
- k = 0;
- if (n >= 3)
- for (i = 0; i<r; i++)
- if (k >= 4 && k<8) {
- c[i] = 1;
- k++;
- if (k == 8) k = 0;
- }
- else
- {
- c[i] = 0;
- k++;
- }
- for (i = 0; i<r; i++)
- if (k >= 8 && k<16) {
- d[i] = 1;
- k++;
- if (k == 16) k = 0;
- }
- else {
- d[i] = 0;
- k++;
- }
- for (i = 0; i<r; i++)
- if (k >= 16 && k<32) {
- e[i] = 1;
- k++;
- if (k == 32) k = 0;
- }
- else {
- e[i] = 0;
- k++;
- }
- for (i = 0; i<r; i++)
- if (k >= 32 && k<64) {
- f[i] = 1;
- k++;
- if (k == 64) k = 0;
- }
- else {
- f[i] = 0;
- k++;
- }
- int DAsauNU;
- int AsiF;
- printf("\nDoriti afisare? Apasati 1 pentru da si 0 pentru nu\n< 1/0 > ");
- cin >> DAsauNU;
- printf("\nPentru afisare cu A si F apasati 1 pentru da si 0 pentru nu\n< 1/0 > ");
- cin >> AsiF;
- printf("\n");
- if (DAsauNU == 1)
- Afisare(n, r, a, b, c, d, e, f, AsiF);
- 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
- #define A a[i]
- #define B b[i]
- #define C c[i]
- #define D d[i]
- #define E e[i]
- #define F f[i]
- #define T 1
- #define F 0
- case 1: for (i = 0; i<r; i++) {
- #define PROP1 (Implica(1,A)) // 1 -> a
- if (validitate == 2 && (PROP1 == 0))
- validitate = 0;
- if (nesatisfiabilitate == 2 && (PROP1 == 1))
- nesatisfiabilitate = 0;
- if (AsiF == 1)
- if (PROP1 == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", PROP1);
- }
- break;
- // A = 1 . F=0
- case 2: for (i = 0; i<r; i++) {
- #define PROP2 ( A SI B ) // Echivalenta( ( Implica( A SAU B ,NOT (A SI B)) ),B ) ( (a SAU b) -> Not( a SI b) ) <-> b
- if (validitate == 2 && (PROP2 == 0))
- validitate = 0;
- if (nesatisfiabilitate == 2 && (PROP2 == 1))
- nesatisfiabilitate = 0;
- if (AsiF == 1)
- if (PROP2 == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", PROP2);
- }
- break;
- case 3: for (i = 0; i<r; i++) {
- #define PROP3 ( (A SI (B SAU C))SI B ) // ( a SI ( b SAU C) ) SI b
- if (validitate == 2 && (PROP3 == 0))
- validitate = 0;
- if (nesatisfiabilitate == 2 && (PROP3 == 1))
- nesatisfiabilitate = 0;
- if (AsiF == 1)
- if (PROP3 == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", PROP3);
- }
- break;
- case 4: for (i = 0; i<r; i++) {
- #define PROP4 ( NOT Echivalenta(A,B) SI (D XOR C) ) // NOT (a <-> b) SI ( d XOR c) x
- if (validitate == 2 && (PROP4 == 0))
- validitate = 0;
- if (nesatisfiabilitate == 2 && (PROP4 == 1))
- nesatisfiabilitate = 0;
- if (AsiF == 1)
- if (PROP4 == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", PROP4);
- }
- break;
- case 5: for (i = 0; i<r; i++) {
- #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 )
- if (validitate == 2 && (PROP5 == 0))
- validitate = 0;
- if (nesatisfiabilitate == 2 && (PROP5 == 1))
- nesatisfiabilitate = 0;
- if (AsiF == 1)
- if (PROP5 == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", PROP5);
- }
- break;
- case 6: for (i = 0; i<r; i++) {
- #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
- if (validitate == 2 && (PROP6 == 0)) // testare validitate
- validitate = 0; // Nu e valid daca valid =0
- if (nesatisfiabilitate == 2 && (PROP6 == 1))
- nesatisfiabilitate = 0; // Nu e nesatisfiabila daca e 0
- if (AsiF == 1)
- if (PROP6 == 1)
- printf("A ");
- else
- printf("F ");
- else
- printf("%d ", PROP6);
- }
- break;
- default: printf("Refaceti programul pentru ca programul poate doar pana la 6 variabile");
- break;
- }
- if (n<7 || n>0) {
- if (validitate == 2 && nesatisfiabilitate == 0)
- printf("\nPropozitia este: Valida si satisfiabila \nNu este: Nesatisfiabila si contingenta");
- if (validitate == 0 && nesatisfiabilitate == 2)
- printf("\nPropozitia este: Nesatisfiabila \nNu este: Valida ,Contingenta,Satisfiabila");
- if (validitate == 0 && nesatisfiabilitate == 0)
- printf("\nPropozitia este: Contingenta si Satisfiabila \nNu este: Valida si Nesatisfiabila");
- }
- return 0;
- }
- // pt case 4
- // #define PROP4 ( NOT Echivalenta(a[i],b[i]) SI (d[i] XOR c[i]) ) // NOT (a <-> b) SI ( d XOR c)
- // pt case 2
- // #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) ) )
- // pt case 4
- // #define PROP4 ( ( ( (a[i] SI NOT b[i]) ) SAU (b[i] SI NOT a[i])) SI (d[i] XOR c[i]) )
- // pt case 6
- // 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 )
- /* 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
- Exemple de utitilizare a functiilor:
- Echivalenta(a[i],b[i]) ==== a <-> b
- Implica(a[i],b[i]) ====== a -> b
- Implica(a[i],Echivalenta(c[i],b[i])) ===== a -> ( b <-> c )
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement