5. Unterprogrammtechnik/Module



Ähnliche Dokumente
Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Einführung in die Programmierung

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Modellierung und Programmierung 1

1 Vom Problem zum Programm

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Deklarationen in C. Prof. Dr. Margarita Esponda

Erwin Grüner

Die Programmiersprache C

Objektorientierte Programmierung

Arbeiten mit UMLed und Delphi

Eine Einführung in C-Funktionen

S7-Hantierungsbausteine für R355, R6000 und R2700

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Anleitung über den Umgang mit Schildern

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Informationsblatt Induktionsbeweis

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Einführung in die C++ Programmierung für Ingenieure

Die Programmiersprache C99: Zusammenfassung

Dokumentenverwaltung im Internet

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Java Kurs für Anfänger Einheit 5 Methoden

Zählen von Objekten einer bestimmten Klasse

affilinet_ Flash-Spezifikationen

Lehrer: Einschreibemethoden

Grundlagen der Programmiersprache C++

Primzahlen und RSA-Verschlüsselung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Zwischenablage (Bilder, Texte,...)

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Monatstreff für Menschen ab 50 Temporäre Dateien / Browserverlauf löschen / Cookies

Programmierkurs Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Bedienungsanleitung GYMplus

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Verschlüsseln von Dateien mit Hilfe einer TCOS-Smartcard per Truecrypt. T-Systems International GmbH. Version 1.0 Stand

