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

Größe: px
Ab Seite anzeigen:

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

Transkript

1 Ü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 3. beliebiger Arrays Kapitel: 69 Semester: Wintersemester 2017/18 Betreuer: Kevin, Theo, Thomas und Ralf Synopsis: Endlich wird es spannend :-) Einige von euch haben schon bemerkt, dass man bei den Arrays immer schon vorher wissen muss, wie viele Elemente man benötigt. Manchmal weiß man das aber nicht. In diesem Übungspaket üben wir, Speicher dynamisch zu alloziieren und auch wieder freizugeben. Wenn man sich daran erst einmal gewöhnt hat, ist es ganz praktisch. Aber das ist ja immer so...

2 Teil I: Stoffwiederholung Aufgabe 1: Motivation Auf den ersten Blick mag die dynamische Speicherverwaltung überflüssig wie ein Kropf zu sein, denn wir können ja alle Variablen, insbesondere Arrays, schon zur Übersetzungszeit festlegen. Erste Antwort: sie ist natürlich nicht überflüssig, würden wir sie sonst behandeln ;-)? Überlege und beschreibe in eigenen Worten, in welchen Fällen eine dynamische Speicherverwaltung notwendig bzw. nützlich ist. Die Antwort steht eigentlich schon in der Fragestellung: denn wir können ja alle Variablen insbesondere Arrays schon zur Übersetzungszeit festlegen. Das können wir in vielen Fällen nämlich genau nicht. Beispielsweise wissen wir nicht, wie viele Zahlen wir im Rahmen des Programms verarbeiten müssen. Oder wir wissen nicht, wie lang die zu verarbeitenden Zeichenketten sind. Das heißt eben auch, dass wir die Größe eines Arrays eben nicht immer von vornherein wissen und unsere Arrays beim Schreiben des Programms definieren können. Entsprechend müssen wir uns damit abfinden, dass die dynamische Speicherverwaltung insbesondere bei Arrays auch bei uns zur Anwendung kommt. Aufgabe 2: Fragen zu den Grundlagen Für die dynamische Speicherverwaltung verwenden wir im Wesentlichen zwei Funktionen. Wie heißen diese Funktionen und welche Signaturen haben sie? Dynamische Speicherallokation: void * malloc( int size ) Dynamische Speicherfreigabe: void free( void * ptr ) Welche Datei muss man für diese Funktionen einbinden? In welchem Segment liegt der neue Speicher? Wie/in welcher Form wird der Speicher zurückgegeben? Welchen Wert hat der Zeiger im Fehlerfalle? #include <stdlib.h> Auf dem Heap Als Zeiger auf das erste Byte Es ist ein Null-Zeiger Aufgabe 3: Ein einfaches Beispiel Im Folgenden betrachten wir eine kleine, nutzlose Beispielanwendung. Diese Anwendung fragt den Benutzer nach der Zahl der Parameter, die er benötigt. Anschließend alloziiert das Programm ein entsprechendes Array und, sofern dies erfolgreich war, initialisiert es die Elemente mit den Werten 0, 2, 4,... Einführung in die Praktische Informatik, Wintersemester 2017/

3 1 # include <stdio.h> 2 # include < stdlib.h> 3 4 int main ( int argc, char ** argv ) 5 { 6 int i, size, *p; 7 printf ( " wie viele int s benoetigst du? " ); 8 scanf ( "%d", & size ); 9 if ( size > 0 ) 10 { 11 p = malloc ( size * sizeof ( int ) ); 12 for ( i = 0; i < size ; i ++ ) 13 p[ i ] = i * 2; 14 printf ( " Kontrollausgabe :" ); 15 for ( i = 0; i < size ; i ++ ) 16 printf ( " %d", p[ i ] ); 17 printf ( "\n" ); 18 } 19 else printf ( " sorry, da kann ich nicht helfen \ n" ); 20 } Wir wollen nun von euch, dass ihr ein Speicherbildchen malt, in denen die Variablen i, size und p enthalten sind. Ebenso wollen wir den neu alloziierten Speicherbereich sowie die in den Zeilen 12 und 13 generierten Initialwerte sehen. Für das Beispiel nehmen wir an, dass der Nutzer die Zahl 3 eingegeben hat. Mit anderen Worten: Wie sieht der Arbeitsspeicher unmittelbar vor Ausführung der Programmzeile 14 aus? Segment: Stack Adresse Variable Wert 0xFE28 int * p : 0xF040 0xFE24 int size : 3 0xFE20 int i : 3 Segment: Heap Adresse Variable Wert 0xF048 int [ 2 ] : 4 0xF044 int [ 1 ] : 2 0xF040 int [ 0 ] : Wintersemester 2017/18, Einführung in die Praktische Informatik

4 Teil II: Quiz Aufgabe 1: Speicherallokation In der folgenden Tabelle stehen in den drei Spalten der Reihe nach das auszuführende Kommando, die angelegte Datenstruktur und die Zahl der Bytes, die diese im Arbeitsspeicher belegt. Dabei gehen wir davon aus, dass ein char 1 Byte, ein int sowie ein Zeiger jeweils 4 Bytes und ein double 8 Bytes im Arbeitsspeicher belegt. Vervollständige die fehlenden Spalten. Im Sinne eines etwas erhöhten Anspruchs haben wir noch die folgende Struktur: 1 struct bla { int bla_ bla ; double blub_ blub ; }; malloc()-aufruf Datenstruktur Größe malloc(3 * sizeof( int )) Array mit 3 ints 12 malloc(5 * sizeof( double )) Array mit 5 double 40 malloc( 12 ) Vermutlich ein Array mit 12 char 12 malloc(2 * sizeof(struct bla)) Array mit 2 struct bla Elementen 24 malloc(2 * sizeof(struct bla *)) Array mit 2 Zeigern auf auf Elemente 8 vom Typ struct bla malloc(5 * sizeof(char *)) Array mit 5 char-zeigern 20 malloc(13) ein char-array 13 malloc(6 * sizeof(double **)) ein Array mit 6 Zeigern auf double- Zeiger 24 Aufgabe 2: Speicherfreigabe Erkläre mit eigenen Worten, was folgende Funktion macht: 1 void tst_and_free ( void * p ) 2 { 3 if ( p!= 0 ) 4 free ( p ); 5 } Diese Funktion gibt Speicher wieder frei, da sie offensichtlich die Funktion free() aufruft. Allerding testet sie vorab, ob es sich um einen regulären Zeigerwert handelt. Mit anderen Worten: Diese Funktion vermeidet es, einen Null-Zeiger versehentlich freizugeben, da dies unter Umständen innerhalb von free() zu einem Programmabsturz führen könnte. Einführung in die Praktische Informatik, Wintersemester 2017/

5 Teil III: Fehlersuche Aufgabe 1: Fehler bei malloc() und free() Der berühmt-berüchtigte Manager Dr. M. al Loc fand die Idee mit den dynamischen Datenstrukturen so spannend, dass er es gleich einmal ausprobierte. Er wollte eine Funktion haben, die ihm ein Array mit size doubles erzeugt, wobei die einzelnen Elemente mit den Werten 0.0, 1.0,... initialisiert werden sollen. Am Ende soll der Speicher wieder freigegeben werden. Finde und korrigiere die Fehler: 1 # include < stdio. h > // for printf () und scanf () 2 # include < stdlib. h > // for malloc () and free () 3 4 double * mk_darray ( int n ) 5 { 6 int i; double d_a ; // compact due to space 7 if (( d_a = malloc ( n ))!= 0 ) 8 for ( i = 0; i < n; i ++ ) 9 d_a [ i ] = i; 10 return d_a ; 11 } int main ( int argc, char ** argv ) 14 { 15 int i, size ; double * dp; // compact due to space 16 printf (" wie viele parameter? "); scanf ("%d", & size ); 17 dp = mk_darray ( size ); 18 printf ( " hier das ergebnis :" ); 19 for ( i = 0; i < size ; i ++ ) 20 printf ( " %5.2 f", dp[ i ] ); 21 printf ( "\n" ); 22 free ( dp ); // free the memory 23 free ( dp ); // just to be absolutely sure 24 return 0; 25 } Zeile Fehler Erläuterung Korrektur 6 * fehlt Die Variable d a muss natürlich als Zeiger definiert werden, da malloc() einen Zeiger auf einen neuen Speicherbereich zurückgibt. *d a 29-4 Wintersemester 2017/18, Einführung in die Praktische Informatik

6 Zeile Fehler Erläuterung Korrektur 7 sizeof() fehlt Ein ganz typischer Fehler: In diesem Falle würde malloc() nur n Bytes bereitstellen. Wir benötigen aber n * sizeof(double) Bytes, was wir beim Aufruf von malloc() unbedingt berücksichtigen müssen. sizeof() ff. Test auf Null-Zeiger fehlt In Zeile 17 wird ein neuer Speicherplatz dynamisch alloziiert. Aber dies kann schief gehen, was durch einen Null-Zeiger angezeigt wird. Da man Null-Zeiger nicht dereferenzieren (auf die Inhalte zugreifen) darf, muss der nachfolgende Programmtext geklammert werden. if () /23 ein free() zu viel Programm mit Korrekturen: Einen zuvor alloziierten Speicherplatz darf man nur einmal freigeben. Das Ergebnis durch den zweiten Aufruf ist unbestimmt und kann hier oder später zu einem Programmabsturz führen. ein free() streichen 1 # include < stdio. h > // for printf () und scanf () 2 # include < stdlib. h > // for malloc () and free () 3 4 double * mk_darray ( int n ) 5 { 6 int i; double * d_a ; // compact due to space 7 if (( d_a = malloc ( n * sizeof ( double )))!= 0 ) 8 for ( i = 0; i < n; i ++ ) 9 d_a [ i ] = i; 10 return d_a ; 11 } int main ( int argc, char ** argv ) 14 { 15 int i, size ; double * dp; // compact due to space 16 printf (" wie viele parameter? "); scanf ("%d", & size ); 17 if ( dp = mk_darray ( size )) 18 { 19 printf ( " hier das ergebnis :" ); 20 for ( i = 0; i < size ; i ++ ) 21 printf ( " %5.2 f", dp[ i ] ); 22 printf ( "\n" ); 23 free ( dp ); 24 } 25 return 0; 26 } Einführung in die Praktische Informatik, Wintersemester 2017/

7 Teil IV: Anwendungen Aufgabe 1: Aneinanderhängen zweier Zeichenketten 1. Aufgabenstellung Entwickle eine Funktion, die als Eingabeparameter zwei Zeiger auf je eine Zeichenkette erhält, diese beiden Zeichenketten zu einer neuen Zeichenkette zusammenfügt und das Ergebnis als Zeiger auf diese zurückgibt. Beispiel: Aufruf: my strcat( "Prof.", "Weiss-Nicht" ) Ergebnis: "Prof. Weiss-Nicht" Diese Funktion kann wieder einfach mittels des argc/argv-mechanismus getestet werden. 2. Vorüberlegungen Was können wir aus der Aufgabenstellung direkt ablesen? 1. Wir müssen zwei Zeichenketten zusammenfügen, deren Längen wir zur Übersetzungszeit noch nicht wissen. 2. Daraus folgt, dass wir das Ergebnis nicht auf dem Stack ablegen können, sondern uns den benötigten Speicherplatz dynamisch vom Heap besorgen müssen. 3. Die neue Zeichenkette muss so lang sein, dass die beiden alten hinein passen, dann noch ein Leerzeichen und am Ende ein Null-Byte. 3. Pflichtenheft Aufgabe : Funktion zum Verknüpfen zweier Zeichenketten. Das Ergebnis wird auf dem Heap abgelegt. Parameter : Zwei Eingabeparameter p1 und p2 vom Typ char * Rückgabewert : Einen Zeiger auf eine neue Zeichenkette vom Typ char * 4. Testdaten Ähnlich wie in der Aufgabenstellung beschrieben. Bei Verwendung des argc/argv- Mechanismus nehmen wir argv[ 1 ] als ersten Namen und alle weiteren Parameter als zweiten Namen. Beispiel: Eingabe:./my-strcat Dr. Peter Maria Ausgabe: Dr. Peter Dr. Maria 29-6 Wintersemester 2017/18, Einführung in die Praktische Informatik

8 5. Implementierung Da wir den argc/argv-mechanismus schon eingehend geübt haben, können wir uns ganz auf die neu zu entwickelnde Funktion konzentrieren. Die wesentlichen Punkte standen schon in den Vorüberlegungen. Wir erhalten zwei Zeichenketten. Die Länge der neuen Zeichenkette muss die Summe der beiden eingehenden Zeichenketten sein, plus eins für das Leerzeichen und eins für das abschließende Null-Byte. Das lässt sich wie folgt ausdrücken: Funktion zum Aneinanderhängen von Zeichenketten Parameter: Pointer to Char: p1, p2 Variablen: Integer: len1, len2 Pointer to char: res // zwei laengenwerte // der rueckgabewert setze len1 = strlen( p1 ) setze len2 = strlen( p2 ) setze res = malloc(len1 + len2 + 2) wenn res 0 dann kopiere p1 an die Stelle res[ 0 ] kopiere ein Leerzeichen an die Stelle res[ len1 ] kopiere p2 an die Stelle res[len1 + 1] kopiere ein Null-Byte an die Stelle res[len len2] return res 6. Kodierung Unsere Funktion my strcat(): 1 # include <stdio.h> // for I/O 2 # include < string. h > // for strlen () und strcpy () 3 # include < stdlib. h > // for malloc () 4 5 char * my_strcat ( char * p1, char * p2 ) 6 { 7 char * res ; 8 int len1 = strlen ( p1 ), len2 = strlen ( p2 ); 9 if ( res = malloc ( len1 + len2 + 2 )) 10 { 11 strcpy ( res, p1 ); 12 res [ len1 ] = ; 13 strcpy ( res + len1 + 1, p2 ); 14 res [ len1 + len2 + 1] = \0 ; 15 } 16 return res ; 17 } Einführung in die Praktische Informatik, Wintersemester 2017/

