RO-Tutorien 3 / 6 / 12

Ähnliche Dokumente
RO-Tutorien 15 und 16

Tutorium Rechnerorganisation

Algorithmen zur Datenanalyse in C++

RO-Tutorien 3 / 6 / 12

Vorlesung Programmieren

Vorlesung Programmieren

Welche Informatik-Kenntnisse bringen Sie mit?

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

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Die Programmiersprache C Eine Einführung

Elementare Datentypen in C++

Funktionales C++ zum Ersten

3. Anweisungen und Kontrollstrukturen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

3. Java - Sprachkonstrukte I

Java I Vorlesung Imperatives Programmieren

Zeiger & Co. Verwendung und Zeigerarithme5k. thorsten möller - informa5k.unibas.ch/lehre/fs13/cs109/03- c++- zeiger.pdf. Strukturen. enum.

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

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

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Programmierkurs C++ Variablen und Datentypen

Programmierung mit C Zeiger

Programmiertechnik Kontrollstrukturen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

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

Moderne C-Programmierung

2 Eine einfache Programmiersprache

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

Die Programmiersprache C99: Zusammenfassung

Modellierung und Programmierung 1

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

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

Einführung in die C-Programmierung

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

Algorithmen und Datenstrukturen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Java-Schulung Grundlagen

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

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

Zeiger, Arrays und Strings in C und C++

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Intensivübung zu Algorithmen und Datenstrukturen

Einführung in die Programmierung Wintersemester 2011/12

Primitive Datentypen, Eingaben, Kontrollstrukturen und Methodendeklaration

Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

10 Die Programmiersprache C99: Zusammenfassung

Android-Apps Gegenüberstellung Delphi java

4 Formelsammlung C/C++

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Unterlagen. CPP-Uebungen-08/

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Primitive Datentypen

Einstieg in die Informatik mit Java

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 28. Februar 2003

Einführung in die Programmiersprache C

DuE-Tutorien 16 und 17

Einführung in die Programmiersprache C

JAVA-Datentypen und deren Wertebereich

Einstieg in die Informatik mit Java

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

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

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Vorkurs Informatik WiSe 16/17

Vorlesung Programmieren

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Einstieg in die Informatik mit Java

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

Einstieg in die Informatik mit Java

Einführung in C. EDV1-04C-Einführung 1

Dr. Monika Meiler. Inhalt

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

1. Referenzdatentypen: Felder und Strings

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. Juni 2004

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

3 Grundstrukturen eines C++ Programms anhand eines Beispiels

Einfache Rechenstrukturen und Kontrollfluß

Anweisungen zur Ablaufsteuerung

DuE-Tutorien 4 und 6. Tutorien zur Vorlesung Digitaltechnik und Entwurfsverfahren Christian A. Mandery. WOCHE 4 AM

Dr. Monika Meiler. Inhalt

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einführung in C#.NET. 1 Übersicht. 2 Typen (Types) Dieser Artikel stammt aus dem Magazin von C++.de (

Fragenkatalog ESOP WS 16/17

Einstieg in die Informatik mit Java

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Mobile Anwendungsentwicklung - Überblick über ios & Swift I -

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

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

Transkript:

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 www.kit.edu

Heute Datentypen in C Kontrollstrukturen in C Operatoren in C C-Zeiger Übungsaufgaben Christian A. Mandery RO-Tutorien 3 / 6 / 12 2/16

Ganzzahlige C-Datentypen signed/unsigned char (immer 1 Byte) signed/unsigned short [int] (oft 2 Byte) signed/unsigned int (oft 4 Byte) signed/unsigned long [int] (oft 4 oder 8 Byte) signed/unsigned long long [int] (oft 8 Byte) Die Größe der einzelnen Datentypen ist bis auf Mindestgrößen und die Größe von char nicht vorgeschrieben! Es gilt aber immer: sizeof(short int) sizeof(int) sizeof(long int) Christian A. Mandery RO-Tutorien 3 / 6 / 12 3/16

Ganzzahlige C-Datentypen signed/unsigned char (immer 1 Byte) signed/unsigned short [int] (oft 2 Byte) signed/unsigned int (oft 4 Byte) signed/unsigned long [int] (oft 4 oder 8 Byte) signed/unsigned long long [int] (oft 8 Byte) Die Größe der einzelnen Datentypen ist bis auf Mindestgrößen und die Größe von char nicht vorgeschrieben! Es gilt aber immer: sizeof(short int) sizeof(int) sizeof(long int) Christian A. Mandery RO-Tutorien 3 / 6 / 12 3/16

