diff --git a/tp4/lib_conjunto.c b/tp4/lib_conjunto.c index c5416dfffe5b3fa037088a4c6f387826630bf1b8..b88f1db8df951d6566ca3341c568d9d21dcc8c38 100644 --- a/tp4/lib_conjunto.c +++ b/tp4/lib_conjunto.c @@ -135,35 +135,24 @@ conjunto_t *uniao_cjt(conjunto_t *c1, conjunto_t *c2) { if ( !(uniao = cria_cjt(c1->max)) ) return NULL; - conjunto_t **menor_cjt = cardinalidade_cjt(c1) < cardinalidade_cjt(c2) ? &c1 : &c2; - conjunto_t **maior_cjt = cardinalidade_cjt(c1) > cardinalidade_cjt(c2) ? &c1 : &c2; - - /* while (c1->ptr < cardinalidade_cjt(c1) && c2->ptr < cardinalidade_cjt(c2)) { */ - /* if (c1->v[c1->ptr] == c2->v[c2->ptr]) { */ - /* insere_cjt(uniao, c1->v[c1->ptr]); */ - /* c1->ptr++; */ - /* c2->ptr++; */ - /* } else { */ - /* if (c1->v[c1->ptr] < c2->v[c2->ptr]) { */ - /* insere_cjt(uniao, c1->v[c1->ptr]); */ - /* c1->ptr++; */ - /* } else { */ - /* insere_cjt(uniao, c2->v[c2->ptr]); */ - /* c2->ptr++; */ - /* } */ - /* } */ - /* } */ - - /* TODO: arrumar isso aqui de cima ^ e apagar isso aqui de baixo v */ + inicia_iterador_cjt(c1); + inicia_iterador_cjt(c2); - int i; - for (i = 0; i < cardinalidade_cjt(*menor_cjt); i++) { - insere_cjt(uniao, c1->v[i]); - insere_cjt(uniao, c2->v[i]); + while (c1->ptr < cardinalidade_cjt(c1) && c2->ptr < cardinalidade_cjt(c2)) { + if (c1->v[c1->ptr] < c2->v[c2->ptr]) { + insere_cjt(uniao, c1->v[c1->ptr]); + c1->ptr++; + } else { + insere_cjt(uniao, c2->v[c2->ptr]); + c2->ptr++; + } } - - for (i = cardinalidade_cjt(*menor_cjt); i < cardinalidade_cjt(*maior_cjt); i++) { - insere_cjt(uniao, (*maior_cjt)->v[i]); + + conjunto_t **ainda_falta = c1->ptr == cardinalidade_cjt(c1) ? &c2 : &c1; + + int i; + for (i = (*ainda_falta)->ptr; i < cardinalidade_cjt(*ainda_falta); i++) { + insere_cjt(uniao, (*ainda_falta)->v[i]); } inicia_iterador_cjt(c1); diff --git a/tp4/tp4 b/tp4/tp4 index 0487535f0ba3e7e14013526730e2a1787577a66d..20a040c28befaad663997ebf45fbef3595571709 100755 Binary files a/tp4/tp4 and b/tp4/tp4 differ