Programmierkurs C. Sommersemester 2011, 5. Vorlesung. Stuttgart, den 15. April Heiko Schulz. University of Stuttgart, Math.

Größe: px
Ab Seite anzeigen:

Download "Programmierkurs C. Sommersemester 2011, 5. Vorlesung. Stuttgart, den 15. April Heiko Schulz. University of Stuttgart, Math."

Transkript

1 Programmierkurs C Sommersemester 2011, 5. Vorlesung Stuttgart, den 15. April 2011 Heiko Schulz University of Stuttgart, Math. department

2 Rückschau 161 Zeiger und Felder Komplexe Datentypen (struct) Dateioperationen und die Struktur FIE Dateioperationen: zeichenweise, stringweise, formatiert Algorithmen: Suchen und Sortieren, untere Schranken andau-symbole

3 Caesar-Chire 162 Aufgabenstellung: Implementierung des Caesar-Chire. Einfachen Art der Verschlüsselung: Es wird zu jedem Zeichen c zwischen 'a' und 'z' bzw. 'A' und 'Z' eine positive ganze Zahl 1 B x B 25 addiert (x ist der geheime Schlüssel) Springt bei der Addition das Zeichen c über 'z' bzw. 'Z' hinaus, so wird 26 von c abgezogen, so dass c also wieder zwischen 'a' und 'z' bzw. 'A' und 'Z' liegt. Entschlÿselung mit gleichem Verfahren: jedem Zeichen den ihm bekannten Wert y 26 x addieren und erhält (nach eventuellem verschieben, falls das Zeichen aus dem Bereich 'a' bis 'z' bzw. 'A' bis 'Z' herausspringt) so den Klartext der Nachricht. Einfach zu entschlüsseln, da jedem Zeichen genau ein anderes Zeichen zugeordnet ist, d.h. man bekommt knackt den Schlüssel z.b. leicht durch einen Häugkeitsvergleich.

4 Caesar-Chire 163 /* c a e s a r. c */ #i n c l u d e < s t d i o. h> c h a r c a e s a r ( c h a r c, i n t key ) { // c um k e y w e i t e r s c h i e b e n i n t r e s u l t =c ; i f ( ( r e s u l t >= ' a ' ) && ( r e s u l t <= ' z ' ) ) { // k l e i n e r B u c h s t a b e r e s u l t = r e s u l t +key ; i f ( r e s u l t > ' z ' ) // a u s s e r h a l b d e s B e r e i c h s r e s u l t =26; // z u r u e c k s c h i e b e n i f ( ( r e s u l t >= 'A ' ) && ( r e s u l t <= 'Z ' ) ) { // g r o s s e r B u c h s t a b e r e s u l t = r e s u l t +key ; i f ( r e s u l t > 'Z ' ) // a u s s e r h a l b d e s B e r e i c h s r e s u l t =26; // z u r u e c k s c h i e b e n r e t u r n ( c h a r ) r e s u l t ;

