Conversion decimal a octal

De Ejercicios

Contenido

Enunciado

Formular un algoritmo para convertir números enteros decimales en base 10 a sus respectivas representaciones octales en base 8, por medio de sucesivas divisiones. Por ejemplo, para calcular la representación octal de 150, se divide sucesivamente por 8 y los restos que van quedando se almacenan ordenadamente.

Paso Dividendo Divisor Cociente Resto
1 150 8 18 6
2 18 8 2 2
3 2 8 0 2

226(8 = 2*82+2*81+6*80=150(10

Generalizar y que haga un cambio de base como dato la base a la que se quiera pasar. mostrar los dígitos en orden inverso.

Soluciones

Diseño en Pseudocódigo

 PROGRAMA CambioDeBase
 ENTRADAS:
    numero: ENTERO  ''(*Número en formato decimal que se desea cambiar de base*)''
 SALIDAS:
    resul: ARRAY (0..100) DE ENTEROS  ''(*Array que almacenará el resultado en orden inverso*)''
    digitos: ENTERO                   ''(*Número de elementos del array, es decir, número de dígitos en la nueva base*)''
 VARIABLES
    dividendo: ENTERO
    resto: ENTERO
    cociente:ENTERO
    i: ENTERO
 INICIO
    ''(*Leer las entradas necesarias para el cambio de base*)''
    ESCRIBIR "Introduzca un número en formato decimal: "
    LEER numero
 
    ''(*Realizar el cambio de base*)''
    digitos <-- 0
    dividendo <-- numero
    MIENTRAS dividendo > 0 HACER
       cociente <-- dividendo DIV 8  ''(*Se realiza una división entera*)''
       resto <-- dividendo MOD 8 
       resul(digitos) <-- resto
       digitos <-- digitos + 1
       dividendo <-- cociente
    FIN_MIENTRAS
 
    ''(*Mostrar el resultado almacenado en el array en orden inverso*)''
    ESCRIBIR "El numero decimal ", numero, " equivale en base 8 a: "
    PARA i <-- digitos-1 HASTA 0 CON INCREMENTO DE -1 HACER
       ESCRIBIR resul(i)
    FIN_PARA
 FIN

Programa en C

 #include <stdlib.h>
 
 int main(void){
    //ENTRADAS:
    int numero;     //Número en formato decimal que se desea cambiar de base
    //SALIDAS:
    int resul[101]; //Array que almacenará el resultado en orden inverso
    int digitos;    //Número de elementos del array, es decir, número de dígitos en la nueva base
    //VARIABLES
    int dividendo;
    int resto;
    int cociente;
    int i;
 
    //Leer las entradas necesarias para el cambio de base
    printf("Introduzca un número en formato decimal: ");
    scanf("%i", numero);
 
    //Realizar el cambio de base
    digitos = 0;
    dividendo = numero;
    while( dividendo > 0 ){
       cociente = dividendo/8;  //Se realiza una división entera porque ambos operandos son enteros
       resto    = dividendo%8;
       resul[digitos] = resto;
       digitos = digitos + 1;
       dividendo = cociente;
    }
 
    //Mostrar el resultado almacenado en el array en orden inverso
    printf("El numero decimal %i equivale en base 8 a: ", numero);
    for( i=digitos-1; i>=0; i--){
       printf("%i",resul[i]);
    }
    printf("\n");
 }