[C/C++] Morse-Codierung

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von SportfreundGugu, 8. April 2009 .

  1. 8. April 2009
    Morse-Codierung

    Hey

    also ich soll ne Morse-Codierung programmieren. Dabei wird ein Text ausgegeben und dieser soll dann in den Morsecode umgewandelt werden.
    Nur leider komm ich damit absolut nicht klar und bekomm es einfach nicht hin die Zahlen zu konvertieren.

    Hier mal mein bisheriger Code:

    Code:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    void inmorse(char* text) {
    
     char alphabet[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
     char *morse[26]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
    
     const int l = 100;
    
     char ausgabe[l];
    
     for (int z = 0; z < l; z++) {
    
     if (text[z] == *alphabet) {
     ausgabe[z] = *morse[z];
     }
    
     }
     cout << ausgabe << endl;
    
    }
    
    int main(int argc, char *argv[])
    {
    
     const int laenge = 100; //Länge für Eingabe
     char text[laenge];
    
     cout << "Bitte den zu konvertierenenden Text eingeben: " << endl;
     cin.getline(text,laenge);
     for(int a = 0; a<laenge; a++) {
     text[a] = toupper(text[a]);
     }
     inmorse(text);
    
     system("PAUSE");
     return EXIT_SUCCESS;
    }
    
    hängt vor allem in der if-schleife
    als Hinweis ist noch gegeben: Nicht mehr als 10 if oder case-Statements.

    Danke für jede Hilfe, bw is kein Thema.

    Maybe komm ich dann bald mit noch anderen aufgaben

    Grüße
     
  2. 8. April 2009
    AW: Morse-Codierung

    Hallo!

    Ich wuerde das ganze anders loesen. Ich kann aber nur C, fuer C++ gibts vielleicht sogar eine bessere Loesung:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    #define ALPHABET_LAENGE 26
    #define MAX_BUF 1024
    
    
    typedef struct _MorseCode
    {
     const char zeichen;
     const char *ersetzt;
    } MorseCode;
    
    
    static MorseCode alphabet[ALPHABET_LAENGE] = {
     { 'A', ".-" }, { 'B', "-..."},
     { 'C', "-.-."}, { 'D', "-.."}
    };
    
    
    static const char*
    morse_ersetze (const char c)
    {
     unsigned int i = 0;
     
     for (i = 0; i < ALPHABET_LAENGE; i++)
     {
     if (alphabet[i].zeichen == c)
     return alphabet[i].ersetzt;
     }
     
     return "";
    }
    
    
    int main (void)
    {
     char text[MAX_BUF] = { 0 };
     unsigned int len = 0, i = 0;
     
     printf ("Bitte zu kodierenden Text eingeben: ");
     if (!fgets (text, MAX_BUF - 1, stdin))
     {
     printf ("Fehlerhafte Eingabe!\n");
     return EXIT_FAILURE;
     }
     
     printf ("\n-------------\nAls Morse-Code:\n\n");
     
     len = strlen (text);
     for (i = 0; i < len; i++)
     printf ("%s", morse_ersetze (text[i]));
     
     printf ("\n\nby Kolazomai\n");
     return EXIT_SUCCESS;
    }
    Hab das ganze also mit einem Struct geloest, das sowohl das Zeichen als auch den Ersetzcode enthaelt

    Mfg,

    Kolazomai
     
  3. 8. April 2009
    AW: Morse-Codierung

    wieso so umständlich? ungetestet, funktionsprinzip sollte klar werden:
    Code:
    string str_01 = "asdf"
    
    for (i = 0; i < str_01.size(); i++) {
     ausgabe[i] = *morse[char*str_01[i] - 65];
    }
     
  4. 8. April 2009
    AW: Morse-Codierung

    Nur mal so am Rande. Es gibt keine IF Schleifen!
    if-schleife.de
     
  5. 9. April 2009
    AW: Morse-Codierung

    kennst du wayne?
    is mir schon klar.

    so habs mal hinbekommen.
    danke für die Hilfe!
    Code:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    void inmorse(char* text) {
    
     if (text) {
    
     char alphabet[] = {' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
     char *morse[]={" ",".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
    
     int z = 0;
     int j = 0;
    
     while(text[z] != '\0') {
     if (text[z] == alphabet[j]) {
     cout << morse [j] << " ";
     z++;
     j = -1;
     }
     j++;
     if ( j > 26) {
     j = 0;
     }
     }
    
     }
     else {
     cout << "Fehler!" << endl;
     }
     return;
    }
    
    int main(int argc, char *argv[])
    {
    
     const int laenge = 100; //Länge für Eingabe
     char text[laenge];
    
     cout << "Bitte den zu konvertierenenden Text eingeben: " << endl;
     cin.getline(text,laenge);
     for(int a = 0; a<laenge; a++) {
     text[a] = toupper(text[a]);
     }
     inmorse(text);
     cout << endl;
    
     system("PAUSE");
     return EXIT_SUCCESS;
    }
    
     
  6. 9. April 2009
    AW: Morse-Codierung

    ich frag mich warum dus immernoch so umständlich machst, obwohl ich dir einen viel schnelleren und simpleren weg gezeigt habe.
     
  7. 9. April 2009
    AW: Morse-Codierung

    Ja unsere Professorin akzeptiert eine Lösung mit "String" nicht, da dieser in der Vorlesung noch nicht behandelt wurde, in der Aufgabestellung steht auch "verwenden Sie geeignete char*-Arrays".

    Aber danke!
     
  8. 9. April 2009
    AW: Morse-Codierung

    Allerdings ist das ganze Unterfangen immernoch ziehmlich umständlich.

    Code:
    void inmorse(char* text) 
    {
     const char siz = 26;
     const char insiz = 0;
     const char alphabet[] = { 'A','B','C','D',
     'E','F','G','H',
     'I','J','K','L',
     'M','N','O','P',
     'Q','R','S','T',
     'U','V','W','X',
     'Y','Z' };
     
     const char *morse[] = { ".-","-...","-.-.","-..",
     ".","..-.","--.","....",
     "..",".---","-.-",".-..",
     "--","-.","---",".--.",
     "--.-",".-.","...","-",
     "..-","...-",".--","-..-",
     "-.--","--.." };
     
     if( NULL == text )
     return;
     
     insiz = strlen(text);
    
     for( int i=0; i<insiz; i++ )
     {
     for( int j=0; j<siz; j++ )
     {
     if( text[i] == alphabet[j]
     || text[i] == tolower( alphabet[j] ) ) // tolower wandelt groß- in kleinbuchstaben um.
     {
     cout << morse[j] << " ";
     break;
     }
     }
     }
    
     return;
    }
    wäre imho viel übersichtlicher :
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.