5 Caesar-Chire 164 i n t main ( ) { u n s i g n e d c h a r c ; FIE * f = f o p e n ( " c h i f f r e. t x t ", " r t " ) ; // D a t e i o e f f n e n i f (! f ) { p r i n t f ( " F e h l e r beim O e f f n e n d e r D a t e i! \ n" ) ; r e t u r n 1; w h i l e (! f e o f ( f ) ) { // s o l a n g e e s e t w a s zu e s e n g i b t c =( u n s i g n e d c h a r ) f g e t c ( f ) ; // Z e i c h e n l e s e n c= c a e s a r ( c, 1 3 ) ; // Z e i c h e n r o t i e r e n p r i n t f ( "%c ", c ) ; // Z e i c h e n a u s g e b e n f c l o s e ( f ) ; // D a t e i s c h l i e s s e n r e t u r n 0 ;

6 chiffre.txt Faust. Der Tragödie erster Teil 165 Ihr naht euch wieder, schwankende Gestalten! Die früh sich einst dem trüben Blick gezeigt. Versuch' ich wohl euch diesmal fest zu halten? Fühl' ich mein Herz noch jenem Wahn geneigt? Ihr drängt euch zu! nun gut, so mögt ihr walten, Wie ihr aus Dunst und Nebel um mich steigt; Mein Busen fühlt sich jugendlich erschüttert Vom Zauberhauch der euren Zug umwittert.

7 Komplexe Zahlen complex.c 166 /* c o m p l e x. c */ #i n c l u d e < s t d i o. h> #i n c l u d e <math. h> s t r u c t complex { d o u b l e r e ; d o u b l e im ; ; v o i d ausgabe_complex ( s t r u c t complex z ) { // p r i n t f (" Re = % l f, Im = % l f ", z. r e, z. im ) ; p r i n t f ( "%l f +% l f * I ", z. re, z. im ) ; r e t u r n ;

8 Komplexe Zahlen complex.c 167 s t r u c t complex d i f f e r e n z _ c o m p l e x ( s t r u c t complex z1, s t r u c t complex z2 ) { s t r u c t complex r e s u l t ; r e s u l t. r e =z1. re z2. r e ; r e s u l t. im=z1. imz2. im ; r e t u r n r e s u l t ; s t r u c t complex produkt_complex ( s t r u c t complex z1, s t r u c t complex z2 ) { s t r u c t complex r e s u l t ; r e s u l t. r e =( z1. r e * z2. r e z1. im * z2. im ) ; r e s u l t. im =( z1. r e * z2. im + z1. im * z2. r e ) ; r e t u r n r e s u l t ;

9 Komplexe Zahlen complex.c 168 s t r u c t complex q u o t i e n t _ c o m p l e x ( s t r u c t complex z1, s t r u c t complex z2 ) { d o u b l e a=z1. re, b=z1. im, c=z2. re, d=z2. im ; s t r u c t complex r e s u l t ; i f ( ( c!= 0. 0 && d!= 0. 0 ) ) { r e s u l t. r e =( a * c+b*d ) /( c * c+d*d ) ; r e s u l t. im =( b*ca *d ) /( c * c+d*d ) ; r e t u r n r e s u l t ; r e s u l t. r e =0; r e s u l t. im =0; r e t u r n r e s u l t ;

10 Komplexe Zahlen complex.c 169 i n t main ( ) { s t r u c t complex z1, z2 ; z1. r e = 1. 0 ; z1. im = 2. 0 ; z2. r e = 3. 0 ; z2. im = 2. 0 ; p r i n t f ( " z1 z2 = " ) ; ausgabe_complex ( d i f f e r e n z _ c o m p l e x ( z1, z2 ) ) ; p r i n t f ( "\n" ) ; p r i n t f ( " z1 * z2 = " ) ; ausgabe_complex ( produkt_complex ( z1, z2 ) ) ; p r i n t f ( "\n" ) ; p r i n t f ( " z1 / z2 = " ) ; ausgabe_complex ( q u o t i e n t _ c o m p l e x ( z1, z2 ) ) ; p r i n t f ( "\n" ) ; r e t u r n 0 ;

11 Die Mathematikbibliothek math.h I 170 d o u b l e a c o s ( d o u b l e x ) a r c u s c o s i n u s d o u b l e a s i n ( d o u b l e x ) a r c u s s i n u s d o u b l e a t a n ( d o u b l e x ) a r c u s t a n g e n s d o u b l e c e i l ( d o u b l e x ) k l e i n s t e r I n t e g e r, d e r g r o e s s e r a l s x i s t d o u b l e c o s ( d o u b l e x ) c o s i n u s d o u b l e c o s h ( d o u b l e x ) c o s i n u s h y p e r b o l i c u s d o u b l e exp ( d o u b l e x ) E x p o n e n t i a l F u n k t i o n d o u b l e f a b s ( d o u b l e x ) A b s o l u t b e t r a g d o u b l e f l o o r ( d o u b l e x ) g r o e s s t e r I n t e g e r, d e r k l e i n e r a l s x i s t d o u b l e l o g ( d o u b l e x ) l n ( x ), o g a r i t h m u s z u r B a s i s e d o u b l e l o g 1 0 ( d o u b l e x ) o g a r i t h m u s z u r B a s i s 10 d o u b l e pow ( d o u b l e x, d o u b l e y ) P o t e n z f u n k t i o n x^y d o u b l e s i n ( d o u b l e x ) s i n u s d o u b l e s i n h ( d o u b l e x ) s i n u s h y p e r b o l i c u s d o u b l e s q r t ( d o u b l e x ) Q u a d r a t w u r z e l d o u b l e t a n ( d o u b l e x ) t a n g e n s d o u b l e t a n h ( d o u b l e x ) t a n g e n s h y p e r b o l i c u s

12 Die Mathematikbibliothek math.h II, Konstanten 171 M_E E, d i e B a s i s d e s n a t u e r l i c h e n o g a r i t h m u s M_OG2E log_2 (E) M_OG10E log_10 (E) M_N2 l n ( 2 ) M_N10 l n ( 1 0 ) M_PI P i M_PI_2 P i /2 M_PI_4 P i /4 M_1_PI 1/ P i M_2_PI 2/ P i M_2_SQRTPI 2/ S q r t ( P i ) M_SQRT2 Wurzel von 2 M_SQRT1_2 Wurzel von 1/2

13 Anwendung: Newtonverfahren 172 Aufgabenstellung: Gegeben sei eine Funktion f R R, gesucht ist eine Nullstelle x 0 : f ˆx 0 0. ösungsidee: Taylorentwicklung um x 0 : 0 f ˆx 0 f ˆx ˆx 0 x f œˆx Oˆx 0 x 2, falls f œœˆξ B c ξ > ˆx 0, x. Umformen nach x 0 ergibt x 0 x f ˆx f œˆx Oˆx 0 x 2, Ô Iterationsidee: x n1 x n f ˆx n f œˆx n.

14 Newtonverfahren newton.c 173 /* newton. c */ #i n c l u d e < s t d i o. h> // Ein und Ausgabe #i n c l u d e <math. h> // M a t h e m a t i k f u n k t i o n e n c o n s t d o u b l e e p s =1.0 e 6; d o u b l e f u n c ( d o u b l e x ) { r e t u r n s i n ( x ) x * x / 2. 0 ; d o u b l e d f u n c ( d o u b l e x ) { r e t u r n c o s ( x )x ;

15 Newtonverfahren newton.c 174 i n t main ( ) { d o u b l e xn, d e l t a ; i n t n =0; // xn = 1. 0 ; xn = ; do { n ++; d e l t a = f u n c ( xn ) / d f u n c ( xn ) ; xn=xn d e l t a ; p r i n t f ( "x_%i = %f, d e l t a = %f \n", n, xn, d e l t a ) ; w h i l e ( f a b s ( d e l t a )> e p s ) ; p r i n t f ( " f e r t i g! \ n" ) ; r e t u r n 0 ;

16 Kommandozeilenargumente 175 Bisher wurde die Funktion main durch void main (void) { Anweisungen oder int main (void) { Anweisungen deniert. Will man bereits beim Programmstart Argumente übergeben, so muss man die Funktion main folgendermaÿen denieren: int main ( int argc, char *argv []) { Anweisungen Dabei ist argc die Anzahl der übergebenen Argumente und argv ist ein Array von Zeigern, welche auf den Anfang eines als String übergegebenen Kommandozeilenarguments zeigen. argv[0] enthält den Programmnamen.

17 Kommandozeilenargumente Beispielprogramm 176 #i n c l u d e < s t d i o. h> /* a r g u m e n t s. c Programm, w e l c h e s s e i n e K o m m a n d o z e i l e n a r g u m e n t e a u s g i b t */ i n t main ( i n t argc, c h a r * a r g v [ ] ) { p r i n t f ( " D i e s e s Programm h e i s s t %s \n", a r g v [ 0 ] ) ; p r i n t f ( " Es e r h i e l t %d Parameter : \n", argc 1) ; f o r ( i n t i =1; i < a r g c ; i ++) p r i n t f ( "\ t %d. P arameter : %s \n", i, a r g v [ i ] ) ; r e t u r n 0 ;

18 Kommandozeilenargumente Beispielprogramm 177 #i n c l u d e < s t d i o. h> #i n c l u d e < s t d l i b. h> i n t main ( i n t argc, c h a r * a r g v [ ] ) { i f ( a r g c! = 2 ) { p r i n t f ( " A u f r u f : %s dim \n", a r g v [ 0 ] ) ; // i n t dim= a r g v [ 1 ] ; // i n t dim =( i n t ) a r g v [ 1 ] ; i n t dim= a t o i ( a r g v [ 1 ] ) ; p r i n t f ( " D i m e n s i o n : %s \n", a r g v [ 1 ] ) ; p r i n t f ( " D i m e n s i o n : %d\n", dim ) ; d o u b l e m a t r i x [ dim ] [ dim ] ; p r i n t f ( " s i z e o f ( m a t r i x ) = % l i \n", s i z e o f ( m a t r i x ) ) ; r e t u r n 0 ;

19 Dynamische Speicherallokation 178 Statische Felder sind oft zu unexibel. Ausweg: Dynamische Speicherallokation. Die Funktion malloc(n) liefert einen Zeiger auf die Startadresse eines n Byte groÿen Speicherbereichs, der dem Programm zur Verfügung gestellt wird. calloc(num, size) alloziert Speicherplatz für num Objekte der Gröÿe size Bytes und initialisiert alle Objekte mit Nullen. realloc(ptr,n) ändert die Gröÿe des Speicherbereichs, auf den der Zeiger ptr zeigt. free(ptr) gibt den Speicherbereich, auf den ptr zeigt, wieder frei.

20 Dynamische Speicherallokation 179 Rückgabetyp von malloc und calloc ist ein Zeiger auf leeren Datentyp, void *, der je nach Verwendungszweck umgewandelt (cast) werden muss. Beispiel: i n t * f e l d =( i n t *) m a l l o c ( n* s i z e o f ( i n t ) ) ; Vorsicht: C hat im Gegensatz zu anderen Sprachen (wie z.b. Java) keine automatische Speicherverwaltung, d.h. der Speicher muss explizit wieder freigegeben werden.

21 Dynamische Speicherallokation Beispiel 180 /* a l l o c. c */ #i n c l u d e < s t d i o. h> #i n c l u d e < s t d l i b. h> i n t main ( ) { d o u b l e * v p t r ; // Z e i g e r a u f d o u b l e F e l d i n t n ; // aenge d e s F e l d s p r i n t f ( "Wie g r o s s s o l l e n d i e V e k t o r e n s e i n?" ) ; s c a n f ( "%u", &n ) ; v p t r = ( d o u b l e *) m a l l o c ( n* s i z e o f ( d o u b l e ) ) ; i f ( v p t r == NU ) { p r i n t f ( "Zu w e n i g S p e i c h e r! \ n" ) ; e x i t ( 1 ) ; // Programm a b b r e c h e n v p t r [ 0 ] = 0. 0 ; // i r g e n d w a s m i t v p t r machen v p t r [ n 1]= v p t r [ 0 ] ; f r e e ( v p t r ) ; // n i c h t v e r g e s s e n : F r e i g e b e n! r e t u r n 0 ;

22 Dynamische Speicherallokation Beispiel II 181 /* dynmat. c */ #i n c l u d e < s t d i o. h> #i n c l u d e < s t d l i b. h> i n t main ( ) { u n s i g n e d i n t n, i, j ; d o u b l e *M; // f u e r M a t r i x p r i n t f ( "n x n M a t r i x b i t t e n e i n g e b e n : " ) ; s c a n f ( "%u", &n ) ; // S p e i c h e r h o l e n M = ( d o u b l e *) m a l l o c ( n*n* s i z e o f ( d o u b l e ) ) ; i f ( M == NU ) { p r i n t f ( "Zu w e n i g S p e i c h e r! \ n" ) ; e x i t ( 1) ; // Programm a b b r e c h e n

23 Dynamische Speicherallokation Beispiel II 182 f o r ( i = 0 ; i < n ; i ++) { // E i n h e i t s m a t r i x e r z e u g e n f o r ( j =0; j < n ; j ++) { i f ( i == j ) M[ i *n+ j ] = 1. 0 ; e l s e M[ i *n+ j ] = 0. 0 ; f r e e (M) ; r e t u r n 0 ;

24 Dynamische Speicherallokation Beispiel III 183 /* dynmat2. c */ #i n c l u d e < s t d i o. h> #i n c l u d e < s t d l i b. h> i n t main ( ) { u n s i g n e d i n t n, i, j ; d o u b l e **M; // f u e r M a t r i x p r i n t f ( "n x n M a t r i x b i t t e n e i n g e b e n : " ) ; s c a n f ( "%u", &n ) ; //M i s t F e l d a u s Z e i g e r n d e s Typs d o u b l e M = ( d o u b l e **) m a l l o c ( n* s i z e o f ( d o u b l e *) ) ; i f (M == NU) { p r i n t f ( "Zu w e n i g S p e i c h e r! \ n" ) ; e x i t ( 1) ; // Programm a b b r e c h e n

25 Dynamische Speicherallokation Beispiel III 184 f o r ( i = 0 ; i < n ; i ++) { // S p e i c h e r f u e r Z e i l e n / S p a l t e n h o l e n M[ i ] = ( d o u b l e *) m a l l o c ( n * s i z e o f ( d o u b l e ) ) ; i f ( M[ i ] == NU ) { p r i n t f ( "Zu w e n i g S p e i c h e r! \ n" ) ; f o r ( j = 0 ; j < i ; j ++) // Aufraeumen f r e e (M[ j ] ) ; f r e e (M) ; e x i t ( 1) ; // E i n h e i t s m a t r i x e r z e u g e n f o r ( i = 0 ; i < n ; i ++) { f o r ( j = 0 ; j < n ; j ++) { i f ( i == j ) M[ i ] [ j ] = 1. 0 ; e l s e M[ i ] [ j ] = 0. 0 ;

26 Dynamische Speicherallokation Beispiel III 185 // S p e i c h e r f r e i g e b e n f o r ( i = 0 ; i < n ; i ++) f r e e ( M[ i ] ) ; f r e e ( M ) ; r e t u r n 0 ;

27 Verkettete isten I 186 Eine Struktur darf sich selbst nicht als Element enthalten, wohl aber einen Zeiger auf sich selbst. Strukturen, welche Zeiger auf sich selbst enthalten, nennt man rekursive Strukturen. Sollen exibel und dynamisch Elemente eines Datentyps angelegt werden können, die alle in einer iste zusammengefasst sind, bieten sich verkettete isten an. Eine einfach verkettete iste ist das einfachste Beispiel einer rekursiven Struktur.

28 Verkettete isten II 187 Jeder Knoten enthält nicht nur die Daten, sondern auch einen Zeiger auf seinen Nachfolgeknoten. Der einzige Knoten, der bekannt sein muss, ist der erste, der sogenannte Ankerknoten oder Kopf der iste. Im Gegensatz zu Feldern liegen die einzelnen Elemente (Knoten) einer iste nicht notwendig hintereinander im Speicher. Der Nachfolgezeiger des letzten Knotens in der iste zeigt auf NU. Andere Varianten: (1) Der letzte Knoten zeigt auf den ersten (Ringschluss). (2) Es gibt einen ausgezeichneten letzten Knoten, der auf sich selbst zeigt (sicheres Abschlusselement). Wird für ein eektives Arbeiten eine freiere Navigation benötigt, dann ist die Verwendung einer doppelt verketteten iste sinnvoll, in der jeder Knoten auch einen Zeiger auf seinen Vorgänger enthält.

29 Verkettete isten III 188 Einfach verkettete iste: s t r u c t node { TYP VAR_1 ;... TYP VAR_N; s t r u c t node * n e x t ; ; Doppelt verkettete iste: s t r u c t dnode { TYP VAR_1 ;... TYP VAR_N; s t r u c t dnode * p r e v ; s t r u c t dnode * n e x t ; ;

30 Verkettete isten III 189 Erstellung des Ankers: s t r u c t node * head =( s t r u c t node *) m a l l o c ( s i z e o f ( s t r u c t node ) ) ; head > n e x t =NU ; Neuen Knoten einfügen: s t r u c t node * newnode =( s t r u c t node *) m a l l o c ( s i z e o f ( s t r u c t node ) ) ; newnode > n e x t =head > n e x t ; head > n e x t =newnode ; Element entfernen, z.b. Kopf: s t r u c t node * t o d e l =head ; // Z e i g e r z w i s c h e n s p e i c h e r n head=head > n e x t ; // V o r s i c h t, d a r f n i c h t NU s e i n f r e e ( t o d e l ) ;

31 Verkettete isten Beispielprogramm 190 /* l i s t. c */ #i n c l u d e < s t d i o. h> #i n c l u d e < s t r i n g. h> #i n c l u d e < s t d l i b. h> s t r u c t node { c h a r name [ 3 0 ] ; s t r u c t node * n e x t ; // Z e i g e r a u f n a e c h s t e s E l e m e n t ; s t r u c t node * head ; // Anker, g l o b a l e V a r i a b l e /* F u n k t i o n s d e k l a r a t i o n e n */ v o i d i n i t i a l i z e ( v o i d ) ; v o i d i n s e r t ( c h a r *name ) ; v o i d o u t p u t ( v o i d ) ; v o i d d e l e t e ( v o i d ) ;

32 Verkettete isten Beispielprogramm 191 /* Hauptprogramm */ i n t main ( ) { c h a r name [ 3 0 ] ; i n i t i a l i z e ( ) ; // i s t e i n i t i a l i s i e r e n p r i n t f ( " Geben s i e Namen e i n ( Ende mit e e r z e i l e ) : \ n" ) ; w h i l e ( 1 ) { f g e t s ( name, 3 0, s t d i n ) ; // E i n l e s e n d e s S t r i n g s name i f ( s t r l e n ( name ) == 1) b r e a k ; i n s e r t ( name ) ; // E l e m e n t e i n f u e g e n o u t p u t ( ) ; // i s t e a u s g e b e n d e l e t e ( ) ; // i s t e l o e s c h e n r e t u r n 0 ;

33 Verkettete isten Beispielprogramm 192 /* i s t e i n i t i a l i s i e r e n */ v o i d i n i t i a l i z e ( v o i d ) { // S p e i c h e r a l l o k a t i o n head = ( s t r u c t node *) m a l l o c ( s i z e o f ( s t r u c t node ) ) ; i f ( head == NU ) { p r i n t f ( " N i c h t genug S p e i c h e r! \ n" ) ; e x i t ( 1 ) ; head > n e x t = NU ;

34 Verkettete isten Beispielprogramm 193 /* E l e m e n t e i n f u e g e n am Ende */ v o i d i n s e r t ( c h a r *name ) { s t r u c t node *p, * newnode ; // S p e i c h e r a l l o k a t i o n newnode = ( s t r u c t node *) m a l l o c ( s i z e o f ( s t r u c t node ) ) ; i f ( newnode == NU ) { p r i n t f ( " Not enough memory! \ n" ) ; e x i t ( 1 ) ; // Suche d a s l e t z t e E l e m e n t p = head ; w h i l e ( p> n e x t!= NU ) { p = p> n e x t ; s t r c p y ( newnode >name, name ) ; //Namen i n E l e m e n t k o p i e r e n newnode > n e x t = NU ; // newnode n e u e s l e t z t e s E l e m e n t p> n e x t = newnode ; //.. a n h a e n g e n

35 Verkettete isten Beispielprogramm 194 /* i s t e a u s g e b e n */ v o i d o u t p u t ( v o i d ) { s t r u c t node *p ; p = head > n e x t ; w h i l e ( p!= NU ) { p r i n t f ( "%s ", p>name ) ; p = p> n e x t ;

36 Verkettete isten Beispielprogramm 195 /* i s t e l o e s c h e n */ v o i d d e l e t e ( v o i d ) { s t r u c t node * d e l, *p ; p = head > n e x t ; //vom Anker s t a r t e n w h i l e ( p!= NU ) { d e l =p ; // E l e m e n t z w i s c h e n s p e i c h e r n p=p> n e x t ; //.. a u s i s t e e n t f e r n e n f r e e ( d e l ) ; // S p e i c h e r f r e i g e b e n f r e e ( head ) ; // Anker f r e i g e b e n

37 Bis morgen! 196

Programmierkurs C. Sommersemester 2011, 6. Vorlesung. Stuttgart, den 18. April Heiko Schulz. University of Stuttgart, Math.

Programmierkurs C. Sommersemester 2011, 6. Vorlesung. Stuttgart, den 18. April Heiko Schulz. University of Stuttgart, Math. Programmierkurs C Sommersemester 2011, 6. Vorlesung Stuttgart, den 18. April 2011 Heiko Schulz University of Stuttgart, Math. department Rückschau 197 Caesar-Chire, komplexe Zahlen, Mathematik-Bibliothek

Mehr

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss

Mehr

Dynamische Speicherverwaltung

Dynamische Speicherverwaltung Dynamische Speicherverwaltung INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Bisjetzt Beispiel Ranglistenprogramm für Sportveranstaltungen Besser - genaue Anzahl Teilnehmer

Mehr

U8 7. Übung U8 7. Übung

U8 7. Übung U8 7. Übung U8 7. Übung U8 7. Übung Dynamische Speicherverwaltung Generisches Sortieren Aufgabe 7 U8.1 U8-1 Dynamische Speicherverwaltung U8-1 Dynamische Speicherverwaltung Erzeugen von Feldern der Länge n: mittels:

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

Dynamisches Speichermanagement

Dynamisches Speichermanagement Dynamisches Speichermanagement Proseminar C-Programmierung - Grundlagen und Konzepte Timo Minartz timo.minartz@informatik.uni-hamburg.de Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg

Mehr

C/C++-Programmierung

C/C++-Programmierung 1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung

Mehr

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 7: Matrizen, Vektoren und dynamische Speicherverwaltung Martin Nolte Abteilung für Angewandte Mathematik Universität Freiburg

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

Dynamische Speicherverwaltung

Dynamische Speicherverwaltung Dynamische Speicherverwaltung 1/ 23 Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Dynamische Speicherverwaltung 2/ 23 Gliederung 1 Allgemeines zur Speichernutzung 2 Ziele und Nutzen 3 Anwendung in

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Einführung in C. EDV1-04C-Einführung 1

Einführung in C. EDV1-04C-Einführung 1 Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags

Mehr

Programmieren in C SS Vorlesung 4, Dienstag 14. Mai (Strings, Zeiger, Allokation, Strukturen)

Programmieren in C SS Vorlesung 4, Dienstag 14. Mai (Strings, Zeiger, Allokation, Strukturen) Programmieren in C SS 2019 Vorlesung 4, Dienstag 14. Mai 2019 (Strings, Zeiger, Allokation, Strukturen) Prof. Dr. Peter Thiemann Professur für Programmiersprachen Institut für Informatik Universität Freiburg

Mehr

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Typ : void* aktuelle Parameter Pointer von beliebigem Typ 2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben

Mehr

C- Kurs 09 Dynamische Datenstrukturen

C- Kurs 09 Dynamische Datenstrukturen C- Kurs 09 Dynamische Datenstrukturen Dipl.- Inf. Jörn Hoffmann jhoffmann@informaak.uni- leipzig.de Universität Leipzig InsAtut für InformaAk Technische InformaAk Flexible Datenstrukturen Institut für

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Dynamische Speicherverwaltung

Dynamische Speicherverwaltung Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................

Mehr

Arrays (Felder/Vektoren)

Arrays (Felder/Vektoren) Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff

Mehr

AlgoDat Fragen zu Vorlesung und Klausur

AlgoDat Fragen zu Vorlesung und Klausur AlgoDat Fragen zu Vorlesung und Klausur Hochschule Fulda FB AI Sommersemester 2018 http://ad.rz.hs-fulda.de Peter Klingebiel, HS Fulda, AI Vorab: Was ist wichtig? AlgoDat - Fragen - Peter Klingebiel -

Mehr

Crashkurs C++ - Teil 1

Crashkurs C++ - Teil 1 Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik

Mehr

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!

Mehr

Dynamischer Speicher

Dynamischer Speicher Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

DAP2 Praktikum Blatt 1

DAP2 Praktikum Blatt 1 Fakultät für Informatik Lehrstuhl 11 / Algorithm Engineering Prof. Dr. Petra Mutzel, Carsten Gutwenger Sommersemester 2009 DAP2 Praktikum Blatt 1 Ausgabe: 21. April Abgabe: 22. 24. April Kurzaufgabe 1.1

Mehr

Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.

Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk. Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

Mehr

Betriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.

Betriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk. Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

Mehr

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18 C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen

Mehr

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005 Universität Mannheim Fakultät für Mathematik und Informatik Lehrstuhl für Praktische Informatik IV Prof. Dr. Wolfgang Effelsberg Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester

Mehr

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente

Mehr

INE1 Arrays, Zeiger, Datenstrukturen

INE1 Arrays, Zeiger, Datenstrukturen INE1 Arrays, Zeiger, Datenstrukturen Arrays Felder von Elementen gleichen Typs Verwenden von Adressen: Zeiger Datenstrukturen mit struct Zeiger auf Datenstrukturen Spezielle Zeiger und komplexe Deklarationen

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen

Mehr

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher Arvid Terzibaschian 1 Zusammengesetzte Datentypen 2 Wozu zusammengesetzte Datentypen? Anforderung: Sie sollen ein Kundenverzeichnis

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

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

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16 C++ Teil 5 Sven Groß IGPM, RWTH Aachen 8. Mai 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai 2015 1 / 16 Themen der letzten Vorlesung Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung

Mehr

C++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15

C++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15 C++ Teil 6 Sven Groß 23. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 23. Nov 2015 1 / 15 Themen der letzten Vorlesung const-deklaration Referenzen Zeiger Felder Sven Groß (IGPM, RWTH Aachen) C++

Mehr

K Ergänzungen zur Einführung in C

K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K Ergänzungen zur Einführung in C K.1 Zeiger, Felder und Zeichenketten Zeichenketten sind Felder von Einzelzeichen (char), die in der internen Darstellung durch ein \0

Mehr

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik Outline 1 Einleitung 2 Einführung in C 3 Fortgeschrittenes in C 4 Einführung in Emacs Lisp 5 Einführung in Prolog 6 Formale Semantik Imperative Programmierung Imperatives Paradigma Ziel: Ablaufbeschreibung

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Zeiger (engl. Pointer)

Zeiger (engl. Pointer) Zeiger (engl. Pointer) Zeiger Ein Zeiger (engl. Pointer) speichert eine Adresse, unter der ein Wert im Speicher des Computers gespeichert werden kann. Eine Variable im Gegensatz speichert einen Wert. Der

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

F Zeiger, Felder und Strukturen in C

F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 3 Typen und Speicherverwaltung Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur (2) Kernighan and Ritchie, The

Mehr

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free() Übungsziele: Skript: In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten

Mehr

7. Organisation von Informationen

7. Organisation von Informationen Computeranwendung in der Chemie Informatik für Chemiker(innen) 7. Organisation von Informationen Jens Döbler 2003 "Computer in der Chemie", WS 2003-04, Humboldt-Universität VL7 Folie 1 Grundlagen Programme

Mehr

Eine einfache Speicherverwaltung 211

Eine einfache Speicherverwaltung 211 Eine einfache Speicherverwaltung 211 Im folgenden wird eine sehr einfache Speicherverwaltung vorgestellt, die das Belegen und Freigeben von Speicher unterstützt, freigegebene Speicherflächen wieder zur

Mehr

6 ZEIGERARITHMETIK - ALLGEMEINES

6 ZEIGERARITHMETIK - ALLGEMEINES 6 ZEIGERARITHMETIK - ALLGEMEINES Leitideen: Der Zeigertyp ermöglicht eine Zeigerarithmetik, bei der die Addition von 1 die Adresse der nächsten Komponente eines C-Vektors angibt. Bei C-Vektoren wird nur

Mehr

Probeklausur Name: (c)

Probeklausur Name: (c) Einführung in die Praktische Informatik 30.1.2013 Probeklausur Name: Teil I: Datentypen (20 Punkte) Lösen sie die Probleme, indem sie die korrekten Lösungen ankreuzen bzw. in die vorgesehenen Freiräume

Mehr

Informatik II: Algorithmen und Datenstrukturen SS 2013

Informatik II: Algorithmen und Datenstrukturen SS 2013 Informatik II: Algorithmen und Datenstrukturen SS 2013 Vorlesung 7a, Dienstag, 4. Juni 2013 (Verkettete Listen, Vergleich mit dynam. Feldern) Prof. Dr. Hannah Bast Lehrstuhl für Algorithmen und Datenstrukturen

Mehr

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer) Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern

Mehr

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung

Bereits behandelt: Einfache Datentypen / Variablen. Schleifen und Verzweigungen. Funktionen. Heute: Felder, Zeiger, Referenzen. Freispeicherverwaltung Kompaktkurs C++ Themen C 1 Bereits behandelt: Einfache Datentypen / Variablen Schleifen und Verzweigungen Funktionen Heute: Felder, Zeiger, Referenzen Freispeicherverwaltung Zeichenketten Kommandozeilenargumente

Mehr

Anregungen zu Übung 2

Anregungen zu Übung 2 Anregungen zu Übung 2 Allgemeine Informatik II - SS 2007 Was sind Arrays und wie kann man sie verwenden? Ein Array ist ein spezieller Datentyp, der mehrere Werte zu einer Einheit zusammenfasst. Er ist

Mehr

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen

Mehr

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt Zeichenketten (1) Literale Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt "Hallo Welt" Mehrere solcher Literale gelten als eine Zeichenkette, wenn sie nur durch Whitespaces (Leerzeichen,

Mehr

Dynamische Datenstrukturen

Dynamische Datenstrukturen Dynamische Datenstrukturen B-Bäume größere Datenmengen verwalten Extern speichern Art der Speicherung berücksichtigen sonst kein optimaler Datenzugriff möglich Art der Speicherung großer Datenmengen Magnetplatten

Mehr

Spezielle Datenstrukturen

Spezielle Datenstrukturen Spezielle Datenstrukturen Stapel (Stack) Beschreibung der Datenstruktur Stapel Ein Stapel (engl. Stack), auch Stapelspeicher oder Keller bzw. Kellerspeicher genannt, ist eine Datenstruktur, in der Daten

Mehr

Praxis der Programmierung

Praxis der Programmierung Arrays, Pointer, Parameterbergabe Institut für Informatik und Computational Science Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Arrays (Felder/Vectoren) 2 Arrays: Motivation Gegeben:

Mehr

Funktionen, Zeiger und Arrays in C Software Entwicklung 1

Funktionen, Zeiger und Arrays in C Software Entwicklung 1 Funktionen, Zeiger und Arrays in C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller 1 Funktionen Mit Hilfe von Funktionen kann man (wie mit Prozeduren bzw. Methoden in Java) eine Problemstellung

Mehr

Praxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung"

Praxisorientierte Einführung in C++ Lektion: Dynamische Speicherverwaltung Praxisorientierte Einführung in C++ Lektion: "Dynamische Speicherverwaltung" Christof Elbrechter Neuroinformatics Group, CITEC May 15, 2014 Christof Elbrechter Praxisorientierte Einführung in C++ May 15,

Mehr

Informatik I (D-MAVT)

Informatik I (D-MAVT) Informatik I (D-MAVT) Übungsstunde 8, 22.4.2009 simonmayer@student.ethz.ch ETH Zürich Aufgabe 1: Pointer & Structs Schauen wir s uns an! Aufgabe 2: Grossteils gut gemacht! Dynamische Arrays! Sortieren:

Mehr

Felder fester Länge (1)

Felder fester Länge (1) Felder fester Länge (1) Felder: Aneinanderreihung von mehreren Variablen gleichen Typs Ursprünglich als 1-dimensionale Organisationsform gedacht, aber auch zwei- und höherdimensional (Matrizen u.ä.) Benutzung

Mehr

U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm

U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm U3 3. Übung U3 3. Übung Besprechung Aufgabe 1 Pointer Register und Ports U3.1 U3-1 Zeiger U3-1 Zeiger 1 Einordnung Konstante: a 0110 0001 Variable: a Zeiger-Variable (Pointer): a char *p = &a; p U3.2 2

Mehr

Besprechung Aufgabe 1. Pointer. Register und Ports. SPiC - Ü U3.1

Besprechung Aufgabe 1. Pointer. Register und Ports. SPiC - Ü U3.1 U3 3. Übung U3 3. Übung Besprechung Aufgabe 1 Pointer Register und Ports U3.1 U3-1 Zeiger U3-1 Zeiger 1 Einordnung Konstante: a 0110 0001 Variable: a Zeiger-Variable (Pointer): a char *p = &a; p U3.2 2

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher

Mehr

Zeiger in C und C++ Zeiger in Java und C/C++

Zeiger in C und C++ Zeiger in Java und C/C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,

Mehr

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. ) Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:

Mehr

Speicherverwaltung in C

Speicherverwaltung in C Speicherverwaltung in C Tobias Gutzmann, Le Xuan Khanh, Robert Hartmann 19.04.2005 Typeset by FoilTEX Inhalt Übersicht der wichtigsten Befehle malloc, free, realloc alloca, obstack, brk Speicherverwaltung

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

2.8 Klassen. Nichtgleichartige Elemente können in Klassen zu einem neuen Typ zusammengefasst werden. Beispiel: Die drei Komponenten

2.8 Klassen. Nichtgleichartige Elemente können in Klassen zu einem neuen Typ zusammengefasst werden. Beispiel: Die drei Komponenten 2.8 Klassen Frage: Arrays fassen gleichartige Elemente (d.h. Elemente von gleichem Typ) zusammen. Wie kann man nichtgleichartige Elemente zu einem neuen Typ zusammenfassen? Nichtgleichartige Elemente können

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung Anweisungen durch Methodenaufrufe Ausgabe auf der Konsole System.out.println(...); Benutzereingabe einlesen = scanner.nextdatentyp(); Mathematische Funktionen Math.sqrt( ), Math.sin( ), Math.random(),

Mehr

U4-1 Aufgabe 3: einfache malloc-implementierung

U4-1 Aufgabe 3: einfache malloc-implementierung U4 3. Übung U4 3. Übung Besprechung der Aufgabe 2: wsort Aufgabe 3: malloc-implementierung Ziele der Aufgabe Zusammenhang zwischen "nacktem Speicher" und typisierten bereichen verstehen Funktion aus der

Mehr

Dynamischer Speicher

Dynamischer Speicher In diesem Abschnitt werden (1) Felder fester Länge und Dynamischer Speicher (2) Felder mit variabler Länge, die sich erst zu Laufzeit des Programms ergibt gegenübergestellt Für (2) benötigt man Funktionen

Mehr

Teil II. Literatur zur C-Programmierung:

Teil II. Literatur zur C-Programmierung: Teil II 2Kurzeinführung in die Programmiersprache C Literatur zur C-Programmierung: Darnell, Margolis. C: A Software Engineering Approach. Springer 1991 Kernighan, Ritchie. The C Programming Language.

Mehr

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11 C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen

Mehr

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C++ Notnagel. Ziel, Inhalt. Programmieren in C++ C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen

Mehr

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13 C++ Teil 7 Sven Groß 30. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 30. Nov 2015 1 / 13 Themen der letzten Vorlesung Zeiger, Felder (Wdh.) dynamische Speicherverwaltung Sven Groß (IGPM, RWTH Aachen)

Mehr

8. Referenzen und Zeiger

8. Referenzen und Zeiger 8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen

Mehr

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18) Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Mehr

Funktionen: Rückgabewert

Funktionen: Rückgabewert Funktionen: Rückgabewert Jede Funktion in C++ (außer Konstruktoren und Destruktoren siehe später) MUSS einen Rückgabewert-Typ vereinbaren. Gibt sie nichts zurück, muss der Rückgabetyp void sein. Jede return-anweisung

Mehr

Informatik II - Tutorium 5

Informatik II - Tutorium 5 Informatik II - Tutorium 5 Vincent Becker vincent.becker@inf.ethz.ch 28.03.2018 Vincent Becker 28.03.2018 1 Neue Webseite Vincent Becker 28.03.2018 3 Allgemeines Java-Konvention: Alle Variablen- und Methodennamen

Mehr

Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.

Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk. Betriebssysteme Tafelübung 4. Speicherverwaltung https://ess.cs.tu-dortmund.de/de/teaching/ss2018/bs/ Olaf Spinczyk olaf.spinczyk@tu-dortmund.de https://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen

Mehr

10 Die Programmiersprache C99: Zusammenfassung

10 Die Programmiersprache C99: Zusammenfassung 10 Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 25. September 2014, 18:40 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html

Mehr

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen

Mehr

7. Verkettete Strukturen: Listen

7. Verkettete Strukturen: Listen 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):

Mehr

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

Propädeutikum. Dipl.-Inf. Frank Güttler Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik

Mehr

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen. Mariano Zelke. Sommersemester 2012 Datenstrukturen Mariano Zelke Sommersemester 2012 Kapitel 3: Elementare Datenstrukturen Mariano Zelke Datenstrukturen 2/18 Einfach verkettete Listen Mariano Zelke Datenstrukturen 3/18 Eine Zeiger-Implementierung

Mehr

Informatik II Übung 5

Informatik II Übung 5 Informatik II Übung 5 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 28.3.2018 Carina Fuss 28.3.2018 1 Übung 5 Administratives/Tipps zu Eclipse Nachbesprechung Übung 4 kurze Demo zu Stacks Java Pakete Call

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Einführung in C Bieniusa Software Entwicklung 1 2/ 50 Warum C in SE1? Meist verwendete Sprache weltweit Viele wichtige

Mehr

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische

Mehr

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C Übersicht Speichertypen Speicherverwaltung und -nutzung Speichertypen Beim Laden eines Programms in den Speicher (Programmausführung) kommen 3 verschiedene Speicherbereiche zum Einsatz: Text Segment (Code

Mehr

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08 Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für

Mehr

INE1 Speicherverwaltung und zweidimensionale Arrays. Speicherorganisation Dynamischer Speicher in C Zweidimensionale Arrays

INE1 Speicherverwaltung und zweidimensionale Arrays. Speicherorganisation Dynamischer Speicher in C Zweidimensionale Arrays INE1 Speicherverwaltung und zweidimensionale Arrays Speicherorganisation Dynamischer Speicher in C Zweidimensionale Arrays 1 Speicherorganisation in C 2 von 48 Speicherorganisation Anlegen eines Arrays:

Mehr