Advertisement
charles0145

Decimas para el certamen 2

Sep 25th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.87 KB | None | 0 0
  1. //https://www.aceptaelreto.com/problem/statement.php?id=163&cat=16
  2. //Codigo version 3. Optimizado
  3. /*
  4.     Nombre : Carlos Eduardo Ardila Patiño
  5.     RUT : 25.612.549-8
  6.     Programa: Sumale uno a un numero hexadecimal
  7.     Fecha : 25/06/2017
  8. */
  9. #include <stdio.h>
  10. #include <string.h>
  11. #define MAX 101
  12.  
  13.  
  14. void *hexmasuno ( char *cadenita);              //Prototipo de la funcion que sumara y escribira el numero
  15. int soloF (char *cadena, int largoCadena);      //Prototipo de la funcion que busca si es un numero con solo F's
  16.  
  17. int main(){
  18.    
  19.     char cadena[MAX];
  20.     char fin[4]="FIN";
  21.    
  22.     do{                                         //Se lee cadenas de numeros en Hexadecimal, hasta que se ingresa "FIN"
  23.         strcpy(cadena,"");
  24.         scanf("%[^\n]s",cadena);           
  25.         getchar();
  26.            
  27.         if(strcmp(cadena,fin) == 0){
  28.             break;
  29.         }
  30.        hexmasuno(cadena);                       //Se invoca la funcion que suma el y escribe el numero
  31.        
  32.     }while(strcmp(cadena,fin) != 0);
  33.    
  34.     return 0;
  35. }
  36.  
  37. int soloF (char *cadena, int largoCadena){      //Definicion de la funcion soloF, que evalua si un numero tiene solo F
  38.     int i;
  39.     int flag = 1;
  40.     for(i = 0; i < largoCadena; i++){
  41.         if(cadena[i] != 'F'){
  42.             flag = 0;
  43.         }
  44.     }
  45.     return flag;
  46. }
  47.  
  48. void *hexmasuno ( char *cadenita){                  //Definicion de la funcion hexmasuno
  49.     char hexadecimal[17] = "0123456789ABCDEF";      //Cadena Arreglada, gracias profesora!
  50.     int i, j, largo;
  51.     int acarreo = 1;
  52.     char cadena[102];
  53.     largo = strlen(cadenita);                   //Se lee el largo de la cadena
  54.  
  55.     int indice = 0;
  56.    
  57.     char *puntero;
  58.    
  59.     if(soloF(cadenita,largo)){              //Se invoca la funcion solo F y se evalua si el numero es solo F para saltarnos los acarreos   
  60.         printf("1");
  61.            
  62.         for(i = 0; i < largo; i++){
  63.             printf("0");
  64.         }
  65.            
  66.         printf("\n");                       //Bug del enter arreglado, gracias profesora!
  67.     }
  68.     else{
  69.            
  70.         if(cadenita[largo-1] != 'F'){       //Si la cadena en su ultimo digito no es F, esta itera solo una vez, ya que no utiliza acarreos
  71.             puntero = strchr(hexadecimal, cadenita[largo-1]);
  72.             indice = puntero - hexadecimal;
  73.             cadenita[largo-1] = hexadecimal[indice + 1];
  74.             printf("%s\n",cadenita);
  75.         }
  76.         else{
  77.             cadenita[largo-1] = hexadecimal[0];         //Si último digito de el número es F, se le asigna le asigna 0 y empieza el acarreo
  78.             for(i = largo-2; i >= 0; i--){
  79.                 if(acarreo){
  80.                     if(cadenita[i] != 'F'){             //Si el numero siguientes despues de la primera F es diferente de F, se realiza el acarreo y termina la suma del programa
  81.                         puntero = strchr(hexadecimal, cadenita[i]);
  82.                         indice = puntero - hexadecimal;
  83.                         cadenita[i] = hexadecimal[indice + 1];
  84.                         acarreo = 0;
  85.                         break;
  86.                     }
  87.                     else{                               //Si el numero es F continua el acarreo
  88.                         cadenita[i] = '0';
  89.                         acarreo = 1;
  90.                     }
  91.                 }
  92.             }
  93.                 printf("%s\n",cadenita);
  94.         }
  95.     }
  96.     cadena[largo] = '\0';
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement