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. #1
    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 Acquisition et sauvegarde de valeurs
    Bonjour à tous,

    je suis également sur un projet en langage C et je n'y arrive vraiment pas.
    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.

    Pour le moment voila ce que mon programme donne:
    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
    #include "math.h"
    #include"stdio.h"
    #define TRIG 5
    #define TIME 10
     
    float Tmin=0.0;
    float Tmax=0.0;
    float val_ecart1=Tmax-Tmin;
    float val_ecart2=Tmin-Tmax;
     
    float temperature(float Tmin, float Tmax, int(TRIG))
    {
         if ((Tmax-Tmin>=TRIG) && (Tmin-Tmax<TRIG))
            return NULL;
     
         else
             if (Tmax-Tmin<=TRIG)
                return val_ecart1;
     
             else 
                  if (Tmin-Tmax<=TRIG)
                     return val_ecart2;
     
    }
    PS: je débute C donc aidez moi s'il vous plait

  2. #2
    Membre averti Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Points : 414
    Points
    414
    Par défaut
    c'est quoi le problème ?????
    "La créativité est faites d'attention et de respect pour les petits faits de la vie."

  3. #3
    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 soucis c'est que je n'arrive pas à faire la suite

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Avant d'aller plus loin, as tu commencé à tester ce que tu as écrit ?

    J'y vois déjà pas mal d'erreurs :

    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
    #include "math.h"
    #include"stdio.h"
    #define TRIG 5
    #define TIME 10
     
    /*
      Ici, 4 variables globales, toutes initialisées à zéro... pourquoi pas ?
    */
    float Tmin=0.0;
    float Tmax=0.0;
    float val_ecart1=Tmax-Tmin;
    float val_ecart2=Tmin-Tmax;
    /*
      Attention, ici, tu redéfinis deux variables locales précédemment déclarée globales
      Et que voulais tu faire avec le troisième paramètre ?? 
        Il y a deux parenthèses en plus dans le prototype et le dernier paramètre
        sera transformé en '5' à la compilation puisse que TRIG a été défini comme tel.
    */
    float temperature(float Tmin, float Tmax, int(TRIG))
    {
         if ((Tmax-Tmin>=TRIG) && (Tmin-Tmax<TRIG))
            return NULL; /* return NULL là où un float est attendu ?*/
         
         else
             if (Tmax-Tmin<=TRIG)
                return val_ecart1;
                
             else 
                  if (Tmin-Tmax<=TRIG)
                     return val_ecart2;
                  
    }
    Je ne voie pas non plus de fonction main...

    Dans la fonction temperature (fonction pas très bien nommée je pense) on calcule 4 fois la différence entre les températures, alors qu'on pourrai la calculer qu'une seule fois en début de fonction et ne retenir que la valeur absolue avec fabs.

  5. #5
    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
    je met TRIG à 5 car il faut que je compare l'écart de température entre Tmin et Tmax.
    Si TRIG est inférieur ou égal à 5 alors je stoke cet écart dans une mémoire sinon j'attend à nouveau 1 minute pour avoir les nouvelles valeurs.

    Oui mon programme à des erreurs mais je n'arrive pas à les corriger.

    C'est mon premier programme en C donc je lutte vraiment.

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par pepsi78 Voir le message
    C'est mon premier programme en C donc je lutte vraiment.
    Quand on commence en C -mais c'est vrai partout ailleurs- il faut partir d'une chose simple. Et ne pas hésiter d'abuser de FAQ ou de tutoriels.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* pour printf*/
    #include <stdio.h>
    /* pour EXIT_SUCCESS*/
    #include <stdlib.h>
     
    /* point d'entrée du programme*/
    int main()
    {
      printf("Bonjour tout le monde !\n");
      return EXIT_SUCCESS;
    }
    Après, une fois qu'on est sur que le programme fonctionne, on peut commencer à compliquer:
    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
    /* pour printf*/
    #include <stdio.h>
    /* pour EXIT_SUCCESS*/
    #include <stdlib.h>
     
    /* cette fonction calcule la différence entre deux valeurs
        et retourne 0 si cette valeur est inférience à un seuil*/
    float diffTemp(float fT1, float fT2, float fSeuil)
    {
      /* calcul de l'écart */
      float ret = fabs(fT1 - fT2);
      /* si écart inférieur à seuil, on le met à zéro*/
      if(ret < fSeuil)
      {
        ret = .0F;
      }
      return ret;
    }
     
    int main()
    {
     
      printf("Bonjour tout le monde !\n");
     
      /* test de notre nouvelle fonction*/
      printf("diff entre %f et %f : %f\n", 10., 11.,  diffTemp(10.,11.,5.)); 
      printf("diff entre %f et %f : %f\n", 10., 20.,  diffTemp(10.,20.,5.));
     
      return EXIT_SUCCESS;
    }

  7. #7
    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 pour le coup de pouce. Je vais essayer de faire la suite ce qui est pas gagné

    PS: il faut rajouter #include <math.h> pour fabs

  8. #8
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Quelques corrections légères

    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
    /* pour printf*/
    #include <stdio.h>
    /* pour EXIT_SUCCESS*/
    #include <stdlib.h>
    
    /* cette fonction calcule la différence entre deux valeurs
        et retourne 0 si cette valeur est inférience à un seuil*/
    float diffTemp(float fT1, float fT2, float fSeuil)
    {
      /* calcul de l'écart */
      float ret = fabs(fT1 - fT2);
      /* si écart inférieur à seuil, on le met à zéro*/
      if(ret > fSeuil)
      {
        ret = .0F; /* une température ne peux pas être à zero ? */
      }
      return ret;
    }

  9. #9
    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
    si la température peut valoir 0, mais pour etre prise en compte elle ne doit pas etre supérieure à 5°C.

  10. #10
    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
    pourquoi mettre 0.0F ??

  11. #11
    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
    Comment faire pour faire la somme de valeurs puis de trouver la moyenne de toutes ses valeurs?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    generique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while compteur
    {
    j'échantillonne et je stock dans une variable ;
     
    variable + = je re échantillonne 
    j'incrémente le compteur
    }
    et quand je sors du while j'ai assez de variable je fais variable divisé par le compteur ?

  13. #13
    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
    Ok reste plus qu'à réussir à mettre tt ca dans le programme principale

  14. #14
    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 en fait je m'étais trompé à la base dans mon organigramme donc je dois repartir de 0.

    Voici ce que ca donne:
    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
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float Tmoyi, Tmoy;
    float TN, T;
    float TT;
     
     
    void dix_minutes ()
    {
    // TN=0.0;
    // T = 0.0;
     TN=TN+T;
     for(N=10;N>0;N--);
    }
     
    void Tmoy_instantannee ()
    {
     Tmoyi = TN/10.0;
    }
     
    void valeur_absolue ()
    {
     TT = Tmoyi - Tmoy;
     if (TT < 0.0)
     {
      TT == 0.0 - TT;
     }
    }
     
    void ecart_temp ()
    {
    float Tmoy;
    float Tmoyi;
    if (Tmoyi - Tmoy <= 2.5)
    return Tmoy; //
    else 
    return (Tmoyi = Tmoy); //
    }
     
    float excel(int argc, char *argv)
    {
    FILE *mon_fichier;
    mon_fichier = fopen("C:\mon_tableau.xls", "w");
    fputs ("<table><tr><td>Ligne 1</td><td>Ligne 2</td><td>Ligne3</td></tr><tr><td>10</td><td>23</td><td>125</td></tr></table>", mon_fichier);
    fclose( mon_fichier);
    return 0;
    }
    //int excel(int argc, char *argv)
     
    int main ()
    {
     //float Tmoy, Tmoyi;
     void dix_minutes();
     void T_instantannee();
     void valeur_absolue();
     void ecart_temp();
     void excel();
     while(1);
    }
    J'ai malheureusement des erreurs dans mon programme et je n'arrive pas à le compiler.

    Pourriez vous m'aider s'il vous plait

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Rapidement le plus gros dans ton main :
    L'appel d'une fonction tu ne remets pas le type (ici void).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main ()
    {
       dix_minutes();
    }
    Le while(1) n'a t-il pas besoin de {} ensuite ?

    Ensuite, dans excel()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_fichier = fopen("C:\mon_tableau.xls", "w");
    Ce n'est pas "C:/mon_tableau.xls" ?

    ce que tu as mis dans le puts je suis pas trop sur que ça fonctionne.

    Si tu fais return 0, autant déclarer void excel() ?

  16. #16
    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 j'ai plus aucun warning maintenant.

    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
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
     
    int N;
    float Tmoyi, Tmoy;
    float TN, T;
    float TT;
     
     
    void dix_minutes ()
    {
     TN = 0.0;
     T = 0.0;
     TN = TN+T;
     for(N = 10; N > 0; N--);
    }
     
    void Tmoy_instantannee ()
    {
     Tmoyi = TN/10.0;
    }
     
    void valeur_absolue ()
    {
     TT = Tmoyi - Tmoy;
     if (TT < 0.0)
     TT == 0.0 - 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>T1</td><td>T2</td><td>Tmoy</td></tr><tr><td>10</td><td>25</td><td>125</td></tr></table>", program);
    fclose( program);
    }
     
     
    int main ()
    {
     dix_minutes();
     Tmoy_instantannee();
     valeur_absolue();
     ecart_temp(3, 5);
     excel();
     while(1);
    }
    sauf que maintenant j'aimerais le tester avec des valeurs. Mais je ne sais pas ou placer les printf

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Tout dépend de ce que tu veux afficher. Tes variables sont définies en global (avant les fonctions) donc tu peux y accéder de partout dans ton programme. Un printf dans une fonction ou dans ton main devrait retourner la même chose.

    Tu veux faire quoi avec cette fonction ? je ne vois pas pourquoi l'appeler dix_minutes ? (ton for ne fait pas de tempo de 10min)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void dix_minutes ()
    {
    TN = 0.0;
    T = 0.0;
    TN = TN+T;
    for(N = 10; N > 0; N--);
    }
    et TN = TN+T vaudra toujours 0 si tu initialise juste avant TN = T = 0.

  18. #18
    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 fait il faudrait que je puisse ajouter des valeurs à T, TN pour voir Tmoyi et Tmoy évoluer.
    Commment faire pour voir N passer de 10 à 0?
    J'ai appelé "void dix_minutes" car c'est une boucle qui doit etre appelée toutes les minutes mais qui dure 10 minutes

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Si tu veux ajouter des valeurs à T et TN ce serait plus du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void dix_minutes (float A, float B)
    {
    TN = TN + A;
    T = T + B;
    TN = TN+T;
    for(N = 10; N > 0; N--) printf("N : %d\n", N);
    }
    Mais une boucle for ne compte pas en minutes loin de là.
    Il faudrait regarder les timer pour un laps de temps.

  20. #20
    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
    ce qu'il faudrait faire c'est: lancer le programme mettre une valeur pour T, une valeur pr TN et ensuite voir afficher la valeur de Tmoyi, Tmoy et TT.

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