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

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

der Universität Oldenburg
Hochschule Fulda – FB ET Sommersemester 2010
1 Funktionstemplates Einbinden von Templates: –Eine *.o Datei, die durch Übersetzen einer Datei nur mit Templates erzeugt wurde, enthält keinen Programmcode.
Ein- und Ausgabe von Dateien
Forschungszentrum caesar
Timm Grams Hochschule Fulda Fachbereich Elektrotechnik und Informationstechnik Rekursive Funktionen in C © Timm Grams, Fulda, (korr.: )
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
der Universität Oldenburg
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Objektorientierung
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Dynamischer Speicher. Ein Vergleich aus dem täglichen Leben...
WHILE - Anweisung.
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
DO...WHILE Anweisung.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 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
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
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Imperative Programmierung
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
Zusammenfassung Vorwoche
Einführung in Visual C++
14StrukturKlasse1 Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann
DVG Ablaufsteuerung
DVG Einführung in Java1 Einführung in JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Grundkonzepte Java - Klassendefinition
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Repetitorium PG : Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Konzept einer Programmiersprache!
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Programmierung 1. Einführung Seite 1
Prof. Dr.-Ing. Franz-Josef Behr
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Programmieren in C Grundlagen C 5
Informatik Grundlagen, WS04, Seminar 7
Programmieren in C Grundlagen C 2
BMEVIEEA100 Grundlagen der Programmierung
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmiervorkurs WS 2014/15 Methoden
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Sammlungsklassen Array.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Programmieren in C Wie speichert C
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Programmieren in C Module und Bibliotheken
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Implementieren von Klassen
 Präsentation transkript:

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

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.

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.

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

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.

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

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

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

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

#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

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

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)

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 = ; Include Direktiven wie #include "pow.h" Kommentare wie /*Das ist ein Kommentar*/

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

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