Rekursiver Algorithmus für das Vexierproblem

Programmiert von André Mössner, Kantonsschule Trogen
program Vexier;    { Das Hauptprogramm ist ganz unten ! }

const
 oben = TRUE;  {oben heisst, der Ring sitzt noch AUF dem Bügel bzw. ist noch aufgespiesst}
 unten = FALSE;  {unten heisst, der Ring ist frei, d.h. ausserhalb des Bügels}
var
 Ring: array[1..7] of BOOLEAN;  { Nummern von links nach rechts in der Abbildung }
 AnzahlBewegungen: integer;
 
procedure Print_AktuellenZustand;
 var
i: integer;
begin
 write(AnzahlBewegungen : 3, ' ');
 for
i := 1 to 7 do
  if
Ring[i] = oben then
   write('O ')
  else

   write('U ');
 writeln;  { Zeilenwechsel }
end;  { Print_AktuellenZustand }
 
procedure RingNachUnten (nr: integer);
 forward;
 
procedure RingNachOben (nr: integer);
 var
j: integer;
begin
   if
nr > 1 then
    begin
     if
Ring[nr - 1] = unten then
      RingNachOben(nr - 1);
     for
j := nr - 2 downto 1 do
      if
Ring[j] = oben then
       RingNachUnten(j)
    end
;  { if nr > 1 then }
   Ring[nr] := oben;
   AnzahlBewegungen := AnzahlBewegungen + 1;
   Print_AktuellenZustand;
end;  { RingNachOben }
 
procedure RingNachUnten (nr: integer);
 var
j: integer;
begin
   if
nr > 1 then
    begin
     if
Ring[nr - 1] = unten then
      RingNachOben(nr - 1);
     for
j := nr - 2 downto 1 do
      if
Ring[j] = oben then
       RingNachUnten(j)
    end
;  { if nr > 1 then }
   Ring[nr] := unten;
   AnzahlBewegungen := AnzahlBewegungen + 1;
   Print_AktuellenZustand;
end;  { RingNachUnten }
 
procedure AlleRingeVonDerStangeEntfernen;    { Algorithmus für den Lösungsprozess }
 var
i: integer;
begin
 for
i := 7 downto 1 do
  RingNachUnten(i)
end;  { AlleRingeVonDerStangeEntfernen }
 
procedure AnfangszustandHerstellen;
 var
i: integer;
begin
 for
i := 1 to 7 do
  Ring[i] := oben;
end;  { AnfangszustandHerstellen }
 
 
begin  { Hauptprogramm }
 AnfangszustandHerstellen;
 AnzahlBewegungen := 0;
 Print_AktuellenZustand;
 AlleRingeVonDerStangeEntfernen;      { Hier wird der Lösungs-Algorithmus aufgerufen }
end.  { Hauptprogramm }
Zum Vexierproblem
  
  

Zur Lösung
(= Output des neben-stehenden Programms)

  

  

  

  

  

  

  

Zum Vexierproblem
  
  

Zur Lösung
(= Output des neben-stehenden Programms)

  

  

  

  

  

  

  

Zum Output dieses Programms

  
Zurück zum Vexierproblem

Zurück zur Fachschaftsseite  Mathematik an der KST
Zurück zur HomePage der  Kantonsschule Trogen
Letzte Änderung dieser Seite: 03.08.2005