Datentypen: Enum, Array, Struct, Union

Ähnliche Dokumente
2. Semester, 2. Prüfung, Lösung

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Objektorientierte Programmierung

Einführung in die Programmierung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Tutorium Rechnerorganisation

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Die Programmiersprache C99: Zusammenfassung

Einführung in die Java- Programmierung

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

1 Vom Problem zum Programm

Professionelle Seminare im Bereich MS-Office

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

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

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Programmierkurs Java

Zählen von Objekten einer bestimmten Klasse

Modellierung und Programmierung 1

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

1 Mathematische Grundlagen

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Diana Lange. Generative Gestaltung Operatoren

Prozentrechnung. Wir können nun eine Formel für die Berechnung des Prozentwertes aufstellen:

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

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Einführung in die Programmierung (EPR)

Klicksparen. Einrichtung und Nutzung von Klicksparen am Beispiel vom iphone Hamburg,

Übung 9 - Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Einführung in die Programmierung

Kopfzeile. Inhaltsverzeichnis

Java: Vererbung. Teil 3: super()

Mathematischer Vorbereitungskurs für Ökonomen

Produktinformation / Datenblatt SMD LED Strip Auf flexibler Platine Vollvergossen 60 LEDs / Meter

Vorkurs C++ Programmierung

teischl.com Software Design & Services e.u. office@teischl.com

Zusammengesetzte Datentypen -- Arrays und Strukturen

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Java Einführung Operatoren Kapitel 2 und 3

Klausur in Programmieren

P&P Software - Adressexport an Outlook 05/29/16 14:44:26

Public-Key-Infrastrukturen

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

Aufgabensammlung Bruchrechnen

Bruchrechnung Wir teilen gerecht auf

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Anlegen eines Speicherbereichs mit DB, DW eleganter in Kombination mit EQU, Timer-Interrupt

Arcavis Backend - Invoice Baldegger+Sortec AG

Übungen zu C++ Kapitel 1

Anleitung zum Erstellen eines Freihaltetermins

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

Übungsaufgaben Tilgungsrechnung

Mediator 9 - Lernprogramm

Webalizer HOWTO. Stand:

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen Programmieren 1 Felix Rohrer. Übungen

Programmierung in C. Grundlagen. Stefan Kallerhoff

Viele Bilder auf der FA-Homepage

WORKSHOP für das Programm XnView

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

Objektorientierte Programmierung. Kapitel 12: Interfaces

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

14 Schmiegeparabel und Freunde, Taylor-Reihe

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Internationales Altkatholisches Laienforum

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

7 Rechnen mit Polynomen

Javakurs 2013 Objektorientierung

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

Rente = laufende Zahlungen, die in regelmäßigen Zeitabschnitten (periodisch) wiederkehren Rentenperiode = Zeitabstand zwischen zwei Rentenzahlungen

Anwendungsbeispiele Buchhaltung

Anbindung des eibport an das Internet

Programmentwicklungen, Webseitenerstellung, Zeiterfassung, Zutrittskontrolle

Einführung in die Programmierung

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

1) Farbsteuergerät in der Nikobus-Software unter Modul zufügen hinzufügen.

Woraus besteht ein Bild? (c) Winfried Heinkele

VisualBasic - Variablen

Befehlssatz zum High Speed Interface-88-USB (HSI-88-USB) (ab Firmware 0.71) (Version 1.2)

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Anleitung zum Herunterladen von DIN-Vorschriften außerhalb des internen Hochschulnetzes

Die Ergebnisse dazu haben wir in der beiliegenden Arbeit zusammengestellt.

Info-Veranstaltung zur Erstellung von Zertifikaten

Österreichische Trachtenjugend

Webseiten sind keine Gemälde. Webstandards für ein besseres Web. Webstandards für ein besseres Web

Stand: Adressnummern ändern Modulbeschreibung

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

Leichte-Sprache-Bilder

* Leichte Sprache * Leichte Sprache * Leichte Sprache *

6 Zusammenarbeits-Funktionen (Collaboration)

Massenversand Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Kosten-Leistungsrechnung Rechenweg Optimales Produktionsprogramm

Java Kurs für Anfänger Einheit 5 Methoden

Handbuch ECDL 2003 Professional Modul 3: Kommunikation Kalender freigeben und andere Kalender aufrufen

Transkript:

Datentypen: Enum, Array, Struct, Union C-Kurs 2013, 2. Tutorium Freitagsrunde http://wiki.freitagsrunde.org 10. September 2013 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. 1 / 22

Inhaltsverzeichnis 1 enum Boolean als Enum Übungsaufgabe: colors mit enum 2 Arrays Java-Arrays vs. C-Arrays 3 struct 4 union 5 Zusammenfassung: Datenstrukturen 6 Zusatzaufgabe: Arrays wie in Java 2 / 22

