von Alexander E.
Palindromerkennung durch umdrehen und vergleichen:
Man prüft ob ein String ein Palindrom ist, indem man ihn von vorne und von hinten liest und die zwei Gelesenen vergleicht.
Beispielprogramm:
PROGRAM Palindromerkennung_durch_umdrehen;
(******************************************************************************)
{ Falls zum Beispiel bei einem Satzpalindrom dir Woerter }
{ mit Leerzeichen getrennt sind werden diese von folgender Funktion entfernt }
FUNCTION Blanks (zkette :String): String;
VAR
i : INTEGER; {Zaehlvariable fuer FOR-Schleife}
cleanwort : STRING; {zeichenkette ohne Blanks}
BEGIN
cleanwort:=''; {claenwort als leer initialisiert}
FOR i:=1 TO length(zkette) DO
IF zkette[i] <> ' ' THEN
cleanwort:=cleanwort+zkette[i];
Blanks:= cleanwort;
END;
(******************************************************************************)
{Folgende Funktion wandelt alle Eingegebenen Buchstaben in Großbuchstaben um, damit ein Vergleich moeglich ist }
FUNCTION Gross (zkette : String) :String;
VAR
i: INTEGER; {Zaehlvariable 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;
(******************************************************************************)
{Folgende Funktion dreht den gesammten String um, um ihn anschließend zu vergleichen}
FUNCTION umdrehen (zkette: STRING): String;
VAR
verstring : String; {veränderter String}
i : INTEGER; {Zählvariable für FOR-Schleife}
BEGIN
verstring:=''; {String initialisieren}
FOR i:=length (zkette) DOWNTO 1 DO
verstring := verstring + zkette[i];
umdrehen:=verstring
END;
(******************************************************************************)
{Folgende Funktion Vergleicht die eingegebene Zeichenkette mit der ungedrehten, um festzustellen ob dieser ein Palindrom ist oder nicht .Sie gibt TRUE oder FALSE aus weil sie vom Typ BOOLEAN ist}
FUNCTION Vergleich (umdrehen, zkette: STRING): BOOLEAN;
BEGIN
IF zkette = umdrehen THEN
Vergleich:=TRUE
ELSE
Vergleich:=FALSE
END;
(******************************************************************************)
{Beginn Hauptprogramm}
VAR
zkette: STRING; {Eingegebene Zeichenkette}
BEGIN
WriteLn (' Geben Sie die Zeichenkett ein, die Sie ueberpruefenwollen...');
{Abfrage STRING}
ReadLn(zkette); {Einlesen STRING}
{Aufruf der Funktionen}
IF Vergleich(umdrehen(gross(Blanks(zkette))),(gross(Blanks(zkette)))) THEN
WriteLn(zkette,' ist ein Palindrom.') {Ausgabe des Ergebnisses}
ELSE
WriteLn(zkette,' ist kein Palindrom.');
ReadLn;
END.
|