Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Strukturierte Programmierung IFB 2002 Tobias Selinger.

Ähnliche Präsentationen


Präsentation zum Thema: "Strukturierte Programmierung IFB 2002 Tobias Selinger."—  Präsentation transkript:

1 Strukturierte Programmierung IFB 2002 Tobias Selinger

2 TS Strukturierte Programmierung 2 Strategie ? große Aufgabegroßes Programm Welt Computer ?

3 TS Strukturierte Programmierung 3 Strategie: Teile und herrsche große Aufgabegroßes Programm Manager A Hauptprogramm Welt Computer UP Unterprogramme AAAUP Arbeitskräfte AA A UP

4 TS Strukturierte Programmierung 4 Beispiel: Geometrie-Programm Geometrie-Programm zeichne Punkt (x,y) zeichne Strecke AB berechne Abstand (P,Q) berechne Schnitt (g,h)...

5 TS Strukturierte Programmierung 5 Beispiel: Medienmanagementsystem Medienmanagementsystem für CDs, MCs, MP3s,... zeige Medienliste füge Daten hinzu lösche Daten speichere Medienliste...

6 TS Strukturierte Programmierung 6 Vorteile von Unterprogrammen Spracherweiterung:Die UPe können aussagekräftig benannt werden. Baustein-Prinzip:UPe können aufeinander aufbauen. Ökonomie:UPe müssen nur einmal programmiert werden und sind dann beliebig oft benutzbar. Teamarbeit:UPe können unabhängig voneinander programmiert und getestet werden. Klarheit:HP ist kurz und verständlich, Details werden ausgeblendet.

7 TS Strukturierte Programmierung 7 Strukturierung des Ablaufs Unterprogramme für Teilaufgaben der Daten eigene Datentypen für spezielle Daten

8 TS Strukturierte Programmierung 8 Funktionen und Prozeduren In Pascal gibt es zwei Arten von Unterprogrammen: Funktionen:berechnen einen Ergebniswert und liefern diesen Wert zurück (an das HP). Beispiel: sin(x) Prozeduren:tun irgend etwas. Beispiel: clrscr

9 TS Strukturierte Programmierung 9 Vordefinierte Funktionen Einige nützliche Funktionen sind bereits vordefiniert, z.B. round(x) liefert den gerundeten Wert sqr(x),sqrt(x) liefern x 2 bzw. x exp(x),ln(x),sin(x),cos(x),arctan(x) random(x) liefert eine Zufallszahl odd(x) liefert true, falls x ungerade ist, ansonsten false length(text) liefert die Länge eines Textes, d.h. die Anzahl seiner Zeichen readkey wartet auf einen Tastendruck und liefert das entsprechende Zeichen

10 TS Strukturierte Programmierung 10 Vordefinierte Prozeduren Ebenso gibt es vordefinierte Prozeduren: write(text) gibt einen Text aus readln(x) setzt x auf den eingegebenen Wert clrscr löscht den Bildschirm inc(n),dec(n) erhöht bzw. erniedrigt n (um 1) delay(n) erzeugt eine Pause von n msec textcolor(farbe) ändert die Textfarbe str(zahl,text) erzeugt zu einer gegebenen Zahl den entsprechenden Text-String

11 TS Strukturierte Programmierung 11 Übersicht: Units Diese vordefinierten Prozeduren und Funktionen werden in Bibliotheken (Units) zusammengefasst. Turbo Pascal stellt u.a. die folgenden Units zur Verfügung: crt für spezielle Ein-/Ausgaben readkey delay textcolor... system für Standard- aufgaben write sin random... graph für Grafik- aufgaben putPixel lineTo circle... graph3 für Turtle- grafik showTurtle turnLeft forwd...

12 TS Strukturierte Programmierung 12 Deklarieren von Units Bei der Verwendung einer Unit muss sie im Programmkopf mittels uses deklariert werden. (Ausnahme: Die Unit system wird automatisch deklariert!) Beispiel: program demo; uses crt, graph3; var... begin... Deklaration von crt und graph3

13 TS Strukturierte Programmierung 13 Definieren eigener Funktionen Eine Funktion kann als Black-Box betrachtet werden: Funktion Eingabe- daten Rückgabe- wert

14 TS Strukturierte Programmierung 14 Eingabe- daten Beispiel: kubik(x) Eine Funktion kann als Black-Box betrachtet werden: kubik Rückgabe- wert x: realreal Beispiel: kubik(x)

15 TS Strukturierte Programmierung 15 Funktions-Kopf Eine Funktion kann als Black-Box betrachtet werden: kubik Eingabe- daten Rückgabe- wert x: realreal Beispiel: kubik(x) Definition: function kubik ( x : real ) : real; Funktions- name Eingabe- variable und Typ Rückgabe- typ

16 TS Strukturierte Programmierung 16 Funktions-Definition Eine Funktion kann als Black-Box betrachtet werden: kubik Eingabe- daten Rückgabe- wert x: realreal Beispiel: kubik(x) Definition: function kubik ( x : real ) : real; begin kubik := x*x*x; end; {kubik} Berechnung und Zuweisung des Funktionswertes

17 TS Strukturierte Programmierung 17 program KubikDemo; var Zahl: real; function kubik ( x : real ) : real; begin kubik := x*x*x; end; {kubik} begin {HP} writeln(kubik(7)); write('Ihre Zahl: '); readln(Zahl); writeln(' hoch 3 ist ',kubik(Zahl)); readln; end. Gesamtprogramm KubikDemo Definition der Funktion kubik(x) Funktionsaufruf mit Eingabe-variable Zahl Funktionsaufruf mit Eingabewert 7 d.h. innerhalb der Funktion wird für x der Wert von Zahl eingesetzt

18 TS Strukturierte Programmierung 18 Beispiel: Harmonische Reihe Ein weiteres Beispiel: Der Wert der harmonischen Reihe 1 + ½ + 1/3 + ¼ /n soll mit einer Funktion harmReihe berechnet werden! Black-Box-Modell ?

19 TS Strukturierte Programmierung 19 Beispiel: Harmonische Reihe Ein weiteres Beispiel: Der Wert der harmonischen Reihe 1 + ½ + 1/3 + ¼ /n soll mit einer Funktion harmReihe berechnet werden! Black-Box-Modell: harmReihe n:integer real

20 TS Strukturierte Programmierung 20 Funktion mit lokalen Variablen Definition : function harmReihe (n:integer): real; var i: integer; summe: real; begin summe := 0; for i:=1 to n do summe := summe + 1/i; harmReihe := summe; end; {harmReihe} Deklaration von lokalen Variablen (nur innerhalb dieser Funktion gültig) Hilfsvariable summe erforderlich (weil die Funktionsvariable harmReihe nur als Zuweisungs ziel erlaubt ist)

21 TS Strukturierte Programmierung 21 Gesamtprogramm program HarmonischeReihe; var nMax: integer; function harmReihe (n:integer): real;... end; {harmReihe} begin {HP} writeln(harmReihe(100)); readln(nMax); writeln(harmReihe(nMax)); readln; end. Deklaration von globalen Variablen Definition der Funktion incl. lokalen Variablen Funktionsaufruf mit Eingabewert 100 Funktionsaufruf mit Eingabevariable nMax

22 TS Strukturierte Programmierung 22 Funktionsdefinition function ( ): ; begin end; { } Allgemeine Funktionsdefinition:

23 TS Strukturierte Programmierung 23 Übungen zu Funktionen a)hyp(a,b)berechnet die Hypotenusenlänge zu a und b. b)potenz(x,y)berechnet x y (mittels exp und ln). c)Vzyl(radius,hoehe)berechnet das Zylindervolumen. d)max(a,b)berechnet das Maximum von zwei Zahlen. e)Augenzahlliefert die zufällige Augenzahl eines Würfels. f)teilbar(zahl,teiler)prüft, ob die Zahl durch den Teiler teilbar ist. (Tipp: Nutze Modulo-Funktion a mod b ) g)Schaltjahr(n)prüft, ob das Jahr n ein Schaltjahr ist. h)rot(zahl)prüft, ob die Zahl bei Roulette rot ist. (Tipp: ungerade von 1 bis 9, 19 bis 27, gerade von 12 bis 18, 30 bis 36) Übungen zu Funktionen (ohne lokale Variable): Schreiben Sie ein Programm Funk1 mit wenigstens dreien der folgenden Funktionen. Testen Sie Ihren Code!

