From 525daad0f8891cae67a9db9d5faa48b317a32c94 Mon Sep 17 00:00:00 2001 From: grisotto Date: Sat, 21 Dec 2013 21:02:53 -0200 Subject: [PATCH 1/6] Adicionando comentarios MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Alguns comentarios para o código ficar fácil para todos. Comentario contendo a definição das propriedades --- main.c | 2 +- propriedades.h | 10 +++++----- relacoes.h | 14 +++++++------- 3 files changed, 13 insertions(+), 13 deletions(-) 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..ba26c73 100644 --- a/propriedades.h +++ b/propriedades.h @@ -1,19 +1,19 @@ #ifndef _PROPRIEDADES_H #define _PROPRIEDADES_H -int ehReflexiva(){ +int ehReflexiva(){ // funcao para verificar se eh reflexiva, return 0 = falso, return 1 = verdade. 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; } diff --git a/relacoes.h b/relacoes.h index 4cb1299..da45c6a 100644 --- a/relacoes.h +++ b/relacoes.h @@ -6,14 +6,14 @@ 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[3] = {1,2,3}; // Conjunto S definido + int rho[3][2] = { {1,2}, {3,2}, {1,1} }; // 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 falto. 0 = falso, 1 = verdade. printf("\n"); From b23715d24a605f60cf6470dc6d97e2390bc3f750 Mon Sep 17 00:00:00 2001 From: grisotto Date: Sat, 21 Dec 2013 22:14:56 -0200 Subject: [PATCH 2/6] Propriedade reflexiva MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implementada a propriedade reflexiva utilizando 3 for, mas o tamanho do conjunto S tem que está defino e de rho também. --- propriedades.h | 59 ++++++++++++++++++++++++++++++++++++++++++++------ relacoes.h | 37 ------------------------------- 2 files changed, 52 insertions(+), 44 deletions(-) delete mode 100644 relacoes.h diff --git a/propriedades.h b/propriedades.h index ba26c73..de693c5 100644 --- a/propriedades.h +++ b/propriedades.h @@ -1,20 +1,65 @@ #ifndef _PROPRIEDADES_H #define _PROPRIEDADES_H -int ehReflexiva(){ // funcao para verificar se eh reflexiva, return 0 = falso, return 1 = verdade. - return 0; +int ehReflexiva(int conjS_2[], int rho_2[][2]); // protótipo da funcao reflexiva + + +int ehReflexiva(int conjS_2[], int rho_2[][2]) { // 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 < 3; i++) //For 1 - para verificar cada elemento do conjunto S + { + cont = 0; //zerar o cont para verificar o proximo elemento em S + for (j = 0; j < 3; j++) // For 2 - Como eh uma matriz, este for varia a linha + { + 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 falto 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=3) + j = 3; + refl++; + } + + } + + } + if (refl == 3) { + return 1; + } else { + return 0; + } } -int ehSimetrica(){ // funcao para verificar se eh simetrica, return 0 = falso, return 1 = verdade. + +int ehSimetrica() { // funcao para verificar se eh simetrica, return 0 = falso, return 1 = verdade. return 1; } -int ehTransitiva(){ // funcao para verificar se eh transitiva, return 0 = falso, return 1 = verdade. + +int ehTransitiva() { // funcao para verificar se eh transitiva, return 0 = falso, return 1 = verdade. return 0; } -int ehAntiSimetrica(){ // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. + +int ehAntiSimetrica() { // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. return 1; } -int ehEquivalencia(){ // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. + +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 deleted file mode 100644 index da45c6a..0000000 --- a/relacoes.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _RELACOES_H -#define _RELACOES_H - -#include "propriedades.h" - -void relacao_01(){ - - char nome[3] = "R01"; - int conjS[3] = {1,2,3}; // Conjunto S definido - int rho[3][2] = { {1,2}, {3,2}, {1,1} }; // rho já definido - - 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 falto. 0 = falso, 1 = verdade. - - printf("\n"); - - if(ehReflexiva() != reflexiva){ - printf("ERRO: [%s] - Problema na propriedade reflexiva!\n", nome); - } - if(ehSimetrica() != simetrica){ - printf("ERRO: [%s] - Problema na propriedade simetrica!\n", nome); - } - if(ehTransitiva() != transitiva){ - printf("ERRO: [%s] - Problema na propriedade transitiva!\n", nome); - } - if(ehAntiSimetrica() != anti_simetrica){ - printf("ERRO: [%s] - Problema na propriedade anti-simetrica!\n", nome); - } - if(ehEquivalencia() != equivalencia){ - printf("ERRO: [%s] - Problema na verifiacao da equivalencia!\n", nome); - } -} - -#endif From 4736eb27c58165b664aed38101c4d43c7346d543 Mon Sep 17 00:00:00 2001 From: grisotto Date: Sat, 21 Dec 2013 22:59:21 -0200 Subject: [PATCH 3/6] Reflexiva melhorada MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agora só alterar a variavel "S" para a quantidade de elementos no conjunto S e a variavel "pares" para a quantidade de pares. Mas ainda não é caso generico para qualquer conjunto ou rho. --- propriedades.h | 10 +++++----- relacoes.h | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 relacoes.h diff --git a/propriedades.h b/propriedades.h index de693c5..62bbb94 100644 --- a/propriedades.h +++ b/propriedades.h @@ -1,17 +1,17 @@ #ifndef _PROPRIEDADES_H #define _PROPRIEDADES_H -int ehReflexiva(int conjS_2[], int rho_2[][2]); // protótipo da funcao reflexiva +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]) { // funcao para verificar se eh reflexiva, return 0 = falso, return 1 = verdade. +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 < 3; i++) //For 1 - para verificar cada elemento do conjunto S + for (i = 0; i < tam_S; i++) //For 1 - para verificar cada elemento do conjunto S, sabendo o tamanho de S { cont = 0; //zerar o cont para verificar o proximo elemento em S - for (j = 0; j < 3; j++) // For 2 - Como eh uma matriz, este for varia a linha + for (j = 0; j < qtd_par; j++) // For 2 - Como eh uma matriz, este for varia a linha, sabendo a quantidade de pares { for (k = 0; k < 2; k++) //For 3 - este for varia a coluna da matriz, { @@ -39,7 +39,7 @@ int ehReflexiva(int conjS_2[], int rho_2[][2]) { // funcao para verificar se eh } } - if (refl == 3) { + if (refl == tam_S) { return 1; } else { return 0; diff --git a/relacoes.h b/relacoes.h new file mode 100644 index 0000000..97fd918 --- /dev/null +++ b/relacoes.h @@ -0,0 +1,41 @@ +#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[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; // (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 falto. 0 = falso, 1 = verdade. + + printf("\n"); + + if(ehReflexiva(conjS, rho,S , pares) != reflexiva){ + printf("ERRO: [%s] - Problema na propriedade reflexiva!\n", nome); + } + if(ehSimetrica() != simetrica){ + printf("ERRO: [%s] - Problema na propriedade simetrica!\n", nome); + } + if(ehTransitiva() != transitiva){ + printf("ERRO: [%s] - Problema na propriedade transitiva!\n", nome); + } + if(ehAntiSimetrica() != anti_simetrica){ + printf("ERRO: [%s] - Problema na propriedade anti-simetrica!\n", nome); + } + if(ehEquivalencia() != equivalencia){ + printf("ERRO: [%s] - Problema na verifiacao da equivalencia!\n", nome); + } +} + +#endif From 4213b656460a64990d766aaed250cceb145c802f Mon Sep 17 00:00:00 2001 From: grisotto Date: Thu, 26 Dec 2013 12:55:45 -0200 Subject: [PATCH 4/6] Reflexiva melhorada 2 Melhorando comentarios e um erro. --- propriedades.h | 10 +++++----- relacoes.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/propriedades.h b/propriedades.h index 62bbb94..846ec2f 100644 --- a/propriedades.h +++ b/propriedades.h @@ -8,10 +8,10 @@ int ehReflexiva(int conjS_2[], int rho_2[][2],int tam_S, int qtd_par) { // funca 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, sabendo o tamanho de S + 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, sabendo a quantidade de pares + 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, { @@ -24,15 +24,15 @@ int ehReflexiva(int conjS_2[], int rho_2[][2],int tam_S, int qtd_par) { // funca } else { // caso x = (x, ), mas falso em x = ( , x) então já sai do For 3 k = 2; } - } else { // caso x = ( x, ) seja falto já sai do For 3 + } 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=3) - j = 3; + 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++; } diff --git a/relacoes.h b/relacoes.h index 97fd918..a0eaabe 100644 --- a/relacoes.h +++ b/relacoes.h @@ -17,7 +17,7 @@ void relacao_01(){ 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 falto. 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"); From 7e373da1713e6683284e3a044f03347a08048db8 Mon Sep 17 00:00:00 2001 From: grisotto Date: Sun, 29 Dec 2013 21:10:21 -0200 Subject: [PATCH 5/6] Prorpiedade simetrica Implementada a propriedade simetrica --- propriedades.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++-- relacoes.h | 7 +++---- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/propriedades.h b/propriedades.h index 846ec2f..ee906e6 100644 --- a/propriedades.h +++ b/propriedades.h @@ -2,6 +2,7 @@ #define _PROPRIEDADES_H int ehReflexiva(int conjS_2[], int rho_2[][2],int tam_S, int qtd_par); // protótipo da funcao reflexiva +int ehSimetrica(int rho_2[][2], int qtd_par); // protótipo da funcao simetrica 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. @@ -46,8 +47,55 @@ int ehReflexiva(int conjS_2[], int rho_2[][2],int tam_S, int qtd_par) { // funca } } -int ehSimetrica() { // funcao para verificar se eh simetrica, return 0 = falso, return 1 = verdade. - return 1; +int ehSimetrica(int rho_2[][2], int qtd_par) { // funcao para verificar se eh simetrica, return 0 = falso, return 1 = verdade. + int i,j, k,y;//variaveis para os 4 for. + int cont=0; // O "cont" conta quantos pares que existe simetrico existe e tem que ser igual a qtd_par + + for (i = 0; i < qtd_par; i++) //For 1 = eh a linha da matriz ou o (i, ) dos pares + { + for (j = 0; j < 2; j++) //For 2 = eh a coluna da matriz ou o ( ,j) dos pares + { + if(rho_2[i][j] == rho_2[i][j+1])// Pares iguais como (1,1) já são simetricos, assim já pula. + { + cont++; // Par eh simetrico + } + else //Senão foram iguais nos verificamos com os outros pares + { + for(k=0; k < qtd_par; k++)//For 3 = verifica o par ([i,j],[i,j+1]) procurando o ([k,y+1],[k,y]) + { + for(y=0; y < 2; y++) + { + if(rho_2[k][y] != rho_2[k][y+1])// Verifica se o par sao numeros diferentes, se for igual nao precisa verificar, pois já verificamos todos iguais antes + { + if((rho_2[i][j+1] == rho_2[k][y]) && (rho_2[i][j] == rho_2[k][y+1])) //Faco esta verificacao ([i,j],[i,j+1]) == ([k,y+1],[k,y]) + { + cont++; // Par eh simetrico + k= qtd_par; // Para de procurar, pois ja encontrou o simetrico + } + + } + + y=2; + + } + } + + } + j=2; + + + } + + } + if(cont == qtd_par) // Todos os pares sao simetricos? + { + return 1; //Sim + } + else + { + return 0; //Nao + } + } int ehTransitiva() { // funcao para verificar se eh transitiva, return 0 = falso, return 1 = verdade. diff --git a/relacoes.h b/relacoes.h index a0eaabe..3e7a648 100644 --- a/relacoes.h +++ b/relacoes.h @@ -1,8 +1,7 @@ #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 - +#define pares 5 // Define a quantidade de pares em rho #include "propriedades.h" @@ -11,7 +10,7 @@ void relacao_01(){ char nome[3] = "R01"; 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 rho[pares][2] = { {3,4}, {3,3}, {2,2}, {1,1},{3,1}}; // rho já definido 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. @@ -24,7 +23,7 @@ void relacao_01(){ if(ehReflexiva(conjS, rho,S , pares) != reflexiva){ printf("ERRO: [%s] - Problema na propriedade reflexiva!\n", nome); } - if(ehSimetrica() != simetrica){ + if(ehSimetrica(rho, pares) != simetrica){ printf("ERRO: [%s] - Problema na propriedade simetrica!\n", nome); } if(ehTransitiva() != transitiva){ From d9242e058a01c7859a2c050578b1c0bee159b090 Mon Sep 17 00:00:00 2001 From: grisotto Date: Sun, 29 Dec 2013 21:41:41 -0200 Subject: [PATCH 6/6] Propriedade anti-simetrica Implementando a propriedade anti-simetrica --- propriedades.h | 126 +++++++++++++++++++++++++++++++++---------------- relacoes.h | 2 +- 2 files changed, 86 insertions(+), 42 deletions(-) diff --git a/propriedades.h b/propriedades.h index ee906e6..c527309 100644 --- a/propriedades.h +++ b/propriedades.h @@ -1,14 +1,14 @@ #ifndef _PROPRIEDADES_H #define _PROPRIEDADES_H -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); // protótipo da funcao reflexiva int ehSimetrica(int rho_2[][2], int qtd_par); // protótipo da funcao simetrica +int ehAntiSimetrica(int rho_2[][2], int qtd_par); // // protótipo da funcao anti-simetrica - -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 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 @@ -48,62 +48,106 @@ int ehReflexiva(int conjS_2[], int rho_2[][2],int tam_S, int qtd_par) { // funca } int ehSimetrica(int rho_2[][2], int qtd_par) { // funcao para verificar se eh simetrica, return 0 = falso, return 1 = verdade. - int i,j, k,y;//variaveis para os 4 for. - int cont=0; // O "cont" conta quantos pares que existe simetrico existe e tem que ser igual a qtd_par - - for (i = 0; i < qtd_par; i++) //For 1 = eh a linha da matriz ou o (i, ) dos pares - { - for (j = 0; j < 2; j++) //For 2 = eh a coluna da matriz ou o ( ,j) dos pares + int i, j, k, y; //variaveis para os 4 for. + int cont = 0; // O "cont" conta quantos pares que existe simetrico existe e tem que ser igual a qtd_par + + for (i = 0; i < qtd_par; i++) //For 1 = eh a linha da matriz ou o (i, ) dos pares + { + for (j = 0; j < 2; j++) //For 2 = eh a coluna da matriz ou o ( ,j) dos pares + { + if (rho_2[i][j] == rho_2[i][j + 1])// Pares iguais como (1,1) já são simetricos, assim já pula. + { + cont++; // Par eh simetrico + } else //Senão foram iguais nos verificamos com os outros pares + { + for (k = 0; k < qtd_par; k++)//For 3 = verifica o par ([i,j],[i,j+1]) procurando o ([k,y+1],[k,y]) { - if(rho_2[i][j] == rho_2[i][j+1])// Pares iguais como (1,1) já são simetricos, assim já pula. - { - cont++; // Par eh simetrico - } - else //Senão foram iguais nos verificamos com os outros pares - { - for(k=0; k < qtd_par; k++)//For 3 = verifica o par ([i,j],[i,j+1]) procurando o ([k,y+1],[k,y]) + for (y = 0; y < 2; y++) { + if (rho_2[k][y] != rho_2[k][y + 1])// Verifica se o par sao numeros diferentes, se for igual nao precisa verificar, pois já verificamos todos iguais antes { - for(y=0; y < 2; y++) + if ((rho_2[i][j + 1] == rho_2[k][y]) && (rho_2[i][j] == rho_2[k][y + 1])) //Faco esta verificacao ([i,j],[i,j+1]) == ([k,y+1],[k,y]) { - if(rho_2[k][y] != rho_2[k][y+1])// Verifica se o par sao numeros diferentes, se for igual nao precisa verificar, pois já verificamos todos iguais antes - { - if((rho_2[i][j+1] == rho_2[k][y]) && (rho_2[i][j] == rho_2[k][y+1])) //Faco esta verificacao ([i,j],[i,j+1]) == ([k,y+1],[k,y]) - { - cont++; // Par eh simetrico - k= qtd_par; // Para de procurar, pois ja encontrou o simetrico - } - - } - - y=2; - + cont++; // Par eh simetrico + k = qtd_par; // Para de procurar, pois ja encontrou o simetrico } + } - - } - j=2; + y = 2; - } + } + } } - if(cont == qtd_par) // Todos os pares sao simetricos? - { - return 1; //Sim + j = 2; + + + } + } - else + if (cont == qtd_par) // Todos os pares sao simetricos? { + return 1; //Sim + } else { return 0; //Nao } - + } int ehTransitiva() { // funcao para verificar se eh transitiva, return 0 = falso, return 1 = verdade. return 0; } -int ehAntiSimetrica() { // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. - return 1; +int ehAntiSimetrica(int rho_2[][2], int qtd_par) { // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. + int i, j, k, y; //variaveis para os 4 for. + int cont = 0; // O "cont" conta quantos pares que sao anti-simetrico existe e tem que ser igual a qtd_par + + for (i = 0; i < qtd_par; i++) //For 1 = eh a linha da matriz ou o (i, ) dos pares + { + for (j = 0; j < 2; j++) //For 2 = eh a coluna da matriz ou o ( ,j) dos pares + { + if (rho_2[i][j] == rho_2[i][j + 1])// Pares iguais como (1,1) já são anti-simetricos, assim já pula. + { + cont++; // o par eh anti-simetrico + } else //Senão foram iguais nos verificamos com os outros pares + { + for (k = 0; k < qtd_par; k++)//For 3 = verifica o par ([i,j],[i,j+1]) procurando o ([k,y+1],[k,y]) + { + for (y = 0; y < 2; y++) { + if (rho_2[k][y] != rho_2[k][y + 1])// Verifica se o par sao numeros diferentes, se for igual nao precisa verificar, pois já verificamos todos iguais antes + { + if ((rho_2[i][j + 1] == rho_2[k][y]) && (rho_2[i][j] == rho_2[k][y + 1])) //Faco esta verificacao ([i,j],[i,j+1]) == ([k,y+1],[k,y]) + { + return 0; // Cai aqui quando encontra o par (3,4) e encontra o par (4,3) tambem e eles nao sao iguals + + } else // nao encontrou o inverso, assim nao importa, este par eh anti-simetrico + { + cont++; // o par eh anti-simetrico + k = qtd_par; // Para de procurar + } + + } + + y = 2; + + } + } + + } + j = 2; + + + } + + } + + if (cont == qtd_par) // Todos os pares sao anti-simetricos? + { + return 1; //Sim + } else { + return 0; //Nao + } + } int ehEquivalencia() { // funcao para verificar se eh anti-simetrica, return 0 = falso, return 1 = verdade. diff --git a/relacoes.h b/relacoes.h index 3e7a648..394e999 100644 --- a/relacoes.h +++ b/relacoes.h @@ -29,7 +29,7 @@ void relacao_01(){ if(ehTransitiva() != transitiva){ printf("ERRO: [%s] - Problema na propriedade transitiva!\n", nome); } - if(ehAntiSimetrica() != anti_simetrica){ + if(ehAntiSimetrica(rho, pares) != anti_simetrica){ printf("ERRO: [%s] - Problema na propriedade anti-simetrica!\n", nome); } if(ehEquivalencia() != equivalencia){