9 Das ist unser Hauptprogramm zum Testen: 18 int main ( int argc, char ** argv ) 19 { 20 int i; 21 char * combi ; 22 for ( i = 2; i < argc ; i ++ ) 23 if ( combi = my_strcat ( argv [ 1 ], argv [ i ] )) 24 { 25 printf ( " my_strcat : %s \n", combi ); 26 free ( combi ); // otherwise : memory leak! 27 } 28 } 29-8 Wintersemester 2017/18, Einführung in die Praktische Informatik

10 Aufgabe 2: Verallgemeinertes strcat() 1. Aufgabenstellung In dieser Aufgabe soll die Funktion my strcat() der vorherigen Aufgabe erweitert werden. Statt nur zwei Zeichenketten zusammenzufügen, soll die Funktion diesmal in der Lage sein, beliebig viele Zeichenketten zu verarbeiten. Die einzelnen Zeichenketten sollen wieder mittels eines Leerzeichens voneinander getrennt werden. Natürlich muss die gesamte Zeichenkette wieder mit einem Null-Byte abgeschlossen werden. Innerhalb dieser Übungsaufgabe nennen wir diese Funktion my nstrcat() Beispiel: Bei Übergabe der drei Parameter "Frau", "Peter" und "Otti" soll das Ergebnis "Frau Peter Otti" lauten. Zum Testen bedienen wir uns wieder des argc/argv-mechanismus. 2. Vorüberlegungen Auch hier ist es wieder sinnvoll, ein paar Vorüberlegungen anzustellen. Doch diesmal werden wir diese als Fragen formulieren, die ihr beantworten müsst. Erfordert die Aufgabenstellung eine dynamische Bearbeitung mittels malloc()? Falls ja, warum? Ja, unbedingt Anzahl und Längen der Zeichenketten sind unbekannt Falls nein, warum nicht? Die Aufgabe wäre in einem anderen Übungspaket ;-) Wie übergeben wir die Zeichenketten? Welchen Datentyp hat dieser Parameter? Benötigen wir noch einen zweiten Paramenter? Falls ja, welchen Typ hat dieser Parameter? Welchen Typ hat die Funktion? Wie lautet die vollständige Funktionsdeklaration? Wie bestimmen wir die Länge einer Zeichenkette? Wie lang ist die Ergebnis- Zeichenkette? In einem Array verpackt Array of Pointer to Char: char ** Ja int size char * char *my nstrcat( char **str arr, int size ) len = strlen( zeichenkette ) size 1 i=0 strlen( zeichenkette[ i ] ) Einführung in die Praktische Informatik, Wintersemester 2017/

11 3. Pflichtenheft Aufgabe : Funktion zum Verknüpfen von n Zeichenketten. Das Ergebnis wird auf dem Heap abgelegt. Parameter : Zwei Eingabeparameter: char **str arr und int size Rückgabewert : Einen Zeiger auf eine neue Zeichenkette vom Typ char * 4. Testdaten Wir bedienen uns wieder des argc/argv-mechanismus: Beispiel: Kommando:./my-strcat Dr. Peter Maria Ausgabe:./my-strcat Dr. Peter Maria als eine Zeichenkette 5. Implementierung Wir können uns gleich auf die Funktion my nstrcat() konzentrieren. Wir müssen der Reihe nach die folgenden Schritte durchführen: Erstens, Berechnung der Gesamtlänge der neuen Zeichenkette. Diese ist die Summe der Einzellängen plus die Anzahl der Zeichenketten (n 1 Leerzeichen als Trenner sowie ein Null-Byte am Ende). Zweitens, Allokation der neuen Zeichenkette. Und drittens, Hineinkopieren der einzelnen Zeichenketten mit jeweils einem anschließenden Leerzeichen. Das letzte Leerzeichen wird durch ein Null-Byte ersetzt. Bei jedem Kopiervorgang müssen wir in der neuen Zeichenkette um so viele Positionen weiterrücken, wie die zuletzt kopierte Zeichenkette lang war. Das lässt sich wie folgt ausdrücken: Funktion zum Aneinanderhängen von Zeichenketten Parameter: Array of Pointer to Char: str arr Integer: size Variablen: Integer: i, len, pos setze len = o für i = 0 bis size - 1 Schrittweite 1 wiederhole setze len = strlen( str arr[ i ] ) setze res = malloc( len + size ) wenn res 0 dann setze pos = 0 für i = 0 bis size - 1 Schrittweite 1 wiederhole kopiere str arr[ i ] an die Stelle res[ pos ] setze pos = pos + strlen( str arr[ i ] ) setze res[ pos ] = Leerzeichen setze pos = pos + 1 setze res[ pos ] = Null-Byte return res Wintersemester 2017/18, Einführung in die Praktische Informatik

12 6. Kodierung 1 # include <stdio.h> // for I/O 2 # include < string. h > // for strlen () und strcpy () 3 # include < stdlib. h > // for malloc () 4 5 char * my_nstrcat ( char ** str_arr, int size ) 6 { 7 char * res ; 8 int i, len, pos ; 9 for ( i = 0, len = size ; i < size ; i ++ ) 10 len += strlen ( str_arr [ i ] ); 11 if ( res = malloc ( len )) 12 { 13 for ( i = pos = 0; i < size ; i ++ ) 14 { 15 strcpy ( res + pos, str_ arr [ i ] ); 16 pos += strlen ( str_arr [ i ] ); 17 res [ pos ] = ; 18 pos ++; // advance to the next position 19 } 20 res [ pos - 1 ] = \0 ; // replace last blank 21 } 22 return res ; 23 } int main ( int argc, char ** argv ) 26 { 27 char * combi ; 28 if ( combi = my_nstrcat ( argv, argc )) 29 { 30 printf ( " my_nstrcat : %s \n", combi ); 31 free ( combi ); // just to get used to it 32 } 33 } Anmerkung: Wir hätten auch auf eine der beiden Variablen len oder pos verzichten können. Nur fanden wir es so verständlicher. Und die Einsparung einer int-variablen fällt bei den Zeichenketten nicht ins Gewicht. Einführung in die Praktische Informatik, Wintersemester 2017/

Ü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

Übungspaket 20 Zeiger und Zeigervariablen

Übungspaket 20 Zeiger und Zeigervariablen Übungspaket 20 Zeiger und Zeigervariablen Übungsziele: Skript: 1. Definition von Zeigervariablen 2. Verwendung von Zeigern 3. Arrays und Adressberechnungen Kapitel: 45 und 46 Semester: Wintersemester 2017/18

Mehr

Übungspaket 23 Mehrdimensionale Arrays

Übungspaket 23 Mehrdimensionale Arrays Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:

Mehr

Übungspaket 32 Einfach verkettete, sortierte Liste

Übungspaket 32 Einfach verkettete, sortierte Liste Übungspaket 32 Einfach verkettete, sortierte Liste Übungsziele: Skript: 1. Aufbau einer einfach verketteten, sortierten Liste 2. Traversieren von Listen 3. Vereinfachung durch ein Dummy-Element Kapitel:

Mehr

Übungspaket 14 Eindimensionale Arrays

Übungspaket 14 Eindimensionale Arrays Übungspaket 14 Eindimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung eindimensionaler Arrays Kapitel: 33 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:

Mehr

Übungspaket 20 Zeiger und Zeigervariablen

Übungspaket 20 Zeiger und Zeigervariablen Übungspaket 20 Zeiger und Zeigervariablen Übungsziele: Skript: 1. Definition von Zeigervariablen 2. Verwendung von Zeigern 3. Arrays und Adressberechnungen Kapitel: 45 und 46 Semester: Wintersemester 2017/18

Mehr

Übungspaket 23 Mehrdimensionale Arrays

Übungspaket 23 Mehrdimensionale Arrays Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:

Mehr

Übungspaket 12 Der Datentyp char

Übungspaket 12 Der Datentyp char Übungspaket 12 Der Datentyp char Übungsziele: Skript: 1. Umgang mit dem Datentyp char, 2. Deklarationen von char-variablen, 3. char-konstanten 4. und char-rechenoperationen. Kapitel: 29 bis 31 sowie 24,

Mehr

Übungspaket 9 Logische Ausdrücke

Übungspaket 9 Logische Ausdrücke Übungspaket 9 Logische Ausdrücke Übungsziele: Skript: 1. Umgang mit logischen Vergleichs- und Verknüpfungsoperatoren 2. Bilden einfacher und komplexer logischer Ausdrücke Kapitel: 22 Semester: Wintersemester

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungsziele: Skript: 1. Definieren einer dynamischen Datenstruktur 2. Dynamische Speicher Speicherallokation 3. Implementierung eines

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

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

Übungspaket 8 Datentyp int

Übungspaket 8 Datentyp int Übungspaket 8 Datentyp int Übungsziele: Skript: 1. Umgang mit dem Datentyp int, 2. Deklarationen von int-variablen, 3. int-konstanten 4. und int-rechenoperationen. Kapitel: 21 Semester: Wintersemester

Mehr

Übungspaket 7 Angemessenes Formatieren von C-Programmen

Übungspaket 7 Angemessenes Formatieren von C-Programmen Übungspaket 7 Angemessenes Formatieren von C-Programmen Übungsziele: Skript: 1. Gute Layout-Struktur durch Einrücken. Richtiges Verwenden von Kommentaren Kapitel: 19 Semester: Wintersemester 016/17 Betreuer:

Mehr

Übungspaket 17 Der gcc Compiler

Übungspaket 17 Der gcc Compiler Übungspaket 17 Der gcc Compiler Übungsziele: Skript: 1. Sicherer Umgang mit gemischten Ausdrücken 2. Herleiten der unterschiedlichen Datentypen in gemischten Ausdrücken 3. Kenntnis über die implizite Durchführung

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

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

Übungspaket 24 Zeichenketten

Übungspaket 24 Zeichenketten Übungspaket 4 Zeichenketten Übungsziele: Skript: 1. Verständnis über die interne Repräsentation von Zeichenketten. Arbeiten mit Zeichenketten 3. Definition konstanter Zeichenketten 4. Verwendung diverser

Mehr

Übungspaket 21 Funktionen mit Zeigern und Arrays als Parameter

Übungspaket 21 Funktionen mit Zeigern und Arrays als Parameter Übungspaket 21 Funktionen mit Zeigern und Arrays als Parameter Übungsziele: Skript: 1. Funktionen mit Zeigern als Parameter 2. Emulation von Variablenparametern 3. Funktionen mit Arrays als Parameter 4.

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

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

Übungspaket 4 Funktionszeiger

Übungspaket 4 Funktionszeiger Übungspaket 4 Funktionszeiger Übungsziele: Literatur: 1. Verstehen von Funktionszeigern. 2. Anwenden von Funktionszeigern. C-Skript 1, Kapitel: 85 Semester: Wintersemester 2017/18 Betreuer: Kevin, Peter

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

Übungspaket 13 Der Datentyp double

Übungspaket 13 Der Datentyp double Übungspaket 13 Der Datentyp double Übungsziele: Skript: 1. Umgang mit dem Datentyp double, 2. Deklarationen von double-variablen, 3. double-konstanten 4. und double-rechenoperationen. Kapitel: 32 Semester:

Mehr

6. Zeiger Allgemeines Definition eines Zeigers

6. Zeiger Allgemeines Definition eines Zeigers 6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.

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

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

Übungspaket 22 Rekursive Funktionsaufrufe

Übungspaket 22 Rekursive Funktionsaufrufe Übungspaket 22 Rekursive Funktionsaufrufe Übungsziele: Skript: 1. Technische Voraussetzungen für rekursive Funktionsaufrufe 2. Umsetzung mathematisch definierter Rekursionen in entsprechende C-Programme

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

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11

Mehr

Übungspaket 30 Kopieren von Dateien

Übungspaket 30 Kopieren von Dateien Übungspaket 30 Kopieren von Dateien Übungsziele: Skript: 1. Öffnen und Schließen von Dateien 2. Einfaches Lesen und Schreiben 3. Behandlung der EOF-Marke 4. Kopieren ganzer Dateien Kapitel: 59 bis 67 und

Mehr

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

Teil 5: Zeiger, Felder, Zeichenketten Gliederung Teil 5: Zeiger, Felder, Zeichenketten Gliederung Zeiger und Adressen Felder (Arrays) Zeichenketten (Strings) Zeigerarithmetik Mehrdimensionale Felder Zeiger und Adressen Felder Zeichenketten Zeigerarithmetik

Mehr

Praxis der Programmierung

Praxis der Programmierung Zeichenketten (Strings), Ein- und Ausgabe Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Zeichenketten (Strings)

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

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

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

Übungspaket 13 Der Datentyp double

Übungspaket 13 Der Datentyp double Übungspaket 13 Der Datentyp double Übungsziele: Skript: 1. Umgang mit dem Datentyp double, 2. Deklarationen von double-variablen, 3. double-konstanten 4. und double-rechenoperationen. Kapitel: 32 Semester:

Mehr

Nachname:... Vorname:... MatrNr.:... Klausur PR2. int main() { char Text[] = "Sehr geehrte Damen und Herren!"; char *tmp=text;

Nachname:... Vorname:... MatrNr.:... Klausur PR2. int main() { char Text[] = Sehr geehrte Damen und Herren!; char *tmp=text; Nachname:... Vorname:... MatrNr.:... Klausur PR2 HAW-Hamburg, Fakultät Technik und Informatik, Department Informations- und Elektrotechnik Dr. Robert Heß, 26.1.2009 Bearbeitungsdauer: 90 min Hilfsmittel:

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

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

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

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

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen

Mehr

Übungspaket 17 Der gcc Compiler

Übungspaket 17 Der gcc Compiler Übungspaket 17 Der gcc Compiler Übungsziele: Skript: 1. Sicherer Umgang mit gemischten Ausdrücken 2. Herleiten der unterschiedlichen Datentypen in gemischten Ausdrücken 3. Kenntnis über die implizite Durchführung

Mehr

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte: Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert

Mehr

Viel Erfolg bei der Bearbeitung der Aufgaben!

Viel Erfolg bei der Bearbeitung der Aufgaben! Musterlösung Name:... 1 2 3 4 5 Gesamt Note 12 8 10 15 11 56 Bitte tragen Sie auf dem Deckblatt Ihr Namen und Ihre Matrikelnummer ein und auf allen weiteren Seiten nur noch Ihre Matrikelnummer. Lösungen

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 8: Felder und Zeichenketten Prof. Dr. Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3. Variable und Datentypen

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. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff Programmieren in C Funktionen mit Zeigern und Adressen Prof. Dr. Nikolaus Wulff ByValue versus byreferenz C übergibt immer Kopien der Variablen an Funktionen. Es ist nur dann möglich die Werte von Variablen

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

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

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

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

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen 3.2 Auswahl an Stringfunktionen W. Tasin, M.Sc. Fakultät 04 tasin@hm.edu Allgemeines (1) Die ANSI-Norm definiert auch nützliche Funktionen zur ASCIIZ-Stringbearbeitung.

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

C-Kurs 2010 Pointer. 16. September v2.7.3

C-Kurs 2010 Pointer. 16. September v2.7.3 C-Kurs 2010 Pointer Sebastian@Pipping.org 16. September 2010 v2.7.3 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. C-Kurs Mi Konzepte, Syntax,... printf, scanf Next

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

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

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C Marcel Arndt arndt@ins.uni-bonn.de Institut für Numerische Simulation Universität Bonn Der Anfang Ein einfaches Programm, das Hello World! ausgibt: #include

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

Übungspaket 1 Grundlagen: von der Hardware zum Programmieren

Übungspaket 1 Grundlagen: von der Hardware zum Programmieren Übungspaket 1 Grundlagen: von der Hardware zum Programmieren Übungsziele: Skript: 1. Die Bedeutung des Programmierens für mein Studium und meine spätere Berufstätigkeit 2. Was ist eine erfolgreiche Lernstrategie?

Mehr

2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben. Programmieren bei Dr. Robert Heß TM&M1, IST1 und ET1 Ende SS 2003 Klausur 1. Aufgabe (2 Punkte) Kodieren Sie folgende Dezimalzahlen in Binärzahlen um. Zeigen Sie den Rechenweg, die negative Zahl soll im

Mehr

Übungspaket 32 Einfach verkettete, sortierte Liste

Übungspaket 32 Einfach verkettete, sortierte Liste Übungspaket 32 Einfach verkettete, sortierte Liste Übungsziele: Skript: 1. Aufbau einer einfach verketteten, sortierten Liste 2. Traversieren von Listen 3. Vereinfachung durch ein Dummy-Element Kapitel:

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

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

6. Bearbeitung von Strings in C Bearbeitung von Strings in C

6. Bearbeitung von Strings in C Bearbeitung von Strings in C Bearbeitung von Strings in C 6-1 Definition des String: 6. Bearbeitung von Strings in C Zeichenstrings werden als Felder von Zeichen abgespeichert: char [ ] ; Wie die Daten (Zeichenfolge)

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

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2) Betriebssysteme, Rechnernetze und verteilte Systeme 1 Crashkurs C (2) Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/

Mehr

Programmierkurs C++ Datenstrukturen Seite 1

Programmierkurs C++ Datenstrukturen Seite 1 Programmierkurs C++ Datenstrukturen Seite 1 3 Datenstrukturen 3.1 Arrays Zur Wiederholung als Strukturelement der Programmierung gehört auf der Seite der Datenstrukturen die Liste. Eine Liste kann auf

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

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

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

Pointer und Arrays. INE1, Montag M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.

Pointer und Arrays. INE1, Montag M. Thaler, Office TG208.  ZHAW, M. Thaler, K. Rege, G. Pointer und Arrays INE1, Montag M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? Variable Speicherplatz Datenwert über Name ansprechbar hat Typ hat Adresse (Speicheradresse)

Mehr

Übungspaket 1 Grundlagen: von der Hardware zum Programmieren

Übungspaket 1 Grundlagen: von der Hardware zum Programmieren Übungspaket 1 Grundlagen: von der Hardware zum Programmieren Übungsziele: Skript: 1. Die Bedeutung des Programmierens für mein Studium und meine spätere Berufstätigkeit 2. Was ist eine erfolgreiche Lernstrategie?

Mehr

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit Aufgabenblätter erreichbare Punktzahl zugelassene Hilfsmittel, 0800 1000 Uhr (120 min) 16 Seiten (einschl. Deckblatt)

Mehr

Hydroinformatik I: Referenzen und Zeiger

Hydroinformatik I: Referenzen und Zeiger Hydroinformatik I: Referenzen und Zeiger Prof. Dr.-Ing. habil. Olaf Kolditz 1 Helmholtz Centre for Environmental Research UFZ, Leipzig 2 Technische Universität Dresden TUD, Dresden Dresden, 06. Januar

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

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

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni Felder und Zeiger

Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni Felder und Zeiger Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni 2015 Felder und Zeiger 1. Felder 1. Felder werden deklariert und definiert durch die Angabe der Elementanzahl nach dem Feldnamen mit dem Feldoperator

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

Eine Mini-Shell als Literate Program

Eine Mini-Shell als Literate Program Eine Mini-Shell als Literate Program Hans-Georg Eßer 16.10.2013 Inhaltsverzeichnis 1 Eine Mini-Shell 1 1.1 Einen Befehl parsen......................... 2 1.2 Was tun mit dem Kommando?...................

Mehr

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.

Mehr

Felder, Zeiger und Adreßrechnung

Felder, Zeiger und Adreßrechnung Felder, Zeiger und Adreßrechnung Felder bestehen aus Variablen eines einzigen Datentyps. Bisher kennen wir eindimensionale Felder. In C sind Felder mit beliebigen Dimensionen möglich. Unsere räumliche

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

1. Aufgabe (6 Punkte)

1. Aufgabe (6 Punkte) Nachname:... Vorname:... MatrNr.:... Klausur PR2 HAW-Hamburg, Fakultät Technik und Informatik, Department Informations- und Elektrotechnik Dr. Robert Heß, 1.2.2008 Bearbeitungsdauer: 90 min Hilfsmittel:

Mehr

Zusammenfassung des Handzettels für Programmieren in C

Zusammenfassung des Handzettels für Programmieren in C Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.

Mehr

Arrays. Einleitung. Deklarieren einer Array Variablen

Arrays. Einleitung. Deklarieren einer Array Variablen Arrays Einleitung bisher jede Variable einzeln deklariert: 12 3 14 12 32 32 3 32 5 3 double sum; int count; ÿ Sie können Zweck und Aufbau von Array-Datentypen erklären ÿ Sie können einen Array korrekt

Mehr

Pointer. Variablen. Pointer. Ein elementares Beispiel. Pointer in C

Pointer. Variablen. Pointer. Ein elementares Beispiel. Pointer in C Variablen Pointer Variable vs. Pointer Dereferenzieren Address-of Operator & Dereference Operarot * Call by Reference Variable = symbolischer Name für Speicherbereich + Information, wie Speicherbereich

Mehr

Übungspaket 30 Kopieren von Dateien

Übungspaket 30 Kopieren von Dateien Übungspaket 30 Kopieren von Dateien Übungsziele: Skript: 1. Öffnen und Schließen von Dateien 2. Einfaches Lesen und Schreiben 3. Behandlung der EOF-Marke 4. Kopieren ganzer Dateien Kapitel: 59 bis 67 und

Mehr

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben. Programmieren bei Dr. Robert Heß TM&M1, IST1 und ET1 Anfang SS 2003 Klausur 1. Aufgabe (2 Punkte) Kodieren Sie folgende Dezimalzahlen in Binärzahlen um. Zeigen Sie den Rechenweg, die negative Zahl soll

Mehr

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java) Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)

Mehr

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe Aufgabe 6: Häuser verwalten - dynamisch Für ein Schneeräumungsunternehmen soll ein Programm zur Verwaltung von Häuserlisten geschrieben werden. Das Programm soll in der Lage sein, zu einem Haus die wichtigsten

Mehr

Zeiger und dynamischer Speicher

Zeiger und dynamischer Speicher Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: 09.12.2013, 07:49 Uhr

Mehr

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

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, 13.00-14.45 Uhr Bearbeitungszeit: 105 Minuten Schalten Sie ihr Mobiltelefon aus. Bei der Klausur ist als einziges

Mehr

Klausur "ADP" SS 2015

Klausur ADP SS 2015 PD Dr. J. Reischer 20.7.2015 Klausur "ADP" SS 2015 Nachname, Vorname Abschluss (BA, MA, FKN etc.) Matrikelnummer, Semester Versuch (1/2/3) Bitte füllen Sie zuerst den Kopf des Angabenblattes aus! Die Klausur

Mehr