Zeiger und dynamischer Speicher

Größe: px
Ab Seite anzeigen:

Download "Zeiger und dynamischer Speicher"

Transkript

1 Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: , 07:49 Uhr Foliensatz basiert auf Materialien von Prof. Dr. Alois Schütte

2 Motivation Zeiger sind Variablen, die statt konkreten Werten die Adressen im Speicher von anderen Variablen enthalten. Wie andere Variablen auch, besitzen Sie einen Namen und es gibt bestimmte Operationen mit den dazugehörigen Operatoren. Zeiger ermöglichen viel der Funktionalität in C++, u.a. auch das dynamische allokieren von Hauptspeicher. Dadurch wird die Speicherverwaltung in die Hände des Programmierers gelegt. Zeiger besitzen daher einige Tücken: durch unsachgemässe Behandlung können Programmfehler entstehen, werden allokierte Ressourcen nicht wieder freigegeben, entstehen sog. memory leaks, der Code kann unleserlich und daher schlecht wartbar werden. Durch die richtige Anwendung entsteht effektiver, ressourcenschonender Code, der C++ sehr flexibel macht. 2 / 29

3 Zeiger Überblick 1 Zeiger Zeiger und Vektoren (Arrays) Rekursive dynamische Strukturen 2 Dynamischer Speicher Anlegen und Löschen mit new und delete Verkettete Listen 3 / 29

4 Zeiger Zeiger und Adressen Wie jede Variable auch, müssen Zeiger vor der Verwendung deklariert werden. Zeiger unterscheiden sich von normalen Variablen durch einen Stern (engl. Asterisk) * vor ihrem Variablennamen. Datentyp * Variablenname; Durch den Addressoperator & lässt sich die Speicheradresse einer Variablen ermitteln. 1 # include <iostream > 2 using namespace std; 3 4 int main () { 5 int x = 5; 6 int *px = &x; // px enthaelt die Adresse von Variable x 7 cout << "x: " << x << " an Adresse " << &x << endl ; 8 cout << "px: " << px << endl ; 9 return 0; 10 } Beispielausgabe: x: 5 an Adresse 0x7fff5fa2bb48 px: 0x7fff5fa2bb48 4 / 29

5 Zeiger Referenzieren und Dereferenzieren Da ein Zeiger die Addresse eines Objekts enthält, kann auf das Objekt auf zwei Arten zugegriffen werden: direkt über den Namen indirekt über den Zeiger. Um indirekt auf den Variablenwert zuzugreifen, wird der Operator * zum Dereferenzieren benutzt. C++ Code int *p; int *p; int x; p = &x; int x,y; int *p; x = 2; p = &x; y = *p; Erläuterung p ist eine Zeigervariable auf eine int-variable. Da keine Initialisierung vorgenommen wurde, ist der Inhalt unbestimmt. p wird die Adresse der Variablen x zugewiesen, man sagt: p zeigt auf x. p zeigt auf x. Durch y = *p (Dereferenzierung von p) wird derselbe Effekt erzielt, wie y = x. Bei der Dereferenzierung wird mit dem Wert auf den gezeigt wird gearbeitet, anstatt wie sonst mit der Adresse. 5 / 29

6 Zeiger Weitere Beispiele C++ Code int x = 2; int *p1, *p2; p1 = &x; p2 = p1; int* ip, x; int * ip, x; int *ip, x; Erläuterung Der Variablen p2 wird der Wert der Variablen p1 zugewiesen; dadurch zeigt p2 auf dasselbe Objekt wie p1. Alle diese Deklarationen sind äquivalent, da der * sich nur auf den ihm nachfolgenden Namen bezieht. Wird eine Zeigervariable deklariert, so ist sie nicht automatisch initialisiert; sie zeigt irgendwo hin. Will man sie auf einen definierten Wert setzen, aber noch nicht auf eine bestimmte Variable, so kann der spezielle Zeigerwert NULL verwendet werden. 6 / 29

7 Zeiger Rang der Zeigeroperatoren In Ausdrücken wie y = *p + 1; haben die Operatoren * und & höheren Rang als arithmetische Operatoren. Das bedeutet, dass zuerst oben das Objekt ermittelt (dereferenziert) und dann der Wert um 1 erhöht wird. Achtung: y = *(p+1) ist möglich, hat aber eine andere Bedeutung. C++ Code int *p; int x=3; p = &x; x = *p + 1; int *p; int x=2; p = &x; *p = -5; int *p; int x=2; p = &x; *p += 1; Erläuterung Zuerst wird dereferenziert, d.h. der Wert von der Speicherstelle, auf die p zeigt ermittelt (x==3), dann der Wert erhöht (4) und der Variablen x zugewiesen. Zuerst die Speicherstelle, auf die p zeigt ermittelt (x), dann der Wert dieser Speicherstelle auf -5 gesetzt. Inkrementiert x. Durch (*p)++; würde der gleiche Effekt erzielt. Die Klammern sind wegen des Operatorranges erforderlich. 7 / 29

8 Zeiger Konstante Zeiger Zeiger sind auch als Konstante deklarierbar. Sie zeigen dann stets auf dasselbe Objekt. Auch können Zeiger auf Konstanten deklariert werden. Solche Deklarationen sind von rechts nach links zu lesen. C++ Code const int X=42; const int C=18; const int *P=&C; P=&X; int x=42; const int C=18; int *const P=&x; *P = -1; const int C=18; const int *const P=&C; Erläuterung P ist Zeiger auf eine int-konstante. Der Zeiger kann danach auch auf anderes zeigen. P ist konstanter Zeiger auf ein int-objekt. Der Zeiger kann danach nicht verändert werden, aber das Objekt auf das er zeigt. P ist konstanter Zeiger auf eine int- Konstante. Der Zeiger kann danach nicht verändert werden, das Objekt auf das er zeigt ebenfalls nicht. 8 / 29

9 Zeiger Zeiger und Vektoren (Arrays) Überblick 1 Zeiger Zeiger und Vektoren (Arrays) Rekursive dynamische Strukturen 2 Dynamischer Speicher Anlegen und Löschen mit new und delete Verkettete Listen 9 / 29

10 Zeiger Zeiger und Vektoren (Arrays) Zeiger und Vektoren Zeiger und Arrays (häufig auch Vektoren genant) sind stark verwand: Jede Operation mit Vektor-Indezes kann auch mit Zeigern formuliert werden! Die mit Zeiger formulierte Version ist i.a. effizienter, jedoch manchmal schwerer zu lesen. Durch int a[10] wird ein Vektor mit Namen a definiert, der 10 Integer-Komponenten a[0], a[1], bis a[9] hat. Dann bezeichnet a[i] die Komponente, die i Positionen von der ersten Komponente entfernt ist. Wenn pa ein Zeiger auf ein int-objekt ist, also int *pa dann kann durch pa = &a[0]; pa die Adresse der Komponente 0 zugewiesen werden. 10 / 29

11 Zeiger Zeiger und Vektoren (Arrays) Vektoren im Speicher int a[10]; int *pa = &a[0]; int a[10]; int *pa = &a[i]; Der C/C++-Compiler verwandelt einen Verweis auf einen Vektor stets in einen Zeiger-Wert auf den Anfang des Vektors. Das heisst der Name eines Vektors ist die Startadresse im Speicher. Daher gilt immer: *(pa+i) == a[i] 11 / 29

12 Zeiger Zeiger und Vektoren (Arrays) Zeiger und Vektoren - Konsequenzen Ausdruck ist äquivalent zu Erläuterung pa = &a[0]; pa = a; Der Name des Vektors ist Synonym für die Adresse der Komponente 0. &a[i] a+i; Adresse der Komponente i a[i] *(a+i) Inhalt der Komponente i pa[i] *(pa+i) pa ist Synonym für Vektoranfang Allgemein kann man sagen: Statt Vektorname und Indexausdruck kann man immer einen Zeiger und den Abstand zum Anfang angeben und umgekehrt. Diese Konvention ist unabhängig vom Typ des Vektors, da die Addition von 1 zu einem Zeiger definiert ist als das Inkrementieren in Abhängigkeit des Speicherplatzbedarfs des Objektes, auf den der Zeiger zeigt. 12 / 29

13 Zeiger Zeiger und Vektoren (Arrays) Unterschied Vektorname und Zeiger Ein Zeiger ist eine Variable, also sind die folgenden Anweisungen sinnvoll und möglich: Gültige Deklaration: 1 int a [10]; 2 int *pa; 3 pa = a; 4 pa ++; Ein Vektorname ist vom Wesen her eine Konstante und kann daher kein L-Wert sein. Somit sind die folgenden Anweisungen für int a[10]; int *pa; nicht möglich: Ungültige Deklaration: 1 a = pa; 2 a++; 3 pa = &a; 13 / 29

14 Zeiger Rekursive dynamische Strukturen Überblick 1 Zeiger Zeiger und Vektoren (Arrays) Rekursive dynamische Strukturen 2 Dynamischer Speicher Anlegen und Löschen mit new und delete Verkettete Listen 14 / 29

15 Zeiger Rekursive dynamische Strukturen Rekursive dynamische Strukturen Zeiger sind nicht nur auf einfache Objekte möglich. Ein Zeiger kann auch auf eine Struktur (struct) zeigen. Da ein Element der Struktur selbst wieder ein Zeiger sein kann, entsteht eine rekursive Datenstruktur. Wenn ein Zeiger auf eine Struktur zeigt, kann eine Komponente selektiert werden durch Verwendung des Selektions- und des Dereferenzierungsoperators: -> 15 / 29

16 Zeiger Rekursive dynamische Strukturen Beispiel zu rekursiven dynamischen Strukturen C++ Code struct tupel { int i; double d; } wert; wert.i = 18; wert.d = 1.5; struct tupel *ps; ps = &wert; (*ps).i = 42; cout << ps->i; Erläuterung Definition einer Variable wert, die eine Struktur von einem int und einem double ist. Zeiger auf Struktur tupel; ps zeigt auf Variable wert. Komponente i der Struktur selektieren, auf die ps zeigt und den Wert 42 zuweisen. Kurzschreibweise für (*ps).i ist: ps->i Ausgabe: 42 Hinweis: Auch hier ist der Rang der Operatoren wichtig: ++ps->i; Entspricht ++(p->i), also wird die Komponente i inkrementiert. (++ps)->i; Inkrementiert ps, zeigt also auf ein anderes Objekt und dann wird die Komponente i selektiert! 16 / 29

17 Dynamischer Speicher Überblick 1 Zeiger Zeiger und Vektoren (Arrays) Rekursive dynamische Strukturen 2 Dynamischer Speicher Anlegen und Löschen mit new und delete Verkettete Listen 17 / 29

18 Dynamischer Speicher Motivation Die bisher behandelten Datentypen waren statisch der Compiler konnte den Speicherplatzbedarf ermitteln. In vielen Anwendungen ist der erforderliche Platzbedarf aber erst zur Laufzeit des Programms bekannt; z.b. wenn der Platz von der Anzahl der Benutzereingaben abhängt. Eine Idee ist es, ein sehr großes Array von Datenobjekten zu deklarieren und dort die Werte zu speichern. Besser wäre es, man könnte Speicher zur Laufzeit bei Bedarf anfordern (allokieren). Ein Programm wird vom Betriebssystem (je nach Betriebssystem unterschiedlich) im Speicher etwa wie folgt abgelegt: 18 / 29

19 Dynamischer Speicher Anlegen und Löschen mit new und delete Überblick 1 Zeiger Zeiger und Vektoren (Arrays) Rekursive dynamische Strukturen 2 Dynamischer Speicher Anlegen und Löschen mit new und delete Verkettete Listen 19 / 29

