1 / 48

Strukturierte Programmierung

Strukturierte Programmierung. IFB 2002 Tobias Selinger. Strategie ?. Welt Computer. große Aufgabe. großes Programm. ? ?. Arbeitskräfte. Unterprogramme. Strategie: Teile und herrsche. Welt Computer. große Aufgabe. großes Programm. Manager. Hauptprogramm. A. A. A. A. UP. UP.

darice
Download Presentation

Strukturierte Programmierung

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. Strukturierte Programmierung IFB 2002 Tobias Selinger

  2. Strategie ? WeltComputer große Aufgabe großes Programm ??

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

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

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

  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. system für Standard-aufgaben writesinrandom... crt für spezielle Ein-/Ausgaben readkeydelaytextcolor... graph für Grafik-aufgaben putPixellineTocircle... graph3 für Turtle-grafik showTurtleturnLeftforwd... Übersicht: Units • Diese vordefinierten Prozeduren und Funktionenwerden in Bibliotheken („Units“) zusammengefasst. • Turbo Pascal stellt u.a. die folgenden Units zur Verfügung:

  12. Deklarieren von Units • Bei der Verwendung einer Unit muss sieim 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. Beispiel: kubik(x) • Eine Funktion kann als Black-Box betrachtet werden: Eingabe- daten Rückgabe- wert Beispiel: kubik(x) x: real real kubik

  15. 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; Eingabe-variable und Typ Funktions-name 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 undZuweisung 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 Eingabewert7 Funktionsaufruf mit Eingabe-variableZahl 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 + ½ + 1/3 + ¼ + ... + 1/nsoll mit einer Funktion harmReihe berechnet werden! • Black-Box-Modell ?

  19. Beispiel: Harmonische Reihe • Ein weiteres Beispiel: • Der Wert der harmonischen Reihe 1 + ½ + 1/3 + ¼ + ... + 1/nsoll 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 vonlokalen Variablen(nur innerhalb dieser Funktion gültig) Hilfsvariable summe erforderlich(weil die Funktionsvariable harmReihe nur als Zuweisungsziel erlaubt ist)

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

  22. Funktionsdefinition • Allgemeine Funktionsdefinition: function<Fktname>(<Eingabedaten>):<Rückgabetyp>; <Deklaration der lokalen Variablen> begin <Anweisungen incl. Zuweisung an den Fktnamen> end;{<Fktname>}

  23. Übungen zu Funktionen Ü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 • 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)); 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 Eingabeparameterdie 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 Eingabeparameterdie Werte gehen nur in die Prozedur hinein call by value gotoXY a Ausgabeparameter die Variable awird mit einem Wert „gefüllt“ readln call by refe- rence n Übergabeparameterdie Variablenwird übergeben und verändert inc

  30. 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 vieleVariablen verändern! • Beispiel 1: Die Prozedur tausche(a,b) soll den Wert zweier Variablen vertauschen! • Black-Box-Modell ? • Prozedurkopf ?

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

  33. a,b tausche ... und komplett ! • Beachte: Im Gegensatz zu einer Funktion liefert eine Prozedur keinen „Rückgabewert“ zurück, aber sie kann beliebig vieleVariablen verändern! • Beispiel 1: Die Prozedur tausche(a,b) soll den Wert zweier Variablen vertauschen! • Black-Box-Modell: • Prozedur: 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. x,y r,phi kartNachPolar 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) ! 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 tauschegültig, d.h. völlig unabhängig vom (gleichnamigen) globalen x ! globale Variable Definition der Prozedurtausche(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. Schüler 1 Name: Fred Meier Klasse: 8c Alter: 14 Exkurs: Der Datentyp record (Strukturierung der Daten) • In der realen Welt gibt es oft Datenobjekte, dieaus mehreren Einzeldaten zusammengesetzt sind. • Beispiel: Modellierung in Pascal ?

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

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

  42. 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 Bruchtrainerund ergänzen Sie die fehlenden Prozeduren!

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

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

  46. 1 Vivaldi: Vier Jahreszeiten 2 J.S.Bach: Goldberg-Variationen 3 Grieg: Peer Gynt Suite 4 Mozart: Eine kleine Nachtmusik Aufgabe: MusikManager • Auftrag: Frau Karajan möchte eine Liste ihrer CDs per EDV verwalten. Beispiel: • Die CD-Liste kann durch folgenden Datentyp modelliert werden: 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 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. 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;

More Related