• Keine Ergebnisse gefunden

Ergänzungen

N/A
N/A
Protected

Academic year: 2022

Aktie "Ergänzungen"

Copied!
7
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Einf¨ uhrung in die Programmierung

Bachelor of Science

Prof. Dr. Rethmann

Fachbereich Elektrotechnik und Informatik Hochschule Niederrhein

WS 2009/10

Ubersicht ¨

dynamische Programmierung L¨osen durch Ausprobieren Erweiterungen im C99-Standard

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 2 / 53

Motivation

rekursive Funktionen, also Funktionen die sich selbst wieder aufrufen, allerdings mit ge¨anderten Parameterwerten, sind oft ineffizient

dynamische Programmierung:verwende eine Tabelle, um bereits berechnete Werte zu speichern, und baue aus diesen Werten sukzessive eine gr¨oßere L¨osung zusammen

Backtracking:allgemeine Probleml¨osung, bei der wir eine L¨osung durch Ausprobieren ermitteln

Was soll man machen, wenn einem nichts besseres einf¨allt?!

C99-Erweiterungen:C lebt! Daher gibt es in gewissen

Zeitabst¨anden Erweiterungen, die letzten waren 1990 und 1999.

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 3 / 53

Fibonacci-Zahlen

# include < stdio .h >

long fibo (int n ) { if ( n <= 1)

return n ;

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

}

void main () { int n ;

for ( n = 0; n < 50; n ++)

printf ( " fib (% d ) = % ld \ n " , n , fibo ( n ));

}

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 4 / 53

Fibonacci-Zahlen

f(2)

f(1) f(0) f(1) f(3)

f(4)

f(1) f(0) f(2)

f(1) f(0) f(2) f(1)

f(3) f(5)

f(2)

f(1) f(0) f(1) f(3)

f(4)

f(1) f(0) f(2) f(6)

Da viele rekursive Aufrufe mehrmals ausgef¨uhrt werden, k¨onnen wir das Problem effizienter l¨osen, indem wir bereits berechnete Zwischenl¨osungen in einer Tabelle speichern.

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 5 / 53

Fibonacci-Zahlen

# include < stdio .h >

long fibs [50] = {0 , 0 , 0 , 0 , ...};

long fibo (int n ) { if ( n <= 1)

return n ; if ( fibs [n -1] == 0)

fibs [n -1] = fibo (n -1); // m e m o r i e r e n return fibs [n -1] + fibs [n -2];

}

void main (void) { int n ;

printf ( " Wert ? " );

scanf ( " % d " , & n );

printf ( " fib (% d ) = % ld \ n " , n , fibo ( n ));

}

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 6 / 53

Fibonacci-Zahlen

Wir k¨onnen die L¨osung auch von unten her aufbauen:

# include < stdio .h >

long fibs [50];

void main (void) { int n ; fibs [0] = 0;

fibs [1] = 1;

for ( n = 2; n < 50; n ++) {

fibs [ n ] = fibs [n -1] + fibs [n -2];

printf ( " fib (% d ) = % ld \ n " , n , fibs [ n ]);

} }

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 7 / 53

Fibonacci-Zahlen

Anmerkungen:

Die rekursiven Verfahren arbeitentop down.

Das letzte, iterative Verfahren arbeitetbottom up.

dynamische Programmierung:anwenden des Bottom-Up- Prinzips auf Optimierungsprobleme

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 8 / 53

(2)

dynamische Programmierung

berechne direkt die optimalen L¨osungen der kleinsten Teilprobleme

setze diese Teill¨osungen geeignet zu einer L¨osung eines n¨achstgr¨oßeren Teilproblems zusammen, und so weiter berechnete Teilergebnisse werden in einer Tabelle gespeichert, auf die immer wieder zur¨uckgegriffen werden kann

dynamische Programmierung vermeidet kostspielige Rekursionen, weil bekannte Teilergebnisse wiederverwendet werden

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 9 / 53

Binomialkoeffizienten

# include < stdio .h >

int bin (int n , int k ) { if ( n < k || k < 0)

return -1;

if ( k == 0 || k == n ) return 1;

return bin (n -1 , k -1) + bin (n -1 , k );

}

void main () { int n , k ;

printf ( "n , k ? " );

scanf ( " %d , % d " , &n , & k );

printf ( " bin (% d ,% d ) = % d \ n " , n , k , bin (n , k ));

}

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 10 / 53

Binomialkoeffizienten

