Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 2 Marzo 2013, 20:15 pm



Título: maximo y minimo
Publicado por: m@o_614 en 2 Marzo 2013, 20:15 pm
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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define SEMANA 7
  4.  
  5. int main()
  6. {
  7.    int i,dia_mayor,dia_menor;
  8.    float temperatura[SEMANA],v[SEMANA],suma=0,promedio,mayor,menor;
  9.    mayor = temperatura[0];
  10.    menor = temperatura[0];
  11.    for(i=0;i<SEMANA;i++)
  12.    {
  13.        printf("Dame la temperatura del dia \n");
  14.        scanf("%f",&temperatura[i]);
  15.        suma+=temperatura[i];
  16.        if(temperatura[i]>mayor)
  17.        {
  18.            mayor = temperatura[i];
  19.            dia_mayor = i;
  20.        }
  21.        else if(temperatura[i]<menor)
  22.        {
  23.            menor = temperatura[i];
  24.            dia_menor = i;
  25.        }
  26.    }
  27.    promedio = suma/SEMANA;
  28.    printf("a) La temperatura promedio es %.2f\n",promedio);
  29.    printf("c) La mayor temperatura es %.2f y ocurrio el dia %d\n",mayor,dia_mayor);
  30.    printf("d) La menor temperatura es %.2f y ocurrio el dia %d\n",menor,dia_menor);
  31.    printf("b) Un vector de las diferencias de cada temperatura con respecto al promedio\n");
  32.    for(i=0;i<SEMANA;i++)
  33.    {
  34.        v[i] = temperatura[i]-promedio;
  35.        printf("v[%d] = %.2f\n",i,v[i]);
  36.    }
  37.  
  38.    return 0;
  39. }
  40.  

gracias ;D


Título: Re: maximo y minimo
Publicado por: naderST en 2 Marzo 2013, 20:31 pm
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.


Título: Re: maximo y minimo
Publicado por: leosansan en 2 Marzo 2013, 22:13 pm
......................................
.y no sé por qué si las variables están bien inicializadas

Código
  1.   ...................................
  2. mayor = temperatura[0];
  3. menor = temperatura[0];
  4.   ............................
  5.  


Como te indica(http://) 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:


Código
  1.   ...................................
  2. mayor =-200;
  3. menor =200;
  4.   ............................
  5.  

Saluditos!. ....(http://st.forocoches.com/foro/images/smilies/ciao.gif)


Título: Re: maximo y minimo
Publicado por: 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í:
Código
  1. #include <float.h> /* FLT_MAX y FLT_MIN */
  2.  
  3. /* ... */
  4.  
  5. float menor = FLT_MAX;
  6. float mayor = FLT_MIN;

Un saludo


Título: Re: maximo y minimo
Publicado por: naderST en 3 Marzo 2013, 18:22 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í:
Código
  1. #include <float.h> /* FLT_MAX y FLT_MIN */
  2.  
  3. /* ... */
  4.  
  5. float menor = FLT_MAX;
  6. 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.


Título: Re: maximo y minimo
Publicado por: leosansan en 3 Marzo 2013, 19:29 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)


Título: Re: maximo y minimo
Publicado por: m@o_614 en 3 Marzo 2013, 21:10 pm
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

Código
  1. int main()
  2. {
  3.    int i,hora_a,hora_b;
  4.    float temperatura[DIA],media=0,m,mayor=0,menor=temperatura[0];
  5.  
  6.    for(i=0;i<DIA;i++)
  7.    {
  8.        printf("Dame la temperatura de la hora %d\n",i);
  9.        scanf("%f",&temperatura[i]);
  10.        media += temperatura[i];
  11.        if(temperatura[i]>mayor)
  12.        {
  13.             mayor = temperatura[i];
  14.             hora_a = i;
  15.        }
  16.        else if(temperatura[i]<menor)
  17.        {
  18.            menor = temperatura[i];
  19.            hora_b = i;
  20.        }
  21.  
  22.    }
  23.    m = media/DIA;
  24.    printf("La Temperatura media fue %.2f,la mas alta %.2f a las %d hrs y la mas baja %.2f.",m,mayor,hora_a,menor);
  25.    return 0;
  26. }

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



Título: Re: maximo y minimo
Publicado por: leosansan en 3 Marzo 2013, 21:24 pm
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)


Título: Re: maximo y minimo
Publicado por: rir3760 en 4 Marzo 2013, 03:26 am
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.
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


Título: Re: maximo y minimo
Publicado por: XXTOxic_LUISxX en 26 Abril 2021, 22:22 pm
Lograste resolver ese problema bro??


Título: Re: maximo y minimo
Publicado por: K-YreX en 27 Abril 2021, 19:59 pm
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