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 :

Problème exo morse


Sujet :

C

  1. #21
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par G.Hammond Voir le message
    Bon bref je suis quand même repassé à gets car pour un petit programme exercice, il devennait drôlement compliqué.
    Il n'y a rien de compliqué.
    Ne pourrait-on pas faire simple pour le rendre fonctionnel ?
    gets() étant un bug, il faut commencer par l'éliminer. Des solutions simples ont été proposées.
    Je l'optimiserai à la fin.
    Tu sais très bien qu'on ne touche plus à un code qui semble fonctionner. C'est maintenant qu'il faut écrire du code correct.

  2. #22
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Hein?
    Pourquoi les doubles-lettres ne sont-elles pas répétées ?
    Ça rend le codage non-bijectif!
    D'un point de vue mathématiques, oui. Par contre, d'un point de vue pratique, la communication par morse est assez lourde et il est d'usage de ne pas répéter les doubles lettres, afin de simplifier la communication et aussi de diminuer les risques d'erreur : dans un échange par lampe ou par signaux audio, les lettres sont séparées par des temps morts (et non des / ), il faut donc être attentif au rythme de la communication et les répétition peuvent être sources d'erreur.

    Mais, ça reste du détail...

  3. #23
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    sinon, voici un exemple de 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
    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
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
     
    # define TAILLE 37
     
    typedef struct {
        char lettre[2];
        char morse[6];
    } code;
     
    void AfficherMenu(void);
    void fra2mor(void);
    void mor2fra(void);
     
    /******************************************************************************/
    /* Main                                                                       */
    /******************************************************************************/
    int main(void) {
    	int choix=0;
     
    	do {
            AfficherMenu();
            scanf("%d",&choix);
            while(getchar()!='\n'); // pour vider le buffer
            switch(choix) {
                case 1 :
                    fra2mor();
                    choix=0;
                    system("PAUSE");
                    break;
                case 2:
                    mor2fra();
                    choix=0;
                    system("PAUSE");
                    break;
            }
        } while ( choix>3 || choix <1);
     
        return 0;
    }
     
    /******************************************************************************/
    /* Affichage du menu                                                          */
    /******************************************************************************/
    void AfficherMenu(void) {
        system("CLS");
        printf("********************\n");
    	printf("* Traducteur Morse *\n");
    	printf("********************\n");
    	printf("\n1. Francais => Morse");
    	printf("\n2. Morse => Francais");
    	printf("\n3. Quitter");
    	printf("\n\nChoisissez un mode : ");
    }
     
    /******************************************************************************/
    /* Traduction Francais -> Morse                                               */
    /******************************************************************************/
    void fra2mor(void) {
        int i, j, L, ecrit=0;
        char phrase[256];
        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","----."}
    	};
     
        system("CLS");
        printf("Traduction Francais -> Morse\n\n");
        printf("Entrez une phrase en francais (sans accent) :\n");
        fgets(phrase,256,stdin);
        printf("\nTraduction en morse :\n");
        strupr(phrase);
        L=strlen(phrase);
        for (i=0;i<L;i++) {
            if ( phrase[i]!='.' && (phrase[i]<'0' || phrase[i]>'9') && (phrase[i]<'A' || phrase[i]>'Z') ) {
                if ( ecrit ) {
                    printf("/");
                    ecrit=0;
                }
            } else {
                j=0;
                while ( phrase[i] != table[j].lettre[0] && j++<TAILLE-1 );
                if (j<TAILLE) {
                    printf("%s/", table[j].morse);
                    ecrit=1;
                }
            }
        }
        printf("\n\n");
    }
     
    /******************************************************************************/
    /* Traduction Morse -> Francais                                               */
    /******************************************************************************/
    void mor2fra(void) {
        int i, j, k, L, nb=0;
        char phrase[256], lettre[256];
        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","----."}
    	};
     
     
        system("CLS");
        printf("Traduction Morse -> Francais\n");
        do {
            printf("\nEntrez une phrase en morse (se terminant par //) :\n");
            fgets(phrase,256,stdin);
            L=strlen(phrase);
        } while ( phrase[L-3]!='/' || phrase[L-2]!='/' );
        printf("\nTraduction en francais :\n");
     
        for (i=0;i<L;i++) {
            if ( phrase[i]!='.' && phrase[i]!='-' && phrase[i]!='/' && phrase[i]!='\n' ) {
                nb++;
            }
        }
        if ( nb ) {
            printf("Erreur !! Il y a %d caracteres incorrectes !\n\n",nb);
        } else {
            i=0;
            j=0;
            while (i<L) {
                if ( phrase[i]=='/' ) {
                    lettre[j]='\0';
                    k=0;
                    while ( strcmp(lettre,table[k].morse) && k++<TAILLE-1 );
                    if (k<TAILLE) {
                        printf("%s",table[k].lettre);
                    } else {
                        printf("(inc)");
                    }
                    j=0;
                    if ( phrase[i+1]=='/' ) {
                        i++;
                        printf(" ");
                    }
                } else {
                    lettre[j] = phrase[i];
                    j++;
                }
                i++;
            }
            printf("\n\n");
        }
    }

  4. #24
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Merci tout le monde pour votre GRANDE aide !

    J'en apprend beaucoup sur ce site !

    J'essaye tout ce que vous m'avez donné et je reposterai mon code qui marche en Résolu !

    Merkiii

  5. #25
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Voila sa marche !

    Maintenant je vais passer à l'optimisation ! Il faudrait déjà passez tout ce qui doit s'afficher, dans le main.

    MORSE.C

    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
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include "MORSE.H"
     
    /* Main */
    int main(){
     
    	  char ligne[81], car[6], retour[400], *d, *f, b;
    	  int i, choix, a, L, h;
     
    	  clrscr();
     
    	  printf("********************\n");
    	  printf("* Traducteur Morse *\n");
    	  printf("********************\n");
     
    	  do{
    			printf("\n1. Francais => Morse");
    			printf("\n2. Morse => Francais");
    			printf("\n0. Quitter");
    			printf("\n\nChoix : ");
     
    			scanf("%d", &choix);
    			while(getchar()!='\n');
     
    			switch(choix){
     
    				case 1:
    					printf("\n\n-> : ");
    					gets(ligne);
    					printf("\n=> : ");
     
    					FM(ligne);
     
    				break;
     
    				case 2:
     
    					printf("\n\n-> : ");
    					gets(ligne);
    					printf("\n=> : ");
     
    					MF(ligne);
     
    				break;
     
    				default:
     
    					printf("Choix inconnu\n\nChoix : ");
     
    				break;
    				}
    		}while(choix!=0);
     
    		return 0;
    }
    BIBMO.C

    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
    #include "MORSE.H"
     
    T_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',"----."}
    			};
     
    void FM(char *ligne){
    	int L, i, j=0;
     
    	strupr(ligne);
    	L=strlen(ligne);
     
    	for (i=0;i<L;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     ");
    	}
     
    	printf("\n\n");
    }
     
    void MF(char *ligne){
    	int j=0, h, i, nb;
    	char car[6], *d;
     
    	d=ligne;
    	nb=sizeof(table)/sizeof(T_code);
    	do{
    		h=0;
                    while((ligne[h+j]!=' ') && (ligne[(h+j)]!=0)) h++;
     
    		strncpy(car,d+j,h);
    		car[h]=0;
     
    		i=0;
     
    		while((strcmp(car,table[i].morse)!=0) && i!=nb) i++;
     
    		printf("%c",table[i].lettre);
    		j+=(h+1);
     
    	}while(ligne[j-1]!=0);
    	printf("\n\n");
    }
    MORSE.H

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifndef __MORSE
    	#define __MORSE
    	#define TAILLE 37
     
    		typedef struct {
    			char lettre;
    			char *morse;
    		}T_code;
     
    		void FM(char ligne[81]);
    		void MF(char ligne[81]);
    #endif
    Merci @+++

Discussions similaires

  1. Problème exo L2
    Par Vertical001 dans le forum Scilab
    Réponses: 2
    Dernier message: 15/03/2015, 13h07
  2. [eXo Portal] Problème eXo Knowledge
    Par Nayoko dans le forum Portails
    Réponses: 0
    Dernier message: 09/06/2010, 11h20
  3. problème avec un exo
    Par frost80500 dans le forum C#
    Réponses: 11
    Dernier message: 19/11/2007, 12h00
  4. problème exo algorithme
    Par greg96 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 17/06/2007, 16h25

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