Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: JJShadiw en 18 Noviembre 2010, 11:51 AM

Título: Duda búsqueda en C
Publicado por: JJShadiw en 18 Noviembre 2010, 11:51 AM
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!
Título: Re: Duda búsqueda en C
Publicado por: satu en 18 Noviembre 2010, 15:14 PM
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
Título: Re: Duda búsqueda en C
Publicado por: Garfield07 en 18 Noviembre 2010, 21:01 PM
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;
}
Título: Re: Duda búsqueda en C
Publicado por: satu en 18 Noviembre 2010, 22:52 PM
#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;
}
Título: Re: Duda búsqueda en C
Publicado por: Akai en 18 Noviembre 2010, 23:17 PM
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.
Título: Re: Duda búsqueda en C
Publicado por: JJShadiw en 18 Noviembre 2010, 23:44 PM
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)
Título: Re: Duda búsqueda en C
Publicado por: Garfield07 en 19 Noviembre 2010, 23:58 PM
Tu code estaba hecho, yo solo cambie algunas cosas para aligerar code xD.
Tampoco te creas que hemos tocado mucho jaja...
Título: Re: Duda búsqueda en C
Publicado por: do-while en 20 Noviembre 2010, 06:51 AM
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!