Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ.

Ähnliche Präsentationen


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

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

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

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 Felder und Zeiger 2 Beispiel

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 Felder und Zeiger 3 Vor Ablauf

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

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

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

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

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

10 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ10 Felder und Zeiger 9 bufp inkrementieren

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

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Felder und Zeiger 11 Danach

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

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 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

15 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 Zeichenketten 3 Beispiel: String kopieren

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 Zeichenketten 4 Programmstart

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 Zeichenketten 5 Konstante in Speicher

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 Zeichenketten 6 Pointer s1 initialisieren

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

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

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 Zeichenketten 9 Schleife: zeichenweise kopieren

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

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

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

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

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

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Zeichenketten 15 Danach

28 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 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

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

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

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

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

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

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

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

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

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

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

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

40 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 Exkurs Computergrafik 4 SVG – Scalable Vector Graphics Wikipedia http://de.wikipedia.org/wiki/Scalable_Vector_Graphics http://de.wikipedia.org/wiki/Scalable_Vector_Graphics 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!)

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

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

43 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ43 Typdefinitionen 3 Beispiel: mydraw2.c

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

45 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ45 Typdefinitionen 5 Beispiel: mydraw3.c


Herunterladen ppt "Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ."

Ähnliche Präsentationen


Google-Anzeigen