Exemple #1
0
//Subtrai um conjunto de outro.
conjunto * subtrair(conjunto * ca, conjunto * cb) {
	conjunto * c = NULL;
	
	//clona a lista ca para poder deletar os elementos sem perder a lista anterior.
	c = somar(ca, NULL);
	
	while (cb != NULL)	{	//remove os elementos de cb em ca.
		c = remover_elemento(c, cb->numero);
		cb = cb->prox;
	}
	
	return c;
}
Exemple #2
0
//Realiza a intersecao de dois conjunto em um novo.
conjunto * intersec(conjunto * ca, conjunto * cb) {
    
	//A ∩ B = A - (A - B)
	
	conjunto * intersecao = NULL;
	conjunto * temp = NULL;	//lista temporária para poder realizar o cálculo.
	
	temp = subtrair(ca, cb);
	intersecao = subtrair(ca, temp);
	
	while(temp != NULL){	//limpa a lista temporária
		temp = remover_elemento (temp, temp->numero);
	}
	
    return intersecao;
}
Exemple #3
0
//Realiza a uniao de dois conjuntos em um novo.
conjunto * unir(conjunto * ca, conjunto * cb) {
	
	// A U B = (A - B) + B
	
	conjunto * uniao = NULL;
	conjunto * temp = NULL;	//lista temporária para poder realizar o cálculo.
	
	temp = subtrair(ca, cb);
	uniao = somar(temp, cb);
	
	/*
	*Com o tratamento feito pela função inserir a poderiamos usar apenas a seguinte linha:
	*
	*uniao = somar (ca, cb);
	*poém qualquer alteração em inserir iria danificar a função, por isso opitei pela fórmula da teoria dos conjuntos. 
	*/
	
	while (temp != NULL) {	//limpa a lista temporária
		temp = remover_elemento(temp, temp->numero);
	}
	
    return uniao;
}
Exemple #4
0
int main() {
    struct conjunto* C[10];
    int i;
    for( i = 0; i < 10; ++i )
        C[i] = criar_conjunto(); //cria os 10 conjuntos vazios
    //ou:
    //C[i] = NULL
    for( i = 0; i < 10; ++i )
        inicia_lista(C[i]);
    conjunto* c;
    char op;
    int c1,c2,c3;
    while( 1 ) {
        scanf("%c", &op);
        switch( op ) {
        case 'A':
            scanf("%d %d", &c1, &c2);
            inserir_elemento(C[c1-1],c2);
            break;
        case 'R':
            scanf("%d %d", &c1, &c2);
            remover_elemento(C[c1-1],c2);
            break;
        case 'L':
            scanf("%d", &c1);
            listar_elementos(C[c1-1]);
            break;
        case 'F':
            scanf("%d", &c1);
            deletar_conjunto(C[c1-1]);
            C[c1-1] = criar_conjunto();
            inicia_lista(C[c1-1]);
            break;
        case 'I':
            scanf("%d %d %d", &c1, &c2, &c3);
            c = intersecao(C[c1-1],C[c2-1]);
            deletar_conjunto(C[c3-1]);
            C[c3-1] = c;
            break;
        case 'U':
            scanf("%d %d %d", &c1, &c2, &c3);
            c = uniao(C[c1-1],C[c2-1]);
            deletar_conjunto(C[c3-1]);
            C[c3-1] = c;
            break;
        case 'P':
            scanf("%d %d", &c1, &c2);
            if(pertinencia(C[c1-1],c2))
                printf("S\n");
            else
                printf("N\n");
            break;
        case 'D':
            scanf("%d %d %d", &c1, &c2, &c3);
            c = diferenca(C[c1-1],C[c2-1]);
            deletar_conjunto(C[c3-1]);
            C[c3-1] = c;
            break;
        case 'C':
            scanf("%d %d", &c1, &c2);
            if(subconjunto(C[c1-1],C[c2-1]))
                printf("S\n");
            else
                printf("N\n");
            break;
        case '=':
            scanf("%d %d", &c1, &c2);
            if(igualdade(C[c1-1],C[c2-1]))
                printf("S\n");
            else
                printf("N\n");
            break;
        case '#':
            scanf("%d", &c1 );
            printf("%d\n", cardinalidade( C[c1-1]) );
            break;
        case 'X':
            for( i = 0; i < 10; ++i )
                deletar_conjunto(C[i]);
            bapply(bprint); //não modifique esta linha
            return 0;
        }

    }

}