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

Asked

Viewed 342 times

-1

I’m in trouble on one issue and I can’t solve it. My problem relates to how to insert these values and organize them in the same way as the example below.

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

Additional restrictions:

  1. Can’t work with numbers in decimal format and convert them to hexadecimal.
  2. The solution must adopt, necessarily, a vector to store the Nibbles.
  3. The solution may be recursive or not.

Example 1:

inserir a descrição da imagem aqui Example 2:

inserir a descrição da imagem aqui MY CODE SO FAR:

#include <stdio.h>
#include <stdlib.h>

/*
Crie um programa em C/C++ lê um número positivo n e imprime,
em ordem crescente, todos os números hexadecimais com n nibbles. (1 nibble = 4 bits ou 1⁄2 byte)

Restrições adicionais:
1. Não pode trabalhar com números no formato decimal e convertê-los para hexadecimal.
3. A solução deve adotar, obrigatoriamente, um vetor para armazenar os nibbles.
4. A solução pode ser recursiva ou não.
*/
int main (int argc, char* argv){
    unsigned short int n = 0;

    painel_quantidade_n(n);
    ordem_crescente();


    /*
    int hex = 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]);
    }
}

1 answer

0


In painel_quantidade_n(int), where it is painel_quantidade_n(n);, do return painel_quantidade_n(n);. Preferably, change the function signature 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);
}
  • My man, congratulations. You did great! I will analyze your code and learn from it.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.