Duda rápida basica de programación en ejercicio

hodei

Hola mvideros, tengo una duda (bastante a nivel basico supongo) sobre un programa que estoy haciendo en C# con visual studio express 2012. Basicamente es una interface que tiene unicamente un textbox para introducir datos y un boton para calcular una operacion con ellos. Mi codigo es el siguiente:

private void button1_Click(object sender, EventArgs e)

{

int vre; --------------------------------------// variable correspondiente al textbox (recogida de datos)

int x; --------------------------------------- // variable con valores desde 0 hasta vre (introducido en textbox)

int resultado; ------------------------------ // variable para mostrar el resultado ya operado en un messagebox.

vre = Convert.ToInt32(re); ----------------- // parece ser que el textbox (llamado re) tiene que ser convertido a int para operar, aunque no estoy seguro de si es necesario.

resultado = (0.9 + 0.85*x) * (1.32 + 0.0002 * (vre - x)); ------- //calcular para cada valor de x (desde 0 hasta vre) y cojer el valor mas alto y asignarlo a resultado. pero no se como hacerlo

MessageBox.Show("conclusion:"+ resultado);

}

Lo que me interesa es coger el valor de la caja de texto, ponerlo en mi ecuacion como "vre", y calcular desde 0 hasta vre el resultado de la ecuación, pero solo me interesa coger el valor mas alto y introducirlo en la variable "resultado" para luego imprimirlo.

La idea que se me ocurrio es calcular todos los valores y coger le mas alto (aunque no se como hacerlo, a ver si me podeis echar un cable), si hay una forma mas rapida para coger el valor mas alto, me sirve por supuesto.

Gracias de antemano, saludos.

Soltrac

algo así:


int maxResultado = 0;
for (int x = 0; x <= vre; x++)
   resultado = (0.9 + 0.85*x) * (1.32 + 0.0002 * (vre - x)); ------- //calcular para cada valor de x (desde 0 hasta vre)

maxResultado = Math.Max(resultado, maxResultado);

MessageBox.Show("conclusion:"+ maxResultado);
elkaoD

Haz un bucle for y ve guardando el resultado de cada una en una variable "maximo" si resultado > maximo.

Ojo, máximo al principio debe valer el mínimo posible (0 o -infinito, depende de si admites negativos o no).

hodei

Lo he intentado de bastantes maneras con el codigo que me has sugerido y no lo consigo :(

Primero me decia algo asi como que esto (0.9 + 0.85*x) * (1.32 + 0.0002 * (vre - x)) es "double" y yo usaba "int". Asi que he probado cambiando todas las variables a "double", aunque no se si funcionaria y ya no me ha dicho nada, pero me decia que la x de dentro del for

"no se puede declarar una variable local llamada "x" en este ambito porque daria un significado diferente a "x" que ya se utiliza en otro ambito primario o actual con otra denotacion"

la verda es que ya no se que probar.

En fin, podrias ponerme como quedaria el codigo de este for incluido en mi codigo?

porque este codigo tal y como yo lo he integrado es incorrecto:

private void button1_Click(object sender, EventArgs e)

{

int vre;
int x;
int resultado;

vre = Convert.ToInt32(re);

int maxResultado = 0;
for (int x = 0; x <= vre; x++)
resultado = (0.9 + 0.85*x) * (1.32 + 0.0002 * (vre - x));
maxResultado = Math.Max(resultado, maxResultado);

MessageBox.Show("conclusion:"+ maxResultado);

gracias

1 respuesta
guner

Hacía mucho que no entraba por este foro... y ains qué recuerdos.

Al lío.

Tal como te exploca Soltrac debería funcionar (obviando la sitaxis del lenguaje, que no conozco pero doy por hecho que está bien), pero tendrías que tener en cuenta un par de cosas.
Iterando desde cero a vre, deberías establecer un paso en el iterador lo suficientemente fino (x++ suma 1 a x, podrías plantearte que sumara 0.1, 0.01, etc...), a no ser que quieras ceñírte a valores enteros de x, claro.

Si te quieres complicar más, otra opción es calcular el máximo a partir de la derivada de tu ecuación respecto a x. ¿Problema?. Los 0 los tendrías que buscar también mediante algún tipo de método iterativo, y de no haber ningún máximo en el intervalo [0, vre] la cosa se complicaría.

#4, como digo, desconozco la sintaxis y la idiosincrasia del lenguaje, pero igual no puedes declarar x antes del for y por eso te da el error.

En cuanto a la precisión de los resultados, creo que es conveniente que emplees tipos de coma flotante.

Usuarios habituales

  • guner
  • hodei
  • elkaoD
  • Soltrac