Informatik I (C++)

Werbung
Informatik I (C++)
Sammlung
von
Gábor Zogg
Sammlung Informatik I
Gábor Zogg
1. Prioritäten
Beschreibung
Negation
Vorzeichen
increment/decrement
Multiplikation/Division
Modulo (Divisionsrest)
Addition/Subtraktion
Relationszeichen
Gleich/Ungleich
logisches AND
logisches OR
Zeichen
!
+,++,-*,/
%
+,<,>,<=,>=
==,!=
&&
||
Priorität
15
15
15
13
13
12
10
9
5
4
2
Assoziativität
rechts
rechts
rechts
links
links
links
links
links
links
links
Sammlung Informatik I
Gábor Zogg
2. Strukturen
2.1 Grundaufbau eines Programms
// Programm: prog.C
// Beschreibung des Programms
// Autor: Name
#include <Bibliothek>
int funktionsname(parameter, parameter, [...]){
// Funktion
[...]
return value;
// Rückgabewert der Funktion
}
int funktionsname2(parameter, parameter, [...])
int main(){
// Initialisierung einer späteren Funktion
// Hauptprogramm
[...]
return 0;
}
int funktionsname2(parameter, parameter, [...]){ // Die bereits initialisierte Funktion
[...]
return value;
}
2.2 Strukturen
2.2.1 Variablen initialisieren
Datentyp
bool
integer
unsigned int
float
double
string
char
Initialisierung
bool x;
int x;
unsigned int x;
float x;
double x;
std::string x;
std::char x;
Beschreibung
true/false
ganzzahlig, positiv oder negativ
ganzzahlig, positiv
Fliesskommazahl, 32bit
Fliesskommazahl, 64bit
Text
Zeichen
3
Sammlung Informatik I
Gábor Zogg
2.2.2 if-Strukturen
if (Bedingung) {
[...]
}
// einfach
if (Bedingung) {
[...]
} else {
[...]
}
// mit else
2.2.3 do-while-Strukturen
do {
// mit do (wird mindestens ein maldurchgeführt!)
[...]
} while (Bedingung);
while (Bedingung) {
[...]
}
// ohne do
2.2.4 for-Schleife
for (Variabeln; Abbruchbedingung; Variablenänderung){ [...] }
for (int x = 0; x > 12; x++, y--){
[...]
}
// Beispiel
2.3 Datentypen
2.3.1 Aufbau, Schreibweise
Typ
bool
int
unsigned int
float
Beispiele
true, false
145, 548, -3458
123u, 34u, 599943u
1.234f, -5.67f
double
5.342, -7.894536654
std::string
std::char
std::vector
"Hallo du da!", "gruen"
'b', '8', '-'
Elemente
4
Aufbau
1 bit
(7) bits + 1 Vorzeichen-bit
(8) bits
23 bit Mantisse
8 bit Exponent
1 bit Vorzeichen
53 bit Mantisse
12 bit Exponent
1 bit Vorzeichen
8 bit pro Zeichen
8 bit
je nach Inhalt
Sammlung Informatik I
Gábor Zogg
2.3.2 Typkonversionen
speziell
int - unsigned int - float - double
allgemein
exact:
float > double
char > string
(unsigned int > int)
approximative:
double > float
andere
2.3.3 Iteratoren
Verweisen auf ein Zeichen oder einen Wert
dereferenzieren: *iterator
// liefert den Wert, auf den der Iterator weist
2.4 Funktionen
2.4.1 Funktionsaufrufe
call-by-value: funktion(variable);
// Eine Kopie der Variablen wird erstellt
call-by-reference: funktion(&variable);
// Es gibt keine Kopie der Variablen
2.4.2 Bibliotheken
Einbinden einer Bibliothek: #include "bib.h" // sofern im selben Verzeichnis
Aufbau einer Bibliothek:
// Programm.h
// Beschreibung
// Autor
funktion ([...]) {
[...]
return value;
}
Auch hier können namespaces verwendet werden. Es können auch weitere Bibliotheken
eingebunden werden.
2.4.3 Object-Files
Object-files sind prekompilierte .C Dateien, die keine main-Funktion enthalten. Sie können
anschliessend beim kompilieren angefügt werden und unterscheiden sich dann nicht mehr von
Funktionen, wie sie im Programm selbst geschrieben stehen.
5
Sammlung Informatik I
Gábor Zogg
3. Formale Sprachen, Grammatik
3.1 Formale Sprachen
Alphabet Σ als endliche Menge an Symbolen
Sprache L ⊆ Σ wird konstruiert durch Grammatik (siehe 3.3)
3.2 Reguläre Ausdrücke
Zeichen
[a|b]
ab
a{x}
a{x,y}
*
+
?
ε
(c)
Bedeutung
a oder b
a gefolgt von b
x mal das a hintereinader
zwischen x und y mal das a hintereinander
beliebig oft
beliebig oft, mindestens einmal
einmal oder keinmal
nichts
Klammerung (für *,+ oder?)
entspricht
a{5}=aaaaa
a{5,7}=a{5}|a{6}|a{7}
a+=aa*
a?=a| ε
Beispiel:
Alle Wörter, worin alle Teilwörter der Länge vier mindestens eine 1 enthalten aus dem Alphabet
Σ = {0,1}:
['1']*(['0']?['0']?['0']?['1'])*['0']?['0']?['0']?
3.3 Grammatik
G=<N,T,P,S> Grammatik
N Nicht-Terminalsymbole (Zeichen, die am Schluss nicht im Wort vorkommen)
T Terminalsymbole
P Produktionsregeln
S Startsymbol
Beispiel (für die selbe Aufgabe wie bei 3.2):
T={0,1}
N={A,B,C,D}
S=A
P:
AÆ1A
AÆ0B
AÆ ε
BÆ1A
BÆ0C
BÆ ε
CÆ1A
CÆ0D
CÆ ε
DÆ1A
DÆ ε
6
Sammlung Informatik I
Gábor Zogg
4. Sortieralgorithmen
4.1 Min-Sort
Beginnt vorne und sucht von den verbleibenden jeweils das kleinste, danach vertauscht es das
erste verbleibende Element mit dem kleinsten.
Beispiel:
5 3 2 6 4 1 3 7
1 3 2 6 4 5 3 7
1 2 3 6 4 5 3 7
1 2 3 6 4 5 3 7
1 2 3 3 4 5 6 7
1 2 3 3 4 5 6 7
1 2 3 3 4 5 6 7
1 2 3 3 4 5 6 7
1 2 3 3 4 5 6 7
4.2 Bubble-Sort
Immer zwei aufeinanderfolgende Elemente werden verglichen, und falls das erste das grössere ist,
dann wird getauscht. Das letzte Element bleibt dann stehen und wird nicht mehr geprüft. Wenn ein
Durchgang ohne Veränderung bleibt wird abgebrochen.
Die Methode ist nur schneller, falls per Zufall der Sortiervorgang früher vollendet ist.
Beispiel:
5
3
3
3
3
3
3
3
2
2
3
5
2
2
2
2
2
2
3
3
2
2
5
5
5
5
5
5
5
5
6
6
6
6
4
4
4
4
4
4
4
4
4
4
6
1
1
1
1
1
1
1
1
1
1
6
3
3
3
3
3
3
3
3
3
3
6
6
6
6
7
7
7
7
7
7
7
7
7
7
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
1
1
1
1
5
1
1
1
1
1
4
3
3
3
1
5
3
3
3
3
3
4
4
4
3
3
5
5
5
5
5
5
5
5
6
6
6
6
6
6
6
6
6
6
7
7
7
7
7
7
7
7
7
7
2
2
2
1
1
1
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
6
6
6
6
6
6
6
6
7
7
7
7
7
7
7
7
4.3 Quick-Sort
Unterteilt die Folge in zwei Teilstücke. Es wird dabei so getrennt, dass links vom Trennelement
alles kleiner ist und rechts alles grösser. Danach ruft die Funktion sich selber rekursiv auf. Als
Trennelement dient das erste Element der Folge, es wird dann die Folge so durchgearbeitet, dass
alle grösseren Elemente als das Trennelement mit dem nachfolgenden vertauscht werden. Am
Ende wird das Trennelement noch an die richtige Stelle vertauscht. Siehe Beispiel.
Die Variante ist schneller, falls die Elemente stark vermischt sind. Sie ist aber langsam, wenn die
Folge schon gut vorsortiert ist. Dann wäre Bubble-Sort schneller.
Beispiel:
5 3 2 6 4 1 3 7
5 3 2 4 6 1 3 7
b
b
i,j
i
j
5 3 2 6 4 1 3 7
5 3 2 4 1 6 3 7
b
b
i,j
i
j
5 3 2 6 4 1 3 7
5 3 2 4 1 3 6 7
b
b
i,j
5 3 2 6 4 1 3 7
b
i
i
j
3 3 2 4 1 5 6 7
j
b
7
Sammlung Informatik I
Gábor Zogg
5. Klassen, Abstrakte Datentypen
6. Speicherverwaltung
8
Sammlung Informatik I
Gábor Zogg
7. Kompilieren
normal: g++ -Wall –o outputname filename.C
in Objectfile kompilieren: g++ -Wall –c –o outputname.o filename.C
Objectfiles einbinden: g++ -Wall –o outputname objectfile.o objectfile2.o filename.C
aggressive Optimierung: g++ -Wall –O2 –o outputname filename
9
Sammlung Informatik I
Gábor Zogg
8. Referenz
// Zeilenkommentar
/* ... */ langer Kommentar
// PRE pre-condition
// POST post-condition
#include "file.h"
#include <Standardbibliothek>
#include <algorithm>
std::swap(iterator a, iterator b) vertauscht den Inhalt, auf den der Iterator zeigt
std::iter_swap(iterator a, iterator b) vertauscht die Iteratoren
#include <cassert>
assert ( bool-expr ); bricht Programm ab, wenn false
#include <iostream>
std::cin >> var; einlesen der Eigabe in der Shell in die Variable var
std::cout << "Text" << Variable << std::endl(); Ausgabe auf die Shell
std::getline(std::cin, var); Einlesen einer einzelnen Zeile der Eingabe
#include <limits>
std::numeric_limits<any>::epsilon() Maschinen-Epsilon (Abweichung vom Wert)
std::numeric_limits<any>::max() grösster Inhalt ohne overflow
std::numeric_limits<any>::min() kleinster Inhalt ohne underflow
#include <string>
std::string Datentyp string
std::string::iterator Iterator auf ein Zeichen im string
std::string::const_iterator konstanter Iterator auf ein Zeichen im string
string.begin() das erste Zeichen im string
string.end() zeigt hinter das letzte Zeichen im string
string.length() Länge des strings
string[i] das i-te Zeichen im string (als char)
#include <vector>
std::vector<any> Datentyp vector
std::vector<any> (unsigned int, element of any) Definition eines vectors (Anzahl, Wet)
std::vector<any>::iterator Iterator auf ein Element des vectors
std::vector<any>::const_iterator konstanter Iterator auf ein Element des vectors
std::vector<any>::reverse_iterator Iterator von hinten (umgekehrt)
std::vector<any>::const_reverse_iterator
vector.begin() zeigt auf das erste Element des vecors
vector.end() zeigt hinter das letzte Element des vectors
vector.rbegin() zeigt von hinten auf das erste Element des vectors (auf das letzte)
vector.rend() zeigt von hinten hinter das letzte Element des vectors (vor das erste)
vector.push_back(var) hängt dem vector vorne ein Element an
vector.push_forth(var) hängt dem vector hinten ein Element an
do { ... } while ( bool-expr )
for ( init ; exit bool-expr; change ) { ... }
if ( bool-expr ) { ... } else { ... }
return any;
while ( bool-expr ) { ... }
10
Herunterladen