Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2 Hochschule Fulda – FB ET Sommersemester 2010

Ähnliche Präsentationen


Präsentation zum Thema: "Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2 Hochschule Fulda – FB ET Sommersemester 2010"—  Präsentation transkript:

1 Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2 Hochschule Fulda – FB ET Sommersemester Peter Klingebiel, HS Fulda, DVZ

2 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ2 Wdh: Files 1 #include Grundlegender Datentyp FILE Gepufferte Ein- / Ausgabe Dateien / Geräte / Netzwerk (sockets) /... konstante Files, bei Programmstart bereits geöffnet: –stdin - Standardeingabe (TTY) –stdout - Standardausgabe (TTY) –stderr - Standardfehlerausgabe (TTY)

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 Wdh: Files 2 Öffnen von Files –fopen() –fdopen(), freopen() Schließen von Files –fclose() allgemeines Gerüst #include FILE *fp; fp = fopen(...); /* Lesen / Schreiben */ fclose(fp);

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 Wdh: Files 3 Eingabefunktionen –getchar(), getc(), fgetc() –getw(), fgetw() –gets(), fgets() –scanf(), fscanf() –fread() –ungetc(); Ausgabefunktionen –putchar(), putc(), fputc() –putw(), fputw() –puts(), fputs() –printf(), fprintf() –fwrite()

5 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ5 Wdh: Files 4 High-Level- und Low-Level-Funktionen

6 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ6 Wdh: Files 5 Low-Level-Funktionen Systemcalls Datentyp int Filedeskriptor / Filehandle Index in der Filetabelle des Prozesses Pufferung von Gerätetreiber abhängig Dateien / Geräte / Netzwerk (sockets) /... konstante Filedeskriptoren –0 - Standardeingabe (TTY) –1 - Standardausgabe (TTY) –2 - Standardfehlerausgabe (TTY)

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 Öffnen von Dateien –open(), creat() Für andere Files / Geräte ggfs. eigene Funktionen zum Erstellen / Öffnen –pipe(), socket(),... Lesen / Schreiben –read(), write() –evtl. weitere gerätetyp. Funktionen Schließen –close() Wdh: Files 6

8 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ8 Wdh: Files 7

9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ9 Wdh: Files 8 Beispiel: Netzwerkserver

10 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ10 Wdh: Files 9 Beispiel: Netzwerkclient

11 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ11 Wdh: Files 10 Beispiel: Pipe

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Dynamischer Speicher 1 Funktionen zur Anforderung und Freigabe von dynamischem Speicher (Heap) #include Anforderung von Speicher: –void *malloc(size_t s) –s Bytes allozieren –return NULL bei Fehler, sonst Pointer auf Speicherbereich –void *calloc(size_t n, size_t s) –s * n Bytes allozieren und mit 0 initialisieren –return NULL bei Fehler, sonst Pointer auf Speicherbereich

13 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ13 Dynamischer Speicher 2 Freigabe von alloziertem Speicher –void free(void *ptr) –Speicher von ptr wieder freigeben Beispiel: char buf[BUFLEN], *sptr; size_t slen; if(fgets(buf, sizeof(buf) - 1, stdin)) { slen = strlen(buf); sptr = (char *) malloc(slen + 1); if(sptr == NULL) /* Fehler... */ (void) strcpy(sptr, buf); }

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 ctype-Funktionen 1 Klassifizierungsfunktionen für Zeichen #include alle Funktionen liefern Rückgabewert 0, wenn Test ok, 0 sonst die wichtigsten Funktionen –int isalpha(int c) Test, ob c Buchstabe ist –int isdigit(int c) Test, ob c Ziffer ist

15 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 ctype-Funktionen 2 –int isalnum(int c) Test, ob c Buchstabe oder Ziffer ist –int isupper(int c) Test, ob c Großbuchstabe ist –int islower(int c) Test, ob c Kleinbuchstabe ist –int isprint(int c) Test, ob c druckbares Zeichen (+ Leerzeichen) ist –int tolower(int c) wandelt c von Groß- in Kleinbuchstaben um –int toupper(int c) wandelt c von Klein- in Großbuchstaben um

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 ctype-Funktionen 3 Implementierung isalnum() für ASCII

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 ctype-Funktionen 4 Implementierung tolower() für ASCII

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 Stringfunktionen 1 String als eigener Datentyp existiert in C genau genommen nicht! Strings sind Arrays vom Typ char oder Pointer auf char: –char b[LEN]; bietet Platz für LEN-1 Zeichen –char *s; Pointer s gültig erst nach Zuweisung auf char- Array, Konstante oder dyn. Speicherallozierung Strings werden mit ASCII-NUL terminiert

19 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 Stringfunktionen 2 C-Standardbibliothek bietet eine große Menge an Stringfunktionen an wichtige Konvertierungsfunktionen #include –int atoi(char *s) wandelt String s in int –long atol(char *s) wandelt String s in long –double atof(char *s) wandelt String s in double

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 Stringfunktionen 3 Weitere Konvertierungsfunktionen #include –int sscanf(char *s, char *fmt,...) –formatierte Konvertierung aus dem String s –wie scanf() und fscanf() –Beispiel: char *s = " "; int l; double d; sscanf(s, "%ld %lf", &l, &d); –int sprintf(char *s, char *fmt, …) –formatierte Ausgabe auf String s –wie printf() und fprintf()

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 Stringfunktionen 4 die wichtigsten Grundfunktionen #include –int strlen(char *s) –liefert Länge des String s –char *strcpy(char *s1, char *s2) –kopiert String s2 nach String s1, bis zum s2 terminierenden NUL, liefert Ptr auf s1 –Achtung: Pufferüberlauf! –char *strncpy(char *s1, char *s2, int n) –kopiert String s2 nach String s1, max n Zeichen

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 Stringfunktionen 5 –char *strcat(char *s1, char *s2) –Hängt Kopie von s2 an s1, liefert Ptr auf s1 –Achtung: Pufferüberlauf! –char *strncat(char *s1, char *s2, int n) –Hängt Kopie von s2 an s1, max. n Zeichen –int strcmp(char *s1, char *s2) –vergleicht zeichenweise s1 und s2 –liefert 0 bei Gleichheit –sonst Differenz *s1-*s2 bei erstem Unterschied

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 Stringfunktionen 6 –int strncmp(char *s2, char *s2, int n) –Stringvergleich bis max. n Zeichen –sonst wie strcmp() –char *strchr(char *s, int c) –liefert Pointer auf Position des ersten Auftretens von Zeichen c im String s, sonst NULL –char *strrchr(char *s, int c) –liefert Pointer auf Position des letzten Auftretens von Zeichen c im String s, sonst NULL –also wie strchr() vom Stringende her

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 Stringfunktionen 7 –char *strstr(char *s1, char *s2) –liefert Pointer auf Position des ersten Auftretens von String s2 im String s1, sonst NULL –char *strdup(char *s) –alloziert Speicher für eine Kopie des String s und kopiert diesen dorthin –liefert Pointer auf Kopie oder NULL bei Fehler –Implementierung char *ns; if(ns = malloc(strlen(s) + 1)) return(strcpy(ns, s));

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 Stringfunktionen 8 Implementierung von strlen()

26 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ26 Stringfunktionen 9 Implementierung von strcmp()

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Stringfunktionen 10 Memory- / Binärfunktionen –void *memset(void *m, int c, size_t n) –kopiert n mal das Zeichen c in den Speicherbereich m –void *memcpy(void *m1, void *m2, size_t n) –kopiert n Bytes von Speicherbereich m2 nach m1 –void *memmove(void *m1, void *m2, size_t n) –kopiert n Bytes von Speicherbereich m2 nach m1 –Überlappungen der Bereiche werden korrekt behandelt –void *memcmp(void *m1, void *m2, size_t n) –Vergleich von n Bytes der Speicherbereiche m1 und m2 –void *memchr(void *m, int c, size_t n) –liefert Pointer auf erstes Auftreten von c in m, sonst NULL –Achtung! Es finden keine Bereichsprüfungen statt! Overflow!

28 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 Sortieren 1 Sortieren von Zahlen, Strings, allgemein von Daten, ist oft auftretende Aufgabenstellung Meist: Daten sind in Feldern vorhanden Sortieren von Feldelementen Intuitiver Algorithmus: –Feld von oben nach unten (oder von links nach rechts) durchlaufen und elementweise sortieren –Feld solange immer wieder durchlaufen, bis Feld sortiert ist Bubblesort-Algorithmus

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 Sortieren 2 1. Durchlauf bei Bubblesort

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 Sortieren 3

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 Sortieren 4 die größten Elemente wandern nach und nach an das Ende des Feldes steigen wie Blasen auf Bubblesort Algorithmus für int -Feld mit n Elementen: void bsort(int v[], int n) int i, j; for(i = 0; i v[j+1]) swap(v, j, j+1);

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 Sortieren 5 Bubblesort für Feld von Strings

33 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ33 Sortieren 6 Sortierprogramm für Strings

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 Sortieren 7 Diskussion –Stabilität? –Geschwindigkeit?

35 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 Sortieren 8 Schnellerer Algorithmus Quicksort rekursiver Algorithmus für int -Feld void qsort(int v[], int left, int right) int i, last; if(left >= right) return; swap(v, left, (left + right) / 2); last = left; for(i = left + 1; i <= right; i++) if(v[i] < v[left]) swap(v, ++last, i); swap(v, left, last); qsort(v, left, last - 1); qsort(v, last + 1, right);

36 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ36 Sortieren 9 Prinzip: teile und herrsche

37 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ37 Sortieren 10 Quicksort für Feld von Strings

38 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 Sortieren 11 Sortierprogramm für Strings

39 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ39 Sortieren 12 Diskussion –Stabilität? –Geschwindigkeit?


Herunterladen ppt "Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2 Hochschule Fulda – FB ET Sommersemester 2010"

Ähnliche Präsentationen


Google-Anzeigen