Programación General > C/C++
Cambio de base
locazopro:
ten en cuenta que cuando declaras un array por ejemplo:
--- Código: C --- int octal[10];
ese array tiene capacidad para 10 enteros pero cuando quieres referirte a ellos no partes del 1 partes del 0, o sea cuando por ejemplo te quieres referir al primero de ellos lo haces:
--- Código: C --- octal[0];
entonces, el último sería
--- Código: C --- octal[9];
tienes 10 elementos pero cuando te refieres a ellos el máximo es octal[9], ya que se cuenta desde el 0 al 9. Digo todo esto, porque veo que comienzas definiendo desde octal[1] y no desde el cero.
Saludos!
ermiguel1979:
Buenos días Locazoporro. Pues tienes razón, no había caido en eso. vaya bulto de tio... Voy a corregirlo ahora mismo.
Muchas gracias por tu tiempo y un saludo!!
ermiguel1979:
Tampoco me funciona. He hecho los cambios que dijiste pero sigue sin funcionar. Te vuelvo a mandar el programa...
/*EJERCICIO 6(BIS); PRACTICA 4*/
#include <stdio.h>
#include <stdlib.h>
/*Algoritmo -> CAMBIO DE BASE DECIMAL-OCTAL*/
int main (void){
//DECLARACION DE VARIABLES
/*entradas*/
int numero; //el numero a cambiar de base (dado en base 10)
/*Intermedias*/
int i, j; //contadores de bucles
int cociente; //cociente de las sucesivas divisiones de numero/8
int resto; //'resto' de numero/8;va al array;sera el numero,base 8
/*Salidas*/
int octal [10]; /*Array (vector) de tipo entero
para guardar el numero en base octal (base 8)*/
/*Leer Variables*/
printf("Escribir numero en base 10: ");
scanf("%i", &numero);
//OPERACIONES
i=1; //se prepara 'i' con ese valor para que el bucle while_
//guarde los valore de 'resto' en los espacios del vector
cociente=numero/8; //la primera division se hace fuera del bucle
resto=numero%8;
octal[0]=resto;
while (cociente>=8){
resto=cociente%8;
cociente=cociente/8;
octal=resto;
i++; //'i' aumenta +1 cada iteración recorriendo 'octal'
}
i=i+1;
octal=cociente; //para guardar el ultimo valor de 'cociente'
//RESULTADOS
printf("%i, en base octal es: ", numero);
for(j=i; j<=0; j--){ //recorre el vector de atras hacia delante
printf("%i",octal[j]);
}
}
Por si le ves algo que pueda dar conflicto. Gracias!
locazopro:
mmm, bueno, creo que tienes algunos errores. Fíjate bien en el último bucle:
--- Código: C --- for(j=i; j<=0; j--){ /*recorre el vector de atras hacia delante*/ printf("%i",octal[j]);}
tu condición es que j sea menor o igual a cero, lo que nunca pasará ya que i es siempre mayor que cero.
Otra cosa, viendo el como haces la transformación, el último incremento que le haces a i no es necesario, mira, prueba este código, debería funcionar (solo cambié de tu código lo que he comentado aquí):
--- Código: C --- #include <stdio.h>#include <stdlib.h> /*Algoritmo -> CAMBIO DE BASE DECIMAL-OCTAL*/int main (void){/*DECLARACION DE VARIABLES*/ /*entradas*/ int numero; /*//el numero a cambiar de base (dado en base 10)*/ /*Intermedias*/ int i, j; /*contadores de bucles*/ int cociente; /*cociente de las sucesivas divisiones de numero/8*/ int resto; /*'resto' de numero/8;va al array;sera el numero,base 8*/ /*Salidas*/ int octal [10]; /*Array (vector) de tipo enteropara guardar el numero en base octal (base 8)*/ /*Leer Variables*/ printf("Escribir numero en base 10: "); scanf("%d", &numero); /*//OPERACIONES*/ i=1; /*//se prepara 'i' con ese valor para que el bucle while_//guarde los valore de 'resto' en los espacios del vector*/ cociente=numero/8; /*//la primera division se hace fuera del bucle*/ resto=numero%8; octal[0]=resto; while (cociente>=8) { resto=cociente%8; cociente=cociente/8; octal[i]=resto; i++; /*//'i' aumenta +1 cada iteración recorriendo 'octal'*/ } /*i=i+1;*/ octal[i]=cociente; /*//para guardar el ultimo valor de 'cociente'*/ /*//RESULTADOS*/ printf("%d, en base octal es: ", numero); for (j=i; j>=0; j--) { /*//recorre el vector de atras hacia delante*/ printf("%d",octal[j]); } return -1;}
y dime que tal, para ver si es lo que buscas.
Saludos!
ermiguel1979:
Esta perfecto, justo eso es lo que me faltaba. Ala, listo para el siguiente ejercicio.
Gracias!
Navegación
[*] Página Anterior
Ir a la versión completa