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

Programa de c++, no ejecuta ultima resultado

Estas en el tema de Programa de c++, no ejecuta ultima resultado en el foro de C/C++ en Foros del Web. El enunciado es el siguiente: Construya el codigo para evaluar la funcion y=4x^2 - 16x + 15, donde x toma valores de 1 a 2 ...
  #1 (permalink)  
Antiguo 18/04/2015, 16:29
 
Fecha de Ingreso: noviembre-2014
Mensajes: 13
Antigüedad: 9 años, 4 meses
Puntos: 0
Programa de c++, no ejecuta ultima resultado

El enunciado es el siguiente: Construya el codigo para evaluar la funcion y=4x^2 - 16x + 15, donde x toma valores de 1 a 2 en pasos de 0.1. Para cada x la salida debe dar el valor de 'y' y el mensaje Positivo o el mensaje No Positivo.



Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(){
  4.     float x, y;
  5.      for(x=1; x<=2; x=x+0.1){
  6.         y = 4*pow(x,2) - 16*x + 15;
  7.         printf("Cuando la 'x' vale %.1f, la 'y' vale %.2f. ", x, y);
  8.         if(y>=0){
  9.             printf("Es Positivo.\n\n");
  10.         }
  11.         else {
  12.             printf("Es Negativo.\n\n");
  13.         }
  14.        
  15.      }
  16. }

Ese es mi codigo, lo ejecuta perfecto pero el problema es que no me imprime cuando el valor de x es 2 y no se porque. ALguien sabe ? gracias
  #2 (permalink)  
Antiguo 18/04/2015, 16:54
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 5 meses
Puntos: 204
Respuesta: Programa de c++, no ejecuta ultima resultado

Trabajar con decimales no es lo mismo que trabajar con enteros. Si has estudiado cómo se almacenan los números decimales, habrás notado que no suelen ser cálculos exactos. En consecuencia, una comparación x==2.0 no parece una buena idea. Básicamente porque x puede valer 2.000000001, que ya será superior al 2.0 que tu has puesto como condición.

La solución pasa por trabajar con aproximaciones. Por ejemplo: x < 2.01. Dado que estás incrementando por décimas, comparar por centésimas te debería dar la precisión necesaria.

Otra forma podría ser:

Código C:
Ver original
  1. for( x=1.0; fabs( x - 2.1 ) < 0.01; x+=0.1 )

fabs calcula el valor absoluto. Si x difiere de 2.1 menos de una centésima, puedes asumir sin lugar a dudas que en la iteración anterior x era aproximadamente, 2.0

También puedes pasar de los decimales y, sabiendo que vas a hacer N iteraciones, usar un contador entero:

Código C:
Ver original
  1. float x = 1.0;
  2. for( int n=0; n < 12; ++n, x += 0.1 )

Si no te ha quedado claro el planteamiento, pregunta tus dudas.

Un saludo.
  #3 (permalink)  
Antiguo 21/04/2015, 10:01
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 9 meses
Puntos: 73
Respuesta: Programa de c++, no ejecuta ultima resultado

Echa un ojo a este enlace, donde ya contesté a alguien con un problema parecido al tuyo:

http://www.forosdelweb.com/f96/valid...7/#post4155391

Etiquetas: ejecuta, funcion, int, programa, resultado
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 12:35.