5. Abgeleitete Datentypen

Ähnliche Dokumente
RO-Tutorien 3 / 6 / 12

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Elementare Datentypen in C++

Programmierung mit C Zeiger

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Einführung in die C++ Programmierung für Ingenieure

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

+ C - Array (Vektoren, Felder)

Benutzerdefinierte und zusammengesetzte Datentypen

Einführung in die Programmierung

C++ - Einführung in die Programmiersprache Funktionen. Leibniz Universität IT Services Anja Aue

Deklarationen in C. Prof. Dr. Margarita Esponda

Tutorium Rechnerorganisation

2. Semester, 2. Prüfung, Lösung

2. Programmierung in C

Zusammengesetzte Datentypen -- Arrays und Strukturen

Programmieren in C++ Arrays, Strings und Zeigerarithmetik

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Die Programmiersprache C99: Zusammenfassung

Repetitorium Informatik (Java)

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Kapitel 3: Variablen

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Datentypen: Enum, Array, Struct, Union

Überladen von Operatoren

Einstieg in die Informatik mit Java

Modellierung und Programmierung 1

Advanced Programming in C

Klausur in Programmieren

Inhalt. Peter Sobe 63. Felder in C

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

Zeiger: Der Adressoperator &

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Einstieg in die Informatik mit Java

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

magnum C++ WALTER SAUMWEBER kompakt komplett kompetent

Welche Informatik-Kenntnisse bringen Sie mit?

C-Propädeutikum Höhere Datentypen

Prof. W. Henrich Seite 1

Datenfelder (Arrays) Vektoren, Matrizen, Tabellen. Dr. Beatrice Amrhein

Die Programmiersprache C Eine Einführung

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

5. Elementare Befehle und Struktogramme

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

Zusammenfassung des Handzettels für Programmieren in C

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

CEN1112 Labor Software-Entwicklung

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Einführung in die C-Programmierung

Erste Schritte der Programmierung in C

Dr. Monika Meiler. Inhalt

Einstieg in die Informatik mit Java

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Einführung in die STL

Mehr zu Datentypen: Felder, Zeiger und Strukturen

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Der Datentyp String. Stringvariable und -vergleiche

Klausur in Programmieren

Einführung in die Programmierung

Kurze Einführung in die Programmiersprache C++ und in Root

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

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Java Einführung Klassendefinitionen

Weitere Operatoren und Datentypen. Speicherklassen. Speicherklassen: static

Zusammengehörige Daten struct. Strukturierte Datentypen und Funktionszeiger. Zugriff auf struct-elemente. Variablendeklarationen mit struct

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Primitive Datentypen und Felder (Arrays)

Übungspaket 23 Mehrdimensionale Arrays

Propädeutikum zur Programmierung

C++ Einführung. und Datenanalyse mit ROOT. Jörg Marks, Physikalisches Institut, INF 226

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Programmierkurs Java

Grundlagen der C++ und der Java-Programmierung

Javakurs für Anfänger

Selber Programmieren

2. Programmierung in C

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Elementare Konzepte von

Werkzeuge zur Programmentwicklung

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Transkript:

5. Abgeleitete Datentypen Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Felder (Arrays)!Zeichenketten (Strings)!Strukturen (Structs) Copyright: M. Gross, ETHZ, 2003 2 Arrays! Ein Array ist ein Datentyp, der mehrere Werte des gleichen Typs speichern kann! 60 ints oder 120 chars! Die Definition eines Arrays besteht aus 3 Elementen:! Typ der zu speichernden Elemente! Name des Arrays! Anzahl der Elemente! int students[241];! Legt ein Array mit 241 Variablen des Typs int an und reserviert entsprechend Speicherplatz! Allgemeine Form: typename arrayname[arraysize]; 1

Copyright: M. Gross, ETHZ, 2003 3 Arrays! arraysize muss const sein! arraysize darf keine Variable sein! Ein Array ist ein abgeleiteter Typ, da er auf anderen Typen aufbaut! Der Zugriff auf Elemente eines Arrays erfolgt durch Indizierung! Der Index beginnt immer bei 0!! students[111] = 64;! Setzt also das 112. Element des Arrays! Dies führt leicht zu Fehlern Copyright: M. Gross, ETHZ, 2003 4 Illustration int ragnar[7]; ragnar 0 1 2 3 4 5 6 Index drittes Element zweites Element erstes Element ragnar ist ein Array mit 7 Elementen vom Typ int 2

Copyright: M. Gross, ETHZ, 2003 5 Beispiel_1: Array anlegen // arrayone.cpp _ small arrays of integers #include <iostream> using namespace std; int main() Definition des Arrays int yams[3]; // creates array with three elements yams[0] = 7; // assign value to first element yams[1] = 8; yams[2] = 6; int yamcosts[3] = 20, 30, 5}; // create, initialize array // NOTE: If your C++ compiler or translator can't initialize // this array, use static int yamcosts[3] instead of // int yamcosts[3] cout << "Total yams = "; cout << yams[0] + yams[1] + yams[2] << "\n"; cout << "The package with " << yams[1] << " yams costs "; cout << yamcosts[1] << " cents per yam.\n"; int total = yams[0] * yamcosts[0] + yams[1] * yamcosts[1]; total = total + yams[2] * yamcosts[2]; cout << "The total yam expense is " << total << " cents.\n"; cout << "\nsize of yams array = " << sizeof yams; cout << " bytes.\n"; cout << "Size of one element = " << sizeof yams[0]; cout << " bytes.\n"; return 0; } Grösse eines Elementes Initialisierung Initialisierungsliste Adressierung Copyright: M. Gross, ETHZ, 2003 6 Initialisierung! Initialisierung kann auf zwei Arten erfolgen! Initialisierungsliste bei Definition int hotel[2] = 1,2};! Explizit hotel[0] = 1;! Arrays können auch partiell initialisiert werden! int hotel[5] = 1,2};! int hotel[500] = 0};! Compiler setzt die restlichen Elemente zu 0! Compiler berechnet Arraygösse automatisch bei Initialiserung! int hotel[] = 0,1,2,3}; 3

Copyright: M. Gross, ETHZ, 2003 7 Mehrdimensionale Arrays! Arrays können in beliebiger Dimension angelegt werden! Für jede Dimension muss die Arraygrösse getrennt angegeben werden! Definition erfolgt analog zu 1D! int hotel[3][2];! Initialisierung ebenso! Initialisierungsliste bei Definition int hotel[3][2] = 1,2},3,4},5,6}};! Explizit hotel[0][1] = 2;! Zugriff durch Index-Vektor! int ndarray[2][2][2][2];! ndarray[1][1][1][1] = 3; Copyright: M. Gross, ETHZ, 2003 8 Strings! Ein String ist eine Reihe von Zeichen, welche in aufeinanderfolgenden Bytes im Speicher gehalten werden! Ein C++ String muss immer mit \0 (null character) enden! \0 benötigt ein zusätzliches Byte! char stud[5] = 'b','i','l','l','\0'};! char stud[5] = 'b','i','l','l','y'}; Kein String!! Initialisierung auf zwei Arten! char stud[5] = 'b','i','l','l','\0'};! char stud[] = "billy";! "billy" ist ein String Literal 4

Copyright: M. Gross, ETHZ, 2003 9 Strings! Bei String Literalen wird der Null Character automatisch eingefügt! Einzelnes Zeichen darf nicht mit String verwechselt werden! char stud = 'b'; //O.K.! char stud = "b"; //not O.K. Type mismatch! cout kann Strings sinnvoll auf der Konsole ausgeben! cout << "Markus ist ein Lieber \n";! Strings können mit Hilfe von Arrays gespeichert und verwaltet werden! <cstring> Bibliothek (library) stellt viele wichtige String-Funktionen zur Verfügung Copyright: M. Gross, ETHZ, 2003 10 Beispiel_2: String und Array // strings.cpp _ storing strings in an array #include <iostream> #include <cstring> // for the strlen() function using namespace std; int main() const int Size = 15; char name1[size]; // empty array char name2[size] = "C++owboy"; // initialized array // NOTE: some implementations may require the static keyword // to initialize the array name2 cout << "Howdy! I'm " << name2; cout << "! What's your name?\n"; cin >> name1; cout << "Well, " << name1 << ", your name has "; cout << strlen(name1) << " letters and is stored\n"; cout << "in an array of " << sizeof name1 << " bytes.\n"; cout << "Your initial is " << name1[0] << ".\n"; name2[3] = '\0'; // null character cout << "Here are the first 3 characters of my name: "; cout << name2 << "\n"; return 0; } Ausgabe Funktion aus cstring Definition einer Konstanten Array für String Initialisierung Eingabe 5

Copyright: M. Gross, ETHZ, 2003 11 Initialisierung des Arrays! Bei der Initialisierung werden die restlichen Stellen des Arrays unbesetzt belassen const int ArSize = 15; char name2[arsize] = "C++owboy"; String C + + o w b o y \0 name2[3] = '\0'; String C + + \0 w b o y \0 DON T PANIC Ignored! String Input pp. 100-109 bitte selbstständig anschauen Copyright: M. Gross, ETHZ, 2003 12 Structs! Ein Struct ist ein Datentyp, der mehrere Werte verschiedener Typen speichern kann! Vielseitiger als Array und enorm mächtig! Ein Struct ist ein Vorläufer einer Klasse! Trennung von Deklaration des Typs und Definition einer Variable des Typs! Deklaration des Typs erfolgt durch! Schlüsselwort struct! Name (Name Tag)! Aufzählung der Struct Member Variablen! Definition einer Variablen dieses Typs erfolgt durch Verwendung des Name Tags 6

Copyright: M. Gross, ETHZ, 2003 13 Structs! Beispiel für Deklaration struct product char name[20]; float volume; double price; };! Deklaration erfolgt oft ausserhalb von Funktionen! Externe Deklaration - Globale Sichtbarkeit (scope)! Interne Deklaration - Lokale, auf Funktion beschränkte Sichtbarkeit! Definition einer Variablen des Typs! struct product p1; // C-Stil! product p1; // C++ Stil...ist einfacher Copyright: M. Gross, ETHZ, 2003 14 Initialisierung und Zugriff! Initialisierung erfolgt explizit durch Liste product p1 = "Informatik", 500.0, 6.7 };! Komma als Separator verwendet! Zuweisungsoperator kann auf Structs angewandt werden! product p2 = p1;! Jede einzelne Mitgliedsvariable wird zugewiesen 7

Copyright: M. Gross, ETHZ, 2003 15 Initialisierung und Zugriff! Deklaration und Definition können auch kombiniert werden struct product char name[20]; float volume; double price; } p1, p2;! Deklariert Typ und legt zwei Variablen des Typs an! p2, p1;! Variablen haben hier gleichen Gültigkeitsbereich, wie Typendeklaration Copyright: M. Gross, ETHZ, 2003 16 Beispiel_3: Structs // assgn_st.cpp -- assigning structures #include <iostream> using namespace std; struct inflatable char name[20]; float volume; double price; }; int main() inflatable bouquet = "sunflowers", 0.20, 12.49 }; Externe Deklaration Initialisierung } inflatable choice; cout << "bouquet: " << bouquet.name << " for $"; cout << bouquet.price << "\n"; choice = bouquet; // assign one structure to another cout << "choice: " << choice.name << " for $"; cout << choice.price << "\n"; return 0; Zugriff auf Members 8

Copyright: M. Gross, ETHZ, 2003 17 Zugriff! Zugriff auf Mitglieder durch.-operator! p1.price = 5.3;! Ebenso können Arrays von Structs angelegt werden! product parray[10];! Definiert Array von 10 Variablen vom Typ product! Initialisierung ebenso durch Listen product parray[2] = "Informatik I", 500.0, 6.7}, "Informatik I", 300.0, 3.7}};! Bitfelder für hardwarenahe Programmierung! Variablen sind dabei auf bestimmte Anzahl von Bits beschränkt Copyright: M. Gross, ETHZ, 2003 18 Unions! Ein Union ist ein Struct, der jeweils nur EINE der Mitgliedsvariablen speichern kann! Die Grösse von Union-Variablen entspricht somit der Grösse der grössten Mitgliedsvariablen! Variablen teilen die gleiche Speicheradresse union one int i; float f; double d; } var_1;! Zuweisung, wie bei Structs! var_1.i = 10; 9

Copyright: M. Gross, ETHZ, 2003 19 Aufzählungstypen (Enumerations)! Eine Enumeration erlaubt es, elegant symbolische Konstanten zu definieren! enum colors = red, green, blue};! Legt neuen Typ des Namens colors an! Definiert red, green, blue als symbolische Integer-Konstanten der Werte 0,1,2! Heissen auch Enumerators! Im Standard-Fall (default) weist ein enum Integer-Werte von 0 an aufsteigend zu! Zuweisung nur sehr beschränkt möglich! colors c1 = red; // O.K.! colors c1 = 4; // not O.K.! Konstanten können auch explizit gesetzt werden! enum one = 1, three = 3}; Copyright: M. Gross, ETHZ, 2003 20 typedef! typedef wird benutzt um ein Synonym für bestehende Datentypen zu erzeugen.! Beispiel: typedef int Integer;! Ab dieser Anweisung kann Integer als Type benutzt werden und ist identisch mit int.! Achtung: typedef erzeugt keinen neuen Datentyp, nur ein Synonym (Alias) für einen bestehenden Datentyp!! Verwendung:! Häufig im Zusammenhang mit Structs (C-Style).! Flexibilität, z.b. ein Algorithmus wird mit dem Typ Number programmiert, und je nachdem ob man typedef float Number; oder typedef double Number; festlegt, verändert sich die Genauigkeit der Berechnung. 10