Hochschule Fulda – FB ET Sommersemester 2010

Slides:



Advertisements
Ähnliche Präsentationen
Vorbereitung: struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp; b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten b bp.
Advertisements

Klassen - Verkettete Liste -
Hochschule Fulda – FB ET Sommersemester 2010
Sortieren I - Bubblesort -
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Kapitel 6. Suchverfahren
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Hochschule Fulda – FB ET Sommersemester 2010
Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester Peter.
Arrays,Strings&Pointer in C/C++
Vortrag: Ingo Gensch, Mathias Reich am:
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
Programmieren in C Einführung
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Programmieren in C Einführung
Programmieren in C Dynamische Listen / Bäume
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Programmieren in C Grundlagen C 5
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Informatik II Grundlagen der Programmierung Programmieren in C printf() mit variabler Feldbreite Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Einführung
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Ausflug printf() Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Annäherung an C
Programmieren in C Grundlagen C 3
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Dateien
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C Sortieren, Suchen
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C "Was ist wichtig?"
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Tutorium Software-Engineering SS14 Florian Manghofer.
Programmieren in C Dynamische Listen / Bäume
AlgoDat Fragen zu Vorlesung und Klausur
 Präsentation transkript:

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

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

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

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

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

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

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

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

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

Sortieren 9 Prinzip: teile und herrsche http://de.wikipedia.org/wiki/Quicksort Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 < l) return(0); /* kein Treffer */ m = l + ((r - l) / 2); /* Bereich halbieren */ if (v[m] == x) { /* Elem. x gefunden */ *ind = m; return(1); } if (v[m] > x) r = m - 1; /* Rechts weiter */ else l = m + 1; /* Links weiters */ } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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

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. Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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