Programmieren in C. Strukturen und Zeiger. Prof. Dr. Nikolaus Wulff

Ähnliche Dokumente
Programmieren in C. Zeiger auf Funktionen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

Interne Sortierverfahren

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Einführung in die Informatik I

Grundlegende Sortieralgorithmen

Sortieralgorithmen. Selection Sort

Aufgabenblatt: Arrays

Programmieren I. Kapitel 7. Sortieren und Suchen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Prof. Dr. Margarita Esponda

Übungsblatt 7. Thema: Sortieren, Objektorientierung

Sortieralgorithmen. Direkte Sortierverfahren & Shellsort, Quicksort, Heapsort. Vorlesung Algorithmen und Datenstrukturen 2 im SS 2004

Studienseminar Koblenz - Fachseminar Informatik Visualisierung von Sortieralgorithmen

10. Fortgeschrittene Programmiertechniken Fortgeschrittene Programmiertechniken

Tutoraufgabe 1 (Sortieralgorithmus):

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Aufgabe : Laufzeit von Selection Sort

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Suchen und Sortieren (Die klassischen Algorithmen)

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Static Links Displays

Grundlagen der Programmierung

Sortieralgorithmen und Binäre Suche Software Entwicklung 1

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp

Algorithmen. Sortieren 6/1

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Sortieren durch Mischen (Mergesort; John von Neumann 1945)

Programmieren in C. Zeiger auf void und ihre Anwendungen. Prof. Dr. Nikolaus Wulff

Übung Datenstrukturen. Sortieren

Suchen und Sortieren

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

2.3.1 Einleitung Einfache Sortierverfahren Höhere Sortierverfahren Komplexität von Sortierverfahren Spezielle Sortierverfahren

7. Sortieren Lernziele. 7. Sortieren

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

Übung Algorithmen und Datenstrukturen

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

a) Erläutern Sie die Vorteile der Konstrukte zur Fehlerbehandlung in Java.

Informatik I (D-ITET)

Einführung in die Informatik 2

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Informatik II, SS 2014

Folge 13 - Quicksort

Übung Algorithmen und Datenstrukturen

Objektbasierte Entwicklung

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmiertechnik II

Kap 7. Funktionen und Arrays

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Nachklausur zu Einführung in die Programmierung 14. Oktober 2008 (SS 2008) Prof. Dr. Franz Schweiggert / Christoph Ott

BUBBLE SORT. Können wir die gefundenen Algorithmen auch auf Listen mit mehr als drei Elementen ausdehnen?

Die Schnittstelle Comparable

Kapitel 6 Elementare Sortieralgorithmen

Übung Algorithmen I

Algorithmen und Datenstrukturen 1-3. Seminar -

Überblick. Lineares Suchen

Sortierverfahren 1. Bubble Sort Selection Sort Insertion Sort

JAVA - Suchen - Sortieren

Teil III: Evaluationstest

Inhalt. 3. Spezielle Algorithmen

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Sommersemester Jewgeni Rose. Technische Universität Braunschweig

Modellierung und Programmierung

damit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".

Algorithmen zur Datenanalyse in C++

Komplexität von Algorithmen OOPM, Ralf Lämmel

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

ALP I. Funktionale Programmierung

Probeklausur: Programmieren I

Einführung in die Informatik - Teil 6a -

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Genetischer Algorithmus

Datenstrukturen und Algorithmen

DAP2 Praktikum Blatt 1

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 8, Donnerstag 11.

Übung: Algorithmen und Datenstrukturen SS 2007

Algorithmen und Datenstrukturen. Kapitel 3: Sortierverfahren. Skript zur Vorlesung. Algorithmen und Datenstrukturen

Sortieren durch Einfügen (Insertion Sort) fügt die restlichen Elemente nach und nach in die bereits sortierte Liste der abgearbeiteten Zahlen.

