| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
phicar
Registrado: 19 Nov 2007 Mensajes: 6 Ubicación: 127.0.0.1
| Publicado: 26/11/2007 10:00 am | | | Título: unir cadenas |
| bueno pues primero què màs es mi primer post llevo un par de dìas viendo el foro y està muy àspero...bueno lo que pasa es que estoy un programilla por que recien empiezo con c....ya lo hice con vb pero quiero mudarl como para ir aprendiendo..y pues hay una parte del programa en vb
y pues se como hacer mod's en c y toda la cosa,...el problema viene cuàndo intento unir las cadenas en vb es con el "&"..y pues vi una funciòn despuès de investigar que se llama strcat que une dos cadenas,pero los mios son otros tipos de datos....entonces no se
entonces viene la cosa
| Código: | while(deci > 0){ z = z une deci % 2; deci = deci / 2; } |
donde està el une es donde quiero unir..y pues lo que pense fue pues bueno strcat(z,deci % 2)
| Código: | while(deci > 0){ z = strcat(z,deci % 2); deci = deci / 2; } |
y quedarìa asì..pero no me funciona..nose si me puedan ayudar..que pena la ignorancia y gracias
phicar:):) |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3837 Ubicación: Mexico
| Publicado: 26/11/2007 10:08 am | | | Título: |
| Lo que puedes hacer es utilizar dos cadenas literales ("0" y "1") e indicar cual de estas utilizar mediante el operador condicional.
El fragmento modificado seria:
| Código: | while (deci > 0){ z = strcat(z, (deci % 2) == 0 ? "0" : "1"); deci = deci / 2; } |
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 | |
 |
phicar
Registrado: 19 Nov 2007 Mensajes: 6 Ubicación: 127.0.0.1
| Publicado: 26/11/2007 10:09 am | | | Título: |
| gracias..entonces no andaba tan perdido...
suerte |
|
| Volver arriba | |
 |
|
digies
Registrado: 18 Nov 2005 Mensajes: 377 Ubicación: Cono Sur
| Publicado: 26/11/2007 10:11 am | | | Título: |
| El prototipo de la función strcat es: char *strcat(char*s1, const char *s2); y se encuentra en el header <string.h>
Un saludo |
|
| Volver arriba | |
 |
david_celta
Registrado: 02 Jun 2005 Mensajes: 151
| Publicado: 26/11/2007 12:16 pm | | | Título: |
| Tambien se podria hacer con un sprintf
int num=10; char cad[5]="gol"; char otra[15]; sprintf(otra,"%s # %d",cad,num); printf(otra);
Bueno es otro ejemplo _________________ In all your fantasies, you always knew that man and mystery...
...were both in you... |
|
| Volver arriba | |
 |
phicar
Registrado: 19 Nov 2007 Mensajes: 6 Ubicación: 127.0.0.1
| Publicado: 26/11/2007 1:30 pm | | | Título: |
| bueno gracias a los que han respuesto...pero no me funca la funciòn que quiero....mmm se las dejo en vb que me funca perfecto y en c que siempre me bota un -369394 jeje
vb| Código: |
Public Function dec(i As String) As Long Dim n As Integer Dim a As Integer dec = 0 For n = Len(i) To n = 1 Step -1 On Error Resume Next dec = dec + Val(Val(Mid(i, n, 1)) * Val(2 ^ a)) On Error Resume Next a = a + 1
Next
End Function
|
esa me funciona perfecto...pues yo la programe y llevo ya mi tiempo programando en vb pero al momjento de pasarla a c..hoy empece..entonces la hice asì....tengo problemas con los tipos y todo
| Código: | int dec(char bin[10]) { int a; int n; int deci; int dos; dos = 2; a = 0; for(n = strlen(bin)-1;n > (-1);--n){ deci = deci + ((bin[n]) * ( pow(dos,a) )); a++; } return deci; } |
pues gracias...si me pueden ayudar...
le he cambiado resto de veces los tipos de datos y me sigue dando lo mismo...entonces no se..la tengo con la misma lògica que la de vb-..
suerte
phicar:):) |
|
| Volver arriba | |
 |
