Autor
|
Tema: Programa en C que cambie de base 10 a cualquier base y viceversa (Leído 37,289 veces)
|
ERIK546
|
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;#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
Mensajes: 195
|
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 #include <iostream> using namespace std; int DecimalToBase(long int iDec, int numbase); char cHexa[] = {'A','B','C','D','E','F'}; char result[100]; int main(int argc, char *argv[]) { int num, base; cout << "Escribe el numero de base 10: "; cin >> num; cout << "Escribe a la base que se desea convertir: "; cin >> base; cout << endl << "Numero: "; for(int x = 0; x < DecimalToBase(14, 2); x++) cout << result[x]; cout << endl; system("PAUSE"); return 0; } int DecimalToBase(long int iDec, int numbase) { char base_digits[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; int converted_number[64]; int next_digit, index=0, i=0; while (iDec != 0) { converted_number[index] = iDec % numbase; iDec /= numbase; ++index; } --index; for( ; index>=0; index--) { result[i] = (base_digits[converted_number[index]]); i++; } return i; }
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
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
|
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:#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
Mensajes: 373
|
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 Te dejo el codigo corregido: #include <stdio.h> #include <stdlib.h> int conversion (int num, int base,int []); int main(int argc, char *argv[]) { int num,base,i,k; int residuo[10]; printf("Programa que convierte un numero de base 10 a cualquier base\n"); printf("Escribe el numero de base 10\n"); printf("Escribe a la base que se desea convertir\n"); k=conversion (num,base,residuo); for(i=k-1;i>=0;i--){ } return 0; } 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; }
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
|
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 Te dejo el codigo corregido: #include <stdio.h> #include <stdlib.h> int conversion (int num, int base,int []); int main(int argc, char *argv[]) { int num,base,i,k; int residuo[10]; printf("Programa que convierte un numero de base 10 a cualquier base\n"); printf("Escribe el numero de base 10\n"); printf("Escribe a la base que se desea convertir\n"); k=conversion (num,base,residuo); for(i=k-1;i>=0;i--){ } return 0; } 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; }
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"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
Mensajes: 373
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Conectar programa java con base de datos en servidor
Java
|
turion
|
3
|
5,937
|
23 Julio 2010, 18:47 pm
por turion
|
|
|
Base de datos en cualquier aplicacion?
.NET (C#, VB.NET, ASP)
|
Sauruxum
|
4
|
3,162
|
26 Enero 2011, 21:58 pm
por [D4N93R]
|
|
|
Como proteger programa, que consulta base de datos?
« 1 2 »
Programación Visual Basic
|
Fucko
|
17
|
7,955
|
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
|
5,801
|
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
|
2,701
|
23 Noviembre 2015, 02:37 am
por Deivbid
|
|