20 Dynamischer Speicher Anlegen und Löschen mit new und delete Anlegen und Löschen mit new und delete Um ein neues Element im Heap ablegen zu können, verwendet man den Operator new. Der erforderliche Speicherplatz wird durch new in Abhängigkeit des Typs automatisch ermittelt. Um den so allokierten Speicherplatz wieder freizugeben, verwendet man den Operator delete. Wird der Speicher nicht mehr freigegeben, so entstehen memory leaks! Für jedes new sollte ein passendes delete vorhanden sein! C++ Code int *p; p = new int; *p = 12; delete p; Erläuterung Ein neues Element wird auf dem Heap angelegt, es hat keinen Namen. Der Zugriff erfolgt über den Zeiger p. Der Wert ist undefiniert. Die Grösse ist sizeof(int). Anschliessend wird wie gewohnt ein Wert (hier 12) zugewiesen. Danach wird mit delete der Speicher wieder freigegeben. 20 / 29

21 Dynamischer Speicher Anlegen und Löschen mit new und delete Dynamische Arrays mit new anlegen Über den new []-Operator lassen sich auch dynamisch Arrays erzeugen. 1 int *pa; 2 pa = new int [3]; 3 pa [1] = 23; Der Zugriff erfolgt wie bei Arrays über den Zeiger und den Index. 1 # include <iostream > 2 using namespace std; 3 4 int main () { 5 int i,n; 6 int *p; 7 cout << " Wieviele Zahlen wollen Sie eingeben? "; 8 cin >> i; 9 p= new int [i]; 10 for (n=0; n<i; n++) { 11 cout << " Bitte Zahl eingeben : "; 12 cin >> p[n]; 13 } 14 cout << " Sie haben folgende Zahlen eingegeben : "; 15 for (n=0; n<i; n++) 16 cout << p[n] << " "; 17 delete [] p; // den vom Array belegten Speicher freigeben 18 return 0; 19 } 21 / 29

22 Dynamischer Speicher Anlegen und Löschen mit new und delete Freigeben von dynamisch erzeugtem Speicher Ein Array von Datenobjekten wird mit delete [] zeigername; freigegeben. Einige Besonderheiten sind bzgl. delete zu beachten: Dynamisch allokierter Speicher, auf den kein Zeiger mehr zeigt, ist unwiederbringlich verloren! C++ erkennt nicht, ob ein Speicher noch benutzt wird (wegen Laufzeiteffizienz). Dies ist in Java anders: die Java Virtual Machine überwacht den Heap und führt automatische ein Garbage Collection durch. delete darf ausschließlich auf Objekte angewendet werden, die mit new erzeugt wurden. delete auf einen NULL-Zeiger angewendet ist wirkungslos. Mit new erzeugte Datenobjekte unterliegen den Gültigkeitsregeln für Variablen nicht: sie existieren solange bis sie mit delete gelöscht werden. 22 / 29

23 Dynamischer Speicher Verkettete Listen Überblick 1 Zeiger Zeiger und Vektoren (Arrays) Rekursive dynamische Strukturen 2 Dynamischer Speicher Anlegen und Löschen mit new und delete Verkettete Listen 23 / 29

24 Dynamischer Speicher Verkettete Listen Verkettete Listen In diesem Abschnitt werden einfach verkettete Listen als rekursive, dynamische Datenstruktur vorgestellt. Dabei handelt es sich um ein oder mehrere structs, bei dem ein Element der Struktur auf ein Objekt des gleichen Typs zeigt. 1 struct knoten { 2 int info ; 3 struct knoten * next ; 4 } Listenelemente lassen sich dann wie folgt verketten: 24 / 29

25 Dynamischer Speicher Verkettete Listen Verwendung der verketteten Liste 1 # include <iostream > 2 using namespace std; 3 4 struct knoten { 5 int info ; 6 struct knoten * next ; 7 } *anfang, * ende ; 8 9 int main () { 10 anfang = ende = NULL ; // Leere Liste anlegen 11 int eingabe = 0; 12 do { 13 cout << " Integer ( Abbruch mit negativem Wert ): "; 14 cin >> eingabe ; 15 if ( eingabe >= 0) einfuegen ( eingabe ); // siehe Folie } while ( eingabe >= 0); 17 ausgeben (); // siehe Folie cout << " Integer, der geloescht werden soll : "; 19 cin >> eingabe ; 20 struct knoten *p = suchen ( eingabe ); // siehe Folie if (p!= NULL ) loeschen (p); // siehe Folie else cout << eingabe << " nicht in Liste vorhanden!" << endl ; 23 ausgeben (); // siehe Folie return 0; 25 } 25 / 29

26 Dynamischer Speicher Verkettete Listen Einfügen eines neuen Knotens am Ende der Liste 1 void einfuegen ( int x) { // einfuegen am Ende der Liste 2 struct knoten *p = new knoten ; // erzeuge neuen Knoten 3 p-> info = x; // Infowert wird x 4 p->next = NULL ; // next - Wert mit NULL initialisieren 5 if ( anfang == NULL ) { // Falls Liste leer 6 anfang = p; 7 ende = p; 8 } else { // Liste nicht leer 9 ende ->next = p; // einfuegen am Ende 10 ende = p; // neues Ende 11 } 12 } 26 / 29

27 Dynamischer Speicher Verkettete Listen Ausgeben der Listeninformationen 1 void ausgeben () { // ausgeben von Anfang bis Ende 2 struct knoten *p = anfang ; // p zeigt auf aktuellen Knoten 3 cout << " Liste : "; 4 while (p!= NULL ) { 5 cout << p->info << " "; // Ausgabe Info - Bereich 6 p = p-> next ; // p auf Folgeelement setzen 7 } 8 cout << endl ; 9 } 27 / 29

28 Dynamischer Speicher Verkettete Listen Suchen nach einem Knoten mit bestimmtem Wert Das Suchen nach einem Knoten ist ähnlich wie das Durchlaufen der Liste. Nur geben wir hier nicht jedes info-element aus, sondern prüfen dessen Wert. Stimmt dieser mit dem Gesuchten überein, haben wir den passenden Knoten gefunden und können diesen zurückgeben. Falls nicht, wird NULL zurückgegeben, auf das dann im aufrufenden Programm reagiert werden kann. 1 struct knoten * suchen ( int x) { // sequentielles Suchen 2 struct knoten *p = anfang ; 3 while (p!= NULL ) { 4 if (p-> info == x) return p; // gefunden! 5 else p = p-> next ; // p auf Folgeelement setzen 6 }// while 7 return NULL ; // nicht gefunden 8 } 28 / 29

29 Dynamischer Speicher Verkettete Listen Löschen eines Knotens und Neuverketten der Liste 1 void loeschen ( struct knoten *p) { 2 struct knoten *p1 = anfang ; 3 if (p == anfang ) { 4 anfang = anfang ->next ; // neuer Anfang 5 delete p; 6 return ; // vorzeitiges Beenden der Funktion 7 } 8 while (p1 ->next!= p) // suche Vorgaenger 9 p1 = p1 ->next ; // gehe zum naechsten Knoten 10 p1 ->next = p->next ; // verkette neu (p- Knoten ueberspringen ) 11 delete p; 12 } 29 / 29

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

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

Grundlagen der Informatik 11. Zeiger

Grundlagen der Informatik 11. Zeiger 11. Zeiger Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte Grundlagen der Informatik (Alex Rempel) 1 Motivation Dynamische Speicherverwaltung Oft müssen große

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

Kontrollstrukturen -- Schleifen und Wiederholungen

Kontrollstrukturen -- Schleifen und Wiederholungen Kontrollstrukturen -- Schleifen und Wiederholungen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling [email protected] Hochschule Darmstadt Fachbereich Informatik WS 2013/14

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

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

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

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden Einleitende Bemerkungen Einleitende Bemerkungen Aspekte Aufbau von sinnvollen Klassenhierarchien Verwaltung von Objekten unterschiedlichen Typs Mitarbeiter Besonderheiten der Anwendung jeder Angehörige

Mehr

Variablen, Konstanten und Datentypen

Variablen, Konstanten und Datentypen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling [email protected] Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Variablen, Konstanten und Datentypen Überblick

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

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11

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

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

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Teil 8: Dynamische Speicherverwaltung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 8 Dynamische Speicherverwaltung... 3 8.1

Mehr

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach  10. Zeiger C-Kurs 2012, 2. Vorlesung Tino Kutschbach [email protected] http://wiki.freitagsrunde.org 10. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14 C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung

Mehr

9. Vektoren. (auch Felder/array)

9. Vektoren. (auch Felder/array) 9. Vektoren (auch Felder/array) Motivation Hat man mehrere Objekte gleichen Datentyps, so kann man sie explizit deklarieren, wenn die Anzahl bekannt ist double x1,x2,x3,x4; Nachteile: versagt, -wenn die

Mehr

Grundlagen der Informatik 6. Arrays I

Grundlagen der Informatik 6. Arrays I 6. Arrays I Motivation Array (konstante Länge) Speicherbereich Eingabe von Arrays Grundlagen der Informatik (Alex Rempel) 1 Motivation Beispiel: Bildschirmpixel zeichnen Auflösung 800x600, d.h. insgesamt

Mehr

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung Einfache Variablen Typen int, long, short, unsigned bool char float,

Mehr

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe. 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: ( / 25 Pkt.) Gegeben ist das folgende

Mehr

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C++ - Objektorientierte Programmierung Konstante und statische Elemente C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja

Mehr

Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben!

Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben! Projekt: Artikelverwaltung Seite 1 von 5 Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben! Legen Sie global einen benutzerdefinierten Datentyp artikel an:

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

Zeiger: Der Adressoperator &

Zeiger: Der Adressoperator & Zeiger: Der Adressoperator & Variablen werden im Computer im Speicher abgelegt. Nach der Deklaration int a,b,c; double x,y,z; Sieht die Speicherbelegung etwa wie folgt aus: a b c x y z Jede Variable hat

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

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

int i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben

int i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben Datenfelder (Array) Seite 1 von 7 Bei den bisherigen Programmen wurde für jede verwendete Variable (oder für jedes Objekt) ein eigener Typ und Name vergeben. Die Initialisierung, d.h. die Belegung mit

Mehr

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

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Ein- und Ausgabe (I/O)

Ein- und Ausgabe (I/O) Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling [email protected] Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Überblick 1 2 / 14 Motivation Computer arbeiten

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

Grundlagen der Informatik 12. Strukturen

Grundlagen der Informatik 12. Strukturen 12. Strukturen Strukturen und deren Komponenten Strukturen im Projekt Dynamisch erstellte Strukturen Strukturen und Operatoren Strukturen und Funktionen Einfach verkettete Liste Grundlagen der Informatik

Mehr

Polymorphismus 179. Function.h. #include <string>

Polymorphismus 179. Function.h. #include <string> Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function

Mehr

Zeiger, Arrays und Strings in C und C++

Zeiger, Arrays und Strings in C und C++ Zeiger, Arrays und Strings in C und 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

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

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

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung mit C++ SS 2007 Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

Zusammengesetzte Datentypen -- Arrays und Strukturen

Zusammengesetzte Datentypen -- Arrays und Strukturen Zusammengesetzte Datentypen -- und Strukturen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling [email protected] Hochschule Darmstadt Fachbereich Informatik WS 2013/14

Mehr

C- Kurs 09 Dynamische Datenstrukturen

C- Kurs 09 Dynamische Datenstrukturen C- Kurs 09 Dynamische Datenstrukturen Dipl.- Inf. Jörn Hoffmann [email protected] leipzig.de Universität Leipzig InsAtut für InformaAk Technische InformaAk Flexible Datenstrukturen Institut für

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

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

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

Einführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen ("struct...")

Einführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen (struct...) Einführung in die Programmierung für Physiker Die Programmiersprache C Strukturen ("struct...") Marc Wagner Institut für theoretische Physik Johann Wolfgang Goethe-Universität Frankfurt am Main WS 2013/14

Mehr

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3 Programmieren mit Java Modul 3 Arrays Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Eindimensionale Arrays 3 2.1 Arrays deklarieren.............................. 3 2.2 Arrays erzeugen................................

Mehr

Assoziative Container in C++ Christian Poulter

Assoziative Container in C++ Christian Poulter Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: [email protected] Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...

Mehr

7. Übung Informatik II - Objektorientierte Programmierung

7. Übung Informatik II - Objektorientierte Programmierung 7. Übung Informatik II - Objektorientierte Programmierung 29. Mai 2015 Inhalt 1 2 3 Übersicht 1 2 3 Idee Menschen nehmen die Welt in Form von Objekten wahr manche Objekte haben gleiche Eigenschaften, hierüber

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz Einführung in C++ Vererbung I Durch Vererbung können aus bereits bestehenden Klassen neue Klassen konstruiert werden. Die neue abgeleitete Klasse erbt dabei die Daten und Methoden der sog. Basisklasse.

Mehr

Praxis der Programmierung

Praxis der Programmierung Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen

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

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 arithmetik für dynamischen Speicher Anwendungen Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU

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

C++ - Objektorientierte Programmierung Vererbung

C++ - Objektorientierte Programmierung Vererbung C++ - Objektorientierte Programmierung Vererbung Personen Kunden Mitarbeiter Verwaltung Verkäufer Leibniz Universität IT Services Anja Aue Vererbung Definition von Klassen auf Basis von bestehenden Klassen.

Mehr

Einführung in die Programmierung II. 5. Zeiger

Einführung in die Programmierung II. 5. Zeiger Einführung in die Programmierung II 5. Zeiger Thomas Huckle, Stefan Zimmer 16. 5. 2007-1- Bezüge als Objekte Bisher kennen wir als Bezüge (Lvalues) nur Variablennamen Jetzt kommt eine neue Sorte dazu,

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

Kapitel 6: Dynamische Speicherverwaltung

Kapitel 6: Dynamische Speicherverwaltung Kapitel 6: Dynamische Speicherverwaltung Dieses Kapitel beschreibt die Operatoren new und delete, mit denen dynamisch Speicher reserviert und freigegeben wird. Außerdem wird im Detail eingegangen auf:

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

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

Klausur Informatik WS 2012/13

Klausur Informatik WS 2012/13 Klausur Informatik WS 2012/13 Name Gruppe 1 Vorname Dauer 90 min Matrikelnummer Hilfsmittel keine Die Klausur ist mit 50 Punkten sicher bestanden. Hinweies: Voraussetzung für die Teilnahme ist das Bestehen

Mehr

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

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl

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

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

1. Referenzdatentypen: Felder und Strings

1. Referenzdatentypen: Felder und Strings 1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen

Mehr

Einführung in die Programmierung Wintersemester 2016/17

Einführung in die Programmierung Wintersemester 2016/17 Einführung in die Programmierung Wintersemester 2016/17 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Gültigkeitsbereiche Inhalt Lokale und globale

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2) DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und

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

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

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Vorkurs Informatik WS 14/15 Vorkurs Informatik: Erste Schritte der Programmierung mit C++ Arne Nägel, Andreas Vogel, Gabriel Wittum Lehrstuhl Modellierung und Simulation Goethe-Center for Scientific Computing

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

RO-Tutorien 15 und 16

RO-Tutorien 15 und 16 Tutorien zur Vorlesung Rechnerorganisation Tutorienwoche 2 am 04.05.2011 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft

Mehr

4.2 Programmiersprache C

4.2 Programmiersprache C 4.2.1. Elementare Datentypen (signed) int, unsigned int, (signed) short (int), unsigned short (int), (signed) long (int), unsigned long (int) Elementare Datentypen für ganze Zahlen mit oder ohne Vorzeichen.

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

Ausgabe:

Ausgabe: Aufgabe 2.10: Schreiben Sie ein Programm, das zunächst die Quadratzahlen zu den Zahlen 1-10 mit Hilfe einer While- Schleife und danach die Quadratzahlen zu den Zahlen 3, 6, 9,.., 30 mit Hilfe einer For-Schleife

Mehr