24 TS Strukturierte Programmierung 24 Vertiefende Übungen Vertiefende Übungen (z.T. mit lokalen Variablen): Definieren und testen Sie folgende Funktionen: a) fak(n)berechnet die Fakultät von n. b) binko(n,k)berechnet den Binomialkoeffizient n über k. (Tipp: Verwenden Sie hierzu die Funktion fak) c) ggT(a,b)berechnet den größten gemeinsamen Teiler d) primzahl(n)prüft, ob n eine Primzahl ist. Informieren Sie Sich über den Datentyp string (siehe folgende Folie), dann programmieren Sie: d) anzahl_e(text)zählt, wie oft der Buchstabe e im Text auftritt. e) palindrom(wort)prüft, ob das Wort ein Palindrom ist. (Bsp.: ANNA, RADAR)

25 TS Strukturierte Programmierung 25 Wertebereich: Zeichenketten (Texte incl. Ziffern und Sonderzeichen) bis max. 255 Zeichen. Beispiel: var s: string; s := 'Hund?'; write(s); s[2] := 'a'; write(s); write(s[1]); write(length(s)); Exkurs: Der Datentyp string

26 TS Strukturierte Programmierung 26 Beispiel mit Erklärungen Wertebereich: Zeichenketten (Texte incl. Ziffern und Sonderzeichen) bis max. 255 Zeichen. Beispiel: var s: string; s := 'Hund?'; write(s); s[2] := 'a'; write(s); write(s[1]); write(length(s)); Zugriffe auf das 2. bzw. 1. Zeichen des Strings s 'H''u''n''d''?' liefert die Länge von s

27 TS Strukturierte Programmierung 27 Prozeduren im Black-Box-Modell Auch Prozeduren können als Black-Box dargestellt werden, z.B.: gotoXY(x,y) readln(a) inc(n) gotoXY x,y readln a inc n

28 TS Strukturierte Programmierung 28 Arten der Parameter-Übergabe Auch Prozeduren können als Black-Box dargestellt werden, z.B.: gotoXY(x,y) readln(a) inc(n) gotoXY x,y readln a inc n Eingabeparameter die Werte gehen nur in die Prozedur hinein call by value

29 TS Strukturierte Programmierung 29 Arten der Parameter-Übergabe (ff.) Auch Prozeduren können als Black-Box dargestellt werden, z.B.: gotoXY(x,y) readln(a) inc(n) gotoXY x,y readln a inc n Eingabeparameter die Werte gehen nur in die Prozedur hinein Ausgabeparameter die Variable a wird mit einem Wert gefüllt Übergabeparameter die Variable n wird übergeben und verändert call by value call by refe- rence

30 TS Strukturierte Programmierung 30 Prozedur-Köpfe gotoXY x,y readln a inc n Übersetzung in entsprechende Prozedurköpfe: procedure gotoXY (x,y: integer); procedure readln ( var a: real); procedure inc ( var n: integer); Referenz- bzw. Variablen-Parameter

31 TS Strukturierte Programmierung 31 Beachte:Im Gegensatz zu einer Funktion liefert eine Prozedur keinen Rückgabewert zurück, aber sie kann beliebig viele Variablen verändern! Beispiel 1:Die Prozedur tausche(a,b) soll den Wert zweier Variablen vertauschen! Black-Box-Modell ? Prozedurkopf ? Prozedur tausche (a,b)...

32 TS Strukturierte Programmierung mit Prozedurkopf... Beachte:Im Gegensatz zu einer Funktion liefert eine Prozedur keinen Rückgabewert zurück, aber sie kann beliebig viele Variablen verändern! Beispiel 1:Die Prozedur tausche(a,b) soll den Wert zweier Variablen vertauschen! Black-Box-Modell: Prozedurkopf: tausche a,b procedure tausche (var a,b: real) ; Ein vergessenes var ist ein sehr beliebter (und fast unsichtbarer) Fehler!

