von Alexander E.
2.)Palindromprüfung durch Spiegelung:
Es gibt aber auch noch die Möglichkeit die einzelnen Zeichen eines Strings von forne und hinten gleichzeitig zu vergleichen:
Beispielprogramm:
PROGRAM Palindromerkennung_durch_Spiegelvergleich;
(**********************************************************************************)
{Folgende Funktion wandelt alle Buchstaben in Grossbuchstaben um,
damit auch eventuell groß geschriebene Zeichenketten erkannt werden }
FUNCTION Gross (zkette : String) :String;
VAR
i: INTEGER; {Zählvariable für FOR-Schleife}
BEGIN
FOR i:=1 TO length (zkette) DO
IF (zkette[i]>='a') AND (zkette[i] <= 'z') THEN
zkette[i]:= Chr(Ord(zkette[i]) - 32);
Gross:=zkette
END;
(**********************************************************************************)
{In folgender Funktin werden alle Leezeichen in 'zkette' werden entfernt, }
{ Falls zum Beispiel bei einem Satzpalindrom dir Wörter }
{ mit Leerzeichen getrennt sind }
FUNCTION Blanks (zkette :String): String;
VAR
i :INTEGER; {Zählvariable für die FOR-Schleife}
cleanwort : STRING; {String ohne Leerzeichen}
BEGIN
cleanwort:=''; {Variable initialisieren}
FOR i:=1 TO length(zkette) DO
IF zkette[i] <> ' ' THEN
cleanwort:=cleanwort+zkette[i];
Blanks:= cleanwort;
END;
(**********************************************************************************)
{Diese Funktion erkennt mittels Vergleichen der Buchstaben links und rechts des Zentrums}
{Die Funktion gibt TRUE oder FALSE aus, weil sie vom Typ BOOLEAN ist}
FUNCTION Spiegelvergleich (zkette : STRING) : BOOLEAN;
VAR
i :INTEGER {Zählvariable der FOR-Schleife}
laenge : INTEGER; {Laenge der Zeichenkette}
pal : BOOLEAN; {Palindrom}
BEGIN
{ Initialisieren }
laenge := Length(zkette);
pal := TRUE;
i := 1;
{Palindrom-Ueberpruefung }
WHILE (i<=laenge DIV 2) AND pal DO BEGIN
IF zkette[i] <> zkette[laenge+1-i] THEN
pal:=FALSE;
i:=i+1;
END;
Spiegelvergleich:=pal;
END;
(***********************************************************************************)
{Beginn des Hauptprogrammes}
VAR
zkette : STRING; {Eingegebene, zu ueberpruefende Zeichenkette}
BEGIN
WriteLn('Geben Sie die Zeichenkette ein, die Sie ueberpruefen wollen ');
Readln(zkette);
IF Spiegelvergleich(Gross(Blanks(zkette))) THEN {Aufruf der Funktionen}
Writeln('"',zkette,'" ist ein Palindrom.') {Ausgabe des Ergebnisses}
ELSE
Writeln('"',zkette,'" ist kein Palindrom.');
Readln;
END.
|