Traditionell wird dies mit zwei geschachtelten Schleifen und jeweils vorzeitigem Aussprung programmiert; unsere Lösung finden wir klarer, und sie ist mindestens ebenso effizient.TYPE Zeilen = 1 .. zmax; Spalten = 1 .. smax; Daten = RECORD wert: atom; key: keytype; END; VAR a: ARRAY [Zeilen, Spalten] OF Daten; PROCEDURE suche(k: keytype; VAR found: BOOLEAN; VAR z: Zeilen; VAR s: Spalten); VAR Zustand: (suchen, ja, nein); BEGIN Zustand := suchen; z := 1; s := 1; WHILE Zustand = suchen DO IF a[z,s].key = k then Zustand := ja; ELSIF s < smax THEN s := s + 1; ELSIF z < zmax THEN z := z + 1; s := 1; ELSE Zustand := nein; END; END; found := Zustand = ja; END suche;
In manchen Sprachen kann man mit EXIT auch mehrere geschachtelte Schleifen verlassen; dann fällt der zweite Aussprung weg.PROCEDURE suche(k: keytype; VAR found: BOOLEAN; VAR z: Zeilen; VAR s: Spalten); BEGIN found := FALSE; FOR z := 1 TO zmax DO FOR s := 1 TO smax DO IF a[z,s].key = k THEN found := TRUE; EXIT; END; END; IF found THEN EXIT END; END; END suche;
Abgesehen vom Programmieren auf Maschinenebene, wo die höheren Konstrukte fehlen, ist uns kein Beispiel (mehr) bekannt, in denen explizite Sprünge von Vorteil wären.