No, en absoluto.
Uno de los motivos es que inicializas variables globales dentro del ciclo
do/while.
Funciona el máximo por que quitaste la variable
mx desde dentro del
do/while, y no funciona el mínimo por que lo estabas incializando a cero y luego no encontraba valor menor para efectuar el reemplazo. La variable
mn, tiene que ser inicializada a un valor mayor al mayor de los datos, para que al compararlo, pueda tomar por menor a qualquiera de ellos. Del mismo modo la variable
mx debe tomar un valor menor al menor valor esperado.
Por otro lado, aunque no afecta el funcionamiento, el arreglo de enteros
v es innecesario, al igual que el tercer parámetro de la función
med.
El codigo podria quedar así:
Código C:
Ver original#include <stdio.h>
#define LNX 99999
float mx=0, mn=LNX, me=0;
float max(float);
float min(float);
float med(float,int);
main(){
int v, i=0, z=1;
float ma=0, mi=0, md=0;
FILE *fp;
fp
= fopen("doc.txt","rt"); if(fp==NULL) {
printf("Erro na apertura do arquivo.\n"); } // El operador [B]else[/B] es innecesario, sale por exit
do{
if (feof(fp
)!=0 || i
>=LNX
) z
=i
+1; ma=max(v);
mi=min(v);
md=med(v,z);
i++;
}while(feof(fp
)==0 && i
<LNX
); printf("O maximo do arquivo e: %f\n", ma
); printf("O minimo do arquivo e: %f\n", mi
); printf("A media do arquivo e: %f\n", md
); }
float max(float vec) {
if (vec>mx) mx = vec;
return mx;
}
float min(float vec) {
if (vec<mn) mn = vec;
return mn;
}
float med(float vec, int x) {
me = (me + vec)/x;
return me;
}
Para detectar los fallos es muy útil hacer una prueba de escritorio sobre el código.
Saludos.