C-Propädeutikum Höhere Datentypen



Ähnliche Dokumente
C- Kurs 07 Höhere Datentypen

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

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

Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung

Strukturen in C. Strukturen stellen eine Zusammenfassung von Datenelementen unterschiedlichen Typs unter einem Namen dar.

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

2. Programmierung in C

Informatik. Strukturen und Aufzählungstypen. Vorlesung

Algorithmen und Datenstrukturen

9. Vektoren. (auch Felder/array)

Übersicht. Einführung in die Programmierung. Zeichenketten. Zeichenketten. Zeichenketten. Arrays und Zeichenketten. Arrays und Zeichenketten

Teil 6: Strukturen und Unionen Gliederung

C-Propädeutikum Funktionen

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

Teil 6: Strukturen und Unionen Gliederung

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

EEPROM Strukturen speichern über SPI-Bus

Modellierung und Programmierung 1

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

Übersicht. Informatik 1 Teil 9: komplexe Datentypen (Strukturen, Enumerationen, Unions)

Übungspaket 23 Mehrdimensionale Arrays

Programmierkurs C++ Variablen und Datentypen

4.2 Programmiersprache C

Strukturierte Datentypen

Praxis der Programmierung

Praxis der Programmierung

Physische Datenstrukturen

Felder in C. Felder stellen eine Reihung von Elementen gleichen Typs dar. Man spricht auch von Vektoren oder Arrays.

INE1 Arrays, Zeiger, Datenstrukturen

Grundlagen und Konzepte von C Datenstrukturen

F Zeiger, Felder und Strukturen in C

Felder (1) Felder (Arrays) speichern viele Datenelemente des gleichen Typs. Auf einzelne Elemente kann über einen Index zugegriffen werden

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

7. Organisation von Informationen

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

1. Referenzdatentypen: Felder und Strings

Inhalt. Peter Sobe 63. Felder in C

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

Datenstrukturen. InE1 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert

Das folgende Programm demonstriert, wie man Speicheradressen von Variablen ermittelt.

Abgeleitete Datentypen

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Felder (1) Allgemeines

Crashkurs C++ - Teil 1

Kapitel 2/3: Darstellung von Information / Kontrollstrukturen. Inhalt. Zusammengesetzte Datentypen Wiederholungen (in Programmen)

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Übungspaket 23 Mehrdimensionale Arrays

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

Wertebereich und Genauigkeit der Zahlendarstellung

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

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

C- Kurs 09 Dynamische Datenstrukturen

Übungspaket 14 Eindimensionale Arrays

5. Abgeleitete Datentypen

5. Abgeleitete Datentypen

Einführung in die Programmierung

Einstieg in die Informatik mit Java

Zeiger, Arrays und Strings in C und C++

Reihungen. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang

+ C - Array (Vektoren, Felder)

Algorithmen & Datenstrukturen

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

Einführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy

Programmierung mit C Zeiger

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

2. Programmierung in C

Hydroinformatik I: Referenzen und Zeiger

2. Programmierung in C

Variablen, Konstanten und Datentypen

Zusammenfassung des Handzettels für Programmieren in C

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

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

2. Programmierung in C

Advanced Programming in C

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Objekte werden eindeutig beschrieben durch ihren Typ und einen beliebig wählbaren Bezeichner.

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

Zeiger (engl. Pointer)

RO-Tutorien 3 / 6 / 12

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

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

Einstieg in die Informatik mit Java

8. Referenzen und Zeiger

Java Referenzdatentypen genauer betrachtet

Informatik Vorkurs - Vorlesung 2

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

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Zusammengesetzte Datentypen -- Arrays und Strukturen

Programmierung mit C Strukturen

Hydroinformatik I: Referenzen und Zeiger

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

Anregungen zu Übung 2

Dr. Monika Meiler. Inhalt

Basiswissen in Informatik

Arrays (Felder/Vektoren)

Informatik I (D-ITET)

Transkript:

C-Propädeutikum Höhere Datentypen Dipl.-Inf. Stefan Freitag freitag@uni-leipzig.de Universitätsrechenzentrum Universitätsbibliothek Universität Leipzig basiert auf den Originalfolien von Jörn Hoffmann

Höhere Datentypen Überblick Höhere Datentypen Werden Mithilfe von primitiven Datentypen definiert Unterscheidung: Statische vs. dynamische Anlegung Strukturierte Datentypen Inhalt 1. Felder int i[10] 2. Strukturen struct, union 3. Aufzählung enum {schwarz, weiß} 4. Pointer int *i; Stefan Freitag C-Propädeutikum Folie 2

Felder Institut für Informatik Felder engl. Array Zusammenfassung von gleichartigen Elementen eines Typs Belegen aufeinander folgende Speicherplätze Ansprechen über ein oder mehrere Indizes Eindimensionale Felder (Vektoren) Mehrdimensionale Felder (Matrizen) Nutzen Zusammenfassung gleicher Typen Zeichenketten Stefan Freitag C-Propädeutikum Folie 3

