diff --git a/main.c b/main.c index 51d709c..618714e 100644 --- a/main.c +++ b/main.c @@ -18,7 +18,7 @@ */ #include -#include "relacoes.h" +#include "relacoes.h" //Biblioteca onde será definida o conjunto S e o rho int main() { diff --git a/propriedades.h b/propriedades.h index 5939c84..846ec2f 100644 --- a/propriedades.h +++ b/propriedades.h @@ -1,20 +1,65 @@ #ifndef _PROPRIEDADES_H #define _PROPRIEDADES_H -int ehReflexiva(){ - return 0; +int ehReflexiva(int conjS_2[], int rho_2[][2],int tam_S, int qtd_par); // protótipo da funcao reflexiva + + +int ehReflexiva(int conjS_2[], int rho_2[][2],int tam_S, int qtd_par) { // funcao para verificar se eh reflexiva, return 0 = falso, return 1 = verdade. + int i, j, k, cont = 0; // cont verifica se encontrou o par de x = (x,x) + int refl = 0; // se refl = 3 eh porque os 3 elementos de S existe o (x,x) em rho + + for (i = 0; i < tam_S; i++) //For 1 - para verificar cada elemento do conjunto S. tam_S me manda a quantidade de elementos + { + cont = 0; //zerar o cont para verificar o proximo elemento em S + for (j = 0; j < qtd_par; j++) // For 2 - Como eh uma matriz, este for varia a linha, qtd_par sabe quantos pares existe + { + for (k = 0; k < 2; k++) //For 3 - este for varia a coluna da matriz, + { + + if (conjS_2[i] == rho_2[j][k]) { //verifica se x é = (x,); + k++; + if (conjS_2[i] == rho_2[j][k]) { //verifica se x é = ( ,x) + cont++; // x = (x,x) + + } else { // caso x = (x, ), mas falso em x = ( , x) então já sai do For 3 + k = 2; + } + } else { // caso x = ( x, ) seja falso já sai do For 3 + k = 2; + } + + + + } + if (cont == 1) { // se cont == 1 é se existe x = (x,x) entao (refle++) e então nem verifica os outros pares(j=qtd_par) + j = qtd_par; + refl++; + } + + } + + } + if (refl == tam_S) { + return 1; + } else { + return 0; + } } -int ehSimetrica(){ + +int ehSimetrica() { // funcao para verificar se eh simetrica, return 0 = falso, return 1 = verdade. return 1; } -int ehTransitiva(){ + +int ehTransitiva() { // funcao para verificar se eh transitiva, return 0 = falso, return 1 = verdade. return 0; } -int ehAntiSimetrica(){ + +int ehAntiSimetrica() { // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. return 1; } -int ehEquivalencia(){ + +int ehEquivalencia() { // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. return 0; } - #endif +#endif diff --git a/relacoes.h b/relacoes.h index 4cb1299..a0eaabe 100644 --- a/relacoes.h +++ b/relacoes.h @@ -1,23 +1,27 @@ #ifndef _RELACOES_H #define _RELACOES_H +#define S 4 // Define o tamanho do conjunto S, ou seja, quantos elementos tem no conjunto S +#define pares 4 // Define a quantidade de pares em rho + + #include "propriedades.h" void relacao_01(){ char nome[3] = "R01"; - int conjS[3] = {1,2,3}; - int rho[3][2] = { {1,2}, {3,2}, {1,1} }; + int conjS[S] = {1,2,3,4}; // Conjunto S definido + int rho[pares][2] = { {1,1}, {3,3}, {2,2}, {3,4}}; // rho já definido - int reflexiva = 0; - int simetrica = 0; - int transitiva = 1; - int anti_simetrica = 1; - int equivalencia = 0; + int reflexiva = 0; // (Vx E S -> (x,x)E rho). 0 = falso, 1 = verdade. + int simetrica = 0; // (Vx,y E S ^ (x,y) E rho -> (y,x) E rho). 0 = falso, 1 = verdade. + int transitiva = 1; // (Vx,y,z E S ^ (x,y) E rho ^ (y,z) E rho ^ -> (x,z) E rho). 0 = falso, 1 = verdade. + int anti_simetrica = 1; // (Vx,y E S ^ (x,y) E rho ^ (y,x) E rho -> x=y). 0 = falso, 1 = verdade. + int equivalencia = 0; // Verdade se reflexiva = 1, simetrica = 1 e trasitiva = 1,senão falso. 0 = falso, 1 = verdade. printf("\n"); - if(ehReflexiva() != reflexiva){ + if(ehReflexiva(conjS, rho,S , pares) != reflexiva){ printf("ERRO: [%s] - Problema na propriedade reflexiva!\n", nome); } if(ehSimetrica() != simetrica){