Difference between revisions of "Solução: Problema da moda - dificuldade 5 (Lúcio Ribeiro)"
From AdonaiMedrado.Pro.Br
(New page: <code lang="c">// Lúcio Ribeiro #include <stdio.h> #include <stdlib.h> #include <string.h> void erro(char **vet,int i, int caso) { while(i) { i--; free(*(vet+i)); } free(vet); f...) |
|||
Line 1: | Line 1: | ||
− | <code lang="c">// Lúcio Ribeiro | + | <code lang="c"> |
+ | // Lúcio Ribeiro | ||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
#include <string.h> | #include <string.h> | ||
− | void erro(char **vet,int i, int caso) | + | void erro(char **vet,char *palavra, int i, int caso) |
{ | { | ||
while(i) | while(i) | ||
Line 12: | Line 13: | ||
} | } | ||
free(vet); | free(vet); | ||
− | |||
if(caso) | if(caso) | ||
exit(1); | exit(1); | ||
+ | } | ||
+ | int comparar(const void *a ,const void *b) | ||
+ | { | ||
+ | return strcmp( *(char**)a, *(char**)b ); | ||
} | } | ||
+ | |||
int main() | int main() | ||
{ | { | ||
Line 33: | Line 38: | ||
palavra = (char *) realloc(palavra, sizeof(char)*(k+1)); | palavra = (char *) realloc(palavra, sizeof(char)*(k+1)); | ||
if(palavra==NULL) | if(palavra==NULL) | ||
− | erro(vet,linha,1); | + | erro(vet,palavra,linha,1); |
fscanf(arquivo,"%s",palavra); | fscanf(arquivo,"%s",palavra); | ||
linha++; | linha++; | ||
Line 39: | Line 44: | ||
*(vet+linha-1) = (char*) malloc(sizeof(char)*(k+1)); | *(vet+linha-1) = (char*) malloc(sizeof(char)*(k+1)); | ||
if(vet==NULL||*(vet+linha-1)==NULL) | if(vet==NULL||*(vet+linha-1)==NULL) | ||
− | erro(vet,linha,1); | + | erro(vet,palavra,linha,1); |
strcpy(*(vet+linha-1), palavra); | strcpy(*(vet+linha-1), palavra); | ||
}while(1); | }while(1); | ||
Line 51: | Line 56: | ||
− | + | qsort(vet,linha,sizeof(char**),comparar); | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
j=1; | j=1; | ||
Line 86: | Line 77: | ||
printf("%s\n",*(vet+i)); | printf("%s\n",*(vet+i)); | ||
} | } | ||
− | erro(vet,linha,0) | + | erro(vet,palavra,linha,0); |
return 0; | return 0; | ||
} | } |
Revision as of 19:03, 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(1); } 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++)/*j eh parcial*/ { if(!strcmp(*(vet+i),*(vet+i-1))) j++; else j=1; if(j>moda) moda=j; } for(i=1;i<linha;i++) { 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; }