C-Datentypen für Gleitkommazahlen float ( single precision, 4 Byte) double ( double precision, 8 Byte) Der Aufbau von Gleitkommazahlen ist standardisiert (IEEE 754) und wird in Digitaltechnik und Entwurfsverfahren tiefergehend behandelt Christian A. Mandery RO-Tutorien 3 / 6 / 12 4/16

Sonstige C-Datentypen Zeiger Arrays (Strings als Spezialfall) Selbstdefinierte Strukturen (struct) Enumerationen (enum) Unions (union) Christian A. Mandery RO-Tutorien 3 / 6 / 12 5/16

Sonstige C-Datentypen Zeiger Arrays (Strings als Spezialfall) Selbstdefinierte Strukturen (struct) Enumerationen (enum) Unions (union) Christian A. Mandery RO-Tutorien 3 / 6 / 12 5/16

Sonstige C-Datentypen Zeiger Arrays (Strings als Spezialfall) Selbstdefinierte Strukturen (struct) Enumerationen (enum) Unions (union) Christian A. Mandery RO-Tutorien 3 / 6 / 12 5/16

Sonstige C-Datentypen Zeiger Arrays (Strings als Spezialfall) Selbstdefinierte Strukturen (struct) Enumerationen (enum) Unions (union) Christian A. Mandery RO-Tutorien 3 / 6 / 12 5/16

Sonstige C-Datentypen Zeiger Arrays (Strings als Spezialfall) Selbstdefinierte Strukturen (struct) Enumerationen (enum) Unions (union) Christian A. Mandery RO-Tutorien 3 / 6 / 12 5/16

Kontrollstrukturen Sollten bereits aus Java (1. Semester) bekannt sein Bedingte Ausführung und Fallunterscheidung: if (<Bedingung>)... [else...] switch (<Ausdruck>) {case <Wert>:...; case <Wert>:...; default:...} Schleifen: for (<Initialisierung>; <Bedingung>; <Iteration>)... while (<Bedingung>)... do... while (<Bedingung>); Christian A. Mandery RO-Tutorien 3 / 6 / 12 6/16

Kontrollstrukturen Sollten bereits aus Java (1. Semester) bekannt sein Bedingte Ausführung und Fallunterscheidung: if (<Bedingung>)... [else...] switch (<Ausdruck>) {case <Wert>:...; case <Wert>:...; default:...} Schleifen: for (<Initialisierung>; <Bedingung>; <Iteration>)... while (<Bedingung>)... do... while (<Bedingung>); Christian A. Mandery RO-Tutorien 3 / 6 / 12 6/16

Weitere Schlüsselwörter zur Kontrollflusssteuerung break: Innerste Schleife sofort verlassen continue: Nächsten Schleifendurchlauf sofort starten return: Funktion (ggf. mit Rückgabewert) sofort verlassen goto: Spärlich verwenden! Christian A. Mandery RO-Tutorien 3 / 6 / 12 7/16

Operatoren Arithmetische Operatoren: +, -, *, /, %, a++, ++a, a--, --a Logische Operatoren:!, ==,!=, <, >, >=, <=, &&, Bitweise Operatoren: &,, ^, <<, >>, ~ Zuweisungsoperatoren: =, += (etc.), <<= (etc.), &= (etc.) Sonstiges: &, *, a?b:c Christian A. Mandery RO-Tutorien 3 / 6 / 12 8/16

Operatoren Arithmetische Operatoren: +, -, *, /, %, a++, ++a, a--, --a Logische Operatoren:!, ==,!=, <, >, >=, <=, &&, Bitweise Operatoren: &,, ^, <<, >>, ~ Zuweisungsoperatoren: =, += (etc.), <<= (etc.), &= (etc.) Sonstiges: &, *, a?b:c Christian A. Mandery RO-Tutorien 3 / 6 / 12 8/16

Operatoren Arithmetische Operatoren: +, -, *, /, %, a++, ++a, a--, --a Logische Operatoren:!, ==,!=, <, >, >=, <=, &&, Bitweise Operatoren: &,, ^, <<, >>, ~ Zuweisungsoperatoren: =, += (etc.), <<= (etc.), &= (etc.) Sonstiges: &, *, a?b:c Christian A. Mandery RO-Tutorien 3 / 6 / 12 8/16

Operatoren Arithmetische Operatoren: +, -, *, /, %, a++, ++a, a--, --a Logische Operatoren:!, ==,!=, <, >, >=, <=, &&, Bitweise Operatoren: &,, ^, <<, >>, ~ Zuweisungsoperatoren: =, += (etc.), <<= (etc.), &= (etc.) Sonstiges: &, *, a?b:c Christian A. Mandery RO-Tutorien 3 / 6 / 12 8/16

