Skocz do zawartości
Bucus

[c++] Alfabet Morse'a

Rekomendowane odpowiedzi

Witam

 

Musze napisac program ktory bedzie mi tlumaczyl znaki arabskie na alfabet morsea (-.-, itp.)

Nie bardzo wiem jak sie za to zabrac tzn w jaki sposob ma mi porownyc dany znak z np litera a i wtedy wyswietlic kreski i kropki.

Chodzi mi o to zeby tlumaczyl wyrazy badz zdania.

 

Z gory Wielkie Dzieki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam

 

Musze napisac program ktory bedzie mi tlumaczyl znaki arabskie na alfabet morsea (-.-, itp.)

Nie bardzo wiem jak sie za to zabrac tzn w jaki sposob ma mi porownyc dany znak z np litera a i wtedy wyswietlic kreski i kropki.

Chodzi mi o to zeby tlumaczyl wyrazy badz zdania.

 

Z gory Wielkie Dzieki

A co za problem? Podam Ci zarys jak to zrobić.

Najpierw znajdujesz sobie jak poszczegolne litery sie oznacza przypuscmy ze a = -- b= .-., jak już bedziesz wiedział tworzysz sobie tablice (niech nazywa się trans) stringów, której poszczególne elementy oznaczają własnie znaki arabskie przetłumaczone na alfabet morsa i tak np element 0 to A zapisane w morsie element 1 to B w morsie itd, będzie ich tyle ile liter w alfabecie. Z tego co wiem w morsie listery małe i wielkie nie są rozróznialnie więc kazdy znak kótry jest literą zmieniasz np na mały A na a, N na n itd, a nastepnie na wyjście wyrzucasz znaki takie jak są w trans[aktualna_itera - 'a'] i po bólu. W miedzyczasie oczywiście pomijasz wszelkie znaki interpunkcyjne, a poszczególne litery w alfabecie morsa możesz (lub musisz nie wiem jaka jest konwencja) oddzialesz spacja wiec ab = -- .-.

Zaimplementowanie tego nie powinno być problemem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ok. juz mniej wiecej wiem o co chodzi.

A moglbys jakis przyklad progamu zarzucic bo nie jestem jeszcze az tak mocny w C++ zeby dokladnie wiedziec jak to napisac?

 

Thx

Niestety żadnego interesującego kodu w C++ nie ma zwykle w C, Javie i innych pisze. Co dokładnie Cie interesuje? Jeśli zaczynasz z programowaniem to polecam starą ale bardzo dobrą książe Symfonia C++, podstawowych rzeczy z niej się w łatwy i przyjemny sposób dowiesz.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co dokładnie Cie interesuje?

 

Tak jak napisalem musze zrobic alfabet morse'a.

A nie bardzo wiem jak to zrobic dlatego chcialbym zobaczyc chociaz kawalek takiego (podobnego) programu ktory "tlumaczy" tak jak w alfabecie jakis znak na inny.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#include<cstdio>#include<string>char* Mors[ 26 ] = {	"* - ",	"- * * *",	"- * - *",	"- * *" ,	"*",	"* * - *",	"- - *",	"* * * *",	"* *",	"* - - -" ,	"- * -" ,	"* - * *",	"- -",	"- *",	"- - -",	"* - - *",	"- - * -",	"* - *",	"* * *",	"-",	"* * -",	"* * * -",	"* - -",	"- * * -" ,	"- * - -",	"- - * *"	};	int main(){		char normal[100];		printf("Podaj tekst do zamiany");		scanf("%s",&normal);		for(int i = 0; i < strlen(normal); i++)		{			if( normal[ i ] < 65 || normal[ i ] > 90 ){				printf("%c",normal[ i ] );			}			else			{				printf("%s\n",Mors[ (int)normal[i] - 65 ] );			}		}		 return 0;	}
Edytowane przez Artur.M

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Starą ? Ta 3 tomowa to już zabytek, nie radze brać do ręki ;]

Jest nowe wydanie z 2005 roku zgodnie ze standarderem ISO ;]

Wiesz jak się checz nauczyć samej sztuki programowania to dla mnie nie ma róźnicy czy uczysz się z książek z 2005 czy z 1990, ważne by wszystko jasne było i dobrze wytłumaczone, a jak przyjdzie już do klepania konkretnego kodu to wtedy bierze się dokumentacje do aktualnego języka, kompilatora i przenosi wcześniej powstała idee na platforme jaką sie potrzebuje.

 

Powyższy program nie obsługuje małych liter, do tego zapewne tekst będzie pobierany z pliku więc nie będzie potrzeby tworzenia buforu i można czytac znak po znaku.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Już obsługuje małe litery.

#include<cstdio>#include<string>char* Mors[ 26 ] = {	"* - ",	"- * * *",	"- * - *",	"- * *" ,	"*",	"* * - *",	"- - *",	"* * * *",	"* *",	"* - - -" ,	"- * -" ,	"* - * *",	"- -",	"- *",	"- - -",	"* - - *",	"- - * -",	"* - *",	"* * *",	"-",	"* * -",	"* * * -",	"* - -",	"- * * -" ,	"- * - -",	"- - * *"	};	int main(){		char normal[100];		printf("Podaj tekst do zamiany");		scanf("%s",&normal);		for(int i = 0; i < strlen(normal); i++)		{			if( normal[ i ] > 64 && normal[ i ] < 91 ){				printf("%s\n",Mors[ (int)normal[i] - 65 ] );			}			else if( normal[ i ] > 96 && normal[ i ] < 123 )			{				printf("%s\n", Mors[ (int) normal[i] - 97 ] );			}			else			{				printf("%c\n",normal[i]);			}		}	return 0;	}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Przesadziłeś troche, po co tyle ifów :P, lepiej było tak zrobić:

#include <ctype.h>  .................... for(int i = 0; i < strlen(normal); i++){	if( isalpha(normal[ i ])) ){		printf("%s\n",Mors[ (int)(toupper(normal[i])) - 65 ] );	}		/*  else // z tego co wiem w dokumencie zapisanym alfabetem Mora sa tylko kropki i kreski wiec wszelkie znaki interpunkcyjne sa pomijane	{		printf("%c\n",normal[i]);	}*/}
Edytowane przez Ragnor

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wszystkim wielkie dzieki

 

 

Tylko w tym programie moge tlumaczyc sobie same wyrazy a co zrobic zeby zmianiac cale zdania ( tego co po spacji to on nie poznaje)

Edytowane przez Bucus

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale chyba ten "mój" sposób byłby nieco szybszy.

 

A co do wczytywania całych zdań. To zamiast funkcji scanf użyj gets(normal);

Możliwe że trochę szybszy ale asymptotycznie mają te same szybkości :), trzeba by zobaczyć jak poszczególne funcke biblioteczne sa zapisane w C o raz jak sa przekładane na asm i wtedy wszystko by się wyjaśniło :P.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

procesory 3GHz a Ci sie martwią że kod który wykonuje się raz na kilkanaście wieków (wg skali czasu procesora :) ) bedzie sie wykonywał chwilkę dłuzej...

 

w zwykłych zastosowaniach nie trzeba już się martwić o szybkość czy zużycie pamięci... to są stare dzieje, gdy mogło się zdarzyć ze zabrakło pamięci naszemu programowi :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Racja. W przeciwnym wypadku coś takiego jak java nie miało by sensu.

Teraz odwróciło sie wszystko, pamiec jest tania i jest jej dużo nie ma co sie szczypać. Teraz najważniejsze jest szybkość tworzenia oprogramowania a nie jego wydajność.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Spox ludzie akurat na programowaniu to się znam, ta dyskusja wyżej odnosnie wydajności była oczywiście żartem. Gdyby tak wszystkim zależało na wydajności to:

- programowalibysmy w assemblerze

- kod byłby na tyle wydajny i zoptymalizowany że kupno nowych procesorwo i kart graficznych mijało by sie z celem skoro na aktualnym sprzecie wszystko dobrze chodziło

Ale dzieki temu że kolejne windowsy są coraz bardziej zachłanne na pamieć i na moc procesora napędza to koniunkture rynku i biznes się kręci :D.

Wspominając o javie zaleta tego języka jest to że jest przenosny oraz aplikacje w nim w miarę szybko się pisze, co do wydajności to chyba kazdy wie jaka jest, wystarczy takiego azureusa uruchomić w systemi i się to czuje :D.

Zwazcie na to, że są zadania które wymagają jednak szybkości, wyobrażacie sobie system napisany w javie (choć taki był a może jeszcze jest ;)) lub wyszukiwarke w google dziłakaca na javie, lub baze danych?

Poprostu warto mieć dobra nawyki jeśli chodzi o wydajnośc i stąd ta cała dyskusja była, nigdy nie wiadomo co wyrosnie z ludzi którym teraz daje rady ;).

Edytowane przez Ragnor

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

to są stare dzieje, gdy mogło się zdarzyć ze zabrakło pamięci naszemu programowi

