/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

tengo un problema en c++ ayuda por favor

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
soso_2



Registrado: 20 Sep 2007
Mensajes: 14
Ubicación: bbb

MensajePublicado: 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)\nCool\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==Cool
{
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
Dirección AIM Yahoo Messenger
david_celta



Registrado: 02 Jun 2005
Mensajes: 83

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
Dirección AIM Yahoo Messenger
rir3760



Registrado: 01 Oct 2004
Mensajes: 3769
Ubicación: Mexico

MensajePublicado: 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

MensajePublicado: 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
Dirección AIM Yahoo Messenger
david_celta



Registrado: 02 Jun 2005
Mensajes: 83

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com