• Keine Ergebnisse gefunden

Grundlagen der Programmierung in C

N/A
N/A
Protected

Academic year: 2021

Aktie "Grundlagen der Programmierung in C"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Grundlagen der

Programmierung in C

Funktionen

Wintersemester 2005/2006 G. Zachmann

Clausthal University, Germany zach@in.tu-clausthal.de

 Der erste Mechanismus für Code-Reuse !

 Ältester Mechanismus für Code-Reuse:

Every set of cards made for any formula will at any future time recalculate that formula with whatever constants may be required.

Thus the Analytical Engine will possess

a library of its own. (Charles Babbage, 1864)

 Funktion = parametrisierter Block von Anweisungen

 Library = Sammlung vieler Funktionen zu einem Thema:

C-Library (stdio, pthreads, …)

Multimedia, Numerik, Datenbank, …

(2)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 3

Terminologie

 Analogie:

Variablen werden deklariert, belegt und verwendet (=gelesen)

Funktionen werden deklariert, definiert, und aufgerufen

 Deklaration :=

Bekanntgabe an Compiler über Existenz und I/O-Verhalten einer Funktion.

Deklaration von Funktionen

 Syntax der Deklaration:

T

0 F

( T

1 P1

, T

2 P2

, … );

T0 = Typ des Rückgabewertes der Funktion ("Typ der Funktion")

F = Name der Funktion

Pi = formale Parameter (Variablen innerhalb der Funktion)

Ti = Typen der formalen Parameter

Das Ganze heißt Prototyp (Mathematiker sagen "Signatur")

 Beispiele:

int foo( int x );

void bar();

float evalCubic( float a0, float a1,

(3)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 5

 Style guidelines:

float sampleSignal( int k, int n, char s );

Namenskonvention:

kleinGroßGroß (inCaps ) verbSubstantiv

Parameter vertikal ausrichten, falls nicht auf eine Zeile passend Rückgabetyp auf eigene Zeile,

falls dieser lang wird

unsigned long int * sampleSignal( … );

Definition von Funktionen

 Definition:

T0 F

( T

1 P1

, T

2 P2

, … ) {

}

Innerhalb der

{ }

stehen die Anweisungen (function body )

Formale Parameter wie andere Variablen innerhalb Body

Gelten nur innerhalb Body!

Verwende

return x

, um Funktion zu beenden und Funktionswert vom Typ T0 zurückzuliefern

Falls T0 =

void

, verwende

return

ohne Argument (nicht nötig, falls letzer Befehl vor

}

)

(4)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 7

 Beispiel:

 Style Guidelines:

void foo( int i, float f ) {

....

}

bool sign( int x ) {

if ( x >= 0 ) return true;

else

return false;

}

Spacing

Vertikale Ausrichtung (alignment ) 4 Spaces

Einrückung (indentation )

 Was in Funktionen nicht geht

(aber manchmal [selten] "nice to have" wäre):

Funktion innerhalb einer Fkt definieren (lokale Fkt à la Pascal)

Mehrere Rückgabewerte

(5)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 9

Aufruf von Funktionen

 Aufruf ("function call"):

F

( P

1

, P

2

, … )

Pi heißen (tatsächliche) Parameter (actual parameters )

Werden in die formalen Parameter der Fkt.-Definition kopiert

Typen müssen mit formalen Parametern übereinstimmen (oder konvertiert werden können)

Achtung: sieht fast aus wie Deklaration!

Kann überall stehen, wo Ausdruck stehen kann

Achtung: Funktion muß vor Aufruf mindestens deklariert sein (oder definiert)

 Achtung: Aufruf sieht fast aus wie Deklaration!

 Beispiel:

void foo();

foo();

int bar( int x );

bar(x);

(6)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 11

 Beispiele:

 Achtung: folgendes ist kein Funktionsaufruf!

puts("hi");

x = sign( y-2 );

if ( sign(x) ) … ;

float samples = evalCubic( 1, 2.0, 3, sign(x) );

void foo( void ) {

...

} foo;

 Semantik (flow control):

Tatsächliche Parameter

kopieren

Sprung

Rückgabewert verarbeiten

Funktions- anweisungen

Rück- sprung

(7)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 13

Rekursion

 Funktion, die sich selbst aufruft, heißt rekursive Fkt

 Beispiel Fibonacci-Zahlen:

Rekurrenz-Relation:

Fn = Fn-1 + Fn-2 F1 = F0 = 1

Programm:

unsigned int f( unsigned int n ) {

if ( n > 1 )

// complex case

return f(n-1) + f(n-2);

else

// base case return 1;

}

Rekursionsbaum

 Ausführungsbeispiel:

f( 3 )

f( 1 ) f( 2 )

f( 1 ) f( 0 ) return 1

return 1 return 1

return +

return +

C++ spezifiziert nicht die Reihenfolge!

Tie fe d er R ek ur sio n

(8)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 15

Komplizierteres Beispiel: Türme von Hanoi

 Puzzle, bestehend aus 3 Stäben und Scheiben verschiedener Größe

 Ausgangssituation:

 Ziel: alle Scheiben von A nach B (oder C) schaffen

 Regeln:

Nur 1 Scheibe pro Zug

Eine größere Scheibe darf nie auf kleinerer Scheibe liegen

A B C

4 disks

 Idee:

Angenommen, wir wüßten, wie man n-1 Scheiben verschiebt, dann ...

A B C

disk n

1

n-1 disks

2 3

Rekursion

n-1 disks

(9)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Funktionen, 17

 Turm mit 3 Scheiben

 Turm mit 4 Scheiben

Referenzen

ÄHNLICHE DOKUMENTE

kann dies allenfalls dann gelten, wenn - übereinstimmend mit der Ansicht des SVR - der GI-SVR nicht das einzige Instrument zur Beur- teilung von konjunktureller Lage

The fastest, currently known algorithm consumes O(n 2.376

Zeigen Sie, daß in diesem Fall die fast sichere Konvergenz ¨aquivalent zur stochastischen

Then files may be copied one at a time (or with a wild card transfer) to the dual density diskette.. Using the Filer under the UCSD O/S, do an E)xtended listing of the files on

The differences in the perception of threats and challenges to Sweden’s security are reflected in the nature of the proposed changes to Swe- den’s security policy, the way

The Charles Babbage Institute (CBn is a research institute dedicated to promoting the study of the history of information processing, bringing historical

avoided. ] He also chronicles the chaos and thrill of early computer shows, followed by the maturation of an industry with the emergence of PC distribution

In addition, is assumed to be equal to so the question is how large has to be in order to obtain close to where stands for the number of total possible outcomes of the