\documentclass[10pt]{beamer}
\setbeamercovered{transparent}
\usetheme{Antibes}
\usecolortheme{beaver}
\usepackage[utf8]{inputenc}
\usepackage[svgpath=images/]{svg}
\usepackage{graphicx}
\graphicspath{ {images/} }
\usepackage[hyphenbreaks]{breakurl}
\usepackage{hyperref}
\hypersetup{breaklinks=true}
\usepackage{subcaption}
\usepackage{makecell}
\usepackage{dirtytalk}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{listingsutf8}
\usepackage[italian]{babel}

% Todo red marker
\usepackage{xcolor}
\newcommand{\todo}[1]{}
\renewcommand{\todo}[1]{{\color{red} TODO: {#1}}}

% Stuff for presentation
\usepackage{pgfpages}
\setbeameroption{hide notes} % Only slides
%\setbeameroption{show only notes} % Only notes
%\setbeameroption{show notes}
%\setbeameroption{show notes on second screen=right} % Both

% Give a slight yellow tint to the notes page
%\setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote}\usepackage{palatino}

% Remove beamer navigation stuff
%\setbeamertemplate{navigation symbols}{}

\beamertemplatenavigationsymbolsempty

%\setbeamerfont{page number in head/foot}{size=\small}
%\setbeamertemplate{page number in head/foot}[framenumber]
%\setbeamertemplate{page number in head/foot}[totalframenumber]
\setbeamertemplate{footline}[frame number]

% Listings packages
\usepackage{verbatim}
\usepackage{inconsolata}
\usepackage{listings}
\usepackage{multicol}
\usepackage{lscape}
\newcommand{\optcolor}[1]{\color{#1}}
\lstset{
  basicstyle={\ttfamily\footnotesize},
  keywordstyle=\optcolor{blue},
  stringstyle=\optcolor{red},
  %commentstyle=\optcolor{green},
  morecomment=[l][\optcolor{magenta}]{\#},
  escapechar={|},
}

\definecolor{alt}{gray}{0.9}
\definecolor{darkgreen}{rgb}{0,0.65,0}
\lstdefinelanguage{llvm}{
  basicstyle={\ttfamily\footnotesize},
  morecomment = [l]{;},
  commentstyle=\optcolor{darkgreen},
  morestring=[b]",
  sensitive = true,
  classoffset=0,
  alsoletter=:\%.,
  keywordstyle=\optcolor{teal},
  keywordsprefix={\%},
  morekeywords={\@a},
  %keywordstyle=\optcolor{darkgray},
  classoffset=1,
  keywordstyle=\optcolor{blue},
  morekeywords={
    define, declare, global, constant,
    internal, external, private,
    linkonce, linkonce_odr, weak, weak_odr, appending,
    common, extern_weak,
    thread_local, dllimport, dllexport,
    hidden, protected, default,
    except, deplibs,
    volatile, fastcc, coldcc, cc, ccc,
    x86_stdcallcc, x86_fastcallcc,
    ptx_kernel, ptx_device,
    signext, zeroext, inreg, sret, nounwind, noreturn,
    nocapture, byval, nest, readnone, readonly, noalias, uwtable,
    inlinehint, noinline, alwaysinline, optsize, ssp, sspreq,
    noredzone, noimplicitfloat, naked, alignstack,
    module, asm, align, tail, to,
    addrspace, section, alias, sideeffect, c, gc,
    target, datalayout, triple,
    blockaddress
  },
  classoffset=2,keywordstyle=\optcolor{blue},
  morekeywords={
    fadd, sub, fsub, mul, fmul, add,
    sdiv, udiv, fdiv, srem, urem, frem,
    and, or, xor,
    icmp, fcmp,
    eq, ne, ugt, uge, ult, ule, sgt, sge, slt, sle,
    oeq, ogt, oge, olt, ole, ord, ueq, ugt, uge,
    ult, ule, une, uno,
    nuw, nsw, exact, inbounds,
    phi, call, select, shl, lshr, ashr, va_arg,
    trunc, zext, sext,
    fptrunc, fpext, fptoui, fptosi, uitofp, sitofp,
    ptrtoint, inttoptr, bitcast,
    ret, br, indirectbr, switch, invoke, unwind, unreachable,
    malloc, alloca, free, load, store, getelementptr,
    extractelement, insertelement, shufflevector,
    extractvalue, insertvalue,
  },
  classoffset=3,
  keywordstyle=\optcolor{purple},
  morekeywords={
    @v0, @a0, @t0, @ra, @pc, @r1, @ZF, @rax,@rsp
    @main,@function,@root,@function_call
  },
  classoffset=4,keywordstyle=\optcolor{blue},
  morekeywords={
i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18,
i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, i32, i33, i34,
i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50,
i51, i52, i53, i54, i55, i56, i57, i58, i59, i60, i61, i62, i63, i64, i80, i512,
void, half, float, double, fp128, x86_fp80, ppc_fp128, x86_mmx, label, metadata
  },
  classoffset=5,keywordstyle=\optcolor{teal},
  morekeywords={
    entry:,true:,epilogue:,bb.main:,bb._init.0x8,
    dispatcher:,bb.one:,bb.two:,fallthrough:,call:,BB1:,BB2:,BB3:
  }
}

% Packages for graphs
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes.multipart}
\usetikzlibrary{positioning}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{fit}
\usetikzlibrary{calc}
\usetikzlibrary{matrix}
\usetikzlibrary{patterns}
\usetikzlibrary{quotes}
\usetikzlibrary{shapes.misc}
\tikzset{
  diagonal fill/.style 2 args={fill=#2, path picture={
    \fill[#1, sharp corners] (path picture bounding box.south west) -|
                             (path picture bounding box.north east) -- cycle;}},
  reversed diagonal fill/.style 2 args={fill=#2, path picture={
    \fill[#1, sharp corners] (path picture bounding box.north west) |-
                             (path picture bounding box.south east) -- cycle;}}
                                                  }
\tikzset{
  fadered/.style={
    very thick,
    draw=red!50!black!50,
    top color=white,
    rounded corners=.5mm,
    bottom color=red!50!black!20, % and something else at the bottom
    font=\sf,
    text=black
  },
  faderedprime/.style={
    very thick,
    draw=blue!50!black!50,
    top color=white,
    rounded corners=.5mm,
    bottom color=blue!50!black!20, % and something else at the bottom
    font=\sf,
    text=black
  },
  nonterminal/.style={
    fadegray,
    rectangle,
    minimum size=6mm,
    minimum width=20mm,
    minimum height=7mm,
    rounded corners=3mm
  },
  fadegray/.style={
    text=black,
    very thick,draw=black!50,
    top color=white,
    bottom color=black!20,
    font=\sf
  },
  terminal/.style={
    rectangle,
    fadered,
    minimum height=7mm,
    minimum width=20mm,
    rounded corners=3mm,
  },
  terminalprime/.style={
    rectangle,
    faderedprime,
    minimum height=7mm,
    minimum width=20mm,
    rounded corners=3mm,
  }
}

% Visibility on slides
%\usetikzlibrary{backgrounds}
%\usetikzlibrary{arrows.meta,calc,shapes.callouts,shadows.blur,positioning}
%% Conditional elements in TikZ drawings
\tikzset{
  invisible/.style={opacity=0,text opacity=0},
  visible on/.style={alt=#1{}{invisible}},
  alt/.code args={<#1>#2#3}{%
    \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
  },
}

\def\UrlBreaks{\do\/\do-}

% Pgfplots imports
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.13}

% use acm colors
\definecolor[named]{ACMBlue}{cmyk}{1,0.1,0,0.1}
\definecolor[named]{ACMYellow}{cmyk}{0,0.16,1,0}
\definecolor[named]{ACMOrange}{cmyk}{0,0.42,1,0.01}
\definecolor[named]{ACMRed}{cmyk}{0,0.90,0.86,0}
\definecolor[named]{ACMLightBlue}{cmyk}{0.49,0.01,0,0}
\definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19}
\definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15}
\definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21}

% metropolis colors
\definecolor{mDarkBrown}{HTML}{604c38}
\definecolor{mDarkTeal}{HTML}{23373b}
\definecolor{mLightBrown}{HTML}{EB811B}
\definecolor{mLightGreen}{HTML}{14B03D}

% Custom commands
\newcommand{\ccode}[1]{\texttt{#1}}
\usepackage{xspace}
\newcommand{\newcommandx}[2]{\newcommand{#1}{#2\xspace}}
\newcommandx{\revng}{\texttt{rev.ng}}
\newcommandx{\llvm}{\textsc{llvm}}
\newcommandx{\llvmcapi}{\textsc{llvm-c API}}
\newcommandx{\llvmir}{\textsc{llvm ir}}
\newcommandx{\qemuir}{\textsc{qemu ir}}
\newcommandx{\qemu}{\textsc{qemu}}
\newcommandx{\gcc}{\texttt{gcc}}
\newcommand{\revamb}{\texttt{revamb}}
\newcommand{\llvmcpy}{\texttt{llvmcpy}}

\usepackage[noframe]{showframe}
\usepackage{biblatex}[
  backend=biber,
  style=numeric,
]

% Python stuff
% Default fixed font does not support bold face
\DeclareFixedFont{\ttb}{T1}{txtt}{bx}{n}{10} % for bold
\DeclareFixedFont{\ttm}{T1}{txtt}{m}{n}{10}  % for normal

% Custom colors
\usepackage{color}
\definecolor{deepblue}{rgb}{0,0,0.5}
\definecolor{deepred}{rgb}{0.6,0,0}
\definecolor{deepgreen}{rgb}{0,0.5,0}

\usepackage{listings}

% Python style for highlighting
\newcommand\pythonstyle{\lstset{
    language=Python,
    basicstyle=\ttm,
    otherkeywords={self},             % Add keywords here
    keywordstyle=\ttb\color{deepblue},
    emph={MyClass,__init__},          % Custom highlighting
    emphstyle=\ttb\color{deepred},    % Custom highlighting style
    stringstyle=\color{deepgreen},
    frame=tb,                         % Any extra options here
    showstringspaces=false            %
}}

% Python environment
\lstnewenvironment{python}[1][]
{
  \pythonstyle
  \lstset{#1}
}
{}

% Python for external files
\newcommand\pythonexternal[2][]{{
    \pythonstyle
\lstinputlisting[#1]{#2}}}
\lstset{inputencoding=utf8/latin1}

% Python for inline
\newcommand\pythoninline[1]{{\pythonstyle\lstinline!#1!}}

% C environment

\definecolor{mGreen}{rgb}{0,0.6,0}
\definecolor{mGray}{rgb}{0.5,0.5,0.5}
\definecolor{mPurple}{rgb}{0.58,0,0.82}
\definecolor{backgroundColour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{CStyle}{
    backgroundcolor=\color{backgroundColour},
    commentstyle=\color{mGreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{mGray},
    stringstyle=\color{mPurple},
    basicstyle=\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2,
    language=C
}
\lstnewenvironment{C}[1][]
{
  \lstset{style=CStyle}
}
{}

%\addbibresource{bibliography.bib}

%\setbeamersize{text margin left=15pt,text margin right=15pt}

% Information to be included in the title page:
\title[]{Fondamenti di Informatica}
%\subtitle{Presentation relative to ACACES 2019}
\author{Andrea Gussoni\\andrea1.gussoni at polimi.it}
\institute{Politecnico di Milano}
\date{May 11, 2021}
%\titlegraphic{\includegraphics[width=0.60\textwidth]{logo-polimi}}

% Create section header slide
\AtBeginSection{\frame{\sectionpage}}
\begin{document}

\frame{\titlepage
       \note[item]{My name is ...}
       \note[item]{Thank the audience.}}

\begin{frame}
 \frametitle{Table of Contents}
 \tableofcontents
\end{frame}

\section{Ripasso Esercitazione Precedente}
\begin{frame}{Ripasso}
  \begin{alertblock}{}
    Problemi con esercizi della precedente esercitazione?
  \end{alertblock}
\end{frame}

\begin{comment}
\begin{frame}[fragile]{Costrutto di controllo while}
  \begin{itemize}
    \item Il costrutto di controllo \ccode{while}, permette l'esecuzione del \emph{corpo} di esso fino a quando una condizione rimane vera (potenzialmente, infinitamente, come lo fareste?).
      \begin{center}
        \begin{C}
          while (condizione) {
            corpo_del_ciclo;
          }
        \end{C}
      \end{center}
    \item Esempio:
        \begin{C}
          a = 10;
          while (a > 5) {
            b = b + c;
            a = a - b;
          }
          c = c + 1;
        \end{C}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Costrutto di controllo do while}
  \begin{itemize}
    \item Il costrutto di controllo \ccode{do while}, permette l'esecuzione del \emph{corpo} di esso fino a quando una condizione rimane vera, ma garantendo l'esecuzione di almeno la prima iterazione (la condizione è controllata \emph{dopo} il corpo del ciclo .
      \begin{center}
        \begin{C}
          do {
            corpo_del_ciclo;
          } while (condizione);
        \end{C}
      \end{center}
    \item Esempio:
        \begin{C}
          a = 10;
          do {
            b = b + c;
            a = a - b;
          } while (a > 5)
          c = c + 1;
        \end{C}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Costrutto di controllo for}
  \begin{itemize}
    \item Il costrutto di controllo \ccode{for} serve per costruire un ciclo, ma con delle comode aggiunte per gestire il numero di iterazioni.
      \begin{center}
        \begin{C}
          for (inizializzazione; condizione; incremento) {
            corpo_ciclo;
          }
        \end{C}
      \end{center}
    \item Esempio:
        \begin{C}
          a = 5;
          for (i = 0; i < 10; i++) {
            b = b + a;
          }
          b = b;
        \end{C}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{break e continue}
  Sono inoltre disponibili due parole chiave che possono aiutare ulteriormente nella gestione delle iterazioni di un ciclo:
  \begin{description}
    \item [\ccode{break}]: interrompe immediatamente l'esecuzione del ciclo, ignorando la condizione e eventuali statement successivi del ciclo.
    \item [\ccode{continue}]: passa alla successiva iterazione del ciclo, ignorando eventuali statement successivi nel corpo del ciclo. La condizione dell'iterazione successa viene comunque valutata, e in caso di ciclo \ccode{for} l'operazione di incremento viene comunque effettuata.
  \end{description}
\end{frame}

\begin{frame}[fragile]{Costrutto di controllo switch}
  \begin{itemize}
    \item Il costrutto di controllo \ccode{switch} permette di eseguire differenti porzione di codice in base al valore di una variabile. Spesso può venire usato per ristrutturare catene di \ccode{if else if} in una composizione più elegante.
      \begin{center}
        \begin{C}
          switch (variabile) {
            case 1:
              codice_1;
              break;
            case 2:
              codice_2;
              break;
            default:
              codice_default;
              break;
          }
        \end{C}
      \end{center}
    \item la keyword \ccode{break} consente di non fare \emph{fallthrough}, che significa continuare con l'esecuzione del codice senza saltare alla fine dello scope dello \ccode{switch}.
  \end{itemize}
\end{frame}

\end{comment}

\begin{frame}[fragile]{Calcolo Esponenziale}
  \begin{itemize}
    \item Implementare il calcolo dell'esponenziale $e^x$ tramite l'uso della serie di Maclaurin
    \item $e^{x} = f(0)\frac{x^{0}}{0!} + f'(0)\frac{x^{1}}{1!} + f''(0)\frac{x^{2}}{2!}  + ...$
    \item $e^{x} = \frac{x^{0}}{0!} + \frac{x^{1}}{1!} + \frac{x^{2}}{2!} + ...$
    \item Fare uso estensivo dei sottoprogrammi.
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Vettore al Quadrato}
  \begin{itemize}
    \item Implementare un sottoprogramma che, preso in input in vettore di interi, rimpiazzi ogni intero originalmente conenuto con il suo quadrato.
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Libreria Stringhe}
  \begin{itemize}
    \item Implementare, utilizzando i puntatori, le seguenti funzioni di libreria per la manipolazione di stringhe:
    \item \ccode{strlen(char *stringa);}
    \item \ccode{strcpy(char *str\_dst, char *str\_src);}
    \item \ccode{strcat(char *str\_dst, char *str\_src);}
    \item \ccode{strcmp(char *stringa1, char *stringa2);}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Anagrammi}
  \begin{itemize}
    \item Implementare, utilizzando i puntatori, un sottoprogramma C che controlla se due stringhe date in input sono anagrammi.
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Parole Hertziane}
  \begin{itemize}
    \item Due parole \emph{a} e \emph{b} sono \emph{Hertziane} se entrambe sono leggibili anche oscillando durante la lettura dei caratteri tra di esse. Ad esempio, le parole \emph{tigre} e \emph{fiera}, possono entrambe essere lette partendo dal primo carattere di ciascuna, e oscillando poi sui caratteri dell'altra.
    \item Nella situazione descritta sopra, parliamo di parole direttamente \emph{Hertziane}, ma possiamo anche avere parole inversamente \emph{Hertziane}, dove la lettura comincia dalla prima lettera della parola opposta. \emph{Fiera} e \emph{Fresa} sono esempi di parole inversamente \emph{Hertziane}.
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Gara di Tuffi}
  \begin{itemize}
    \item Nello sport dei tuffi individuali, ogni tuffo viene valutato da cinque giudici diversi.
    \item Ogni giudice esprime un punteggio individuale da 0 a 10, con la possibilità di esprimere anche mezzi punti.  Il punteggio 0 corrisponde a un tuffo completamente sbagliato; il punteggio 10 a un tuffo perfetto.
    \item Per eliminare eventuali preferenze soggettive, il punteggio più alto e quello più basso vengono scartati in automatico. Ogni punteggio è espresso indipendentemente dal grado di difficoltà del tuffo (un valore numerico che va da 1.3 a 3.6) e il punteggio finale attribuito all’atleta è calcolato come prodotto della somma dei tre punteggi rimanenti per il grado di difficoltà del tuffo .
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Gara di Tuffi}
  \begin{itemize}
    \item Data la macro NUM\_GIUDICI e la definizione di tipo punteggi\_tuffo
      \begin{lstlisting}[language=C]
      #define NUM_GIUDICI 5
      typedef float punteggi_tuffo[NUM_GIUDICI];
			\end{lstlisting}
    \item scrivere in C la funzione:
      \begin{lstlisting}[language=C]
      float calcola_punteggio(punteggi_tuffo voti, floatdiff)
		\end{lstlisting}

      che calcola il punteggio finale di un tuffo a partire dai punteggi individuali espressi dai giudici (voti) e dal grado di difficoltà del tuffo (diff).
  \end{itemize}
\end{frame}

\begin{frame}[fragile]{Gara di Tuffi}
  \begin{itemize}
    \item  A una gara di tuffi partecipa un certo numero di atleti, indicato con la costante \ccode{NUM\_ATLETI}.
    \item Si considerino le seguenti definizioni:
      \begin{lstlisting}[language=C]
#define NUM_ATLETI 6
#define MAX_STRING 30
typedef struct {
		char nome[MAX_STRING];
		char cognome[MAX_STRING];
		char sesso;
		char nazionalita[MAX_STRING];
		float punteggio_finale;
} atleta;
typedef atleta gara[NUM_ATLETI];
\end{lstlisting}
  \end{itemize}
\end{frame}
\begin{frame}[fragile]{Gara di Tuffi}
  \begin{itemize}
		\item Il tipo di dato atleta definisce le proprietà di ciascun partecipante alla gara. L’attributo sesso del tipo di dato atleta distingue uomini ('m') e donne ('f'), mentre l’attributo punteggio\_finale è da intendersi come il punteggio complessivo ottenuto da un atleta durante tutta la manifestazione.
Il tipo di dato gara definisce una array in cui le celle rappresentano gli atleti.
		\item Scrivere in C la funzione:
      \begin{lstlisting}[language=C]
void stampa_migliori(gara G)
			\end{lstlisting}
			che stampa a schermo la migliore donna e il miglior uomo della competizione.
  \end{itemize}
\end{frame}

\begin{comment}
\section{Extra}
\begin{frame}[fragile]{Monte Carlo}
  Scrivere un programma che calcoli il valore di $\pi$, utilizzando il metodo di Monte Carlo.
\end{frame}
\end{comment}

\begin{comment}
\begin{frame}[t,allowframebreaks]
  \frametitle{References}
  \nocite{*}
  \printbibliography
\end{frame}
\end{comment}

\begin{comment}
\begin{frame}
  \frametitle{License}
  \begin{center}
    \vfill
    \includesvg[height=1.5cm]{by-sa}\\
    {\footnotesize These slides are published under a Creative Commons Attribution-ShareAlike 4.0 license\footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}.}
  \end{center}
\end{frame}
\end{comment}

\end{document}
