elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Array de punteros a función <=> FLT_MIN - FLT_MAX [C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Array de punteros a función <=> FLT_MIN - FLT_MAX [C]  (Leído 2,912 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Array de punteros a función <=> FLT_MIN - FLT_MAX [C]
« en: 7 Mayo 2016, 16:36 pm »

Hola, gente.
Tengo un inconveniente en la validación para que no se supere el máximo y el mínimo que soporta el tipo float, en internet no encuentro nada relacionado y modifique el código muchas veces y nada, solo me deja ingresar números negativos.

Código
  1. #include <stdio.h>
  2. #include <float.h>
  3.  
  4. float suma( const float o1, const float o2 );
  5. float resta( const float o1, const float o2 );
  6. float division( const float o1, const float o2 );
  7. float multiplicacion( const float o1, const float o2 );
  8.  
  9.  
  10. int main( void ){
  11. float (*ptrf[]) ( float, float ) = {suma, resta, division, multiplicacion};
  12. int ok, ch, opc;
  13. float opeUno, opeDos, result;
  14.  
  15. printf( "\n ========== Calculadora ==========\n\n" );
  16.  
  17. do{
  18. printf("\n Introduzca el primer operando....:");
  19. ok = scanf("%g", &opeUno) == 1 && opeUno <= FLT_MIN && opeUno <= FLT_MAX;
  20. while ((ch = getchar()) != EOF && ch != '\n');
  21. }while(!ok);
  22.  
  23. do{
  24. printf("\n Introduzca el segundo operando...:");
  25. ok = scanf("%g", &opeDos) == 1 && opeDos <= FLT_MIN && opeDos <= FLT_MAX;
  26. while ((ch = getchar()) != EOF && ch != '\n');
  27. }while(!ok);
  28.  
  29. printf( "\n 1 - Suma \n 2 - Resta \n 3 - Divide \n 4 - Multiplica" );
  30. do{
  31. printf( "\n\n Ingrese una opcion...:" );
  32. ok = scanf("%d", &opc) == 1 && opc >= 1 && opc <= 4;
  33. while ((ch = getchar()) != EOF && ch != '\n');
  34. }while(!ok);
  35.  
  36. result = ( ptrf[opc-1] ) ( opeUno, opeDos );
  37.  
  38. printf( "\n El resultado es %g", result );
  39.  
  40. return 0;
  41. }
  42.  
  43.  
  44. float suma( const float o1, const float o2 ){
  45. return o1 + o2;
  46. }
  47.  
  48. float resta( const float o1, const float o2 ){
  49. return o1 - o2;
  50. }
  51.  
  52. float division( const float o1, const float o2 ){
  53. return o1 / o2;
  54. }
  55.  
  56. float multiplicacion( const float o1, const float o2 ){
  57. return o1 * o2;
  58. }

Saludos a todos y espero puedan ayudarme a encontrar la solución.-


« Última modificación: 7 Mayo 2016, 17:55 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: Array de punteros a función <=> FLT_MIN - FLT_MAX
« Respuesta #1 en: 7 Mayo 2016, 17:29 pm »

Encuentro muy rara esta condicion:

Citar
ok = scanf("%g", &opeDos) == 1 && opeDos <= FLT_MIN && opeDos <= FLT_MAX


En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Array de punteros a función <=> FLT_MIN - FLT_MAX
« Respuesta #2 en: 7 Mayo 2016, 17:53 pm »

Hola.
Que te resulta raro, ¿no la entiendes o te parece que no puede funcionar? . -
Es lo que utilizo para validar que el ingreso no supere el mínimo y el máximo permitido por el tipo en cuestión.-

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: Array de punteros a función <=> FLT_MIN - FLT_MAX [C]
« Respuesta #3 en: 7 Mayo 2016, 18:14 pm »

No entiendo porque pides que sea menor o igual al maximo y menor o igual que el mínimo, en tal caso estas pidiendo que sea menor o igual al mínimo.

Si C <=A && C <=B

entonces

C<= MIN (A,B)

y si A o B son iguales al minimo absoluto del rango entonces.... estas pidiendo que ...

C = MIN_ABSOLUTO
« Última modificación: 8 Mayo 2016, 02:08 am por HardForo » En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Array de punteros a función <=> FLT_MIN - FLT_MAX [C]
« Respuesta #4 en: 8 Mayo 2016, 15:50 pm »

Hola, gente.
debo reconocer que de la manera que intentaba hacer la validación es inviable, por lo tanto, lo estoy intentando con la librería atof y el máximo número que soporta es lo que muestro a continuación:

Código
  1. #include<stdio.h>
  2.  
  3. int main( void ){
  4. double a = 9.00;
  5. size_t i;
  6.  
  7. for( i = 1; i < 24; i++ ){
  8. printf( "\n[%2u] ==> %f", i, a );
  9. a *= 10.00;
  10. }
  11.  
  12. return 0;
  13. }
  14.  
  15.  
  16. /*#include<stdio.h>
  17. #include<stdlib.h>
  18.  
  19. int main( void ){
  20. double a;
  21. char buffer [256];
  22. printf ( "\n Ingrese un numero.....: " );
  23. gets (buffer);
  24. a = atof (buffer);
  25. printf ( "a = %f " , a);
  26.  
  27. return 0;
  28. }*/
  29.  

Solo necesitaría saber si en sus máquinas les da el mismo resultado.



Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Array de punteros a función <=> FLT_MIN - FLT_MAX [C]
« Respuesta #5 en: 8 Mayo 2016, 16:33 pm »

Los reales float y dobule dan problemas, según su uso, pero es por su naturaleza IEEE754.
FLOAT:
   rango (aprox): 1.5e-45 a 3.4e+38
   dígitos de precisión: 7

DOUBLE:
   rango (aprox): 2.2250738585072020e−308 to 1.7976931348623157e+308
   dígitos de precisión: 15

Pásate por aquí
https://es.wikipedia.org/wiki/IEEE_coma_flotante
En línea

HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: Array de punteros a función <=> FLT_MIN - FLT_MAX [C]
« Respuesta #6 en: 8 Mayo 2016, 16:41 pm »

No se te olviden las recomendaciones de @MAFUS, sin embargo haciendo caso a tu solicitud, aqui mi salida:

[ 1] ==> 9.000000
[ 2] ==> 90.000000
[ 3] ==> 900.000000
[ 4] ==> 9000.000000
[ 5] ==> 90000.000000
[ 6] ==> 900000.000000
[ 7] ==> 9000000.000000
[ 8] ==> 90000000.000000
[ 9] ==> 900000000.000000
[10] ==> 9000000000.000000
[11] ==> 90000000000.000000
[12] ==> 900000000000.000000
[13] ==> 9000000000000.000000
[14] ==> 90000000000000.000000
[15] ==> 900000000000000.000000
[16] ==> 9000000000000000.000000
[17] ==> 90000000000000000.000000
[18] ==> 900000000000000000.000000
[19] ==> 9000000000000000000.000000
[20] ==> 90000000000000000000.000000
[21] ==> 900000000000000000000.000000
[22] ==> 9000000000000000000000.000000
[23] ==> 89999999999999996000000.000000
« Última modificación: 8 Mayo 2016, 16:44 pm por HardForo » En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array de punteros.
Programación C/C++
soyloqbuskas 3 9,452 Último mensaje 30 Enero 2012, 20:28 pm
por soyloqbuskas
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,932 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Problema con array de punteros
Programación C/C++
NathanD 4 2,598 Último mensaje 26 Marzo 2013, 21:13 pm
por amchacon
Array de punteros en lenguaje C. « 1 2 »
Programación C/C++
DanielPy 16 6,392 Último mensaje 26 Diciembre 2013, 22:04 pm
por leosansan
Pasar a función array de punteros.-
Programación C/C++
NOB2014 5 3,485 Último mensaje 22 Enero 2014, 15:44 pm
por NOB2014
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines