Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Im allgemeinen ist es sehr schwierig, die Variante o<strong>der</strong> die Invariante einer Schleife zu finden. Der Beweis,<br />
daß ein bestimmter Ausdruck tatsächlich eine Variante o<strong>der</strong> Invariante <strong>der</strong> Schleife ist, ist dagegen oft sehr<br />
einfach, wenn man den Ausdruck erst einmal gefunden hat.<br />
Sicherlich ist <strong>der</strong>jenige, <strong>der</strong> sich einen Algorithmus ausgedacht hat, am ehesten dazu in <strong>der</strong> Lage, die Invariante<br />
und Variante einer Schleife anzugeben, denn die Schleife soll ja eine bestimmte Idee zur Lösung eines<br />
Problems wie<strong>der</strong>spiegeln. Es wäre daher sinnvoll, diese Idee während <strong>der</strong> Verfeinerung zu fixieren, indem man<br />
Invariante und Variante aufstellt, bevor die Schleife ausprogrammiert wird. Diese Vorgehensweise, bei <strong>der</strong><br />
man sich schon während <strong>der</strong> Implementierung Gedanken über die Korrektheitsgarantie macht, för<strong>der</strong>t eine<br />
fehlerfreie Entwicklung von Programmen und erleichtert den späteren Korrektheitsbeweis. Zudem erspart<br />
es dem Programmierer, die bei “konventioneller Vorgehensweise” unweigerlich auftretenden Fehler mühsam<br />
aufspüren und eliminieren zu müssen.<br />
Die Sprache Eiffel unterstützt eine <strong>der</strong>artig systematische Programmentwicklung, indem sie erlaubt, Variante<br />
und Invariante als Zusicherungen – gekennzeichnet durch Schlüsselworte variant und invariant – mit in das<br />
Programm aufzunehmen und somit die wichtigste Programm- und Beweisidee zu dokumentieren.<br />
Bei unserer Fakultätsberechnung zum Beispiel war die Grundüberlegung, die Variable n schrittweise von unten<br />
an arg anzunähern, bis n=arg ist, also arg-n zu Null wird. Dabei soll nach jedem Schritt die Größe Result<br />
den Wert n! enthalten, zum Schluß also den gesuchten Wert arg!. Formuliert man diese Idee als Variante und<br />
Invariante, so ergibt sich arg-n als Variante und n