elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  pasar de decimal a cualquier base menor de 10
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: pasar de decimal a cualquier base menor de 10  (Leído 6,880 veces)
juanma31

Desconectado Desconectado

Mensajes: 5


Ver Perfil
pasar de decimal a cualquier base menor de 10
« en: 2 Abril 2014, 19:31 pm »

hola, tengo q hacer este ejercicio pero no m sale bien. lo unico q e conseguido es q m salga el numero al reves. alguien m podria decir q puedo hacer para darle la vuelta? o hacerlo de otra forma? no s puede usar void, gracias.

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    unsigned numero,base,cociente,resto,contador=0,i,total,diez,num,decimal;
    cout<<"escribe el numero que quieres convertir: ";
    cin>>numero;
    cout<<"la base a la que quieres pasarlo: ";
    cin>>base;
    cociente=numero;

    while(cociente>=base)
    {
        resto=cociente%base;
        cociente=cociente/base;
        cout<<resto;
        contador++;
    }

    return 0;
}



En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #1 en: 2 Abril 2014, 19:49 pm »

¿Has dado pilas?

Otra opcion es ir guardando los digitos en un array y mostrarlo en orden inverso.


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #2 en: 2 Abril 2014, 20:17 pm »

1 - Utiliza las etiquetas geshi para el código...
2 - Tienes muchas variables que no usas, incluido contador que lo incrementas en el bucle pero nunca llegas a usarlo
3 - Aun imprimiendo el numero al revés te dejas el ultimo dígito, cuando es menor que la base y mayor que cero,cociente seria directamente el dígito que te falta.
4 - Como ya ha dicho amchacon un array es una buena opción aunque también podrías almacenarlo en una variable numérica
Código
  1.    while(cociente > 0)
  2.    {
  3. if(cociente >= base)
  4. {
  5. digito = cociente % base;
  6. cociente = cociente / base;
  7. }
  8. else
  9. {
  10. digito = cociente;
  11. cociente = 0;
  12. }
  13. num_en_base += digito * pow(10,contador); //""Desplaza"" el digito contador veces a la izquierda
  14. contador++;
  15.    }
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #3 en: 2 Abril 2014, 20:34 pm »

Propongo otra opción:

Código
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    unsigned numero=0,base=0,cociente=0, contador=1;
  9.    cout<<"Escribe el numero que quieres convertir: ";
  10.    cin>>numero;
  11.    cout<<"La base a la que quieres pasarlo: ";
  12.    cin>>base;
  13.    cociente=numero;
  14.  
  15.    while(cociente>=base){
  16.        cociente/=base;
  17.        ++contador;
  18.    }
  19.    for(int i=contador;i>0;i--){
  20.        cociente=numero;
  21.        contador=i;
  22.        while(contador>1){
  23.            cociente/=base;
  24.            --contador;
  25.        }
  26.        cout << cociente%base;
  27.    }
  28.    return 0;
  29. }

Aquí, contador viene a representar las veces que se puede dividir el número.
Luego, va mostrando los restos, pero en orden inversa.
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #4 en: 2 Abril 2014, 21:47 pm »

Sólo como un aporte, tomando el código de ivance y modificándolo para trabajar con arreglos creo que se ahorra un poco de cálculo ya que no será necesario encadenar un while dentro del for. La desventaja es que debemos crear dinámicamente un arreglo con una longitud igual a la cantidad esperada de cifras del número:
Código
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.   unsigned numero=0, base=0, cociente=0, contador=1;
  9.   cout<<"Escribe el numero que quieres convertir: ";
  10.   cin>>numero;
  11.   cout<<"La base a la que quieres pasarlo: ";
  12.   cin>>base;
  13.   cociente=numero;
  14.  
  15.   /* cantidad de cifras en la base especificada */
  16.   int n = 1;
  17.   while ( cociente >= base ) {
  18.      cociente/=base;
  19.      ++n;
  20.   }
  21.   /* reservar arreglo de n cifras */
  22.   unsigned *cifras = new unsigned[n];
  23.   if ( cifras == NULL ) return -1;
  24.  
  25.   for (int i = 0; i < n; i++) {
  26.      cifras[n - i - 1] = numero % base;
  27.      numero /= base;
  28.   }
  29.   for (int i = 0; i < n; i++)
  30.      cout << cifras[i];
  31.   cout << endl;
  32.  
  33.   delete cifras;
  34.   return 0;
  35. }
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #5 en: 2 Abril 2014, 23:29 pm »

