se puede comparar función dentro de otra función?

Iniciado por omegadei, 21 Marzo 2018, 20:10 PM

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

omegadei

Hola, soy estudiante a nivel principiante de programación y estamos viendo   funciones y punteros lo cual empiezo a entender bien, sin embargo tengo una duda al momento de crear una funcion que me indique las temp mayores al promedio y las imprima, mi codigo es este  y el problema esta en la
Código (cpp) [Seleccionar]
funcion mayorespromedios()
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#define tamano 8
#define numsem 7
void leerclima(float *);
void  escribirpromedio( float *);
void mayorespromedio(float*);

 const  char *sem[]= {"  ", "Lunes: ", "Martes: ", "Miercoles: ", "Jueves: ", "Viernes: ", "Sabado: ", "Domingo: "};
char TEM=tamano;


int main (int arg, char*argv[])

{
float clima [TEM];
leerclima(clima);
escribirpromedio(clima);
mayorespromedio(clima);






}

void leerclima(float *clima)
{


printf(" Ingrese la temperatura   : \n");

for (register unsigned char dia = 1; dia < TEM ; dia++)
{
printf("%s", sem[dia]);
scanf("%f", (clima+dia));
fflush(stdin);
}
}


void  escribirpromedio( float *clima)
{
for( register unsigned char dia = 1; dia<TEM ; dia++ )
{

*(clima)+=*(clima+dia);

}
printf("\n\n El Promedio de clima de la semana es : %.2f\n",*clima/numsem);
}
void mayorespromedio(float*clima)
{

escribirpromedio(clima);
//float prom2= escribirpromedio(clima); aqui me marca error void mayorespromedios(float*)
for ( register unsigned char dia = 1 ; dia<TEM ; dia++ )



if (*clima >prom2)

printf ("     dias que pasan el promedio %s:",sem[dia]);

}






//}





· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

MAFUS

Es importante leer los mensajes del compilador:
error: 'prom2' undeclared (first use in this function)

Quiere decir que no sabe que es prom2.

omegadei

el prom2 lo puso despues de //, el compilador no lo considera

Kenji-chan

es porque lo estas igualando a una función que no retorna nada por eso te marca error

MAFUS

Cierto, mea culpa.

Pues ya que el primer elemento de clima guarda la suma de todos los días, basta hacer que promedio valga *clima/numsem.

Kenji-chan

el problema esta en que después quiere comparar que días están por encima del promedio y como sobre escribió el dato del primer día entonces ya no hay forma de saber que valor tenia te recomiendo hacer una función que retorne un float donde calcule el promedio de los datos que hay en clima para no modificar estos

MAFUS

Basta con que sea así:
void mayorespromedio(float*clima) {
    float prom2= *clima/numsem;
    for(register unsigned char dia = 1 ; dia<TEM ; dia++ )
        if (clima[dia] >prom2)
            printf ("     dias que pasan el promedio %s\n:",sem[dia]);
}


Aparte usar una instrucción void para cargar prom2, que se puede cambiar por *clima/numsem, también repetía dos veces escribirpromedio, una en main y la otra en mayorespromedio, lo que hacía que la segunda vez se duplicara todo.