Viernes 8 de Noviembre de 2024, 23:29
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Cambio de base
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Cambio de base (Leído 3515 veces)
ermiguel1979
Miembro activo
Mensajes: 45
Cambio de base
«
en:
Lunes 14 de Diciembre de 2009, 15:42 »
0
Hola a todos, tengo que hacer un programita que dice lo siguiente:
Realizar un porgrama para convertir números enteros decimales (en base 10) a sus respectivas representaciones octales (en base 8), por medio de sucesivas divisiones.
Y... no tengo ni idea de como hacerlo. Os agradezco toda la ayuda que me podais dar...
Un saluo!!!
Tweet
diego.martinez
Miembro MUY activo
Mensajes: 297
Re: Cambio de base
«
Respuesta #1 en:
Lunes 14 de Diciembre de 2009, 18:07 »
0
tal y como te habran enseñado en clase, la conversion de base se hace simplemente dividiendo el numero en base diez entre el valor de base.
Despues, coges todos los restos de las distintas divisiones y los colocas en orden inverso (osea, desde el ultimo al primero) y ese es el valor en la nueva base.
ermiguel1979
Miembro activo
Mensajes: 45
Re: Cambio de base
«
Respuesta #2 en:
Martes 15 de Diciembre de 2009, 09:56 »
0
Buenos días. Lo de dividir lo tengo claro, pero como lo hago para almacenar los restos y luego mastrarlos al revés???, será con un vector u algo así...
Los vectores no se como se usan.... le voy a preguntar al profe, pero si pudieses aclararme algo...
Muchas gracias. Un saludo.
diego.martinez
Miembro MUY activo
Mensajes: 297
Re: Cambio de base
«
Respuesta #3 en:
Martes 15 de Diciembre de 2009, 16:20 »
0
para ver el resultado de una division puedes usar
para ver el valor floor(dividendo / divisor)
para ver el resto dividento%divisor
a medida que extraigas los restos ve metiendolos por la derecha o bien en un array o bien multiplicando por el valor de representación.
ermiguel1979
Miembro activo
Mensajes: 45
Re: Cambio de base
«
Respuesta #4 en:
Miércoles 16 de Diciembre de 2009, 15:16 »
0
Buenas tardes Diego, te mando lo que tengo hecho. Debería funcionar, jejejjeje; pero me dá un problema al leer en el vector tras la primera iteración del bucle
while. He incluido algnos PRINTF para ver lo que va haciendo...
Porfa, echale un vistazo que yo no veo el error...
/*EJERCICIO 6; 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 del 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=2; //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[1]=resto;
printf("%i, %i, %i, %in", i, cociente, resto, octal[1]);
while (cociente>=8){
resto=cociente%8;
cociente=cociente/8;
octal
=resto;
i++; //'i' aumenta +1 cada iteración recorriendo 'octal'
}
printf("%i, %i, %i, %in", i, cociente, resto, 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<=1; j--){ //recorre el vector de atras hacia delante
printf("%i",octal[j]);
}
}
Oye, muchas gracias por tu tiempo y felices fiestas!
locazopro
Miembro activo
Mensajes: 51
Re: Cambio de base
«
Respuesta #5 en:
Jueves 17 de Diciembre de 2009, 07:04 »
0
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
Miembro activo
Mensajes: 45
Re: Cambio de base
«
Respuesta #6 en:
Jueves 17 de Diciembre de 2009, 09:38 »
0
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
Miembro activo
Mensajes: 45
Re: Cambio de base
«
Respuesta #7 en:
Jueves 17 de Diciembre de 2009, 09:53 »
0
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
Miembro activo
Mensajes: 51
Re: Cambio de base
«
Respuesta #8 en:
Viernes 18 de Diciembre de 2009, 00:17 »
0
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 entero
para 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
Miembro activo
Mensajes: 45
Re: Cambio de base
«
Respuesta #9 en:
Viernes 18 de Diciembre de 2009, 18:26 »
0
Esta perfecto, justo eso es lo que me faltaba. Ala, listo para el siguiente ejercicio.
Gracias!
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Cambio de base