Difference between revisions of "Solução: Problema da moda - dificuldade 5 (Lúcio Ribeiro)"
From AdonaiMedrado.Pro.Br
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
<code lang="c"> | <code lang="c"> | ||
+ | |||
// Lúcio Ribeiro | // Lúcio Ribeiro | ||
#include <stdio.h> | #include <stdio.h> | ||
Line 14: | Line 15: | ||
free(vet); | free(vet); | ||
if(caso) | if(caso) | ||
− | exit( | + | exit(caso); |
} | } | ||
+ | |||
int comparar(const void *a ,const void *b) | int comparar(const void *a ,const void *b) | ||
{ | { | ||
Line 59: | Line 61: | ||
j=1; | j=1; | ||
− | for(i=1;i<linha;i++)/* | + | for(i=1;i<linha;i++)/*definir moda*/ |
{ | { | ||
if(!strcmp(*(vet+i),*(vet+i-1))) | if(!strcmp(*(vet+i),*(vet+i-1))) | ||
Line 68: | Line 70: | ||
} | } | ||
− | for(i=1;i<linha;i++) | + | for(i=1;i<linha;i++)/*imprimir*/ |
{ | { | ||
if(!strcmp(*(vet+i),*(vet+i-1))) | if(!strcmp(*(vet+i),*(vet+i-1))) |
Latest revision as of 19:05, 12 June 2009
// 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; }