Programmieren in C Grundlagen C 3 Hochschule Fulda

  • Slides: 48
Download presentation
Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2014/15 http:

Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2014/15 http: //c-ai. rz. hs-fulda. de Peter Klingebiel, HS Fulda, DVZ

Felder 1 • Ein Feld (array) ist die Zusammenfassung von Daten gleichen Typs in

Felder 1 • Ein Feld (array) ist die Zusammenfassung von Daten gleichen Typs in einer Variablen • Felder haben eine oder auch mehrere Dimensionen (Vektoren, Matrizen, …) • Definition von Feldern: char sbuf[128]; int arr[] = { 1, 8, 7, -1, 2 }; short mat[2][2] = { 11, 12, 21, 22}; • Mit der Felddefinition wird der benötigte Speicherplatz für die Variable reserviert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2

Felder 2 • Zugriff auf Feldelemente mit Index in []: char c; c =

Felder 2 • Zugriff auf Feldelemente mit Index in []: char c; c = sbuf[32]; sbuf[0] = 'A'; • Die Feldindizierung beginnt immer mit 0! short s, mat[3][3]; s = mat[0][0]; • Felder werden elementweise und Zeile für Zeile hintereinander abgespeichert • Es gibt beim Zugriff keinerlei Überprüfungen auf Bereichsgrenzen von Feldern! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3

Felder 3 • Feldnamen sind eigentlich Pointer, zeigen auf das erste Element im Feld

Felder 3 • Feldnamen sind eigentlich Pointer, zeigen auf das erste Element im Feld • Felder werden mit Adresse an Funktionen übergeben (wie Pointer) • Feldindizes sind eigentlich Offsets und geben den Abstand zum Feldanfang an Bsp: ia[3] *(&ia[0] + 3 * sizeof(int)) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

Felder und Zeiger 1 • Felder reservieren bei der Definition den benötigten Speicherplatz •

Felder und Zeiger 1 • Felder reservieren bei der Definition den benötigten Speicherplatz • Zeiger erhalten den Speicherplatz erst bei der Zuweisung des Objekts, auf das sie zeigen, oder bei dynamischer Speicherallokation • Ähnlichkeit von Feldern und Zeigern mächtige Pointerarithmetik möglich • Manchmal ein wenig unverständlich! • Pointer essentiell bei Zeichenketten (strings) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

Felder und Zeiger 2 • Beispiel Programmieren in C - Peter Klingebiel - HS

Felder und Zeiger 2 • Beispiel Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6

Felder und Zeiger 3 • Vor Ablauf Programmieren in C - Peter Klingebiel -

Felder und Zeiger 3 • Vor Ablauf Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7

Felder und Zeiger 4 • Programmstart: Speicher für Feld reservieren Programmieren in C -

Felder und Zeiger 4 • Programmstart: Speicher für Feld reservieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8

Felder und Zeiger 5 • Programmstart: Speicher für Zeiger reservieren Programmieren in C -

Felder und Zeiger 5 • Programmstart: Speicher für Zeiger reservieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9

Felder und Zeiger 6 • Zeiger bufp Feld buf bzw. &buf[0] Programmieren in C

Felder und Zeiger 6 • Zeiger bufp Feld buf bzw. &buf[0] Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10

Felder und Zeiger 7 • Zeichen 'A' buf[0] Programmieren in C - Peter Klingebiel

Felder und Zeiger 7 • Zeichen 'A' buf[0] Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

Felder und Zeiger 8 • *bufp 'Y' Programmieren in C - Peter Klingebiel -

Felder und Zeiger 8 • *bufp 'Y' Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

Felder und Zeiger 9 • bufp inkrementieren Programmieren in C - Peter Klingebiel -

Felder und Zeiger 9 • bufp inkrementieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13

Felder und Zeiger 10 • *bufp 'Z' Programmieren in C - Peter Klingebiel -

Felder und Zeiger 10 • *bufp 'Z' Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14

Felder und Zeiger 11 • Danach Programmieren in C - Peter Klingebiel - HS

Felder und Zeiger 11 • Danach Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15

Zeichenketten 1 • Zeichenketten (strings) sind eine Folge von Einzelzeichen char • String ist

Zeichenketten 1 • Zeichenketten (strings) sind eine Folge von Einzelzeichen char • String ist terminiert mit '' • Speicherbedarf: Länge + 1 Byte • Beispiel: char *s; char *hallo = "Hallo, Welt!"; • String Pointer auf Feld von Elementen vom Typ char • Nullstring NULL (definiert in stdio. h) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16

Zeichenketten 2 • Beispiel: char buffer[128]; char *bp = buffer; • Stringpointer bp erstes

Zeichenketten 2 • Beispiel: char buffer[128]; char *bp = buffer; • Stringpointer bp erstes Zeichen im Feld buffer • Ähnlichkeit von Feldern und Pointern! • Beispiel: String kopieren und ausgeben Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17

