1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
| #include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <math.h>
int main(int argc, char *argv[])
{
FILE* fichier1 = NULL;
FILE* fichier2 = NULL;
FILE* fichier3 = NULL;
char nom_fichier[100];
float temps[5000],
voie1[5000], voie2[5000], voie3[5000],
max1[5000], max2[5000], max3[5000],
rms1[5000], rms2[5000], rms3[5000] ;
float MAX1 = 0, MAX2 = 0, MAX3 = 0,
somme1 = 0, somme2 = 0, somme3 = 0;
double RMS1 = 0, RMS2 = 0, RMS3 = 0;
int i = 0, ret = 0, nbEnreg = 0, nbEnregMax = 0 ;
printf("Saisir le nom du fichier a ouvrir\n\n");
scanf("%s",nom_fichier);
fichier1 = fopen(nom_fichier, "r");
if (fichier1 == NULL)
{
printf("Erreur lors de l'ouverture du fichier\n");
}
else
{
while ((ret=fscanf(fichier1, "%f %f %f %f", &temps[i], &voie1[i], &voie2[i], &voie3[i])) != EOF)
{
// Tester qu'il y a bien eu 4 valeurs lues
if(ret==4)
{
printf("%f %f %f %f\n", temps[i], voie1[i], voie2[i], voie3[i]);
i++ ; // Comme l'a dit maleaume
}
/*
Nota : Si tu as plus de 5000 enregistrements
tu vas avoir un beau débordement de tableaux
qui va peut-être déclencher un segment fault.
*/
if(i>=5000)
break ; // On casse la boucle while avant le débordement de tableaux.
}
// Il faut sauver le nombre d'enregistrements total
nbEnreg = i ;
// Ici tu peux fermer ton fichier
fclose(fichier1) ;
// Sur tous les enregistrements
for (i = 0; i < nbEnreg; i++)
{
if(voie1[i] > MAX1) MAX1 = voie1[i];
if(voie2[i] > MAX2) MAX2 = voie2[i];
if(voie3[i] > MAX3) MAX3 = voie3[i];
// Toutes les 3 lignes, enregistrement des max
if((i%3)==2) {
max1[i/3] = MAX1 ;
max2[i/3] = MAX2 ;
max3[i/3] = MAX3 ;
nbEnregMax++ ;
}
}
// Si pas modulo 3 lignes, enregistrement des derniers max
if((i%3)!=2) {
max1[i/3] = MAX1 ;
max2[i/3] = MAX2 ;
max3[i/3] = MAX3 ;
nbEnregMax++ ;
}
fichier2 = fopen("max.txt", "a+");
if (fichier2 != NULL)
{
// Pourquoi 2 ? (voir problème plus haut)
for (i = 0; i < nbEnregMax; i++)
{
fprintf(fichier2,"%f %f %f\n", max1[i], max2[i], max3[i]);
// NON - Trop tôt
// fclose(fichier2);
}
}
// Ici serait mieu
fclose(fichier2);
/*
Maintenant à toi de jouer .... ;o)
*/
// Sur tous les enregistrements lus
for(i = 0; i < nbEnreg; i++)
{
somme1 += voie1[i] * voie1[i];
somme2 += voie2[i] * voie2[i];
somme3 += voie3[i] * voie3[i];
}
RMS1 = (sqrt(somme1)/3);
RMS2 = (sqrt(somme2)/3);
RMS3 = (sqrt(somme3)/3);
// Ici la variable "i" n'est plus initialisée
// Même problème que pour max1/2/3
rms1[i] = RMS1;
rms2[i] = RMS2;
rms3[i] = RMS3;
// Pourquoi faire ? Ca sert à rien ici
// somme1 = 0;
// somme2 = 0;
// somme3 = 0;
fichier3 = fopen("rms.txt", "a+");
if (fichier3 != NULL)
{
// Pourquoi 2 ? (voir problème plus haut)
for (i = 0; i < 2; i++)
{
fprintf(fichier3,"%f %f %f\n", rms1[i], rms2[i], rms3[i]);
// NON - Trop tôt
// fclose(fichier3);
}
// Ici c'est mieu
fclose(fichier3);
}
}
system("PAUSE");
return 0;
} |
Partager