Duda búsqueda en C

Iniciado por JJShadiw, 18 Noviembre 2010, 11:51 AM

0 Miembros y 1 Visitante están viendo este tema.

JJShadiw

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!

satu

Hola

La solución sería buscar el máximo valor del vector en lugar de ordenarlo, es decir, en lugar de
Código (cpp) [Seleccionar]

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:
Código (cpp) [Seleccionar]

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
Breakbeat como forma de vida

Garfield07

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;
}


* 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

#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;
}
Breakbeat como forma de vida

Akai

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.

JJShadiw

#5
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)

Garfield07

Tu code estaba hecho, yo solo cambie algunas cosas para aligerar code xD.
Tampoco te creas que hemos tocado mucho jaja...


* 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

#7
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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!