Zeichenketten 3 • Beispiel: String kopieren Programmieren in C - Peter Klingebiel - HS

Zeichenketten 3 • Beispiel: String kopieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18

Zeichenketten 4 • Programmstart Programmieren in C - Peter Klingebiel - HS Fulda -

Zeichenketten 4 • Programmstart Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

Zeichenketten 5 • Konstante in Speicher Programmieren in C - Peter Klingebiel - HS

Zeichenketten 5 • Konstante in Speicher Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20

Zeichenketten 6 • Pointer s 1 initialisieren Programmieren in C - Peter Klingebiel -

Zeichenketten 6 • Pointer s 1 initialisieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21

Zeichenketten 7 • Speicher für s 1 und t anlegen Programmieren in C -

Zeichenketten 7 • Speicher für s 1 und t anlegen Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22

Zeichenketten 8 • String s 2 = t s 2 = & t[0] Programmieren

Zeichenketten 8 • String s 2 = t s 2 = & t[0] Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23

Zeichenketten 9 • Schleife: zeichenweise kopieren Programmieren in C - Peter Klingebiel - HS

Zeichenketten 9 • Schleife: zeichenweise kopieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24

Zeichenketten 10 • Zeichen kopieren Programmieren in C - Peter Klingebiel - HS Fulda

Zeichenketten 10 • Zeichen kopieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25

Zeichenketten 11 • Pointer inkrementieren Programmieren in C - Peter Klingebiel - HS Fulda

Zeichenketten 11 • Pointer inkrementieren Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26

Zeichenketten 12 • • … Zeichen kopieren Pointer inkrementieren bis Ende des Strings erreicht

Zeichenketten 12 • • … Zeichen kopieren Pointer inkrementieren bis Ende des Strings erreicht *s 1 == '' • … Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27

Zeichenketten 13 • End of String: *s 1 == '�' Programmieren in C -

Zeichenketten 13 • End of String: *s 1 == '' Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28

Zeichenketten 14 • String terminieren: *s 2 = '�' Programmieren in C - Peter

Zeichenketten 14 • String terminieren: *s 2 = '' Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29

Zeichenketten 15 • Danach Programmieren in C - Peter Klingebiel - HS Fulda -

Zeichenketten 15 • Danach Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30

Exkurs Kommandozeilenparameter 1 • Bekannt: jedes C-Programm startet mit einer main-Funktion • main-Funktion ist

Exkurs Kommandozeilenparameter 1 • Bekannt: jedes C-Programm startet mit einer main-Funktion • main-Funktion ist vom Typ int und hat drei Parameter: • int argc Anzahl von Kommandozeilenparametern • char *argv[] Feld von Strings Kommandozeilenparameter • char *envv[] Feld von Strings Umgebungsparameter Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31

Exkurs Kommandozeilenparameter 2 • Beispiel echo 1. c /* echo 1. c */ #include

Exkurs Kommandozeilenparameter 2 • Beispiel echo 1. c /* echo 1. c */ #include <stdio. h> int main(int argc, char **argv) { while(--argc) printf("%s ", *++argv); putchar('n'); return(0); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32

Exkurs Kommandozeilenparameter 3 • Beispiel: echo 2. c Programmieren in C - Peter Klingebiel

Exkurs Kommandozeilenparameter 3 • Beispiel: echo 2. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33

Aufzählungsdatentyp 1 • Aufzählungsdatentyp enum • Für Datentypen mit diskreten konstanten Werten • Beispiel:

Aufzählungsdatentyp 1 • Aufzählungsdatentyp enum • Für Datentypen mit diskreten konstanten Werten • Beispiel: enum color { rot, gruen, blau } c; enum boolean { FALSE, TRUE } b; b = FALSE; c = blau; • Darstellung als int beginnend mit 0, wenn nicht explizit angegeben: enum boolean { TRUE=1, FALSE=0 } b; b = TRUE; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34

Aufzählungsdatentyp 2 • Beispiel: enumdemo. c Programmieren in C - Peter Klingebiel - HS

Aufzählungsdatentyp 2 • Beispiel: enumdemo. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35

Zusammengesetzte Datentypen 1 • Zusammenfassung von zusammgehörigen Daten in eigenen Datentyp struct • Beispiel

Zusammengesetzte Datentypen 1 • Zusammenfassung von zusammgehörigen Daten in eigenen Datentyp struct • Beispiel einfaches EA-Gerät mit 8 -Bit Steuerregister cr und 16 -Bit Datenregister dr: struct { char cr; int dr; } ea 1; struct _ea { char cr; int dr; } ea 2; • Zugriff durch Selektor. if(ea 1. cr & 0 x 01) ea 2. dr = 4711; • Bei Pointern durch Selektor -> if(ea 1 ->cr & 0 x 01) ea 2 ->dr = 4711; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36

