Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Strukturierte Programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "Strukturierte Programmierung"—  Präsentation transkript:

1 Strukturierte Programmierung
IFB 2002 Tobias Selinger

2 Strategie ? Welt Computer große Aufgabe großes Programm ? ?

3 Strategie: Teile und herrsche
Welt Computer große Aufgabe großes Programm Manager Hauptprogramm A A A A UP UP UP UP A A A UP UP UP Arbeitskräfte Unterprogramme

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

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

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 Strukturierung des Ablaufs Unterprogramme für Teilaufgaben der Daten eigene Datentypen für spezielle Daten

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 Vordefinierte Funktionen
Einige nützliche Funktionen sind bereits vordefiniert, z.B. round(x) liefert den gerundeten Wert sqr(x),sqrt(x) liefern x2 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 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 Turbo Pascal stellt u.a. die folgenden Units zur Verfügung:
Übersicht: Units Diese vordefinierten Prozeduren und Funktionen werden in Bibliotheken („Units“) zusammengefasst. Turbo Pascal stellt u.a. die folgenden Units zur Verfügung: system für Standard-aufgaben write sin random ... crt für spezielle Ein-/Ausgaben readkey delay textcolor ... graph für Grafik-aufgaben putPixel lineTo circle ... graph3 für Turtle-grafik showTurtle turnLeft forwd ...

12 Deklaration von crt und graph3
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 Definieren eigener Funktionen
Eine Funktion kann als Black-Box betrachtet werden: Eingabe- daten Rückgabe- wert Funktion

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

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

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

17 Gesamtprogramm KubikDemo
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. Definition der Funktion kubik(x) Funktionsaufruf mit Eingabewert 7 Funktionsaufruf mit Eingabe-variable Zahl d.h. innerhalb der Funktion wird für x der Wert von Zahl eingesetzt

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

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

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 Zuweisungsziel erlaubt ist)

21 program HarmonischeReihe; var nMax: integer;
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 Allgemeine Funktionsdefinition:
function <Fktname>(<Eingabedaten>):<Rückgabetyp>; <Deklaration der lokalen Variablen> begin <Anweisungen incl. Zuweisung an den Fktnamen> end; {<Fktname>}

23 Übungen zu Funktionen (ohne lokale Variable):
Schreiben Sie ein Programm Funk1 mit wenigstens dreien der folgenden Funktionen. Testen Sie Ihren Code! hyp(a,b) berechnet die Hypotenusenlänge zu a und b. potenz(x,y) berechnet xy (mittels exp und ln). Vzyl(radius,hoehe) berechnet das Zylindervolumen. max(a,b) berechnet das Maximum von zwei Zahlen. Augenzahl liefert die zufällige Augenzahl eines Würfels. teilbar(zahl,teiler) prüft, ob die Zahl durch den Teiler teilbar ist (Tipp: Nutze Modulo-Funktion a mod b ) Schaltjahr(n) prüft, ob das Jahr n ein Schaltjahr ist. 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)

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

25 Exkurs: Der Datentyp string
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));

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)); 1. 2. 3. 4. 5. 'H' 'u' 'n' 'd' '?' Zugriffe auf das 2. bzw. 1. Zeichen des Strings s liefert die Länge von s

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

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

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

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

31 Prozedur tausche (a,b) ... 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 ?

32 ... 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 ... 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 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 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,y r,phi procedure kartNachPolar (x,y:real; var r,phi:real);

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 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. dieses x ist nur innerhalb von tausche gültig, d.h. völlig unabhängig vom (gleichnamigen) globalen x ! 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)

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. Also: gleiche Variablennamen sind möglich, aber ziemlich irritierend ! 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!

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

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

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

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

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

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 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 letzte Nummer: CDs.Anzahl CDs.Element[3] type TListe = record Element: array[1..10] of string; Anzahl: integer; end; var CDs: TListe; Datenfeld für 10 CD-Namen Zähler für die aktuelle Anzahl

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

48 zeige(Liste) zeigt die gesamte Liste
Aufgabe: Schreiben Sie für das Pascal-Programm MusiMan folgende Prozeduren: zeige(Liste) zeigt die gesamte Liste fuegeHinzu(Liste,Element) fügt ein Element hinzu loesche(Liste) löscht die ganze Liste 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"

Ähnliche Präsentationen


Google-Anzeigen