MorseCode



  • Hallo,

    ich bin gerade dabei einen MorseCode-Umwandler zu entwickeln.

    /***** Eingabeteil (Dateneingabe) *****/																//Alle vom Benutzer benötigten Variablen abfragen
    	printf("Morsecode-Umwandler\n");
    	printf("===================\n\n");
    	printf("Für eine Text - Morse Umwandlung drücken Sie die 1!\n");										//Text - Morse
    	printf("Für eine Morse - Text Umwandlung drücken Sie die 2!\n");										//Morse - Text
    	fflush(stdin);
    	scanf("%lf", &UmwandlungsArt);																		
    
    /*****Umwandlung Text - Morse*****/
    	if (UmwandlungsArt == 1)																				//Mittels tolower einfachere Lösung --> nur Kleinbuchstaben nötig
    	{																										
    		char *morsecode[] = { ".-", ".-", "-...", "-...", "-.-.", "-.-.", "-..", "-..", ".", ".", "..-.", "..-.", "--.", "--.", "....", "....", "..", "..", ".---", ".---", "-.-", "-.-",
    			".-..", ".-..", "--", "--", "-.", "-.", "---", "---", ".--.", ".--.", "--.-", "--.-", ".-.", ".-.", "...", "...", "-", "-", "..-", "..-", "...-", "...-", ".--", ".--",
    			"-..-", "-..-", "-.--", "-.--", "--..", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "--..--", ".-.-.-", "..--..", "---.", "..--", ".-.-", "  " };
    		char alphabet[] = { 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r',
    			'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '.', '?', 'Ö', 'Ü', 'Ä', ' ' };
    
    			printf("\nBitte geben Sie hier den umzuwandelnden Text ein:\n");								//Textabfrage
    			fflush(stdin);
    
    			while (Eingabe = getchar())																		//Wenn der eingegebene Buchstabe...
    			{
    				for (i = 0; i<69; i++)																		//Gleicht die Eingabe mit den Buchstaben/Zahlen/Umlaute/Satzzeichen ab
    				{
    					if (alphabet[i] == Eingabe)																//... mit einem aus dem vorgegebenen Alphabet übereinstimmt
    					{
    						for (int j = 0; morsecode[i][j]; j++)       
    						{
    							if (morsecode[i][j] == '-')														//Für '-' ...
    							{
    								putchar('-');																//... schreibe '-'
    							}
    							if (morsecode[i][j] == '.')														//Für '.' ...
    							{
    								putchar('.');																//... schreibe '.'
    							}
    						}
    						putchar(' ');																		//Nach jedem Buchstaben ein Leerzeichen
    					}
    				}
    			}
    	}
    

    Das funktioniert soweit auch recht gut, jedoch sollte er auch vom MorseCode in einen normalen Text umwandeln können.
    Hierbei ist mein Problem momentan wie ich meinem Programm sage, dass es alle Zeichen bis zum nächsten Leerzeichen "zusammenfasst" und diese dann im UmwandlungsAlphabet absucht...
    Leider hab ich hierzu keinerlei verwertbaren Ansatz gefunden und hoffe dass mir jemand helkfen kann

    Bin hier neu und hoffe das war verständlich genug ansonsten bitte einfach nachfragen.
    MfG Leon

    Edit: Bin natürlich auch nicht auf der Suche nach der Lösung sondern nur nach einem kleinen Denkanstoß wie ich es schaffe dass das Programm mir die Zeichen zwischen den Leerzeichen zusammnimmt...



  • Erstmal die Gretchenfrage: Willst Du C oder C++ programmieren?



  • Reintheoretisch C++
    Würde mich aber zunächst mal freuen wenn es funktionieren würde ^^



  • Der gezeigte Quelltext zeigt aber nicht viel C++, das ist eher C.

    Falls du C++ schreiben möchtest, hast du schon etwas von Containern gelesen? Eventuell da mal einen Blick auf map werfen?

    Schreib das Programm neu in C++ sonst wird das kein brauchbarer C++ Quelltext. Sorry.

    MfG f.-th.



  • Hätte mir vielleicht trotzdem jemand eine idee wie ich das Problem lösen kann?



  • Pr06r4mM1n6 schrieb:

    Hallo,
    Edit: Bin natürlich auch nicht auf der Suche nach der Lösung sondern nur nach einem kleinen Denkanstoß wie ich es schaffe dass das Programm mir die Zeichen zwischen den Leerzeichen zusammnimmt...

    Na du brauchst offensichtlich eine klein Schleife die Zeichen bis zur Eingabe eines Leerzeichens liest.
    Diese Zeichen müssen erstmal in einem Puffer Zwischengespeichert werden.
    (Aufpassen dass maximal nur soviele Zeichen gelesen werden wie im Puffer Platz haben!)
    Danach vergleichst du den Puffer zeichneweise mit den Morsecodes.



  • Wäre sring compare hierbei die richtige Lösung?
    Beziehungsweise kann ich im zweiten Teil mit string compare arbeiten ohne den ersten zu verändern?



  • Was meinst du mit String Compare? Man kann nicht einfach char Arrays/Pointer mit == vergleichen. Die C Lösung wäre strcmp. In C++ nutzt man lieber die std::string Klasse und kann dann auch mit == vergleichen. Wenn du die völlständige C++ Lösung nutzen würdest dann kann man auch eine std::map nehmen und muss selbst gar keine Vergleiche mehr anstellen um das dem Morsecode entsprechende Zeichen zu finden.



  • Hallo Pr06r4mM1n6!

    Da gibt es noch einige Zeichen:

    / stroke (slant) = '--..--'
    = double hypen = '.-.-.-'
    -hypen = '-....-'
    ( left hand braket = '-.--.'
    ) right hand braket = '-.--.-'
    :colon = '---...'
    'apostrophe = '.----.' 
    + cross = '.-.-.'
    error (Irrtümlich falsch gegebene Zeichen berichtigen) = '........'
    

    Bevor ich nach einen Zusammenstoß als Fußgänger
    mit nem Auto schwerhörig wurde(Schädelbruch, irgend was mit otobasal), hatte ich mal auf Kurzwelle Tastfunk gemacht.
    Die Französischen Zeichen lasst du besser weg, die sind nur beim
    Verkehr mit französisch-sprachigen Ländern oder Latein-Amerika wichtig.
    Sonst wird dein Prog zu komplex.

    Anregung:
    Vieleicht gelingt es dir, die Soundkarte deines PC zu programmieren.
    Optimal wären 800 Hz für die Wiedergabe. Das wäre super!



  • Hi,

    laut deinem Array char "morsecode" scheint Morsecode ja case insensitiv zu sein. Dann würde ich mir diese doppelten Einträge auch einfach sparen!


Anmelden zum Antworten