Zusammengesetzte Datentypen 2 • Beispiel: Datentyp struct circle für Objekt Kreis in einem Zeichenprogramm

Zusammengesetzte Datentypen 2 • Beispiel: Datentyp struct circle für Objekt Kreis in einem Zeichenprogramm notwendig Mittelpunkt (x, y) und Radius r /* Kreis: Typ */ struct circle { int x; /* Mittelpunktkoordinate x */ int y; /* Mittelpunktkoordinate y */ int r; /* Radius */ }; struct circle c; c. x = 100; c. y = 100; c. r = 50; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37

Zusammengesetzte Datentypen 3 • Funktionen für struct circle /* Kreis bewegen: Mittelpunkt veraendern */

Zusammengesetzte Datentypen 3 • Funktionen für struct circle /* Kreis bewegen: Mittelpunkt veraendern */ void move_circle(struct circle *c, int x, int y) { c->x = x; c->y = y; } /* Kreisgroesse aendern: Radius veraendern */ void resize_circle(struct circle *c, int r) { c->r = r; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38

Zusammengesetzte Datentypen 4 • Beispiel: mydraw 1. c Programmieren in C - Peter Klingebiel

Zusammengesetzte Datentypen 4 • Beispiel: mydraw 1. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39

Exkurs Computergrafik 1 • Zwei Typen von Computergrafik: • Pixelgrafik – Grafik wird pixelweise

Exkurs Computergrafik 1 • Zwei Typen von Computergrafik: • Pixelgrafik – Grafik wird pixelweise aufgebaut – Formate: gif, jpg, png, bmp, … – Probleme bei Skalierung • Vektorgrafik – Grafik besteht aus Objekten mit den nötigen Eigenschaften, z. B. Linie: (x 1, y 1) und (x 2, y 2) oder Kreis: Mittelpunkt (x, y) und Radius r – Problemlos skalierbar Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 40

Exkurs Computergrafik 2 • Beispiel Pixelgrafik, GIF-Format Programmieren in C - Peter Klingebiel -

Exkurs Computergrafik 2 • Beispiel Pixelgrafik, GIF-Format Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 41

Exkurs Computergrafik 3 • Beispiel: Vektorgrafik, SVG-Format Programmieren in C - Peter Klingebiel -

Exkurs Computergrafik 3 • Beispiel: Vektorgrafik, SVG-Format Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 42

Exkurs Computergrafik 4 • SVG – Scalable Vector Graphics • Wikipedia http: //de. wikipedia.

Exkurs Computergrafik 4 • SVG – Scalable Vector Graphics • Wikipedia http: //de. wikipedia. org/wiki/Scalable_Vector_Graphics • • • Veröffentlicht vom W 3 C erstmals 09/2001 vergleichbar Flash Animationen und Präsentationen möglich XML-Format im Browser eingebaut (Opera, Firefox, u. v. a. , Internet Explorer ab Version 9!) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 43

Typdefinitionen 1 • Oft sinnvoll, eigene Typen oder Untertypen zu definieren typedef • Beispiel:

Typdefinitionen 1 • Oft sinnvoll, eigene Typen oder Untertypen zu definieren typedef • Beispiel: typedef unsigned char byte; • Beispiel: typedef struct _ea { byte cr; int dr; } ea; ea ea 1, ea 2; • Problem: Typprüfung bei C eher ungenau! besser lesbar, bessere Dokumentation! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 44

Typdefinitionen 2 • Erweiterung von mydraw: mydraw 2. c typedef enum { white, black,

Typdefinitionen 2 • Erweiterung von mydraw: mydraw 2. c typedef enum { white, black, grey, red, green, blue, yellow, cyan, magenta } color; /* Farben */ typedef struct _circle { /* Kreis */ int x; /* Mittelpunktkoordinate x */ int y; /* Mittelpunktkoordinate y */ int r; /* Radius */ color c; /* Farbe */ } circle; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 45

Typdefinitionen 3 • Beispiel: mydraw 2. c Programmieren in C - Peter Klingebiel -

Typdefinitionen 3 • Beispiel: mydraw 2. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 46

Typdefinitionen 4 • Erweiterung Linien, Rechtecke: mydraw 3. c typedef struct _line { /*

Typdefinitionen 4 • Erweiterung Linien, Rechtecke: mydraw 3. c typedef struct _line { /* Linie */ int x 1, y 1; /* Eckpunkt 1 x, y */ int x 2, y 2; /* Eckpunkt 2 x, y */ color c; /* Farbe */ } line; typedef struct _rect { /* Rechteck */ int x, y; /* Linke obere Ecke x, y */ int w; /* Breite */ int h; /* Hoehe */ color c; /* Farbe */ } rect; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 47

Typdefinitionen 5 • Beispiel: mydraw 3. c Programmieren in C - Peter Klingebiel -

Typdefinitionen 5 • Beispiel: mydraw 3. c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 48