How to read a positive n number in ascending and hexadecimal order?

-1

I have a problem with an issue and I can not resolve it. My problem is referent of how to enter these values and organizes them as the example below.

  

Create a program in C / C ++ reads a positive number n and prints, in   all hexadecimal numbers with n nibbles. (1   nibble = 4 bits or 1/2 byte)

     

Additional Restrictions:

     
  • You can not work with numbers in decimal format and convert them to hexadecimal.
  •   
  • The solution must adopt a vector to store the nibbles.
  •   
  • The solution may be recursive or not.
  •   

    Example 1:

    Example2:

    MYCODETONOW:

    #include<stdio.h>#include<stdlib.h>/*CrieumprogramaemC/C++lêumnúmeropositivoneimprime,emordemcrescente,todososnúmeroshexadecimaiscomnnibbles.(1nibble=4bitsou1⁄2byte)Restriçõesadicionais:1.Nãopodetrabalharcomnúmerosnoformatodecimaleconvertê-losparahexadecimal.3.Asoluçãodeveadotar,obrigatoriamente,umvetorparaarmazenarosnibbles.4.Asoluçãopodeserrecursivaounão.*/intmain(intargc,char*argv){unsignedshortintn=0;painel_quantidade_n(n);ordem_crescente();/*inthex=0xFF;printf("Valor inteiro: %i \n", hex);
        printf("Valor hex: %x \n", hex);
        printf("Valor hex (maiusculo): %X \n", hex);
        printf("Valor hex (4 casas): %4x \n", hex);
        printf("Valor hex (Completar com zeros): %04x \n", hex);*/
    
        return 0;
    }
    
    int painel_quantidade_n(int n){
        printf("DIGITE A QUANTIDADE DE NIBBLES:\n");
        scanf("%d", &n);
    
        if(n < 0){
            printf("OPS ... VOCE DIGITOU: (%d) NIBBLES... TENTE COM UM NUMERO POSITIVO !\n\n", n);
            n = 0;
            painel_quantidade_n(n);
        } else {
            return n;
        }
    }
    
    void ordem_crescente(){
        int nibbles[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
        int tam = (sizeof(nibbles) / sizeof(nibbles[0])), tmp = 0;
    
        for (int i=0; i<tam; i++){
            if(nibbles[i]>nibbles[i+1]){
                tmp = nibbles[i+1];
                nibbles[i+1] = nibbles[i];
                nibbles[i] = tmp;
                i = -1;
            }
        }
        printf("\n*IMPRIME ORDEM CRESCENTE*\n");
        for(int i=0; i<tam; i++){
            printf("%04X\n", nibbles[i]);
        }
    }
    
        
    asked by anonymous 26.05.2018 / 01:06

    1 answer

    1

    In painel_quantidade_n(int) , where painel_quantidade_n(n); is, return painel_quantidade_n(n); . Preferably, change the signature of the function to int painel_quantidade_n(void)

    In ordem_crescente() , do:

    void ordem_crescente(int n)
    {
        int nibble[n];
        char printer[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                           'A', 'B', 'C', 'D', 'E', 'F' };
        int i, j;
        int vaiUm = 0;
        int fim = (n > 0) ? 0 : 1;
    
        // Zera nibbles.
        for (i = 0; i < n; ++i)
        {
            nibble[i] = 0;
        }
    
        do
        {
            // Mostra o numero atual;
            for (j = n - 1; j >= 0; --j)
            {
                printf("%c", printer[nibble[j]]);
            }
            printf("\n");
    
            // Incrementa o nibble menos significativo, de um.
            for (j = 0, vaiUm = 0; j < n; ++j)
            {
                nibble[j] += (j == 0) ? 1 : vaiUm;
    
                vaiUm = nibble[j] / 16;
    
                if (vaiUm)
                {
                    nibble[j] %= 16;
                }
    
                if (vaiUm && j == n - 1)
                {
                    // Todos os numeros foram mostrados. Fim do programa.
                    fim = 1;
                }
            }
        } while (!fim);
    }
    
        
    26.05.2018 / 02:32