Autor
|
Tema: Duda búsqueda en C (Leído 2,709 veces)
|
JJShadiw
Desconectado
Mensajes: 4
|
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++) 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!
|
|
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
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
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
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++) 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]; return 0; }
|
|
|
En línea
|
* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
#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++) 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; }
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
Akai
Desconectado
Mensajes: 823
|
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.
|
|
|
En línea
|
|
|
|
JJShadiw
Desconectado
Mensajes: 4
|
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)
|
|
« Última modificación: 18 Noviembre 2010, 23:47 pm por JJShadiw »
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
Tu code estaba hecho, yo solo cambie algunas cosas para aligerar code xD. Tampoco te creas que hemos tocado mucho jaja...
|
|
|
En línea
|
* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente. * No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado. * Si compila esta bien, si arranca es perfecto. ¡Wiki elhacker.net!Un saludo
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
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!
|
|
« Última modificación: 20 Noviembre 2010, 19:47 pm por do-while »
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
|
|