Skip to content
Snippets Groups Projects
Commit 561ee902 authored by thib's avatar thib
Browse files

done

parent 254dbefd
No related branches found
No related tags found
No related merge requests found
cc=gcc
CFLAGS=-Wextra -Wall -g -fsanitize=address -fsanitize=leak
LFLAGS=-fsanitize=address -fsanitize=leak -lm
main: main.x
./main.x
main.x: morse.o main.o
$(cc) -o $@ $^ $(CFLAGS) $(LFLAGS)
clean:
rm -f *.o *.x
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--..
#include "morse.h"
int main() {
arbre tree = arbre_build("code-morse.txt");
print(tree, 0); // impression de l'arbre
decoder_fichier("texte_morse.txt", tree);
arbre_destroy(tree);
printf("\n");
int n = 26;
int m = 6;
char alphabet_morse[n][m];
table_build("code-morse.txt", n, m, alphabet_morse);
encoder_fichier("test.txt", n, m, alphabet_morse);
printf("\n");
return EXIT_SUCCESS;
}
\ No newline at end of file
#include "morse.h"
typedef struct _node {
char lettre;
struct _node *child[2]; // 0 pour le point, 1 pour le trait
} node;
void print(arbre tree, int niv) {
if (tree == NULL) {
return;
}
print(tree->child[0], niv + 1);
for (int i = 0; i < niv; i++) {
printf(" -");
}
printf(" %c\n", tree->lettre);
print(tree->child[1], niv + 1);
}
char decoder(char *code, arbre tree) {
arbre tmp = tree;
for (int i = 0; i < (int)strlen(code); i++) {
if (tmp == NULL) {
return '?';
}
if (code[i] != '-' && code[i] != '.') {
break;
}
tmp = tmp->child[code[i] == '-'];
}
if (tmp == NULL) {
return '?';
}
return tmp->lettre;
}
void decoder_fichier(char *filename, arbre tree) {
FILE *fp = fopen(filename, "r");
assert(NULL != fp);
int i = 0;
char code[6];
while (!feof(fp)) {
char ch = (char)fgetc(fp);
switch (ch) {
case '/':
printf(" ");
break;
case ' ':
code[i] = '\0';
printf("%c", decoder(code, tree));
i = 0;
break;
default: // child[0] and child[1]
code[i] = ch;
i++;
break;
}
}
fclose(fp);
}
void encoder_fichier(char *filename, int n, int m, char alphabet_morse[n][m]) {
FILE *fp = fopen(filename, "r");
assert(NULL != fp);
while (!feof(fp)) {
char ch = (char)fgetc(fp);
switch (ch) {
case ' ':
printf("/");
break;
default: // Letters
for (int i = 0; i < n; i++) {
if (alphabet_morse[i][0] == ch) {
for (int j = 1; j < (int)strlen(alphabet_morse[i]); j++) {
printf("%c", alphabet_morse[i][j]);
}
}
}
printf(" ");
break;
}
}
fclose(fp);
}
void placer(char *chaine, arbre *tree) {
arbre tmp = *tree;
for (int i = 1; i < (int)strlen(chaine); i++) {
char ch = chaine[i];
if (ch != '-' && ch != '.') { // string done
break;
}
if (tmp->child[ch == '-'] == NULL) {
tmp->child[ch == '-'] = calloc(1, sizeof(node));
}
tmp = tmp->child[ch == '-'];
}
tmp->lettre = chaine[0];
}
void table_build(char *filename, int n, int m, char alphabet_morse[n][m]) {
FILE *fp = fopen(filename, "r");
assert(NULL != fp);
char line[10];
for (int i = 0; i < n; i++) {
fgets(line, 10, fp);
int j = 0;
while (line[j] != '\r') {
alphabet_morse[i][j] = line[j];
j++;
}
alphabet_morse[i][j] = '\0';
}
fclose(fp);
}
arbre arbre_build(char *filename) {
arbre tree = calloc(1, sizeof(node));
tree->lettre = '?';
FILE *fp = fopen(filename, "r");
assert(NULL != fp);
char chaine[6];
while (!feof(fp)) {
fgets(chaine, 6, fp);
placer(chaine, &tree);
}
fclose(fp);
return tree;
}
void arbre_destroy(arbre tree) {
if (tree != NULL) {
if (tree->child[0] != NULL) {
arbre_destroy(tree->child[0]);
}
if (tree->child[1] != NULL) {
arbre_destroy(tree->child[1]);
}
free(tree);
}
}
#ifndef _MORSE_H_
#define _MORSE_H_
#include <assert.h>
#include <malloc.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// type permettant de stocker un arbre dynamique
typedef struct _node node;
typedef node* arbre;
//----------------------------------------------------------
// procedure imprimant l'arbre verticalement de mani�re --
// selon un parcours DRG (trait - racine - point) --
//----------------------------------------------------------
void print(arbre tree, int niv);
//----------------------------------------------------------
// procedure traduisant un code morse en lettre --
//----------------------------------------------------------
char decoder(char *code, arbre tree);
//-----------------------------------------------------------
// lit un fichier encod� avec le code et imprime � l'�cran --
// le texte d�cod� --
//-----------------------------------------------------------
void decoder_fichier(char *filename, arbre tree);
//---------------------------------------------------------
// lit un fichier texte et imprime � l'�cran le fichier --
// encod� en Morse --
//---------------------------------------------------------
void encoder_fichier(char *filename, int n, int m, char alphabet_morse[n][m]);
//------------------------------------------------------------------
// procedure ins�rant une lettre d�finie par son code morse dans --
// l'arbre. L'arbre est construit au fur et � mesure des besoins. --
//------------------------------------------------------------------
void placer(char *chaine, arbre *tree);
//----------------------------------------------------------
// procedure lisant le fichier code-morse.txt et créant --
// le tableau à deux dimensions correspondant --
//----------------------------------------------------------
void table_build(char *filename, int n, int m, char alphabet_morse[n][m]);
//----------------------------------------------------------
// procedure lisant le fichier code-morse.txt et cr�ant --
// l'arbre binaire correspondant --
//----------------------------------------------------------
arbre arbre_build(char *filename);
void arbre_destroy(arbre tree);
#endif
\ No newline at end of file
SALUT A TOUS
\ No newline at end of file
. -. /.. -. ..-. --- .-. -- .- - .. --.- ..- . /..- -. /.- .-. -... .-. . /-... .. -. .- .. .-. . /. ... - /..- -. . /... - .-. ..- -.-. - ..- .-. . /-.. . /-.. --- -. -. . . ... /--.- ..- .. /.--. . ..- - /... . /.-. . .--. .-. . ... . -. - . .-. /... --- ..- ... /.-.. .- /..-. --- .-. -- . /-.. /..- -. . /.... .. . .-. .- .-. -.-. .... .. . /-.. --- -. - /-.-. .... .- --.- ..- . /. .-.. . -- . -. - /. ... - /.- .--. .--. . .-.. . /-. --- . ..- -.. /.-.. . /-. --- . ..- -.. /.. -. .. - .. .- .-.. /. - .- -. - /.- .--. .--. . .-.. . /.-. .- -.-. .. -. . /
-.. .- -. ... /..- -. /.- .-. -... .-. . /-... .. -. .- .. .-. . /-.-. .... .- --.- ..- . /. .-.. . -- . -. - /.--. --- ... ... . -.. . /.- ..- /.--. .-.. ..- ... /-.. . ..- -..- /. .-.. . -- . -. - ... /..-. .. .-.. ... /.- ..- /-. .. ...- . .- ..- /.. -. ..-. . .-. .. . ..- .-. /.... .- -... .. - ..- . .-.. .-.. . -- . -. - /.- .--. .--. . .-.. . ... /--. .- ..- -.-. .... . /. - /-.. .-. --- .. - /
-.. ..- /.--. --- .. -. - /-.. . /...- ..- . /-.. . /-.-. . ... /. .-.. . -- . -. - ... /..-. .. .-.. ... /.-.. /. .-.. . -- . -. - /-.. --- -. - /.. .-.. ... /... --- -. - /.. ... ... ..- ... /.- ..- /-. .. ...- . .- ..- /... ..- .--. . .-. .. . ..- .-. /. ... - /.- .--. .--. . .-.. . /.--. . .-. . /
.- ..- /-. .. ...- . .- ..- /.-.. . /.--. .-.. ..- ... /. .-.. . ...- . /.. .-.. /-.-- /.- /-.. --- -. -.-. /..- -. /-. --- . ..- -.. /.-. .- -.-. .. -. . /
.- ..- /-. .. ...- . .- ..- /-.. .. .-. . -.-. - . -- . -. - /.. -. ..-. . .-. .. . ..- .-. /.. .-.. /-.-- /.- /.- ..- /.--. .-.. ..- ... /-.. . ..- -..- /-. --- . ..- -.. ... /..-. .. .-.. ... /
. -. /-.-. --- -. - .. -. ..- .- -. - /.- /-.. . ... -.-. . -. -.. .-. . /.- ..- -..- /-. .. ...- . .- ..- -..- /.. -. ..-. . .-. .. . ..- .-. ... /--- -. /.--. . ..- - /. -. /.- ...- --- .. .-. /--.- ..- .- - .-. . /.--. ..- .. ... /.... ..- .. - /... . .. --.. . /. - -.-. /-.-. /. ... - /.- /-.. .. .-. . /.-.. .- /... ..- .. - . /-.. . ... /.--. ..- .. ... ... .- -. -.-. . ... /-.. . /-.. . ..- -..- /
..- -. /-. --- . ..- -.. /-. /.- -.-- .- -. - /.- ..- -.-. ..- -. /..-. .. .-.. ... /. ... - /.- .--. .--. . .-.. . /..-. . ..- .. .-.. .-.. . /
.-.. . /-. --- -- -... .-. . /-.. . /-. .. ...- . .- ..- -..- /- --- - .- .-.. /.- ..- - .-. . -- . -. - /-.. .. - /.-.. .- /-.. .. ... - .- -. -.-. . /. -. - .-. . /.-.. .- /..-. . ..- .. .-.. .-.. . /.-.. .- /.--. .-.. ..- ... /. .-.. --- .. --. -. . . /. - /.-.. .- /.-. .- -.-. .. -. . /. ... - /.- .--. .--. . .-.. . . /.... .- ..- - . ..- .-. /-.. . /.-.. /.- .-. -... .-. . /
.-.. . /-. .. ...- . .- ..- /-.. /..- -. /-. --- . ..- -.. /. ... - /.- .--. .--. . .-.. . /.--. .-. --- ..-. --- -. -.. . ..- .-. /
.-.. . ... /.- .-. -... .-. . ... /-... .. -. .- .. .-. . ... /.--. . ..- ...- . -. - /-. --- - .- -- -- . -. - /. - .-. . /..- - .. .-.. .. ... . ... /. -. /- .- -. - /--.- /.- .-. -... .-. . /-... .. -. .- .. .-. . /-.. . /.-. . -.-. .... . .-. -.-. .... . /--- ..- /. -. /- .- -. - /--.- ..- . /- .- ... /-... .. -. .- .. .-. . /
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment