Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Grundlagen C 3

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Grundlagen C 3"—  Präsentation transkript:

1 Programmieren in C Grundlagen C 3
Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ

2 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

3 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

4 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

5 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

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

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

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

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

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

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

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

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

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

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

16 Zeichenketten 1 Zeichenketten (strings) sind eine Folge von Einzelzeichen char String ist terminiert mit '\0' 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

17 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

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

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

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

21 Zeichenketten 6 Pointer s1 initialisieren
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

23 Zeichenketten 8 String s2 = t  s2 = & t[0]
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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

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

27 Zeichenketten 12 … Zeichen kopieren Pointer inkrementieren
bis Ende des Strings erreicht  *s1 == '\0' Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

28 Zeichenketten 13 End of String: *s1 == '\0'
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

29 Zeichenketten 14 String terminieren: *s2 = '\0'
Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

31 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

32 Exkurs Kommandozeilenparameter 2
Beispiel echo1.c /* echo1.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

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

34 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

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

36 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; } ea1; struct _ea { char cr; int dr; } ea2; Zugriff durch Selektor . if(ea1.cr & 0x01) ea2.dr = 4711; Bei Pointern durch Selektor -> if(ea1->cr & 0x01) ea2->dr = 4711; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

37 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

38 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

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

40 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: (x1,y1) und (x2,y2) oder Kreis: Mittelpunkt (x,y) und Radius r Problemlos skalierbar Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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

43 Exkurs Computergrafik 4
SVG – Scalable Vector Graphics Wikipedia  Veröffentlicht vom W3C 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

44 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 ea1, ea2; Problem: Typprüfung bei C eher ungenau!  besser lesbar, bessere Dokumentation! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

45 Typdefinitionen 2 Erweiterung von mydraw: mydraw2.c typedef enum { /* Farben */ white, black, grey, red, green, blue, yellow, cyan, magenta } color; 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

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

47 Typdefinitionen 4 Erweiterung Linien, Rechtecke: mydraw3.c typedef struct _line { /* Linie */ int x1, y1; /* Eckpunkt 1 x,y */ int x2, y2; /* 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

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


Herunterladen ppt "Programmieren in C Grundlagen C 3"

Ähnliche Präsentationen


Google-Anzeigen