[C/C++] Potzrebuje pomocy na "koło"?

0

Mam nastepujacy program do kodowania liter w alfabecie morsa ale nie wiem jak zrobic odwrotnie czyli z morsa na literay.Prosze o pomoc!!

#include
#include
char mors[255];
char text[255];
int wybor;
short int x=0;// zmienna określająca znak we wpisanym zdaniu
short int y=0;// zmienna określająca znak w kodzie morsa

void duze()
{
while(x

0

kogo my tu mamy...

0

Chyba nie przemyslales tego "algorytmu".
C++ mial byc z zalozenia efektywny, a to co ty zrobiles .. ehh popatrz ;)
if ((text[x] > 64) || (text[x]

0

Vicolo!

Bawiłem się przez kilka minut suwaczkiem przeglądarki przemieszczjąc go na zmianę w górę i dół. Ale jazda!!!

Na szczęście alfabet ma tylko kilkadziesiąt znaków - nie pamiętam, polski ma chyba 36 a angielski koło 28... - widzisz!? mi się nawet nie chce ich przeliczyć, bo to żmudne zajęcie.

Pomijając niezaprzeczalne walory estetyczne (suwaczek rulez!!!), taki kod jest - mówiąc okrutnie - najgorszym możliwym rozwiązaniem. Powiedzmy że nagle odnalazłeś błąd (co przecież zdarza się i to nazbyt często) którego poprawienie będzie wymagać przepisania każdego wiersza - ja bym oszalał (albo bym się zrelaksował suwaczkiem).

David Harel w swojej książce "agorytmika - istota informatyki" mówi że dobry programista powinien być trochę leniwy w sensie tego, że gdy zobaczy problem powinien powstrzymać odruch natychmiastowego pisania programu. Powinien przemyśleć go, naszkicować go na kartce, zastanowić się ... z drugiej strony rozważania trzeba w pewnej chwili przerwać i zabrać się do kodowania, gdyż (wyłączając wyjątkowo proste problemy) żadnego problemu nie można obmyśleć w najdrobniejszym szczególe - zawsze pozostaje pewna niewiadoma cząstka.

Nie twierdzę że jesteś złym programistą, mam tylko wrażenie że zbyt krótko myślałeś nad problemem a zbyt szybko zabrałeś się do pisania - czasami lenistwo popłaca! (ja zresztą też mam ten problem - za mało czasu spędzam na analizowaniu)

konwersja z morse'a na zwyczajny alfabet ... zapytam wpierw - czy znaki morse'a mają jakieś bezpośrednie przełożenie na zwyczajne litery ?

Właśnie na nie patrzę i wygląda na to, że nie ma prostej "funkcji" znak morse'a->litera, szkoda.

to oznacza, że musisz spisać cały alfabet - proponuję to zrobić w tablicy, gdzie pierwszy index oznacza literę a, drugi b itd.

następnie wczytać znak, sprawdzić czy gdzieś istinieje w tablicy i w odpowiedzi podać literę abecadła...

ewentualnie można inaczej zorganizować tablicę - posortować leksykograficznie ze względu na znaki morse'a i przy odnajdowywaniu posłużyć się wyszukiwaniem binarnym ... tylko że wtedy każde pole musi dodatkowo przechowywać informację o literze abecadła

pozdrawiam.

p.s. dlaczego abecadło z pieca spadło ?!?!

0

ewentualnie można inaczej zorganizować tablicę - posortować leksykograficznie ze względu na znaki morse'a i przy odnajdowywaniu posłużyć się wyszukiwaniem binarnym ... tylko że wtedy każde pole musi dodatkowo przechowywać informację o literze abecadła

To chyba najprostsze wyjście - utworzyć tablicę ,majaca tyle wierszy ile jest znaków alfabetu Morse'a. Każdy wiersz ma dwa pola- jedno zawierające znak morse'a a drugie odpowiadający mu znak pisarski. Teraz wystarczy przeszukiwać tablicę albo pod kątem znaków Morse'a - i odczytaywać litery ,albo odwrotnie.

0

A nie lepiej tak:

type
PMors = ^TMors;
TMors = record
Kropka, Kreska: TMors;
Litera: Char
end;

Takie piękne drzewko z tego powstaje, łatwe do przeszukania.

0

A nie lepiej tak:

type
PMors = ^TMors;
TMors = record
Kropka, Kreska: TMors;
Litera: Char
end;

Takie piękne drzewko z tego powstaje, łatwe do przeszukania.

Tylko mam jedno pytanie dot. alfabetu morse'a. W jaki sposób rozdziela się poszczególne litery? W ciągu to się raczej nie pisze, bo jak byście odczytali taki ciąg:
...
jako "eee" czy jako "s"?

Kapustka: tak w ramach korekty (bo nie ma to większego znaczenia dla tego problemu) alfabet angielski ma 26 liter. Dzięki temu mamy szyfrowanie ROT13 (dwa razy szyfrowanie tym samym sposobem i mamy znowu oryginalny tekst 13+13=26)

1 użytkowników online, w tym zalogowanych: 0, gości: 1