Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.

Ähnliche Präsentationen


Präsentation zum Thema: "Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik."—  Präsentation transkript:

1 Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik © Timm Grams, Fulda, 23.05.01

2 Vorbemerkung - Übersetzungseinheiten Ein C-Programm besteht im Allgemeinen aus mehreren separat übersetzbaren Dateien: Programm = translation-unit { translation-unit } Demonstrationsbeispiel: Aufteilung eines Sortier- programms auf separat übersetzbare Dateien.

3 Vorbemerkung - Definitionen und Deklarationen Im Programm muss jede Variable und jede Funktion genau einmal definiert werden. Variablendefinitionen reservieren Speicherplatz. Funktionsdefinitionen enthalten einen Funktionsblock (compound statement). In jeder separat übersetzbaren Datei muss jede verwendete Variable oder Funktion definiert oder wenigstens deklariert werden. Variablendeklarationen: mit extern -Spezifikator. Funktionsdeklarationen: ohne Block, mit extern -Spezifikator. Deklarationen und Typ-Definitionen dürfen wiederholt auftreten.

4 Das Beispiel - Wörter sortieren void main(){ char *x[100], buf[80]; char *x[100], buf[80]; int i, j, k, n; int i, j, k, n; char *a; char *a; printf("Eingabe der Strings...\n"); printf("Eingabe der Strings...\n"); n=0; n=0; do{ do{ printf("? String = "); gets(buf); printf("? String = "); gets(buf); x[n++]=strcpy(malloc(strlen(buf) + 1), buf); x[n++]=strcpy(malloc(strlen(buf) + 1), buf); } while(buf[0]); } while(buf[0]); --n; --n; for(i=1; i<n; i++) { for(i=1; i<n; i++) { for (a=x[k=i], j=k--; for (a=x[k=i], j=k--; 0<j && strcmp(a, x[k])<0; j=k--) x[j]=x[k]; 0<j && strcmp(a, x[k])<0; j=k--) x[j]=x[k]; x[j]=a; x[j]=a; } printf("Ausgabe:\n"); printf("Ausgabe:\n"); for (i=0;i<n;i++) printf("! String = %s\n", x[i]);; for (i=0;i<n;i++) printf("! String = %s\n", x[i]);;}

5 Sortierung generell nutzbar machen Der Ausgangszustand Das Programm besteht - abgesehen von Dateien der Standard- bibliothek - aus einer Datei. Es enthält Ein-/Ausgabe- und Verarbeitungsfunktionen. Das Ziel Sortieren ist als Funktion in einer separat übersetzbaren Datei (translation unit) zu realisieren. Die Sortierfunktion ist als obj -Datei generell verfügbar zu machen. Die Realisierung der Funktion soll geheim bleiben. Die Größe des zu sortierenden Arrays darf nicht präjudiziert werden.

6 Der Weg vom Ausgangszustand zum Ziel Aufteilen und Entflechten der Funktionen Entkopplung der Dateien Kontrollierte Parameterübergabe Modulbildung mit klaren Schnittstellen und Verantwortungsabgrenzung

7 Aufteilen und Entflechten void main(){ char *x[100], buf[80]; char *x[100], buf[80]; int i, j, k, n; int i, j, k, n; char *a; char *a; printf("Eingabe... printf("Eingabe... for(i=1; i<n; i++)... for(i=1; i<n; i++)... printf("Ausgabe:\n");... printf("Ausgabe:\n");...} void sort(){ extern char *x[]; extern char *x[]; extern int n; extern int n; int i, j, k; int i, j, k; char *a; char *a; for(i=1; i<n; i++)... for(i=1; i<n; i++)...} char *x[100]; int n; extern void sort(); void main(){ char buf[80]; char buf[80]; int i; int i; printf("Eingabe... printf("Eingabe... sort(); sort(); printf("Ausgabe:\n");... printf("Ausgabe:\n");...}

8 Entkopplung und kontrollierte Parameterübergabe void main(){ char *x[100], buf[80]; char *x[100], buf[80]; int i, j, k, n; int i, j, k, n; char *a; char *a; printf("Eingabe... printf("Eingabe... for(i=1; i<n; i++)... for(i=1; i<n; i++)... printf("Ausgabe:\n");... printf("Ausgabe:\n");...} void sort(){ extern char *x[]; extern char *x[]; extern int n; extern int n; int i, j, k; int i, j, k; char *a; char *a; for(i=1; i<n; i++)... for(i=1; i<n; i++)...} char *x[100]; int n; extern void sort(); void main(){ char buf[80]; char buf[80]; int i; int i; printf("Eingabe... printf("Eingabe... sort(); sort(); printf("Ausgabe:\n");... printf("Ausgabe:\n");...}

9 void main(){ char *x[100], buf[80]; char *x[100], buf[80]; int i, j, k, n; int i, j, k, n; char *a; char *a; printf("Eingabe... printf("Eingabe... for(i=1; i<n; i++)... for(i=1; i<n; i++)... printf("Ausgabe:\n");... printf("Ausgabe:\n");...} extern void sort(char*[], int); void main(){ char *x[100], buf[80]; char *x[100], buf[80]; int i, n; int i, n; printf("Eingabe... printf("Eingabe... sort(x, n); sort(x, n); printf("Ausgabe:\n");... printf("Ausgabe:\n");...} void sort(char *x[], int n){ int i, j, k; int i, j, k; char *a; char *a; for(i=1; i<n; i++)... for(i=1; i<n; i++)...} Entkopplung und kontrollierte Parameterübergabe

10 #include sortModule.h void main(){ char *x[100], buf[80]; char *x[100], buf[80]; int i, n; int i, n; printf("Eingabe... printf("Eingabe... sort(x, n); sort(x, n); printf("Ausgabe:\n");... printf("Ausgabe:\n");...}sortMain.c Modul- bildung Verantwortungs- abgrenzung void main(){ char *x[100], buf[80]; char *x[100], buf[80]; int i, j, k, n; int i, j, k, n; char *a; char *a; printf("Eingabe... printf("Eingabe... for(i=1; i<n; i++)... for(i=1; i<n; i++)... printf("Ausgabe:\n");... printf("Ausgabe:\n");...} extern void sort(char*[], int); sortModule.h void sort(char *x[], int n){ int i, j, k; int i, j, k; char *a; char *a; for(i=1; i<n; i++)... for(i=1; i<n; i++)...}sortModule.c

11 Die Header-Datei sortModule.h /* sort(x, n) ueberfuehrt ein Array von String-Elementen x[0], x[1],..., x[n-1] in die lexikographische Ordnung. ***********************************/ extern void sort(char*[], int);

12 Inhalt von Header-Dateien generell Deklarationen der Funktionen und Variablen, die exportiert werden sollen Typ-DefinitionenKommentare Erläuterungen der Variablen und Datentypen Beschreibung der Wirkung von Funktionen (Funktionsspezifi- kation mittels Vor- und Nachbedingungen)

13 Inhalt von Header-Dateien im Einzelnen Typ-Definitionen wie struct point {int x, y;} Funktionsdeklarationen wie extern float f(float x); Variablen-Deklarationen wie extern int a; Konstantendefinitionen wie const float pi = 3.1415; Include Direktiven wie #include "pow.h" Kommentare wie /*Das ist ein Kommentar*/

14 Das modularisierte Programm KundenprogrammsortMain.cLieferantenmodul sortModule.h + sortModule.c Gesamtprogramm Kundenprogramm + Lieferantenmodul Compiler-Aufrufe compiler sortMain.c sortModule.c compiler sortMain.c sortModule.obj

15 Gründe für die Modularisierung Zerlegung großer Aufgaben in bewältigbare kleine Arbeitsteilung: Aufteilung der Teilaufgaben auf verschiedene Arbeitsgänge und Arbeitsgruppen. Verantwortungsabgrenzung Programm-Strukturierung, beispielsweise nach dem EVA-Prinzip Programm-Strukturierung, beispielsweise nach dem EVA-Prinzip (Trennung von Eingabe, Verarbeitung und Ausgabe) Zeiteffizienz: Was fertig ist, muss nicht immer wieder neu übersetzt werden Vorübersetzte Module sind Fertigprodukte, deren innerer Aufbau verborgen bleibt (Information Hiding) Entkopplung der Entwicklung steigert die Qualität der Software-Entwicklung und verringert die Fehleranfälligkeit Urheberrechtsschutz


Herunterladen ppt "Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik."

Ähnliche Präsentationen


Google-Anzeigen