Operatoren Arithmetische Operatoren: +, -, *, /, %, a++, ++a, a--, --a Logische Operatoren:!, ==,!=, <, >, >=, <=, &&, Bitweise Operatoren: &,, ^, <<, >>, ~ Zuweisungsoperatoren: =, += (etc.), <<= (etc.), &= (etc.) Sonstiges: &, *, a?b:c Christian A. Mandery RO-Tutorien 3 / 6 / 12 8/16

Deklaration von Zeigern Zeiger sind wichtiges Konzept in C! Ein Zeiger ist eine Variable, deren Wert eine Speicheradresse ist Werden bei der Deklaration durch einen Stern gekennzeichnet Bei Deklaration angeben, auf welchen Datentyp er zeigen wird (Achtung: Keine Prüfung zur Laufzeit!) oder einen void-zeiger deklarieren Beispiele: int*, char*, char**, void** Häufig: int *a statt int* a int* a, b erzeugt einen Zeiger a und eine int-variable b! int *a, *b bzw. int *a, b sind besser lesbar Christian A. Mandery RO-Tutorien 3 / 6 / 12 9/16

Deklaration von Zeigern Zeiger sind wichtiges Konzept in C! Ein Zeiger ist eine Variable, deren Wert eine Speicheradresse ist Werden bei der Deklaration durch einen Stern gekennzeichnet Bei Deklaration angeben, auf welchen Datentyp er zeigen wird (Achtung: Keine Prüfung zur Laufzeit!) oder einen void-zeiger deklarieren Beispiele: int*, char*, char**, void** Häufig: int *a statt int* a int* a, b erzeugt einen Zeiger a und eine int-variable b! int *a, *b bzw. int *a, b sind besser lesbar Christian A. Mandery RO-Tutorien 3 / 6 / 12 9/16

Deklaration von Zeigern Zeiger sind wichtiges Konzept in C! Ein Zeiger ist eine Variable, deren Wert eine Speicheradresse ist Werden bei der Deklaration durch einen Stern gekennzeichnet Bei Deklaration angeben, auf welchen Datentyp er zeigen wird (Achtung: Keine Prüfung zur Laufzeit!) oder einen void-zeiger deklarieren Beispiele: int*, char*, char**, void** Häufig: int *a statt int* a int* a, b erzeugt einen Zeiger a und eine int-variable b! int *a, *b bzw. int *a, b sind besser lesbar Christian A. Mandery RO-Tutorien 3 / 6 / 12 9/16

Verwendung von Zeigern Mit dem Adressoperator (&) ermittelt man die Adresse einer Variable Mit dem Dereferenzierungsoperator (*) greift man auf die Speicherzelle zu, deren Adresse ein Zeiger enthält Nicht verwechseln: Stern bei der Deklaration vs. Stern als Dereferenzierungsoperator! Pfeil-Operator (a->b): Kurzschreibweise für (*a).b Aber: Wozu braucht man Zeiger überhaupt? Christian A. Mandery RO-Tutorien 3 / 6 / 12 10/16

Verwendung von Zeigern Mit dem Adressoperator (&) ermittelt man die Adresse einer Variable Mit dem Dereferenzierungsoperator (*) greift man auf die Speicherzelle zu, deren Adresse ein Zeiger enthält Nicht verwechseln: Stern bei der Deklaration vs. Stern als Dereferenzierungsoperator! Pfeil-Operator (a->b): Kurzschreibweise für (*a).b Aber: Wozu braucht man Zeiger überhaupt? Christian A. Mandery RO-Tutorien 3 / 6 / 12 10/16

Verwendung von Zeigern Mit dem Adressoperator (&) ermittelt man die Adresse einer Variable Mit dem Dereferenzierungsoperator (*) greift man auf die Speicherzelle zu, deren Adresse ein Zeiger enthält Nicht verwechseln: Stern bei der Deklaration vs. Stern als Dereferenzierungsoperator! Pfeil-Operator (a->b): Kurzschreibweise für (*a).b Aber: Wozu braucht man Zeiger überhaupt? Christian A. Mandery RO-Tutorien 3 / 6 / 12 10/16

Weiteres zu Zeigern Zeiger können wie andere C-Datentypen gecastet werden (schlechter Stil!) Im Unterschied zu Java-Referenzen keinerlei Schutzmechanismen: Keine Garantie, dass Zeiger auf deklarierten Typ zeigt Keine Garantie, dass Zeiger-Ziel aligned (ausgerichtet) ist Keine Garantie, dass Zeiger auf gültigen Speicher zeigt (Nullzeiger sind explizit erlaubt und werden gezielt eingesetzt) Was passiert, wenn man (im x86 Protected Mode) auf ungültigen Speicher zugreift? Christian A. Mandery RO-Tutorien 3 / 6 / 12 11/16

