1 / 23

Basisinformationstechnologie HK-Medien

Basisinformationstechnologie HK-Medien. Teil 1, 11.Sitzung WS 02/03. Unterprogramme. Große Programmierprobleme sollten in kleinere Teilprobleme, und diese möglich-erweise wiederum in kleinere Teilprobleme, zerlegt werden.

joylyn
Download Presentation

Basisinformationstechnologie HK-Medien

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BasisinformationstechnologieHK-Medien Teil 1, 11.Sitzung WS 02/03 BIT – Schaßan – WS 02/03

  2. Unterprogramme • Große Programmierprobleme sollten in kleinere Teilprobleme, und diese möglich-erweise wiederum in kleinere Teilprobleme, zerlegt werden. • Das Programm löst das Problem, die Unterprogramme lösen die Teilprobleme. • Unterprogramme müssen im Hauptpro-gramm deklariert und von dort aus aufge-rufen werden. BIT – Schaßan – WS 02/03

  3. Beispiel Unterprogramm PROCEDURE Sterne( k : Integer) ; VAR i := Integer ; BEGINFOR i := 1 TO k DO write( 'x' ) END ; BIT – Schaßan – WS 02/03

  4. Beispiel Unterprogramm (2) PRORAM Dreieck; VAR Zeile : integer; PROCEDURE Sterne( k : Integer) ; VAR i : Integer ; BEGINFOR i := 1 TO k DO write( 'x' ) END ; BEGIN hier beginnt das Hauptprogramm FOR Zeile := 1 TO 5 DO BEGIN Sterne(Zeile) ; Writeln END END. BIT – Schaßan – WS 02/03

  5. Prozedurale Abstraktion • Die Vorgehensweise, Teilprobleme durch Prozeduren zu lösen, nennt man prozedurale Abstraktion. • Ein Prozeduraufruf ist eine Anweisung und darf überall dort stehen, wo syntaktisch eine Anweisung erlaubt ist. BIT – Schaßan – WS 02/03

  6. Funktionale Abstraktion • Wenn ein Unterprogramm nicht nur eine Anweisung ausführen, sondern einen Wert zurückgeben soll, muss der Aufruf anders formuliert und weitere Parameter angegeben werden. • Der Aufruf muss ein wohlgeformter Ausdruck sein und darf überall dort stehen, wo syntaktisch ein Ausdruck erlaubt ist. BIT – Schaßan – WS 02/03

  7. Beispiel Funktionale Abstraktion FUNCTION Schalt ( x : Integer ) : Boolean ; BEGINIF x MOD 4 = 0 THENIF x MOD 100 = 0 THENIF x MOD 400 = 0 THEN Schalt := TrueELSE Schalt := FalseELSE Schalt := TrueELSE Schalt := False; END ; BIT – Schaßan – WS 02/03

  8. Bestimmung des Rückgabewertes • In Pascal dient der Name der Funktion gleichzeitig als Variable zur Aufnahme des Rückgabewertes. Maßgeblich ist der Wert, der sich in der Variable befindet, wenn das Unterprogramm terminiert. • Der Programmierer muss Sorge tragen, dass der gewünschte Wert gespeichert wird. BIT – Schaßan – WS 02/03

  9. Abstraktionen bei C und Java • In C und Java müssen Rückgaben explizit vorgenommen werden. Dies geschieht mit Hilfe der Anweisung return. Das Unterprogramm wird sofort verlassen. • In diesen Sprachen gibt es keine klare Trennung zwischen Anweisungen und Ausdrücken, bzw. zwischen Funktionen und Prozeduren. BIT – Schaßan – WS 02/03

  10. Beipiel Abstraktion in C und Java int ggT (int x, int y) {while ( x != y ) {if ( x > y ) x = x – y ;else y = y – x ;}return x ; } BIT – Schaßan – WS 02/03

  11. Top-Down-Entwurf • In der Praxis der Programmierung kann man die prozedurale Abstraktion einsetzen, um ein Problem von Anfang an in immer kleiner werdende Teilprobleme zu zerlegen. • Jedes Teilproblem wird sofort als Prozedur (ohne Anweisungen) deklariert und ist damit "compilierbar". BIT – Schaßan – WS 02/03

  12. Beispiel Top-Down-Entwurf PROGRAM Spiel ; VAR Spieler : Integer ; Fertig : Boolean PROCEDURE ZeigeSpiel ;BEGINEND ; PROCEDURE MacheZug;BEGINEND ; FUNCTION SpielEnde : Boolean ;BEGIN SpielEnde := True ;END ; … BIT – Schaßan – WS 02/03

  13. Beispiel Top-Down-Entwurf (2) BEGINFertig := False ;Spieler := 1 ;REPEAT ZeigeSpiel ; MacheZug ;IF SpielEnde THEN Fertig := TrueELSE SpielerWechselUNTIL Fertig ;GratuliereDemSieger END. BIT – Schaßan – WS 02/03

  14. Schachtelung von Unterprogrammen • Jedes Unterprogramm kann seinen eigenen lokalen Deklarationsteil haben, wo Variablen oder weitere Unterprogramme deklariert werden. • Dort erklärte, lokale Variablen sind nach außen nicht sichtbar, alle Variablen des umfassenden (aus Sicht des Unterprogramms globalen) Programms sind sicht- und veränderbar. • In Pascal sind beliebige Schachtelungstiefen von Unterprogrammen möglich. BIT – Schaßan – WS 02/03

  15. Schachtelung von Unterprogrammen (2) BIT – Schaßan – WS 02/03

  16. Rekursive Funktionen • Funktionen können rekursiv sein, d.h. innerhalb der Funktion wird die gleiche Funktion wieder aufgerufen, sie ruft sich gleichsam selbst auf. • Die Funktion muss terminieren, d.h. die rekursiv aufgerufene Funktion muss irgendwann einen Wert erhalten, welcher in die anderen Funktionen eingesetzt werden kann. BIT – Schaßan – WS 02/03

  17. Beispiel Rekursive Funktion • Beispiel: Fakultätsfunktion fact(n) = n! • fact(0) = 1 • fact(n) = n * fact(n-1), für alle n > 0 FUNCTION fact(n : Integer) : Integer ; BEGINIF n = 0 THEN fact := 1ELSE fact := n*fact(n-1) END ; BIT – Schaßan – WS 02/03

  18. Beispiel Rekursive Funktion (2) IF n = 0 THEN fact := 1 ELSE fact := n*fact(n-1) BIT – Schaßan – WS 02/03

  19. Beispiel 2 Rekursive Funktion FUNCTION ggT(x,y : Integer) : Integer ; BEGINIF x = y THEN ggT := xELSE IF x > y THEN ggT := ggT(x-y,y)ELSE ggT := ggT(x,y-x) END ; BIT – Schaßan – WS 02/03

  20. Rekursive Prozeduren • Wie eine Funktion kann auch eine Prozedur rekursiv aufgerufen werden. • Beispiel: writeBin wandelt eine natürliche Zahl in eine Binärzahl um PROCEDURE writeBin (n : Integer)BEGINIF n < 2 THEN write(n)ELSEBEGIN writeBin(n div 2) ; write(n mod 2)ENDEND ; BIT – Schaßan – WS 02/03

  21. Backtracking • Es ist möglich, mit der Rekursion eine "Abfrage" zu verknüpfen: Möglichkeiten werden der Reihe nach getestet; wenn eine nicht erfolgreich war, wird der Versuch zurückgezogen und die nächste Möglichkeit getestet. • Diese Möglichkeit heißt Backtracking. BIT – Schaßan – WS 02/03

  22. Wechselseitige Rekursion • Wenn in der Definition f ein Aufruf der Funktion g vorkommt und umgekehrt, liegt eine wechselseitige Rekursion vor. FUNCTION Even( n : Integer ) : Boolean ; BEGINIF n = 0 THEN Even := TrueELSE Even := Odd(n-1) END ; FUNCTION Odd( n : Integer ) : Boolean ; BEGINIF n = 0 THEN Odd := FalseELSE Odd := Even(n-1) END ; BIT – Schaßan – WS 02/03

  23. Zuweisungsorientierte Programmierung • Die Anweisungen (statements) eines Programms sind folgendermaßen definiert: • <statement> ::= nop | abort | <sequential composition> | <assignment statement> | <conditional stmt> | <while stmt> | <block> | <procedure call> BIT – Schaßan – WS 02/03

More Related