Aufzählungen(Enums) 1 i n t 1 double 1 enum d a y t {Mon, Tue, Wed, Thu, F r i, Sat, Sun } ; Neu definierter Datentyp: enum day t mit 7 möglichen Werten Der Compiler wandert die Elemente des enum in Integer um 3 / 22

Enum 1 enum d a y t {Mon, Tue, Wed, Thu, F r i, Sat, Sun } ; 2 enum d a y t c u r r e n t d a y = Tue ; 3 4 s w i t c h ( c u r r e n t d a y ) { 5 c a s e Sat : 6 c a s e Sun : 7 p r i n t f ( Es i s t Wochenende! \n ) ; 8 break ; 9 d e f a u l t : 0 p r i n t f ( Es i s t u n t e r der Woche. \n ) ; 1 break ; 2 } 4 / 22

Enum werden auch als Aufzählungstypen bezeichnet Intern als Integer gehandelt Elemente sind nacheinander durchnummeriert Beispielsweise lassen sich die Wochentage gut repräsentieren Wie wäre es mit Boolean? 5 / 22

Boolean repräsentiert durch Enums In C entspricht false dem Wert 0 alles ungleich 0 ist true 1 enum b o o l {FALSE,TRUE} ; Wenn man nichts angibt, wird das erste Element 0, das zweite 1, usw Man kann auch diese Konstanten direkt einen Wert explizit zuweisen: 1 enum b o o l { 2 TRUE = 42, 3 FALSE = 0 4 } ; 6 / 22

Enum-Boolean mit typedef Verwendet kann es werden mit 1 enum b o o l {FALSE,TRUE} ; 2 3 enum b o o l f l a g = TRUE; Sieht jedoch ungewöhnlich aus Besser ist die Verwendung mit typedef 1 t y p e d e f enum b o o l {FALSE, TRUE} b o o l e a n ; 2 3 b o o lean f l a g = TRUE; 7 / 22

Colors mit enum Schreibe eine Datenstruktur Color, die die Grundfarben black, white, red, yellow, green, cyan, blue, und magenta definiert, indem den einzelnen Varianten explizit HEX-Werte zugewiesen werden! 1 t y p e d e f enum c o l o r { 2... 3... 4 } C o l o r ; 8 / 22

Lösung der Übungsaufgabe 1 t y p e d e f enum c o l o r { 2 WHITE= 0xFFFFFF, 3 BLACK= 0 x000000, 4 RED= 0 xff0000, 5 YELLOW= 0 xffff00, 6 GREEN= 0 x00ff00, 7 CYAN= 0 x00ffff, 8 BLUE= 0 x0000ff, 9 MAGENTA= 0 xff00ff 0 } C o l o r ; 1 2 // Verwendung : 3 p r i n t f ( White:%d ( d e c i m a l ) %x ( hex ) \n, WHITE, WHITE) ; 9 / 22

Java-Arrays vs. C-Arrays Arrays in C Sind ähnlich zu Arrays in Java Länge in Bytes kann mit sizeof abgefragt werden Für echte Länge: Division mit der Größe eines Elements des Arrays ebenfalls mit sizeof 1 C o l o r rainbow [ ] = {RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA} ; 2 i n t l e n g t h = s i z e o f ( rainbow ) / s i z e o f ( i n t ) ; 3 4 // Verwendung : 5 p r i n t f ( Der Regenbogen hat %d Farben \n, l e n g t h ) ; 10 / 22

C-Arrays im Detail Werte eines Arrays werden hintereinander im Speicher abgelegt Natürlich ist es in C genauso wie in Java möglich mehrdimensionale Arrays anzulegen Array selbst ist nur die Adresse des ersten Elements Zur Laufzeit weiß das C-Programm nicht mehr, dass es ein Array ist Bei sizeof legt Compiler eine Tabelle an Diese wird nach dem Übersetzen gelöscht Dort ist unter dem Namen die Länge des Arrays vermerkt 1 C o l o r rainbow [ ] = {RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA} ; 2 i n t l e n g t h = s i z e o f ( rainbow ) / s i z e o f ( i n t ) ; 11 / 22

struct 1 s t r u c t name{ 2 datentyp1 var1 ; 3 datentyp2 var2 ; 4... 5 } ; Benutzerdefinierter komplexer Datentyp (errinert an Java Klassen) Dabei verwendet man das Schlüsselwort struct Auch typedef möglich, ähnlich wie enum struct Konstrukt so groß, wie die Summe der Größen seinen Membervariablen Semikolon am Ende! 12 / 22

Übungsaufgabe: Verwendung von struct Eine Handvoll Farben mit enum ist zu begrenzt. Wir wollen die einzelnen RGB Farbkanäle red, green und blue gezielt verändern und damit alle Farben definieren, die es gibt. Deklariert ein struct colordefinition mit den Membervariablen red, green uns blue (unsigned char : 8 Bit, 0..255) definiert die Farben black, blue und white als Objekte. Gibt den R-Wert von black am Bildschirm aus 13 / 22

