1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 0
    Points
    0

    Par défaut Projet informatique sur la température en C

    Bonjour à toutes et à tous,

    Si je viens vers vous , c'est pour demander humblement de l'aide.

    En effet, voilà 1 semaine que je planche sur un projet en C...et malgré tous mes efforts je n'avance pas.

    La date limite approche, il me reste moins d'une mois pour terminer mon travail, et je suis très loin du but.

    Vous trouvez ci-dessous mon projet.

    Je vous remercie d'avance
    1 Cahier des charges : Température sondes oregon
    Les sondes de température/humidité oregon permettent une acquisition des données et un envoi de ces données sous forme structurée au format json.
    On se propose de réaliser une application permettant de gérer ces informations c'est-à-dire de les afficher, les extraire, les supprimer. Par donnée on entend des valeurs sous le format suivant : date heure, température, humidité, numéro de sonde
    Exemple du fichier de données au format json :
    {"datetime": "2017-04-29 20:26:55", "temperature": "24.600000", "humidity": "46.000000", "channel": "3" }
    {"datetime": "2017-04-29 20:28:22", "temperature": "24.500000", "humidity": "46.500000", "channel": "1" }
    Un fichier brut est donc constitué d'une suite de lignes de données de ce type. Le numéro de channel représente en réalité le numéro du capteur (de 1 à 9)

    Projet oregon
    2 Spécifications fonctionnelles
    2.1 L'interface Homme machine
    Lorsque l'on édite le fichier de données, on peut constater que :
    Il est constitué de données horodatées qui sont issues de capteurs différents (1,2 ou 3). La transmission étant réalisée sous forme hertzienne, certaines données ne sont pas valides et dans ce cas le numéro de capteur vaut alors -1.
    Le nombre de données par période est variable (au maximum toutes les 30 secondes)
    L’application devra permettre à l'utilisateur de :
    1. Saisir le nom du fichier de données à ouvrir
    2. Afficher un résumé des informations disponibles dans ce fichier sous la forme :
    Capteur 1 : du 2017-04-29 20:26:55 au 2017-04-29 23:29:55 Capteur 3 : du 2017-04-29 12:00:55 au 2017-04-29 23:29:55
    3. Extraire les données d'un capteur particulier dans un fichier séparé dont le nom sera de la forme datedebut_heuredebut_datefin_heurefin_captN.json avec
    datedebut correspondant à la première date de ce capteur dans le fichier datefin correspondant à la dernière date de ce capteur dans le fichier
    N correspondant au numéro de capteur
    4. Normaliser les données extraites d'un capteur : En effet le nombre de données par heure est variable (de 0 à plus de 7000). La température et l'humidité variant lentement, on ne désire conserver que une seule donnée par intervalle de 5mn. On aura donc au plus 12 données par heure. Le nom du fichier généré sera de la forme datedebut_heuredebut_datefin_heurefin_captN_Normalise.json
    5. Afficher par journée les min max de température
    Ces fonctionnalités peuvent être sélectionnées par un menu via une interface homme machine
    en mode texte dont l’apparence sera la suivante :

    Projet temperature 2
    2.2 Fonction principale
    L’application est de type guidée par menu, c’est à dire qu’après avoir effectué une fonction on retourne à la saisie d’une nouvelle commande (afficher par exemple).
    Application temperature
    Sélectionner le fichier à ouvrir
    Afficher le résumé du fichier
    Extraire les données d'un capteur Normaliser les données d'un capteur Afficher les min/max de chaque journée Sortir
    tapez 1 tapez 2 tapez 3 tapez 4 tapez 5 tapez 6
    Tant que l’utilisateur n’a pas tapé la touche correspondant à la commande Sortir , alors on traite la touche qui est appuyée :
    Si c’est la touche 1, alors on appelle la fonction ouvrir
    Si c’est la touche 2, alors on appelle la fonction resume
    Si c’est la touche 3, alors on appelle la fonction extraire
    Si c’est la touche 4, alors on appelle la fonction normaliser Si c’est la touche 5, alors on appelle la fonction minmax Si c’est la touche 6, alors on sort de l'application
    Sinon, on affiche le message « commande inconnue » 2.3 Fonction ouvrir( )
    Objectif : on désire choisir un fichier a traiter
    Cette fonction peut etre appellée par le choix 1.
    Cependant, dans le cas ou l'utilisateur commencerait par le choix 2 à5, il sera nécessaire de demander à l'utilisateur de choisir un fichier à traiter.
    L'utilisateur saisit le nom du fichier à ouvrir, un message est affiché si le fichier n'existe pas.
    2.4 Fonction resume( )
    Objectif : On veut informer l'utilisateur sur le contenu du fichier ouvert, notamment sur les dates de debut et de fin de l'acquisition par capteur.
    Exemple d'affichage produit :
    Le fichier jsonfile.txt contient des informations sur : Capteur 1 : du 2017-04-29 20:26:55 au 2017-04-29 23:29:55
    ...
    Capteur 5 : du 2017-04-29 12:00:55 au 2017-04-29 23:29:55
    Remarque : Si l'utilisateur n'est pas encore passé par le choix 1, l'application doit alors demander à l'utilisateur quel est le fichier à ouvrir.
    jj sekowski Projet temperature 3
    2.5 Fonction extraire ( )
    Objectif : on extrait les données d'un capteur particulier dans un nouveau fichier. L'application nous demande le numéro de capteur N dont on désire extraire les données.
    Si des données sont disponibles, l'application écrira les données dans un fichier dont le nom sera de la forme datedebut_heuredebut_datefin_heurefin_captN.json avec
    datedebut correspondant à la première date de ce capteur dans le fichier datefin correspondant à la dernière date de ce capteur dans le fichier
    N correspondant au numéro de capteur
    Le fichier ne contiendra donc que les données d'un capteur particulier
    2.6 Fonction normaliser( )
    Objectif : On désire normaliser le fichier, c'est-à-dire ne conserver que une seule donnée par période de 5mn.
    L'application nous demande le numéro de capteur N dont on désire extraire les données.
    Les données seront écrite dans un fichier dont le nom sera de la forme datedebut_heuredebut_datefin_heurefin_captN_normalise.json
    2.7 Fonction minmax( )
    Objectif : on affiche par journée, les valeurs min et mas de température pour un capteur
    donné.
    L'application nous demande quel capteur est à afficher. On affiche alors
    2015-04-28 capeur 3 temperature min : 24.600000, max = 25.600000 2015-04-29 capeur 3 temperature min : 22.600000, max = 26.600000
    3 Evaluation du projet
    La note attribuée sera constituée à partir des éléments suivants :
    25% pour l'analyse, le paramétrage des 5 fonctions et le respect de la qualité : commentaire, lisibilité, simplicité.
    50% pour le fonctionnement de chaque fonctionnalité de 1 à 5
    25%pour la participation et l'implication personnelle
    Le programme ne devra pas avoir de variables globales

    Projet temperature 4
    Problématiques à résoudre :
    exercice sur deplacement fichier : expliquez le fonctionnement
    exercice sur extraction de temperature : temperature :26.0001 vers une var float
    soit la chaine char tab[] = "temperature :26.0001" ;
    soit la variable réelle char temp = 0.0;
    en utilisant les fonctions strstr(char *source, char *val); qui cherche val dans source et float atof(char * chaine); qui convertit chaine (qui ne doit contenir que des digit 0 à 9 et le point) en une valeur float,
    ecrire le programme de conversion de tab vers la variable temp; (temp devra donc contenir 26.001)

  2. #2
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    6 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 6 767
    Points : 21 041
    Points
    21 041

    Par défaut

    Bonjour et bienvenue,

    Nous pouvons t'aider mais nous ne ferons pas ton travail à ta place. Montre-nous ce que tu as écrit jusqu'ici et où tu bloques en particulier, et nous tâcherons de t'orienter.
    En outre, c'est effectivement intéressant d'avoir le cahier des charges exact de ton projet, mais le déposer tel quel sur un site à forte fréquentation alors qu'il y a l'adresse e-mail du prof en première page, ce n'est pas une chose à faire. Non seulement il risque de recevoir beaucoup de spam mais c'est aussi un moyen pour lui de remonter jusqu'à toi par cet intermédiaire.

    Par contre, à ta décharge, tu t'y prends encore suffisamment tôt. Trois semaines, cela reste raisonnable pour mener un projet de développement à bien.

    Commence déjà par écrire les prototypes de toutes les fonctions demandées, puis remplis leur corps avec un simple placeholder, par exemple un printf(""); dans chacune d'elles et qui écrit à chaque fois le nom de la fonction concernée à l'écran. Cela te permettra de mettre en place le squelette de ton programme et de les appeler normalement même si elles ne sont pas pleinement implémentées. Ensuite, rédige la fonction principale, avec le menu utilisateur et la boucle sans fin qui permet d'appeler à volonté chacune desdites fonctions, comme demandé dans ton cahier des charges. Ce sera beaucoup plus facile pour pouvoir ensuite rédiger le reste de tes fonctions puis les tester, une par une.

    Bon courage.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    Je tiens à vous remercie pour vos conseils.

    Je vous tiens au courant de l'avancement.

    Cordialement

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    Comme promis j'ai avancé un peu sur mon programme.
    J'ai crée un menu, je suis à l'étape de créer une fonction ouvrir pour crée un fichier à traiter et je bloque sur la façon à mettre en oeuvre les différentes fonctions.
    Je vous mis le travail que j'ai réalisé.

    Merci d'avance.

    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
     
        int main()
     {
         int information = {""};
     int choixMenu;
    do{
         printf("---Menu---\n\n");
         printf(" Selection fichier a ouvrir      Tapez 1 \n");
         printf(" Afficher resume du fichier      Tapez 2 \n");
         printf(" Extraire donnees d'un capteur   Tapez 3 \n");
         printf(" Normaliser donnees capteur(5mn) Tapez 4 \n");
         printf(" Afficher Min Max par journee    Tapez 5\n");
         printf(" Sortir! Tapez 6 \n");
         printf(" Commande? :       \n)";
         scanf("%d", &choixMenu);
          switch(choixMenu)
     
    {
        case 1:
            printf("Vous avez choisis 1\n");
            break;
     
    FILE* fichier = NULL;
     
            fichier = fopen(".txt" , "r+");
     
      if (fichier != NULL)
            {
                fprintf("nom de fichier\n");
                gets(information.nom);
            }
        case 2:
            printf("Vous avez choisis 2\n");
            break;
        case 3:
            printf("Vous avez choisis 3\n ");
            break;
        case 4:
            printf("Vous avez choisis 4\n");
            break;
        case 5:
            printf("Vous avez choisis 5\n");
            break;
       case 6:
            printf("Vous avez choisi de sortir du programme\n");
            break;
     default:
            printf("commande inconnue\n");
            break;
    }
     
        } while(choixMenu != 6);
     
     
    return(0);
    }

  5. #5
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    6 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 6 767
    Points : 21 041
    Points
    21 041

    Par défaut

    Ce n'est pas mal.
    La boucle do…while impliquant choixMenu est une bonne approche. Attention aux indentations : tous les programmeurs sont pointilleux dessus et à juste titre (tu te rendras compte très vite pourquoi par toi même). Prends l'habitude dès maintenant d'aligner proprement tes programmes.

    Pour le reste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         int information = {""};
    C'est incorrect. Cela compilera quand même car cela reste légal sur le plan formel (et plus précisément syntaxique) mais cela ne fera absolument pas ce que tu crois.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        case 1:
            printf("Vous avez choisis 1\n");
            break;
     
    FILE* fichier = NULL;
     
            fichier = fopen(".txt" , "r+");
     
      if (fichier != NULL)
            {
                fprintf("nom de fichier\n");
                gets(information.nom);
            }
    Attention : tu ouvres un fichier dans ta condition switch sans le refermer. Dès que tu vas en sortir, tu vas perdre toute trace des ressources que tu as ouvertes (et le fichier ne se refermera pas de lui-même, en tout cas pas tant que ton programme sera en train d'être exécuté). De plus, tu ouvres un fichier « .txt » avec une extension mais un nom vide. Ce n'est probablement pas ce que tu souhaites faire non plus. Enfin, gets(information.nom); est incorrect également : « information » n'est pas une structure, ni un pointeur, et tu n'as pas reservé l'espace nécessaire pour recevoir ta chaîne.

    Et bien sûr, tu as laissé le break en début de clause, mais je suppose que tout cela est volontaire le temps de mettre au point la procédure en question.

    Pas de parenthèse à return : ce n'est pas une fonction (accessoirement, il n'y en a pas non plus à sizeof).


    N'oublie pas non plus que l'énoncé te demande d'écrire une fonction par option disponible et d'appeler chacune d'elles depuis ta boucle principale :

    Citation Envoyé par Énoncé
    Si c’est la touche 1, alors on appelle la fonction ouvrir
    Si c’est la touche 2, alors on appelle la fonction resume
    Si c’est la touche 3, alors on appelle la fonction extraire
    Si c’est la touche 4, alors on appelle la fonction normaliser Si c’est la touche 5, alors on appelle la fonction minmax Si c’est la touche 6, alors on sort de l'application

    Par conséquent, il faut écrire tes fonctions sous la forme void resume() ou int resume() (pour renvoyer un éventuel code d'erreur ou d'état), et passer des paramètres si nécessaire. Ensuite, tu appelles ces fonctions dans ta boucle switch plutôt qu'y écrire directement ta procédure.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 5 703
    Points : 15 592
    Points
    15 592
    Billets dans le blog
    1

    Par défaut

    Bonjour

    Il te faut apprendre à découper les tâches pour pouvoir les affecter à une fonction dédiée, fonction qui ne doit faire que son travail et rien d'autre (c'est l'appelant qui récupère le retour et qui gère le souci éventuel).

    Voici par exemple une possibilité de la fonction "ouvrir"

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FILE *ouvrir()
    {
        FILE *fp;
        char nom[100];
     
        fputs("Entrez le nom du fichier à ouvrir :", stdout);
        scanf("%s", nom);
     
        // Eventuellement strcat(nom, ".txt") pour mettre l'extension de façon automatique
     
        return fopen(nom, "r+");
    }

    Et ensuite dans ton code
    Code c : 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
    int main() {
        FILE *fp=NULL;
        ...
        switch (choixMenu) {
            case 1:
                // Fermeture éventuel fichier précédemment ouvert
                if (fp) fclose(fp);  // C'est pour ça que je l'initialise à null au début
     
                // Ouverture nouveau fichier
                fp=ouvrir();
                if (fp == NULL) {
                    ... // Gestion du pb
                }
                break;
            case 2:
                ...
               break;
            ...
            case 6:
                if (fp) fclose(fp);
                break;            
        }
    }
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    je vous remercie de vos remarque et je vais réessayer de faire les fonctions.

    Je vous tiens informés prochainement.

    Cordialement.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    J'ai pu écrire la fonction ouvrir et résume, je suis à la phase d'extraire , normaliser et la fonction minmax et je souhaite avoir votre avis sur le travaille que j'ai effectué et me donner des pistes sur la suite de mon programme.

    vous trouvez ci-joint le fichier à traiter

    Merci de vos conseils




    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    #include <stdio.h>
    #include <stdlib.h>
    FILE *ouvrir(void);
    void resume(FILE * f);
     
        int main()
     {
          FILE *fp = NULL;
     int choixMenu;
     
    do{
         printf("---Menu---\n\n");
         printf("Selection fichier a ouvrir:      Tapez 1\n");
         printf("Afficher resume du fichier:      Tapez 2\n");
         printf("Extraire donnees d'un capteur:   Tapez 3\n");
         printf("Normaliser donnees capteur(5mn): Tapez 4\n");
         printf("Afficher Min Max par journee:    Tapez 5\n");
         printf("Sortir:                          Tapez 6\n");
         printf("Commande?\n");
     
         scanf("%d", &choixMenu);
          switch(choixMenu)
     
    {
    case 1:
     
        if (fp) fclose(fp);
     
                fp=ouvrir();
                if (fp == NULL){
                            perror("Fichier non trouver\n");
                                }
    break;
     
     
        case 2:
            printf("Vous avez choisis 2\n");
                if  (fp == NULL){
                            fp=ouvrir();
                            if (fp == NULL){
                                   perror("Fichier non trouver\n");
     
                                }
                              }
    resume(fp);
    break;
     
        case 3:
            printf("Vous avez choisis 3\n ");
            break;
        case 4:
            printf("Vous avez choisis 4\n");
            break;
        case 5:
            printf("Vous avez choisis 5\n");
            break;
       case 6:
                if (fp) fclose(fp);
                printf("Vous avez choisi de fermer le programme\n");
                break;
     
     default:
            printf("Votre choix est incorrect\n");
            break;
    }
     
        } while(choixMenu != 6);
     
     
    return(0);
    }
     
     
    FILE *ouvrir(void)
    {
     
        char nom[100];
     
        FILE *fd;
     
        fputs("Entrez le nom du fichier a ouvrir :", stdout);
     
        scanf("%s",nom);
     
        fd=fopen(nom, "r+");
     
        return (fd);
     
    }
     
    void resume(FILE * f)
    {
     char ligne [999];
    while (fgets(ligne,999,f))
            {
             printf("%s",ligne);
             } 
     
    }
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 5 703
    Points : 15 592
    Points
    15 592
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par ahd9156 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void resume(FILE * f)
    {
     char ligne [2000];
    while (fgets(ligne,999,f))
    {
        printf("%s",ligne);
    }
     
    }
    Déjà très rapidement: pourquoi tu définis "ligne" à 2000 caractères si tu ne la remplis qu'avec 998 caractères ??? (ok 999 avec le '\0' mais 999 ce n'est pas 2000). Alors 2000 pour 999 ce n'est pas réellement grave (mémoire et temps négligeable) mais ça dénote un certain laxisme. On sent que ça ne t'intéresse pas des masses de réfléchir vraiment à ton code. Et si on rajoute ton indentation anarchique ça renforce encore cette impression.
    Et donc quand on voit un code aussi peu motivé, on n'est pas de notre côté motivés pour y investir du temps à t'aider...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    Effectivement c'est une erreur de ma part, actuellement je suis en partiel c'est pour cela que j'ai pas pris le temps de tout vérifier, je vous envoyer mon programme pour avoir un oeil extérieur sur mon travail sachant que je suis pas bon en language C mais cela ma pas empêché d'avancer à mon rythme.

    Merci de vos remarque

    Cdlt

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 7
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    Je me permets de vous solliciter un nouvelle fois pour voir mon programme et m'aider sur la fonction minmax

    Merci à vous




    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
    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 <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    FILE *ouvrir(void);
    void resume(FILE * f);
    void extraire(FILE * f);
    void normaliser(const char* name);
     
    int main() {
        FILE *fp = NULL;
        int choixMenu;
     
        do{
             printf("---Menu---\n\n");
             printf("Selection fichier a ouvrir:      Tapez 1\n");
             printf("Afficher resume du fichier:      Tapez 2\n");
             printf("Extraire donnees d'un capteur:   Tapez 3\n");
             printf("Normaliser donnees capteur(5mn): Tapez 4\n");
             printf("Afficher Min Max par journee:    Tapez 5\n");
             printf("Sortir:                          Tapez 6\n");
             printf("Commande?\n");
     
             scanf("%d", &choixMenu);
             switch(choixMenu){
                case 1:
                    if (fp) fclose(fp);
                        fp=ouvrir();
                        if (fp == NULL){
                            perror("Fichier non trouver\n");
                        }
                break;
                case 2:
                    printf("Vous avez choisis 2\n");
                    if (fp == NULL){
                        fp=ouvrir();
                    }
                    resume(fp);
                    break;
                case 3:
                    printf("Vous avez choisis 3\n ");
                    if(fp == NULL){
                        fp=ouvrir();
                    } else {
                        extraire(fp);
                    }
                    break;
                case 4:
                    printf("Vous avez choisis 4\n");
                    break;
                case 5:
                    printf("Vous avez choisis 5\n");
                    break;
               case 6:
                    if (fp) fclose(fp);
                    printf("Vous avez choisi de fermer le programme\n");
                    break;
                default:
                    printf("Votre choix est incorrect\n");
                    break;
            }
        } while(choixMenu != 6);
        return(0);
    }
     
    FILE *ouvrir(void)
    {
        char nom[100];
        FILE *f;
        fputs("Entrez le nom du fichier a ouvrir :", stdout);
        scanf("%s",nom);
        f=fopen(nom, "r+");
        if (f == NULL){
            perror("Fichier non trouvé\n");
        } else {
            printf("Vous avez ouvert %s \n", nom);
        }
        return (f);
    }
     
    void resume(FILE * f)
    {
        char ligne [999];
        while (fgets(ligne,999,f)){
            printf("%s",ligne);
        }
    }
     
    void extraire(FILE * f){
        if(f == NULL){
            f = ouvrir();
        }
        if(f != NULL){
            FILE *fp;
     
            printf("Quel capteur voulez vous extraire ?\n");
            int capteur;
            char ligne [1000];
            // on demande a l'utilisateur de taper le numero du capteur
            scanf("%d", &capteur);
            if(capteur < 1 | capteur > 3){
                printf("Erreur sur le numéro de capteur \n");
            }
            else {
     
                char buffer [15];
                sprintf(buffer, "capteur-%d.txt", capteur);
     
                fp = fopen(buffer, "w+");
                while(fgets(ligne,sizeof ligne ,f) != NULL){
                    char buf [15];
                    //on associe a un buffer une chaine de character qui correspond a "channel": "X"
                    sprintf(buf, "channel\": \"%d\"", capteur);
                    // si dans la ligne on a le channel X
                    if(strstr(ligne, buf) != NULL){
                        //on ajoute les lignes dans le nouveau fichier capteur-X
                        fputs(ligne, fp);
                    }
                }
                fclose(fp);
            }
        }
    }
     
    void normaliser(const char* name){
        int channel;
        char tempS[20], temp[20], datetimeStr[19], datetime[19], humidity[19], dtm[300];
        printf("%s", name);
        //je copie la chaine dans un buffer pour pouvoir parser
        strcpy(dtm, name);
     
        //je voulais parser la chaine pour sortir les valeurs. mais ne marche pas encore
        sscanf(dtm, "%s %s %s %s %s %d", datetimeStr, datetime, tempS, temp, humidity, &channel);
        printf("date =  %s, temperature = %s, \n", datetime, temp);
    }
     
    void minmax(FILE * f){
     
    }

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 5 703
    Points : 15 592
    Points
    15 592
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par ahd9156 Voir le message
    2.7 Fonction minmax( )
    Objectif : on affiche par journée, les valeurs min et max de température pour un capteur
    donné.
    L'application nous demande quel capteur est à afficher. On affiche alors
    2015-04-28 capeur 3 temperature min : 24.600000, max = 25.600000 2015-04-29 capeur 3 temperature min : 22.600000, max = 26.600000

    Je me permets de vous solliciter un nouvelle fois pour voir mon programme et m'aider sur la fonction minmax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void minmax(FILE * f){
     
    }
    Oui, aider, pas faire à ta place. Ce n'est pas en nous montrant une fonction vide que tu nous feras croire que t'as travaillé !!!

    Donc elle doit faire quoi cette fonction min/max ? 1) poser une question et 2) traiter la réponse. Il me semble que c'est pas super compliqué. Tu poses la question, tu lis le fichier et chaque fois que tu trouves un capteur correspondant tu regardes si la température est plus petite que le minimum déjà trouvé, auquel cas tu remplaces ce minimum par cette température ; et pareil pour le maximum.
    Et quand tu as tout lu ben tu affiches ce min et ce max...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/04/2013, 20h28
  2. Réponses: 3
    Dernier message: 16/09/2008, 20h56
  3. executer un projet websphere sur tomcat
    Par s.lakhlifi dans le forum Websphere
    Réponses: 2
    Dernier message: 02/10/2006, 12h50
  4. réalisation d'un site de projet informatique
    Par liquid dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 23/08/2006, 17h47
  5. Formation "Chef de projets informatiques" à Paris8
    Par liliaparis dans le forum Etudes
    Réponses: 3
    Dernier message: 24/04/2005, 12h52

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