Problème code morse

jpv424 Messages postés 47 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 24 mars 2012 - 27 nov. 2007 à 20:38
jpv424 Messages postés 47 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 24 mars 2012 - 30 nov. 2007 à 23:53
Bonjour tout le monde et encore merci pour votre aide
J'ai fait un programme de conversion Code Morse => Français et l'inverse.

De francais à code morse, le programme marche très bien (c'est le case 1)
Par contre pour le case 2, ce que je comprend, c'est qu'il faut utiiser un pointeur qui pointe sur le début de la chaine et un autre qui va s'arrêter à l'espace entre les code morse... Ensuite on les comparent et on affiche les caractères... mais je m'embrouille un peu..

Je vous joint le code, j'espère que vous m'aiderez à le finir ou à l'optimiser...

Merci

# include <stdio.h>
# include <string.h>
# include <conio.h>
# define TAILLE 37

void main(){

    struct code{
        char lettre;
        char *morse;
    };

    struct code table [TAILLE]={
        {'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 ligne [80], car, *d=ligne[0], *f=ligne[' '], a;
    int i,j,test=1, nbl;

    clrscr();

    printf("******************\n");
    printf("*Traducteur Morse*\n");
    printf("******************\n");

    printf("\n1. Francais => Morse");
    printf("\n2. Morse => Francais");
    printf("\n0. Quitter");
    printf("\n\n-> ");

    do{

        switch(getch()){

        case '1':
            printf("\n\n80 caractŠres max. -> : ");
            gets(ligne);
            printf("\n=> : ");

            for(i=0; i<=80; i++){
                  if(ligne[i]=='\0') break;
                  if(ligne[i] <= 122 && ligne[i] >= 97) ligne[i]-=32;
                  else ligne[i];
            }

            for (i=0;i<strlen(ligne);i++){

                  j=0;
                  while (ligne[i]!=table[j].lettre && j++<TAILLE-1);
                        if (j<TAILLE) printf("   %s", table[j].morse);
                        else printf("   ??????");
                  if (!((i+1)%10)) printf("\n     ");
            }
        break;

        case '2':
            printf("\n\n-> : ");
            gets(ligne);
            printf("\n=> : ");

            for (i=0;ligne[i]!='\0';i++){

                strncpy(car, d, (f-d));
                a=strcmp(car, table->morse);
                if(a==0) printf("%c", table[i].lettre);
                else printf(" ?????? ");
                }
        break;

        case '0':
            test=0;
        break;

        default:
            printf("Entrez 1 ou 2");
        }

    }while(test==1);

    getch();
 }

3 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
28 nov. 2007 à 02:20
strncpy(car, d, (f-d));

Tu es conscient que car est un char et que tu essais de copier une chaine dedans ?

d=ligne[0]
f=ligne[' ']
Ça compile ça ?

for (i=0;i<strlen(ligne);i++)
À ne jamais faire. On calcule la taille une fois avant la boucle.

a = strcmp(...)

strcmp retourne int pas un char.

C++ (@++)<!--
0
jpv424 Messages postés 47 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 24 mars 2012
28 nov. 2007 à 12:04
Ok merci pour ces details sa compile et en plus sa m'affiche quelques chose pour le case2
Merci beaucoup !!!

Mais je ne comprend pas bien comme faire pour que les pointeurs debut et fin jouent leur rôle. (comparez la chaine entrée dans ligne et voir si le code existe dans le tableau et ensuite l'afficher...)

Re-code :

# include <stdio.h>
# include <string.h>
# include <conio.h>
# define TAILLE 37

void main(){

    struct code{
        char lettre;
        char *morse;
    };

    struct code table [TAILLE]={
        {'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 ligne [80], car[80], *d=ligne, *f=ligne;
    int i,j,test=1, nbl, a, longligne;

    clrscr();

    printf("******************\n");
    printf("*Traducteur Morse*\n");
    printf("******************\n");

    printf("\n1. Francais => Morse");
    printf("\n2. Morse => Francais");
    printf("\n0. Quitter");
    printf("\n\n-> ");

    do{

        switch(getch()){

        case '1':
            printf("\n\n80 caractŠres max. -> : ");
            gets(ligne);
            printf("\n=> : ");

            for(i=0; i<=80; i++){
                  if(ligne[i]=='\0') break;
                  if(ligne[i] <= 122 && ligne[i] >= 97) ligne[i]-=32;
                  else ligne[i];
            }

            longligne=strlen(ligne);

            for (i=0;i<longligne;i++){

                  j=0;
                  while (ligne[i]!=table[j].lettre && j++<TAILLE-1);
                        if (j<TAILLE) printf("   %s", table[j].morse);
                        else printf("   ??????");
                  if (!((i+1)%10)) printf("\n     ");
            }
        break;

        case '2':
            printf("\n\n-> : ");
            gets(ligne);
            printf("\n=> : ");

            for (i=0;ligne[i]!='\0';i++){

                strncpy(car, d, (f-d));
                a=strcmp(car, table->morse);
                if(a==0) printf("%c", table[i].lettre);
                else printf(" ?????? ");
                }
        break;

        case '0':
            test=0;
        break;

        default:
            printf("Entrez 1 ou 2");
        }

    }while(test==1);

    getch();
 }
0
jpv424 Messages postés 47 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 24 mars 2012
30 nov. 2007 à 23:53
Bonsoir tout le monde !!!

Personne ne peut m'aider à finir ce petit programme ?

Svp
0
Rejoignez-nous