Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2 Hochschule...

39
Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ

Transcript of Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 2 Hochschule...

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

Informatik IIGrundlagen der Programmierung

Programmieren in C

Module und Bibliotheken 2

Hochschule Fulda – FB ET

Sommersemester 2010

http://www.rz.hs-fulda.de/et

Peter Klingebiel, HS Fulda, DVZ

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2

Wdh: Files 1

• #include <stdio.h>• 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)

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3

Wdh: Files 2

• Öffnen von Files– fopen()– fdopen(), freopen()

• Schließen von Files– fclose()

• allgemeines Gerüst#include <stdio.h>FILE *fp;fp = fopen(...);/* Lesen / Schreiben */ fclose(fp);

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

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()

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

Wdh: Files 4

• High-Level- und Low-Level-Funktionen

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6

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)

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7

• Ö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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8

Wdh: Files 7

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9

Wdh: Files 8

• Beispiel: Netzwerkserver

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10

Wdh: Files 9

• Beispiel: Netzwerkclient

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

Wdh: Files 10

• Beispiel: Pipe

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

Dynamischer Speicher 1

• Funktionen zur Anforderung und Freigabe von dynamischem Speicher (Heap)

• #include <stdlib.h>• 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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13

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);}

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14

ctype-Funktionen 1

• Klassifizierungsfunktionen für Zeichen• #include <ctype.h>• 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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16

ctype-Funktionen 3

• Implementierung isalnum() für ASCII

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17

ctype-Funktionen 4

• Implementierung tolower() für ASCII

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

Stringfunktionen 2

• C-Standardbibliothek bietet eine große Menge an Stringfunktionen an

• wichtige Konvertierungsfunktionen• #include <stdlib.h>

– 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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20

Stringfunktionen 3

• Weitere Konvertierungsfunktionen• #include <stdio.h>

– int sscanf(char *s, char *fmt,...)– formatierte Konvertierung aus dem String s– wie scanf() und fscanf()– Beispiel:char *s = "123 98.76"; 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()

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21

Stringfunktionen 4

• die wichtigsten Grundfunktionen• #include <string.h>

– 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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 23

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

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 24

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– Implementierungchar *ns;if(ns = malloc(strlen(s) + 1)) return(strcpy(ns, s));

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 25

Stringfunktionen 8

• Implementierung von strlen()

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 26

Stringfunktionen 9

• Implementierung von strcmp()

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 27

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!

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 28

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• http://de.wikipedia.org/wiki/Bubblesort

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 29

Sortieren 2

• 1. Durchlauf bei Bubblesort

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 30

Sortieren 3

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 31

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 < n; i++) for(j = 0; j < n-i-1; j++) if(v[j] > v[j+1])

swap(v, j, j+1);

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 32

Sortieren 5

• Bubblesort für Feld von Strings

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 33

Sortieren 6

• Sortierprogramm für Strings

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 34

Sortieren 7

• Diskussion– Stabilität?– Geschwindigkeit?

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 35

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);

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 36

Sortieren 9

• Prinzip: teile und herrsche

• http://de.wikipedia.org/wiki/Quicksort

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 37

Sortieren 10

• Quicksort für Feld von Strings

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 38

Sortieren 11

• Sortierprogramm für Strings

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

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 39

Sortieren 12

• Diskussion– Stabilität?– Geschwindigkeit?