Alfabet Morse'a w C++

macieja92

Alfabet Morse'a w C++

Post autor: macieja92 »

Witam, będe pisac na zaliczenie alfabet morse'a z obsługą dzwieku itp.

ale same znaki ze A odpowiada np ._. to za pomoca czego zrobic;>
bo ostatnio mielismy, stos, liste, drzewo za pomoca czegos z tych zrobic czy czyms innym ;>
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

Alfabet Morse'a w C++

Post autor: spajder »

Za pomocą zwykłych stringów. Kod mniej więcej będzie wyglądał tak:

Kod: Zaznacz cały

// wczytanie tekstu
string tekst;
cin >> tekst;

// zamiana kazdego znaczka
string wynik;
for(int i = 0; i < tekst.lenght(); i++)
    wynik += morse(tekst[i]);
przy czym morse jest funkcją zdefiniowaną mniej więcej tak:

Kod: Zaznacz cały

string morse(char l)
{
    switch(l)
    {
        case 'a': case 'A':
            return "._.";
        // tutaj kody wszystkich literek
    }
}
Potem tak utworzony tekst trzeba będzie odegrać (w winapi jest funkcja beep(), która pozwala włączyć głośnik systemowy na odpowiedni czas. Jeśli będzie kropka to włączysz np. na 0.5s a jak kreska to na 1s)
macieja92

Alfabet Morse'a w C++

Post autor: macieja92 »

nie, ja to zrobie z plikami mp3, ale dzieki spider za pomysl z stringiem ;)

-- 4 czerwca 2009, 17:59 --

Kod: Zaznacz cały


#include <iostream>
#include <conio.h>
#include <cstdlib>

using namespace std;

string morse(char menu);
int main()
{
	string tekst;
	string wynik;
	cout << "Witam, prosze wprowadzic jakies slowo aby je przetlumaczyc na alfabet morse'a";
	cin >> tekst;

	for(int i = 0; i < tekst.lenght(); i++)
    wynik += morse(tekst[i]);

	string morse(char menu);

	system("pause");
	return 0;
}
string morse(char menu)
{
    switch(menu)
    {
			case 'a': case 'A':
				return "._";
			case 'b': case 'B':
				return "_...";
			case 'c': case 'C':
				return "_._.";
			case 'd': case 'D':
				return "_..";
			case 'e': case 'E':
				return ".";
			case 'f': case'F':
			    return ".._.";
			case 'g': case'G':
				return"__.";
			case 'h': case'H':
				return"....";
			case 'i': case'I':
				return"..";
			case 'j': case'J':
				return".___";
			case 'k': case'K':
				return"_._";
			case 'l': case'L':
				return"._..";
			case 'm': case'M':
				return"__";
			case 'n': case'N':
				return"_.";
			case 'o': case'O':
				return"___";
			case 'p': case'P':
				return".__.";
			case 'q': case'Q':
				return"__._";
			case 'r': case'R':
				return"._.";
			case 's': case'S':
				return"...";
			case 't': case'T':
				return"_";
			case 'u': case'U':
				return".._";
			case 'v': case'V':
				return"..._";
			case 'w': case'W':
				return".__";
			case 'x': case'X':
				return"_.._";
			case 'y': case'Y':
				return"_.__";
			case 'z': case'Z':
				return"__..";
			case '1':
				return".____";
			case '2':
				return"..___";
			case '3':
				return"...__";
			case '4':
				return"...._";
			case '5':
				return".....";
			case '6':
				return"_....";
			case '7':
				return"__...";
			case '8':
				return"___..";
			case '9':
				return"____.";
			case '0':
				return"_____";
    }
}
no tak mam kawałek kodu już i niby teraz przy wprowadzaniu słow powinno je kompilować na Morse'a a błąd wywala ...

while trying to match the argument list '(std::istream, std::string)'
.\Alfabet Morse'a.cpp(15) : error C2039: 'lenght' : is not a member of 'std::basic_string<_Elem,_Traits,_Ax>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
Build log was saved at "file://c:\Documents and Settings\Sony Ericsson\Moje dokumenty\Visual Studio 2008\Projects\Alfabet Morse'a\Alfabet Morse'a\Debug\BuildLog.htm"
Alfabet Morse'a - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Awatar użytkownika
mcbob
Użytkownik
Użytkownik
Posty: 479
Rejestracja: 15 gru 2008, o 19:02
Płeć: Mężczyzna
Lokalizacja: Poland
Pomógł: 69 razy