|
rir3760

Registrado: 01 Oct 2004 Mensajes: 3837 Ubicación: Mexico
| Publicado: 26/11/2007 4:10 pm | | | Título: |
| Los errores en esa funcion son utilizar la variable "deci" sin antes inicializarla a cero y utilizar directamente el valor del caracter "bin[n]" (para obtener el digito se le debe restar '0').
Si el objetivo de esa funcion es tomar la representacion en cadena de un numero en base 2 y en base a este obtener un entero no necesitas (en C) calcular la longitud de la cadena como tampoco concatenar cadenas.
El algoritmo es muy sencillo: mientras el caracter procesado no sea el caracter de fin de cadena '\0' tomas el valor del acumulado, lo multiplicas por dos y le sumas el digito siendo procesado.
Esa funcion en C seria asi:
| Código: | int dec(char *cadena) { int numero; int i; numero = 0; for (i = 0; cadena[i] != '\0'; i++) numero = numero * 2 + (cadena[i] - '0'); return numero; } |
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: 151
| Publicado: 26/11/2007 5:29 pm | | | Título: |
| Primer post:
Ultimo post:
| Código: | Public Function dec(i As String) As Long Dim n As Integer Dim a As Integer dec = 0 For n = Len(i) To n = 1 Step -1 On Error Resume Next dec = dec + Val(Val(Mid(i, n, 1)) * Val(2 ^ a)) On Error Resume Next a = a + 1 Next
End Function
|
Debo estar ciego porque no veo el operador & (concatenacion) de vb por ningun lado en el ultimo post ¿sera que ya cambiaron de tema? No acabo de darme cuenta.
Te falta lo del cero '0' que alguien ya mencionó (por eso del Ascii, el caracter '0' es el numero 48, el '1' es el 49 y asi.......... para "convertirlo" a entero se hace esa gran resta) _________________ In all your fantasies, you always knew that man and mystery...
...were both in you... |
|
| Volver arriba | |
 |
phicar
Registrado: 19 Nov 2007 Mensajes: 6 Ubicación: 127.0.0.1
| Publicado: 27/11/2007 2:13 pm | | | Título: nada... |
| bueno pues que les digo gracias..que pena por cambiar el tema pero pongo el còdigo que me diste con los {}..y tales..y modifique mi còdigo con lo que dijeron y da una vaina igual pero no es el resultado que espero..mno me funciona...
hay està el que hice y el que me dio rir3760
| Código: | int dec(char *bin) { int a; int n; int deci; int dos; dos = 2; deci = 0; a = 0; for(n = strlen(bin) - 1;n > (-1);--n){ deci = (deci) + ((bin[n] - '0') * ( pow(dos,a) )); a++; } return deci; }
int deci(char *cadena) { int numero; int i;
numero = 0; for (i = 0; cadena[i] != '\0'; ++i){ numero = numero * 2 + (cadena[i] - '0');}
return numero; }
|
no se si ya es que soy negado..pero no me funca..y aplico la misma lògica que le di al de vb y me funca perfecto.. pues obviamente le agrege lo del - '0' que me dijeron...y nada...
entocnes no se...seguire dandole a ver...suerte phicar:):) |
|
| Volver arriba | |
 |
