Solução: Problema da moda - dificuldade 5 (Lúcio Ribeiro)
From AdonaiMedrado.Pro.Br
// Lúcio Ribeiro #include <stdio.h> #include <stdlib.h> #include <string.h> void erro(char **vet,char *palavra, int i, int caso) { while(i) { i--; free(*(vet+i)); } free(vet); if(caso) exit(caso); } int comparar(const void *a ,const void *b) { return strcmp( *(char**)a, *(char**)b ); } int main() { char **vet=NULL; char *palavra=NULL; int k,linha=0,moda=1,cont=1, i,j; FILE *arquivo; arquivo = fopen("dif5.txt","r"); do /*ler e alocar*/ { if(fscanf(arquivo,"%d",&k)==EOF) break; palavra = (char *) realloc(palavra, sizeof(char)*(k+1)); if(palavra==NULL) erro(vet,palavra,linha,1); fscanf(arquivo,"%s",palavra); linha++; vet = (char **) realloc(vet, sizeof(char*)*linha); *(vet+linha-1) = (char*) malloc(sizeof(char)*(k+1)); if(vet==NULL||*(vet+linha-1)==NULL) erro(vet,palavra,linha,1); strcpy(*(vet+linha-1), palavra); }while(1); if(linha==1)/*importantissimo*/ { printf("%s",*vet); return 0; } qsort(vet,linha,sizeof(char**),comparar); j=1; for(i=1;i<linha;i++)/*definir moda*/ { if(!strcmp(*(vet+i),*(vet+i-1))) j++; else j=1; if(j>moda) moda=j; } for(i=1;i<linha;i++)/*imprimir*/ { if(!strcmp(*(vet+i),*(vet+i-1))) cont++; else cont=1; if(cont==moda) printf("%s\n",*(vet+i)); } erro(vet,palavra,linha,0); return 0; }