Alfabet Morse'a w C++

Post autor: mcbob »

Zamiast text.lenght() nie powinno być czasem text.length()
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

Alfabet Morse'a w C++

Post autor: Szemek »

macieja92, polecam wykorzystywać możliwości narzędzia jakim jest Visual Studio 2008

dołącz plik nagłówkowy
#include <string>
zbuduj projekt i korzystaj z podpowiedzi IntelliSense
macieja92

Alfabet Morse'a w C++

Post autor: macieja92 »

no właśnie używałem visuala, na chwile do deva wsiadlem sprawdzic bledy

ale nie wiem czemu proram po skompilowaniu wprowadzam tekst, i nie wyswietla go jako morse'a

-- 4 czerwca 2009, 22:30 --

zapomnialem o cout << wynik;

-- 4 czerwca 2009, 23:19 --

przerobiłem tak żeby było z casem bo będzie jeszcze tryb dzwiekowy lecz wszystko jest dobrze zrobione, wciskam 1 aby do case 1 wejsc a w nim jest funkcja. Ale wywala ze koniec programu

Kod: Zaznacz cały

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <string>

using namespace std;

void glownydomorse(string tekst, string wynik);
string morse(char menu);
int main()
{
   int menu1;

   cout << "Witam w programie, jest to zaawansowany technicznie alfabet Morse'a, alfabet \nMorse'a moze byc odtworzony jako dzwiek, lub jako znaki interpunkcyjne " <<
	   "\nodpowiadajace oznaczeniom w alfabecie.\n" << "\nJesli wciszniejsz 1, program przeniesie cie do znakowej konwersji jezyka \ndo alfabetu Morse'a." <<
	   "\n\nJesli wcisniesz 2, program przeniesie cie do dzwiekowej konwersji jezyka \ndo alfabetu Morse'a.";
   cin >> menu1;

   switch(menu1)
   {
    case 1:
		void glownydomorse(string tekst, string wynik);
		break;
	case 2:
		break;
   }

   system("pause");
   return 0;
}
string morse(char menu)
{
    switch(menu)
    {
         case 'a': case 'A':
            return "._ ";
         case 'b': case 'B':
            return "_... ";
         case 'c': case 'C':
            return "_._. ";
         case 'd': case 'D':
            return "_.. ";
         case 'e': case 'E':
            return ". ";
         case 'f': case'F':
             return ".._. ";
         case 'g': case'G':
            return"__. ";
         case 'h': case'H':
            return".... ";
         case 'i': case'I':
            return".. ";
         case 'j': case'J':
            return".___ ";
         case 'k': case'K':
            return"_._ ";
         case 'l': case'L':
            return"._.. ";
         case 'm': case'M':
            return"__ ";
         case 'n': case'N':
            return"_. ";
         case 'o': case'O':
            return"___ ";
         case 'p': case'P':
            return".__. ";
         case 'q': case'Q':
            return"__._ ";
         case 'r': case'R':
            return"._. ";
         case 's': case'S':
            return"... ";
         case 't': case'T':
            return"_ ";
         case 'u': case'U':
            return".._ ";
         case 'v': case'V':
            return"..._ ";
         case 'w': case'W':
            return".__ ";
         case 'x': case'X':
            return"_.._ ";
         case 'y': case'Y':
            return"_.__ ";
         case 'z': case'Z':
            return"__.. ";
         case '1':
            return".____ ";
         case '2':
            return"..___ ";
         case '3':
            return"...__ ";
         case '4':
            return"...._ ";
         case '5':
            return"..... ";
         case '6':
            return"_.... ";
         case '7':
            return"__... ";
         case '8':
            return"___.. ";
         case '9':
            return"____. ";
         case '0':
            return"_____ ";
    }
}

void glownydomorse(string tekst, string wynik)
{
   cout << "Witam, prosze wprowadzic jakies slowo aby je przetlumaczyc na alfabet morse'a :\n";
   cin >> tekst;
   
   string morse(char menu);
   for(int i = 0; i < tekst.length(); i++)
   wynik += morse(tekst[i]);          
   
   cout << wynik;


}
ODPOWIEDZ