Transformación integer decimal a string binario
4 participantes
Página 1 de 1.
Transformación integer decimal a string binario
A ver si alguno de los maestros de C puede decirme por qué no me rula este engendro (que creo que es una de las claves para hacer la práctica 1):
Cuando intento compilarlo me salta el siguiente error:
¿Alguna idea?
- Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main ()
{
long numerito=0;
printf("Introduce un número: "); //leer el numero
scanf("%d", &numerito);
printf("Decimal: %d\nHexadecimal: %X\nOctal: %o\nBinario: %s\n", numerito, numerito, numerito, a_binario(numerito)); //imprimir los resultados convertidos, el único problema es el binario, que no tiene conversión automática
}
char *a_binario(decimal) //función que devuelve un puntero al caracter de inicio de una cadena de caracteres
int decimal;
{
int i;
char *resultado;
*resultado='\0';
for (i=0; decimal>1; i++ ){ //esta es la conversion propiamente dicha
*(resultado+i)=((decimal%2)+'0');
decimal = decimal/2;
}
*(resultado+i)=((decimal%2)+'0'); //añadimos el ultimo digito
*(resultado+(++i))='\0'; //y cerramos la cadena
return(resultado); //devolvemos el puntero
}
Cuando intento compilarlo me salta el siguiente error:
- Código:
practica1.c:16: error: tipos en conflicto para ‘a_binario’
practica1.c:12: error: la declaración implícita previa de ‘a_binario’ estaba aquí
¿Alguna idea?
Miggonz- Amo del foro
- Cantidad de envíos : 427
Fecha de inscripción : 14/10/2007
Re: Transformación integer decimal a string binario
Nuse que quieres hacer en ese codigo, epro como recomendacion yo siempre opngo las declaraciones de funciones entre los #defines y el main. Alli toda la declaracion de mis funciones y lugeo ya las implementare.
Weno esa recomendacion la dejo, epro el error es que enterito en el main es long y el parametro de a_binario es int. Tipos distintos
Weno esa recomendacion la dejo, epro el error es que enterito en el main es long y el parametro de a_binario es int. Tipos distintos
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Transformación integer decimal a string binario
He cambiado los tipos y he puesto la función "a_binario" delante del main y ya compila, pero ahora me da problemas como que la cadena tiene caracteres raros y mierdas de esas, yo me cago en la madre que parió a los punteros...
Miggonz- Amo del foro
- Cantidad de envíos : 427
Fecha de inscripción : 14/10/2007
Re: Transformación integer decimal a string binario
Miggonz escribió:He cambiado los tipos y he puesto la función "a_binario" delante del main y ya compila, pero ahora me da problemas como que la cadena tiene caracteres raros y mierdas de esas, yo me cago en la madre que parió a los punteros...
A ver es que no creo que haga falta usar punteros o no muxo, de todas maneras no le veo utiliddad a tu prograa, ya que lees el numero como entero (aunque sea long) y claro eso te da hasta 32000 o 64000 depende del sistema, pero es que tienes que leer 80 cifras osea: 12345678901234567890123456789012345678901234567890123456789012345678901234567890
ese numero te lo podrian meter, a ver como metes eso en un entero o en cunalquier dato decente. La cosa es leerlo como cadena y operar... Operar ni se XD
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Re: Transformación integer decimal a string binario
en C standar no se puede operar (ni representar como numero ) el numero
12345678901234567890123456789012345678901234567890123456789012345678901234567890
por ejemplo.
puede que haya librerias para eso pero no seran las estandar, desde mi
punto de vista el objetivo de la practica es solo las funciones de
conversion de numeros .
para pasar una cadena string a integer se puede utilizar la funcion atoi(cadena) , pero claro solo se puede representar hasta 2147483647 (10 cifras )
12345678901234567890123456789012345678901234567890123456789012345678901234567890
por ejemplo.
puede que haya librerias para eso pero no seran las estandar, desde mi
punto de vista el objetivo de la practica es solo las funciones de
conversion de numeros .
para pasar una cadena string a integer se puede utilizar la funcion atoi(cadena) , pero claro solo se puede representar hasta 2147483647 (10 cifras )
polly- Cantidad de envíos : 3
Fecha de inscripción : 16/10/2007
Re: Transformación integer decimal a string binario
Ya, ya sé que no sirve de mucho esto, pero me puse a hacerlo como preparación xD
Miggonz- Amo del foro
- Cantidad de envíos : 427
Fecha de inscripción : 14/10/2007
Re: Transformación integer decimal a string binario
He encontrado este programa que te cambia de hexadecimal a binario pasando primero a codigo decimal.
Pero la verdad es que no lo entiendo bien, principalmente porque no conzco la mayoría de funciones predefinidas que utiliza.
Si os sirve, pues bien, si no, pues ya tengo un mensaje más XD
Pero la verdad es que no lo entiendo bien, principalmente porque no conzco la mayoría de funciones predefinidas que utiliza.
- Código:
#include
#include
#include
#include
#include
int Search(char ch)
{
int i;
char *Cad="0123456789abcdefghijklmnopqrstuvwzyz";
for(i=0;i<36;i++){
if(Cad[i] == ch)
break;
}
return i;
}
int Converter(char *strNum,int iBase)
{
int i,iLenght,iTemp;
int iRes=0;
iTemp=iLenght=strlen(strNum);
iLenght--;
for(i=0;i<iTemp;i++,iLenght--)
iRes+=(int)(Search(strNum[i])*pow(iBase,iLenght));
return iRes;
}
int main(int argc,char *argv[])
{
char *strNum,*Out;
int iRes;
strNum=new char[20];
assert(strNum!=0);
Out=new char[20];
assert(Out!=0);
cout << "Introduza un numero: ";
cin.getline(strNum,20);
iRes=Converter(strNum,16);
cout << "el numero " << strNum << " en decimal es " << iRes << endl;
itoa(iRes,Out,2);
cout << "y en binario es: " << Out << endl;
system("pause");
delete [] strNum;
delete [] Out;
return 0;
}
Si os sirve, pues bien, si no, pues ya tengo un mensaje más XD
Elía- Amo del foro
- Cantidad de envíos : 325
Fecha de inscripción : 14/10/2007
Re: Transformación integer decimal a string binario
Elía escribió:He encontrado este programa que te cambia de hexadecimal a binario pasando primero a codigo decimal.
Pero la verdad es que no lo entiendo bien, principalmente porque no conzco la mayoría de funciones predefinidas que utiliza.
- Código:
#include
#include
#include
#include
#include
int Search(char ch)
{
int i;
char *Cad="0123456789abcdefghijklmnopqrstuvwzyz";
for(i=0;i<36;i++){
if(Cad[i] == ch)
break;
}
return i;
}
int Converter(char *strNum,int iBase)
{
int i,iLenght,iTemp;
int iRes=0;
iTemp=iLenght=strlen(strNum);
iLenght--;
for(i=0;i
iRes+=(int)(Search(strNum[i])*pow(iBase,iLenght));
return iRes;
}
int main(int argc,char *argv[])
{
char *strNum,*Out;
int iRes;
strNum=new char[20];
assert(strNum!=0);
Out=new char[20];
assert(Out!=0);
cout << "Introduza un numero: ";
cin.getline(strNum,20);
iRes=Converter(strNum,16);
cout << "el numero " << strNum << " en decimal es " << iRes << endl;
itoa(iRes,Out,2);
cout << "y en binario es: " << Out << endl;
system("pause");
delete [] strNum;
delete [] Out;
return 0;
}
Si os sirve, pues bien, si no, pues ya tengo un mensaje más XD
ese codigo juraria que es de c++, ya que la salida de datos la hace con streams de entrada salida cuando hace cout y usa simbolos << es parecido al printf. Pero weno digo yo que el codigo de transformacion funcionara (auqnue no me acuerdo para que vale assert ni si c la tiene esa funcion)
djcloud- Amo del foro
- Cantidad de envíos : 389
Edad : 39
Fecha de inscripción : 11/10/2007
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.