fondamenti-03.tex 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
  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{March 30, 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. \begin{itemize}
  336. \item Codifica\pause
  337. \item Dimensionamento memoria\pause
  338. \item Diagrammi di flusso
  339. \end{itemize}
  340. \end{alertblock}
  341. \end{frame}
  342. \section{Ripasso Costrutti di Controllo}
  343. \begin{frame}[fragile]{Variabili}
  344. \begin{itemize}
  345. \item Una variabile è una etichetta che usiamo per riferirci ad contenitore di dati nella memoria centrale del calcolatore, durante l'esecuzione del nostro programma
  346. \item Vengono principalmente usate per eseguire i calcoli implementati nel nostro algoritmo, e il loro valore varia.
  347. \item Si usa l'operatore di assegnamento \ccode{=} per assegnare ad una variabile un valore: \ccode{a = 42}
  348. \item Fare attenzione alla differenza con l'operatore matematico di uguaglianza (che in C diventa l'operatore \ccode{==})
  349. \end{itemize}
  350. \end{frame}
  351. \begin{frame}[fragile]{Variabili}
  352. \begin{itemize}
  353. \item In C ogni variabile ha associato un tipo e una dimensione. Il tipo è immutabile nell'esecuzione del programma.
  354. \item Dovreste aver visto i vari modi di dichiarare e inizializzare una variabile:
  355. \begin{itemize}
  356. \item \ccode{int var;}
  357. \item \ccode{var = 42;}
  358. \item \ccode{int var = 42;}
  359. \end{itemize}
  360. \end{itemize}
  361. \end{frame}
  362. \begin{frame}[fragile]{Tipi Base}
  363. Alcuni tipi di dato disponibili in C:
  364. \begin{itemize}
  365. \item \ccode{int}, $>= 2 byte$
  366. \item \ccode{short}, $>= 2 byte$
  367. \item \ccode{long}, $>= 4 byte$
  368. \item \ccode{float}, $4 byte$
  369. \item \ccode{double}, $8 byte$
  370. \item \ccode{char}, $>= 1 byte$
  371. \end{itemize}
  372. Avete visto anche alcuni modificatori che possono essere impiegati per aggiungere attributi al tipo di dato:
  373. \begin{itemize}
  374. \begin{comment}
  375. \item \ccode{unsigned}
  376. \item \ccode{static}
  377. \end{comment}
  378. \item \ccode{const}
  379. \end{itemize}
  380. \end{frame}
  381. \begin{frame}[fragile]{Tipi Aggregati e Dimensione}
  382. \begin{itemize}
  383. \item In C sono anche disponibili i cosiddetti tipi di dato aggregato, \ccode{struct, union}... (si vedrà prossimamente a lezione).
  384. \item Inoltre, per sapere a runtime la dimensione di un tipo di dato, si può utilizzare l'operatore \ccode{sizeof()}.
  385. \item Questo operatore restituisce la dimensione in byte. Si può utilizzare sia sui tipi che su una variabile.
  386. \begin{center}
  387. \begin{C}
  388. printf("%d\n", sizeof(int));
  389. short numero = 3;
  390. printf("%d\n", sizeof(numero));
  391. \end{C}
  392. \end{center}
  393. \end{itemize}
  394. \end{frame}
  395. \begin{frame}[fragile]{Costrutto di Controllo if}
  396. \begin{itemize}
  397. \item Il costrutto di controllo \ccode{if}, è il principale costrutto di controllo che ci permette di prendere decisione all'interno del nostro codice.
  398. \item La valutazione di una \emph{condizione}, ci permette quindi di eseguire alternativamente il ramo \ccode{then} o il ramo \ccode{else} dell' \ccode{if}.
  399. \begin{center}
  400. \begin{C}
  401. if (condizione) {
  402. condizione vera;
  403. } else {
  404. condizione falsa;
  405. }
  406. \end{C}
  407. \end{center}
  408. \item Quiz, come posso fare a ottenere qualcosa che esegua:
  409. \begin{C}
  410. if (condizione) {
  411. condizione falsa;
  412. } else {
  413. condizione vera;
  414. }
  415. \end{C}
  416. senza scambiare il corpo dei branch?
  417. \end{itemize}
  418. \end{frame}
  419. \begin{frame}[fragile]{Operatori Aritmetici}
  420. All'interno del nostro codice possiamo utilizzare gli operatori aritmetici binari per combinare i valori di diverse variabili/costanti:
  421. \begin{itemize}
  422. \item \ccode{A + B} Addizione.
  423. \item \ccode{A - B} Sottrazione.
  424. \item \ccode{A * B} Moltiplicazione.
  425. \item \ccode{A / B} Divisione.
  426. \item \ccode{A \% B} Modulo.
  427. \end{itemize}
  428. Ci sono anche gli operatori aritmetici unari:
  429. \begin{itemize}
  430. \item \ccode{-A} Inversione di segno.
  431. \item \ccode{++A e A++} Pre/Post-incremento.
  432. \item \ccode{--A e A--} Pre/Post-decremento.
  433. \end{itemize}
  434. \end{frame}
  435. \begin{frame}[fragile]{Operatori Logici}
  436. Ugualmente, esistono degli operatori logici binari:
  437. \begin{itemize}
  438. \item \ccode{A == B} Uguaglianza.
  439. \item \ccode{A != B} Disuguaglianza.
  440. \item \ccode{A >= B, A > B} Maggiore o uguale, Maggiore.
  441. \item \ccode{A <= B, A < B} Minore o uguale, Minore.
  442. \item \ccode{A \&\& B} and.
  443. \item \ccode{A || B} or.
  444. \end{itemize}
  445. E anche un operatore logico unario:
  446. \begin{itemize}
  447. \item \ccode{!A} not.
  448. \end{itemize}
  449. \end{frame}
  450. \begin{comment}
  451. \begin{frame}[fragile]{Operatori bitwise}
  452. Esistono anche gli operatori bitwise binari.
  453. \begin{itemize}
  454. \item \ccode{A \& B} and.
  455. \item \ccode{A | B} or.
  456. \item \ccode{A \char`\^ B} xor.
  457. \item \ccode{A << B} Shit a sinistra.
  458. \item \ccode{A >> B} Shit a destra.
  459. \end{itemize}
  460. E anche un operatore bitwise unario:
  461. \begin{itemize}
  462. \item \ccode{\char`\~A} not.
  463. \end{itemize}
  464. \end{frame}
  465. \end{comment}
  466. \begin{frame}[fragile]{Operatori di assegnamento}
  467. Conoscete già il principale operatore di assegnamento in C.
  468. \begin{itemize}
  469. \item \ccode{A = B} assegna ad A il valore di B.
  470. \end{itemize}
  471. Ma ci sono anche operatori che fanno una operazione ed un assegnamento, condesati in una notazione unica:
  472. \begin{itemize}
  473. \item \ccode{+=}, \ccode{-=}, \ccode{*=}, \ccode{/=}, \ccode{\%=}, \ccode{\&=}, \ccode{|=}, \ccode{\char`\^=}.
  474. \end{itemize}
  475. Ad esempio:
  476. \begin{center}
  477. \begin{C}
  478. numero -= 42;
  479. \end{C}
  480. \end{center}
  481. è equivalente a:
  482. \begin{center}
  483. \begin{C}
  484. numero = numero - 42;
  485. \end{C}
  486. \end{center}
  487. \end{frame}
  488. \begin{frame}[fragile]{Precedenza degli operatori}
  489. Come abbiamo già accennato durante le esercitazioni riguardanti gli operatori logici, vi è una precedenza degli operatori da conoscere. In particolare, per quanto riguarda il C, bisogna rifarsi alla reference:
  490. \begin{itemize}
  491. \item \url{https://en.cppreference.com/w/c/language/operator_precedence}.
  492. \item Sempre meglio però usare le parentesi, anche a costo di essere ridondanti.
  493. \item Come side effect, noterete che l'uso delle parentesi migliora anche la leggibilità del codice altrui.
  494. \item E soprattutto previene l'inserimento di bug accidentali dovuti a modifiche successive.
  495. \end{itemize}
  496. \end{frame}
  497. \begin{frame}[fragile]{Costrutto di controllo while}
  498. \begin{itemize}
  499. \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?).
  500. \begin{center}
  501. \begin{C}
  502. while (condizione) {
  503. corpo_del_ciclo;
  504. }
  505. \end{C}
  506. \end{center}
  507. \item Esempio:
  508. \begin{C}
  509. a = 10;
  510. while (a > 5) {
  511. b = b + c;
  512. a = a - b;
  513. }
  514. c = c + 1;
  515. \end{C}
  516. \end{itemize}
  517. \end{frame}
  518. \begin{comment}
  519. \begin{frame}[fragile]{Costrutto di controllo do while}
  520. \begin{itemize}
  521. \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 .
  522. \begin{center}
  523. \begin{C}
  524. do {
  525. corpo_del_ciclo;
  526. } while (condizione);
  527. \end{C}
  528. \end{center}
  529. \item Esempio:
  530. \begin{C}
  531. a = 10;
  532. do {
  533. b = b + c;
  534. a = a - b;
  535. } while (a > 5)
  536. c = c + 1;
  537. \end{C}
  538. \end{itemize}
  539. \end{frame}
  540. \begin{frame}[fragile]{Costrutto di controllo for}
  541. \begin{itemize}
  542. \item Il costrutto di controllo \ccode{for} serve per costruire un ciclo, ma con delle comode aggiunte per gestire il numero di iterazioni.
  543. \begin{center}
  544. \begin{C}
  545. for (inizializzazione; condizione; incremento) {
  546. corpo_ciclo;
  547. }
  548. \end{C}
  549. \end{center}
  550. \item Esempio:
  551. \begin{C}
  552. a = 5;
  553. for (i = 0; i < 10; i++) {
  554. b = b + a;
  555. }
  556. b = b;
  557. \end{C}
  558. \end{itemize}
  559. \end{frame}
  560. \begin{frame}[fragile]{break e continue}
  561. Sono inoltre disponibili due parole chiave che possono aiutare ulteriormente nella gestione delle iterazioni di un ciclo:
  562. \begin{description}
  563. \item [\ccode{break}]: interrompe immediatamente l'esecuzione del ciclo, ignorando la condizione e eventuali statement successivi del ciclo.
  564. \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.
  565. \end{description}
  566. \end{frame}
  567. \end{comment}
  568. \begin{comment}
  569. \begin{frame}[fragile]{Costrutto di controllo switch}
  570. \begin{itemize}
  571. \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.
  572. \begin{center}
  573. \begin{C}
  574. switch (variabile) {
  575. case 1:
  576. codice_1;
  577. break;
  578. case 2:
  579. codice_2;
  580. break;
  581. default:
  582. codice_default;
  583. break;
  584. }
  585. \end{C}
  586. \end{center}
  587. \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}.
  588. \end{itemize}
  589. \end{frame}
  590. \begin{frame}[fragile]{Costrutto di controllo goto}
  591. \begin{itemize}
  592. \item Non esiste nessun costrutto con nome \ccode{goto} in C.\
  593. \pause
  594. \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).
  595. \end{itemize}
  596. \end{frame}
  597. \end{comment}
  598. \begin{comment}
  599. \begin{frame}[fragile]{Lettura del codice}
  600. \todo{Ideare semplice esercizio di lettura code}
  601. \end{frame}
  602. \end{comment}
  603. \section{Traduzione da Flowchart}
  604. \begin{frame}[fragile]{Traduzione da Flowchart}
  605. Per i primi esercizi di programmazione che affronteremo:
  606. \begin{itemize}
  607. \item Cominceremo con la stesura del diagramma di flusso.
  608. \item Solo successivamente ci sposteremo ad implementare il programma in C.
  609. \end{itemize}
  610. \end{frame}
  611. \begin{comment}
  612. \begin{frame}[fragile]{Media Aritmetica}
  613. Scrivere un programma che calcoli la media aritmetica di una serie di valori in input. Quando viene ricevuto il valore $0$, l'immissione dei valori termina e la media viene calcolata.
  614. \end{frame}
  615. \begin{frame}[fragile]{Media Aritmetica}
  616. \begin{center}
  617. \includegraphics[height=6.5cm]{media}
  618. \end{center}
  619. \end{frame}
  620. \end{comment}
  621. \begin{frame}[fragile]{Numeri Primi}
  622. \begin{itemize}
  623. \item Scrivere un programma che dato in input un numero intero $X > 0$, verifica se $X$ è primo.
  624. \end{itemize}
  625. \end{frame}
  626. \begin{frame}[fragile]{Numeri Primi}
  627. \begin{center}
  628. \includegraphics[height=6.5cm]{primo}
  629. \end{center}
  630. \end{frame}
  631. \begin{frame}[fragile]{Numeri di Fobonacci}
  632. \begin{itemize}
  633. \item Scrivere un programma che dato in input un numero intero $N > 0$, stampi i primi $N$ numeri di Fibonacci.
  634. \end{itemize}
  635. \end{frame}
  636. \begin{frame}[fragile]{Numeri di Fibonacci}
  637. \begin{center}
  638. \includegraphics[height=8.5cm]{fibo}
  639. \end{center}
  640. \end{frame}
  641. \section{Altri Esercizi}
  642. \begin{frame}[fragile]{Quadrato}
  643. \begin{itemize}
  644. \item Implementare un programma in linguaggio C che legge un numero intero positivo, e ne stampa il quadrato usando solo operazioni di somma.
  645. \item Osservazione: Il quadrato di un numero N, è dato dalla somma dei primi N numeri interi dispari.
  646. \end{itemize}
  647. \end{frame}
  648. \begin{frame}[fragile]{Conversione in binario}
  649. \begin{itemize}
  650. \item Implementare un programma in linguaggio C che legge un numero intero positivo, e ne stampa la rappresentazione in binario, usando il sistema delle divisioni successive. Stampare anche il numero minimo di bit necessari a rappresentare il numero.
  651. \item Osservazione: e se volessimo stampare le cifre in ordine?
  652. \end{itemize}
  653. \end{frame}
  654. \begin{comment}
  655. \begin{frame}[fragile]{Sequenze pari}
  656. Implementare un programma in linguaggio C che legge una sequenza (di lunghezza arbitraria) di interi positivi terminata dal valore 0, e al termine della sequenza, stampa quante terne di numeri consecutivi diversi tra loro e pari sono contenute nella sequenza.
  657. Osservazione: Notare la differenza tra i cicli precedenti, con un orientamente all'esecuzione di iterazioni fissati, a cicli a \emph{sentinella}
  658. \end{frame}
  659. \end{comment}
  660. \begin{comment}
  661. \section{Extra}
  662. \begin{frame}[fragile]{Monte Carlo}
  663. Scrivere un programma che calcoli il valore di $\pi$, utilizzando il metodo di Monte Carlo.
  664. \end{frame}
  665. \end{comment}
  666. \begin{comment}
  667. \begin{frame}[t,allowframebreaks]
  668. \frametitle{References}
  669. \nocite{*}
  670. \printbibliography
  671. \end{frame}
  672. \end{comment}
  673. \begin{comment}
  674. \begin{frame}
  675. \frametitle{License}
  676. \begin{center}
  677. \vfill
  678. \includesvg[height=1.5cm]{by-sa}\\
  679. {\footnotesize These slides are published under a Creative Commons Attribution-ShareAlike 4.0 license\footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}.}
  680. \end{center}
  681. \end{frame}
  682. \end{comment}
  683. \end{document}