7DVWH.HOOQHU. Kassensystem SANYO (X&D6RIWKapitel 42

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

Binärbäume als weiteres Beispiel für abstrakte Datentypen in PVS mit in Knoten gespeicherten Werten vom Typ T:

2. Programmierung in C

Kundenspezifische Preise im Shop WyRu Online-Shop

Grundlagen. Kapitel 1

Enigmail Konfiguration

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Abwesenheitsnotiz im Exchange Server 2010

Wie halte ich Ordnung auf meiner Festplatte?

Unterprogramme, Pointer und die Übergabe von Arrays

4 Aufzählungen und Listen erstellen

Prodanet ProductManager WinEdition

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Mit dem Tool Stundenverwaltung von Hanno Kniebel erhalten Sie die Möglichkeit zur effizienten Verwaltung von Montagezeiten Ihrer Mitarbeiter.

Softwarelösungen: Versuch 4

3D-Konstruktion Brückenpfeiler für WinTrack (H0)

Nutzung von GiS BasePac 8 im Netzwerk

Statuten in leichter Sprache

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

GEONET Anleitung für Web-Autoren

Professionelle Seminare im Bereich MS-Office

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Erstellen der Barcode-Etiketten:

Dokumentation IBIS Monitor

Inventur. Bemerkung. / Inventur

Installation OMNIKEY 3121 USB

Die 7 wichtigsten Erfolgsfaktoren für die Einführung von Zielvereinbarungen und deren Ergebnissicherung

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Handbuch ECDL 2003 Basic Modul 5: Datenbank Access starten und neue Datenbank anlegen

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Zeichen bei Zahlen entschlüsseln

1 Mathematische Grundlagen

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Drucken aus der Anwendung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Objektbasierte Entwicklung

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

Mozilla Firefox - Zeit für den Wechsel

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Stammdatenanlage über den Einrichtungsassistenten

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Anzeige von eingescannten Rechnungen

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

<script type="text/javascript"> <! <%= page(page.searchsuggestionsscript) %> // > </script>

Produktschulung WinDachJournal

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Hilfe Bearbeitung von Rahmenleistungsverzeichnissen

Rundung und Casting von Zahlen

Transkript:

5. Unterprogrammtechnik/Module Unterprogramm/Modul: separate Programmeinheit, mit Anweisungen, die eine bestimmte Aufgabe erfüllen bekommt i.a. Argumente (Werte, Informationen) vom aufrufenden Programm gibt i.a. ein Ergebnis an das aufrufende Programm zurück Bezeichnung und Funktionalität kann je nach Programmiersprache variieren: Bezeichnung: in C: function in FORTRAN: function (mit Rückgabewert), subroutine (ohne Rückgabewert) in PASCAL: function (mit Rückgabewert), procedure (ohne Rückgabewert) Funktionen in Funktionen definieren (Verschachtelung von Unterprogrammen)? in C in FORTRAN nein, alle Funktionen existieren hierarchisch auf der gleichen Ebene nein, alle Funktionen existieren hierarchisch auf der gleichen Ebene in PASCAL ja, Unterprogramme von Unterprogrammen sind erlaubt Hauptprogramm: in C in FORTRAN ebenfalls eine Funktion, trägt immer den Namen main kann nicht von anderen Funktionen aufgerufen werden hat den Rahmen PROGRAM programmname... END PROGRAM in PASCAL hat den Rahmen program programmname... end. Bibliotheksfunktionen: vordefinierte Standardfunktionen in C in Funktionsdateien mit einer zugehörigen Headerdatei name.h z.b.: Standardmathebibliothek Header: math.h Standard I/O Bibliothek Header: stdio.h in FORTRAN in Modulen in PASCAL in units Sammlungen bereits vorhandener Funktionen zu bestimmten Themen, die frei oder mit Bezahlung erhältlich sind (z.b. im Netz) in FORTRAN z.b.: lapack, blas, daspk,... in C z.b.: cblas, cvode,...

5.1 Formaler syntaktischer Aufbau einer Funktion Definition einer Funktion (Syntax in C) Rückgabetyp Funktionsname(Liste von Argumenten) { Funktionskopf Deklarationen lokaler Variabler Anweisungen return Ergebniswert Funktionsblock besteht aus: Funktionskopf Schnittstellen zum aufrufenden Programm d.h. Struktur der Funktion (Name, Argumente, Ergebnis) Funktionsblock/rumpf Algorithmus, den die Funktion umfaßt, d.h. eigentliche Umsetzung der Aufgabe der Funktion Dateneingabe (Argumente) Funktion Datenrückgabe (Ergebnis) Komponenten: Funktionsname... Bezeichung der Funktion, unter der sie aufgerufen wird Argumentliste... Liste der Eingabeparameter mit ihren Datentypen, die vom aufrufenden Programm an die Funktion gegeben werden für die dort aufgelisteten Variablen wird mit Aufruf der Funktion Speicherplatz bereitgestellt lokale Variable... sind nur im Funktionsblock gültig, ab ihrer Deklaration reservieren sie Speicher bis zum Abschluß der Funktion dienen der Zwischenspeicherung von Werten während der Funktionsausführung return... Anweisung ist dann erforderlich, wenn ein Ergebnis zurückgegeben wird Rückgabetyp... Datentyp des Ergebnisses (Funktionswertes), das an das aufrufende Programm zurückgegeben wird bei Funktionen ohne Rückgabe: void Typ und return; (ohne Wert) ist optional Erinnerung: in anderen Programmiersprachen tragen solche Funktionen auch einen anderen Namen (subroutine, procedure)

Beispiel: Funktion zur Berechnung des Mittelwertes dreier Zahlen Aufruf im Programm/in einer anderen Funktion: in Zuweisung: m = mittelwert(x1, x2, x3); in einem Ausdruck: y = sin(3.5*mittelwert(x1, x2, x3)); printf(''der Mittelwert ist %7.3f. \n'',mittelwert(x1,x2,x3)); Wo wird die Funktion definiert? Alle im Programm benutzten Funktionen müssen dem Compiler vor Beginn der main Funktion (Hauptprogramm) bekannt sein. Funktionen, die durch andere Funktionen aufgerufen werden, müssen vor letzteren dem Compiler bekannt sein. Varianten zum Bekanntmachen : 1. Definition der Funktion innerhalb des Programms a) vor dem Hauptprogramm Definition der Funktion main Funktion b) nach dem Hauptprogramm und Deklaration vor dem Hauptprogramm Deklaration der Funktion main Funktion Definition der Funktion Deklaration einer Funktion: Rückgabetyp Funktionsname(Liste der Argumenttypen); Bekannmachen des Namens zusammen mit allen Schnittstellen zum aufrufenden Programm, d.h. mit den Argumenttypen und dem Rückgabetyp = Prototyp der Funktion

Beispiel zu 1. : Mittelwert dreier Zahlen, nun im Programm eingebunden 2. Definition der Funktion in anderer Quelldatei und Deklaration im Programm Quelldatei func.c Hauptprogramm Definition der Funktion Headerdatei func.h Deklaration der Funktion (beide in demselben Verzeichnis) Deklaration der Funktion durch Einbinden der Headerdatei mit #include ''func.h'' main Funktion Deklaration(Bekanntmachen) der Funktion im Hauptprogramm vor der main Funktion durch Einbinden (#include) der zugehörigen Headerdatei Headerdatei (header = Funktionskopf) beinhaltet nur eine Liste der Funktionen, die in der Funktionsdatei definiert sind die Präprozessor Direktive #include ''func.h'' fügt den Text, so wie er in der Headerdatei steht, direkt ins Programm ein d.h. durch Verwenden der Headerdatei muß man nicht im eigenen Programm alle Funktionsdeklarationen wieder selbst schreiben Standardbibliotheks Header werden durch #include < name.h > eingebunden. Das sagt dem Präprozessor, daß diese im Standardbibliotheksverzeichnis der Entwicklungsumgebung zu finden sind steht die Funktionsquelldatei in einem anderen Verzeichnis als das Hauptprogramm muß in der #include Direktive der volle Pfad zu dem Verzeichnis angegeben werden in PellesC: Funktionsdateien und Hauptprogramm zu einem Projekt zusammenfassen Arbeit des Linkers ist dann im Hintergrund automatisch aktiv Verwendung von Headerdateien ist C typisch, in anderen Programmiersprachen nicht üblich

sinnvoll, wenn die Funktionen für mehrere Programme genutzt werden sollen (Module) das Problem ein größeres Programmpaket erfordert, das sonst nicht mehr übersichtlich ist (Zerlegung eines Programms in Teilprogramme) häufig werden solche Funktionen in Bibliotheken zusammengefaßt, die dann nur einmal compiliert werden müssen und bei Bedarf nur durch ihre Deklarationen dem Programm bekanntgemacht (nur Funktionsköpfe! Nur Schnittstellen der Funktion nach außen) und durch den Linker in Maschinencode an das übersetzte Programm angebunden werden z.b. Standardfunktionen in C, wie printf, scanf dazu Einbinden der Headerdatei stdio.h der Standard I/O Bibliothek von C 5.2 Argumentübergabe Wenn eine Funktion mit einer nichtleeren Argumentliste durch ein Programm aufgerufen wird, bedeutet das einen Transfer der Daten aus den aktuellen Variablen der Liste in die formalen Variablen des Funktionskopfes. Was geschieht genau beim Aufruf? Beispiel: Programmabarbeitung springt zum Maschinencode der Funktion für die formalen Parameter (Argumente) der Funktion wird Speicherplatz reserviert die Werte (der aktuellen Variablen), die beim Aufruf der Funktion in der Liste stehen, werden an die formalen Parameter in der Reihenfolge der Liste übergeben, d.h. an die entsprechenden Speicherplätze geschrieben die Funktion arbeitet nur auf den formalen nicht auf den aktuellen Parametern //Funktionsdeklaration double func(int i, double x) { double y; y= i*x; return y; AS 2 1 int main { int j=1; double z = 0.2; z = func(j,z); return 0;

Selbst, wenn die selben Argumentnamen beim Aufruf der Funktion verwendet werden wie in der Definition der Funktion, sind aktuelle und formale Variablen voneinander verschieden! Für die Zeit des Funktionsaufrufs werden über die Variablennamen stets die nächsten (die innersten ) Variablen angesprochen und die formalen Parameter (Variablen) des Funktionskopfes sind der Funktion näher als die im Programm deklarierten aktuellen Variablen der Argumente. Unterschiedliche Arten des Datentransfers: Argumentübergabe call by value (Wertübergabe) Argumentübergabe call by reference (Speicheradressübergabe) in vielen Programmiersprachen gibt es diese zwei Arten (z.b. C, FORTAN, PASCAL) in anderen nicht (z.b. LOGO, MATLAB nur Wertübergaben) (A) Argumentübergabe call by value (Wertübergabe) Es wird bei Aufruf der Funktion von der als Argument auftretenden Variablen nur der gespeicherte Wert an den entsprechenden formalen Parameter der Funktion übergeben d.h. das was auf dem Speicherplatz der aktuellen Variablen steht, wird in den mit Funktionsaufruf reservierten Speicherplatz der entsprechenden formalen Variablen geschrieben, s. obiges Beispiel) Funktion kann nur lesend auf die aktuellen Variablen zugreifen aber nicht schreibend. (B) Argumentübergabe call by reference (Speicheradressübergabe) Es wird bei Aufruf der Funktion als Argument die Speicheradresse einer Variablen im Arbeitsspeicher an den entsprechenden formalen Parameter der Funktion übergeben da die Funktion damit direkt auf den Speicherplatz einer aktuellen Variablen des aufrufenden Programms zugreifen kann, kann sie dort sowohl den aktuellen Wert herauslesen als auch einen neuen Wert hineinschreiben Funktion kann lesend und schreibend auf die aktuellen Variablen zugreifen. call by reference : Referenzparameter = Speicheradresse einer Variablen

Wie erhält man die Speicheradresse? In C: Adressoperator(Referenzierungsoperator) & Beispiel: int i; Variable i wird deklariert, d.h. 4 Byte Speicherplatz werden reserviert printf(''speicheradresse von i: %d'',&i); gibt die reservierte Speicheradresse (erstes Byte) auf dem Bildschirm aus i 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 Bildschirmausgabe: Speicheradresse von i: 2105 Objekte, die die Speicheradresse von Variablen speichern, heißen Zeigervariable (Pointer) Deklaration solcher Zeigervariablen: Typ * zeigervariablenname; Typ ist entscheidend, da damit auch die Information gegeben ist, wieviel Byte die zu der gespeicherten Anfangsadresse gehörige Variable insgesamt einnimmt Beispiel: int * p ; p zeigt auf eine Variable vom Typ int, d.h. p reserviert Speicherplatz für eine Speicheradresse einer int Variablen int i = 1; Variable i reserviert Speicherplatz von 4 Byte und dieser wird mit dem Wert '1' initialisiert, d.h. dieser Wert wird dort als erster Wert gespeichert p = &i; auf den Speicherplatz von p wird die Anfangsspeicheradresse von i geschrieben p i 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113

Wechselspiel: Adressoperator &: Variable Speicheradresse (Referenzierungsoperator) Dereferenzierungsoperator *: Speicheradresse Variable (Zugriff auf gespeicherten Wert) Beispiel: Fortsetzung int j; j=*p; in den Speicherplatz, den j reserviert, wird der Wert eingeschrieben, der an der Speicheradresse steht, die p speichert ( auf die p zeigt ), hier speichert p die Adresse von i j bekommt den Wert '1' Standardbeispiel: Zur Illustration der Unterschiede zwischen den zwei Argumentübergaben Tausch zweier Variablenwerte. Häufig ist die Argumentliste von Funktionen eine Mischform, d.h. umfaßt sowohl Werte als auch Referenzparameter

