#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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]; } + Multi-Zitat Zitieren
#4 8. April 2009 AW: Morse-Codierung Nur mal so am Rande. Es gibt keine IF Schleifen! if-schleife.de + Multi-Zitat Zitieren
#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; } + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#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 : + Multi-Zitat Zitieren