\documentclass[usenames,dvipsnames]{beamer}
%----------------------------------------------------------------------------------------
%	Struktur und Pointer Referat
%   20.04.2020
%----------------------------------------------------------------------------------------
\usetheme{focus}

\usepackage[utf8]{inputenc}

\usepackage{booktabs}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{xcolor}

% Farbdefinitionen
\definecolor{backgroundcoloreq}{RGB}{180,140,0}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{codeorange}{RGB}{190,100,0}


\lstset{
    language=C,
    basicstyle=\ttfamily,
    numbers=left,
    numberstyle=\tiny,
    tabsize=4,
    columns=fixed,
    showstringspaces=false,
    showtabs=false,
    breaklines=true,
    keepspaces,
    morekeywords={std},
    keywordstyle=\color{blue}\ttfamily,
    stringstyle=\color{red}\ttfamily,
    commentstyle=\color{OliveGreen!85}\ttfamily,
    numberstyle=\tiny\color{codegray},
    basicstyle=\footnotesize\selectfont\ttfamily,
% keyword highlighting
    classoffset=1, % starting new class
    otherkeywords={>,<,.,;,-,+,!,=,~,:,[,],NULL,&},
    morekeywords={>,<,.,;,-,+,!,=,~,:,[,],NULL,&},
    keywordstyle=\color{codeorange},
    classoffset=0
}

%----------------------------------------------------------------------------------------
%	 TITLE SLIDE
%----------------------------------------------------------------------------------------

\title{Cross-Model Pseudo-Labeling}

\subtitle{for Semi-Supervised Action Recognition}

\author{Lukas Heiligenbrunner}

\date{\today}

%------------------------------------------------

\begin{document}

%------------------------------------------------

    \begin{frame}
        \maketitle
    \end{frame}

%----------------------------------------------------------------------------------------
%	 SECTION 2
%----------------------------------------------------------------------------------------


    \section{The Problem} % Section title slide, unnumbered

%------------------------------------------------

    \begin{frame}{Missing Labels}
        \begin{itemize}
            \item Labeling Samples very expensive
            \item Pointer zeigt wo das Objekt zu finden ist.
            \item nicht alle Pointer enthalten Adresse
            \begin{itemize}
                \item NULL-Pointer
            \end{itemize}
            \item Operator *
            \begin{itemize}
                \item definiert einen Pointer
                \item Wert eines Pointers
            \end{itemize}
            \item Operator \&
            \begin{itemize}
                \item Adresse einer Variable
            \end{itemize}
        \end{itemize}
    \end{frame}

%------------------------------------------------

    \begin{frame}[fragile]{Pointer Syntax}
        \begin{lstlisting}
#include <stdio.h>
int main()
{
   // Variable definieren
   int num = 10;

   // Pointer definieren
   int *p;

   // Adresse von num --> p zuweisen
   p = &num;

   printf("Num: %d", *p);
   return 0;
}
        \end{lstlisting}
    \end{frame}

%------------------------------------------------

    \begin{frame}{Pointer in Java}
        \begin{itemize}
            \item Alle Objekte automatisch Pointer
            \item Primitives (int, float, double) keine Pointer
        \end{itemize}
    \end{frame}

%----------------------------------------------------------------------------------------
%	 SECTION 2
%----------------------------------------------------------------------------------------


    \section{Strukturen} % Section title slide, unnumbered

%------------------------------------------------

    \begin{frame}{Strukturen Allgemein}
        \begin{itemize}
            \item kategorisieren von Variablen
            \begin{itemize}
                \item Variablen \textit{(int, char, double, float)}
                \item Pointer
                \item Arrays
            \end{itemize}
            \item Keyword \textit{struct}
            \item verbessert Übersicht
            \item Schritt Richtung Objektorientierung
            \item ideal für Listen und Baumstruktur
        \end{itemize}
    \end{frame}

%------------------------------------------------

    \begin{frame}[fragile, allowframebreaks]{C Syntax}
        Definition:
        \begin{lstlisting}
struct Adresse {
    char name[50];
	int *nummer;
	short hausnummer;
	long plz;
};\end{lstlisting}
        Anwendung:
        \begin{lstlisting}
// Variable der Struktur erstellen
struct Adresse adresseKurt;
// Zugriff auf die Elemente
strcpy(adresseKurt.name, "Kurt Kanns");
adresseKurt.hausnummer = 23;
int nr = 4;
adresseKurt.nummer = &nr;
adresseKurt.plz = 45678;\end{lstlisting}

        \framebreak

        Typdefinition mit typedef:
        \begin{lstlisting}
struct Adresse {
    char name[50];
	short hausnummer;
};
typedef struct Adresse Adr;

Adr a1,a2; // Datentyp Adr
        \end{lstlisting}

        Kombination:
        \begin{lstlisting}
typedef struct Adresse {
    char name[50];
	short hausnummer;
} Adr;

Adr a1,a2; // Datentyp Adr
        \end{lstlisting}
    \end{frame}

    \begin{frame}{Sonstiges}
        \begin{itemize}
            \item Strukturtypdeklaration: struct Adresse \{…\};
            \item Zugriff auf einzelne Komponenten durch\\
            Punktnotation: (Adresse1.Vorname = “Peter“);
            \item Pfeilnotation (->) wenn struct Pointer
            \item Gesamtlänge der Struktur: sizeof(<Struktur>)
            \item Weiteres hinzufügen von Komponenten während der Laufzeit nicht möglich.
        \end{itemize}
    \end{frame}

%------------------------------------------------

    \begin{frame}[fragile]{Strukturen als Funktionsargument}
        Ohne Typedef:
        \begin{lstlisting}
void testfunc(struct Adresse a){
    long plz = a.plz;
}
        \end{lstlisting}
        Mit Typedef:
        \begin{lstlisting}
void testfunc(Adr a){
    long plz = a.plz;
}
        \end{lstlisting}
    \end{frame}

%------------------------------------------------

    \begin{frame}[fragile]{Strukturen in Java}
        \begin{itemize}
            \item existieren nicht
            \item stattdessen Klassen
        \end{itemize}
        \begin{lstlisting}[language=java]
public class Adresse
{
    String name;
	String strasse;
	short hausnummer;
	long plz;
	String stadt;
}
        \end{lstlisting}
    \end{frame}

%----------------------------------------------------------------------------------------
%	 SECTION 3
%----------------------------------------------------------------------------------------


    \section{Anwendung} % Section title slide, unnumbered

%------------------------------------------------

    \begin{frame}[fragile]{Struktur als Pointer}
        \begin{lstlisting}
struct mystruct {
    int data;
};
typedef struct MyStruct MyStruct;

void beispiel(MyStruct * str) {
    int d = str->data;
    int dd = (*str).data; // equivalent
}

int main(){
    MyStruct struc;
    struc.data = 5;
    beispiel(&struc);

    return 0;
}
        \end{lstlisting}
    \end{frame}

%------------------------------------------------

    \begin{frame}[fragile]{Verkettete Listen}
        \begin{lstlisting}
struct node {
   int data;
   struct node* next; /* Typ Node hier nicht moeglich
   da erst spaeter definiert */
};
typedef struct node Node;

void beispiel() {
   // Erstellen von root
   Node *root = malloc(sizeof(Node));

   root->data = 17;

   // Anhaengen eines Knotens
   Node *secondNode = malloc(sizeof(Node));
   root->next = secondNode;
   secondNode->data = 19;
}
        \end{lstlisting}
    \end{frame}

%------------------------------------------------

    \begin{frame}[focus]
        Danke für eure Aufmerksamkeit!
    \end{frame}

%----------------------------------------------------------------------------------------
%	 CLOSING/SUPPLEMENTARY SLIDES
%----------------------------------------------------------------------------------------

    \appendix

    \begin{frame}{Quellen}
        \nocite{*} % Display all references regardless of if they were cited
        \bibliography{sources}
        \bibliographystyle{plain}
    \end{frame}

\end{document}
