Calcul de moyenne

Fermé
fatalix Messages postés 4 Date d'inscription samedi 1 juin 2013 Statut Membre Dernière intervention 1 juin 2013 - 1 juin 2013 à 11:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 juin 2013 à 16:29
Bonjour,

Je réalise un programme qui consiste a récuperer U et I, puis calcul P et E puis sont mis sur un fichier csv. Je voudrais faire un calcul de moyenne de E et le mettre dans un autre fichier csv. Par exemple toutes les 2 valeurs de E faire une moyenne et le mettre dans le fichier. Mais je n'ai aucune idée.

Voici mon programme :

#include <stdio.h>
#include <stdlib.h>
#include <windows.h> // pour la fonction Sleep de la tempo
#include "vm110.h"
#include "K8055D_C.h"
//Carte Puissance et E


float i,A,B,P,E,U,I,M;



float main(float argc, float *argv[])
{



//creation fichier csv
FILE* fichier = NULL;

fichier = fopen("test.txt", "r+");

if(fichier != NULL)
{


OpenDevice(0);


fprintf(fichier,"P:"); //ecriture sur fichier
fprintf(fichier,"E\n");//ecriture sur fichier

//début de la boucle
for(i=1;i<10;i++){

//lecture des ports
A= ReadAnalogChannel(1);
B= ReadAnalogChannel(2);

//conversion
U=A/40;
I=B/8.5;

//afichage
printf("Voici U:%f\n",U);
printf("Voici I:%f\n",I);

//calcul puissance
P = U*I;

//affichage puissance
printf("Voici la puissance: %f\n",P);
//sleep(5000);


//calcul energie
E= P*5*i;



//affiche energie
printf("Voici l'energie: %f\n",E);
sleep(2000);

// ecriture dans le fichier csv
fprintf(fichier,"%f",P);
fprintf(fichier,":");
fprintf(fichier,"%f\n",E);

//raffraichissemnt
system("cls");
}


fclose(fichier);
}



//creation fichier csv 2
FILE * fichiers = NULL;

fichiers = fopen("test1.txt", "r+");

if(fichiers != NULL)
{

fclose(fichiers);
}
return 0;
return 0;
CloseDevice(0);

}
A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
1 juin 2013 à 12:36
float i,A,B,P,E,U,I,M;
Les variables globales ne sont pas conseillées. Il vaut mieux les mettre en local. Tu te sers de i comme int (for) mais tu le déclares en tant que float. Pourquoi ? int i; est beaucoup mieux...

float main(float argc, float *argv[])
Original...
Le prototype est : int main(int argc, int *argv[]) ou int main(void). Aucun autre est accepté.

Pour faire la moyenne, ben, tu fais une boucle for pour additionner toutes les valeurs et tu divises par le nombre d'éléments. Et pour écrire dans le fichier, tu utilises fprintf(). C'est quoi qui te pose problème ?

Cdlt,
0
fatalix Messages postés 4 Date d'inscription samedi 1 juin 2013 Statut Membre Dernière intervention 1 juin 2013
1 juin 2013 à 12:52
je n'arrive pas apprendre toutes les valeurs, à chaque fois je n'ai que la dernière.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
1 juin 2013 à 13:11
Ah oui, et j'oubiais :
return 0;
return 0;
CloseDevice(0);


Inutile de mettre un double return 0. Et le CloseDevice(0) après le return 0 ne sert à rien. Il faut mettre :
CloseDevice(0);
return 0;

je n'arrive pas apprendre toutes les valeurs, à chaque fois je n'ai que la dernière.
Bah normal, puisque à chaque itération tu fais E=...; donc tu écrases l'ancienne valeur.
Il faudrait déclarer : float somme=0;
Juste après E=...;, mettre somme+=E;
Et enfin, avant d'afficher la moyenne (donc après la boucle for); tu calcules somme/9 parce que tu as lu 9 valeurs.
0
fatalix Messages postés 4 Date d'inscription samedi 1 juin 2013 Statut Membre Dernière intervention 1 juin 2013
1 juin 2013 à 13:30
Merci beaucoup sa fonctionne enfin. Juste une petite question, si je veux faire par exemple, la moyenne de 5 valeurs E, ainsi de suite, je fais comment?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
1 juin 2013 à 14:45
Bah t'additionnes les 5 valeurs et tu divises par 5... C'est exactement le même principe qu'évoqué ci-dessus.
0
fatalix Messages postés 4 Date d'inscription samedi 1 juin 2013 Statut Membre Dernière intervention 1 juin 2013
1 juin 2013 à 14:51
ok mais juste prendre les 5 premiers E faire la moyenne, puis prendre les 5 valeurs suivantes faire la moyenne ainsi de suite.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 1/06/2013 à 16:29
Toujours le même principe...
Tu fais un for de 5, tu initiales somme à 0 avant le for. Dans le for, tu fais somme+=E.
A la fin du for, tu calcules la moyenne somme/5. Et tu recommences à l'instruction "somme = 0".
Ce qui donne :
while(...) {
    int i;
   double somme=0;
   for(i=0;i<5;i++) {
      ...
      E=...;
      somme+=E;
   }
   printf("moyenne : %lf\n", somme/5);
}
0