A to może zdziwi Cie ale własnie kilka dni temu zdarzyło mi się, że musiałem uzyc Matlaba (może kojarzysz) po uruchomieniu jednego wbudowanego algorytmu program w ciągu około 30 sekun zajął moje 512 ramu, no nic poszedłem do kumpla i było już w sumie 1.5 GB uruchamiam tym razem 50s i znowu out of memory, no nic dałem mu jeszcze plik wymiany 4GB trawalo to tym razem około 3-4min i co "out of memory', czemu nie dalem więcej pamieci, to proste 4GB potrafią tylko procesory 32bitowe zaadresowac. Po tych zmaganiach chciałem udusic informatyka który pisał tak wydajnie, pewnie u niego tez się szybkośc liczyła, ale pisania a nie działania.

 

Teraz najważniejsze jest szybkość tworzenia oprogramowania a nie jego wydajność.

I właśnie dzieki takiemu myslenie mamy soft jaki mamy a więc dziura na dziurze, łata na łacie, co chwila jakieś nowe błędy sa wykrywane, zamiast porządnych beta testów uzytkownicy robią za króliki doswiadczalne a wszystko dlaczego.... bo wkońcu liczy się czas a nie jakoś tworzenego oprogramowania. Jeśli wszyscy zacznął tak myśleć to daleko nasza cywilizacja nie zajdzie. Edytowane przez Ragnor

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak właśnie jest i ty tego nie zmienisz, możesz najwyżej pomarudzić ;]

Gdyby teraz pisać programy (systemy operacyjne) zgodnie z twoją teorią tak jak kiedyś to czekalibyśmy na nie dekady, były by stabilne i dobre najpewniej byly by czymś w rodzaju linuxa którego kod poprawia sie caly czas licząc od jego powstania i jeszcze pare dekad przed.

 

Zazwyczaj ludzie pałający do C wielka miłością są przewrażliwieni na punkcie wydajności i myślą że tylko jedna droga jest słuszna, oczywiście w praktyce jest zupełnie inaczej. :lol2:

Edytowane przez razor1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak właśnie jest i ty tego nie zmienisz, możesz najwyżej pomarudzić ;]

Gdyby teraz pisać programy (systemy operacyjne) zgodnie z twoją teorią tak jak kiedyś to czekalibyśmy na nie dekady, były by stabilne i dobre najpewniej byly by czymś w rodzaju linuxa którego kod poprawia sie caly czas licząc od jego powstania i jeszcze pare dekad przed.

Jak dla mnie wzorowym programem pod względem jakości jest TeX, chyba ciągle jest nagroda za znalezienie w nim błędu, program ma już ładne kilkanaście/kilkadziesiąt lat a pod względem obróbki tekstu nie ma sobie równych, mam nadzieje że nie zaatakują mnie miłośnicy Worda ;).

 

Zazwyczaj ludzie pałający do C wielka miłością są przewrażliwieni na punkcie wydajności i myślą że tylko jedna droga jest słuszna, oczywiście w praktyce jest zupełnie inaczej. :lol2:

A tutaj nie uważam że tyko jedna droga jest słuszna, ale jesli coś łatwo i prosto można przyspieszyć poświęcając na to kilka minut przemyslenia zamiast zabarac się od razu do pisania to sądzę że warto ten czas stracić a potem mieć wydajniejszy program. Co innego gdy zysk na wydajności byłby niewielki a kosztowałby wiele pracy oraz zepsułby strukturę programu, co w konsekwencji dalszej uniemożliwiło by ewentualny prosty rozwój i rozszerzanie możliwości gdyż już sami nie panowalibysmy nad tym co się dzieje w programie.

Jak dla mnie liczy się odpowiednie balansowanie pomiedzy szybkością programu a łatwościa odczytywania kodu i jego dalszego rozwijania, nie należy za bardzo przeginać w żadną ze stron.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zgadza się , kążdy by chciał aby oprogramowanie było stabilne i dobrze dopracowane to normalne. Ale w ocenych czasach gdzie oprogramowanie jest bardzo złożone i wymaga ogromnej pracy że cięzko jest to zrobić, i wyrobić sie na czas albo nawet celowo jest błedowane i spowalniane żeby zwiększyć

obroty na rynku ( głównie gry ) to chyba nie jest już tajemnicą dla nikogo ???

 