33 TS Strukturierte Programmierung und komplett ! Beachte:Im Gegensatz zu einer Funktion liefert eine Prozedur keinen Rückgabewert zurück, aber sie kann beliebig viele Variablen verändern! Beispiel 1:Die Prozedur tausche(a,b) soll den Wert zweier Variablen vertauschen! Black-Box-Modell: Prozedur: tausche a,b procedure tausche (var a,b: real) ; var x: real; begin x := a; a := b; b := x; end; {tausche}

34 TS Strukturierte Programmierung 34 Prozedurkopf kartNachPolar Beispiel 2:Die Prozedur kartNachPolar (x,y,r,phi) soll anhand der kartesischen Koordinaten (x, y) die entsprechenden Polarkoordinaten (r, phi) berechnen! Black-Box-Modell ? Prozedurkopf ? kartNachPolar procedure kartNachPolar

35 TS Strukturierte Programmierung 35 Prozedurkopf kartNachPolar Beispiel 2:Die Prozedur kartNachPolar (x,y,r,phi) soll anhand der kartesischen Koordinaten (x, y) die entsprechenden Polarkoordinaten (r, phi) berechnen! Black-Box-Modell: Prozedurkopf: Tipp zur Programmierung: Nutzen Sie die Pascal-Funktion arctan(x) ! kartNachPolar x,yr,phi procedure kartNachPolar (x,y:real; var r,phi:real) ;

36 TS Strukturierte Programmierung 36 Aufruf und Parameter-Übergabe: program procdemo; var x,y: real; procedure tausche (var a,b: real) ; var x: real; begin x := a; a := b; b := x; end; {tausche} begin {HP} readln(x,y); tausche(x,y); writeln(x,y); end.

37 TS Strukturierte Programmierung 37 Aktuelle und formale Variablen program procdemo; var x,y: real; procedure tausche (var a,b: real) ; var x: real; begin x := a; a := b; b := x; end; {tausche} begin {HP} readln(x,y); tausche(x,y); writeln(x,y); end. globale Variable Definition der Prozedur tausche(a,b) incl. lokale Variable x Aufruf von tausche(x,y), d.h. Übergabe der aktuellen Variablen (x,y) an die formalen Variablen (a,b) dieses x ist nur innerhalb von tausche gültig, d.h. völlig unabhängig vom (gleichnamigen) globalen x !

38 TS Strukturierte Programmierung 38 Noch ein Aufruf-Beispiel und Gegen-Beispiel program procdemo; var a,b: real; procedure tausche (var a,b: real) ;... (wie gehabt) end; {tausche} begin {HP} a := 1; b := 8; tausche(a,b) ; writeln(a,b); tausche(2,7); writeln(a,b); end. Aufruf von tausche(a,b), d.h. Übergabe der aktuellen Variablen (a,b) an die formalen Variablen (a,b) sinnloser Aufruf, da die Prozedur tausche hier Variablen verlangt! Also: gleiche Variablennamen sind möglich, aber ziemlich irritierend !

39 TS Strukturierte Programmierung 39 Exkurs: Der Datentyp record (Strukturierung der Daten) In der realen Welt gibt es oft Datenobjekte, die aus mehreren Einzeldaten zusammengesetzt sind. Beispiel: Schüler 1 Name:Fred Meier Klasse:8c Alter:14 Modellierung in Pascal ?

40 TS Strukturierte Programmierung 40 In der realen Welt gibt es oft Datenobjekte, die aus mehreren Einzeldaten zusammengesetzt sind. Beispiel: Schüler 1 Name:Fred Meier Klasse:8c Alter:14 type TSchueler = record Name: string; Klasse: string; Alter: integer; end; Definition eines eigenen Datentyps als Sammlung (Verbund) von Einzeldaten

41 TS Strukturierte Programmierung 41 In der realen Welt gibt es oft Datenobjekte, die aus mehreren Einzeldaten zusammengesetzt sind. Beispiel: Schüler 1 Name:Fred Meier Klasse:8c Alter:14 type TSchueler = record Name: string; Klasse: string; Alter: integer; end; Definition eines eigenen Datentyps als Sammlung (Verbund) von Einzeldaten var Schueler1: TSchueler; Deklaration einer entsprechenden Variable