Programmablauf:

(2, 1)

(1, 1) + (3, 1)

+ (4, 1)

+

(1, 0) (2, 0) (3, 0)

(1, 0)

(4, 2)

(3, 1) +

+

(1, 1) (2, 1)

(1, 1) (1, 0)

(2, 2) +

(3, 2) + (2, 0) (2, 1)

+ (5, 2)

+

Auch hier k¨onnen wir die Technik des Memorierens oder die Bottom-Up-Methode anwenden!

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 11 / 53

Binomialkoeffizienten

# include < stdio .h >

int koeff [ 3 0 ] [ 3 0 ] = {{0 ,0 ,0 , ...} , ... , {0 ,0 ,0 , ...}};

int bin (int n , int k ) { if ( k == 0 || k == n )

return 1;

if ( koeff [n -1][ k -1] == 0)

koeff [n -1][ k -1] = bin (n -1 , k -1);

if ( koeff [n -1][ k ] == 0)

koeff [n -1][ k ] = bin (n -1 , k );

return koeff [n -1 , k -1] + koeff [n -1 , k ];

}

void main (void) {

printf ( " bin (% d ,% d ) = % d \ n " , 7 , 3 , bin (7 ,3));

}

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 12 / 53

Binomialkoeffizienten

# include < stdio .h >

int koeff [ 3 0 ] [ 3 0 ] ;

// b e r e c h n e P a s c a l s c h e s Dreieck void main (void) {

int n , k ;

for ( n = 0; n < 30; n ++) { koeff [ n ][0] = 1;

for ( k = 1; k < n ; k ++)

koeff [ n ][ k ] = koeff [n -1][ k -1]

+ koeff [n -1][ k ];

koeff [ n ][ n ] = 1;

}

printf ( " bin (% d ,% d ) = % d \ n " , 7 , 3 , koeff [ 7 ] [ 3 ] ) ;

}

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 13 / 53

Geld sammeln

gegeben ist ein Schachbrett und eine Spielfigur

jedem Feld ist ein Geldbetrag zugeordnet, der beim Passieren des Feldes gutgeschrieben wird

Startfeld: links oben

Ende: Spielfigur steht in der rechten Spalte

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 14 / 53

Geld sammeln

Rekursionsformel? Dynamische Programmierung?

16

7 29

5 5

2 6 9 1 17 23

4 25 27 13 2 24 12 23

25 22 16

8 27 16

12 9 12 22

14 12 9 9 2

1 23 20 29 3 8

21 7 2 25 19 2

20 13 7 14

23 16 29

13 27

11 16

1 6

0 16 0

5 6 7

2 6 7

0 1 18 1

2 3 4

0 1 3 4 5

Variante: In welchem Feld der ersten Spalte muss ich starten, um m¨oglichst viel Geld zu sammeln?

Einf¨uhrung in die Programmierung Erg¨anzungen dynamische Programmierung 15 / 53

Ubersicht ¨

dynamische Programmierung L¨osen durch Ausprobieren Erweiterungen im C99-Standard

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 16 / 53

(3)

Backtracking

allgemeine Probleml¨osung:finde L¨osung eines Problems nicht durch befolgen einer Berechnungsvorschrift, sondern durch Versuchen und Nachpr¨ufen engl.: trial and error

Beispiel:n-Damen-Problem

Positioniere auf einemn×n-SchachbrettnDamen so, dass keine Damen sich gegenseitig schlagen.

X X

X X

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 17 / 53

4-Damen-Problem

x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 18 / 53

4-Damen-Problem

x

x x x

x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 19 / 53

4-Damen-Problem

x

x x

x

x x

x x

x

x

x x

x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 20 / 53

4-Damen-Problem

x

x x x

x x

x x x

x

x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 21 / 53

4-Damen-Problem

x

x x x

x x

x x x

x

x

x x x

x x x

x x x

x x x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 22 / 53

4-Damen-Problem

x

x x x

x x

x x

x x

x x

x x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 23 / 53

4-Damen-Problem

x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 24 / 53

(4)

4-Damen-Problem

x x

x x x x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 25 / 53

4-Damen-Problem

x

x

x x x x

x x x

x x x

x x x

x x x

x

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 26 / 53

n-Damen-Problem

# include < stdio .h >

# include < stdlib .h >

char stateOk (int n );

char f i n d P o s i t i o n (int n , int dim );

void output (int n );

int * pos ;

void main (void) { int n = 8;

pos = (int *) calloc (n , sizeof(int));

if ( f i n d P o s i t i o n (0 , n )) output ( n );

else printf ( " % d : no s o l u t i o n \ n " , n );

free ( pos );

}

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 27 / 53

n-Damen-Problem

char f i n d P o s i t i o n (int n , int dim ) { int i ;

char found = 0;

for ( i = 0; i < dim && ! found ; i ++) { pos [ n ] = i ;

if ( stateOk ( n )) { if ( n == dim - 1)

return 1;

found = f i n d P o s i t i o n ( n + 1 , dim );

} }

return found ; }

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 28 / 53

n-Damen-Problem

char stateOk (int n ) {

int z1 , z2 , s1 , s2 , dx , dy ; for (int z1 = 0; z1 < n ; z1 ++) {

for (int z2 = z1 + 1; z2 <= n ; z2 ++) { s1 = pos [ z1 ];

s2 = pos [ z2 ];

dx = s1 - s2 ; dy = z1 - z2 ; if ( s1 == s2 ) return 0;

if ( dx == dy || dx == - dy ) return 0;

} }

return 1;

}

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 29 / 53

n-Damen-Problem

void output (int dim ) { int i , j ;

printf ( " \ nn = % d \ n " , dim );

for ( i = 0; i < dim ; i ++) { for ( j = 0; j < dim ; j ++) {

if ( pos [ i ] == j ) printf ( " x " );

else printf ( " -" );

}

printf ( " | %3 d \ n " , pos [ i ] + 1);

}

printf ( " \ n " );

}

Einf¨uhrung in die Programmierung Erg¨anzungen osen durch Ausprobieren 30 / 53

Ubersicht ¨

dynamische Programmierung L¨osen durch Ausprobieren Erweiterungen im C99-Standard

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 31 / 53

Erweiterungen im C99 Standard

inline functions: Compiler-Hinweis, jeder Aufruf der Funktion ist durch Einf¨ugen des Codes der Anweisungen des Funktionsrumpfs zu ersetzen.

Beispiel:

inline int max (int i , int j ) { return ( i > j ) ? i : j ; }

⇒ spart das Erzeugen von Variablen sowie das Kopieren von Werten f¨ur Argumente und Funktionswert!

⇒ nur sinnvoll f¨ur Funktionen, deren Rumpf nur wenige Anweisungen enthalten

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 32 / 53

(5)

Erweiterungen im C99 Standard

Variablen-Deklarationsind nun an vielen Stellen im Code erlaubt, nicht nur zu Beginn eines Blocks

Beispiel:

# include < stdio .h >

void main (void) {

for (int i = 0; i < 10; i ++)

printf ( " %2 d : Hello , world !\ n " , i );

int x = 1;

while ( x < 10)

printf ( " x = %3 d \ n " , x ++);

}

⇒kein sinnvolles Feature, Code wird schlechter lesbar

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 33 / 53

Erweiterungen im C99 Standard

neue Datentypen:

long long intschließt L¨ucke zwischen 32- und 64-Bit complexDarstellung komplexer Zahlen+Arithmetik

# include < stdio .h >

# include < complex .h >

void main (void) {

complex c = 1.0 f + 1.0 f * _ C o m p l e x _ I ;

printf ( " + % f + i % f \ n " , creal ( c + c ) , cimag ( c + c ));

printf ( " - % f + i % f \ n " , creal (c - c ) , cimag (c - c ));

printf ( " * % f + i % f \ n " , creal ( c * c ) , cimag ( c * c ));

printf ( " / % f + i % f \ n " , creal ( c / c ) , cimag ( c / c ));

}

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 34 / 53

Erweiterungen im C99 Standard

erweiterte/neue Bibliotheken stdint.h

Definition vonlong long int complex.h

Darstellung komplexer Zahlen+Arithmetik

snprintf(char *str, size t size, char *fmt, ...) schreibt maximalsizeZeichen nachstr, Formatierung erfolgt anhandfmt

va copy(va list dest, va list src) (siehe variabel lange Parameterlisten)

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 35 / 53

Erweiterungen im C99 Standard

heute ¨ublich:Unicode-Zeichensatz

C90 definertbreite Zeichen: Datentypwchar t

C99 definiert alle Bibliotheksfunktionen ¨uber Zeichenketten auch in einer Version f¨ur breite Zeichen

# include < wchar .h >

int main (void) {

wchar_t ustr [20] = L " abcde " ; int len ;

wprintf ( L " % ls \ n " , ustr );

s w p r i n t f ( ustr , 20 , L " %4 i " , 1234);

len = wcslen ( ustr );

return 0;

}

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 36 / 53

Erweiterungen im C99 Standard

einzeilige Kommentare wie in C++:

// H a u p t p r o g r a m m

int main (int argc , char * argv []) { int upper ; // obere Grenze int lower ; // untere Grenze ...

Arrays variabler L¨ange:

int len = atoi ( argv [1]);

int arr [ len ]; // nach ISO - C90 v e r b o t e n

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 37 / 53

Variabel lange Parameterlisten

Motivation:Wir haben bereits (unbewusst?) variabel lange Parameterlisten angewendet:

printf ( " E r g e b n i s : % d \ n " , erg );

printf ( " fib [% d ]= % d \ n " , i , fib [ i ]);

printf ( " bin [% d ][% d ]= % d \ n " , i , j , bin [ i ][ j ]);

scanf ( " % d " , & no );

scanf ( " %d , % f " , & no , & epsilon );

Wie ist das eigentlich realisiert?

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 38 / 53

Variabel lange Parameterlisten

Motivation:Bei Datenbankzugriffen mittels SQL k¨onnen die Daten nach verschiedenen Kriterien sortiert werden.

select * from student order by m a t r i k e l n r ; select * from student

order by fachbereich , gebdat ; select * from student

order by name , vorname , gebdat ; Wie s¨ahe entsprechender C-Code aus?

stud_t arr [100];

...

sortBy ( arr , " m a t r i k e l n r " );

sortBy ( arr , " f a c h b e r e i c h " , " gebdat " );

sortBy ( arr , " name " , " vorname " , " gebdat " );

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 39 / 53

Variabel lange Parameterlisten

Die Standardbibliothekstdargbietet die M¨oglichkeit, eine Liste von Funktionsargumenten abzuarbeiten, deren L¨ange und Datentypen nicht bekannt sind.

Beispiele:

int printf (const char * format , ...) int scanf (const char * format , ...) Parameterliste endet mit...→die Funktion darf mehr Argumente akzeptieren als Parameter explizit beschrieben sind ...darf nur am Ende einer Argumentenliste stehen

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 40 / 53

(6)

Variabel lange Parameterlisten

Beispiel:int fkt(char *fmt, ...);

Mit demTypva_listdefiniert man eine Variable, die der Reihe nach auf jedes Argument verweist.

va_list vl ;

DasMakrova_startinitialisiertvlso, dass die Variable auf das erste unbenannte Argument zeigt.Das Makro muss einmal aufgerufen werden, bevorvlbenutzt wird.

Es muss mindestens einen Parameter mit Namen geben, da va startden letzten Parameternamen benutzt, um anzufangen.

v a _ s t a r t ( vl , fmt );

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 41 / 53

Variabel lange Parameterlisten

Jeder Aufruf desMakrosva_argliefert ein Argument und bewegt vlauf das n¨achste Argument.

va argbenutzt einen Typnamen, um zu entscheiden, welcher Datentyp geliefert und wievlfortgeschrieben wird.

ival = va_arg ( vl , int);

sval = va_arg ( vl , char *);

Vorsicht:Der Typ des Arguments wird nicht automatisch erkannt.

Um den korrekten Typ angeben zu k¨onnen, wird ein Format-String wie beiprintf(const char *, ...)benutzt.

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 42 / 53

Variabel lange Parameterlisten

Vorsicht:Das Ende der Liste kannnichtanhand eines NULL-Wertes erkannt werden.

So nicht!

while ( vl != NULL ) { val = va_arg ( vl , int);

...

}

⇒ Die Anzahl und die Datentypen der Parameter m¨ussen bekannt sein. Beides kann mittels eines Format-Strings wie bei printferreicht werden.

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 43 / 53

Variabel lange Parameterlisten

Beispiel:Format-String for (; * fmt ; fmt ++) {

switch(* fmt ) {

case ’d ’: ival = va_arg ( vl , int); break; case ’f ’: fval = va_arg ( vl , double); break; case ’s ’: sval = va_arg ( vl , char *); break; }

...

Eventuell notwendige Aufr¨aumarbeiten erledigtva end.

va_end ( vl );

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 44 / 53

Beispiel stdarg

# include < stdio .h >

# include < stdarg .h >

void main (void) {

fkt ( " sfdsd " , " eins " , 2.0 , 3 , " vier " , 5);

fkt ( " fdsd " , 6.0 , 7 , " acht " , 9);

}

int fkt (const char * fmt , ...) { int z ;

va_list l ; v a _ s t a r t (l , fmt );

for ( z = 0; * fmt ; fmt ++ , z ++) g e t A n d P r i n t N e x t V a l u e (* fmt , & l );

va_end ( l );

return z ; }

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 45 / 53

Beispiel stdarg

void g e t A n d P r i n t N e x t V a l u e (char c , va_list * l ) { char * sval ;

int ival ; double fval ; if ( c == ’d ’) {

ival = va_arg (* l , int);

printf ( " % d ( int )\ n " , ival );

} else if ( c == ’f ’) {

fval = va_arg (* l , double);

printf ( " % f ( double )\ n " , fval );

} else if ( c == ’s ’) {

sval = va_arg (* l , char *);

printf ( " % s ( char *)\ n " , sval );

} }

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 46 / 53

Was noch bleibt

Anwenden!!!

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 47 / 53

Evolution!!!

Grundschule:

10 PRINT " HELLO WORLD "

20 END

5. Klasse Gymnasium:

program Hello ( input , output );

begin

writeln( ’ Hello World ’ );

end.

Abiturjahrgang:

(defun hello < br >

(print< br >

(cons ’ Hello (list ’ World ))))

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 48 / 53

(7)

Evolution!!!

1. Jahr Uni:

# include < stdio .h >

void main (void) {

char * message [] = { " Hello " , " World " };

int i ;

for( i = 0; i < 2; ++ i ) printf ( " % s " , message [ i ]);

printf ( " \ n " );

}

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 49 / 53

Evolution!!!

Hacker-Anf¨anger:

# !/ usr / local / bin / perl

$msg = " Hello , world .\ n " ; if ($# ARGV >= 0) {

while(defined( $arg =shift( @ARGV ))) {

$ o u t f i l e n a m e = $arg ;

open( FILE , " >" . $ o u t f i l e n a m e )

|| die " Can ’t write $arg : $ !\ n " ; print ( FILE $msg );

close( FILE )

|| die " Can ’t close $arg : $ !\ n " ; }

} else {

print ( $msg );

}

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 50 / 53

Evolution!!!

erfahrener Hacker:

# include < stdio .h >

# define S " Hello , World \ n "

main (){ exit ( printf ( S ) == strlen ( S ) ? 0 : 1);}

Senior-Hacker:

% cc -o a . out ~/ src / misc / hw / hw . c

% a . out Guru-Hacker:

% cat

Hello , world .

^ D

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 51 / 53

Evolution!!!

Neuer Manager:

10 PRINT " HELLO WORLD "

20 END Alterer Manager:¨

mail -s " Hello , world . " bob@b12

Bob , could you please write me a program that prints " Hello , world . " ?

I need it by t o m o r r o w . ^ D Senior-Manager:

% zmail jim

I need a " Hello , world . " program by this a f t e r n o o n .

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 52 / 53

Evolution!!!

Chef:

% letter

letter : Command not found .

% mail To : ^ X ^ F ^ C

% help mail

help : Command not found .

% damn !

!: Event u n r e c o g n i z e d

% logout

Einf¨uhrung in die Programmierung Erg¨anzungen Erweiterungen im C99-Standard 53 / 53

Referenzen

ÄHNLICHE DOKUMENTE

• oder ein Rechteck, gegeben durch zwei Eckpunkte,. • oder ein Polygon, gegeben durch Liste

Die Hauptabfrage ¨ubergibt pro Zeile von PERS jeweils den aktuellen ABTNR- Wert an die Korrelationsvariable u.Abtnr: Mit diesem Wert ermittelt die Unterab- frage die

Dann werden die Anweisungen durchgef¨ uhrt und logischer Ausdruck wird erneut gecheckt..?. Man kann also die Zahl π approximieren, indem man 4S n f¨ ur großes n berechnet, wobei S n

[r]

[r]

Benutzen Sie den Algorithmus aus Aufgabe 1/ ¨ Ubungsblatt 3 um eine Funk- tion long ggt(long x,long y) zur Berechnung des gr¨ oßten gemeinsamen Teilers zweier ganzer Zahlen

Andern sie die Methode ¨ void print() der Klasse comp so ab, daß komplexe Zahlen in der ¨ ublichen Form ausgegeben werden:.. Testen