|
david_celta
Registrado: 02 Jun 2005 Mensajes: 151
| Publicado: 27/11/2007 2:30 pm | | | Título: |
| Public Function dec(i As String) As Long Dim n As Integer Dim a As Integer dec = 0 For n = Len(i) To n = 1 Step -1 On Error Resume Next dec = dec + Val(Val(Mid(i, n, 1)) * Val(2 ^ a)) On Error Resume Next a = a + 1 Next End Function
Intentare pasar tu vb a c, a ver:
long dec(char i[]) { int n; int a=0; int resultado=0;
for(n=strlen(i);n>=1;n--) { resultado=resultado+(i[n-1]-'0')*(int)pow(2,a); a=a+1; }
return resultado; }
Ahi esta, prueba si funciona _________________ In all your fantasies, you always knew that man and mystery...
...were both in you... |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3837 Ubicación: Mexico
| Publicado: 27/11/2007 4:15 pm | | | Título: |
| Tu funcion aun cuando tiene varios elementos innecesarios funciona correctamente. Para encontrar el error tendriamos que revisar el codigo fuente completo del programa y tendrias que indicarnos cual es exactamente el mensaje de error (o comportamiento erroneo), indicar simplemente "no funca" es demasiado vago.
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 | |
 |
phicar
Registrado: 19 Nov 2007 Mensajes: 6 Ubicación: 127.0.0.1
| Publicado: 27/11/2007 6:17 pm | | | Título: nada... |
| visto que ninguna de las tres me funciona(la de rir,la mia y la de celta) pero me botan lo mismo...debe ser la otra parte del còdigo....mm...
| Código: | #include <stdlib.h> #include <string.h> #include <math.h> int dec(char *bin); int deci(char *cadena); long decim(char i[]); int main() { char hola[50]; char sola[50]; char binario[10]; int a; int b; b = 0; long p; fgets(hola, 50 ,stdin); p = sizeof(hola); for(a=strlen(hola)-1;a>(-1);--a){ sola[b]=hola[a]; b++; } sola[b]='\0';
printf(" este es hola : %s y este es sola xP : %s y este es el tamaño : %i \n",hola,sola,p);
system("pause>null"); printf("imprima numero binario"); scanf("%ld",binario);//fgets(binario, 10 ,stdin); printf("nùmero binario:%d \n nùmero binario:%ld",dec(binario),decim(binario));
return 0; } int dec(char *bin) { int a; int n; int deci; int dos; dos = 2; deci = 0; a = 0; for(n = strlen(bin) - 1;n > (-1);--n){ deci = (deci) + ((bin[n] - '0') * ( pow(dos,a) )); a++; } return deci; }
int deci(char *cadena) { int numero; int i;
numero = 0; for (i = 0; cadena[i] != '\0'; ++i){ numero = numero * 2 + (cadena[i] - '0');}
return numero; } long decim(char i[]) { int n; int a=0; int resultado=0;
for(n=strlen(i);n>=1;n--) { resultado=resultado+(i[n-1]-'0')*(int)pow(2,a); a=a+1; }
return resultado; } |
el scanf està comentado con el fgets.por que estaba intentando con los dos...xDD
suerte...que pena haber sido tan "vago" en la explicaciòn..y me dan con scanf...eje:101=53..con fgets 101 = -28----siendo que 101 = 5 2^2 + 2^0 = 5
suerte y de nuevo gracias... |
|
| Volver arriba | |
 |
|
david_celta
Registrado: 02 Jun 2005 Mensajes: 151
| Publicado: 27/11/2007 7:29 pm | | | Título: |
| Ahi esta: scanf("%ld",binario);
En vez de "ld" va "s" porque estas ingresando una cadena y no un numero largo, una cadena "101" no un numero 101. Por eso no funciona, cambiale a "s" y prueba. _________________ In all your fantasies, you always knew that man and mystery...
...were both in you... |
|
| Volver arriba | |
 |
phicar
Registrado: 19 Nov 2007 Mensajes: 6 Ubicación: 127.0.0.1
| Publicado: 27/11/2007 7:45 pm | | | Título: grax |
| | xP..gracias por todo..ya me voy entendiendo con este berraco..gracias d nuevo..y pues espero no volver a preguntar...xDD |
|
| Volver arriba | |
 |
|
|