Los códigos propuestos hasta ahora no guardan el nuevo número como tal.

Esta es mi propuesta que tendrá la limitación lógica, y escasa, de los dígitos que puede almacenar un long long int, y más si no es en base decimal ya que en estos casos los dígitos se disparan cuanto más baja es la base:


Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    int num,i,base;
  5.    long long int resto=0,num0=1;
  6.    printf("Introduzca un numero : ");
  7.    scanf("%d",&num);
  8.    printf("Introduzca la base : ");
  9.    scanf("%d",&base);
  10.    for (i=0;num>=1 ;i++ ,num0*=10){
  11.        resto+=(num%base)*num0;
  12.        num=num/base;
  13.    }
  14.    printf("\n\n%lld\n\n",resto);
  15.    return 0;
  16. }

¡¡¡UUUPPPSSS, se me coló en C  ;)


¡¡¡¡ Saluditos! ..... !!!!




« Última modificación: 2 Abril 2014, 23:44 pm por leosansan » En línea

juanma31

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #6 en: 2 Abril 2014, 23:51 pm »

gracias, el q m ha servido es el de ivancea96, se m ha olvidado decir q no podia usar arrays, graciass a todos
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #7 en: 3 Abril 2014, 07:18 am »

gracias, el q m ha servido es el de ivancea96, se m ha olvidado decir q no podia usar arrays, graciass a todos

Sin arrays, más cortito pero haciendo uso de la librería math con un poco de mates y así nos ahorramos unas cuantas divisiones:

Código
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.    int i,j,numero,base,digitos;
  8.    cout<<"Escribe el numero que quieres convertir: ";
  9.    cin>>numero;
  10.    cout<<"La base a la que quieres pasarlo: ";
  11.    cin>>base;
  12.    digitos= (int)(log(numero)/log(base));
  13.    cout <<numero<< " en base "<<base<< ": "<<endl;
  14.    for (i=digitos; i>=0 ;i-- ,numero%=j) {
  15.      j=pow(2,i);
  16.      cout <<" "<<numero/j;
  17.    }
  18.    return 0;
  19. }
  20.  

Y para los seguidores del C con array:

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main(){
  5.    int base,i,j,num,digitos,resto;
  6.    printf("Introduzca un numero : ");
  7.    scanf("%d",&num);
  8.    printf("Introduzca la base : ");
  9.    scanf("%d",&base);
  10.    digitos= (int)(log(num)/log(base));
  11.    int nueva_base[digitos+1];
  12.    for (i=digitos;i>=0 ;i-- ,num/=base)
  13.        nueva_base[i]=num%base;
  14.    for (i=0;i<=digitos;i++)
  15.        printf("%d ",nueva_base[i]);
  16.    return 0;
  17. }

¡¡¡¡ Saluditos! ..... !!!!


« Última modificación: 3 Abril 2014, 10:26 am por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #8 en: 3 Abril 2014, 11:02 am »

Como veo que se ha convertido en un concurso, doy mi solución con pilas:

Código
  1. #include <iostream>
  2. #include <stack>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    int numero,base,cociente,resto;
  9.    stack<int> Pila;
  10.  
  11.    cout<<"escribe el numero que quieres convertir: ";
  12.    cin>>numero;
  13.  
  14.    cout<<"la base a la que quieres pasarlo: ";
  15.    cin>>base;
  16.  
  17.    cociente=numero;
  18.  
  19.    while(cociente>=base)
  20.    {
  21.        resto=cociente%base;
  22.        cociente=cociente/base;
  23.        Pila.push(resto);
  24.    }
  25.  
  26.    Pila.push(cociente);
  27.  
  28.    while (!Pila.empty())
  29.    {
  30.        cout<<Pila.top();
  31.        Pila.pop();
  32.    }
  33.    return 0;
  34. }
  35.  
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: pasar de decimal a cualquier base menor de 10
« Respuesta #9 en: 3 Abril 2014, 11:12 am »

No he querido mirar todas las soluciones, pero si no se puede usar arrays, lo que pienso es que (como vamos consiguiendo los valores menos significativos primero) empezar con un int resultado = 0; y en cada iteración sumarle el valor que calculamos x10^(num de iteración). (En caso de Hexadecimal o base mayor que 10 no valdría :s)

Saludos ;)
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines