Programmieraufgabe



  • Palindrom (von griechisch palíndromos = rückwärts laufend) ist ein Wort oder ein Satz, der von vorne und hinten gelesen gleich bleibt oder einen Sinn ergibt. Das Palindrom ist eine spezielle Form des Anagramms.
    Quelle wikipedia.de

    Die Aufgabe besteht darin ein Programm zu schreiben das sowohl Satz als auch Wortpalindrome erkennt und dann entweder eine positive oder eine negative Rückmeldung liefert.

    Bonusaufgabe: Eine Textdatei wird eingelesen, alle Palindrome die vorkommen ausgegeben (natürlich in alphabetischer Reihenfolge Augenzwinkern ) und die Anzahl von Palindromen soll ebenfalls ausgegeben werden. Dieser Zusatz sollte nur Wordpalindrome erkennen wer es trotzdem schafft auch Satzpalindrome zu erkennen
    soll das gerne machen mir fällt auf anhieb selbst keine elegante Lösung ein Augenzwinkern .

    Beispielausgabe des Programm:

    << Geben sie ein Wort oder einen Satz ein:

    > aha
    << "aha" ist ein Palindrom

    Links zur Unterstützung :
    http://de.wikipedia.org/wiki/Liste_von_Wortpalindromen
    http://de.wikipedia.org/wiki/Liste_von_Satzpalindromen

    Alle Ansätze sind erwünscht auch absolute Anfänger können gerne ihre Lösungen posten auch wenn diese vielleicht etwas unfertig sind. Die geposteten Vorschkäge bitte ausreichend kommentieren bzw. erklären damit die anderen auch etwas davon haben.

    EDIT: Satzzeichen werden bei Satzpalindromen ignoriert. Die Aufgabe bezieht sich auf Palindrome die rückwärts und vorwärts gelesen identisch sind.



  • XFlorian schrieb:

    Palindrom (von griechisch palíndromos = rückwärts laufend) ist ein Wort oder ein Satz, der von vorne und hinten gelesen gleich bleibt oder einen Sinn ergibt.

    Ich glaub, das krieg ich nicht auf die Reihe. o_O



  • ODER einen Sinn ergibt? Also ist jeder sinnvolle Satz ein Palindrom 😃 *scnr

    Hier mal bizzi Code, den ich vor langer Zeit geschrieben habe (hatte keinen Bock da jetzt passende Teile rauszukopieren). Vielleicht hilfts ja 😉

    public abstract class Pali {
        /**
         * @return true, wenn s ein Palindrom ist, false sonst
         */
        public static boolean isPalindrome(String s) {
            s = filter(s);
            for (int i = 0; i < s.length() / 2; i++)
                if (s.charAt(i) != s.charAt(s.length() - i - 1))
                    return false;
            return true;
        }
    
        /**
         *  Dasselbe rekursiv
         */
        public static boolean isPalindrome1(String s) {
            return isPalindrome2(filter(s));
        }
    
        private static boolean isPalindrome2(String s) {
            return s.length() < 2 ||
                    s.charAt(0) == s.charAt(s.length() - 1) &&
                    isPalindrome2(s.substring(1, s.length() - 1));
        }
    
        /**
         * filter leistet folgendes
         * a) filter eliminiert alle Nicht-Buchstaben
         * b) filter wandelt alle übrigen Zeichen in Kleinbuchstaben um
         */
        public static String filter(String s) {
            char[] result = new char[s.length()];
            int cnt = 0;
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if (Character.isLetter(c))
                    result[cnt++] = Character.toLowerCase(c);
            }
    
            return new String(result, 0, cnt);
        }
    }
    


  • Werden nun doch Hausaufgaben gelöst hier? 🙄



  • Leos oel.

    Bye, TGGC (Pipe my World.)



  • true


Anmelden zum Antworten