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 3 Hochschule Fulda – FB ET Sommersemester 2010

Ähnliche Präsentationen


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

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

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

3 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ3 Sortieren 2 1. Durchlauf bei Bubblesort

4 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ4 Sortieren 3

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

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

7 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ7 Sortieren 6 Sortierprogramm für Strings

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

9 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ9 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);

10 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ10 Sortieren 9 Prinzip: teile und herrsche

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

12 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ12 Sortieren 11 Sortierprogramm für Strings

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

14 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ14 Sortieren 13 bisher: nur Sortieren von Strings Es gibt aber oft andere Typen zu sortieren, z.B. Integer-, Double-, Struct-Typen usw. Generischer Sortieralgorithmus für Felder Sortieralgorithmen identisch bis auf –Vergleichsfunktion comp() –Austauschfunktion swap() Generische Funktionsparameter Funktionen als Parameter

15 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ15 Sortieren 14 Generische Funktionsparameter Nutzung des Typs void Beispiel: swap -Funktion void swapv(void *s[], int i, int j) { void *t; t = s[i]; s[i] = s[j]; s[j] = t; }

16 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ16 Sortieren 15 Funktionen als Parameter C erlaubt, Funktionen als Parameter an Funktionen zu übergeben und aufzurufen Übergabe der Funktion comp() void bsortv(void *v[], int n, int (*comp)(void *, void *)) {... Aufruf der Funktion comp()... if((* comp)(v[j], v[j+1]) > 0)...

17 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ17 Sortieren 16 Bubblesort generisch

18 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ18 Sortieren 17 Quicksort generisch

19 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ19 Sortieren 18 sortlib – snumcmp()

20 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ20 Sortieren 19 sortlib – sswapv()

21 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ21 Sortieren 20 bsort5

22 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ22 Sortieren 21 qsort5

23 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ23 Sortieren 22 Mit generischen Funktionen und Funktionen als Parametern auch Sortieren von komplexeren Datenstrukturen möglich Beispiel: Personaldaten typedef struct _person { /* Personaleintrag: */ int no; /* Personalnummer */ char *nn; /* Nachname */ char *vn; /* Vorname */ int gj; /* Geburtsjahr */ int gm; /* Geburtsmonat */ int gt; /* Geburtstag */ } person_t, *person_p;

24 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ24 Sortieren 23 Personalliste nach verschiedenen Kriterien (Name, P-Nr., Geburtsdatum) sortierbar Implementierung einer Vergleichsfunktion Beispiel: Nachnamen vergleichen int compnn(person_p p1, person_p p2) { int n; if(n = strcmp(p1->nn, p2->nn)) return(n); else return(strcmp(p1->vn, p2->vn)); }

25 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ25 Sortieren 24 personal.c

26 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ26 Suchen 1 Häufige Aufgabe: in größeren Datenmengen nach Einzelelementen suchen Oft: Daten in Feldern gespeichert Intuitives Verfahren: Feld mit Daten von Anfang bis Ende durchlaufen und nach gesuchtem Element fahnden –ist bei großen Datenmengen sehr langsam –notwendig bei unsortierten Daten / Feldern in sortierten Feldern mit binärer Suche arbeiten

27 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ27 Suchen 2 Beispiel: Suche in Integer-Feld

28 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ28 Suchen 3 Binäre Suche: teile und finde

29 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ29 Suchen 4 1 Schritt: teilen und vergleichen

30 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ30 Suchen 5 2. Schritt: weiter teilen und vergleichen

31 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ31 Suchen 6 3. Schritt: weiter teilen und vergleichen

32 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ32 Suchen 7 4. Schritt: teilen und finden

33 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ33 Suchen 8 Binärsuche: teilen und finden

34 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ34 Suchen 9 int binsearchi(int v[], int n, int x, int *ind) int m, l, r; /* Mitte, links, rechts */ l = 0; /* links: 1. Element */ r = n - 1; /* rechts: letztes El. */ while(1) { if(r x) r = m - 1; /* Rechts weiter */ else l = m + 1; /* Links weiters */ }

35 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ35 Suchen 10 binsearchi.c - Binärsuche in int-Feld

36 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ36 Suchen 11 binsearchs.c - Binärsuche in String-Feld

37 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ37 Dynamische Listen 1 Häufig ist die Anzahl der zu speichernden und zu bearbeitenden Daten erst zur Laufzeit des Programms bekannt Felder ungeeignet, da diese zur Compilezeit dimensioniert werden müssen dynamische Datenstrukturen –einfach verkettete Listen –doppelt verkettete Listen –Bäume –usw.

38 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ38 Dynamische Listen 2 Beispiel: einfach verkettete Liste /* Datentyp f. einfach verkettete Liste */ typedef struct _slist { int value; /* Daten */ struct slist *next; /* Nachfolger */ } slist; Beispiel: doppelt verkette Liste /* Datentyp f. doppelt verkettete Liste */ typedef struct _dlist { int value; /* Daten */ struct dlist *prev; /* Vorgaenger */ struct dlist *next; /* Nachfolger */ } dlist;

39 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ39 Dynamische Listen 3 Objekte der Listentypen werden zur Laufzeit –alloziert slist *insert(slist *llp, int value){ slist *nlp; nlp = (slist *) malloc(sizeof(slist)); –besetzt bzw. initialisiert nlp-> value = value; nlp->next = NULL; –und in die Liste eingehängt if(llp) llp->next = nlp; return(nlp); }

40 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ40 Dynamische Listen 4 Einfache Liste: Erzeugung 1. Element

41 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ41 Dynamische Listen 5 Einfache Liste: 2. Element und Verkettung

42 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ42 Dynamische Listen 6 Einfache Liste: 3. Element und Verkettung

43 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ43 Dynamische Listen 7 Einfache Liste: 4. Element und Verkettung

44 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ44 Dynamische Listen 8 Einfache Liste: 5. Element und Verkettung

45 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ45 Dynamische Listen 9 Einfache Liste: Verkettung zum Ringpuffer

46 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ46 Dynamische Listen 10 Erstes Element wird oft Wurzel, Anker oder Kopf der Liste genannt Durchlaufen der Liste i.d.R. von der Wurzel der Liste aus slist *root, *slp; for(slp = root; slp; slp = slp->next) printf("%d\n", slp->value); Wird das letzte Listenobjekt mit der Wurzel verlinkt Ringpuffer Sortieren bei Erzeugen der Liste möglich

47 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ47 Dynamische Listen 11 slist.c - einfach verkettete Liste

48 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ48 Dynamische Listen 12 sortlist.c - einfach verkettete sortierte Liste

49 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ49 Dynamische Listen 13 Doppelte Liste: Erzeugung 1. Element

50 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ50 Dynamische Listen 14 Doppelte Liste: 2. Element und Verkettung

51 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ51 Dynamische Listen 15 Doppelte Liste: 3. Element und Verkettung

52 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ52 Dynamische Listen 16 Doppelte Liste: 4. Element und Verkettung

53 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ53 Dynamische Listen 17 Doppelte Liste: Verkettung zum Ringpuffer

54 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ54 Dynamische Listen 18 dlist1.c - doppelt verkettete Liste

55 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ55 Dynamische Listen 19 dlist2.c - doppelt verk. Liste als Ringpuffer

56 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ56 Dynamische Listen 20 Binäre Bäume

57 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ57 Dynamische Listen 21 wordcount.c - sortierter binärer Baum


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

Ähnliche Präsentationen


Google-Anzeigen