Eindimensionale Felder Institut für Informatik Syntax Deklaration : Typ Feldname[Anzahl_n]; Ansprechen : Feldname[Index_i] Semantik Deklaration: Reservierung von Speicherplätzen für eine Folge von n- Elementen eines Typs Ansprechen: Auswahl des i-ten Element zwischen [0..n-1] Feld startet mit Index 0 Feld mit n Elementen endet beim Index n-1 Feldname ist symbolsicher Bezeichner der Anfangsadresse E (0) E (2)... E (n-1) sizeof(typ) Anfangsadresse (Name) Letzter Index Stefan Freitag C-Propädeutikum Folie 4

Eindimensionale Felder Beispiel Beispiel // felder.c int index, ungeradezahlen[10]; // Typische Art ein Feld mittels For-Schleife zu durchlaufen for (index=0; index < 10; index++) ungeradezahlen[index] = 2*index + 1; // Ausgabe des Feldes for (i=0; i < 10; i++) printf( Index %d = %d\n, i, feld[i]); Stefan Freitag C-Propädeutikum Folie 5

Eindimensionale Felder Initialisierung Initialisierung Zuweisung von Anfangswerten bei der Definition Spätere Zuweisungen müssen manuell erfolgen // Konkrete Angabe der Elementanzahl und Initialisierung int werte[4] = {2, 3, 4, 5}; // Implizite Angabe der Elementanzahl durch sofortige Initialisierung float messdaten[] = {32.6, 25.4, 10.8, 8.2}; // Unvollständige Initialisierung, restlichen Elemente haben Wert 0 double kontostand[3] = {100}; Stefan Freitag C-Propädeutikum Folie 6

Eindimensionale Felder Speicheradressierung Speicheradressierung Felder sind Speicherplatzadressen in C Feldname ist Synonym für Startadresse des Speicherbereichs Elemente liegen sizeof(typ) Byte auseinander Ein Element belegt sizeof(typ) Byte Feld mit n Elementen belegt n*sizeof(type) Byte Ermittlung der Speicherstelle mittels Adressoperator & Stefan Freitag C-Propädeutikum Folie 7

Eindimensionale Felder Speicheradressierung Beispiel // felder2.c #include <stdio.h> int main() { int i, a[4] = {10, 11, 12, 13}; // Ausgabe der Speicheradressen des Arrays a for (i=0; i < 5; i++) printf("&a[%d]=%d\n", i, (int)&a[i]); return 0; } Ausgabe: &a[0]=..528 &a[1]=..532 &a[2]=..536 &a[3]=..540 // Potentiell unterschiedlich Stefan Freitag C-Propädeutikum Folie 8

Mehrdimensionale Felder Institut für Informatik Syntax Deklaration : Typ Feldname[Anzahl_m][Anzahl_n][..]; Ansprechen : Feldname[Index_i][Index_j][..] Semantik Zwei und mehrdimensionale Felder möglich Deklaration: Reservierung von Speicherplatz für eine Folge von n*m Elementen eines Typs Auswahl des i,j-ten Elements zwischen [0..m-1][0..n] Feld startet mit Index [0][0] Feld mit (n*m)-elementen endet beim Index [m-1][n-1] Feldname ist symbolsicher Bezeichner der Anfangsadresse Stefan Freitag C-Propädeutikum Folie 9

Mehrdimensionale Felder Beispiel Beispiel int i, j, matrix[3][4]; matrix[0][0] = 1; matrix[2][0] = 9; matrix[2][3] = 12; // Erstes Element // Erstes Element, der letzten Zeile // Letztes Element // Ausgabe des Feldes for (i=0; i < 3; i++) for (j=0; j < 4; i++) printf( [%d][%d] = %d\n, i, j, matrix[i][j]); Stefan Freitag C-Propädeutikum Folie 10

Mehrdimensionale Felder Initialisierung Initialisierung Zuweisung von Anfangswerten bei der Definition Spätere Zuweisungen müssen manuell erfolgen // Konkrete Angabe der Speicherplätze und Initialisierung int werte[3][4] = {{00, 01, 02, 03}, {10, 11, 12, 13}, {20, 21, 22, 23}}; // Implizite Angabe der Speicherplätze durch sofortige Initialisierung // Letzte Feldgröße muss bekannt sein float messdaten[][2] = {{32.6, 25.4}, {10.8, 8.2}, {20.1}{15.0}}; // Unvollständige Initialisierung, restlichen Elemente haben Wert 0 double matrix[3][3] = {{100, 65}, {1}}; Stefan Freitag C-Propädeutikum Folie 11

Eindimensionale Felder Speicheradressierung Speicheradressierung Wie bei eindimensionalen Feldern Adressberechnung für Stelle (i,j) im int array[m][n] i*m*sizeof(int) + j*sizeof(int) Ermittlung der Speicheradresse mittels &-Adressoperator Stefan Freitag C-Propädeutikum Folie 12

