Difference between revisions of "Laboratório de Programação I (UFBA 2009.1): Prova AVII - Respostas do professor"
From AdonaiMedrado.Pro.Br
(New page: == Problema do checksum (Dificuldade 1) == <code lang="c"> #include <stdio.h> int contar_uns(unsigned char b) { int i, r=0; for(i=0;i<8;i++,b>>=1) r += b & 1; return r; } int contar...) |
(No difference)
|
Latest revision as of 16:03, 3 July 2009
Problema do checksum (Dificuldade 1)
#include <stdio.h> int contar_uns(unsigned char b) { int i, r=0; for(i=0;i<8;i++,b>>=1) r += b & 1; return r; } int contar_zeros(unsigned char b) { int i, r=0; for(i=0;i<8;i++,b>>=1) r += (b & 1) ? 0 : 1; return r; } int main(void) { char s[201]; do { scanf("%s",s); if (strcmp(s,"0")) { FILE *fp=fopen(s,"r"); char b; int l=0,c=0; while(fread(&b,sizeof(char),1,fp)) { if (c % 2) l+=contar_zeros(b); else l+=contar_uns(b); c++; } printf("%d\n",l); fclose(fp); } } while(strcmp(s,"0")); }
Problema do TMA
#include <stdio.h> #include <stdlib.h> int comparar(const void *a, const void *b) { return *((int *)a)-*((int *)b); } int verificar_moda(int *entrada, int tamanho) { int ant, qnt=0, i, feqmoda=0, feqatual=0, count; int *moda=malloc(tamanho*sizeof(int)); if (!tamanho) return -1; ant=entrada[0]; for(i=0;i<tamanho;i++) { if (entrada[i]==ant) feqatual++; else feqatual=1; if (feqatual>feqmoda) { qnt=0; moda[0]=entrada[i]; feqmoda=feqatual; } else if (feqatual==feqmoda) moda[qnt++]=entrada[i]; ant=entrada[i]; } if (qnt==0) return moda[0]; else return -1; free(moda); } int main(void) { int ini,fim; int max=-1,min=1001,soma=0,qnt=0,tempo; int i=0; int *entrada=NULL; FILE *fp=fopen("entrada.txt","r"); while(fscanf(fp,"%d %d",&ini,&fim)==2) { if (qnt==0 || qnt/100.0!=qnt/100) entrada = realloc(entrada,sizeof(int)*(qnt+100)); *(entrada+i)=tempo=fim-ini; i++; if (max<tempo) max = tempo; if (min>tempo) min = tempo; soma+=tempo; qnt++; } qsort(entrada,qnt,sizeof(int),comparar); printf("%d\n%d\n%d\n%.1f\n",min,max,verificar_moda(entrada,qnt),soma/(float)qnt); fclose(fp); free(entrada); }
Problema da seqüência de algarismos agrupados com ordenação
#include <stdio.h> #include <string.h> int comparar(const void *a, const void *b) { return *(char *)a-*(char *)b; } int main(void) { char g[10][101] = { { '\0' } }; char s[26]; int n, i; scanf("%d",&n); for(i=0;i<n;i++) { int indice_g; scanf("%s",s); indice_g = s[strlen(s)-1]-'0'; strcat(g[indice_g],s); g[indice_g][strlen(g[indice_g])-1] = '\0'; } for(i=0;i<10;i++) { if (strlen(g[i])>0) { qsort(g[i],strlen(g[i]),sizeof(char),comparar); printf("%d.%s\n",i,g[i]); } } return 0; }