Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con float (en retorno de valor)

Estas en el tema de Problema con float (en retorno de valor) en el foro de C/C++ en Foros del Web. Buenas, estoy tratando de hacer una función que compare cuantos caracteres en la misma posición son iguales, y devuelva el porcentaje. Destacar que solo hay ...
  #1 (permalink)  
Antiguo 20/04/2009, 07:29
 
Fecha de Ingreso: octubre-2008
Mensajes: 43
Antigüedad: 16 años, 2 meses
Puntos: 0
Problema con float (en retorno de valor)

Buenas, estoy tratando de hacer una función que compare cuantos caracteres en la misma posición son iguales, y devuelva el porcentaje.

Destacar que solo hay que mirar a partir de la posición 6 (es porque es para usar en un programa donde el formato de las cadenas será ese).

El codigo es el siguiente:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. float comparar(char * uno, char * dos);
  4.  
  5. main()
  6. {
  7.     float resultado;
  8.     resultado=comparar("45645;HOLA  ","45645;HOLA   ");
  9.     printf("%f\n");
  10. }
  11.  
  12.  
  13. float comparar(char uno[35], char dos[35])
  14. {
  15.     int i;
  16.     int j;
  17.     char original[35];
  18.     for (i=0;i<35;i++)original[i]=uno[i];
  19.     char segunda [35];
  20.     for (i=0;i<35;i++)segunda[i]=dos[i];
  21.  
  22.    
  23.     i=6;
  24.  
  25.     j=6;
  26.     int iguales;
  27.     iguales=0;
  28.  
  29.     while((original[i]<='Z')&&(original[i]>='A')&&(segunda[j]<='Z')&&(segunda[j]>='A'))
  30.     {
  31.         printf("-->Comparando...'%c' con '%c'\n",original[i],segunda[j]);
  32.         if (original[i]==segunda[j]) iguales++;
  33.         printf("--->Valor de iguales: %d\n",iguales);
  34.         j++;
  35.         i++;
  36.     }
  37.     while((original[i]<='Z')&&(original[i]>='A')) i++;
  38.     while((segunda[j]<='Z')&&(segunda[j]>='A')) j++;
  39.  
  40.     float resultado;
  41.        
  42.  
  43.     if (j<i)  resultado=(iguales/(j-6));
  44.     else  resultado=(iguales/(i-6));
  45.  
  46.  
  47.     printf("-----> Valor de i: %d, y valor de j: %d\n",i,j);
  48.     printf("-----> Returned %f\n",resultado);
  49.  
  50.     return resultado;
  51.    
  52.  
  53. }

Ahora mismo ya le paso yo esas cadenas porque me interesa.

Lo curioso es que el printf de dentro visualiza un uno, ya que son exactamente los mismos caracteres, pero en la funcion main, no tiene el 1 ese, tiene un valor aleatorio, o sea, diferente cada vez que lo ejecuto.


Otra cosa curiosa, es que si llamo a la funcion comparar así resultado=comparar("45645;HOLA ","45645;HHLA ");, se supone que debería devolver 3/(10-6), dentro de la funcion no imprime eso, imprime otro valor, cuando los tiene bien almacenados.


Podeis seguir lo que hace con los printf, es bastante sencillo pero no entiendo el problema.

Última edición por fragNatic; 20/04/2009 a las 15:17
  #2 (permalink)  
Antiguo 21/04/2009, 00:03
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Respuesta: Problema con float (en retorno de valor)

En el main: printf("%f\n");<<< ¿Cual es el float ahi?

Código:
printf("%f\n", resultado);
El segundo problema trata de depurarlo ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 21/04/2009, 03:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 43
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con float (en retorno de valor)

Cita:
Iniciado por Eternal Idol Ver Mensaje
En el main: printf("%f\n");<<< ¿Cual es el float ahi?

Código:
printf("%f\n", resultado);
El segundo problema trata de depurarlo ...
Gracias! No sé como no me di cuenta porque me estaba dando un aviso de que faltaba un argumento.

Sigo mirando lo otro.
  #4 (permalink)  
Antiguo 21/04/2009, 04:12
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con float (en retorno de valor)

Cita:
Iniciado por fragNatic
imprime otro valor
Y así por curiosidad... qué otro valor imprime?
  #5 (permalink)  
Antiguo 21/04/2009, 04:31
 
Fecha de Ingreso: octubre-2008
Mensajes: 43
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con float (en retorno de valor)

Cita:
Iniciado por venkman Ver Mensaje
Y así por curiosidad... qué otro valor imprime?
Eso ya está solucionado, era porque no le pasaba un argumento entonces imprimia cualquier cosa.

Lo de la división también está solucionado ahora, tuve que hacer un casting explicito a float al numerador y al denominador para que devuelva bien el cociente, porque de la otra forma devolvía la divisón entera.

Este fue el cambio:

Código C:
Ver original
  1. if (j<i)  resultado= ((float)iguales/(float)(j-6));
  2.     else  resultado= ((float)iguales/(float)(i-6));
  #6 (permalink)  
Antiguo 21/04/2009, 04:38
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con float (en retorno de valor)

Sí, yo preguntaba por el segundo problema; habías dicho "debería imprimir 3/(10-6) pero imprime otro valor". Por eso preguntaba.

Me alegro de que lo hayas solucionado.
  #7 (permalink)  
Antiguo 21/04/2009, 05:16
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Respuesta: Problema con float (en retorno de valor)

Cita:
Iniciado por fragNatic Ver Mensaje
Gracias! No sé como no me di cuenta porque me estaba dando un aviso de que faltaba un argumento.

Sigo mirando lo otro.
De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 21/04/2009, 08:22
 
Fecha de Ingreso: octubre-2008
Mensajes: 43
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema con float (en retorno de valor)

Cita:
Iniciado por venkman Ver Mensaje
Sí, yo preguntaba por el segundo problema; habías dicho "debería imprimir 3/(10-6) pero imprime otro valor". Por eso preguntaba.

Me alegro de que lo hayas solucionado.
Aah, pues imprima 0 porque estaba tomando el cociente de la divisón entera.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:14.