blikk info infothek forum galerie sitemap

Palindromprüfung durch Spiegelung

anfang zurueck weiter ende nach oben

                                                                                                                            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.





nach oben