Eindimensionale Felder Speicheradressierung // matrix.c #include <stdio.h> #define M 3 #define N 4 int main() { int i, j, matrix[m][n]; // Ausgabe aller Speicheradressen der Matrix-Komponenten for (i=0; i < M; i++) { for (j=0; j < N; j++) printf("&a[%d][%d] =..%.3d\n", i, j, (int)&matrix[i][j] % 1000); } } printf("\n"); return 0; Ausgabe: // Potentiell unterschiedlich &a[0][0]=..72 &a[0][1]=..76 &a[0][2]=..80 &a[1][0]=..84 &a[1][1]=..88 &a[1][2]=..92 Folie 13

Strukturen Institut für Informatik Strukturen Zusammenfassung verschiedener Komponenten zu einer Einheit Komponenten können unterschiedliche Datentypen haben Nutzen Abspeicherung zusammengehöriger Daten Modellierung von Objekten Stefan Freitag C-Propädeutikum Folie 14

Strukturen Einfache Strukturen Syntax Deklaration: struct Strukturname { Typ1 Variablenname1;.. Typ_n Variablenname_n; } [Variablename]; Definition : struct Strukturname Strukturvariable; Ansprechen : Strukturvariable.Variablenname_i Semantik Deklaration : Bekanntmachung einer Struktur mit n Komponenten Definition : Speicherreservierung für zuvor deklarierte Struktur Ansprechen : Auswahl einer Komponenten Stefan Freitag C-Propädeutikum Folie 15

Strukturen Einfache Strukturen Beispiel struct mitarbeiter { char name[50]; // Nachname float gehalt; // Jahresgehalt in int parkplatz; // 0=nein, 1=ja }; struct Mitarbeiter a, b; struct Mitarbeiter team[10]; // Zwei einzelne Mitarbeiter // Feld mit 10 Mitarbeitern Stefan Freitag C-Propädeutikum Folie 16

Strukturen Einfache Strukturen Initialisierung struct mitarbeiter { char name[50]; // Nachname float gehalt; // Jahresgehalt in int parkplatz; // 0=nein, 1=ja }; // Vollständig struct Mitarbeiter a = { Mustermann, 42000, 1}; // Unvollständig mittels Punktoperator struct Mitarbeiter m = {.name= Mustermann,.parkplatz=1}; Stefan Freitag C-Propädeutikum Folie 17

Typdefinitionen Institut für Informatik Typdefinition von Strukturen Strukturen werden oft als neuer Typ definiert Einspart Tipparbeit, da struct entfällt Typdefinition kann bereits bei Deklaration erfolgen Syntax typedef Typ Alias; Beispiele typedef struct mitarbeiter mitarbeiter_t; typedef struct _student { long matrikel; char *name; } student_t; // Bezeichner irrelevant, kann entfallen // Speicher muss später dynamisch allokiert werden Stefan Freitag C-Propädeutikum Folie 18

Strukturen Einfache Strukturen Beispiel // mitarbeiter.c typedef struct { char name[strlen]; float gehalt; int parkplatz; } mitarbeiter_t; mitarbeiter_t a = {"Mustermann", 42000, 1}; mitarbeiter_t b = {.name = "Mustermann",.parkplatz=1}; mitarbeiter_t team[10] = {a, b}; Stefan Freitag C-Propädeutikum Folie 19

Strukturen Variante Strukturen Variante Strukturen Zugriff auf Struktur über mehrere Varianten Einfache Struktur : Speicher liegt hintereinander Variante Struktur : Speicher liegt übereinander Selber Platz wird für verschiedenartige Datentypen genutzt Komponenten beginnen mit selber Speicheradresse Komponenten enden mit unterschiedlicher Adresse Nutzen Generische Abspeicherung ähnlicher Datentypen Typkonventionen Stefan Freitag C-Propädeutikum Folie 20

Strukturen Variante Strukturen Syntax Wie bei Strukturen union Strukturname { Typ1 Variable1;... Typ_n Variable_n; } [Variablenname]; Semantik Variable 1..n überdecken sich Stefan Freitag C-Propädeutikum Folie 21

Strukturen Variante Strukturen Beispiel // Siehe auch endianness.c union U2 { int zahl; char byte[4]; short shrt; }; Zahl Byte[0] Byte[1] Byte[2] Byte[3] shrt Stefan Freitag C-Propädeutikum Folie 22

Aufzählungen Institut für Informatik Aufzählungen (enum) Aufzählungstyp (keine Struktur) Zur Deklaration von Konstanten Abspeicherung als Integer-Wert Nutzen Aufzählung Benennung von Fällen zur Fallunterscheidung Definition von semantisch ähnlichen Konstanten {true, false} Stefan Freitag C-Propädeutikum Folie 23

Aufzählungen Institut für Informatik Syntax enum Typname { Konstante_1 [= Wert], Konstante_2 [= Wert],... Konstante_n [= Wert]; }; Semantik Festlegung von definierten Konstanten Automatische Wertbelegung durch Hochzählung Werte beginnen bei 0 Nachfolger um eins erhöht Stefan Freitag C-Propädeutikum Folie 24

Aufzählungen Institut für Informatik Beispiele // enum.c enum farbe {ROT, GRUEN, BLAU}; typedef enum { status_undef = 0, status_success, status_abort, status_error = 255 }status_t; status_t status = status_abort; Stefan Freitag C-Propädeutikum Folie 25