/************************************************************** #Programa#: #testvetor.c# #Autor#: #Alexandre Falcão# #Data#: #27/07/2001# #Descrição#: #Testa as operações sobre a estrutura Vetor.# #Uso#: #testvetor # #Parâmetros#: #entrada#: #arq.tes#: #Arquivo de teste.# #saída#: #arq.res#: #Arquivo com os resultados do teste.# #Modificação#: #data#: #99/99/9999# #autor#: #Alexandre Falcão# #descrição#: #inexistente# **************************************************************/ #include "testvetor.h" /* Funções que não estão na libdados */ /* Ler seqüência do arquivo de entrada. Assume arquivo aberto e com a sintaxe correta. */ Vetor *LerVetor(FILE *ent) { int i,n; Vetor *v; fscanf(ent,"%d",&n); v = vetCria(n); for (i=0; i < v->n; i++) fscanf(ent,"%d",&v->info[i]); return(v); } /* Grava seqüência no arquivo de saída. Assume arquivo aberto. */ void GravaVetor(FILE *sai, Vetor *v) { int i; for (i=0; i < v->n; i++) fprintf(sai,"%d ",v->info[i]); fprintf(sai,"\n"); } int main(int argc, char **argv) { FILE *ent, *sai; /* Arquivos de entrada e saída */ Vetor *v[3]={NULL,NULL,NULL}; /* Três vetores a serem manipulados */ char acao[10]; /* Acao a ser tomada conforme indicado na entrada */ int i; /* variável auxiliar */ /* ------------------------------------------------------------ VÁLIDO APENAS PARA LINUX Declarações 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! ------------------------------------------------------------ */ //void *lixo = malloc(1); /* truque: variável auxiliar */ //struct mallinfo info; //int MemDinInicial, MemDinFinal; //free(lixo); /* truque */ //info = mallinfo(); //MemDinInicial = info.uordblks; /* ------------------------------------------------------- */ /* Verifica uso do programa */ if (argc != 3) { fprintf(stderr,"Uso: %s \n",argv[0]); fprintf(stderr,"arq.tes: arquivo de teste\n"); fprintf(stderr,"arq.tes: arquivo com os resultados do teste\n"); exit(-1); } /* Abre arquivos */ if (!(ent = fopen(argv[1],"r"))){ fprintf(stderr,"Não consigo abrir arquivo %s\n",argv[1]); exit(-1); } if (!(sai = fopen(argv[2],"w"))){ fprintf(stderr,"Não consigo abrir arquivo %s\n",argv[2]); exit(-1); } /* Executa o teste */ fscanf(ent,"%s",acao); while(strcmp(acao,"t")!=0) { switch(*acao) { case 'l': /* Ler vetor */ fscanf(ent,"%d",&i); if (v[i] != NULL) vetDestroi(v[i]); v[i] = LerVetor(ent); break; case 'g': /* Grava vetor */ fscanf(ent,"%d",&i); GravaVetor(sai,v[i]); break; case 'M': /* Calcula valor máximo no vetor indicado no arquivo de entrada e grava no arquivo de saída */ fscanf(ent,"%d",&i); fprintf(sai,"%d\n",vetValorMaximo(v[i])); break; case 'm': /* Calcula valor mínimo no vetor indicado no arquivo de entrada e grava no arquivo de saída */ break; case 'u': /* Calcula valor médio no vetor indicado no arquivo e grava no arquivo de saída */ break; case 'v': /* Calcula variância no vetor indicado no arquivo e grava no arquivo de saída */ break; case 'f': /* Calcula a freqüência dos valores no vetor indicado no arquivo e grava no arquivo de saída */ break; case 'F': /* Calcula a freqüência acumulada dos valores no vetor indicado no arquivo e grava no arquivo de saída */ break; case 'o': /* Ordena o vetor indicado no arquivo de entrada e grava no arquivo de saída o vetor ordenado. */ break; case 'i': /* Intercala os vetores UM e DOIS gerando o vetor TRES. Assume que UM e DOIS já foram lidos. Grava no arquivo de saída o vetor TRES. */ break; case 'b': /* Busca binária no vetor indicado no arquivo de entrada o valor também indicado no arquivo de entrada. Grava resultado da busca (Acho ou Não Achou) no arquivo de saída. */ break; default: fprintf(stderr,"Ação %s inválida\n",acao); exit(-1); } fscanf(ent,"%s",acao); } for (i=UM; i <= TRES; i++) if (v[i]!=NULL) vetDestroi(v[i]); /* Fecha arquivos */ fclose(ent); fclose(sai); /* ------------------------------------------------------------ Verificação 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; } /* testvetor */ /* author: Gustavo Sverzut Barbieri (http://www.gustavobarbieri.com.br) */