informatik i - tuhh · inf.1 08.05.2011 dr.-ing. habil. jörg wollnack inhalte informatik i...
TRANSCRIPT
INF.108.05.2011
Dr.-Ing. habil. Jörg Wollnack
Inhalte
Informatik IInformatik I
Einführung
Algorithmus, Programmiersprache, Compiler und Linker
Datentypen
Kontrollstrukturen
Präprozessoranweisungen
Libraries
Funktionen und Klassen
INF.208.05.2011
Dr.-Ing. habil. Jörg Wollnack
Bits, Bytes und Softwaresysteme
0 | 1 wahr | falschSchalter ein | Schalter ausSpannung ein | Spannung aus
Duale messbare Zustände, die sich gegenseitig ausschließen.
Elementare InformationMit Bits lässtsich alles end-liche codieren
(Zahlen, Texte,Musik, Bilder,usw.)
INF.308.05.2011
Dr.-Ing. habil. Jörg Wollnack
1 2 2 1 0 1 2{0,1} { }, 2n nn n Mx x x x x M E E E M− − ∈ ↔ ∈ =� �
Codierung von Daten durch Bits
Der Menge der Bitmuster in einer Stellenschreib-weise mit n Ziffern können eineindeutig M = 2n
Elemente einer Menge M zugeordnet werden. Diese Zuordnungstabelle definiert die Codierung der Dualzahlen.
dual <lat.> (eine Zweiheit bildend); ein duales System
kodieren, in der Technik meist codieren (durch einen Kode verschlüsseln)
INF.408.05.2011
Dr.-Ing. habil. Jörg Wollnack
1 2 2 1 0
1 2
0 0 0 0 0 0
1 0 0 0 0 1
2 0 0 0 1 0
3 0 0 0 1 1
4 0 0 1 0 0 { }, 2
5 0 0 1 0 1
6 0 0 1 1 0
7 0 0 1 1 1
2 1 1 1 1 1
n n
nM
n
i x x x x x
E E E M
− −
↔ =
�
�
�
�
�
� �
�
�
�
� � � � �
�
Codierung von Daten durch Bits
INF.508.05.2011
Dr.-Ing. habil. Jörg Wollnack
Steuerzeichen
Wiki
INF.608.05.2011
Dr.-Ing. habil. Jörg Wollnack
Druckzeichen
Wiki
INF.708.05.2011
Dr.-Ing. habil. Jörg Wollnack
Literatur
Kirch, U.; Prinz, P.: C++ Lernen und professionell anwenden,5. aktualisierte Auflage 2010, ISBN 978-3-8266-9143-0
Louis, D.: C/C++ Das komplette Programmierwissen für Studium und Job, ISBN 978-3-8722-4582-3
oder jedes andere Lehrbuch, das Ihnen gefällt.
INF.808.05.2011
Dr.-Ing. habil. Jörg Wollnack
Blume
Absolute positioning accuracy requires teaching
Separation of plant business and programming
Roboter Offline Programmierung
INF.908.05.2011
Dr.-Ing. habil. Jörg Wollnack
Vektor<double> MessPointsIst(iDEF_DIMHomogeneKoodinaten),XYZ1Pos(iDEF_DIMHomogeneKoodinaten);
HMatrix<double> HT_RA;
::::::::::::::::::::::::::::::::
HT_RA.RPY(m_XYZAktuator.GetPoseRA());PosErrorA = XYZ1Pos - HT_RA * MessPointsIst;
Objektorientierter Programmentwurf
MS Visual C++MS Visual C++
INF.1008.05.2011
Dr.-Ing. habil. Jörg Wollnack
Algorithmus
INF.1108.05.2011
Dr.-Ing. habil. Jörg Wollnack
Intuitive Algorithmus-Definition
Ein Algorithmus definiert eine präzise, eindeutige und endliche Beschreibung elementarer ausführbarer Verarbeitungsschritte.
Dies benötigt eine Sprache mit Wörtern (Tokens) und eine Syntax mit der sich Sätze beschreiben lassen.
Eine Syntax ist ein System von Regeln nach denen wohlge-formte und erlaubte Sätze bzw. Aussagen aus den Wörtern gebildet werden.
Wörter der Sprache werden aus einem Alphabet von Zeichen gebildet.
Aussagen können wahr oder falsch sein.
INF.1208.05.2011
Dr.-Ing. habil. Jörg Wollnack
Formale- oder Programmiersprachen
Programmiersprachen in der Informatik, Kalküle oder logische Beschreibungen sind durch formale Sprachen gekennzeichnet.
Kennen Sie Beispiele?
INF.1308.05.2011
Dr.-Ing. habil. Jörg Wollnack
1 2y x x= +
1
2
12456
45789
111
____________
58245
x
x
y
Ist dies der Algorithmus?
Wer ist der Prozessor/Ausführende?
Was ist alles festzulegen?
Algorithmus 1
INF.1408.05.2011
Dr.-Ing. habil. Jörg Wollnack
1 2y x x= + Die Variablen x1, x2 und y könnten
natürliche Zahlen,reelle Zahlen, komplexe Zahlen,boolsche/logische Ausdrücke,Zeichenfolgen usw.
sein.
Sie könnten auch Vektoren oder Matrizen mit obigen Elementen sein.
Algorithmus 2
INF.1508.05.2011
Dr.-Ing. habil. Jörg Wollnack
1 2y x x= + Der zweistellige Additionsoperator + und der Äquivalenz-Operator = haben im Allgemeinen für die unterschiedlichen Objekte/Variablen andere Bedeutungen.
Diese sind eindeutig zu beschreiben.
Die interpretierende oder zu übersetzende Instanz muss diese Kenntnisse oder Informationen besitzen, damit der richtige Algorithmus zur Ausführung der Operatoren generiert werden kann.
Algorithmus 3
INF.1608.05.2011
Dr.-Ing. habil. Jörg Wollnack
Eine Programmiersprache benötigt Datentypen und Operatoren auf den Datentypen.
Wir Menschen entwickeln motiviert sowohl durch experimentelle (messende) Untersuchungen der Welt als auch theoretische Überlegungen neue Objekte und Operatoren.
Die hierbei entstehenden Algebren können konstruktive Erweiterungen oder Teilmengen anderer sein (komplexe Zahlen, Vektoren, Matrizen usw.).
Algorithmus 4
INF.1708.05.2011
Dr.-Ing. habil. Jörg Wollnack
Wir Menschen entwickeln motoviert sowohl durch experimentelle (messende) Untersuchungen der Welt als auch theoretische Überlegungen neue Objekte und Operatoren.
Die hierbei entstehenden Algebren können konstruktive Erweiterungen oder Teilmengen anderer sein (komplexe Zahlen, Vektoren, Matrizen usw.).
Objektorientierte Programmiersprachen I
INF.1808.05.2011
Dr.-Ing. habil. Jörg Wollnack
Entwicklung neuer Datenobjekte mit spezifischen Memberfunktionen und Operatoren.
Entwicklung neuer Datenobjekte als Erweiterung oder Restriktion bestehender Datenobjekte im Sinne von Ober- und Untermengen.
Beispiel: Die Algebra der reellen und komplexen Zahlen soll nicht nur in der Mathematik eine gleiche Schreibweise ermöglichen. Gilt analog auch für die Matrix- und Vektoralgebra.
Objektorientierte Programmiersprachen II
Member := Mitglied des Objekts/der Klasse
INF.1908.05.2011
Dr.-Ing. habil. Jörg Wollnack
Vorteile objektorientierte Programmiersprachen I
Menschliche Schreibweisen und Codierungen weisen hinsichtlich der Muster eine höhere Verwandtschaft auf. Dies erleichtert dem Menschen die Assoziation und das Verständnis.
Die kompakte Schreibweise kann erheblich umfangreichen Code bei der Compilierung generieren.
Eine höhere Wiederverwertbarkeit des Codes ist möglich.
Potenziell wirtschaftlichere und sicherere Programmer-stellung
Potenziell geringere Wartungskosten
usw.
INF.2008.05.2011
Dr.-Ing. habil. Jörg Wollnack
Vorteile objektorientierte Programmiersprachen II
Klasse: Die Klasse wird durch die Attribute/Eigenschaften in der Klassendefinition festgelegt. Das Verhalten des Objekt wird durch die Methoden (Memberfunktionen und Operatoren) festgelegt.
Datenkapselung: Die Programmierung kann Implemen-tierungsdetails verbergen. Ein direkter Zugriff auf interne Daten kann unterbunden werden, so dass ein wohldefiniertes Interface besteht, dass nicht umgangen werden kann.
Polymorphie: Verschiedene Objekte können auf die Gleiche Information unterschiedlich reagieren. Reaktion wird erst zur Laufzeit festgelegt.
INF.2108.05.2011
Dr.-Ing. habil. Jörg Wollnack
Vererbung: Eine abgeleitete Klasse kann die Attribute und Methoden der Basisklasse besitzen. Neue Attribute und Methoden können hinzugenommen werden. Vorhandene Methoden können überlagert werden.
Weitere Eigenschaften, die später erklärt werden.
Vorteile objektorientierte Programmiersprachen III
INF.2208.05.2011
Dr.-Ing. habil. Jörg Wollnack
Compiler und Linker
INF.2308.05.2011
Dr.-Ing. habil. Jörg Wollnack
Compiler
Linker
#include#include
<DateiName1.h> “DateiName2.h”
SourceCode_1.cpp :SourceCode_n.cpp
Code_1.obj :Code_n.obj
*.obj
prog.exe
*.lib
Compiler und Linker
Der Compiler übersetzt Hochsprachenprogrammein Maschinenprogramme
Der Linker bindet mehrere Objektdateien zu einem Programm und löst externeReferenzen über *.obj und *.lib auf.
INF.2408.05.2011
Dr.-Ing. habil. Jörg Wollnack
Compiler
PräprozessorParserCode-GeneratorOptimiererAssembler
Der Präprozessor ersetzt Zeichenketten durch andere Zeichenketten, entfernt Kommentare und redundante Trennzeichen
Der Parser analysiert und zerlegt den Text.
Der Code-Generator erzeugt den Assembler- bzw. Maschinencode
Der Optimierer optimiert hinsichtlich Programmgröße und –geschwindigkeit
Der Assembler erzeugt den echten ausführbaren Maschinencode
Compiler-Schritte
INF.2508.05.2011
Dr.-Ing. habil. Jörg Wollnack
Entwicklungsumgebung
Integrated Development Environment (IDE)
INF.2608.05.2011
Dr.-Ing. habil. Jörg Wollnack
Editor Programmeingabe
Projektverwaltung Projektdefinition, Compilierung usw.
Debugger Programmstopp und schrittweise Ausführung
Profiler Analyse des Laufzeitverhaltens
Visuelle Unterstützung des Menschen durch Syntax Highlighting
Visuelle Unterstützung von Klassenbibliotheken Klassen-Hierarchie-Grafik
Visueller Entwurf von Menüs und Dialogen mit automatischer Programmgenerierung
Aufgaben der Entwicklungsumgebung
Wird am Compiler erläutert!
INF.2708.05.2011
Dr.-Ing. habil. Jörg Wollnack
// Main-Programm int main(int argc, TCHAR* argv[], TCHAR* envp[]) { try { int iRetCode; if(iRetCode = WinInit() != 0) throw(iRetCode); //-----------------------------------------------------------------------------------------------------
Hier steht Ihr Programm!!!!! //----------------------------------------------------------------------------------------------------- _getch(); // warte auf Tastatureingabe return(0); } catch(int iErrorCode) { _getch(); // warte auf Tastatureingabe return iErrorCode; } }
Syntax Highlighting
INF.2808.05.2011
Dr.-Ing. habil. Jörg Wollnack
Programmiersprachen
INF.2908.05.2011
Dr.-Ing. habil. Jörg Wollnack
Allgemeine Syntax C++
// Kommentarzeile (mit C++ eingeführt)
/* keine /* Verschachtelungen */ erlaubt */
INF.3008.05.2011
Dr.-Ing. habil. Jörg Wollnack
Namensgebung Programmiersprachen
Reservierte Worte sind nicht zulässig!
INF.3108.05.2011
Dr.-Ing. habil. Jörg Wollnack
Ausgewählte reservierte Worte C++
INF.3208.05.2011
Dr.-Ing. habil. Jörg Wollnack
Schlüsselwort Beschreibung
asm Schlüsselwort, das die Integration von Assembler-Befehlen in den Quelltext erlaubt.
auto Die automatische Speicherklasse.
break Befehl, mit dem for-, while, switch- und do...while-Schleifen direkt verlassen werden.
case Befehl, der innerhalb der switch-Anweisung verwendet wird.
char Der einfachste Datentyp von C.
const Datenmodifizierer, der verhindert, dass eine Variable geändert wird. Siehe volatile.
continue Befehl, der den aktuellen Durchlauf einer for-, while oder do...while-Schleife beendet und den nächsten Schleifendurchlauf einleitet.
default Befehl, der innerhalb von switch-Anweisungen verwendet wird, um die Fälle abzufangen, die nicht von den case-Blöcken bearbeitet werden.
do Schleifenbefehl, der zusammen mit der while-Anweisung verwendet wird. Die Schleife wird immer mindestens einmal ausgeführt.
double Datentyp, der Fließkommawerte doppelter Präzision aufnehmen kann.
else Anweisung, die einen alternativen Anweisungsblock einleitet, der ausgeführt wird, wenn eine if-Anweisung als FALSCH ausgewertet wird.
enum Datentyp, der die Deklaration von Variablen erlaubt, die nur bestimmte Werte übernehmen.
extern Datenmodifizierer, der darauf hinweist, dass eine Variable an anderer Stelle im Programm deklariert wird.
float Datentyp, der für Fließkommazahlen verwendet wird.
for Schleifenbefehl, der aus Initialisierungs-, Inkrementierungs- und Bedingungsabschnitten besteht.
goto Befehl, mit dem an eine vordefinierte Marke im Programm gesprungen werden kann.
if Befehl, der den Programmfluss auf der Basis von Wahr/Falsch-Entscheidungen steuert.
int Datentyp, der Integer-Werte aufnimmt.
long Datentyp, der größere Integer-Werte als int aufnehmen kann.
register Speichermodifizierer, der angibt, dass eine Variable, wenn möglich, im Register abgelegt werden soll.
return Befehl, mit dem die aktuelle Funktion beendet und die Programmausführung an die aufrufende Funktion zurückgegeben wird. Der Befehl kann gleichzeitig dazu verwendet werden, einen einzelnen Wert zurückzugeben.
short Datentyp, in dem Integer-Werte gespeichert werden. Er wird eher selten verwendet und hat auf den meisten Computern die gleiche Größe wie int.
signed Modifizierer, der anzeigt, dass eine Variable sowohl positive als auch negative Werte annehmen kann. Siehe unsigned.
sizeof Operator, der die Größe eines Elements in Byte zurückgibt.
static Modifizierer, der anzeigt, dass der Compiler den Wert einer Variablen beibehalten soll.
struct Schlüsselwort, mit dem C-Variablen beliebiger Datentypen zu einer Gruppe zusammengefasst werden können.
switch Befehl, mit dem der Programmfluss in eine Vielzahl von Richtungen verzweigen kann. Wird zusammen mit der case-Anweisung verwendet.
Reservierte Worte C
INF.3308.05.2011
Dr.-Ing. habil. Jörg Wollnack
catch Fehlerbehandlung (fangen)inline Code direkt einsetzentemplate Typenvariable Vorlage einer Klasse class Klassenobjektnew Speicher anlegenthis Pointer auf Klassenobjekt delete Speicher frei gebenoperator Operator einer Klasse definierenthrow Fehlerbehandlung (werfen)except Fehlerbehandlungprivate Private Objekte einer Klassetry Fehlerbehandlungfinally Fehlerbehandlungprotected Geschützte Objekte einer Klassevirtual Virtuelle Member einer Klassefriend Freund einer Klassepublic Objekte Sichtbar in einer Klasse
Auszug reservierter Worte / Tokens
INF.3408.05.2011
Dr.-Ing. habil. Jörg Wollnack
Headerund
Includes
INF.3508.05.2011
Dr.-Ing. habil. Jörg Wollnack
Verwendung von Header-Dateien I
Includes, wenn möglich, am Anfang von Programmen.
#include-Direktive verweist nur auf eine Datei (keine Liste erlaubt)
#include <DateiName.ext>In spitzen Klammern wird Suchliste abgearbeitet. Suchliste ist im Environment des Compilers definiert.
#include “..\..\Dir\Datei.ext“In Apostroph-Zeichen stehende PfadDateiNameExtension bezieht sich auf Directory des Source. Relative Pfade sind zulässig.
?
INF.3608.05.2011
Dr.-Ing. habil. Jörg Wollnack
Verwendung von Header-Dateien II
Includes von Moduln können notwendige Header mit übernehmen.
Dies führt zu einer Verein-fachung für den Anwender.
Hat gegebenenfalls mehr-fach Einbettungen zur Folge und kann so ver-hindert werden (Ansonsten Compilerfehler).
INF.3708.05.2011
Dr.-Ing. habil. Jörg Wollnack
Type Name Bytes Other Names
int *signed, signed int
System dependent
unsigned int * unsigned System dependent
__int8 1char, signed char
–128 to 127
__int16 2short,
short int, signed short int
–32.768 to 32.767
__int32 4signed, signed int
–2.147.483.648 to 2.147.483.647
__int64 8 None–9.223.372.036.854.775.808 to 9.223.372.036.854.775.807
char 1 signed char –128 to 127
unsigned char 1 None 0 to 255
short 2short int, signed short int
–32.768 to 32.767
unsigned short 2 unsigned short int 0 to 65.535
long 4long int, signed long int
–2.147.483.648 to 2.147.483.647
unsigned long 4 unsigned long int 0 to 4.294.967.295
enum * none Same as int
float 4 none 3.4E +/- 38 (7 digits)
double 8 none 1.7E +/- 308 (15 digits)
long double 10 none 1.2E +/- 4932 (19 digits)
Elementare Datentypen
INF.3808.05.2011
Dr.-Ing. habil. Jörg Wollnack
Einstelliger/unärer Operator Einstelliger/unärer Operator (op)
Zweistelliger/binärer OperatorZweistelliger/binärer Operator
Operatoren
opy x=
opy u v=
op:= Operator auf dem Objekt
( ) ( / )vy a c u b d e g= + + ⋅ + +
Hierarchie/Rangordnung
INF.3908.05.2011
Dr.-Ing. habil. Jörg Wollnack
ASCII-Zeichensatz I
32 040 20 Space Leerzeichen
Steuerzeichen Druckbare Zeichen
INF.4008.05.2011
Dr.-Ing. habil. Jörg Wollnack
ASCII-Zeichensatz II
INF.4108.05.2011
Dr.-Ing. habil. Jörg Wollnack
Mit der Einführung des IBM-PCs 1981 wurde ein 8 Bit breiter Zeichensatz etabliert. Die Zeichen 128 bis 255 (dezimal)dienen für Steuer- und Sonderzeichen (ä, ö, ü, ... ) sowie Grafiksymbole (Π, α, ...). Die Darstellung hängt vom verwendeten Zeichensatz ab (ANSI, IBM-PC, usw.) .
Mit der jüngsten Einführung eines 16 Bit breiten Unicodes können 65.536 unterschiedliche Zeichen dargestellt werden (z.B. chinesische Schriftzeichen).
Weitere Zeichensätze
INF.4208.05.2011
Dr.-Ing. habil. Jörg Wollnack
Escape Sequence Represents
\a Bell (alert)
\b Backspace
\f Formfeed
\n New line
\r Carriage return
\t Horizontal tab
\v Vertical tab
\' Single quotation mark
\" Double quotation mark
\\ Backslash
\? Literal question mark
\ooo ASCII character in octal notation
\xhhh ASCII character in hexadecimal notation
Text und Escape-Sequenzen
„Hallo\n“ Hallo\n\0
SpeicheranordnungVektor vom Typ char
INF.4308.05.2011
Dr.-Ing. habil. Jörg Wollnack
����
������
�� ��
��������� � � � � � �� ��
��� � � � � � �
Speicherbild und Index von Texten
1 Byte / 8 Bit pro Zeichen <=> 256 Zeichen codierbar
“Hallo\n“