Hola a todos. Estoy realizando un programa en C el cual pide la temperatura a lo largo de 24 horas (almacenadas en una tabla unidimensional con 24 valores), para luego realizar:
a) La media
b) Mostrar la temperatura máxima y la hora a la que se produjo
A la hora de realizar la media y mostrar la máxima lo hago bien, pero tengo problemas para que me muestre la hora a la que se produjo. Para mostrar la temperatura máxima ordeno los valores de la tabla de manera creciente, pero si hago esto, el valor más grande (el último) no corresponde con la hora del día en que fue, ya que ha sido cambiado de posición.
Este es el cógido que llevo hasta ahora:
#include <stdio.h>
#define N 25
void main(){
float temp[N],suma,aux;
int i,j,k,menor;
printf("Introduzca las temperaturas por cada hora (de 0 a 24 h):\n");
for(i=0;i<N;i++)
scanf("%f",&temp[i]);
suma=0;
for(i=0;i<N;i++)
suma=suma+temp[i];
printf("La temperatura media a lo largo del dia es de %f C",suma/25);
for(i=0;i<N;i++){
for(j=i+1,menor=i;j<N;j++){
if(temp[j]<temp[menor])
menor=j;
}
aux=temp[i];
temp[i]=temp[menor];
temp[menor]=aux;
}
Así consigo que se me ordeno, pero como digo, no sé de qué manera almacenar el valor de i (que coincide con las horas) donde se encuentra la mayor temperatura en otra variable para que me la muestre luego.
Muchas gracias!
Hola
La solución sería buscar el máximo valor del vector en lugar de ordenarlo, es decir, en lugar de
for(i=0;i<N;i++){
for(j=i+1,menor=i;j<N;j++){
if(temp[j]<temp[menor])
menor=j;
}
aux=temp[i];
temp[i]=temp[menor];
temp[menor]=aux;
}
deberías hacer:
aux=temp[0];
k=0;
for(i=0; i<N; i++)
if(temp[i]>aux)
k=i;
printf("La hora con mayor temperatura del dia es: %d", k);
Espero haberte ayudado.
Saludos
Personalmente y sin ganas de ofender creo que tu programa no esta muy bien estructurado que se diga...
#include <stdio.h>
int main()
{
float temp[25], suma = 0, aux;
int i;
printf("Introduzca las temperaturas por cada hora (de 0 a 24 h): ");
for(i=0;i<25;i++)
scanf("%f",&temp[i]);
for(i=0;i<25;i++)
suma=suma+temp[i];
printf("La temperatura media a lo largo del dia es de %f.\n",suma/25);
printf ("La temperatura mas alta es ");
aux = temp [0];
for (i = 1; i<25; i++)
if (temp [i] > aux) aux = temp [i];
printf ("%f.\n", aux);
return 0;
}
#include <stdio.h>
int main()
{
float temp[25], suma = 0, aux;
int i, k;
printf("Introduzca las temperaturas por cada hora (de 0 a 24 h): ");
for(i=0;i<25;i++)
scanf("%f",&temp[i]);
for(i=0;i<25;i++)
suma=suma+temp[i];
printf("La temperatura media a lo largo del dia es de %f.\n",suma/25);
aux = temp [0];
for (i = 1; i<25; i++)
if (temp [i] > aux)
{
aux = temp [i];
k=i;
}
printf ("La temperatura mas alta es %f. grados y se produjo a las %d horas\n", aux, k);
return 0;
}
Una pregunta que me lleva rondando desde que he visto el código. ¿Por qué declarar un vector de 25 posiciones? Me parece ver un error de planteamiento aquí:
Hay 24 horas en un día, de 0 a 24. Lo cual nos deja con 24 "espacios" entre las horas en punto: 0 a 1, 1 a 2... 23 a 24/0, de la forma que está planteado para que haya una transición de 24 a 0, otra hora más.
Muchas gracias a todos, por fin he conseguido que me indique la hora a la que se produce el máximo valor =)
Sagrini, gracias por el "refinamiento" del código. Llevo programando en C desde hace sólo 1 mes y medio (una asignatura de mi carrera, Biotecnología) y aún me cuesta ponerlo "bonito" del todo, aunque todo se andará
Akai, uso un vector de 25 posiciones ya que debo poner también la temperatura a las 24 horas de ese día (a la primera hora del día siguiente) y empezando desde la posición 0, necesitos 25 sitios para llegar a las 24 horas (es decir, pongo la temperatura a cada hora justa, no a lo largo de cada hora)
Tu code estaba hecho, yo solo cambie algunas cosas para aligerar code xD.
Tampoco te creas que hemos tocado mucho jaja...
Cita de: JJShadiw en 18 Noviembre 2010, 23:44 PM
Akai, uso un vector de 25 posiciones ya que debo poner también la temperatura a las 24 horas de ese día (a la primera hora del día siguiente) y empezando desde la posición 0, necesitos 25 sitios para llegar a las 24 horas (es decir, pongo la temperatura a cada hora justa, no a lo largo de cada hora)
Perdon, pero eso es mentira, si un dia tiene 24 horas, no te hacen falta 25 posiciones ya que 24 = 00:00
Si buscas temperaturas mas alla de un dia:
a- te han planteado mal el problema
b- eres tu quien lo ha entendido mal
De todas todas, como bien ha dicho
akai, un dia solo tiene 24 horas. Desde las 00:00 (tambien entendida como 24:00) hasta las 23. El resto de las horas que puedas pensar que tiene un dia no son nada mas que un malentendido (por parte de quien? ahi ya no entro).
¡Saludos!