5.3 Rekursive Funktionen Aus der Mathematik ist der Begriff der "Rekursionsformel" bekannt. Das sind Funktionsdarstellungen, die nicht in geschlossener Formel geschrieben sind, sondern in der Form: x k+1 = f(x k ) mit Startwert x 0. Beispiele: 1. Fakultät: n! = n*(n 1)! {für n > 0, Rekursionsstart: 0! = 1 2. Fibonacci Zahlen (Fibonacci 1202: Kaninchenproblem) F n = F n 1 + F n 2 {für n > 1, Rekursionsstart: F 0 = 1, F 1 = 1 Zusammenhang zum goldenen Schnitt? 3. Kontostand Ersteinzahlung von K 0 = 1000 EUR jährliche Einzahlung E = 150 EUR jährliche Zinsen p = 2 % iterativ rekursiv K 1 = K 0 (1+p/100) + E K n = K n 1 (1+p/100) + E = 1000 1.02 + 150 = 1170 K n 1 =[K n 2 (1+p/100) + E](1+p/100) + E K 2 = K 1 (1+p/100) + E...... bis hinunter zu K 0 und das ist bekannt K n = K n 1 (1+p/100) + E Rekursive Berechnung: Berechnung des Wertes durch Aufruf der Funktion für ein Vorgängerargument, d.h. Selbstaufruf der Funktion Die Realisierung der Algorithmen mittels rekursiver C Funktionen kann dann so lauten: zu 1. Fakultätsberechnung

Prinzipiell läßt sich jeder rekursive Algorithmus auch iterativ formulieren. Vorteil der rekursiven Variante: kompaktere Beschreibung, damit leichter zu verstehen Nachteil: sehr oft erheblich längere Laufzeit Ein Vergleich der Varianten der Fibonacci Zahl Berechnung zeigt dies deutlich! n=40 Zeitaufwand ~ 10 s n=50 Zeitaufwand ~ 7 h berühmte Anwendung: Turm von Hanoi... Der Turm steht zu Beginn auf Platz 1 und man soll ihn...... auf Platz 2 neu aufbauen. Zu beachtende Regeln: (I) Es darf in jedem Zug nur eine Scheibe umgelegt werden. (II) Es darf keine größere auf eine kleinere Scheibe gelegt werden.... Historie: Vermutlich wurde das Spiel 1883 vom französischen Mathematiker Edouard Lucas erfunden. Er dachte sich dazu die Geschichte aus, dass indische Mönche im großen Tempel zu Benares, im Mittelpunkt der Welt, einen Turm aus 64 goldenen Scheiben versetzen müssten, und wenn ihnen das gelungen sei, wäre das Ende der Welt gekommen. Verallgemeinerung: Der Turm aus n Scheiben bei drei Stäben. Pseudocode: funktion bewege (Zahl i, Stab a, Stab b, Stab c) {falls (i > 0) { bewege(i 1, a, c, b); verschiebe oberste Scheibe von a nach b; bewege(i 1, c, b, a);

6. Gültigkeitsbereich von Variablen Abschnitt im Programm, in dem die Variable dem Programm bekannt ist, d.h. Speicherplatz unter diesem Namen reserviert ist. Beginn des Gültigkeitsbereiches stets bei der Deklaration der Variablen Gültigkeitsbereiche: 1. globale Variable: für ein ganzes Programm gültig, Deklaration außerhalb aller auftretenden Funktionen (auch der main Funktion) ab ihrer Deklaration bis zum Ende des Programmes gültig 2. formale Parameter: als Funktionsargument in einer Funktionsdefinition ab ihrer Deklaration bis zum Ende der Funktion gültig (d.h. nur für die Dauer des Funktionsaufrufs bekannt) 3. lokale Variable: innerhalb eines Blocks, z.b. eines Funktionsblocks { Deklaration der Variablen Anweisungen ab ihrer Deklaration bis zum Ende des Blocks gültig Wichtige Regel: bei Mehrfachnutzung eines Variablennamens wird stets der innerste Vertreter (der lokalste, der sichtbarste ) angesprochen. Beispiel