IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Acquisition et sauvegarde de valeurs


Sujet :

C

  1. #21
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    le calcul marche maintenant, la valeur moyenne aussi (Tmoyi) mais je n'arrive pas à faire une boucle afin de mettre 10 valeur de TN et T et d'avoir au final qu'une valeur de Tmoyi

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float Tmoyi, Tmoy;
    float TN, T;
    float TT;
    float TF;
     
    float dix_minutes();
     
    /*
    for(N = 10; N > 0; N--) 
    */
     
    float dix_minutes()
    {
    TF =0, TN = 0, T = 0;
     
    printf("tapez la valeur TN\n");
    scanf("%f",&TN);
    printf("tapez la valeur T\n");
    scanf("%f",&T);
     
    TF = TN + T;
    printf("TF = %f + %f = %f\n", TN, T, TF);
    //for(N = 10; N > 0; N--);
    return TF;
    }
     
    float Tmoy_instantannee(); 
    float Tmoy_instantannee()
    {
     Tmoyi = dix_minutes()/10.0;
     printf("Tmoyi = %f\n", Tmoyi);
     return Tmoyi;
    }
     
    float valeur_absolue()
    {
     TT = Tmoy_instantannee() - Tmoy;
     if (TT < 0)
     TT == TT * (-1); // ou faire *(-1)
     printf("TT = %d\n", TT);
    }
    /*
    float ecart_temp (float Tmoyi, float Tmoy)
    {
    if (Tmoyi - Tmoy <= 2.5)
    return Tmoy; 
    else 
    return (Tmoyi = Tmoy); 
     
    }
     
     
    /*float excel() 
     
    {
    FILE *program;
    program = fopen("C:\'program'.xls", "w");
    fputs ("<table><tr><td>Ligne1</td><td>Ligne2</td><td>Ligne3</td></tr><tr><td>T1</td><td>T2</td><td>Tmoy</td></tr></table>", program);
    fclose(program);
    }
    */
     
    int main()
    {
     dix_minutes();
     Tmoy_instantannee();
     valeur_absolue();
     //art_temp();
    // excel();
    return 0;
    }

  2. #22
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    en changeant le programme par:
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    float dix_minutes()
    {
    for (i=0; i<2; i++) 
    {
    printf("tapez la valeur TN\n");
    scanf("%f",&TN);
    printf("tapez la valeur T\n");
    scanf("%f",&T);
    TF = TN + T;
    printf("TF = %f + %f = %f\n", TN, T, TF);
    }
    }
    comment faire pour faire la somme des 2 TF?

  3. #23
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Bon la je suis vraiment perdu.

    J'ai du tout recommencer en utlisant la fonction malloc

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    # include <math.h>
     
    int i;
    float Ecart;
     
    int main(int argc, char *argv[])
    {
        long nombreDeTemperatures = 0, t = 0, somme = 0;
        long* Temperatures = NULL; // Ce pointeur va servir de tableau après l'appel du malloc
        FILE* fichier = NULL;
     
        // On demande le nombre de temperatures à l'utilisateur
        printf("Combien de Temperatures avez-vous ?\n");
        scanf("%ld", &nombreDeTemperatures);
     
        if (nombreDeTemperatures >= 10) // Il faut qu'il ait au moins une temperature
        {
            Temperatures = malloc(nombreDeTemperatures * sizeof(long)); // On alloue de la mémoire pour le tableau
            if (Temperatures == NULL) // On vérifie si l'allocation a marché ou pas
            {
                exit(0); // On arrête tout
            }
     
            // On demande les Temperatures une à une
            for (t = 0 ; t < nombreDeTemperatures ; t++)
            {
                printf("Les temperatures sont: %ld ? ", t + 1);
                scanf("%ld", &Temperatures[t]);
            }
     
            // On fait la somme des températures
            //somme = 0;
            for(t = 0; t < nombreDeTemperatures; t++)
            {
                somme = Temperatures[t]+somme;
            }
     
            // On fait l'écart entre les températures
            for ( t= 0; t < nombreDeTemperatures; t++)
            {
                Ecart = Temperatures[t] - t++;
            }
     
            printf("\nLa somme des temperatures est de: %ld\n", somme);
            printf("\nLa moyenne vaut : %ld\n", somme/nombreDeTemperatures);
            printf("\nL'ecart entre les temperatures est de: %ld\n", Ecart);
     
            fichier = fopen("test.txt", "w");
            if (fichier != NULL)
            {
                // On l'écrit dans le fichier
                fprintf(fichier,"Il y a %ld temperatures ", t );
                fprintf(fichier,"\nLa somme des temperatures est de: %ld\n", somme);
                fprintf(fichier,"\nL'ecart entre deux temperatures est de: %ld\n", Ecart);
                fprintf(fichier,"\nLa moyenne vaut : %ld\n", somme/nombreDeTemperatures);
                //fprintf(fichier,"\n",)
                //fprintf(fichier,"\n",)
                fclose(fichier);
            }
     
            // On libère la mémoire allouée avec malloc, on n'en a plus besoin
            free(Temperatures);
        }
     
        return 0;
    }
    Comment faire pour trouver l'écart entre 2 températures positives ou négatives?

    Need Help

  4. #24
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    J'y suis presque. A force de recommencer je fais finir par y arriver.

    code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float T, Ti;
    float Tmoyi, Tmoy;
    float T_trait;
     
     
    float dix_minutes();
     
    FILE* fichier = NULL;
     
    float dix_minutes()
    {
        Ti = 0;
        Tmoy = 0;
     
        for (N=1; N>0; N++)
        {
            printf("\ntapez la valeur T\n");
            scanf("%f",&T);
            Ti = Ti + T;
            printf("Ti = %f\n", Ti);
            {
                if ( fabs(Ti - T) <= 2.5)
                {
                    N = N++;
                    printf("N = %i\n", N);
                    Tmoy = Tmoy + T;
                    printf("Tmoy = %f\n",Tmoy);
                }
                else
                {
                    N + 1;
                    printf("N = %i\n", N);
                    T_trait = Tmoy / N;
                    printf("T_trait = %f\n", T_trait);
                    Ti = T;
                    printf("Ti = %f\n", Ti);
                    N = 1;
                    printf("N = %i\n", N);
                }
            }
        }
     
        fichier = fopen("programme.txt", "w");
        if (fichier != NULL)
        {
            while (!feof(fichier))
            {
                // On l'écrit toutes les températures dans le fichier
                fprintf(fichier, "Voici toutes les temperatures\n", Ti);
                scanf("%f", &Ti);
                fprintf(fichier,"Il y a %ld temperatures ", N );
                scanf("%i",N);
                //fprintf(fichier,"\nLa somme des temperatures est de: %ld\n", somme);
                //fprintf(fichier,"\nL'ecart entre deux temperatures est de: %ld\n", ecart);
                //fprintf(fichier,"\nLa moyenne vaut : %ld\n", somme/nombreDeTemperatures);
            }
            fclose(fichier);
        }
    }
     
    int main()
    {
        dix_minutes();
        while(1);
    }
    ma question est la suivante: je n'arrive pas à ouvrir le fichier programme. comment faire?

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    quand tu fait
    if(fichier != NULL) {
    [...]
    }

    tu peux ajouter :
    else {
    perror("erreur ouverture fichier");
    }

    Le perror t'affichera pourquoi il n'a pas reussi à ouvrir le fichier

  6. #26
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    J'y suis presque encore un petit effort

    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float T, Ti;
    float Tmoyi, Tmoy;
    float T_trait;
     
     
    float dix_minutes();
    float Tmoy_instantannee(); 
    FILE* fichier = NULL;
     
    float dix_minutes()
    {
    Ti = 0;
    Tmoy = 0;
     
    for (N=1; N>0; N++) 
        {
        printf("\nTapez la valeur T: ");
        scanf("%f",&T);
        Ti = Ti + T;
        printf("Ti = %f\n", Ti);
              {   
              if ( fabs(Ti - T) <= 2.5) //+fabs(T)
                 {
                 N = N++;
                 printf("N = %i\n", N);
                 Tmoy = (Tmoy + T)/N;
                 printf("Tmoy = %f\n",Tmoy);
                 }
                 else
                 {
                 N + 1;
                 printf("N = %i\n", N);
                 T_trait = Tmoy / N;
                 printf("T_trait = %f\n", T_trait);
                 Ti = T;
                 printf("Ti = %f\n", Ti);
                 N = 0;
                 printf("N = %i\n", N);
                 }  
     
              FILE* fichier = NULL;
              fichier = fopen("programme.txt", "w");
              if (fichier != NULL)
                 {
                 // On l'écrit toutes les températures dans le fichier
                 fprintf(fichier, "Voici toutes les temperatures:\n %f\n", T);
                 fprintf(fichier,"Il y a %i temperatures\n", N );
                 }
                 fclose(fichier); 
     
                 //return 0;
              }
            }
     
    }
     
    int main()
    {
     dix_minutes();
     FILE* fichier = NULL;
     
     while(1);
    }


    Mon problème maintenant est que je ne n'arrive pas à afficher sur mon fichier .txt toutes les valeurs de T. Comment faire?

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Ça n'enregistre pas toute les températures car tu les lis dans une seule variable T, donc tu les écrases à chaque fois, et quand tu écrit T tu écrit donc la dernière valeur entrée...
    Il faudrait les stocker dans un tableau.

  8. #28
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pepsi78 Voir le message
    Pour le moment voila ce que mon programme donne:
    Ce code est incomplet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:8: error: initializer element is not constant
    main.c:9: error: initializer element is not constant
    main.c:11: error: syntax error before numeric constant
    main.c:11: warning: function declaration isn't a prototype
    main.c: In function `temperature':
    main.c:11: error: parameter name omitted
    main.c:14: error: incompatible types in return
    Process terminated with status 1 (0 minutes, 1 seconds)
    5 errors, 1 warnings
    Merci de poster du code qui a au moins une chance d'être compilable (où est le main() ?)
    Voici un maquettage de l'algorithme d'acquisition. Je te laisse transformer ça en fonction et calculer la moyenne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    /*
    Le but est de faire l'acquisition de valeurs (dans mon cas il s'agit de
    température). Il faut que ces valeurs est un écart de 5°C maximum sinon
    je ne me préoccupe pas des valeurs. Ensuite je dois sauvegarder ces données
    sur une période d'au moins 10min avec un échantillonnage d'une durée d'une
    minute. Puis enfin, je dois faire la moyenne des tranches de 10min ou plus.
    */
     
    #include <math.h>
    #include <stdio.h>
     
    /* simulation */
    #include <stdlib.h>
    #include <time.h>
     
    /* 0=normal 1=debug */
    #define DBG 1
     
    #if DBG
    #include "ed/inc/prt.h"
    #endif
     
    #define TRIG 5
    #define TIME 10
     
    /* simulation du capteur de temperature */
    float get_temp (void)
    {
       static float S_temp = 0;
       static int S_count = 0;
       int plus = 1;
     
       S_count++;
       if (S_count > 10)
       {
          plus = 0;
       }
       if (plus)
       {
          S_temp += (5 * (rand () / (double) RAND_MAX));
       }
       else
       {
          S_temp -= (5 * (rand () / (double) RAND_MAX));
       }
     
    #if DBG
       PRT_D (S_temp);
    #endif
       return S_temp;
    }
     
    int main (void)
    {
    /* simulation */
       srand (time (NULL));
     
       {
          /* simulation horloge 30 s */
          int tick;
          int min=0;
          float temp_prec = get_temp ();
     
          for (tick = 0; tick < 40; tick++)
          {
             if ((tick % 2) == 0)
             {
                /* une minute */
                float temp = get_temp ();
                min++;
                if (fabs (temp_prec - temp) > TRIG)
                {
                   temp_prec = temp;
                   printf ("[min=%2d] temp=%.2f\n", min, temp_prec);
                }
     
             }
          }
       }
       return 0;
    }
    donne, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    S_temp       = 2.69
    S_temp       = 6.48
    S_temp       = 10.21
    [min= 2] temp=10.21
    S_temp       = 10.68
    S_temp       = 14.93
    S_temp       = 17.33
    [min= 5] temp=17.33
    S_temp       = 19.80
    S_temp       = 21.93
    S_temp       = 22.72
    [min= 8] temp=22.72
    S_temp       = 25.39
    S_temp       = 21.82
    S_temp       = 18.11
    S_temp       = 13.21
    [min=12] temp=13.21
    S_temp       = 9.69
    S_temp       = 7.28
    [min=14] temp=7.28
    S_temp       = 2.39
    S_temp       = -0.02
    [min=16] temp=-0.02
    S_temp       = -0.16
    S_temp       = -3.36
    S_temp       = -4.71
    S_temp       = -8.87
    [min=20] temp=-8.87
     
    Press ENTER to continue.
    Pas de Wi-Fi à la maison : CPL

  9. #29
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Merci Emmanuel mais je suis maintenant parti sur un programme plus allégé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float T, Ti;
    float Tmoyi, Tmoy;
    float T_trait;
     
    float dix_minutes();
    FILE* fichier = NULL;
    //FILE* fichier = NULL;
    //char* fgets(char* Ti, int nombreDeCaracteresALire, FILE* pointeurSurFichier);
    float dix_minutes()
    {
    Ti = 0;
    Tmoy = 0;
    FILE* fichier = NULL;
    fichier = fopen("programme final.txt", "w"); // création du fichier texte
    for (N=1; N!=20; N++)
        {
        printf("\nTapez la valeur T: "); // fenetre DOS pour les températures
        scanf("%f",&T);
        Ti = Ti + T;
        printf("Ti = %f\n", Ti);
     
              {  
              if ( fabs(Ti - T) <= 2.5) //+fabs(T) // valeur moyenne
                 {
                 N = N++;
                 printf("N = %i\n", N);
                 Tmoy = (Ti)/N;
                 printf("Tmoy = %f\n",Tmoy);
                 if (N>=10)//, N>=10, N++)
                  {  
                  fichier = fopen("programme final bis.txt", "w");
                  fprintf(fichier, "%f   %f\n", Tmoy, T); // enregistre les Tmoy et T dans un autre fichier txt
                  N=N++;
                  }
                  fclose(fichier); 
                 }
     
                 /*if (N=10)//, N>=10, N++)
                  {  
                  fichier = fopen("programme final bis.txt", "w");
                  fprintf(fichier, "%f   %f\n", Tmoy, T); // enregistre les Tmoy et T dans un autre fichier txt
                  N=N++;
                  }
              fclose(fichier); */
     
     
                 else
                 {
                 N + 1;
                 printf("N = %i\n", N);
                 T_trait = Tmoy / N;
                 printf("T_trait = %f\n", T_trait);
                 Ti = T;
                 printf("Ti = %f\n", Ti);
                 N = 0;
                 printf("N = %i\n", N);
                 }
                 fprintf(fichier, "%f\n", T); // On l'écrit toutes les températures dans le fichier
                 }
     
       }
       fclose(fichier); // ferme le fichier txt
    }
     
    int main()
    {
     dix_minutes();
     //FILE* fichier = NULL;
    // FILE* fichier = NULL;
     //while(1);
    }
    Le soucis est que je n'arrive pas à avoir les résultats du fichier "programme final bis.txt".

    Peux t'on faire deux voir plus de fichier .txt dans un même programme?

  10. #30
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pepsi78 Voir le message
    Peut on faire deux, voire plus de fichier .txt dans un même programme?
    Oui.
    Pas de Wi-Fi à la maison : CPL

  11. #31
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Mais où est donc mon erreur pour ne pas avoir la possiblilité de faire deux fichiers .txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float T, Ti;
    float Tmoyi, Tmoy;
    float T_trait;
     
    float dix_minutes();
    FILE* fichier = NULL;
    pointeurSurFichier);
    float dix_minutes()
    {
    Ti = 0;
    Tmoy = 0;
    FILE* fichier = NULL;
    fichier = fopen("programme final.txt", "w"); // création du fichier texte
    for (N=1; N!=10; N++)
        {
        printf("\nTapez la valeur T: "); // fenetre DOS pour les températures
        scanf("%f",&T);
        Ti = Ti + T;
        printf("Ti = %f\n", Ti);
     
              {  
              if ( fabs(Ti - T) <= 2.5) //+fabs(T) // valeur moyenne
                 {
                 N = N++;
                 printf("N = %i\n", N);
                 Tmoy = (Ti)/N;
                 printf("Tmoy = %f\n",Tmoy);
                 fichier = fopen("programme final bis.txt", "w");
                 if (N!=20)//; N!=20; N++) 
                 {
                 fprintf(fichier, "%f   %f\n", N, Tmoy); // enregistre les Tmoy et T dans un autre fichier txt
                 N = N+1;
                 } 
                 fclose(fichier); 
     
                 }
                 if (N>10)//, N>=10, N++)
                  {  
                  fichier = fopen("programme final bis.txt", "w");
                  fprintf(fichier, "%f   %f\n", Tmoy, T); // enregistre les Tmoy et T dans un autre fichier txt
                  N=N++;
                  }
              fclose(fichier); 
     
     
                 else
                 {
                 N + 1;
                 printf("N = %i\n", N);
                 T_trait = Tmoy / N;
                 printf("T_trait = %f\n", T_trait);
                 Ti = T;
                 printf("Ti = %f\n", Ti);
                 N = 0;
                 printf("N = %i\n", N);
                 }
                 fprintf(fichier, "%f\n", T); // On l'écrit toutes les températures dans le fichier
                 }
     
       }
       fclose(fichier); // ferme le fichier txt
    }
     
    int main()
    {
     dix_minutes();
     //FILE* fichier = NULL;
    // FILE* fichier = NULL;
     //while(1);
    }

  12. #32
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Tu enregistre le pointeur vers ton fichier dans la même variable :
    FILE * fichier
    Il te faut un pointeur différent par fichier que tu ouvres

  13. #33
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Meme quand je met des nombres à mes fichiers le fichier 2 ne met aucune valeur dans le fichier txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float T, Ti;
    float Tmoyi, Tmoy;
    float T_trait;
     
    float dix_minutes();
    FILE* fichier1 = NULL;
    FILE* fichier2 = NULL;
    float dix_minutes()
    {
    Ti = 0;
    Tmoy = 0;
    FILE* fichier1 = NULL;
    FILE* fichier2 = NULL;
    fichier1 = fopen("programme final.txt", "w"); // création du fichier texte
    for (N=1; N!=30; N++)
        {
        printf("\nTapez la valeur T: "); // fenetre DOS pour les températures
        scanf("%f",&T);
        Ti = Ti + T;
        printf("Ti = %f\n", Ti);
     
              {  
              if ( fabs(Ti - T) <= 2.5) //+fabs(T) // valeur moyenne
                 {
                 N = N++;
                 printf("N = %i\n", N);
                 Tmoy = (Ti)/N;
                 printf("Tmoy = %f\n",Tmoy);
                 fichier2 = fopen("programme final bis.txt", "w");
                 if (N!=20)             {
                 fprintf(fichier2, "%f   %f\n", N, Tmoy); // enregistre les Tmoy et T dans un autre fichier txt
                 //N = N+1;
                 } 
                 fclose(fichier2); 
     
                 }
     
                 else
                 {
                 N + 1;
                 printf("N = %i\n", N);
                 T_trait = Tmoy / N;
                 printf("T_trait = %f\n", T_trait);
                 Ti = T;
                 printf("Ti = %f\n", Ti);
                 N = 0;
                 printf("N = %i\n", N);
                 }
                 fprintf(fichier1, "%f\n", T); // On l'écrit toutes les températures dans le fichier
                 }
     
       }
       fclose(fichier1); // ferme le fichier txt
    }
     
    int main()
    {
     dix_minutes();
     //while(1);
    }

  14. #34
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    deux choses :
    * inutile de déclarer deux fois les variables fichier1 et fichier2 (une fois en global et une fois en local, reseigne toi sur la portée des variables
    * Tu ne vérifie pas le retour de fopen, donc tu ne sais pas si ton fichier à bien été ouvert (vérifie que fichier1 ou 2 sont != NULL après le fopen)

  15. #35
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    - Pourquoi ouvres-tu et fermes-tu le fichier2 à chaque fois ? A la prochaine ouverture de ce fichier, le contenu précédent sera écrasé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( fabs(Ti - T) <= 2.5) //+fabs(T) // valeur moyenne
                 {
                    N = N++;
    ....
                    fichier2 = fopen("programme final bis.txt", "w");
                    if (N!=20)
                    {
                       fprintf(fichier2, "%f   %f\n", N, Tmoy); // enregistre les Tmoy et T dans un autre fichier txt
                     } 
                     fclose(fichier2);           
                 }
    - N = N++ a un comportement indéterminé. (de plus, N est déjà incrémenté par la boucle for)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  16. #36
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par diogene Voir le message
    - N = N++ a un comportement indéterminé. (de plus, N est déjà incrémenté par la boucle for)
    J'aurai dis inutile, mais indéterminé... ?
    Dans tous les cas ça me semble équivalent à N++ (quelque soit l'ordre dans lequel est effectué le ++ par rapport à l'affectation).

  17. #37
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    On en avait parlé dans le temps avec doccpu, mais c'est bien indéterminé : Le ++ est forcément appliqué après l'évaluation de N, mais peut être appliqué avant ou après l'affectation de l'ancienne valeur de N, donc ces deux cas sont permis par la norme:
    Code algo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tmp <-- N // évaluation de N
    N <-- N+1 // post-incrémentation immédiate après évaluation
    N <-- tmp // affectation
    Code algo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tmp <-- N // évaluation de N
    N <-- tmp // affectation
    N <-- N+1 // post-incrémentation à la fin de l'expression entière
    La valeur finale de N est donc indéterminée.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #38
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 5
    Points
    5
    Par défaut
    Merci à tous pour l'aide apportée

    Voici le code correct:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    int N;
    float T, Ti;
    float Tmoyi, Tmoy;
    float T_trait;
    float dix_minutes();
    FILE* fichier1 = NULL;
    FILE* fichier2 = NULL;
    float dix_minutes()
    {
    Ti = 0;
    Tmoy = 0;
    FILE* fichier1 = NULL;
    FILE* fichier2 = NULL;
    fichier1 = fopen("program final.txt", "w"); // création du fichier texte
    fichier2 = fopen("program final bis.txt", "a");
    for (N=1; N!=20; N++)
        {
        printf("\nTapez la valeur T: "); // fenetre DOS pour les températures
        scanf("%f",&T);
        Ti = Ti + T;
        printf("Ti = %f\n", Ti);
     
              {  
              if ( fabs(Ti - T) <= 2.5) //+fabs(T) // valeur moyenne
                 {
                 N = N++;
                 printf("N = %i\n", N);
                 Tmoy = (Ti)/N;
                 printf("Tmoy = %f\n", Tmoy);
                 if(N>10)
                         {
                         fichier2 = fopen("program final bis.txt", "a");
                         }
                 fprintf(fichier2, "%i   %f\n", N, Tmoy); // enregistre les Tmoy et T dans un autre fichier txt
                 fclose(fichier2); 
                 }
     
                 else
                 {
                 N + 1;
                 printf("N = %i\n", N);
                 T_trait = Tmoy / N;
                 printf("T_trait = %f\n", T_trait);
                 Ti = T;
                 printf("Ti = %f\n", Ti);
                 N = 0;
                 printf("N = %i\n", N);
                 }
                 fprintf(fichier1, "%f\n", T); // On l'écrit toutes les températures dans le fichier
              }
     
       }
       fclose(fichier1); // ferme le fichier txt
       //fclose(fichier2); 
     
    /*if(N>10)
    {
     fichier2 = fopen("program final bis.txt", "a");
     
                  fclose(fichier2); */
    }
     
     
     
    int main()
    {
     dix_minutes();
     //while(1);
    }

  19. #39
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Correct, j'irai pas jusque là.

    - Tu n'as pas corrigé tes variables de type FILE* (fichier1 et fichier2) qui sont déclarés deux fois
    - Tu utilises des variables globales inutilement
    - Tu n'a pas corrigé la remarque de diogene (N = N++ est incorrect il faut écrire N++ seul, ou N = N+1)

    D'ailleurs ton programme ne marche pas :
    ./test

    Tapez la valeur T: 2
    Ti = 2.000000
    N = 2
    Tmoy = 1.000000

    Tapez la valeur T: 1
    Ti = 3.000000
    N = 4
    Tmoy = 0.750000
    Erreur de segmentation
    Un compilateur bien reglé t'aurai aussi montré des problèmes :
    test.c:30: attention : operation on `N' may be undefined
    test.c:44: attention : statement with no effect
    test.c:65: attention : control reaches end of non-void function
    test.c: Dans la fonction « main »:
    test.c:73: attention : control reaches end of non-void function

  20. #40
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pepsi78 Voir le message
    Merci à tous pour l'aide apportée

    Voici le code correct:
    Hum ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:9: warning: function declaration isn't a prototype
    main.c:13: warning: function declaration isn't a prototype
    main.c: In function `dix_minutes':
    main.c:30: warning: operation on `N' may be undefined
    main.c:44: warning: statement with no effect
    main.c:65: warning: control reaches end of non-void function
    main.c: At top level:
    main.c:70: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:73: warning: control reaches end of non-void function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 4 seconds)
    0 errors, 7 warnings
    Pour mieux configurer son compilateur :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. [debutant]sauvegarde des valeurs dans un formulaire
    Par pimousse_cerise dans le forum JSF
    Réponses: 7
    Dernier message: 15/06/2007, 09h56
  2. sauvegarde des valeurs de variables déclarées
    Par SegmentationFault dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2006, 10h08
  3. Réponses: 20
    Dernier message: 23/03/2006, 16h21
  4. Sauvegarder des valeurs fixes
    Par kekesilo dans le forum Access
    Réponses: 5
    Dernier message: 21/12/2005, 14h14
  5. [OleVariant] Comment sauvegarder la valeur ?
    Par heid dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2004, 00h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo