Programación General > C/C++

 Cambio de base

<< < (2/2)

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

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa