| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
soso_2
Registrado: 20 Sep 2007 Mensajes: 14 Ubicación: bbb
| Publicado: 14/11/2007 5:12 pm | | | Título: tengo un problema en c++ ayuda por favor |
| es un programa en c++ que me dice que lo convierta en binari y en base 4,8 y hexadecimal pero nose como esto es lo que hecho pero me da un resultado erroneo /*programa que da el codigo base 2,4,8,16*/ #include<stdio.h> #include<conio2.h> int main() { int a,b,j,i,k,x[15];
do { gotoxy(8,5); printf("Este programa nos va a dar el numero en base 2)\n4)\n \n16)\n"); gotoxy(15,7); printf("dime la base a la que se va a comvertir\n"); scanf("%d",&k); printf("Dime el numero que deseas conocer: "); scanf("%d",&a); if(k==2) { for(i=0;i<=14;i++) { x[i]=a%2; a=a/2; } gotoxy(15,11); printf("Su numero binario es: \n"); gotoxy(37,12); for(j=14;j>=0;j--) { printf("%d",x[j]); } } if(k==4) { gotoxy(8,5); for(i=0;i<=14;i++) { x[i]=a%4; a=a/4; } gotoxy(15,11); printf("Su numero base 4 es: \n"); gotoxy(37,12); for(j=14;j>=0;j--) { printf("%d",x[j]); } } if(k== { gotoxy(8,5); for(i=0;i<=14;i++) { x[i]=a%8; a=a/8; } gotoxy(15,11); printf("Su numero octal es: \n"); gotoxy(37,12); for(j=14;j>=0;j--) { printf("%d",x[j]); } } if(k==16) { gotoxy(8,5); |
|
| Volver arriba | |
 |
david_celta
Registrado: 02 Jun 2005 Mensajes: 83
| Publicado: 14/11/2007 6:11 pm | | | Título: |
| A ver segun tu codigo para convertir a binario (base 2)
| Código: | if(k==2) { for(i=0;i<=14;i++) { x[i]=a%2; a=a/2; } gotoxy(15,11); printf("Su numero binario es: \n"); gotoxy(37,12); for(j=14;j>=0;j--) { printf("%d",x[j]); } }
|
Ingresemos a=3, k=2 ( 3 en binario=11): x[0]=3%2=1, a=3/2=1 x[1]=1%2=1, a=1/2=0 x[2]=0%2=0, a=0/2=0 x[3]=0%2=0, a=0/2=0 ... x[14]=0%2=0, a=0/2=0 Resultado=000000000000011 (lo cual es igual a 11 dado que los ceros a la izquierda no cuentan)
Segun eso, esta bien (con la salvedad que se deberia validar ciertas cosas)
Dime ¿cual es el error? ¿para que numeros/bases no funciona? o ¿que resultado te da el programa? _________________ Rueda y rueda la vida, rueda y rueda el balón... y detras de la esperanza, palpita cada corazón. |
|
| Volver arriba | |
 |
digies
Registrado: 18 Nov 2005 Mensajes: 311 Ubicación: Cono Sur
| Publicado: 14/11/2007 6:13 pm | | | Título: |
| El código se asemeja más a C que a C++. Así como está, más bien se parece a un jeroglífico imposible de interpretarlo, por mencionar que hay una "carita" dentro (o fuera?) de un if, además le faltan algunas instrucciones muy importantes como la función return("numero_magico" o su correspondiente macro), y el cierre de todo el bloque con la llave '}'. También defines una varible (b) que ni le das uso. El compilador debería arrojarte una docena de errores. Coloca dicho código entre las etiquetas [code]tu_codigo[ /code] para que por lo menos se entienda algo. Y evita el uso de conio.
Un saludo |
|
| Volver arriba | |
 |
|
rir3760

Registrado: 01 Oct 2004 Mensajes: 3769 Ubicación: Mexico
| Publicado: 15/11/2007 8:13 am | | | Título: |
| Aparte de lo ya mencionado deberia utilizar el motor de busqueda ya que deben existir por lo menos media docena de ejemplos sobre como realizar conversiones a distintas bases.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
soso_2
Registrado: 20 Sep 2007 Mensajes: 14 Ubicación: bbb
| Publicado: 15/11/2007 1:34 pm | | | Título: aclarando |
| | el error principalmente es hexadecimal el cual me da el resultado del un al diez pero no me muestra las letras que representan del 10 al 15 |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3769 Ubicación: Mexico
| Publicado: 15/11/2007 3:46 pm | | | Título: |
| No es posible ayudarte con esa parte ya que no publicaste el codigo fuente completo de tu programa, el bloque que mencionas (donde se realiza la conversion a base 16) falta.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
soso_2
Registrado: 20 Sep 2007 Mensajes: 14 Ubicación: bbb
| Publicado: 16/11/2007 2:35 pm | | | Título: esto es lo que faltaba |
| f(k==16) { gotoxy(8,5); for(i=0;i<=16;i++) { x[i]=a%16; a=a/16; } gotoxy(15,11); if(x[i]==10) x[i]='A'; if(x[i]==11) x[i]='B'; if(x[i]==12) x[i]='c'; if(x[i]==13) x[i]='D'; if(x[i]==14) x[i]='E'; if(x[i]==15) x[i]='F'; printf("Su numero hexadecimal es:\n"); gotoxy(37,12); for(j=14;j>=0;j--) { printf("%d",x[j]); } } gotoxy(5,16); printf("Deseas continuar con otro numero presiona 1 sino cualquier numero :"); scanf("%d",&b); } while(b==1); getch(); } |
|
| Volver arriba | |
 |
david_celta
Registrado: 02 Jun 2005 Mensajes: 83
| Publicado: 16/11/2007 5:16 pm | | | Título: |
| | Código: | for(i=0;i<=16;i++) { x[i]=a%16; a=a/16; } gotoxy(15,11); if(x[i]==10) x[i]='A'; if(x[i]==11) x[i]='B'; if(x[i]==12) x[i]='c'; if(x[i]==13) x[i]='D'; if(x[i]==14) x[i]='E'; if(x[i]==15) x[i]='F'; printf("Su numero hexadecimal es:\n"); gotoxy(37,12); for(j=14;j>=0;j--) { printf("%d",x[j]); }
|
Ahi en esa parte lo que estaria mal es una llave { aqui:
| Código: | for(i=0;i<=16;i++) { x[i]=a%16; a=a/16; }
|
La segunda llave esta mal colocada porque dejas fuera la conversion a letras, deberia ser asi:
| Código: | for(i=0;i<=16;i++) { x[i]=a%16; a=a/16; //} //gotoxy(15,11); if(x[i]==10) x[i]='A'; if(x[i]==11) x[i]='B'; if(x[i]==12) x[i]='c'; if(x[i]==13) x[i]='D'; if(x[i]==14) x[i]='E'; if(x[i]==15) x[i]='F'; }
|
_________________ Rueda y rueda la vida, rueda y rueda el balón... y detras de la esperanza, palpita cada corazón. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3769 Ubicación: Mexico
| Publicado: 17/11/2007 9:54 am | | | Título: |
| Ese bloque de codigo (el que publico soso_2) tiene varias deficiencias, aparte de las ya mencionadas por david_celta ese bloque se ejecuta un numero fijo sin importar si el valor es cero (en ese caso tendria que terminarse el bucle).
Una de las formas mas sencillas de obtener una cadena con la representacion de un numero en una base dada es dividir este continuamente entre la base y al mismo tiempo ir almacenando cada uno de esos digitos en su posicion correcta. Si bien este es un proceso mas elaborado y se desperdicia algo de memoria tiene la ventaja de realizar solo el numero necesario de divisiones.
Un programa de ejemplo en C estandar para obtener la representacion hexadecimal es:
| Código: | #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <time.h>
#define BITS_POR_INT (sizeof(int) * CHAR_BIT)
int main(void) { char cadena[BITS_POR_INT + 1]; char *p; int numero; int aux; int digito; srand((unsigned) time(NULL)); aux = numero = rand(); p = cadena + BITS_POR_INT; *p = '\0'; do { digito = aux % 16; *--p = digito + (digito < 10 ? '0' : 'A' - 10); }while ((aux /= 16) > 0); printf("%d == %s\n", numero, p); printf("%d == %x\n", numero, numero); return EXIT_SUCCESS; } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
david_celta
Registrado: 02 Jun 2005 Mensajes: 83
| Publicado: 17/11/2007 1:04 pm | | | Título: |
| Si es alguien que recien esta aprendiendo ese ultimo codigo.........
(Tambien es importante mencionar que es suficientemente probable que el resultado deba mostrarse con 16 digitos sin importar si el numero ingresado es 0,1,... etc)
Cuestiones de los profesores.
return EXIT_SUCCESS; _________________ Rueda y rueda la vida, rueda y rueda el balón... y detras de la esperanza, palpita cada corazón. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3769 Ubicación: Mexico
| Publicado: 18/11/2007 11:14 am | | | Título: |
| Tienes razon en cuanto al uso del operador condicional "? :", este puede eliminarse en favor del uso (mucho mas simple) de un array. Aparte de eso las construcciones utilizadas son basicas para sacar provecho del lenguaje: operadores y aritmetica de punteros.
La nueva version en C estandar seria:
| Código: | #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <time.h>
#define BITS_POR_INT (sizeof(int) * CHAR_BIT)
int main(void) { char cadena[BITS_POR_INT + 1]; char ch[] = "0123456789ABCDEF"; char *p; int numero; int aux; srand((unsigned) time(NULL)); aux = numero = rand(); p = cadena + BITS_POR_INT; *p = '\0'; do { *--p = ch[aux % 16]; }while ((aux /= 16) > 0); printf("%d == %s\n", numero, p); printf("%d == %x\n", numero, numero); return EXIT_SUCCESS; } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
|