Tex czy latex a word to "raczej" programy do innego zastosowania, wiec raczej nikt myślący cie nie zatakuje.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zgadza się , kążdy by chciał aby oprogramowanie było stabilne i dobrze dopracowane to normalne. Ale w ocenych czasach gdzie oprogramowanie jest bardzo złożone i wymaga ogromnej pracy że cięzko jest to zrobić, i wyrobić sie na czas albo nawet celowo jest błedowane i spowalniane żeby zwiększyć

obroty na rynku ( głównie gry ) to chyba nie jest już tajemnicą dla nikogo ???

Co do gier do błedy w niech raczej nie przeszkadzają tak abrdzo i wiadomo że czas wydania i uprzedzenia konkurencji jest kluczowy. Gorzej gdy błedy pojawiają sie w kluczowych miejscach, system operacyjny, firewall, antywirus bład w takich miejscach może kosztowac użytkownika bardzo duzo, nie mówiac już o firmie jakie jej straty może to przynieśc. Wiesz nie chcialbym aby np. jakiś błąd pojawił sie w oprogramowaniu odpowiedzialnym za uruchomienie poduszki powietrznej w samochodzie lub za jakiś respirator w szpitalu, tylko dlatego że komuś się spieszyło.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co do gier i przemysłu rozrywkowego nie ma takich ograniczeń więc dzieje się tak jak sie dzieje PC + gry = robienie ludzi w balona.... ale taki jest przemysł komputerowy.

TRUE

 

P.S Kto wie kiedy wydadzą Duke Nukem For(n)ever :lol: ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

co do matlaba.. to wiem.. on jest strasznie nieoptymalnym programem.. Mieliśmy projekt z przedmiotu o nazwie systemy inteligentnego przetwarzania, gdzie projekty zahaczały o stworzenie programów rozpoznających wzorce za pomoca sieci neuronowych. To kumpel robił w matlabie i musiał dokupowac pamięc.. miał 1GB :D. Natomiast ja napisałem swoją sieć w borlandzie buiderze, która była kilka razy bardziej skomplikowana i oczywiście większa i cały program zabierał około 3 MB w pamięci...

 

dlatego matlab ssie :), poza tym nauczyłęm się więcej tworząc swój wąłsny program niż uzywając gotowych funkcji matlaba..

Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mi dokładnie na tym samy wysiadł matlab na sieciach neuronowych, pisałem sobie projekcik sieci do rozpoznawanie odręcznie pisanych cyfer no i jak zwykle chcialem potestować z róznymi rodzajami sieci. Co najciekawsze ramu zabrakło przy trenowaniu jednej z najprostszych sieci GLM (siec z jedna warstwa wejsciową i jedną wyjściową) z funkcja aktywacji softmax, gdy terenowałem bardziej złożone sieci (chocby MLP, które posiadają neurony w warstwie ukrytej) spokojnie mieścił się w 800MB.

 

PelzaK --> Jaki rodzaj sieci neuronowej samemu zaimplementowałeś? Studiujesz na AiR?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

sztuczna intelgiencja :) @informatyka@elektronika@pwr.wroc.pl heh.. zostało mi 3 tygodnie a jeszcze 2 projekty nie ruszone :D..Ty widze z rodzimej uczelni jestes? :)

 

Siec była wielowarstwowa (1 ukryta), nuronów kolejno: 4096/10-30/10 z algorytmem wstecznej propagacji błędu - najprostrza wersja bez udziwnień - toteż uczyła się powoli i za bardzo uczyła sie wzorców.. być moze wina tego że zbiór uczacy był okrojony do 1 wzorka z każdego egzemplarza rozpoznawanych .. liści drzew lisciastych.. bo taki miałem temat :) . Dodam jeszcze, że to była masakra żeby nei pogubić się w tych wszystkich wskaźnikach, tablicach, kilkadziesiat tysiecy połączeń to już trochę jest :wink:... tu mi z pomoca przyszedł sąsiad współlokator, który o programowaniu ma nieco większe pojęcie, no i zatrudniłem vectory stlowe co mi uratowało życie.. :) teraz nigdzie się bez nich nie ruszam - tam gdzie ich speed nie stwarza poważnych problemów.

 

Własnie wczoraj skończyłem tworzyć kolejny projekt AI, uniwersalny , w miare inteligentny system expertowy... co prawda ma szereg uproszczeń, ale musze go na jutro oddać :D więc kombinowałem po 14h/dobe przez tydzień żeby to zaczeło "mysleć" :twisted: . Niedługo wrzucę nowy dział AI na moją stronkę, skąd bedzie można pobrać to i owo..

 

wersje testową z tzw światem zwierząt można pobrać stąd..

Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...