saludos tengo un programa que me tiene que calcular el promedio, el mayor y el menor, etc. de un vector de temperaturas, el problema es que no me calcula bien la menor temperatura y no sé por qué si las variables están bien inicializadas
#include <stdio.h>
#include <stdlib.h>
#define SEMANA 7
int main()
{
int i,dia_mayor,dia_menor;
float temperatura[SEMANA],v[SEMANA],suma=0,promedio,mayor,menor;
mayor = temperatura[0];
menor = temperatura[0];
for(i=0;i<SEMANA;i++)
{
printf("Dame la temperatura del dia \n");
scanf("%f",&temperatura[i]);
suma+=temperatura[i];
if(temperatura[i]>mayor)
{
mayor = temperatura[i];
dia_mayor = i;
}
else if(temperatura[i]<menor)
{
menor = temperatura[i];
dia_menor = i;
}
}
promedio = suma/SEMANA;
printf("a) La temperatura promedio es %.2f\n",promedio);
printf("c) La mayor temperatura es %.2f y ocurrio el dia %d\n",mayor,dia_mayor);
printf("d) La menor temperatura es %.2f y ocurrio el dia %d\n",menor,dia_menor);
printf("b) Un vector de las diferencias de cada temperatura con respecto al promedio\n");
for(i=0;i<SEMANA;i++)
{
v[i] = temperatura[i]-promedio;
printf("v[%d] = %.2f\n",i,v[i]);
}
return 0;
}
gracias ;D
El valor de temperatura[0] puede ser cualquiera, ya que en ese momento no has leído las temperaturas. Entonces digamos que menor toma el valor 1 y en el vector de temperaturas el menor valor que introduce el usuario es 20, ningún valor será menor que 1, por lo tanto vas a tener resultados no deseados.
Cita de: m@o_614 en 2 Marzo 2013, 20:15 PM
......................................
.y no sé por qué si las variables están bien inicializadas
...................................
mayor = temperatura[0];
menor = temperatura[0];
............................
Como te indica(//) naderST, las variables mayor y menor están inicializadas con valores "basura" o impredecibles ya que no se han asignado hasta ese momento.
Por ejemplo, sería más correcto:
...................................
mayor =-200;
menor =200;
............................
Saluditos!. ....(http://st.forocoches.com/foro/images/smilies/ciao.gif)
Siguiendo la linea de leosansan se puede asignar a la variable "menor" el valor máximo posible para el tipo float y a la variable "mayor" el mínimo. Mas o menos así:
#include <float.h> /* FLT_MAX y FLT_MIN */
/* ... */
float menor = FLT_MAX;
float mayor = FLT_MIN;
Un saludo
Cita de: rir3760 en 3 Marzo 2013, 17:24 PM
Siguiendo la linea de leosansan se puede asignar a la variable "menor" el valor máximo posible para el tipo float y a la variable "mayor" el mínimo. Mas o menos así:
#include <float.h> /* FLT_MAX y FLT_MIN */
/* ... */
float menor = FLT_MAX;
float mayor = FLT_MIN;
Un saludo
Creo que aquí tendríamos un problema ya que mayor tomaría el valor de 0, pero podría pasar que todas las temperaturas sean negativas y no te daría la mayor. En este caso yo prefiero leer la primera temperatura y asignar ese valor a mayor y menor y luego leer las demás temperaturas e ir comprobando.
Cita de: naderST en 3 Marzo 2013, 18:22 PM
Creo que aquí tendríamos un problema ya que mayor tomaría el valor de 0, pero podría pasar que todas las temperaturas sean negativas y no te daría la mayor....................
Para empezar no veo necesario el uso de librerías porque sí, ya que en este caso se están tomando temperaturas del medio ambiente, creo que los valores que propuse son más que suficientes.
Y naderST observa que al definir como mayor=-200, la primera temperatura que tome pasará a ser mayor y a la vez menor y ya luego se irán comparando con éstas, que en el fondo es lo que tú propones.
Saluditos!. ... (http://st.forocoches.com/foro/images/smilies/simba2.gif)
muchas gracias a todos por sus respuestas
creí que estaba inicializando las variables correctamente porque en otro programa muy parecido que también tenía que calcularme el mayor y el menor elemento lo hice así y esta vez si me funcionó, y no se porqué en uno si y en el otro no
int main()
{
int i,hora_a,hora_b;
float temperatura[DIA],media=0,m,mayor=0,menor=temperatura[0];
for(i=0;i<DIA;i++)
{
printf("Dame la temperatura de la hora %d\n",i);
scanf("%f",&temperatura[i]);
media += temperatura[i];
if(temperatura[i]>mayor)
{
mayor = temperatura[i];
hora_a = i;
}
else if(temperatura[i]<menor)
{
menor = temperatura[i];
hora_b = i;
}
}
m = media/DIA;
printf("La Temperatura media fue %.2f,la mas alta %.2f a las %d hrs y la mas baja %.2f.",m,mayor,hora_a,menor);
return 0;
}
este es el código que es parecido y que si calcula los valores correctamente, sin importar que menor este inicializado con un valor basura
Con esos valores que inicializas puede ocurrirte que si estas tomando las temperaturas estos dias en diversos lugares de Huesca te salga la mayor como cero, cuando en realidad podría ser menos cinco "la mayor", fíjate que hace mucho frío. Y si estas tomando para calcular la menor en diversos puntos de Canarias estos dias te saldría cero, cuando en realidad sería de quince.
De ahí que por seguridad inicializo don -200 y 200, que es pasarse ya que con -50 y 50 va bien.
Léelo bien y corrige ese fallo.
Saluditos!. ....(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Cita de: naderST en 3 Marzo 2013, 18:22 PMCreo que aquí tendríamos un problema ya que mayor tomaría el valor de 0, pero podría pasar que todas las temperaturas sean negativas y no te daría la mayor.
Tienes razón. Pensaba en utilizar esas macros de forma similar a INT_MIN e INT_MAX (pero no, en este caso no sirve, Ouch!).
Un saludo
Lograste resolver ese problema bro??
El tema tiene 8 años y los usuarios que participaron en él llevan años sin entrar al foro...
Si tienes un problema crea un tema nuevo agregando una explicación del problema y/o el código para poder ayudarte.
Saludos. :-X