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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa en C que cambie de base 10 a cualquier base y viceversa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa en C que cambie de base 10 a cualquier base y viceversa  (Leído 31,921 veces)
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Programa en C que cambie de base 10 a cualquier base y viceversa
« en: 30 Abril 2012, 02:28 am »

Hola programadores en C la cuestion es la siguiente necesito hacer un programa en C que como dice el asunto del mensaje, teniendo un número en base 10 lo pueda cambiar a cualquier base y viceversa.
Les mostraré lo que he llevado hasta ahora para que me puedan decir porque no ha funcionado;


Código:
#include <stdio.h>
#include <stdlib.h>
void conversion (int num, int base);
int main(int argc, char *argv[])
{
  int num,base,coci,i,residuo,k; 
  printf("Programa que convierte un numero de base 10 a cualquier base");
  printf("Escribe el numero de base 10");
  scanf("%d",&num);
  printf("Escribe a la base que se desea convertir");
  scanf("%d",&base);
  k=conversion(num, base);
  for(i=k-1;i>0;i--){
                     printf("%d",residuo);
                     }
  system("PAUSE");
  return 0;
}
void conversion (int num, int base);
{
     int i;
     for(i=0;coci>0;i++){
                         coci=num/base;
                         residuo[i]=num%base;
     }
Como se han podido dar cuenta dicho programa solo se encuentra a la mitad en cuanto se refiere cambiar de base 10 a cualquier otra base, también podrán ver que se requiere el uso de funciones aparte de main, ya que así me han pedido el programa; la idea general del programa es que con los valores que pido en la función main, los puede utilizar en la nueva función "conversion", para obtener los residuos de las divisiones sucesivas y guardarlos en un arreglo residuos y al obtener y guardar dichos valores de la función "conversion" entonces hacer que los use main para imprimirlos de forma regresiva como se hace para obtener la  base 10 a cualquier base. Como verán esto ha sido solo la mitad del programa pero en serio agradecería que me mencionarán mis errores, espero haberme dado a entender gracias de antemano.


En línea

s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Programa en C que cambie de base 10 a cualquier base y viceversa
« Respuesta #1 en: 30 Abril 2012, 03:18 am »

Bueno hace tiempo hice algo asi de conversion de base 10 a 2 - 16, si te sirve de algo aqui esta:

Anuque solo con numeros enteros hehe, ya con decimales se me paso hacerlo ;$ xD

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int DecimalToBase(long int iDec, int numbase);
  5. char cHexa[] = {'A','B','C','D','E','F'};
  6. char result[100];
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10. int num, base;
  11.  cout << "Escribe el numero de base 10: "; cin >> num;
  12.  cout << "Escribe a la base que se desea convertir: "; cin >> base;
  13.  cout << endl << "Numero: ";
  14.  for(int x = 0; x < DecimalToBase(14, 2); x++) cout << result[x];
  15.  cout << endl;
  16.  system("PAUSE");
  17.  return 0;
  18. }
  19.  
  20. int DecimalToBase(long int iDec, int numbase)
  21. {
  22.    char base_digits[16] =
  23. {'0', '1', '2', '3', '4', '5', '6', '7',
  24.  '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  25.  
  26.   int converted_number[64];
  27.   int next_digit, index=0, i=0;
  28.  
  29.   while (iDec != 0)
  30.   {
  31. converted_number[index] = iDec % numbase;
  32. iDec /= numbase;
  33. ++index;
  34.   }
  35.   --index;
  36.   for(  ; index>=0; index--)
  37.   {
  38. result[i] = (base_digits[converted_number[index]]);
  39. i++;
  40.   }
  41.   return i;
  42. }


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Programa en C que cambie de base 10 a cualquier base y viceversa
« Respuesta #2 en: 30 Abril 2012, 03:22 am »

Hola! te marco los errores del codigo:
1º Esta mal la declaracion de residuo te faltaron los corchetes [] ya que es un arreglo
2º printf("%d",residuo); si residuo es un arreglo lo tenes q tratar como a un arreglo, tambien t faltan los []
3º k=conversion(num, base); k toma el valor q retorna conversion() pero esa funcion es d tipo void osea no estas retornando nada.
4º Si declaras coci en el main, esta variable es local al main no se ve en la funcion conversion(); por lo tanto tenes q declarar a coci en la funcion

El codigo para la conversion me parece q tambien esta mal...

Saludos
En línea

Ahorrate una pregunta, lee el man
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Programa en C que cambie de base 10 a cualquier base y viceversa
« Respuesta #3 en: 30 Abril 2012, 05:41 am »

Hola! te marco los errores del codigo:
1º Esta mal la declaracion de residuo te faltaron los corchetes [] ya que es un arreglo
2º printf("%d",residuo); si residuo es un arreglo lo tenes q tratar como a un arreglo, tambien t faltan los []
3º k=conversion(num, base); k toma el valor q retorna conversion() pero esa funcion es d tipo void osea no estas retornando nada.
4º Si declaras coci en el main, esta variable es local al main no se ve en la funcion conversion(); por lo tanto tenes q declarar a coci en la funcion

El codigo para la conversion me parece q tambien esta mal...

Saludos
Gracias por tu respuesta durasno he tratado de arreglar los errores que me has comentado. Sobre la función "conversion" en el que he tratado de ingresar en un arreglo todos los residuos de la división hasta que el cociente sea cero, he cambiado un poco el código para hacer que funcione, lo dejo a continuación:
Código:
#include <stdio.h>
#include <stdlib.h>
int conversion (int num, int base);
int main(int argc, char *argv[])
{
  int num,base,i,k; 
  printf("Programa que convierte un numero de base 10 a cualquier base\n");
  printf("Escribe el numero de base 10\n");
  scanf("%d",&num);
  printf("Escribe a la base que se desea convertir\n");
  scanf("%d",&base);
  conversion (num,base);
  system("PAUSE");
  return 0;
}
int conversion (int num, int base)
{
     int i,coci;
     int residuo[100];
     for(i=0;coci=0;i++){
                         coci=num/base;
                         residuo[i]=num%base;
     return residuo[i];
}
}
Sin embargo no se si dicho ciclo de la función "conversion" haga lo que se pretende debido a que en la función main aunque llamo a la función "conversion" no aparecen dichos valores del arreglo. Te estaría muy agradecido si pudieras decirme como hacer este ciclo (o si está correcto) y como sus resultados guardados en el arreglo residuo puedo hacer que aparezcan en la función main.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Programa en C que cambie de base 10 a cualquier base y viceversa
« Respuesta #4 en: 30 Abril 2012, 22:49 pm »

Hola! xD ahora declaras a coci en la funcion pero sacas a residuo[] del main, y otra cosa q sacaste fue el for del main¿como vas a hacer para imprimir?.. Ademas ahora haces que conversion() retorne un int pero no se lo asignas a nada, esta peor el codigo :P

Te dejo el codigo corregido:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int conversion (int num, int base,int []);
  4. int main(int argc, char *argv[])
  5. {
  6.  int num,base,i,k;
  7.  int residuo[10];
  8.  printf("Programa que convierte un numero de base 10 a cualquier base\n");
  9.  printf("Escribe el numero de base 10\n");
  10.  scanf("%d",&num);
  11.  printf("Escribe a la base que se desea convertir\n");
  12.  scanf("%d",&base);
  13.  k=conversion (num,base,residuo);
  14.   for(i=k-1;i>=0;i--){
  15.                     printf("%d ",residuo[i]);
  16.                     }
  17.                     printf("\n\n");
  18.  system("PAUSE");
  19.  return 0;
  20. }
  21. int conversion (int num, int base, int residuo[])
  22. {
  23.     int i;
  24.     for(i=0;num>0;i++){// fijate la condicion del for
  25.                         residuo[i]=num%base; // primero guardas el residuo
  26.                         num/=base; // despues dividis a num
  27.                         }
  28.     return i;
  29. }
  30.  

Saludos

EDIT: la funcion no sirve para pasar un decimal a hexadecimal
« Última modificación: 30 Abril 2012, 22:51 pm por durasno » En línea

Ahorrate una pregunta, lee el man
ERIK546

Desconectado Desconectado

Mensajes: 44



Ver Perfil WWW
Re: Programa en C que cambie de base 10 a cualquier base y viceversa
« Respuesta #5 en: 1 Mayo 2012, 19:06 pm »

Hola! xD ahora declaras a coci en la funcion pero sacas a residuo[] del main, y otra cosa q sacaste fue el for del main¿como vas a hacer para imprimir?.. Ademas ahora haces que conversion() retorne un int pero no se lo asignas a nada, esta peor el codigo :P

Te dejo el codigo corregido:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int conversion (int num, int base,int []);
  4. int main(int argc, char *argv[])
  5. {
  6.  int num,base,i,k;
  7.  int residuo[10];
  8.  printf("Programa que convierte un numero de base 10 a cualquier base\n");
  9.  printf("Escribe el numero de base 10\n");
  10.  scanf("%d",&num);
  11.  printf("Escribe a la base que se desea convertir\n");
  12.  scanf("%d",&base);
  13.  k=conversion (num,base,residuo);
  14.   for(i=k-1;i>=0;i--){
  15.                     printf("%d ",residuo[i]);
  16.                     }
  17.                     printf("\n\n");
  18.  system("PAUSE");
  19.  return 0;
  20. }
  21. int conversion (int num, int base, int residuo[])
  22. {
  23.     int i;
  24.     for(i=0;num>0;i++){// fijate la condicion del for
  25.                         residuo[i]=num%base; // primero guardas el residuo
  26.                         num/=base; // despues dividis a num
  27.                         }
  28.     return i;
  29. }
  30.  

Saludos

EDIT: la funcion no sirve para pasar un decimal a hexadecimal
Muchísimas gracias durasno por tus respuestas, me han sido de mucha utilidad es exactamente lo que se buscaba, sin embargo hay un parte del código que entiendo lo que hace, más no se como actúa dicho operador: Me refiero a la parte en la función "conversion"
Código:
int conversion (int num, int base, int residuo[])
{
     int i;
     for(i=0;num>0;i++){// fijate la condicion del for
                         residuo[i]=num%base; // primero guardas el residuo
                         num/=base; // despues dividis a num
                         }
     return i;
}
Lo que no entendido del todo es la operación "num/=base", entiendo que este operador realiza "num/base" y de alguna manera recicla ese nuevo valor para utilizarlo como "num" y lo hará hastá que dicha operación sea diferente de cero. Sin embargo este tipo de operador "/=" no lo conozco y te agradecería si me explicarás como funciona. Gracias por todo.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Programa en C que cambie de base 10 a cualquier base y viceversa
« Respuesta #6 en: 2 Mayo 2012, 04:16 am »

Hola! hacer esto num/=base; es lo mismo que hacer num=num/base, osea a num lo divido por base y al resultado de esa division lo guardo en num

Saludos
En línea

Ahorrate una pregunta, lee el man
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Conectar programa java con base de datos en servidor
Java
turion 3 5,286 Último mensaje 23 Julio 2010, 18:47 pm
por turion
Base de datos en cualquier aplicacion?
.NET (C#, VB.NET, ASP)
Sauruxum 4 2,137 Último mensaje 26 Enero 2011, 21:58 pm
por [D4N93R]
Como proteger programa, que consulta base de datos? « 1 2 »
Programación Visual Basic
Fucko 17 5,651 Último mensaje 27 Febrero 2011, 08:26 am
por Fucko
Error programa que cambia un número de base 10 a cualquier base
Programación C/C++
ERIK546 7 3,044 Último mensaje 16 Mayo 2012, 03:59 am
por ERIK546
programa que cambie de base binaria a base decimal en C
Programación C/C++
estudiante_1 1 1,239 Último mensaje 23 Noviembre 2015, 02:37 am
por Deivbid
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines