Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ."—  Präsentation transkript:

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

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 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

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 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!

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 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))

5 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ5 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)

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

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

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

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

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

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

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

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

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

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

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 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)

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 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

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

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

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

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

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

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

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

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

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

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

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

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

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

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 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

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 Exkurs Kommandozeilenparameter 2 Beispiel echo1.c /* echo1.c */ #include int main(int argc, char **argv) { while(--argc) printf("%s ", *++argv); putchar('\n'); return(0); }

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

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 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;

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

36 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ36 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;

37 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ37 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;

38 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 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; }

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

40 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 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

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

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

43 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ43 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!)

44 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ44 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!

45 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ45 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;

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

47 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ47 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;

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


Herunterladen ppt "Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ."

Ähnliche Präsentationen


Google-Anzeigen