#include //tipo criado para conter todos os dados sobre os conjuntos typedef struct operandos{ int conjunto[5][10]; int inicializado[5]; int ordenado[10]; int ops[20]; int conj_temp[20]; } operandos; void menu(); void ordenar(); void ordenar_ops(); void imprimir(); void imprimir_ops(); void imprimir_cjs(); void inicializar(); void adicionar(); void tornar_vazio(); int uniao(); int intersecao(); //funcao MENU void menu(){ printf("\n********************* MENU *********************\n"); printf("[1] - Inicializar um conjunto.\n"); printf("[2] - Adicionar novos valores a um conjunto.\n"); printf("[3] - Tornar um conjunto vazio.\n"); printf("[4] - Realizar a uniao de dois conjuntos.\n"); printf("[5] - Realizar a intersecao de dois conjuntos.\n"); printf("[6] - Realizar a diferenca de dois conjuntos.\n"); printf("[7] - Imprimir um conjunto (em ordem crescente).\n"); printf("[0] - Sair do programa.\n"); printf("\nSelecione uma opcao: "); } //funcoes ORDENAR void ordenar(operandos *pont, int conj){ int temp, min; int i, j; for(i=0; i < 10; i++){ pont->ordenado[i]=pont->conjunto[conj-1][i]; } for(i=0; i < 10; i++){ min=i; for(j=i; j < 10; j++){ if(pont->ordenado[j] < pont->ordenado[min]) min=j; } temp=pont->ordenado[min]; pont->ordenado[min]=pont->ordenado[i]; pont->ordenado[i]=temp; } } void ordenar_ops(operandos *pont, int max){ int temp, min; int i, j; for(i=0; i <= max; i++){ min=i; for(j=i; j <= max; j++){ if(pont->ops[j] < pont->ops[min]) min=j; } temp=pont->ops[min]; pont->ops[min]=pont->ops[i]; pont->ops[i]=temp; } } //funcao IMPRIMIR void imprimir(operandos *pont, int conj){ int i; printf("Conjunto %d: {", conj); for(i=0; i < 10; i++){ printf(" %d ", pont->ordenado[i]); if(i >= 0 && i < 9){ printf(","); } } printf("}\n"); } void imprimir_ops(operandos *pont, int max){ int i; for(i=0; i < max; i++){ printf(" %d ", pont->ops[i]); if(i >= 0 && i < max){ printf(","); } } printf("}"); } //funcao INICIALIZAR void inicializar(operandos *pont, int conj){ int i; if(conj == 0){ for(i=0; i < 5; i++){ pont->inicializado[i]=0; printf("Conjunto %d: { }\n", (i+1)); } } if(conj != 0) pont->inicializado[conj-1]=0; printf("Conjunto %d: { }\n", conj); } //funcao ADICIONAR void adicionar(operandos *pont, int conj){ int i; pont->inicializado[conj-1]=1; printf("Adicione os valores: "); for(i=0; i < 10; i++){ scanf("%d", &pont->conjunto[conj-1][i]); } } //funcao TORNAR VAZIO void tornar_vazio(operandos *pont, int conj){ int i; if(conj == 0){ for(i=0; i < 5; i++){ pont->inicializado[i]=0; printf("Conjunto %d: { }\n", (i+1)); } } if(conj != 0){ pont->inicializado[conj-1]=0; } printf("Conjunto %d: { }\n", conj); } void imprimir_cjs(operandos *pont, int conj){ int i, j; int temp, min; if(conj == 0){ for(j=0; j < 5; j++){ if(pont->inicializado[j] == 1){ printf("Conjunto %d: {", (j+1)); for(i=0; i < 10; i++){ pont->ordenado[i]=pont->conjunto[j][i]; } for(i=0; i < 10; i++){ min=i; for(j=i; j < 10; j++){ if(pont->ordenado[j] < pont->ordenado[min]) min=j; } temp=pont->ordenado[min]; pont->ordenado[min]=pont->ordenado[i]; pont->ordenado[i]=temp; } } else{ printf("Conjunto %d: { }\n", (j+1)); } } } } else{ printf("Conjunto %d: {", conj); for(i=0; i < 10; i++){ printf(" %d ", pont->conjunto[conj-1][i]); if(i >= 0 && i < 9){ printf(","); } } printf("}"); } int main(){ operandos dados; int opcao; int temp, temp2; int i; int x, num; do{ menu(); scanf("%d", &opcao); switch(opcao){ case 0:{ printf("Voce saiu do Programa!!!"); break; } case 1:{ printf("Indique o conjunto a inicializar (0 para inicializar todos): "); scanf("%d", &temp); inicializar(&dados, temp); break; } case 2:{ printf("Indique o conjunto para atualizacao: "); scanf("%d", &temp); adicionar(&dados, temp); ordenar(&dados, temp); imprimir(&dados,temp); break; } case 3:{ printf("Indique o conjunto a esvaziar: "); scanf("%d", &temp); tornar_vazio(&dados, temp); break; } case 4:{ printf("Indique os conjuntos para uniao: "); scanf("%d %d", &temp, &temp2); printf("Conjunto Uniao: {"); break; } case 5:{ printf("Indique os conjuntos para intersecao: "); scanf("%d %d", &temp, &temp2); printf("Conjunto Intersecao: {"); break; } case 6:{ printf("Indique os conjuntos para a diferenca: "); scanf("%d %d", &temp, &temp2); printf("Conjunto Diferenca: {"); break; } case 7:{ printf("Indique o conjunto a imprimir: "); scanf("%d", &temp); imprimir_cjs(&dados, temp); break; } } } while(opcao != 0); return 0; }