Grundlagen der Informatik - 6. Praktikum



Ähnliche Dokumente
Übungen zu C++ Kapitel 1

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Einführung in die Programmierung

Grundlagen. Kapitel 1

Installation und Inbetriebnahme von Microsoft Visual C Express

Einführung in die Programmierung mit C++

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Zeichen bei Zahlen entschlüsseln

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Professionelle Seminare im Bereich MS-Office

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Zählen von Objekten einer bestimmten Klasse

Was meinen die Leute eigentlich mit: Grexit?

Klausur in Programmieren

Arbeiten mit UMLed und Delphi

Leichte-Sprache-Bilder

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Statuten in leichter Sprache

Angewandte Mathematik und Programmierung

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Einführung in die Programmierung (EPR)

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Artikel Schnittstelle über CSV

Handbuch ECDL 2003 Basic Modul 3: Textverarbeitung Serienbrief erstellen - Datenquelle

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Einführung in die C++ Programmierung für Ingenieure

SEMINAR Modifikation für die Nutzung des Community Builders

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand:

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

Geld Verdienen im Internet leicht gemacht

How to do? Projekte - Zeiterfassung

Outlook-Daten komplett sichern

Speichern. Speichern unter

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Step by Step Webserver unter Windows Server von Christian Bartl

Wie Sie mit Mastern arbeiten

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Informationsblatt Induktionsbeweis

Primzahlen und RSA-Verschlüsselung

Stapelverarbeitung Teil 1

Seriendruck mit der Codex-Software

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Microsoft PowerPoint 2013 Folien gemeinsam nutzen

Erstellen einer digitalen Signatur für Adobe-Formulare

Microsoft Access 2013 Navigationsformular (Musterlösung)

5.2 Neue Projekte erstellen

Dokumentation zur Versendung der Statistik Daten

ARCO Software - Anleitung zur Umstellung der MWSt

SICHERN DER FAVORITEN

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

teischl.com Software Design & Services e.u. office@teischl.com

Saldo-Konto eines Mitarbeiters korrigieren

Menü auf zwei Module verteilt (Joomla 3.4.0)

Wichtig ist die Originalsatzung. Nur was in der Originalsatzung steht, gilt. Denn nur die Originalsatzung wurde vom Gericht geprüft.

Die Post hat eine Umfrage gemacht

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Fax einrichten auf Windows XP-PC

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Einführung in PHP. (mit Aufgaben)

1 Vom Problem zum Programm

! " # $ " % & Nicki Wruck worldwidewruck

ELO Print&Archive so nutzen Sie es richtig

Wir machen neue Politik für Baden-Württemberg

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH

Wichtiges Thema: Ihre private Rente und der viel zu wenig beachtete - Rentenfaktor

Elexis-BlueEvidence-Connector

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Barcodedatei importieren

Kompilieren und Linken

Medea3 Print-Client (m3_print)

Dietmar Cremers Director Operations

Lizenzen auschecken. Was ist zu tun?

HIER GEHT ES UM IHR GUTES GELD ZINSRECHNUNG IM UNTERNEHMEN

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Die Lernumgebung des Projekts Informationskompetenz

Gemeinsamer Bibliotheksverbund: Übertragung von Datenexporten für den Verbundkatalog Öffentlicher Bibliotheken

Kapitel 3 Frames Seite 1

COMPUTERIA VOM SERIENBRIEFE UND ETIKETTENDRUCK

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

Enigmail Konfiguration

Online Newsletter III

Qt-Projekte mit Visual Studio 2005

Task: Nmap Skripte ausführen

Jeopardy and andere Quizformate im bilingualen Sachfachunterricht Tipps zur Erstellung mit Powerpoint

Transkript:

Grundlagen der Informatik - 6. Praktikum In diesem Praktikum soll es neben der Anwendung von Funktionsdefinitionen auch um einfache Prinzipien der verteilten Quelltext-Strukturierung gehen. Diese spielt vor allem dann eine Rolle, wenn mehrere Entwickler an einem Projekt arbeiten oder das Projekt so groß wird, daß es nicht sinnvoll ist, nur eine oder zwei Quelltext-Dateien zu verwenden. In der letzten Übung haben wir zwischen Prototypen und Definitionen unterschieden. Diese Trennung hat sich als sinnvoll erachtet, um Konflikten gegenseitiger Abhängigkeiten aus dem Weg zu gehen. Wir haben diese Trennung jedoch nur innerhalb einer Quelltext-Datei vorgenommen, was für kleine Aufgaben ausreichend ist, bei größeren aber zu Unübersichtlichtkeit führt. Zur Verdeutlichung der Zusammenhänge sei folgendes C++ Programm gegeben: using namespace std; void hallo(); void welt(); char ausrufezeichen(); char leerzeichen(); int main() hallo(); cout << leerzeichen(); welt(); cout << ausrufezeichen(); cout << endl; return 0; Prototypen Hauptfunktion void hallo() cout << "Hello"; void welt() cout << "Welt"; char ausrufezeichen() return '!'; Definitionen char leerzeichen() return ' ';

Wie schon zuvor erwähnt, werden Prototypen in Header-Dateien ausgelagert und über die #include Compiler-Anweisung in die jeweilige Quelltext-Datei eingebunden, welche Funktionen aus diesem Header verwendet. Es entstehen also nach diesem Schritt folgende 2 Dateien: // Datei: functions.h void hallo(); void welt(); char ausrufezeichen(); char leerzeichen(); Prototypen // Datei: main.cpp #include "functions.h" using namespace std; int main() hallo(); cout << leerzeichen(); welt(); cout << ausrufezeichen(); cout << endl; return 0; Anführungszeichen = im aktuellen Verzeichnis nach Header Datei suchen Hauptfunktion void hallo() cout << "Hello"; void welt() cout << "Welt"; char ausrufezeichen() return '!'; Definitionen char leerzeichen() return ' ';

Dies allein ist natürlich nicht sehr geschickt, da es zwar die Abhängigkeitsschwierigkeiten löst, aber nicht den Code abspeckt. In der Praxis fasst man deshalb alle Funktionen, Klassen, Makros etc., die sich gemeinsame Aufgabenbereiche teilen, in eigenen Quelltext- Dateien zusammen, um sie später in Form von Bibliotheken zu sammeln. Es ergeben sich in diesem Fall folgende 3 Dateien: // Datei: functions.h void hallo(); void welt(); char ausrufezeichen(); char leerzeichen(); // Datei: main.cpp #include "functions.h" using namespace std; int main() hallo(); cout << leerzeichen(); welt(); cout << ausrufezeichen(); cout << endl; return 0; // Datei: functions.cpp #include "functions.h" void hallo() std::cout << "Hello"; Hier fehlt das using namespace std;, weshalb der Programmierer nun festlegen muss, aus welchem Namensraum cout zu verwenden ist. (nämlich std ) Die zwei Doppelpunkte dienen als Trennelement zum Namensraum. void welt() std::cout << "Welt"; char ausrufezeichen() return '!'; char leerzeichen() return ' ';

Dies ist eine konventionelle Aufteilung der Funktionen und Prototypen entsprechend ihrer Aufgabenbereiche. Es spricht nichts dagegen, mehrere Header-Dateien und mehrere Module zu verwenden, wenn dies der Projektübersicht dient. - Es ist sogar erforderlich, wenn es darum geht, realen Anforderungen gerecht zu werden. Zur Verdeutlichung des Ganzen, soll es im folgenden um das Zusammenfügen aller Komponenten eines Projektes gehen, um daraus das eigentliche Programm zu erstellen. Dabei wenden wir das Prinzip des getrennten Compilierens an, was wir zunächst per Hand machen, im nächsten Semester aber dann automatisieren per Skript. Präprozessor a.h a.cpp b.cpp c.cpp <iostream> <iomanip> Compilieren gcc -c a.cpp gcc -c b.cpp gcc -c c.cpp a.o b.o c.o Linken gcc a.o b.o c.o automatisch Standard- C++- Bibliothek programm Diese Abbildung zeigt eine Vorgehensweise des getrennten Compilierens und Linkens unter der Voraussetzung, dass alle Dateien in einem Verzeichnis liegen. Aus einer Quelltext-Datei a.cpp wird mit dem Befehl gcc -c a.cpp das zugehörige Objekt-Modul a.o erstellt. Während der Ausführung dieses Schrittes bindet der Präprozessor noch eventuell benötigte Header-Dateien ein, was durch die #include -Direktive ausgedrückt wird. (sowohl eigens erstellte als auch Standard-Header wie z.b. iostream ) Der vom Präprozessor zusammengestellte Quelltext wird an den Compiler übergeben und schließlich compiliert. Das fertige Modul enthält dann den Maschinencode der Funktionen aus dem Quelltext a.cpp. Nutzen diese Funktionen wiederrum Funktionen anderer Module (z.b. cout der Standard-C++-Bibliothek), so existiert im Modul nur ein Verweis auf Adressen dieser Funktionen. Diese Adressen sind aber noch nicht belegt - dies ist die Aufgabe des Linkers.

Der Linker bindet alle Module (Objekt-Dateien) zusammen zu einer ausführbaren Programmdatei. Der Befehl gcc <liste aller Module> veranlasst dies. Die Standard- C++-Module werden automatisch eingebunden, was natürlich viel Schreibaufwand spart. Am Ende all dieser vielleicht zu Beginn kompliziert anmutenden Prozedur halten wir das fertige Programm in der Hand. Wollen wir nachträgliche Änderungen im Programm vornehmen, so genügt es hier, nur das jeweilige Modul neu zu compilieren und alles neu zu binden. Der Binde-Vorgang geschiet sehr schnell das Compilieren ist ein nicht zu unterschätzender Zeitfaktor. (ein weiterer Vorteil dieser Methode) Allein das Compilieren eines Mozilla-Webbrowsers nimmt 30min bis 60min in Anspruch. Müsste der Entwickler bei jeder Änderung stets alles neu compilieren, so wäre der Zeitverlust imens. Soweit zur Theorie: nun wollen wir selbst loslegen und das Konzept anhand einer Aufgabe üben. Aufgabe In dieser Aufgabe soll es darum gehen, ein Programm mycalc zu erstellen, welches 2 Zahlen und einen Operator einliest und dann diverse Operationen ausführt und ausgibt. Dabei soll das Programm so aufgebaut sein, dass alle mathematischen Funktionen in das eine Modul kommen und alle Ein-/Ausgabe-Operationen in das andere. Vorschlag für die Projekt-Struktur: main.cpp... Hauptprogramm mymath.h... Mathe Header mymath.cpp... Mathe Modul myinout.h... E/A Header myinout.cpp... E/A Modul Das Mathe-Paket soll folgende Funktionen enthalten: long mycalc(int a, char op, int b); Diese Funktion soll Summe, Differenz oder Produkt von a und b berechnen und zurückgeben. a und b sind also die Operanden und op der Operator. Wird ein unzulässiger Operator eingelesen, wird Programm beendet: exit(-1); long mypow(int a, int b); Diese Funktion soll die Potenz von a und b berechen und zurückgeben. a ist die Basis und b ist der Exponent. b soll stets größer /gleich 0 sein. void myneg(const int& src, int& dst); Diese Funktion soll src negieren und das Ergebnis an dst geben. (Call By Reference) Implementieren Sie die Berechnung selbst ohne auf die C-Mathe-Bibliothek zurückzugreifen!

Das Ein-/Ausgabe-Paket soll folgende Funktionen enthalten: void mywritestr(char* c); Eine Zeichenkette c ausgeben. void mywritech(char c); Ein Zeichen c ausgeben. void mywriteval(long zahl); Eine Zahl zahl ausgeben. void myreadval(int& zahl); Einen Wert in Referenz zahl lesen. void myreadop(char& op); Einen Operator in Referenz op lesen. Im Hauptprogramm sind alle so erstellten Funktionen anzuwenden. Dabei sollen nur die Header mymath.h und myinout.h über #include eingebunden werden, keine weiteren. Die Ausgabe des Programms soll folgende Form haben: Geben Sie die 1. Zahl ein : 2 Geben Sie den Operator ein: * Geben Sie die 2. Zahl ein : 3 2*3 = 6 2^3 = 8 neg(2) = -2 Die Erstellung und Ausführung des Programms geschieht bei Verwendung o.g. Dateinamen so: g++ -c main.cpp g++ -c mymath.cpp g++ -c myinout.cpp g++ main.o mymath.o myinout.o -o mycalc./mycalc Bei Fragen können Sie sich wenden an: toka@freebits.de.