• Domingo 19 de Mayo de 2024, 08:41

Autor Tema:  Problemas para convertir flotantes  (Leído 1401 veces)

az00smx

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Problemas para convertir flotantes
« en: Miércoles 18 de Febrero de 2009, 02:54 »
0
Hola a todos, soy nuevo en el foro, me llamo arturo, mexicano, estudiantes de ing. en sistemas computacionales de segundo semestre, aun tengo algunos problemas al programar, pero poco a poco van desapareciendo, sin embargo un programa para convertir numeros de base diez flotantes para convertirlos en flotantes binarios(pero no bajo el estandar ieee754, ese es el siguiente, pero no me saldra si no entiendo este a la perfeccion), me esta dando mucha lata, aqui esta el codigo, estoy programando con gcc en linux, por ello solo uso la librerio stdio.h (bueno por ahora), este codigo imprime algo, pero no es ni de lejos lo que quiero, alguna sugerencia o correcion al codigo, tengo otro pero no cuento con el en este momento, varia muy poco, cuando lo consiga lo coloco para que me comenten que onda con el (imprime otra cosa pero tampoco es si quiera cercano a lo que deseo) ah por cierto esta impresion es en una cadena de 16 bits, usando el primer bit para el signo, esto lo pregunto para saber como corregirlo, es probable que este programa ya no me lo tomen en cuenta en calificacion asi que solo es para concoer como debe ir armado y ajustarlo después para la norma ieee 754. Por su atencion gracias.
Código: C
  1.  
  2. #include <stdio.h>
  3.  
  4. int recibe(void);
  5. int conversionflot(void);
  6. int conversionent(void);
  7. float n=0,r=0;
  8. int temp=0,entero=0;
  9. int cadena1[8],cadena2[8];
  10.  
  11. int recibe()
  12. {
  13. printf ("Inserte numero flotante: ");
  14. scanf ("%f", &n);
  15. }
  16.  
  17. int conversionent()
  18. {
  19. int s,mod,d=7;
  20. int t=n;
  21. while(d>0)
  22. {
  23. s=(t/2);
  24. mod=t-(s*2);
  25. cadena1[d]=mod;
  26. d--;
  27. t=s;
  28. }
  29. }
  30.  
  31. int conversionflot()
  32. {
  33. float b,c;
  34. int entero,h,f=0;
  35. entero=n;
  36. while (f>7)
  37. {
  38. b=(entero*0.2);
  39. h=b-entero;
  40. cadena2[f]=h;
  41. f++;
  42. }
  43. }
  44.  
  45. int main (void)
  46. {
  47. int a;
  48. for (a=7;a<=0;a++)
  49. {cadena1[a]=0;
  50. cadena2[a]=0;}
  51. recibe();
  52. conversionent();
  53. conversionflot();
  54. printf ("%d %d",cadena1,cadena2);
  55. }
  56.  
  57.  

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: Problemas para convertir flotantes
« Respuesta #1 en: Miércoles 18 de Febrero de 2009, 05:30 »
0
No me tome la molestia de revisar si el codigo hace lo que debe o no hacer pero te sugiero

1) Sacale provecho a las funciones que declaraste....al tener puras variables globales en tu programa, el sentido de estas (las funciones) se pierde totalmente...mas cuando en teoria deberian recibir parametros y/o devolver datos

2) Pensaria que ese codigo debe producirte varios warnings...las funciones tipo int deben retornar valores

3) En la funcion int conversionflot()...declaras la variable c, que no usas para nada...otro warning

4) Este ciclo no hará nada jamás en el main salvo gastar tiempo

Código: C
  1. for (a=7;a<=0;a++)
  2. {
  3.  cadena1[a]=0;
  4.  cadena2[a]=0;
  5. }
  6.  

5)
Código: C
  1. printf ("%d %d",cadena1,cadena2);
  2.  
en el main...probablemente otro warning...y asumo estaras imprimiendo aca siempre basura...quien sabe que indice de los vectores estaras imprimiendo ahi...o que espacio de memoria

Saludos!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Problemas para convertir flotantes
« Respuesta #2 en: Miércoles 18 de Febrero de 2009, 16:03 »
0
Como bien dice betopin:

Código: C
  1. int cadena1[8],cadena2[8];
  2. printf ("%d %d",cadena1,cadena2);
  3.  
No debes olvidar que cadena1 y cadena2 son arrays, y por tanto, punteros. Con tu sentencia printf() lo que haces es imprimir la dirección de memoria en que se encuentra tu array. Para imprimir los contenidos, debes hacer un bucle que recorra los arrays e imprima cada elemento, esto es:

Código: C
  1. //Primera cadena
  2. for (i=0;i<8;i++)
  3.     printf("%d", cadena1[i];
  4. printf("n");
  5. //Segunda cadena
  6. for (i=0;i<8;i++)
  7.     printf("%d", cadena2[i];
  8.  
Te aconsejo que repases bien las particularidades de C en un buen libro para evitar estas confusiones, sobre todo tener claro cómo se manejan los tipos de datos.

Salud

az00smx

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Problemas para convertir flotantes
« Respuesta #3 en: Miércoles 18 de Febrero de 2009, 23:22 »
0
Bueno gracias a los que me han respondido, hare anotaciones de esto, la verdad ignoraba que para evitar conflictos de impresion de basura debia imprimir en un for, y contradiciendolos, pues no me marca ningun warning, solo uno cuando intente guardar los valores de ambas cadenas en una nueva mucho mas larga para guardarlas a ambas, con la funcion sprintf, por lo que decidi desecharla y continuar con simples printf. Gracias.