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 traducteur Morse


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut Projet traducteur Morse
    Bonjour à tous,
    Dans le cadre de mes études, j'ai a réaliser un petit projet en C d'outil de traduction basique Français - Morse.
    Or, j'ai un petit soucis sur lequel je tourne en rond depuis un petit moment, et sur lequel mes recherches ont été infructueuses...

    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>
     
    char *translate_f_to_m(char TexteFr[64]) /* Fonction de traduction */
    {
            char Car[38]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','.',' '};
     
            char *table[38]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".---","-..-","-.--","--..","-----","----","..---","...--","....-",".....","-....","--...","---.."," ----.",".-.-.-"," "};
     
            unsigned i;
            unsigned j;
            unsigned k;
            char *result[128];
     
            i=strlen(TexteFr);
     
            for(j=0;j<i;j++)
            {
                    for (k=0;k<38;k++)
                    {
                            if (TexteFr[j]==Car[k])
                            { 
                                    result[j]=table[k]; /* Comparaison et stockage du résultat */
                                    break;
                            }
                    }
            }
     
            /* result[i]=NULL; */
     
            printf("1----------------\n"); /* Debuggage : affichage du résultat */
            for(j=0;j<i;j++)
            {
                    printf("%s", result[j]);
                    printf("|");
            }
            printf("\n-----------------\n");
            printf("\n");
     
            return *result;
    }
     
     
    int main()
    {
            char p[64];
            unsigned k;
            unsigned l;
            char *result[128];
     
            printf ("phrase : ");
            printf ("\n");
            scanf("%s", p);
     
            l=strlen(p);
     
            *result=translate_f_to_m(p); /* Appel de la fonction */
     
            printf("2----------------\n"); /* Debuggage : affichage du résultat */        
            for(k=0;k<l;k++)
            {
                    printf("%s", result[k]);
                    printf("|");
            }
            printf("\n-----------------\n");
            printf("\n");
     
            return 0;
    }
    Donc, le soucis est que j'ai en résultat avec un mot au hasard (ex : bonjour)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1----------------
    -...|---|-.|.---|---|..-|.-.|
    -----------------
     
    2----------------
    -...|(null)|(null)|(null)|(null)|(null)|(null)|
    -----------------
    et le second problème c'est que si je défini p et *result avec la même valeur (ex : p[64] et *result[64]) j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1----------------
    -...|---|-.|.---|---|..-|.-.|
    -----------------
     
    2----------------
    erreur de segmentation
    Si jamais quelqu'un arrivait à m'aider...

    Cordialement.

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

    Le problème vient du fait que le tableau de pointeurs retourné par translate_f_to_m n'est plus valable une fois qu'on a quitté la fonction.

    Deux solution :
    • Passer la tableau de pointeurs en paramètre de translate_f_to_m.
    • Faire une allocation dynamique dudit tableau dans translate_f_to_m obligeant la fonction qui a appelé translate_f_to_m à libérer le tableau.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    Merci pour cette réponse rapide.
    Je vais essayer de creuser cette piste

    Edit : Bon, après un petit test rapide :
    Voici le code modifié :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void translate_f_to_m(char TexteFr[], char *resultat[])
    {
    	char Car[38]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','.',' '};
     
    	char *table[38]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".---","-..-","-.--","--..","-----","----","..---","...--","....-",".....","-....","--...","---.."," ----.",".-.-.-"," "};
     
    	unsigned i;
    	unsigned j;
    	unsigned k;
     
    	i=strlen(TexteFr);
     
    	for(j=0;j<i;j++)
    	{
    		for (k=0;k<38;k++)
    		{
    			if (TexteFr[j]==Car[k])
    			{
    				resultat[j]=table[k];
    				break;
    			}
    		}
    	}
     
    	printf("1----------------\n");
    	for(j=0;j<i;j++)
    	{
    		printf("%s", resultat[j]);
    		printf("|");
    	}
    	printf("\n-----------------\n");
    	printf("\n");
    }
     
     
    int main()
    {
    	char p[64];
    	unsigned k;
    	unsigned l;
    	char *result;
     
    	result=malloc(128*(sizeof(char *)));
     
    	printf ("phrase : ");
    	printf ("\n");
    	scanf("%s", p);
     
    	l=strlen(p);
     
    	translate_f_to_m(p, &result);
     
    	printf("2----------------\n");
     
    	for(k=0;k<l;k++)
    	{
    		printf("%s", result[k]);
    		printf("|");
    	}
    	printf("\n-----------------\n");
    	printf("\n");
     
    	return 0;
    }
    Et ce coup ci j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1----------------
    -...|---|-.|H���5r |�VJ��|H��t1@|�(|
    -----------------
     
    2----------------
    Erreur de segmentation
    ... Désolé si mes questions sont idiotes, mais je débute

  4. #4
    Expert confirmé
    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
    Par défaut
    Il y a une erreur sur la déclaration de result dans main :
    result doit contenir l'adresse du premier élément d'un tableau de pointeur sur char (obtenu par le malloc). Son type doit donc être "adresse d'un pointeur sur char" char** :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	char ** result;
     
    	result=malloc(128*(sizeof(char *)));
    ....
    	translate_f_to_m(p, result);

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    Yes ! Ça marche, merci beaucoup !

Discussions similaires

  1. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  2. Projet de création de traducteur de A à Z
    Par CCrdz dans le forum Intelligence artificielle
    Réponses: 11
    Dernier message: 04/02/2013, 11h52
  3. projet C code morse
    Par marchoun dans le forum C
    Réponses: 12
    Dernier message: 22/12/2008, 21h05
  4. structure projet scolaire (Code Morse)
    Par marchoun dans le forum Débuter
    Réponses: 5
    Dernier message: 10/12/2008, 11h57
  5. Les fichiers d'un projet
    Par Manolo dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/05/2002, 17h51

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