A conversão de números inteiros, na base 10, para outras bases numéricas se dá através de sucessivas divisões de um dado valor
pelo valor da base na qual se queira converter. Faça um programa para obter a conversão numérica, de acordo com a opção do usuário, utilizando a uma pilha:
Decimal para Octal.
Decimal para Octal.
Passo 1
O exercício pede um programa em C que leia um número inteiro em base 10 e o converta para base 8 (octal) usando uma pilha. Vamos usar a definição de pilha (LIFO) para armazenar os restos das divisões sucessivas do número por 8 e depois desempilhar para formar o número octal na ordem correta.
Passo 2
Primeiro, criamos uma pilha estática (vetor) e controle de topo. Precisamos de funções push (empilhar) e pop (desempilhar) para manipular a pilha.
No algoritmo de conversão, enquanto o número for maior que zero fazemos: calcular resto = número % 8, empilhar esse resto, dividir número por 8 (n = n/8).
No algoritmo de conversão, enquanto o número for maior que zero fazemos: calcular resto = número % 8, empilhar esse resto, dividir número por 8 (n = n/8).
Passo 3
Após encher a pilha com todos os restos, desempilhamos até a pilha ficar vazia, imprimindo cada valor. Esse será o dígito octal, do mais significativo ao menos significativo.
Trate o caso especial em que o número inicial seja zero: nesse caso o resultado em octal também é “0”.
Trate o caso especial em que o número inicial seja zero: nesse caso o resultado em octal também é “0”.
Resposta
#include <stdio.h>
#define MAX 100
#define MAX 100
void push(int stack[], int *top, int value) {
stack[++(*top)] = value;
}
stack[++(*top)] = value;
}
int pop(int stack[], int *top) {
return stack[(*top)–];
}
return stack[(*top)–];
}
int main() {
int num, top = -1;
int stack[MAX];
int num, top = -1;
int stack[MAX];
printf("Digite um numero decimal: ");
scanf("%d", &num);
if (num == 0) {
printf("0\n");
return 0;
}
// Empilha os restos das divisões por 8
while (num > 0) {
push(stack, &top, num % 8);
num /= 8;
}
// Desempilha e imprime os dígitos octais
printf("Octal: ");
while (top >= 0) {
printf("%d", pop(stack, &top));
}
printf("\n");
return 0;
}