42 TS Strukturierte Programmierung 42 Zugriff auf Records Zugriff auf die Einzeldaten (Komponenten) eines Records: Schueler1.Name := 'Fred Meier'; Schueler1.Alter := 14; inc(Schueler1.Alter); write(Schueler1.Alter); Variablen- name Punkt Komponenten- name Beachte: Ein Records kann immer nur komponentenweise bearbeitet werden. So ist z.B. write(Schueler1) nicht möglich!

43 TS Strukturierte Programmierung 43 Aufgabe: TBruch mit Prozeduren Aufgaben:Definieren Sie... a)einen Datentyp TBruch zur Modellierung von Bruchzahlen (d.h. Angabe von Zähler und Nenner)! b)eine Prozedur setze(bruch,z,n), die einen Bruch auf die angegebenen Werte setzt! c)eine Prozedur schreibe(bruch), die einen Bruch mit Bruchstrich ausgibt! d)eine Prozedur multipliziere(b1,b2,erg), die in der Variable erg das Produkt von b1 und b2 berechnet! e)Schreiben Sie ein Programm BruchDemo mit zwei Bruch- Variablen Bruch1 und Bruch2 zum Testen Ihrer Prozeduren! f)Öffnen Sie das Programm Bruchtrainer und ergänzen Sie die fehlenden Prozeduren!

44 TS Strukturierte Programmierung 44 Auftrag:Frau Karajan möchte eine Liste ihrer CDs per EDV verwalten. Beispiel: Aufgabe: MusikManager 1 Vivaldi: Vier Jahreszeiten 2 J.S.Bach: Goldberg-Variationen 3 Grieg: Peer Gynt Suite 4 Mozart: Eine kleine Nachtmusik

45 TS Strukturierte Programmierung 45 Aufgabe: MusikManager Auftrag:Frau Karajan möchte eine Liste ihrer CDs per EDV verwalten. Beispiel: Die CD-Liste kann durch folgenden Datentyp modelliert werden: 1 Vivaldi: Vier Jahreszeiten 2 J.S.Bach: Goldberg-Variationen 3 Grieg: Peer Gynt Suite 4 Mozart: Eine kleine Nachtmusik type TListe = record Element: array[1..10] of string; Anzahl: integer; end; var CDs: TListe;

46 TS Strukturierte Programmierung 46 Aufgabe: MusikManager Auftrag:Frau Karajan möchte eine Liste ihrer CDs per EDV verwalten. Beispiel: Die CD-Liste kann durch folgenden Datentyp modelliert werden: 1 Vivaldi: Vier Jahreszeiten 2 J.S.Bach: Goldberg-Variationen 3 Grieg: Peer Gynt Suite 4 Mozart: Eine kleine Nachtmusik type TListe = record Element: array[1..10] of string; Anzahl: integer; end; var CDs: TListe; CDs.Element[3] letzte Nummer: CDs.Anzahl Datenfeld für 10 CD-Namen Zähler für die aktuelle Anzahl

47 TS Strukturierte Programmierung 47 Aufgabe:Schreiben Sie für das Pascal-Programm MusiMan folgende Prozeduren: a)zeige(Liste) zeigt die gesamte Liste b)fuegeHinzu(Liste,Element) fügt ein Element hinzu c)loesche(Liste) löscht die ganze Liste d)loescheNr(Liste,Nummer) löscht das Element an der angegebenen Position

48 TS Strukturierte Programmierung 48 Aufgabe:Schreiben Sie für das Pascal-Programm MusiMan folgende Prozeduren: a)zeige(Liste) zeigt die gesamte Liste b)fuegeHinzu(Liste,Element) fügt ein Element hinzu c)loesche(Liste) löscht die ganze Liste d)loescheNr(Liste,Nummer) löscht das Element an der angegebenen Position Zur Anregung: procedure fuegeHinzu (var liste: TListe; eintrag: string); begin if liste.Anzahl < 10 then begin inc(liste.Anzahl); liste.Element[liste.Anzahl] := eintrag; end;


Herunterladen ppt "Strukturierte Programmierung IFB 2002 Tobias Selinger."

Ähnliche Präsentationen


Google-Anzeigen