12. Was ist ein Algorithmus?
Ist eine eindeutige Handlungsvorschrift um Probleme zu lösen. Diese bestehen aus endlich vielen Einzelschritten.
24 Core Concepts
1. Ein-/ Ausgabe
2. Algorithmus
3. Programm
4. Berechnungsprozess
3Low Level Language -> High level Language
1. Machine Language (0101)
2. Assembly language
3. C/C++, Fortran
4. Matlab, Python, Perl
5. Wolfram Alpha
4Functional Languages
Programm ist aufgeteilt in Funktions definitionen. -eine Art von deklarativer Sprache
( Scala, F#, Clojure, Lisp)
5Procedural Languages
Ein Programm welches in sequenzen von Schritten geschrieben ist, dass im Schluss ein Ergebnis ausgibt. (Cobol, Fortran, C)
6OOP (Object Oriented Programming)
Ein Programm wird in Objekte aufgeteilt, diese haben Methoden, Eigenschaften(Variablen). Die Methoden bearbeiten die Eigenschaften.(Python, Java, C#, C++)
7Logic/Declarative Language
Used to create programs, that enable the Computer to reason logically. Specification of the Task instead of the algorithmic model.("Was statt Wie")
8Aufbau IDE=Integrated Development Enviroment
1. Editor
2. Compiler
3. Linker
4. Debugger
5. Version Control
X. und vieles mehr
9Compiler
übersetzt den Quellcode in die Maschinensprache
( g++ -c test.cpp), überprüft den Quellcode auf Syntax Fehler
10Linker (Linking Loader)
Führt mehrere Objektdateien zusammen um eine ausführbare datei zu erstellen. Dadurch kann man Code wiederverwenden.
11Debugger
beim Suchen von Symantik-/Syntaxfehlern im Quellcode, man kann sich genau ansehen was in einer bestimmten Stelle vom Programm passiert.
12Version Control GIT
um die Versionskontrolle vom Programm über die Entwicklungszeit vom Programm zu kontrollieren, man kann somit zu jeder Releaseversion vom Programm zurück springen
13Editor
ein Texteditor in welchem man das Programm schreibt
14Informatik (Information und Automatik)
Wissenschaft von der systematischen Verarbeitung von Informationen/Daten besonders der automatischen Verarbeitung mit Hilfe von Digitalrechnern (Computern)
151. Punkt Core Concept
1. Input/Output
163. Punkt Core Concept
3. Program
Das aufschreiben eines Algorithmuses in einer geeigneten Programmiersprache
174. Punkt Core Concept
4. Process
Ausführen eines Programmes an einem bestimmten Ort zu einer bestimmten Zeit
18Theoretische Informatik
Erforscht und entwickelt Konzepte zur Darstellung von Geräten und Prozessen als formal logische Systeme,
damit ist sie die Grundlegende für die Programmierung.
Die theoretische Informatik befasst sich insbesondere mit der Geschwindigkeit und dem Speicherverbrauch solcher Algorithmen.
19Praktische Informatik
Entwickelt grundlegende Lösungskonzepte für die wichtigsten Anwendungsbereiche der Informatik.
Sie beschäftigt sich besonders mit der Entwicklung von Computerprogrammen mit Hilfe spezieller Programmiersprachen und deren Nutzung in großen Softwaresystemen.
20Technischen Informatik
EVA-Prinzip:
1. Dateneingabe (Eingabe)
2. Datenverarbeitung (Verarbeitung)
3. Datenausgabe (Ausgabe)
Die Entwicklung der hierfür erforderlichen Hardware ist der Kernbereich der Technischen Informatik.
21Angewandte Informatik
Untersucht inwieweit Abläufe durch den Einsatz von Computern automatisiert werden können.
Verfahren der Simulation und Computergrafik, der Bild und Sprachverarbeitung sowie der Modellierung schaffen konkrete Anwendungsmöglichkeiten für die Automatisierung.
22Informatik und Gesellschaft
- umfasst Soziologie, Philosophie, Jura, und Politologie
- ermöglicht eine umfassende Technikfolgeabschätzung für Computeranwendungen in der modernen Gesellschaft.
- Datenschutz
- Open Source und ihr Verhältnis zum Urheberrecht
- Softwarepatente
23Unterschied zwischen Information und Daten
Daten repräsentieren Information
Information kann aus den Daten abstraktiert werden
Beispiel Schachfiguren
Information --> Daten
------------------------------
Weißes Pferd --> 0100
weißer Turm --> 0101
schwarzes Pferd --> 1100
schwarzes Turm --> 1101
24Deklaration von Variablen
typ NameVariable = Wert;
Beispiel
int Variable = 100;
oder
int Variable {100}; manche Compiler überprüfen auf Fehler
25Zahlen Repräsentation Ganzzahlen
- 1B boolean: true oder false
- 1B char: -128...127 / 0...255
- 1B byte: -128 ... 127
- 2B short: -32768...32767
- 4B int: -2^31...(2^31)-1
- 8B long: -2^63...(2^63)-1
26IEEE Format Gleitkomma/Fließkommazahlen double/float
- double:
besteht aus 8 Bytes=64Bit:
- 52 bits für die Mantisse
- 11Bits für die den Exponent
- 1 Bit als Vorzeichen Bit
- float:
besteht aus 4 Bytes=32Bit:
- 23 bits für die Mantisse
- 8 Bits für die den Exponent
- 1 Bit als Vorzeichen Bit
27Fließkommazahlen Datentypen
- 4B float +-3.4028...*10^38
- 8B double +-1.797...*10^308
28Typenumwandlung
1 static_cast<datentyp>(Var)
2 (datentyp) Var
3 datentyp(Var)
bei Impliziter oder expliziter Typenumwandlung kann es zu:
$\bullet \text{ Genauigkeitsverlust}$
$\bullet \text{ Überschreitung des Grenzbereiches}$
$\bullet \text{ Verlust des Nachkommateils bei der Umwandlung z.B. double in int}$
$\bullet \text{ Vorzeichenverlust negative Zahl wird unsigned Datentyp umgewandelt}$
31Implizite Umwandlung
implizite Typenumwandlung werden vom Compiler automatisch vorgenommen
32explizite Typenunwandlung
Programmierer schreibt in den Code die Typenumwandlung
33Hornerschema
um eine Zahl in ein anderes Zahlensystem umzuwandeln
34Zahlensysteme ausrechnen
$\sum_{i=0}^{n-1}z_i*B^i$
$z_i$ = Wertigkeit an der Position der Stelle
Beispiel:
$0110_B \rightarrow \quad 0*2^3+1*2^2+1*2^1+0*2^0=6_D
35Verzweigungen
Eine if-Anweisung wird verwendet, um einen Codeblock auszuführen, wenn eine bestimmte Bedingung erfüllt is
if(booleanExpression)
{
//Executes when booleanExpression holds true
}
else if(booleanExpression2)
{
//Executes when booleanExpression2 holds true
}
else
{
//Executes when neither booleanExpression nor booleanExpression2 are true
}
Eine switch-Anweisung ermöglicht den Vergleich eines Ausdrucks mit verschiedenen möglichen Werten und führt entsprechende Codeblöcke aus.
switch(variable) {
case valueOne:
//statements
break;
case valueTwo:
//statements
break;
default: //optional
//statements
}
36Schleifen
Eine for-Schleife wird verwendet, um eine bestimmte Anzahl von Iterationen durchzuführen. Sie besteht aus drei Teilen: Initialisierung, Bedingung und Inkrementierung.
for(Initialisierung; Bedingung; Inkrementierung)
{
//statements
}
Eine while-Schleife wird verwendet, um eine Iteration so lange auszuführen, wie eine bestimmte Bedingung erfüllt ist.
while(Bedingung)
{
//statements
}
Eine do-while-Schleife funktioniert ähnlich wie eine while-Schleife, jedoch wird der Schleifenkörper mindestens einmal ausgeführt, da die Bedingung am Ende der Schleife überprüft wird.
do
{
//statements
}while(Bedingung);
37Aus was besteht ein Computer (systeme)?
- Zentraleinheit(Rechner)
1. CPU Central Processing Unit - 2. RAM Random Access Memory
- 3. ROM Read Only Memory
- 4.Busse und Schnittstellen
- 5. Chipsatz(Schaltkreise"Mainboard")
- 6. Einheiten auf Mainboard (Grafik,Netzwerk,...)
- 7. Erweiterungen und Massenspeicher
- 8. Peripherie
1. Eingabegeräte
2. Ausgabegeräte
38Architektur eines Mainboards
39Neumann Architektur
1. Rechenwerk ALU
2. Steuerwerk CU
3. Ein-/Ausgabewerk I/O
4. Speicherwerk Memory
1,2,3,4 sind über das Bussystem miteinander verbunden
40Harvard-Architektur
1. Rechenwerk ALU
2. Steuerwerk CU
3. Ein-/Ausgabewerk I/O
4. Speicherwerk Daten
5. Speicherwerk Programm
6. Bussystem Daten
7. Bussystem Programm
1,3,4 sind über 6 miteinander verbunden
Auftrennung Datenbearbeitung
2,5 sind über 7 miteinander verbunden
Auftrennung Programmausführung

41Prozessor CPU Aufbau
1. CU (Steuerwerk):
$\quad \text{Auführung des Programmcodes}$
$\quad \text{Instruction Decode: Dekodierung der Maschinenbefehle in Steuerbefehle oder Mikro-Instruktionen}$
2. ALU (Rechenwerk):
$\quad \text{zuständig für Mathematische und Logische Operationen}$
3. Registersatz:
$\quad \text{Speicherplätze innerhalb des Kerns. Die ALU rechnet mit den Werten in den Arbeitsregistern}$
4. Bussysteme:
$\quad \text{Datenbus: Austausch von Daten mit dem RAM}$
$\quad \text{Adressbus: Speicheradressen} $
$\quad \text{Steuerbus Koordinierung des Zugriffs auf Speicher und Peripherie (Steuerbus)}$

42CPU/Prozessor (Central Processing Unit)
Verantwortlich für die Ausführung der Programme und die Steuerung und Verwaltung der Hardware
43Fetch->Decode->Execute
1. Fetch
Befehlszählerregister des Steuerwerks enthält die Adresse des nächsten Befehls
2.Decode
den Befehl decoden um die benötigte Schaltung zu aktivieren
3.Execute
Das Decodete wird Ausgeführt
danach wird wieder in Fetch gesprungen und der Zählerregister um eins erhöht.

44Schnittstelle zwischen Hardware und Software
Hochsprache
⬇️
Assemblersprache
⬇️
Maschinencode
⬇️
Instruction Set Architecture ISA
⬇️
Microarchitektur
⬇️
Gatter und Register
45CISC (Complex instruction Set Computer)
$\bullet \textsf{ großer Satz von Maschinenbefehlen, welche teilweise
direkt komplexe Operationen ermöglichen}$
$\bullet \textsf{ Schlechtere optimierung für Pipelining Optimierungen }$
$\bullet \textsf{ Komplexität in Hardware}$
$\bullet \textsf{ Schwierig zu Programmieren}$
$\bullet \textsf{ Befehle können theoretisch variabel lang sein}$
$\bullet \textsf{ Befehle müssen erst dekodiert werden.}$
$\bullet \textsf{ Befehle werden vom Mikroprogramm interpretiert und in Elementaranweisungen }$
$\textsf{ zerlegt (Microcode), der dann ausgeführt wird.}$
$\bullet \textsf{ Steuerung durch Mikroprogramm in ROM}$

46RISC (Reduced Instruction Set Computer)
$\bullet \textsf{Beschränkung auf die hauptsächlich notwendigen atomaren Befehle}$
$\bullet \textsf{Anweisungen haben eine feste Länge}$
$\bullet \textsf{Keine Microcodedekodierung notwendig}$
$\bullet \textsf{Gute Eignung für Pipelining Optimierung}$
$\bullet \textsf{Ausführung erfolgt direkt in Hardware}$
$\bullet \textsf{Komplexität in Software}$

47Berechnungszeit eines Programmes
RISC:
$\frac{time}{program} = \frac{time}{cycle}*\frac{cycles}{Instructions}$
CISC:
$\frac{time}{program} = \frac{time}{cycle}*\frac{Instructions}{program}$
48Adversarial Attack
angriff auf die Ki, bei welcher die KI mit fehlerhaften werten injiziert wird
49stuxnet
Computerwurm, welcher 974 uran zentrifugen in Iran zerstört hat
50Virus
hat eine Wirtsdatei an welche sie sich anheftet
beim ausführen der Datei wird der Computer infiziert
in den meisten Fällen führt es zu Datenverlust
51Computerwurm
Malware, die sich selbstständig über Netze (Internet) verbreitet. Ein ..... nutzt sehr oft Sicherheitslücken zum Eindringen in ein System.
52Trojaner
Diese Malware ist in einem scheinbar nützlichen Programm versteckt und kann z. B. Passwörter auslesen oder auf Daten im Netzwerk zugreifen und diese an den Auftraggeber der Malware übermitteln.
53wie viele Bit hat 1 Byte
8 Bit
54supervised learning
man nennt den Parameter auf was man das model tranieren will und gibt eine sehr hohe Menge an Daten diesem.
55unsupervised learning
man lässt ein Model ähnlichkeiten in dem Datensatz erkennen und kann es somit für andere Eingangdaten verwenden
56reinforcement learning
Im Vorfeld keine Daten erforderlich.
Stattdessen erfolgt die Bildung der Datenbasis durch ausführliche Trial-and-Error-Abläufe innerhalb eines eigens angelegten Simulations-Szenarios. Während der Trainingsdurchläufe werden alle erforderlichen Daten generiert und markiert.
57Cyber-physical threats examples
• Aurora-generator test
• Stuxnet attack on Iran centrifuges
• Energy blackouts in Ukraine
58AI in der cyber security
• new target:
adversarial attacks
• offers new tools for defense/offensive:
• automatic threat detection
• automatic control unit testing
59Cybersecurity for CarIT
• Attack surface increases with
▪ OTA
▪ AI methods being vulnerable to adversarial attacks
• Ransom attacks increasingly more
▪ numerous
▪ lucrative
▪ sophisticated (Advanced Persistent Threats, Advanced Persistent Teenagers)
60call by value
Beim funktionsaufruf wird eine Kopie der Variable der funktion übergeben.
Es wird nur der Wert der Kopie geändert und nicht der original variablen.
bsp:
.
funktion(variable);
.
61Call-by-Reference
direkter Zugriff auf den Wert der Variable.
Keine Kopie.
.
funktion(&variable);
.
62adresse vom pointer
std::cout<<&pointer<<std::endl;
63wert der adresse auf welcher der pointer zeigt
int *pointer=null_ptr;
std::cout<<*pointer<<std::endl;
//dereferenzieren genannt
64adresse auf welche der pointer zeigt
int *pointer=null_ptr;
std::cout<<pointer<<std::endl;
65nächsten wert ab einer adresse mithilfe eines pointer auslesen
int n{ 1000 };
int* ptr = &n;
std::cout << *(ptr + 1)<<std::endl;
66random number generator mit mt19937
#include <random>
#include <ctime>
int main(int argc, char **argv)
{
std::mt19937 zufallszahlgenerator(time(nullptr));
std::cout<<zufallszahlgenerator();
return 0;
}
67Image occlusion: name the hidden labels
68Image occlusion: name the hidden labels
69Image occlusion: name the hidden labels
70Image occlusion: name the hidden labels
71Image occlusion: name the hidden labels
72Image occlusion: name the hidden labels
73Image occlusion: name the hidden labels
74Image occlusion: name the hidden labels
75Image occlusion: name the hidden labels
76Image occlusion: name the hidden labels
77Image occlusion: name the hidden labels
78Image occlusion: name the hidden labels
79Image occlusion: name the hidden labels
80Image occlusion: name the hidden labels
81Image occlusion: name the hidden labels
82Image occlusion: name the hidden labels
83Image occlusion: name the hidden labels
84Image occlusion: name the hidden labels
85Image occlusion: name the hidden labels
86Image occlusion: name the hidden labels