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. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut Problème exo morse
    Bonjour à tous et merci pour votre aide.

    J'ai un petit soucis sur mon traducteur de code morse.

    Le case1 traduit du Francais en Morse et il marche.
    Le case2 traduit du Morse en Francais et il me dit n'importe quoi.

    Je patoge un peu dans les pointeurs et je me mélange. Quelqu'un pourrait m'aider à rendre ce programme fonctionnel ?

    Merci
    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 <string.h>
    # include <conio.h>
    # define TAILLE 37
     
    int 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[81], car[6], *d, *f, k=0;
    	int i, j, g=0, test=1, a, longligne;
     
    	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\n-> : ");
    				fgets(ligne, sizeof ligne, stdin);
    				fclean(ligne, stdin);
    				printf("\n=> : ");
     
    				strupr(ligne);
     
    				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-> : ");
    				fgets(ligne, sizeof ligne, stdin);
    				fclean(ligne, stdin);
    				printf("\n=> : ");
     
    				d=ligne;
    				f=ligne;
     
    				while((*f!=' ') && (*f!=0)) f++;
     
    				for (i=0;ligne[i]!='\0';i++){
    					strncpy(car, d, (f-d));
     
    					do{
    						a=strcmp(car, table[g].morse);
    						g++;
    					}while(a==0);
     
    					if(a==1) printf("%c", table[g].lettre);
    					else printf(" ?????? ");
    				}
    			break;
     
    			case '0': test=0;
    			break;
     
    			default: printf("\n\nEntrez 1 ou 2");
    			break;
    			}
    	}while(test==1);
     
    	return 0;
    }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Bonsoir,
    1. main() retourne un int. Toujours.
    2. Ça fait beaucoup de variables à une lettre, ça...
    3. Il ne faut jamais utiliser gets().
    4. L'indentation après le premier while me parait très suspecte, puisqu'il y a un point-virgule derrière le while...
    5. Tout le code est dans le main(), c'est horrible. Tu devrais le séparer en plusieurs fonctions, ce sera plus facile à comprendre aussi bien pour nous que pour toi.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 121
    Par défaut
    Il manque un caractère à ta variable car pour le zéro binaire de fin de chaine:

  4. #4
    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 pour votre rapidité !
    J'ai corrigé la taille de car[6] (j'avais oublié ce '\0').

    Je débute et sur les conseils d'un ami j'ai mis ce while bizarre sans instructions... Mais que fait-il alors ?

    Que puis-je utiliser à la place de gets ?

    Merci merci

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Le while bizarre sert à régler j à la valeur désirée. Les instructions qui le suivent ne doivent pas être indentées par rapport à lui.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    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 encore ^^

    Pouvez-vous faire en sorte que mon petit programme marche ?
    Que mettre à la place de ce gets déprécié ?

    Merki

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    fgets() + la fonction fclean() du forum (une petite recherche te permettra de la trouver facilement)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Ok j'ai recherché et tout, j'ai bien saisie la différence entre gets et fgets.

    fclean sert aussi à vider le buffer en enlevant le caractère en trop qui était pour moi '??????'

    Sauf que voila. Mon compilateur ne veut pas compiler...

    Problème de bibliotheque ? J'en ai essayé quelques une mais....

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Tu ne saisis pas la différence, OK:
    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
    #include <stdio.h>
     
    void saisie(void)
    {
    	char chn[10];
    	puts("Entrer la chaîne :");
    	gets(chn);
    	puts("merci!");
    }
     
    int main(void)
    {
    	saisie();
    	return 0;
    }
    Compile ce programme, lance-le, appuie dix secondes sur la touche 'A' et presse Entrée.
    Et là, tu verras pourquoi il ne faut pas utiliser gets().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    sisi j'ai bien compris...

    Pour moi c'est un maximum de 80 caractères. Et quand je tape je ne peut pas aller à plus de 80 caractères... C'est bien.

    Mais il compile toujours pas.

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Poste la dernière version (correctement indentée!) de ton code, ainsi que les erreurs de compilation: On n'a pas de boule de cristal, tu sais...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Désolé

    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 <string.h>
    # include <conio.h>
    # define TAILLE 37
     
    int 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[81], car[6], *d, *f, k=0;
    	int i, j, g=0, test=1, a, longligne;
     
    	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\n-> : ");
    				fgets(ligne, sizeof ligne, stdin);
    				fclean(ligne, stdin);
    				printf("\n=> : ");
     
    				strupr(ligne);
     
    				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-> : ");
    				fgets(ligne, sizeof ligne, stdin);
    				fclean(ligne, stdin);
    				printf("\n=> : ");
     
    				d=ligne;
    				f=ligne;
     
    				while((*f!=' ') && (*f!=0)) f++;
     
    				for (i=0;ligne[i]!='\0';i++){
    					strncpy(car, d, (f-d));
     
    					do{
    						a=strcmp(car, table[g].morse);
    						g++;
    					}while(a==0);
     
    					if(a==1) printf("%c", table[g].lettre);
    					else printf(" ?????? ");
    				}
    			break;
     
    			case '0': test=0;
    			break;
     
    			default: printf("\n\nEntrez 1 ou 2");
    			break;
    			}
    	}while(test==1);
     
    	return 0;
    }
    Erreurs :

    1>------ Début de la génération : Projet : mor, Configuration : Debug Win32 ------
    1>Compilation en cours...
    1>MORSE.CPP
    1>c:\morse.cpp(41) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
    1>c:\program files\microsoft visual studio 8\vc\include\conio.h(145) : voir la déclaration de 'getch'
    1>d:\morse.cpp(46) : error C3861: 'fclean' : identificateur introuvable
    1>d:\morse.cpp(51) : warning C4267: '=' : conversion de 'size_t' en 'int', perte possible de données
    1>d:\morse.cpp(67) : error C3861: 'fclean' : identificateur introuvable
    1>mor - 2 erreur(s), 2 avertissement(s)
    ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Évidemment, il faut la prendre sur le forum, la fonction fclean(): Ce n'est pas une fonction standard...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    A ok lol chui boulet

    Bon bref je suis quand même repassé à gets car pour un petit programme exercice, il devennait drôlement compliqué.

    Ne pourrait-on pas faire simple pour le rendre fonctionnel ?

    Je l'optimiserai à la fin.

    En tout cas merci pour tes conseil.

    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
    # include <stdio.h>
    # include <string.h>
    # include <conio.h>
    # define TAILLE 37
     
    int 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[81], car[6], *d, *f, k=0;
    	int i, j, g=0, test=1, a, longligne;
     
    	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\n-> : ");
    				gets(ligne);
    				printf("\n=> : ");
     
    				strupr(ligne);
     
    				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=> : ");
     
    				d=ligne;
    				f=ligne;
     
    				while((*f!=' ') && (*f!=0)) f++;
     
    				for (i=0;ligne[i]!='\0';i++){
    					strncpy(car, d, (f-d));
     
    					do{
    						a=strcmp(car, table[g].morse);
    						g++;
    					}while(a==0);
     
    					if(a==1) printf("%c", table[g].lettre);
    					else printf(" ?????? ");
    				}
    			break;
     
    			case '0': test=0;
    			break;
     
    			default: printf("\n\nEntrez 1 ou 2");
    			break;
    			}
    	}while(test==1);
     
    	return 0;
    }

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ce n'est PAS une optimisation.
    Un programme avec gets() n'est PAS un programme fonctionnel, c'est un programme BUGGUÉ.

    Comme je te l'ai dit, fais des fonctions: En coupant le programme au bons endroits, il sera plus compréhensible et plus facile à corriger...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 23
    Par défaut
    Mouais, j'ai fait des tests avec un .h tout bien fait et tout, mais j'ai eu des erreur avec les 'strxxx' de string.h.

    Je laisse tombé pour ce soir, je chercherai sinon c'est pas grave merci.

    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 <conio.h>
    # include <string.h>
    # define TAILLE 37
     
    int 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[81], car[6], *d, *f, k=0;
    	int i, j, g=0, test=1, a, longligne;
     
    	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\n-> : ");
    				gets(ligne);
    				printf("\n=> : ");
     
    				strupr(ligne);
     
    				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=> : ");
     
    				d=ligne;
    				f=ligne;
     
    				while((*f!=' ') && (*f!=0)) f++;
     
    				for (i=0;ligne[i]!='\0';i++){
    					strncpy(car, d, (f-d));
     
    					do{
    						a=strcmp(car, table[g].morse);
    						g++;
    					}while(a==0);
     
    					if(a==1) printf("%c", table[g].lettre);
    					else printf(" ?????? ");
    				}
     
    			break;
     
    			case '0': test=0;
    			break;
     
    			default: printf("\n\nEntrez 1 ou 2");
    			break;
    			}
    	}while(test==1);
     
    	return 0;
    }

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Par défaut
    Hormis les remarques déja faites sur la saisie,

    pour le cas 2, toutes tes copies sont inutiles.
    si la chaîne saisie n'est pas vide, fait une boucle sur ton tableau et compare la chaîne saisie avec tab[].Morse ceci, uniquement pour les chaînes tab[].Morse ayant la même longueur que celle saisie pour éviter de confondre par exemple {'A',".-"} avec {'P',".--."}.

    Cette explication est valable si la chaîne saisie représente un seul caractère.

    Si la chaîne saisie représente plusieurs caractères séparés par des espaces
    par exemple .--. .- .--. .- pour papa, commence par écrire une fonction qui retourne la lettre en clair en fonction d'une lettre morse d'après les explications précédentes et appelle la autant que nécessaire.
    Dans ce cas, il faudra :

    soit utiliser une variable intermédiaire un peu comme tu l'as fait mais en veillant a ne pas depasser la longueur de cette chaine et en mettant le zero terminal.

    Soit remplacer directement dans la chaine saisie les espaces par des 0 et gérer correctement quelques pointeurs.

    Y'a plus qu'a !.

  18. #18
    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, juste une remarque. Quand on écrit du morse, les lettres doivent être séparées par un "/" et les mots par un "//", afin d'éviter les erreurs. Ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je m appelle corentin59
    se traduit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .---/.//--//.-/.--./.--././.-../.-.././/-.-./---/.-././-./-/../-./...../----.//
    Enfin, en toute rigueur, les doubles lettres ne sont pas répétées, la traduction devrait donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .---/.//--//.-/.--././.-.././/-.-./---/.-././-./-/../-./...../----.//

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Hein?
    Pourquoi les doubles-lettres ne sont-elles pas répétées ?
    Ça rend le codage non-bijectif!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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
    1>Compilation en cours...
    1>MORSE.CPP
    Ton fichier source devrait s'appeler morse.c, sinon, il y a de forte chance qu'il soit compilé en C++, ce qui n'est certainement ce que tu veux, vu que tu as posté sur le forum C...

Discussions similaires

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

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