#include #include char *morse[] = { ".-", "-...", "-.-.", "-..", ".", ".-..", "--.", "....", "..", ".---", ".-.", ".-..", "--", "-.", "---", ".--.", "--.-", "-.-", "...", "-", "..-", "...-", ".---", "-..-", "-.--", "--.." }; void encode_lettre(char c) { printf("%s",morse[c-'a']); } void encode(void) { char c; while ((c =getchar()) != '\n') { if ('a' <= c && c <= 'z') { encode_lettre(c); putchar('/'); } else { putchar('/'); } } printf("\n"); } typedef struct cell { char val; struct cell *left, *right; } *Tree; Tree cons_cell(Tree left, char val, Tree right) { Tree r; r = (Tree )malloc(sizeof(struct cell)); if ( r == NULL) { fprintf(stderr,"Plus de memoire\n"); exit(-1); } r->val = val; r->left = left; r->right = right; return r; } Tree insert(char c,char *morse,int i,Tree t) { if (morse[i] == '\0') { if (t == NULL) return cons_cell(NULL,c,NULL); else { t->val = c; return t; } } if (t == NULL) t = cons_cell(NULL,'\0',NULL); if (morse[i] == '.') t->left = insert(c,morse,i+1,t->left); else t->right = insert(c,morse,i+1,t->right); return t; } void decode_lettre(char c,Tree t) { if (t == NULL) { fprintf(stderr,"Mauvais caractere morse !!!\n"); exit(-1); } if (c == '.') decode_lettre(getchar(),t->left); else if (c == '-') decode_lettre(getchar(),t->right); else { putchar(t->val); } } void decode(Tree t) { char c; Tree r; r = t; while ((c = getchar()) != '\n') { switch (c) { case '.': r = r->left; break; case '-': r = r->right; break; case '/': if (r == t) putchar(' '); else { putchar(r->val); r = t; } break; } } putchar('\n'); } void main(void) { Tree decode_t = NULL; char c; printf("Entrez une ligne en clair : "); encode(); for (c = 'a' ; c <= 'z' ; c++) decode_t = insert(c,morse[c-'a'],0,decode_t); printf("Entrez une ligne en code : "); decode(decode_t); }