Algo-Animation. Konstruktion der Partition: eigentliche Kunst / Arbeit bei Quicksort. Resultat: Partition A=A 1 WA 2 A 1 W A 2.

Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn. Testen. Tutorial im Rahmen des Software(technik)praktikums SS 2012

4. Sortierverfahren. Anwendungen

MAXIMUM2.STR Struktogramme. Aufgabe: 3 Zahlen eingeben, größte Zahl ermitteln und ausgeben.

Vorlesung Informatik 1

Einstieg in die Informatik mit Java

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Übung Algorithmen I

Gran Turismo Cars - WS 11/12

float *point(float a, float b); // Funktionsdeklaration Zeiger als Funktionswert // point liefert als Wert die Adresse seines Ergebnisses

2 Teil 2: Nassi-Schneiderman

8.6 Visualisierung der Sortieralgorithmen

3. Anweisungen und Kontrollstrukturen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Transkript:

Programmieren in C Strukturen und Zeiger Prof. Dr. Nikolaus Wulff

Sortieren Im Praktikum wurde ein Modul zum Sortieren entwickelt. Es enthält verschiedene Sortieralgorithmen, die ausgewählt und erweitert werden können. Die Auswahl des jeweiligen Algorithmus geschah in einem switch-case Verteiler. Dies lässt sich allerdings auch mit Zeigern auf Funktionen bewerkstelligen, was Gegenstand dieser Lektion ist. Prof. Dr. Nikolaus Wulff Programmieren in C 2

Der switch-case Verteiler * dispatch according to preselected mode void sorter(int length, int array[]) { switch(mode) { case SELECTION_SORT: printf("using Selection Sort \n"); selection_sort(length,array); break; case BUBBLE_SORT: printf("using Bubble Sort \n"); bubble_sort(length,array); break; case QUICK_SORT: default: printf("using Quick Sort \n"); quick_sort(length, array); break; end switch Prof. Dr. Nikolaus Wulff Programmieren in C 3

Bubble Sort * bubble sort algorithm static void bubble_sort(int length, int array[]) { int i,sorted = FALSE; length--; while(!sorted) { sorted = TRUE; for(i=0;i<length;i++) { if (cmp(array[i+1],array[i])) { sorted = FALSE; swap(array,i,i+1); /* end i-loop /* end while-loop Vertausche benachbarte Elemente solange, bis alle die kleiner Relation erfüllen. Prof. Dr. Nikolaus Wulff Programmieren in C 4

Selection Sort * selection sort algorithm static void selection_sort(int length, int array[]) { int min; int i,j; for(i=0;i<length;i++) { min=array[i]; for(j=i;j<length;j++) { if (cmp(array[j],min)) { min = array[j]; swap(array,i,j); /* end j-loop /* end i-loop Finde das jeweils kleinste Element im Feld und verkürze dann die Feldlänge um eins. Prof. Dr. Nikolaus Wulff Programmieren in C 5

Quick Sort * recursive quick sort algorithm static void q_sort(int left, int right, int array[]) { int p; if (left >= right) return; /* we are done... p = quick_partion(left, right, array); q_sort(left, p-1,array); /* sort left part q_sort(p+1,right,array); /* sort right part static void quick_sort(int length, int array[]) { q_sort(0,length-1,array); Teilt das Feld in linke und rechte Hälfte und sortiert dieses rekursiv, durch wiederholte Feldteilung. Die eigentliche Arbeit erledigt die quick_partion Methode, um das Feld aufzuteilen. Prof. Dr. Nikolaus Wulff Programmieren in C 6

Partitionierung des Felds * return index p of pivot element such that * all members left of v[p] are <= v[p] static int quick_partion(int left, int right, int v[]) { int i, p; p = (left+right)/2; swap(v, left, p); /* store pivot element p = left; for(i=left+1; i<=right; i++) { if (cmp(v[i],v[left])) { /* compare to pivot swap(v, ++p, i); /* end i-loop swap(v, left, p); /* restore pivot element return p; /* v[left,...,p]<= v[p] Prof. Dr. Nikolaus Wulff Programmieren in C 7

Zeiger statt switch-case Anstatt des switch-case Verteilers ist es möglich mit Zeigern zu arbeiten. Voraussetzung: alle Sortiermethoden besitzen die selbe Schnittstelle/Methodensignatur. typedef void (*Sorter)(int length, int array[]); Sorter sorters[] = { selection_sort, quick_sort, bubble_sort; * dispatch according to preselected mode void sorter(int length, int array[]) { sorters[mode%3](length,array); Prof. Dr. Nikolaus Wulff Programmieren in C 8

Zeiger und Structure typedef void (*Sorter)(int length, int array[]); typedef struct sorter_struct { char *name; /* sorter name Sorter execute; /* sorting routine SortAlgorithm; SortAlgorithm sorters[] = { {"Selection Sort", selection_sort, {"Quick Sort", quick_sort, {"Bubble Sort", bubble_sort ; * dispatch according to preselected mode void sorter(int length, int array[]) { SortAlgorithm sorter = sorters[mode%3]; printf("sorting with %s \n",sorter.name); sorter.execute(length,array); Prof. Dr. Nikolaus Wulff Programmieren in C 9

Callback Methoden Zeiger und Strukturen werden häufig in graphischen Fenstersystemen verwendet, um sogenannte Callback-Methoden zu implementieren. Beispiel: Ein Button muss beim Drücken eine bestimmte Funktionalität ausführen. Der Entwickler der Button Routine weiß jedoch nicht in welchem Kontext der Button verwendet wird. Einmal ist damit ein FileOpenDialog assoziert, ein anderes Mal die Auswahl einer Farbe oder Schrift etc. Wie lässt sich ein solch unterschiedliches Verhalten realisieren? Prof. Dr. Nikolaus Wulff Programmieren in C 10

Buttons und Menus Die GUI Elemente sind Strukturen mit Platzhaltern für entsprechende Callback Methoden. typedef void (*Callback)(ActionEvent evt); typedef struct button_struct { char* text; Callback action; Button; typedef struct menu_struct { char* text; Callback action; Menu; Beim Betätigen eines Buttons wird die jeweilige Callback-Methode aufgerufen und die dahinter codierte Funktionalität ausgeführt. Prof. Dr. Nikolaus Wulff Programmieren in C 11

Dynamische Feldgröße int main(int argc, char *argv[]) { int i,len,mode,*array; printf("eingabe Feldgroesse: "); fflush(stdout);scanf("%d",&len); Allocate memory for array array = malloc(sizeof(int)*len); loop over sorting algorithms for(mode=0;mode<3;mode++) { srand(1); /* force unique seed for random for(i=0;i<len;i++) /* generate 0<=x<=100 array[i] = (100.0*rand())/RAND_MAX; printf("\n\nvor dem Sortieren: \n"); printintarray(array, len); setalgorithm(mode); sorter(len,array); printf("nach dem Sortieren: \n"); printintarray(array, len); Free allocated memory free(array); return 0; Prof. Dr. Nikolaus Wulff Programmieren in C 12

Laufzeitverhalten Werden in die Swap und Compare Methoden statische Zähler eingefügt, so lässt sich das Laufzeitverhalten der Sortieralgorithmen als Funktion der Feldlänge monitoren: n Bubble Sort Selection Sort Quick Sort 10 72 / 29 55 / 29 22 / 26 100 7029 / 2264 5050 / 1718 605 / 517 1000 961038 / 253476 500500 / 44435 11402 / 5175 10000 10 8 / 2*10 7 5*10 7 / 5*10 5 5*10 5 / 5*10 5 Die Anzahl an Schleifendurchläufen und Vergleichsoperationen. (cmp/swap). Prof. Dr. Nikolaus Wulff Programmieren in C 13