From 6caa27ce1e6aaec39b17fad38d9c03129e1c68eb Mon Sep 17 00:00:00 2001
From: Pedro Folloni Pesserl <fpesserl7@gmail.com>
Date: Sat, 26 Nov 2022 02:03:39 -0300
Subject: [PATCH] lib is functional

---
 tp4/lib_conjunto.c   | 186 ++++++++++++++++++++++++++++++++++---------
 tp4/makefile         |   2 +-
 tp4/testa_conjunto   | Bin 0 -> 34208 bytes
 tp4/testa_conjunto.c |   2 +
 4 files changed, 151 insertions(+), 39 deletions(-)
 create mode 100755 tp4/testa_conjunto

diff --git a/tp4/lib_conjunto.c b/tp4/lib_conjunto.c
index 574829a..3ddab09 100644
--- a/tp4/lib_conjunto.c
+++ b/tp4/lib_conjunto.c
@@ -1,27 +1,25 @@
 #include <stdio.h>
-#include <stdio.h>
+#include <stdlib.h>
 #include "lib_conjunto.h"
 
-/* retorna a posicao de um elemento em um conjunto.
+/* retorna a posicao de um elemento em um conjunto ([0..card-1]).
  * como um conjunto nao necessariamente eh ordenado, eh uma busca linear.
  * se o elemento nao esta no conjunto, retorna -1. */
 int busca_cjt(conjunto_t *c, int elemento) {
-	int pos = -1;
-	int i;
-	for (i = 0; i < c->card; i++) {
-		if (c->v[i] == elemento) {
-			pos = i;
-			break;
-		}
-	}
-	return pos;
+	int pos = 0;
+	while (pos < c->card && c->v[pos] != elemento)
+		pos++;
+
+	return pos >= c->card ? -1 : pos;
 }
 
 conjunto_t *cria_cjt(int max) {
 	conjunto_t *c;
+	if ( !(c = malloc(sizeof(conjunto_t))) )
+		return NULL;
 	c->max = max;
 	c->card = 0;
-	c->ptr;
+	c->ptr = 0;
 	if ( !(c->v = malloc(sizeof(int) * max)) )
 		return NULL;
 	return c;
@@ -31,6 +29,7 @@ conjunto_t *destroi_cjt(conjunto_t *c) {
 	c->card = 0;
 	free(c->v);
 	c->v = NULL;
+	free(c);
 	return NULL;
 }
 
@@ -49,7 +48,7 @@ int insere_cjt(conjunto_t *c, int elemento) {
 	if (pertence_cjt(c, elemento))
 		return 1;
 
-	c->v[card] = elemento;
+	c->v[c->card] = elemento;
 	c->card++;
 	return 1;
 }
@@ -85,49 +84,160 @@ int sao_iguais_cjt(conjunto_t *c1, conjunto_t *c2) {
 	return c1->card == c2->card && contido_cjt(c1, c2);
 }
 
-/* conjunto_t *diferenca_cjt(conjunto_t *c1, conjunto_t *c2) { */
-	
-/* } */
+conjunto_t *diferenca_cjt(conjunto_t *c1, conjunto_t *c2) {
+	conjunto_t *dif;
+	if ( !(dif = cria_cjt(c1->max)) )
+		return NULL;
 
-/* conjunto_t *interseccao_cjt(conjunto_t *c1, conjunto_t *c2) { */
-	
-/* } */
+	int i;
+	for (i = 0; i < c1->card; i++) {
+		if (!(pertence_cjt(c2, c1->v[i])))
+			insere_cjt(dif, c1->v[i]);
+	}
+
+	return dif;
+}
 
-/* conjunto_t *uniao_cjt(conjunto_t *c1, conjunto_t *c2) { */
+conjunto_t *interseccao_cjt(conjunto_t *c1, conjunto_t *c2) {
+	conjunto_t *inter;
+	if ( !(inter = cria_cjt(c1->max)) )
+		return NULL;
 	
-/* } */
+	int i;
+	for (i = 0; i < c1->card; i++) {
+		if (pertence_cjt(c2, c1->v[i]))
+			insere_cjt(inter, c1->v[i]);
+	}
+
+	return inter;
+}
+
+conjunto_t *uniao_cjt(conjunto_t *c1, conjunto_t *c2) {
+	conjunto_t *uniao;
+	if ( !(uniao = cria_cjt(c1->max)) )
+		return NULL;
+
+	/* para nao ter que alocar um conjunto novo, a funcao usa ponteiros para
+	 * ponteiro de conjunto */
+	conjunto_t **menor_cjt = c1->card < c2->card ? &c1 : &c2;
+	conjunto_t **maior_cjt = c1->card > c2->card ? &c1 : &c2;
+
+	int i;
+	for (i = 0; i < (*menor_cjt)->card; i++) {
+		insere_cjt(uniao, c1->v[i]);
+		insere_cjt(uniao, c2->v[i]);
+	}
+
+	for (; i < (*maior_cjt)->card; i++)
+		insere_cjt(uniao, (*maior_cjt)->v[i]);
+
+	return uniao;
+}
 
 conjunto_t *copia_cjt(conjunto_t *c) {
 	conjunto_t *copia;
-
 	if ( !(copia = cria_cjt(c->max)) )
 		return NULL;
-	copia->card = c->card;
 
 	int i;
-	for (i = 0; i < copia->card; i++) {
-		copia->v[i] = c->v[i];
+	for (i = 0; i < c->card; i++) {
+		insere_cjt(copia, c->v[i]);
 	}
 
 	return copia;
 }
 
-/* conjunto_t *cria_subcjt_cjt(conjunto_t *c, int n) { */
-	
-/* } */
+conjunto_t *cria_subcjt_cjt(conjunto_t *c, int n) {
+	if (n >= c->card)
+		return copia_cjt(c);
 
-/* void imprime_cjt(conjunto_t *c) { */
-	
-/* } */
+	conjunto_t *sub;
+	if ( !(sub = cria_cjt(c->max)) )
+		return NULL;
 
-/* void inicia_iterador_cjt(conjunto_t *c) { */
-	
-/* } */
+	conjunto_t *disponiveis;
+	if ( !(disponiveis = copia_cjt(c)) )
+		return NULL;
 
-/* int incrementa_iterador_cjt(conjunto_t *c, int *ret_iterador) { */
+	int i;
+	int aleat;
+	for (i = 0; i < n; i++) {
+		aleat = rand() % disponiveis->card;
+		insere_cjt(sub, disponiveis->v[aleat]);
+		retira_cjt(disponiveis, disponiveis->v[aleat]);
+	}
 	
-/* } */
+	destroi_cjt(disponiveis);
+	return sub;
+}
+
+/* funcao auxiliar para a ordenacao */
+void troca(int *a, int *b) {
+	int temp = *a;
+	*a = *b;
+	*b = temp;
+}
 
-/* int retira_um_elemento_cjt(conjunto_t *c) { */
+/* implementacao do bubble sort */
+conjunto_t *ordena_cjt(conjunto_t *c) {
+	conjunto_t *ord;
+	if ( !(ord = copia_cjt(c)) )
+		return NULL;
+
+	int tam = ord->card;
+	int trocou = 1;
+	int i;
+	while (trocou) { 	/* trocou eh uma flag para sair do loop quando ja */
+		trocou = 0;		/* estiver ordenado (nao trocou = ordenado)       */
+		for (i = 0; i < tam-1; i++) {
+			if (ord->v[i+1] < ord->v[i]) {
+				troca(&ord->v[i+1], &ord->v[i]);
+				trocou = 1;
+			}
+		}
+		tam--;
+	}
+	return ord;
+}
+
+void imprime_cjt(conjunto_t *c) {
+	if (vazio_cjt(c)) {
+		printf("Conjunto vazio.\n");
+		return;
+	}
+
+	conjunto_t *ord;
+	if ( !(ord = ordena_cjt(c)) ) {
+		printf("Erro na alocacao do conjunto.");
+		return;
+	}
+
+	int i;
+	for (i = 0; i < ord->card-1; i++)
+		printf("%d ", ord->v[i]);
+	printf("%d\n", ord->v[ord->card-1]);
 	
-/* } */
+	destroi_cjt(ord);
+}
+
+void inicia_iterador_cjt(conjunto_t *c) {
+	c->ptr = 0;
+}
+
+int incrementa_iterador_cjt(conjunto_t *c, int *ret_iterador) {
+	*ret_iterador = c->v[c->ptr];
+	c->ptr++;
+	if (c->ptr > c->card)
+		return 0;
+	return 1;
+}
+
+int retira_um_elemento_cjt(conjunto_t *c) {
+	int aleat = rand() % c->card;
+	int retirar = c->v[aleat];
+	int i;
+	for (i = aleat; i < c->card-1; i++)
+		c->v[i] = c->v[i + 1];
+	c->card--;
+	return retirar;
+}
diff --git a/tp4/makefile b/tp4/makefile
index 74de621..91f8a8f 100644
--- a/tp4/makefile
+++ b/tp4/makefile
@@ -15,7 +15,7 @@ lib_conjunto.o: lib_conjunto.c
 	$(CC) -c $(CFLAGS) lib_conjunto.c
 
 tp4.o: tp4.c
-	$(CC) -c $(CFLAGS) testa_conjunto.c
+	$(CC) -c $(CFLAGS) tp4.c
 
 clean:
 	rm -f $(objects)
diff --git a/tp4/testa_conjunto b/tp4/testa_conjunto
new file mode 100755
index 0000000000000000000000000000000000000000..cc0ddb9a2ce9cbe0daabadb1e2ea8b52a54e8877
GIT binary patch
literal 34208
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
aHlk`*@zUi!8w)3``WwM<n@zx0)&3J%5X%ez

literal 0
HcmV?d00001

diff --git a/tp4/testa_conjunto.c b/tp4/testa_conjunto.c
index 0f8c883..6efb260 100644
--- a/tp4/testa_conjunto.c
+++ b/tp4/testa_conjunto.c
@@ -7,10 +7,12 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <time.h>
 #include "lib_conjunto.h"
 #define TAM 21
 
 int main (void) {
+	srand(time(0));
     conjunto_t *a, *b, *u, *i, *d, *d1, *copia, *sub;
     int k, ex;
 
-- 
GitLab