Weiteres zu Zeigern Zeiger können wie andere C-Datentypen gecastet werden (schlechter Stil!) Im Unterschied zu Java-Referenzen keinerlei Schutzmechanismen: Keine Garantie, dass Zeiger auf deklarierten Typ zeigt Keine Garantie, dass Zeiger-Ziel aligned (ausgerichtet) ist Keine Garantie, dass Zeiger auf gültigen Speicher zeigt (Nullzeiger sind explizit erlaubt und werden gezielt eingesetzt) Was passiert, wenn man (im x86 Protected Mode) auf ungültigen Speicher zugreift? Christian A. Mandery RO-Tutorien 3 / 6 / 12 11/16

Weiteres zu Zeigern Zeiger können wie andere C-Datentypen gecastet werden (schlechter Stil!) Im Unterschied zu Java-Referenzen keinerlei Schutzmechanismen: Keine Garantie, dass Zeiger auf deklarierten Typ zeigt Keine Garantie, dass Zeiger-Ziel aligned (ausgerichtet) ist Keine Garantie, dass Zeiger auf gültigen Speicher zeigt (Nullzeiger sind explizit erlaubt und werden gezielt eingesetzt) Was passiert, wenn man (im x86 Protected Mode) auf ungültigen Speicher zugreift? Christian A. Mandery RO-Tutorien 3 / 6 / 12 11/16

Übungsaufgabe 1 1 Welche Datentypen wurden in der Vorlesung genannt und welche Werte können darin gespeichert werden? 2 Was ist bei diesen Datentypen zu beachten? 3 Wie legt man in C eine Variable von einem entsprechenden Datentyp an und weist dieser einen Wert zu? Christian A. Mandery RO-Tutorien 3 / 6 / 12 12/16

Übungsaufgabe 1 1 Welche Datentypen wurden in der Vorlesung genannt und welche Werte können darin gespeichert werden? 2 Was ist bei diesen Datentypen zu beachten? 3 Wie legt man in C eine Variable von einem entsprechenden Datentyp an und weist dieser einen Wert zu? Christian A. Mandery RO-Tutorien 3 / 6 / 12 12/16

Übungsaufgabe 1 1 Welche Datentypen wurden in der Vorlesung genannt und welche Werte können darin gespeichert werden? 2 Was ist bei diesen Datentypen zu beachten? 3 Wie legt man in C eine Variable von einem entsprechenden Datentyp an und weist dieser einen Wert zu? Christian A. Mandery RO-Tutorien 3 / 6 / 12 12/16

Übungsaufgabe 2 Welche Kontrollstrukturen sind in der Programmiersprache C verfügbar und wie werden diese verwendet? Christian A. Mandery RO-Tutorien 3 / 6 / 12 13/16

Übungsaufgabe 3 1 Wie wird ein Zeiger auf einen Datentyp in C deklariert? 2 Was bedeutet der Ausdruck &variable in C? 3 Erklären Sie die folgenden Zeilen C-Code und was am Ende ausgegeben wird (erklären Sie dabei, welche Bedeutung die Zeichen & und * haben): int a = 12; int* p; p = &a; printf("p = %d, a = %d", p, *p); Christian A. Mandery RO-Tutorien 3 / 6 / 12 14/16

Übungsaufgabe 3 1 Wie wird ein Zeiger auf einen Datentyp in C deklariert? 2 Was bedeutet der Ausdruck &variable in C? 3 Erklären Sie die folgenden Zeilen C-Code und was am Ende ausgegeben wird (erklären Sie dabei, welche Bedeutung die Zeichen & und * haben): int a = 12; int* p; p = &a; printf("p = %d, a = %d", p, *p); Christian A. Mandery RO-Tutorien 3 / 6 / 12 14/16

Übungsaufgabe 3 1 Wie wird ein Zeiger auf einen Datentyp in C deklariert? 2 Was bedeutet der Ausdruck &variable in C? 3 Erklären Sie die folgenden Zeilen C-Code und was am Ende ausgegeben wird (erklären Sie dabei, welche Bedeutung die Zeichen & und * haben): int a = 12; int* p; p = &a; printf("p = %d, a = %d", p, *p); Christian A. Mandery RO-Tutorien 3 / 6 / 12 14/16

Übungsaufgabe 4 Erstellen Sie ein Programm, das die Elemente in einem zweidimensionalen Array um den Wert 5 erhöht. int b[x][y] = { {0, 1, 2, 3}, {4, 5, 6, 7} }; /*... */ Christian A. Mandery RO-Tutorien 3 / 6 / 12 15/16

Fertig! Quelle: http://xkcd.com/138/ Christian A. Mandery RO-Tutorien 3 / 6 / 12 16/16