Lösung: struct 1 t y p e d e f s t r u c t c o l o r d e f { 2 u n s i g n e d char red ; 3 u n s i g n e d char g reen ; 4 u n s i g n e d char b l u e ; 5 } c o l o r D e f i n i t i o n ; 6 7 8 c o l o r D e f i n i t i o n b l a c k ={0,0,0}; 9 c o l o r D e f i n i t i o n w h i t e ={255, 255, 255} ; 0 c o l o r d e f i n i t i o n b l u e ={. b l u e =255}; 1 2 // Verwendung : 3 p r i n t f ( %d, b l a c k. r ed ) ; 14 / 22

Union 1 union name{ 2 datentyp1 var1 ; 3 datentyp2 var2 ; 4... 5 } ; Wird genauso wie ein Struct deklariert Dabei verwendet man jedoch das Schlüsselwort union Alle Variablen sind Bezeichner für dieselbe Speicherstelle somit ist der union Konstrukt nur so groß, wie seine größte Variable (Platzsparend!) Damit können wir colordefinition erweitern, sodass wir wahlweise RGB-Angaben oder HEX-Werte speichern können. 15 / 22

Union: Erweiterung des Color-Types 1 t y p e d e f union c o l o r { 2 s t r u c t rgb { 3 u n s i g n e d char red ; 4 u n s i g n e d char g r e e n ; 5 u n s i g n e d char b l u e ; 6 } rgb ; 7 i n t hex ; 8 } C o l o r ; 9 0 C o l o r schweinchenrosa={0 x f f b 6 c 1 } ; 1 C o l o r navy ={0,0,128} 2 3 // Verwendung 4 p r i n t f ( B Wert der Navy : %d\n, navy. rgb. b l u e ) ; 16 / 22

Zusammenfassung: enum, Arrays enum color : Neu definierter Datentyp mit einer Auflistung von möglichen Werten. typedef enum color {...} Color : das Wort Color kann als Datentyp anstelle von enum color verwendet werden Color rainbow[6] : ein Array, das 6 Elemente vom Typ Color enthalten kann Color frankreich[]={blue, WHITE, RED} : ein Array, das 3 Elemente vom Typ Color enthält sizeof(frankreich)/sizeof(int) : die Länge unseres Arrays (hier:3) 17 / 22

Zusammenfassung: struct, union struct stru{int a; char b;}; Neu definierter Komplexer Datentyp struct stru mit int und char nacheinander struct stru var1={1, x }; : Verwendung von struct, beide Variablen werden gesetzt union uni{int a; char b;}; Neu definierter Datentyp union uni, bei der die Elemente wahlweise int oder char enthalten können union uni var2={.a=1}; : Verwendung von union, nur eine Variable darf gesetzt werden 18 / 22

Zusatzaufgabe Verwenden wir die geeignete Datenstruktur für die Aufgabenstellung! 19 / 22

Übungsaufgabe: Arrays wie in Java 1 C o l o r rainbow [ ] = {RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA} ; 2 i n t l e n g t h = s i z e o f ( rainbow ) / s i z e o f ( i n t ) ; Angenommen, wir wollen eine Funktion printcolor benutzen, welche die einzelnen Farben im Array auf dem Terminal ausgibt. Die Funktion printcolor hat dabei folgende Signatur 1 v o i d p r i n t C o l o r ( C o l o r f a r b e n [ ], i n t l e n g t h ) ; 20 / 22

1 // Regenbogen 2 c o l o r rainbow [ ] = {RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA} ; 3 i n t l e n g t h 1 = s i z e o f ( rainbow ) / s i z e o f ( i n t ) ; 4 5 // F r a n k r e i c h f a h n e 6 c o l o r f r a n k r e i c h [ ] = {BLUE, WHITE, RED} ; 7 i n t l e n g t h 2 = s i z e o f ( f r a n k r e i c h ) / s i z e o f ( i n t ) ; Bei mehreren Arrays, die an printcolor übergeben werden, muss man die Arrays jedesmal anlegen, die Länge ermitteln, in einer separaten Variable speichern und merken, etc... unübersichtlich! Wir vermissen java Arrays und.length! 21 / 22

Implementierung: Arrays wie in Java 1 t y p e d e f s t r u c t c o l o r a r r a y { 2 c o n s t i n t l e n g t h ; 3 c o l o r c o n t e n t [ 9 ] ; 4 } c o l o r A r r a y ; 5 6 // Ein c o l o r L i s t e s t r u c t anlegen, 7 c o l o r A r r a y rainbow={ 8. l e n g t h= 9, 9. c o n t e n t= {RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA, RED, BLUE, YELLOW} 0 } ; 1 2 // Laenge des A r r a y s 3 i n t a r r a y l e n g t h = rainbow. l e n g t h 22 / 22