fondamenti-05.tex 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. \documentclass[10pt]{beamer}
  2. \setbeamercovered{transparent}
  3. \usetheme{Antibes}
  4. \usecolortheme{beaver}
  5. \usepackage[utf8]{inputenc}
  6. \usepackage[svgpath=images/]{svg}
  7. \usepackage{graphicx}
  8. \graphicspath{ {images/} }
  9. \usepackage[hyphenbreaks]{breakurl}
  10. \usepackage{hyperref}
  11. \hypersetup{breaklinks=true}
  12. \usepackage{subcaption}
  13. \usepackage{makecell}
  14. \usepackage{dirtytalk}
  15. \usepackage{amsmath}
  16. \usepackage{mathtools}
  17. \usepackage{listingsutf8}
  18. \usepackage[italian]{babel}
  19. % Todo red marker
  20. \usepackage{xcolor}
  21. \newcommand{\todo}[1]{}
  22. \renewcommand{\todo}[1]{{\color{red} TODO: {#1}}}
  23. % Stuff for presentation
  24. \usepackage{pgfpages}
  25. \setbeameroption{hide notes} % Only slides
  26. %\setbeameroption{show only notes} % Only notes
  27. %\setbeameroption{show notes}
  28. %\setbeameroption{show notes on second screen=right} % Both
  29. % Give a slight yellow tint to the notes page
  30. %\setbeamertemplate{note page}{\pagecolor{yellow!5}\insertnote}\usepackage{palatino}
  31. % Remove beamer navigation stuff
  32. %\setbeamertemplate{navigation symbols}{}
  33. \beamertemplatenavigationsymbolsempty
  34. %\setbeamerfont{page number in head/foot}{size=\small}
  35. %\setbeamertemplate{page number in head/foot}[framenumber]
  36. %\setbeamertemplate{page number in head/foot}[totalframenumber]
  37. \setbeamertemplate{footline}[frame number]
  38. % Listings packages
  39. \usepackage{verbatim}
  40. \usepackage{inconsolata}
  41. \usepackage{listings}
  42. \usepackage{multicol}
  43. \usepackage{lscape}
  44. \newcommand{\optcolor}[1]{\color{#1}}
  45. \lstset{
  46. basicstyle={\ttfamily\footnotesize},
  47. keywordstyle=\optcolor{blue},
  48. stringstyle=\optcolor{red},
  49. %commentstyle=\optcolor{green},
  50. morecomment=[l][\optcolor{magenta}]{\#},
  51. escapechar={|},
  52. }
  53. \definecolor{alt}{gray}{0.9}
  54. \definecolor{darkgreen}{rgb}{0,0.65,0}
  55. \lstdefinelanguage{llvm}{
  56. basicstyle={\ttfamily\footnotesize},
  57. morecomment = [l]{;},
  58. commentstyle=\optcolor{darkgreen},
  59. morestring=[b]",
  60. sensitive = true,
  61. classoffset=0,
  62. alsoletter=:\%.,
  63. keywordstyle=\optcolor{teal},
  64. keywordsprefix={\%},
  65. morekeywords={\@a},
  66. %keywordstyle=\optcolor{darkgray},
  67. classoffset=1,
  68. keywordstyle=\optcolor{blue},
  69. morekeywords={
  70. define, declare, global, constant,
  71. internal, external, private,
  72. linkonce, linkonce_odr, weak, weak_odr, appending,
  73. common, extern_weak,
  74. thread_local, dllimport, dllexport,
  75. hidden, protected, default,
  76. except, deplibs,
  77. volatile, fastcc, coldcc, cc, ccc,
  78. x86_stdcallcc, x86_fastcallcc,
  79. ptx_kernel, ptx_device,
  80. signext, zeroext, inreg, sret, nounwind, noreturn,
  81. nocapture, byval, nest, readnone, readonly, noalias, uwtable,
  82. inlinehint, noinline, alwaysinline, optsize, ssp, sspreq,
  83. noredzone, noimplicitfloat, naked, alignstack,
  84. module, asm, align, tail, to,
  85. addrspace, section, alias, sideeffect, c, gc,
  86. target, datalayout, triple,
  87. blockaddress
  88. },
  89. classoffset=2,keywordstyle=\optcolor{blue},
  90. morekeywords={
  91. fadd, sub, fsub, mul, fmul, add,
  92. sdiv, udiv, fdiv, srem, urem, frem,
  93. and, or, xor,
  94. icmp, fcmp,
  95. eq, ne, ugt, uge, ult, ule, sgt, sge, slt, sle,
  96. oeq, ogt, oge, olt, ole, ord, ueq, ugt, uge,
  97. ult, ule, une, uno,
  98. nuw, nsw, exact, inbounds,
  99. phi, call, select, shl, lshr, ashr, va_arg,
  100. trunc, zext, sext,
  101. fptrunc, fpext, fptoui, fptosi, uitofp, sitofp,
  102. ptrtoint, inttoptr, bitcast,
  103. ret, br, indirectbr, switch, invoke, unwind, unreachable,
  104. malloc, alloca, free, load, store, getelementptr,
  105. extractelement, insertelement, shufflevector,
  106. extractvalue, insertvalue,
  107. },
  108. classoffset=3,
  109. keywordstyle=\optcolor{purple},
  110. morekeywords={
  111. @v0, @a0, @t0, @ra, @pc, @r1, @ZF, @rax,@rsp
  112. @main,@function,@root,@function_call
  113. },
  114. classoffset=4,keywordstyle=\optcolor{blue},
  115. morekeywords={
  116. i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18,
  117. i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, i32, i33, i34,
  118. i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50,
  119. i51, i52, i53, i54, i55, i56, i57, i58, i59, i60, i61, i62, i63, i64, i80, i512,
  120. void, half, float, double, fp128, x86_fp80, ppc_fp128, x86_mmx, label, metadata
  121. },
  122. classoffset=5,keywordstyle=\optcolor{teal},
  123. morekeywords={
  124. entry:,true:,epilogue:,bb.main:,bb._init.0x8,
  125. dispatcher:,bb.one:,bb.two:,fallthrough:,call:,BB1:,BB2:,BB3:
  126. }
  127. }
  128. % Packages for graphs
  129. \usepackage{tikz}
  130. \usetikzlibrary{arrows,automata}
  131. \usetikzlibrary{shapes.geometric}
  132. \usetikzlibrary{positioning}
  133. \usetikzlibrary{shapes.multipart}
  134. \usetikzlibrary{positioning}
  135. \usetikzlibrary{decorations.pathreplacing}
  136. \usetikzlibrary{fit}
  137. \usetikzlibrary{calc}
  138. \usetikzlibrary{matrix}
  139. \usetikzlibrary{patterns}
  140. \usetikzlibrary{quotes}
  141. \usetikzlibrary{shapes.misc}
  142. \tikzset{
  143. diagonal fill/.style 2 args={fill=#2, path picture={
  144. \fill[#1, sharp corners] (path picture bounding box.south west) -|
  145. (path picture bounding box.north east) -- cycle;}},
  146. reversed diagonal fill/.style 2 args={fill=#2, path picture={
  147. \fill[#1, sharp corners] (path picture bounding box.north west) |-
  148. (path picture bounding box.south east) -- cycle;}}
  149. }
  150. \tikzset{
  151. fadered/.style={
  152. very thick,
  153. draw=red!50!black!50,
  154. top color=white,
  155. rounded corners=.5mm,
  156. bottom color=red!50!black!20, % and something else at the bottom
  157. font=\sf,
  158. text=black
  159. },
  160. faderedprime/.style={
  161. very thick,
  162. draw=blue!50!black!50,
  163. top color=white,
  164. rounded corners=.5mm,
  165. bottom color=blue!50!black!20, % and something else at the bottom
  166. font=\sf,
  167. text=black
  168. },
  169. nonterminal/.style={
  170. fadegray,
  171. rectangle,
  172. minimum size=6mm,
  173. minimum width=20mm,
  174. minimum height=7mm,
  175. rounded corners=3mm
  176. },
  177. fadegray/.style={
  178. text=black,
  179. very thick,draw=black!50,
  180. top color=white,
  181. bottom color=black!20,
  182. font=\sf
  183. },
  184. terminal/.style={
  185. rectangle,
  186. fadered,
  187. minimum height=7mm,
  188. minimum width=20mm,
  189. rounded corners=3mm,
  190. },
  191. terminalprime/.style={
  192. rectangle,
  193. faderedprime,
  194. minimum height=7mm,
  195. minimum width=20mm,
  196. rounded corners=3mm,
  197. }
  198. }
  199. % Visibility on slides
  200. %\usetikzlibrary{backgrounds}
  201. %\usetikzlibrary{arrows.meta,calc,shapes.callouts,shadows.blur,positioning}
  202. %% Conditional elements in TikZ drawings
  203. \tikzset{
  204. invisible/.style={opacity=0,text opacity=0},
  205. visible on/.style={alt=#1{}{invisible}},
  206. alt/.code args={<#1>#2#3}{%
  207. \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
  208. },
  209. }
  210. \def\UrlBreaks{\do\/\do-}
  211. % Pgfplots imports
  212. \usepackage{pgfplots}
  213. \usepackage{pgfplotstable}
  214. \pgfplotsset{compat=1.13}
  215. % use acm colors
  216. \definecolor[named]{ACMBlue}{cmyk}{1,0.1,0,0.1}
  217. \definecolor[named]{ACMYellow}{cmyk}{0,0.16,1,0}
  218. \definecolor[named]{ACMOrange}{cmyk}{0,0.42,1,0.01}
  219. \definecolor[named]{ACMRed}{cmyk}{0,0.90,0.86,0}
  220. \definecolor[named]{ACMLightBlue}{cmyk}{0.49,0.01,0,0}
  221. \definecolor[named]{ACMGreen}{cmyk}{0.20,0,1,0.19}
  222. \definecolor[named]{ACMPurple}{cmyk}{0.55,1,0,0.15}
  223. \definecolor[named]{ACMDarkBlue}{cmyk}{1,0.58,0,0.21}
  224. % metropolis colors
  225. \definecolor{mDarkBrown}{HTML}{604c38}
  226. \definecolor{mDarkTeal}{HTML}{23373b}
  227. \definecolor{mLightBrown}{HTML}{EB811B}
  228. \definecolor{mLightGreen}{HTML}{14B03D}
  229. % Custom commands
  230. \newcommand{\ccode}[1]{\texttt{#1}}
  231. \usepackage{xspace}
  232. \newcommand{\newcommandx}[2]{\newcommand{#1}{#2\xspace}}
  233. \newcommandx{\revng}{\texttt{rev.ng}}
  234. \newcommandx{\llvm}{\textsc{llvm}}
  235. \newcommandx{\llvmcapi}{\textsc{llvm-c API}}
  236. \newcommandx{\llvmir}{\textsc{llvm ir}}
  237. \newcommandx{\qemuir}{\textsc{qemu ir}}
  238. \newcommandx{\qemu}{\textsc{qemu}}
  239. \newcommandx{\gcc}{\texttt{gcc}}
  240. \newcommand{\revamb}{\texttt{revamb}}
  241. \newcommand{\llvmcpy}{\texttt{llvmcpy}}
  242. \usepackage[noframe]{showframe}
  243. \usepackage{biblatex}[
  244. backend=biber,
  245. style=numeric,
  246. ]
  247. % Python stuff
  248. % Default fixed font does not support bold face
  249. \DeclareFixedFont{\ttb}{T1}{txtt}{bx}{n}{10} % for bold
  250. \DeclareFixedFont{\ttm}{T1}{txtt}{m}{n}{10} % for normal
  251. % Custom colors
  252. \usepackage{color}
  253. \definecolor{deepblue}{rgb}{0,0,0.5}
  254. \definecolor{deepred}{rgb}{0.6,0,0}
  255. \definecolor{deepgreen}{rgb}{0,0.5,0}
  256. \usepackage{listings}
  257. % Python style for highlighting
  258. \newcommand\pythonstyle{\lstset{
  259. language=Python,
  260. basicstyle=\ttm,
  261. otherkeywords={self}, % Add keywords here
  262. keywordstyle=\ttb\color{deepblue},
  263. emph={MyClass,__init__}, % Custom highlighting
  264. emphstyle=\ttb\color{deepred}, % Custom highlighting style
  265. stringstyle=\color{deepgreen},
  266. frame=tb, % Any extra options here
  267. showstringspaces=false %
  268. }}
  269. % Python environment
  270. \lstnewenvironment{python}[1][]
  271. {
  272. \pythonstyle
  273. \lstset{#1}
  274. }
  275. {}
  276. % Python for external files
  277. \newcommand\pythonexternal[2][]{{
  278. \pythonstyle
  279. \lstinputlisting[#1]{#2}}}
  280. \lstset{inputencoding=utf8/latin1}
  281. % Python for inline
  282. \newcommand\pythoninline[1]{{\pythonstyle\lstinline!#1!}}
  283. % C environment
  284. \definecolor{mGreen}{rgb}{0,0.6,0}
  285. \definecolor{mGray}{rgb}{0.5,0.5,0.5}
  286. \definecolor{mPurple}{rgb}{0.58,0,0.82}
  287. \definecolor{backgroundColour}{rgb}{0.95,0.95,0.92}
  288. \lstdefinestyle{CStyle}{
  289. backgroundcolor=\color{backgroundColour},
  290. commentstyle=\color{mGreen},
  291. keywordstyle=\color{magenta},
  292. numberstyle=\tiny\color{mGray},
  293. stringstyle=\color{mPurple},
  294. basicstyle=\footnotesize,
  295. breakatwhitespace=false,
  296. breaklines=true,
  297. captionpos=b,
  298. keepspaces=true,
  299. numbers=left,
  300. numbersep=5pt,
  301. showspaces=false,
  302. showstringspaces=false,
  303. showtabs=false,
  304. tabsize=2,
  305. language=C
  306. }
  307. \lstnewenvironment{C}[1][]
  308. {
  309. \lstset{style=CStyle}
  310. }
  311. {}
  312. %\addbibresource{bibliography.bib}
  313. %\setbeamersize{text margin left=15pt,text margin right=15pt}
  314. % Information to be included in the title page:
  315. \title[]{Fondamenti di Informatica}
  316. %\subtitle{Presentation relative to ACACES 2019}
  317. \author{Andrea Gussoni\\andrea1.gussoni at polimi.it}
  318. \institute{Politecnico di Milano}
  319. \date{April 27, 2021}
  320. %\titlegraphic{\includegraphics[width=0.60\textwidth]{logo-polimi}}
  321. % Create section header slide
  322. \AtBeginSection{\frame{\sectionpage}}
  323. \begin{document}
  324. \frame{\titlepage
  325. \note[item]{My name is ...}
  326. \note[item]{Thank the audience.}}
  327. \begin{frame}
  328. \frametitle{Table of Contents}
  329. \tableofcontents
  330. \end{frame}
  331. \section{Ripasso Esercitazione Precedente}
  332. \begin{frame}{Ripasso}
  333. \begin{alertblock}{}
  334. Problemi con esercizi della precedente esercitazione?
  335. \end{alertblock}
  336. \end{frame}
  337. \begin{frame}[fragile]{Costrutto di controllo while}
  338. \begin{itemize}
  339. \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?).
  340. \begin{center}
  341. \begin{C}
  342. while (condizione) {
  343. corpo_del_ciclo;
  344. }
  345. \end{C}
  346. \end{center}
  347. \item Esempio:
  348. \begin{C}
  349. a = 10;
  350. while (a > 5) {
  351. b = b + c;
  352. a = a - b;
  353. }
  354. c = c + 1;
  355. \end{C}
  356. \end{itemize}
  357. \end{frame}
  358. \begin{frame}[fragile]{Costrutto di controllo do while}
  359. \begin{itemize}
  360. \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 .
  361. \begin{center}
  362. \begin{C}
  363. do {
  364. corpo_del_ciclo;
  365. } while (condizione);
  366. \end{C}
  367. \end{center}
  368. \item Esempio:
  369. \begin{C}
  370. a = 10;
  371. do {
  372. b = b + c;
  373. a = a - b;
  374. } while (a > 5)
  375. c = c + 1;
  376. \end{C}
  377. \end{itemize}
  378. \end{frame}
  379. \begin{frame}[fragile]{Costrutto di controllo for}
  380. \begin{itemize}
  381. \item Il costrutto di controllo \ccode{for} serve per costruire un ciclo, ma con delle comode aggiunte per gestire il numero di iterazioni.
  382. \begin{center}
  383. \begin{C}
  384. for (inizializzazione; condizione; incremento) {
  385. corpo_ciclo;
  386. }
  387. \end{C}
  388. \end{center}
  389. \item Esempio:
  390. \begin{C}
  391. a = 5;
  392. for (i = 0; i < 10; i++) {
  393. b = b + a;
  394. }
  395. b = b;
  396. \end{C}
  397. \end{itemize}
  398. \end{frame}
  399. \begin{frame}[fragile]{break e continue}
  400. Sono inoltre disponibili due parole chiave che possono aiutare ulteriormente nella gestione delle iterazioni di un ciclo:
  401. \begin{description}
  402. \item [\ccode{break}]: interrompe immediatamente l'esecuzione del ciclo, ignorando la condizione e eventuali statement successivi del ciclo.
  403. \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.
  404. \end{description}
  405. \end{frame}
  406. \begin{frame}[fragile]{Costrutto di controllo switch}
  407. \begin{itemize}
  408. \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.
  409. \begin{center}
  410. \begin{C}
  411. switch (variabile) {
  412. case 1:
  413. codice_1;
  414. break;
  415. case 2:
  416. codice_2;
  417. break;
  418. default:
  419. codice_default;
  420. break;
  421. }
  422. \end{C}
  423. \end{center}
  424. \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}.
  425. \end{itemize}
  426. \end{frame}
  427. \begin{frame}[fragile]{Costrutto di controllo goto}
  428. \begin{itemize}
  429. \item Non esiste nessun costrutto con nome \ccode{goto} in C.\
  430. \pause
  431. \item Jokes aside, lo statement \ccode{goto label}, può venire usato per reindirizzare l'esecuzione del codice ad una etichetta arbitraria posizionata nel codice. Si usa in specifici contesti, per quanto ci riguarda, bisogna assolutamente preferire e utilizzare codice strutturato (codice che contiene \ccode{goto} è anche chiamato codice non strutturato).
  432. \end{itemize}
  433. \end{frame}
  434. \begin{frame}[fragile]{Parole al contrario}
  435. \begin{itemize}
  436. \item Implementare un programma C che presa in unput una frase composta da più parole, separate da spazi, ne stampi in output la versione dove per ogni parola, la stampa dei suoi caratteri è invertita.
  437. \end{itemize}
  438. \end{frame}
  439. \begin{frame}[fragile]{Ordinamento di vettori}
  440. \begin{itemize}
  441. \item Implementare un programma in linguaggio C che preso un vettore di interi, ordini i suoi elementi in ordine crescente, utilizzando la tecnica del bubblesort.
  442. \item Funzionamento del bubblesort: ogni coppia di elementi adiacenti viene comparata e invertita di posizione se sono nell'ordine sbagliato. L'algoritmo continua nuovamente a ri-eseguire questi passaggi per tutta la lista finché non vengono più eseguiti scambi, situazione che indica che la lista è ordinata.
  443. \end{itemize}
  444. \end{frame}
  445. \begin{frame}[fragile]{Ordinamento di vettori}
  446. \begin{itemize}
  447. \item Implementare un programma in linguaggio C che preso un vettore di interi, ordini i suoi elementi in ordine crescente, utilizzando la tecnica del selection sort.
  448. \item Funzionamento del selection sort: l'algoritmo procede trovando il minimo fra gli elementi nella sequenza e scambiandolo con l’elemento al primo posto. Trovando il minimo fra gli elementi tra il secondoi e l’ultimo posto, e scambiandolo con il secondo, e così via per tutti gli elementi del vettore. Il metodo si chiama per selezione perché si basa sulla ripetizione della selezione dell’elemento minore, tra quelli rimasti da ordinare.
  449. \end{itemize}
  450. \end{frame}
  451. \begin{frame}[fragile]{Tris}
  452. \begin{itemize}
  453. \item Implementare un programma C che data una matrice di caratteri 3x3 rappresentante uno stato di una partita del gioco del Tris:
  454. \begin{itemize}
  455. \item Stampa la matrice.
  456. \item Determina quale dei due giocatori ha vinto.
  457. \end{itemize}
  458. \item Nel gioco del tris, abbiamo che la posizione di ogni giocatore può essere rappresentata da una 'X' o una 'O', e un giocatore vince se riesce a completare una riga, una colonna o una diagonale.
  459. \end{itemize}
  460. \end{frame}
  461. \begin{frame}[fragile]{Dispensa}
  462. \begin{itemize}
  463. \item Implementare un programma C che acquisisca il nome e la data di scadenza di 3 prodotti presenti nella dispensa. Terminata l'acquisizione, si inserisce anche una data, e per ogni elemento nella dispensa, si deve verificare se sarà o meno scaduto in quella data.
  464. \item Per rappresentare il prodotto, si suggerisce l'uso di un tipo di dato strutturato che contenga il nome e la data di scadenza, a sua volta definita come un tipo di dato strutturato.
  465. \end{itemize}
  466. \end{frame}
  467. \begin{frame}[fragile]{Piano Cartesiano}
  468. \begin{itemize}
  469. \item Implementare un programma C che legge da tastiera un numero intero N ($1\leq N \leq 10$), e sucessivamente legge N coppie di interi positivi rappresentanti ciascuna le coordinate di un punto (x,y) su di un piano cartesiano 5X5.
  470. \item Si stampi poi il piano cartesiano rappresentando i punti con una X.
  471. \end{itemize}
  472. \end{frame}
  473. \begin{comment}
  474. \section{Extra}
  475. \begin{frame}[fragile]{Monte Carlo}
  476. Scrivere un programma che calcoli il valore di $\pi$, utilizzando il metodo di Monte Carlo.
  477. \end{frame}
  478. \end{comment}
  479. \begin{comment}
  480. \begin{frame}[t,allowframebreaks]
  481. \frametitle{References}
  482. \nocite{*}
  483. \printbibliography
  484. \end{frame}
  485. \end{comment}
  486. \begin{comment}
  487. \begin{frame}
  488. \frametitle{License}
  489. \begin{center}
  490. \vfill
  491. \includesvg[height=1.5cm]{by-sa}\\
  492. {\footnotesize These slides are published under a Creative Commons Attribution-ShareAlike 4.0 license\footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}.}
  493. \end{center}
  494. \end{frame}
  495. \end{comment}
  496. \end{document}