1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Palindrom

  • slicker
  • 29. Mai 2008 um 08:24
  • Unerledigt
  • slicker
    3
    slicker
    Mitglied
    Punkte
    65
    Beiträge
    11
    • 29. Mai 2008 um 08:24
    • #1

    Hallo,
    ich habe mal wieder ne nette Aufgabe bekommen.
    Vielleicht hat ja wer n schönen Lösungsansatz.
    Aufgabe:

    Schreiben sie ein Programm, das überprüft, ob ein String ein Palindrom ist oder nicht. Palindrome sind Wörter die von vorne und hinten den gleichen Sinn ergeben.
    Beispiele:

    • Otto
    • Ein Neger mit Gazelle zagt im Regen nie


    Übergeben sie den String über die Tastatur an das Programm und erzeugen sie eine Ausgabe, die den String sowohl vorwärts als auch rückwärts ausgibt und abschließend das Ergebnis mitteilt.

    Ich bin für alle Vorschläge sehr dankbar :winking_face:

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 29. Mai 2008 um 08:51
    • #2

    wie wärs wenn du mal selber überlegungen anstellst und wenn du fragen hast meldest dich wieder?

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • slicker
    3
    slicker
    Mitglied
    Punkte
    65
    Beiträge
    11
    • 29. Mai 2008 um 10:28
    • #3

    Hab leider keine mehr.Lösung sieht so aus:

    C
    #include <iostream>
    #include <iomanip>
    
    
    using namespace std;
    
    
    int main(){
    
    
    	string palindrom;
    	int ende;
    	int anfang = 0;
    	int backward;
    
    
    	cout<<"Bitte geben Sie das Palindrom ein"<<endl;
    	cout<<"Vorwärts: ";
    	cin>>palindrom;
    
    
    	ende=palindrom.length()-1;
    
    
    	backward=palindrom.length()-1;
    	bool isPalindrom=true;
    
    
    	for(int i=0; i<=ende; i++){
    
    
    		ende=ende--;
    		anfang=anfang++;
    
    
    		if(palindrom.at(ende)!=palindrom.at(anfang)){
    			cout<<"Wort ist kein Palindrom!"<<endl;
    			isPalindrom=false;
    			break;
    		}
    	}
    
    
    	if(isPalindrom)cout<<"Wort ist ein Palindrom"<<endl;
    	cout<<"Rückwärts: ";
    
    
    	for(backward; backward>=0; backward--){
    
    		cout<<palindrom.at(backward);
    	}
    
    
    	cout<<endl;
    
    
    }
    Alles anzeigen

    :verycool:

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 29. Mai 2008 um 10:43
    • #4

    ich bezweifle, dass dieses Programm das wort "Otto" als palindrom erkennt (Gross/kleinschreibung)

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • slicker
    3
    slicker
    Mitglied
    Punkte
    65
    Beiträge
    11
    • 29. Mai 2008 um 11:00
    • #5

    Doch tut es. Groß- und Kleinschreibung ist wurscht trotzdessen ich es unter Linux geschrieben habe.
    Problematisch wird es bei mehreren Wörtern, wegen den Leerzeichen.;)

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 29. Mai 2008 um 11:02
    • #6

    Ich glaube das zweite Beispiel geht auch nicht (Ein Neger...), wegen Whitespace.

    lg, Benjamin Ferrari, bookworm.at

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 29. Mai 2008 um 11:45
    • #7

    komischerweise wird das wort neger selbst als palindrom erkannt

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 29. Mai 2008 um 12:02
    • #8
    Zitat von Erklärbär

    komischerweise wird das wort neger selbst als palindrom erkannt

    oh, stimmt. Die indizes werden zu frueh incrementiert bzw. decrementiert. Das erklaehrt das vermutlich warum Otto geht :winking_face:

    lg, Benjamin Ferrari, bookworm.at

  • slicker
    3
    slicker
    Mitglied
    Punkte
    65
    Beiträge
    11
    • 29. Mai 2008 um 12:55
    • #9

    Oh ihr habt recht. Das ist ja merkwürdig.Dann hab ich noch ne frage.Hat einer von euch n Lösungsvorschlag? Was genau is da falsch?
    gruß slicker

  • slicker
    3
    slicker
    Mitglied
    Punkte
    65
    Beiträge
    11
    • 29. Mai 2008 um 12:59
    • #10

    So vielleicht!?

    C
    #include <iostream>
    #include <iomanip>
    
    
    using namespace std;
    
    
    int main(){
    
    
    	string palindrom;
    	int ende;
    	int anfang = 0;
    	int backward;
    
    
    	cout<<"Bitte geben Sie das Palindrom ein"<<endl;
    	cout<<"Vorwärts: ";
    	cin>>palindrom;
    
    
    	ende=palindrom.length()-1;
    
    
    	backward=palindrom.length()-1;
    	bool isPalindrom=true;
    
    
    	for(int i=0; i<=ende; i++){
    
    
    // 		ende=ende--;		hier raus
    // 		anfang=anfang++;	hier raus
    
    
    		if(palindrom.at(ende)!=palindrom.at(anfang)){
    			cout<<"Wort ist kein Palindrom!"<<endl;
    			isPalindrom=false;
    			break;
    		}
    		ende=ende--;		//hier rein
    		anfang=anfang++;	//hier rein
    	}
    
    
    	if(isPalindrom)cout<<"Wort ist ein Palindrom"<<endl;
    	cout<<"Rückwärts: ";
    
    
    	for(backward; backward>=0; backward--){
    
    		cout<<palindrom.at(backward);
    	}
    
    
    	cout<<endl;
    
    
    }
    Alles anzeigen


    Jup deswegen ging das auch mit Otto. Das geht jetzt nämlich nicht mehr. Das ist aber für meine Aufgabe net so schlimm.
    So gibt er wenigstens das richtige Ergebnis aus!

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 29. Mai 2008 um 13:08
    • #11

    schmeiss doch einfach whitespace aus dem string und ersetze klein in grossbuchstaben, bevor du vergleichst:

    Code
    cin>>palindrom;
    ...
    [B]palindrom = removeWhitespace( toLowerCase(palindrom) );[/B]
    ...

    und jetzt implementiere noch removeWhitespace(string) und toLowerCase(string) und du bist fertig.

    lg, Benjamin Ferrari, bookworm.at

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 29. Mai 2008 um 16:45
    • #12
    Zitat von a9bejo
    Code
    cin>>palindrom;


    Da wirds nicht viel Whitespace zum entfernen geben. Irgendwie kann man den komischen Stream dazu bringen, Spaces nicht zu fressen, oder man macht einfach:

    Code
    getline(cin, palindrom);

    *plantsch*

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 29. Mai 2008 um 17:31
    • #13
    Zitat von Plantschkuh!

    Irgendwie kann man den komischen Stream dazu bringen, Spaces nicht zu fressen


    Cool. Aber ich wuerde das vermutlich vermeiden, um das UI von der Logik zu trennen (nicht das das bei den paar Zeilen wirklich was bringen wuerde). Also wenn ich die Aufgabe fuer mich loesen wollte, dann haette ich vermutlich mit einer Funktion isPalindrom() angefangen und das ui dann spaeter gebaut.

    (Pseudocode)

    Code
    def isPalindrom(str): 
      str = removeWhiteSpace(lowerCase(str))
      return str == reverse(str)
    
    
    def main():
      input = readFromCLI()
      if(isPalindrom(input)):
        ...

    lg, Benjamin Ferrari, bookworm.at

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung