Kod morse'a

Odpowiedz Nowy wątek
2016-11-10 22:48
0

Witajcie, mam do zrobienia program, który będzie pikał kodem morse'a i mam problem na samym początku. Mam plik main, którego nie wolno mi zmieniać i muszę dopisać morse.h i np morse.cpp.

int main()
{
    morse m;
    m.setFrequency(1000);
    m.setPause(100);
    m.setSpacePause(1000);
//itd 

W jaki sposób mogę zrobić to, żeby ustawiać wszystko tak jak mi każe main? Najlepiej jakbym używał windows.h i funkcji Beep(F,T);. Koledzy proszę o jakieś podpowiedzi.

Pozostało 580 znaków

2016-11-10 22:50
0
struct morse {
    void setFrequency(int) {}
    void setPause(int) {}
    void setSpacePause(int) {}
}

Pozostało 580 znaków

2016-11-11 00:00
0

A dlaczego stuct? Nie mogę stworzyć klasy morse i tam wszystko zrobić? Bardziej też mi chodziło jak je później powiązać, żeby to wszystko działało bo od tej strony właśnie nie wiem jak do tego podejść.

Pokaż pozostałe 4 komentarze
To wiem, że jedno ustawia częstotliwość itd ale jak tego użyć? Bo nie mam pojęcia jakbym miał to wcisnąć do Beep... - Loq14 2016-11-11 00:47
20zł na kawę i masz z tego gotowca - spartanPAGE 2016-11-11 01:16
Wolałbym spróbować sam - Loq14 2016-11-11 01:19
próbuj więc :) bo na razie nie dałeś od siebie nic, nawet zepsutego kawałka kodu - spartanPAGE 2016-11-11 01:21
@Loq14 Tego nie trzeba wciskać do beep, tylko Beep trzeba wywołać w klasie morse z odpowiednimi argumentami :P Przy założeniu, że będzie np. morse.send(".-.-") - xfin 2016-11-11 10:03

Pozostało 580 znaków

2016-11-11 10:17
0

Łatwiej będzie jeśli poza setterami wrzucisz coś jeszcze. Ach ten poziom studentów informatyki -.-

Ale co tam więcej trzeba? Settery są, trzeba mieć funkcję, która będzie parsować kropki i kreski i wywoływać beepa :D - xfin 2016-11-11 10:30
Dla mnie to na razie jest tam ustawiana wysokość dźwięku, przerwa między literami i przerwa między znakami danej litery. Z tego zo zrozumiałem teraz powinny być metody które podają literę. - NickOver 2016-11-11 14:57

Pozostało 580 znaków

2016-11-11 10:49
2

Na dobrą sprawę potrzeba tylko długości czasu trwania pauzy/kropki, bo:
Kropka = czas trwania kropki
Kreska = 3czas trwania kropki
Pauza = czas trwania kropki
Pauza między słowami (spacePause) = 7
czas trwania kropki

No ale niech będzie:

struct morse {
    int frequency;
    int pause;
    int spacePause;

    int dotTime, dashTime;

    void setFrequency(int f) {
         frequency = f;
    }
    void setPause(int p) {
         pause = p;
         dotTime = pause;
         dashTime = 3*pause;
    }

    void setSpacePause(int p) {
        spacePause = p; // ale ja bym to wstawił do set pause jako spacePause = 7*pause;
    }

    void beepDot() {
        Beep(frequency, dotTime);
        Beep(0, pause);
    }

    void beepDash() {
        Beep(frequency, dashTime);
        Beep(0, pause);
    }

    void beepSpacePause() {
        Beep(0, spacePause)
    }

    void morseMsg(std::string msg) {
        for(int character = 0; character < msg.length(); ++character) {
            switch(character) {
                case '.' : beepDot();
                               break;
                case '-' : beepDash();
                               break;               
                case ' ' : beepSpacePause();
                               break;       
                default : break;
            }
        } 
    }
}
edytowany 1x, ostatnio: xfin, 2016-11-11 10:50
+ w metodach publicznych dałbym tylko settery i morseMsg. A cała reszta może być private. - xfin 2016-11-11 10:52
Dzięki, nie musiałeś wrzucać całego kodu. Wszystkie czasu podane są dalej w mainie ale nie było sensu ich wklejać, teraz bez problemu zrobię to co muszę. - Loq14 2016-11-11 12:51

Pozostało 580 znaków

2016-11-12 10:43

Twórca tematu przesłał mi taki oto kod:


int main()
{

    morse m;
    m.setFrequency(1000);
    m.setPause(100);
    m.setSpacePause(1000);
    m.setCharPause(200);
    m.setDotTime(200);
    m.setDashTime(400);
    m << "Ala ma kota";
    long i = 0xA5A5A5A;
    double d = 1.23456789;
    //m << i<<pause << d;
    return 0;
}

Tylko nie wiem czemu w wiadomości prywatnej a nie tu :p
Więc na początku masz settery z wartościami. Więc ustawiasz sobie to w programie.
Następnie masz przekształcić wyraz Ala ma kota więc zrób sobie tablice litera => kod morsa,
następnie podziel cały otrzymany string na pojedyńcze znaki i poleć po nich w jakiejś pętli. W pętli pobierz kod morsa dla danego znaku i znów podziel go na znaki, i zależnie od znaku odegraj dzwięk o częstotliwości i długości podanej w seterze robiąc między nimi odpowiednie przerwy. I ot masz wszystko ładnie działające :)

Dzięki wielki, jak to zrobię to się pochwalę :P - Loq14 2016-11-12 11:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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