/* ============================================================================== Programa principal: Laboratório: 10 (Conj. Disjuntos) Disciplina: MC202 Data: 20 / 11 /2001 =========================================================================== */ #include "cdisj.h" #include #include #include void Lelinha() { char c; do { scanf("%c", &c); } while (c !='\n'); return; } int main(){ Colecao C; int ExisteUmaColecao=0; int n, i, j; char acao, c; /* ---------------------------------------------------------------------------- Declarações e início para verificação do uso da memória dinâmica. A variável 'lixo' está sendo usada apenas para contornar um problema do funcionamento das funções da biblioteca 'malloc'. A memória por ela apontada é desalocada logo a seguir! ------------------------------------------------------------------------- */ struct mallinfo info; int MemDinInicial, MemDinFinal; void *lixo = malloc(1); free(lixo); info = mallinfo(); MemDinInicial = info.uordblks; /* ----------------------------------------------------------------------- */ do { scanf("%c",&acao); switch (acao) { case 'u': if (!ExisteUmaColecao) printf("Erro: não existe colecao para fazer uniões\n"); else{ scanf("%d %d",&i,&j); Lelinha(); printf("%d\n",Union(&C,Find(&C,i),Find(&C,j))); } break; case 'm': scanf("%d",&n); Lelinha(); if (ExisteUmaColecao) Libera(&C); printf("%d\n",Makeset(&C,n)); ExisteUmaColecao=1; break; case 'f': scanf("%d",&i); Lelinha(); printf("%d\n",Find(&C,i)); break; case 'p': if (!ExisteUmaColecao) printf("Erro: não existe colecao para imprimir\n"); else{ Lelinha(); printf("%d\n",NSets(&C)); } break; case 'l': if (!ExisteUmaColecao) printf("Erro: não existe colecao para liberar\n"); else{ Lelinha(); Libera(&C); } break; case 's': if (!ExisteUmaColecao) printf("Erro: não existe colecao para achar conjunto\n"); else{ scanf("%d",&i); Lelinha(); printf("%d\n",NElems(&C,Find(&C,i))); } break; case 't': Lelinha(); printf("\n\nFim da execução.\n\n"); break; case '#': scanf("%c", &c); while (c !='\n') { printf("%c",c); scanf("%c", &c); } printf("\n"); break; default: printf("ação %c inexistente \n",acao); Lelinha(); break; } } while (acao != 't'); /* --------------------------------------------------------------------------- */ /* Verificação final do uso da memória dinâmica */ /* --------------------------------------------------------------------------- */ info = mallinfo(); MemDinFinal = info.uordblks; if (MemDinInicial!=MemDinFinal) printf("\n\nMemória dinâmica não foi totalmente liberada (%d, %d)\n", MemDinInicial,MemDinFinal); /* --------------------------------------------------------------------------- */ return 0; } /* main */ /* author: Gustavo Sverzut Barbieri (http://www.gustavobarbieri.com.br) */