Advertisement
charles0145

CERTAMEN MODULO 4 FINAL

Nov 20th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.42 KB | None | 0 0
  1. typedef long long int ll_i;
  2.  
  3. ll_i bitsNecesarios(ll_i largo){
  4.     ll_i bits = 1;
  5.     ll_i mult = 2;
  6.     while(mult < largo){
  7.         mult*=2;
  8.         bits++;
  9.     }
  10.     return bits;
  11. }
  12.  
  13. ll_i bitsANumero(char *cadena){
  14.     ll_i numerito = 0;
  15.     ll_i i, j= 0;
  16.     ll_i largo = strlen(cadena);
  17.     for(i = largo-1; i >= 0 ; i--){
  18.         numerito+=(cadena[i]-48)*pow(2,j);
  19.         j++;
  20.     }
  21.     return numerito;
  22. }
  23.  
  24. char convertir(char *caracter,char *abecedario){
  25.     ll_i posicion = bitsANumero(caracter);
  26.     char carac = abecedario[posicion];
  27.     return carac;
  28. }
  29.  
  30.  
  31. void traducir(FILE *entrada, FILE **salida){
  32.     char *abecedario = NULL;
  33.     char palabra[2048];
  34.     char aux;
  35.     ll_i largoABC = 0;
  36.     ll_i bits;
  37.     ll_i i, j;
  38.    
  39.    
  40.     while((aux = fgetc(entrada))!='\n'){
  41.         abecedario = (char *)realloc(abecedario,sizeof(char)*(largoABC+1));
  42.         abecedario[largoABC] = aux;
  43.         largoABC++;
  44.     }
  45.     bits = bitsNecesarios(largoABC);
  46.    
  47.     char caracter[bits];
  48.    
  49.     while(fscanf(entrada,"%s",palabra)!=EOF){
  50.         ll_i largoPalabra = strlen(palabra);
  51.         i = 0;
  52.         while(i < largoPalabra){
  53.             for(j = 0; j < bits; j++){
  54.                 caracter[j] = palabra[i+j];
  55.             }
  56.             caracter[bits] = '\0';
  57.             fprintf(*salida,"%c",convertir(caracter,abecedario));
  58.             i+=bits;
  59.         }
  60.         fprintf(*salida,"\n");
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement