1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Palindrom

  • slicker
  • 29. Mai 2008 um 08:24
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • slicker
    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 ;)

  • Erklärbär
    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?

  • slicker
    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
    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)

  • slicker
    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
    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.

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

    komischerweise wird das wort neger selbst als palindrom erkannt

  • a9bejo
    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 ;)

  • slicker
    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
    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
    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.

  • Plantschkuh!
    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);
  • a9bejo
    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)):
        ...
  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum