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



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

Einführung in die Programmierung

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

Informatik Repetitorium SS Volker Jaedicke

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

1 Vom Problem zum Programm

Angewandte Mathematik und Programmierung

Java Kurs für Anfänger Einheit 5 Methoden

Vorkurs C++ Programmierung

Modellierung und Programmierung 1

Projektverwaltung Problem Lösung: Modulare Programmierung

Propädeutikum. Dipl.-Inf. Frank Güttler

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

Einführung in die C-Programmierung

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

Deklarationen in C. Prof. Dr. Margarita Esponda

Klausur in Programmieren

Einführung in die Programmierung (EPR)

2. Semester, 2. Prüfung, Lösung

Einführung in die Programmierung

Eine Einführung in C-Funktionen

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Programmierkurs Java

Die Programmiersprache C99: Zusammenfassung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Objektorientierte Programmierung

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/

Übersicht Programmablaufsteuerung

1. Übung zu "Numerik partieller Differentialgleichungen"

Einführung in die Java- Programmierung

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

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Erwin Grüner

Kurze Einführung in die Programmiersprache C++ und in Root

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Objektbasierte Entwicklung

Übungen zu C++ Kapitel 1

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Klausur in Programmieren

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

Fakultät Angewandte Informatik Lehrprofessur für Informatik

GEONET Anleitung für Web-Autoren

Klausur in Programmieren

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

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

Barcodedatei importieren

Informatik Grundlagen, WS04, Seminar 13

Zusammengesetzte Datentypen -- Arrays und Strukturen

Hochschule München, FK 03 FA SS Ingenieurinformatik

Grundlagen. Kapitel 1

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Einführung in die Programmierung

Zählen von Objekten einer bestimmten Klasse

S7-Hantierungsbausteine für R355, R6000 und R2700

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

Übung 9 - Lösungsvorschlag

Einführung in die Programmierung

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Programmierung in C. Grundlagen. Stefan Kallerhoff

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Kontrollstrukturen und Funktionen in C

Leichtathletik Datenverarbeitung Handbuch für Ausrichter

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

Planung für Organisation und Technik

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

Inhalt. 4.7 Funktionen

Aufgaben zur C-Programmierung für die Praktikumsperiode des 1.Semesters

5. Tutorium zu Programmieren

Einführung in die Java- Programmierung

Wiederholung und Vertiefung. Programmieren in C. Pointer und so... thoto. /dev/tal e.v. 6. April 2013 (Version vom 11. April 2013) Programmieren in C

SCHULVERSUCH INFORMATIK IN BADEN-WÜRTTEMBERG. Gerhard Liebrich Peter-Petersen-Gymnasium Mannheim

Graphic Coding. Klausur. 9. Februar Kurs A

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

1 Mathematische Grundlagen

Zusammenfassung des Handzettels für Programmieren in C

Funktionale Programmierung mit Haskell

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Algorithmen und Datenstrukturen

Benutzung der LS-Miniscanner

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

1 topologisches Sortieren

25 kann ohne Rest durch 5 geteilt werden! ist wahr

Rundung und Casting von Zahlen

Programmentwicklung mit C++ (unter Unix/Linux)

2. Programmierung in C

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

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

Grundlagen der Informatik - 6. Praktikum

multisign Signatur-Prüfwerkzeug Handbuch Security Networks AG Stand:

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

Delegatesund Ereignisse

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Transkript:

Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt Dekomposition komplexer Probleme Im Folgenden: Definition von Funktionen Deklaration vs. Definition Parameterübergabe Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Rekursion Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 68

Funktionen: Definition Syntax zur Definition einer Methode [<Speicherklasse>] <Typ> <Funktionsname>(<Parameterliste>) { <Anweisungen> } Wichtigste Speicherklassen static: Funktion kann nur innerhalb dieser Quelldatei benutzt werden extern (Default): Funktion kann aus anderen Quelldateien benutzt werden, speziellextern C undextern C++ für Benutzung aus C- bzw. C++-Programmen inline: Quelltext der Funktion kann als Optimierung an aufrufender Stelle direkt eingesetzt werden, Empfehlung für den Compiler Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 69

Funktionen: Rückgabetyp Funktionen haben einzelnen typisierten Rückgabewert, da Funktionsaufrufe dadurch einfach Ausdrücke sind Bisher: Rückgabewerte von einfachen Basisdatentypen Alternativen zur Modifikation von mehreren Variablen bzw. komplexerer Ergebnisdaten Pass by Reference (Veränderung der Parametervariablen ) Ergebnis als Feld oder selbstdefinierter komplexer Typ (z.b. struct ) Zeiger auf Feld oder komplexen Datentyp ( ) oderclass ) Wenn kein sinnvoller Rückgabewert existieren kann, spezieller Typvoid, zum Beispiel void ausgabe(char* text) { printf( %s, text);} wobei entsprechende Methoden keinreturn benötigen Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 70

Funktionen: Deklaration Deklaration einer Funktion entspricht deren Bekanntmachung, d.h. Funktion existiert, Implementierung ist aber an einer anderen Stelle [<Speicherklasse>] <Typ> <Funktionsname>(<Parameterliste>); Auch Signatur bzw. Prototyp der Funktion Erlaubt Verwendung der Funktion im Quelltext, auch wenn noch keine Implementierung angegeben wurde Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 71

Funktionen: Deklaration /2 Gebräuchliche Anwendungen Vorab-Deklaration einer Funktion, die schon im Quelltext benutzt wird, deren Implementierung aber erst an späterer Stelle folgt (zwingend erforderlich z.b. wenn Funktionen sich gegenseitig aufrufen, aber in einer bestimmten Reihenfolge im Quelltext definiert werden müssen) Deklaration von Methoden in Header-Dateien, deren Implementierung aus anderen Quelldateien erst später vom Linker hinzugefügt wird Deklaration von Methoden (Klassenfunktionen) in einer Klassendefinition (in der Regel auch in Header-Dateien) Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 72

Vorab-Deklaration: Beispiel (C++) /1 #include <iostream> using namespace std; void ungerade(int z); void gerade(int z) { if (z%2==0) cout << Zahl ist gerade. << endl; else ungerade(z); } void ungerade(int z) { if (z%2!=0) cout << Zahl ist ungerade. << endl; else gerade(z); }... Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 73

Vorab-Deklaration: Beispiel (C++) /2... int main() { int x; cout << x = ; cin >> x; gerade(x); return 0; } Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 74

Funktionen: Übergabe von Parametern Bisher: Parameter können an eine Funktion als literale Werte oder Werte einer Variable übergeben werden float add(float a, float b) { return a+b; }... float x,y,z;... x = add(32.3,9.7); // literale Werte x = add(y,z); // Variablenwerte Werte werden dazu in die Speicherbereiche der lokalen Variablen der Funktion kopiert 1. Aufruf:aerhält Wert 32.3,berhält Wert 9.7 2. Aufruf:aerhält Wert vony,berhält Wert vonz Werte vonyundzbleiben unverändert Pass by Value (auch Call by Value) Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 75

Funktionen: Pass by Value oder by Reference Pass by Value: Übergabe der Parameter durch Kopieren der Werte, wodurch eine Modifikation der ursprünglichen Variablen ausgeschlossen wird Pass by Reference: Übergabe einer Referenz auf die Ursprungsvariable, wodurch deren Wert in der Funktion manipuliert werden kann C und C++ bieten unterschiedliche Möglichkeiten zur Umsetzung von Pass by Reference, welche in C++ beide verwendet werden können C und C++: Übergabe von referenzierter Variable als Zeiger auf Speicherbereich der Variable nur C++: Übergabe als spezielles Referenzparameter, d.h. lokale Parametervariable der Funktion ist anderer Name der Ursprungsvariablen vom Funktionsaufruf Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 76

Pass by Reference: C-style Basiert auf der Übergabe von Zeigerwerten statt eigentlichen Datenwerten Zeiger ( ) oder auch Pointer von einem bestimmten Typ entsprechen Speicheradresse an dem ein Wert von diesem Typ steht Entsprechende Deklaration der Methode mit Zeigerparametern, z.b. void tausche(int* x, int* y) {... } Beim Aufruf mit normalen Variablen muss vorher die Adresse jeder Variable berechnet werden tausche(&a,&b); Technik bisher schon verwendet, z.b. beiscanf() ausstdio zum Einlesen von Werten für Variablen Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 77

Einschub: Beispiel für Arbeit mit Zeigern int i = 13; i ist normale Variable mit Wert 13 an Adressex int* p; p ist undefinierter (!) Zeiger (Pointer) aufint-wert p = &i; Referenzierung (Bildung eines Zeigers auf Adresse der dahinter stehenden Variable) mit&, p zeigt jetzt auf Adresse x *p = 7; Dereferenzierung mit*, Wert an Adressexist jetzt 7 *p==7 && i==7; Ist jetzt wahr... Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 78

Pass by Reference: C-Style Beispiel (C++)... void tausche(int* x, int* y) { int hilfe = *x; *x = *y; *y = hilfe; } int main() { int a=4; int b=7; cout << Vorher: a= << a << b= << b << endl; tausche(&a,&b); cout << Nachher: a= << a << b= << b << endl; return 0; } Vorher: a=4 b=7 Nachher: a=7 b=4 Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 79

Pass by Reference: C++-style C++ führt Konzept der Referenzvariablen und Referenzparameter durch speziellen Syntax bei der Deklaration mit&ein: entsprechend deklarierte Variablen sind anderer Name für eine zuvor definierte Variable Entsprechende Deklaration der Methode mit Referenzparametern, z.b. void tausche(int& x, int& y) {... } Erlaubt einfache Übergabe von Variablen ohne weitere Transformation tausche(a,b); Kritik an C++-Lösung: beim Aufruf einer Funktion ist im Quelltext an dieser Stelle nicht mehr ersichtlich, ob die übergebenen Variablen verändert werden könnten erfordert Kenntnis über Funktionsdefinition/-deklaration Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 80

Pass by Reference: Beispiel (C++) #include <iostream> using namespace std; void tausche(int& x, int& y) { int hilfe = x; x = y; y = hilfe; } int main() { int a=4; int b=7; cout << Vorher: a= << a << b= << b << endl; tausche(a,b); cout << Nachher: a= << a << b= << b << endl; return 0; } Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 81

Funktionen: mehr zu Parametern Defaultwerte für Parameter können bei Funktionsdefinition angegeben werden Parameter kann beim Aufruf weggelassen werden char* zahl_als_string(int zahl, basis b=10) {... } Overloading (Überladen) erlaubt Funktionen mit gleichem Namen aber unterschiedlichen Parametern (passende Implementierung wird vom Compiler nach Typ der Parameter beim Aufruf ausgewählt) char* zahl_als_string(int zahl) {... } char* zahl_als_string(float zahl) {... } Variable Parameterzahl in einer Funktionsdefinition durch... umsetzbar (erfordert aber spezielle Behandlung der Liste von Parametern mit beliebigen Datentypen), verwendet z.b. bei printf(char* format,...); Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 82

Funktionen: Rekursion Definition (Rekursion) Rekursion (vom lateinischen recurrere: zurückführen, zurücklaufen) bezeichnet die Technik, eine Funktion durch sich selbst zu definieren. In der Programmierung: Funktionen können direkt oder indirekt (über eine weitere Funktion) sich selbst aufrufen Konzept entliehen aus der funktionalen Programmierung, im Gegensatz zu imperativer Programmierung als nur Folge von Befehlen Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 83

Funktionen: Rekursion Anwendbar für viele Aufgaben: Berechnungsmöglichkeiten äquivalent zu Schleifen Rekursion kann Schleifen immer ersetzen bzw. von diesen ersetzt werden Vorteile: Oft einfache, elegante Lösungen möglich Praktisch zum Beispiel bei komplexeren Datenstrukturen (z.b. wenn diese rekursiv definiert sind: Hierarchien, Bäume), Optimierung, etc. Nachteile: Funktionsaufrufe verursachen erhöhten Aufwand bei der Programmausführung Performance Führt mitunter zu komplexeren Programmstrukturen, die schwerer verständlich bzw. deren Korrektheit schwerer verifizierbar ist Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 84

Rekursion: Beispiel Fakultätsberechnung Mathematische Funktion für natürlich Zahlen n n! = 1 2 3 4 n = n i i=1 Kann so als Schleife (Zählschleife mit Produktbildung) umgesetzt werden Aber auch rekursive Definition möglich: { 1 n = 0 n! = n (n 1)! n > 0 Umsetzbar als rekursive Funktion Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 85

Rekursion: Beispiel (C++) #include <iostream> using namespace std; int fakultaet(int i) { if (i<=1) return 1; else return i*fakultaet(i-1); } int main() { int x,f; cout << x = ; cin >> x; f = fakultaet(x); cout << x! = << f << endl; return 0; } Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 86

Rekursion: Beispiel - Ablauf Ergebnis: 4*6=24 Aufruf fakultaet( 4) Ergebnis: 3*2=6 Aufruf fakultaet( 3) Aufruf Ergebnis: 2*1=2 fakultaet( 2) Ergebnis: 1 Aufruf fakultaet( 1) Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 87

Zusammenfassung: Funktionen Funktionen als wiederverwendbare, zusammenhängende Folge von Anweisungen zur Strukturierung des Quelltextes Definition einer Funktion mit Speicherklasse, Rückgabetyp, Name, Parameter und deren Typen sowie eigentlicher Implementierung als Programmblock Deklaration einer Funktion als Bekanntmachung der Schnittstelle erlaubt Benutzung im Quelltext, ohne dass Implementierung bis dahin gegeben Parameterübergabe als kopierte Werte (Pass by Value) oder modifizierbare Variablen (Pass by Reference) Rekursion als spezielles Programmierparadigma für Funktionen erlaubt direkten oder indirekten Aufruf der Methode durch sich selbst Eike Schallehn Grundlagen der Informatik für Ingenieure 2009/2010 4 88