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 :

Projet en C (information traffic bus)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut Projet en C (information traffic bus)
    Bonjour voila mon probleme j'ai un projet à rendre à la fin de l'année. Dans ce projet je m'occupe de la partie message.
    Je reçois la trame d'un GPS je la découpe, je sauvegarde et traite les mots pour dire si le bus est station, si il est parti ou si il arrive.
    J'ai la fonction qui decoupe et sauvegarde mes je vois pas comment faire la comparaison

    Voici ce que j'ai deja fait :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
     
     
    char **DecoupeMots (char *chaine_entrante, const char *separateur)
    {
       char **tab = NULL; //On crée un tableau principal et un sous-jaccent
     
       if (chaine_entrante != NULL && separateur != NULL)
       {
          int i;
          char *chaine_sortante = NULL;
          size_t size = 1;
     
    /* (1) */
          for (i = 0; (chaine_sortante = strtok (chaine_entrante, separateur)); i++)
          {
             if (size <= i + 1)
             {
                char *tmp = NULL;
     
    /* (2) */
                size <= 1;
                tmp = realloc (tab, sizeof (*tab) * size);
                if (tmp != NULL)
                {
                   tab = tmp;
                }/* le tableau principal (tab) possede deux tableaux sous-jaccent */
                else
                {
                   fprintf (stderr, "Memoire insuffisante\n");
                   free (tab);
                   tab = NULL;
                   exit (EXIT_FAILURE);
                }
             }
    /* (3) */
             tab[i] = chaine_sortante;
             printf("%s\n",tab[i]);
             chaine_entrante = NULL;
          }
          tab[i] = NULL;
     
       }
       return tab;
    }
     
     
    /*******************************************************************************/
    char *TraiteMots (char *pointeur,char *Mots)
    {
    	if (pointeur == Mots)
    	{
    		printf("\n Bus en station !!!");
    	}
    	else
    	{
    		printf("\nVotre BUS n'est pas encore arrive !!\n");
    	}
    	return 0;
    }
     
     
     
     
    /*******************************************************************************/
     
     
    int main ()
    {
    	char *buffer;
    	char Chaine_Entrante[]="Il etait une fois dans la ville de foix une marchande de foie";
    	char Mots[]="Il etait une fois dans la ville de foix une marchande de foie";
     
    	buffer = strdup( Chaine_Entrante );
     
     
    		while(1)
    	{
     
    		if (buffer != NULL)
     
    		{
    	char **pointeur;
    	char separateur[] = " ";
    	char **CompareMots;
     
    	printf("%s\n",buffer);
     
    	pointeur=DecoupeMots (buffer,separateur);
     
    	printf("\n%s \n",pointeur[2]); //verifie les données sauvegardé
     
    	TraiteMots (pointeur,Mots);
     
     
    		}
     
     getchar (); // Pause dans en mode console
     
    	}
     
    	return 0 ;
    }

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Créer un parser avec des strcmp/strncmp ? et découper avec des strncpy/strndup ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    +1 Metalman : des chaines de caractères ne se comparent pas avec == mais avec strcmp() !

    Quelques remarques :

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    OK merci donc je prends en considération vos arguments et je vous fait signe après.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Merci mes strncpy/strndup je suis obliger de compter pour séparer alors que strtok sépare par rapport au séparateur

    Pour strcmp me permet de comparer mes quand je change la 2nde phrase il ne m'affiche pas la condition else

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    char **DecoupeMots (char *chaine_entrante, const char *separateur)
    {
       char **tab = NULL; //On crée un tableau principal et un sous-jaccent
     
       if (chaine_entrante != NULL && separateur != NULL)
       {
          int i;
          char *chaine_sortante = NULL;
          size_t size = 1;
     
    /* (1) */
          for (i = 0; (chaine_sortante = strtok (chaine_entrante, separateur)); i++)
          {
             if (size <= i + 1)
             {
                char *tmp = NULL;
     
    /* (2) */
                size <= 1;
                tmp = realloc (tab, sizeof (*tab) * size);
                if (tmp != NULL)
                {
                   tab = tmp;
                }/* le tableau principal (tab) possede deux tableaux sous-jaccent */
                else
                {
                	fprintf (stderr, "Memoire insuffisante\n");
                   free (tab);
                   tab = NULL;
                   exit (EXIT_FAILURE);
                }
             }
    /* (3) */
             tab[i] = chaine_sortante;
             printf("%s\n",tab[i]);
             chaine_entrante = NULL;
          }
          tab[i] = NULL;
     
       }
       return tab;
    }
     
     
     
    /*******************************************************************************/
    char *TraiteMots (char *pointeur,char *Mots)
    {
    	if (strcmp (pointeur,Mots))
    	{
    		printf("\n Bus en station !!!");
    	}
    	else
    	{
    		printf("\nVotre BUS n'est pas encore arrive !!\n");
    	}
    	return 0;
    }
     
     
     
     
    /*******************************************************************************/
     
     
    int main ()
    {
    	char *buffer;
    	char Chaine_Entrante[]="Il etait une fois dans la ville de foix une marchande de foie";
    	char Mots[]="Il etait une fois dans la ville de foix une marchande de foie";
     
    	buffer = strdup( Chaine_Entrante );
     
     
    		while(1)
    	{
     
    		if (buffer != NULL)
     
    		{
    	char **pointeur;
    	char separateur[] = " ";
    	char **CompareMots;
     
    	printf("%s\n",buffer);
     
    	pointeur=DecoupeMots (buffer,separateur);
     
    	printf("\n%s \n",pointeur[2]); //verifie les données sauvegardé
     
    	TraiteMots (pointeur,Mots);
     
     
     
    		}
     
     getchar (); // Pause dans en mode console
     
    	}
     
    	return 0 ;
    }
    j'ai pas encore changé la partie qui traite du tableau dynamique.

  6. #6
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    C'est au niveau du : tab[i] = chaine_sortante; que tu devrais faire un : tab[i] = strdup(chaine_sortante); à chaque tour de boucle.

    Ainsi, tu ne dépendra plus de la phrase initiale qui est allouée dans un seul malloc, mais chaque mot sera dans sa propre case.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Mais en fait j'avais pas vue qu'il y avait une partie système embarqué

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    Il faut dire qu'elle est un peu cachée ^^ Ce n'est pas une sous-partie du forum C. Beaucoup de gens postant ici n'ont en fait pas un problème de C mais un problème d'embarqué. Il faut donc décider si son problème concerne uniquement le langage (auquel cas il a sa place dans le forum C) ou si son problème est lié à des problématiques matérielles ou non existantes sur PC (auquel cas il a sa place dans le forum Embarqué).

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Re-bonjour a tous

    Merci pour vos réponse j'ai un nouveaux probleme voila. il recupere la trame il convertit les nombre mais je voudrais convertir un charactère comme une lettre en un charactère "+" ou "-". pour faire un calcul de distance par la suite.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
     
    char **DecoupePhase (char *chaine_entrante, const char *separateur)
     
    {
       /*Declaration*/
       char **TEXTE = NULL;
       int i = 0;
       char *chaine_sortante = NULL;
       TEXTE = malloc(5 * sizeof(*TEXTE));
       double m=0;
     
       /*Traitement*/
       if (chaine_entrante != NULL && separateur != NULL)
       {
     
          for (i = 0; i<5 ; i++)
          {
        	 chaine_sortante = strtok(chaine_entrante, separateur);
        	 TEXTE[i] = strdup(chaine_sortante);
             /*  printf("%s\n",TEXTE[i]); //permet de voir si la separation est faite */
             m = atof(TEXTE[i]);
             printf("%f\n",m)  ; //affiche valeur convertit
             chaine_entrante = NULL;
     
          }
          TEXTE[i] = NULL;
       }
     
       return TEXTE;
    }
     
     
    /*******************************************************************************/
     
    /* char *TraiteMots (char* buffer,char* Mots) */
    char Conversions(char **TEXTE)
    {
    	char Moins=-;
    	strcpy(Moins,TEXTE[3]);
     
    	printf("element converti en operateur : %c",Moins);
    	return (0);
     
    }
     
     
     
     
     
     
    /*******************************************************************************/
     
     
    int main (void)
    {
    	char *buffer;
    	char Chaine_Entrante[]="$GPRMC,4042.6142,N,07400.4168,W,10.55";
    	/* char Mots[]="Il etait une fois"; */
    	char **resultat_decoupe_phrase;
     
    	buffer = strdup( Chaine_Entrante );
    	double Calcul=0;
    	double X=0;
    	char **TEXTE = NULL;
    	char Moins;
     
    		while(1)
    	{
     
    		if (buffer != NULL)
     
    		{
    	char separateur[] = ",";
     
    	/* printf("%s\n", buffer); */
     
    	/* resultat_decoupe_phrase=DecoupePhase (buffer, separateur); */
     
    	/* printf("\n%s \n",pointeur[2]); //verifie les données sauvegardé */
     
    	/* TraiteMots (resultat_decoupe_phrase, Mots); */
     
    	/* Calcul=NombreAuCarre(X); */
    	Calcul=Conversions(Moins,TEXTE);
    		}
     free(resultat_decoupe_phrase);
     getchar (); // Pause dans en mode console
     
    	}
     
    	return 0 ;
    }

  10. #10
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Tu as juste à regarder le caractère qui t'intéresse, et le comparer comme un nombre cette fois !

    Par exemple, si tu veux comparer le premier caractère, et rendre toute la chaîne restante positive ou négative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char *str, *tmp;
    int nb;
     
    tmp = strdup(&(str[1])); /* recuperation du "reste" de la chaine */
    nb = atoi(nb); /* transformation du nombre "texte" en nombre "entier" */
    if (str[0] == '-')
      nb = nb * (-1);
    Ceci est une version "simple" qui compare le premier caractère.
    Rien ne t'empêche de mettre le signe à la fin, et limiter la recopie avec strndup.
    Enfin amuses-toi bien avec tout ça !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Ok merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/07/2014, 21h31
  2. Réponses: 0
    Dernier message: 15/07/2014, 21h31
  3. projet archivage demande information
    Par isarian dans le forum Débuter
    Réponses: 2
    Dernier message: 19/03/2008, 16h39
  4. Formation AFPA Responsable projet systemes d'information
    Par anisotrope dans le forum Etudes
    Réponses: 5
    Dernier message: 16/09/2005, 12h47

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