
Seminarski radovi iz uvoda u računalne mreže
Koder i dekoder Morsovog koda
Što je Morseov kod i kako je nastao?
Morseov kod je sistem prikazivanja slova abecede, brojeva i interpunkcijskih znakova pomoću zadanih kombinacija crta i točaka. Kod se može prenositi analogno mehanički, električnim impulsima određenih duljina ili izmjeničnim svjetlosnim signalima. Prvi sustav Morseovog koda je 1930-ih izumio američki umjetnik i izumitelj Samuel F.B. Morse. Pojavom Morseovog koda u Europi odlučeno je da taj sistem nije adekvatan za primjenu na jezicima koji nisu Engleski te je stoga uveden Internacionalni Morseov kod koji se također naziva Kontinentalni Morseov kod. Razlika između ta dva sistema je ta što Internacionalni Morseov koda uključuje kombinacije za prikazivanje slova sa dijakritičkim znakovima. Morseov kod se koristio u Drugom svjetskom ratu, Korejskom i Vijetnamskom ratu te se čak koristio u logistici sve do 1990-ih.
Kako funkcionira Morseov kod?
Morseov kod se sastoji od točaka i crtica koje se šalju u određenim vremenskim intervalima. Trajanja su određena vremenskom jedinicom, npr. 50 milisekundi. Točka traje jednu jedinicu tj. 50ms. Crta traje 3 jedinice odnosno 150ms. Vrijeme između točaka i crta traje, kao i točka, jednu jedinicu. Kratka pauza, odnosno vrijeme između slova traje 3 jedinice, a srednja pauza tj. vrijeme između riječi traje 7 jedinica tj. 350ms. Slova (osim slova sa dijakritičkim znakovima poput Š) se sastoje od najviše 4 crte ili točke dok se brojevi svi sastoje od 5 crta ili točaka.
Program za kodiranje i dekodiranje Morseovog koda:
U početku moramo definirati dvije funkcije, jednu za kodiranje i drugu za dekodiranje:
Dalje pitamo korisnika za unos slova A ili B ovisno o tome želi li kodirati riječ ili dekodirati.
Kodiranje obavljamo tako da riječ spremamo u string. Naredbom „strlen“ nalazimo broj znakova u stringu odnosno broj slova u riječi. U for petlji prolazimo kroz svako slovo koje šaljemo u funkciju kodiranje koja printa ekvivalent slova u Morseovom kodu.
Sva slova su spremljena u obliku Morseovog koda, a pomoću naredbe „switch case“ ispisujemo potrebno slovo.
Dekodiranje se radi tako da korisnik upiše broj slova u riječi te onda svaki znak koji upiše odvoji tipkom enter. Znakovi se jedan po jedan šalju u funkciju za dekodiranje gdje se oni uspoređuju pomoću naredbe "strcmp" i ispisuju odgovarajuća slova.





#include <stdio.h>
#include <string.h>
void kodiranje(char slovo);
void dekodiranje(char kod[10]);
int main() {
char rijec[20], rijecm[20][10], odabir, kod[10];
int vel, n;
printf("Zelite li:\n");
printf("A kodirati rijec\t");
printf("B dekodirati rijec?\n");
scanf("%c", &odabir);
if (odabir == 'A') {
printf("\nUnesite rijec koju zelite kodirati: ");
scanf("%s", rijec);
vel = strlen(rijec);
printf("\nKodirana rijec: ");
for (int i = 0; i < vel; i++) {
kodiranje(rijec[i]);
}
printf("\n");
}
else if (odabir == 'B') {
printf("\nKoliko slova ima kod?\n");
scanf("%d", &n);
printf("\nUnesite slova koja zelite dekodirati te pritisnite enter izmedju svakog: \n");
for (int i = 0; i < n; i++) {
scanf("%s", rijecm[i]);
}
printf("\n");
for (int i = 0; i < n; i++) {
dekodiranje(rijecm[i]);
}
printf("\n");
}
return 0;
}
void kodiranje(char slovo) {
switch (slovo) {
case 'A':
printf(".- ");
break;
case 'B':
printf("-... ");
break;
case 'C':
printf("-.-. ");
break;
case 'D':
printf("-.. ");
break;
case 'E':
printf(". ");
break;
case 'F':
printf("..-. ");
break;
case 'G':
printf("--. ");
break;
case 'H':
printf(".... ");
break;
case 'I':
printf(".. ");
break;
case 'J':
printf(".--- ");
break;
case 'K':
printf("-.- ");
break;
case 'L':
printf(".-.. ");
break;
case 'M':
printf("-- ");
break;
case 'N':
printf("-.");
break;
case 'O':
printf("--- ");
break;
case 'P':
printf(".--. ");
break;
case 'Q':
printf("--.- ");
break;
case 'R':
printf(".-. ");
break;
case 'S':
printf("... ");
break;
case 'T':
printf("- ");
break;
case 'U':
printf("..- ");
break;
case 'V':
printf("...- ");
break;
case 'W':
printf(".-- ");
break;
case 'X':
printf("-..- ");
break;
case 'Y':
printf("-.-- ");
break;
case 'Z':
printf("--.. ");
break;
}
}
void dekodiranje(char kod[10]) {
if(strcmp(kod, ".-") == 0)
printf("A");
if (strcmp(kod, "-...") == 0)
printf("B");
if (strcmp(kod, "-.-.") == 0)
printf("C");
if (strcmp(kod, "-..") == 0)
printf("D");
if (strcmp(kod, ".") == 0)
printf("E");
if (strcmp(kod, "..-.") == 0)
printf("F");
if (strcmp(kod, "--.") == 0)
printf("G");
if (strcmp(kod, "....") == 0)
printf("H");
if (strcmp(kod, "..") == 0)
printf("I");
if (strcmp(kod, ".---") == 0)
printf("J");
if (strcmp(kod, "-.-") == 0)
printf("K");
if (strcmp(kod, ".-..") == 0)
printf("L");
if (strcmp(kod, "--") == 0)
printf("M");
if (strcmp(kod, "-.") == 0)
printf("N");
if (strcmp(kod, "---") == 0)
printf("O");
if (strcmp(kod, ".--.") == 0)
printf("P");
if (strcmp(kod, "--.-") == 0)
printf("Q");
if (strcmp(kod, ".-.") == 0)
printf("R");
if (strcmp(kod, "...") == 0)
printf("S");
if (strcmp(kod, "-") == 0)
printf("T");
if (strcmp(kod, "..-") == 0)
printf("U");
if (strcmp(kod, "...-") == 0)
printf("V");
if (strcmp(kod, ".--") == 0)
printf("W");
if (strcmp(kod, "-..-") == 0)
printf("X");
if (strcmp(kod, "-.--") == 0)
printf("Y");
if (strcmp(kod, "--..") == 0)
printf("Z");
}
