fondamenti-07.tex 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  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{May 25, 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]{\ccode{wc}}
  338. \begin{itemize}
  339. \item Nei sistemi Unix e derivati, il comando \ccode{wc} fornisce il numeri di caratteri, numero di parole, e numero di linee contenute in un file di testo.
  340. \item Implementare in linguaggio C una funzione che prende in input il nome di un file e ne restituisce le statistiche del comando \ccode{wc}.
  341. \end{itemize}
  342. \end{frame}
  343. \begin{frame}[fragile]{Cifrario di Cesare}
  344. \begin{itemize}
  345. \item In antichità, il cifrario di Cesare è stato uno dei più antichi algoritmi crittografici conosciuti, usato da Giulio Cesare per cifrare messaggi.
  346. \item Funziona tramite uno shift di 3 caratteri, per ogni lettera del messaggio originale. Ad esempio, la parola "CANE", diventa "FDQH".
  347. \item Per decifrare il messaggio, si può effettuare la procedura inversa ovviamente.
  348. \end{itemize}
  349. \end{frame}
  350. \begin{frame}[fragile]{Movimenti Bancari}
  351. \begin{itemize}
  352. \item Un file contenente le informazioni sui movimenti di un conto corrente bancario (in Euro) ha il seguente formato.
  353. \item La prima riga contiene una stringa con l’IBAN del conto corrente.
  354. \item La seconda riga contiene il saldo iniziale (sempre positivo).
  355. \item Le righe seguenti formano una sequenza di movimenti.
  356. \item Ogni movimento è descritto dalla data del movimento nel formato aaaa-mm-gg, l’importo del movimento espresso in Euro (da rappresentare con un numero \ccode{float}, dato che può contenere cifre decimali) e un carattere che può essere il segno + (entrata) oppure - (uscita). Ciascun movimento è posto su di una singola riga del file, con un carattere di spazio, usato come separatore dei valori sulla riga. I movimenti sono riportati nel file in ordine cronologico crescente: non esistono due movimenti effettuati nel medesimo giorno.
  357. \end{itemize}
  358. \end{frame}
  359. \begin{frame}[fragile]{Movimenti Bancari}
  360. \begin{itemize}
  361. \item Scrivere la funzione:
  362. \begin{lstlisting}[language=C]
  363. void dataLimite(char nomefile[],
  364. float limCredito,
  365. char *dataRestituita);
  366. \end{lstlisting}
  367. \item che prende come parametri il nome di un file contenente le informazioni di un conto corrente nel formato sopra descritto e un limite di credito $limCredito$ (con $limCredito < 0$), e restituisce tramite l'uso del terzo parametro $char *dataRestituita$ la data in cui il saldo è sceso sotto il valore limite passato come parametro.
  368. \end{itemize}
  369. \end{frame}
  370. \begin{frame}[fragile]{Movimenti Bancari}
  371. \begin{itemize}
  372. \item Dato il tipo di dato seguente:
  373. \begin{lstlisting}[language=C]
  374. typedef struct mov {
  375. char data[10+1];
  376. float importo;
  377. char segno;
  378. } t_movimento;
  379. \end{lstlisting}
  380. \item scrivere in C la funzione:
  381. \begin{lstlisting}[language=C]
  382. void leggiEstratto(char nomefile[],
  383. t_movimento *movimenti,
  384. int *lung,
  385. int *saldoIniziale)
  386. \end{lstlisting}
  387. che prende come parametri il nome di un file contenente le informazioni di un conto corrente nel formato descritto nel precedente esercizio e un puntatore ad un array in cui inseriremo tutti i movimenti presenti all’interno del file.
  388. \end{itemize}
  389. \end{frame}
  390. \begin{frame}[fragile]{Movimenti Bancari}
  391. \begin{itemize}
  392. \item L’array avrà quindi tante celle di tipo \ccode{t\_movimento} quante sono le righe del file che descrivono un movimento. Il secondo e il terzo parametro sono da intendersi come parametri passati per indirizzo per restituire al chiamante la lunghezza del vettore e il saldo iniziale del conto corrente.
  393. \end{itemize}
  394. \end{frame}
  395. \begin{frame}[fragile]{Movimenti Bancari}
  396. \begin{itemize}
  397. \item Si considerino le ulteriori definizioni di tipo di dato:
  398. \begin{lstlisting}[language=C]
  399. typedef struct t_entrateUscite{
  400. float totEntrate;
  401. float totUscite;
  402. } t_bilancio;
  403. typedef t_bilancio bilancioMensile[12];
  404. \end{lstlisting}
  405. \item Scrivere in C il sottoprogramma:
  406. \begin{lstlisting}[language=C]
  407. void calcolaBilanciMensili(t_movimento *elenco,
  408. int lung,
  409. int anno,
  410. t_bilancio ris[12]);
  411. \end{lstlisting}
  412. che prende come parametri un array contenente l’elenco dei movimenti di un conto corrente, la lunghezza dell’array e un valore intero indicante un anno (per esempio: 2019).
  413. \end{itemize}
  414. \end{frame}
  415. \begin{frame}[fragile]{Movimenti Bancari}
  416. \begin{itemize}
  417. \item Il sottoprogramma riempie l’array passato come quarto parametro memorizzando nella 1ma cella i totali delle entrate e delle uscite relative al mese di Gennaio, nella seconda cella i totali delle entrate e delle uscite relative al mese di Febbraio ecc.
  418. \item Nota: potrebbe essere utile definire e usare due sottoprogrammi:
  419. \begin{lstlisting}[language=C]
  420. int numAnno(char data[]); int numMese(char data[]);
  421. \end{lstlisting}
  422. per ottenere dalla stringa con formato aaaa-mm-gg, passata come parametro, un numero con il valore dell’anno e un numero con il valore del mese, rispettivamente. Si assuma 1=Gennaio, 2=Febbraio, ecc.
  423. \end{itemize}
  424. \end{frame}
  425. \begin{frame}[fragile]{Prodotto interno lordo}
  426. \begin{itemize}
  427. \item il prodotto interno lordo (pil) è una delle grandezze macro-economiche fondamentali e rappresenta il valore
  428. di mercato di tutti i beni e servizi finali prodotti in una nazione, in un dato periodo di tempo.
  429. per esempio, la farina è un “bene finale” se venduta come farina; un “bene intermedio” se venduta al panettiere
  430. per fare il pane; in questo caso il valore della farina è incorporato nel valore del pane.
  431. \item limitandosi a considerare solo beni di consumo (trascurando quindi i beni e i servizi di investimento), si
  432. considerino due file di testo, chiamati rispettivamente \ccode{benifinali.txt} e \ccode{materiali.txt}.
  433. \end{itemize}
  434. \end{frame}
  435. \begin{frame}[fragile]{Prodotto interno lordo}
  436. \begin{itemize}
  437. \item Il file BeniFinali.txt include un elenco di righi, dove ciascun rigo riporta una stringa alfanumerica (univoca)
  438. di dieci caratteri per identificare un bene (ID\_bene), una stringa senza spazi all’interno e lunga al massimo
  439. cinquanta caratteri contentente il nome del bene (nome), e un prezzo di vendita unitario espresso in euro
  440. (prezzo\_unitario), separati da un carattere di spazio.
  441. \item Il file Materiali.txt include un elenco di righi, dove ciascun rigo riporta una stringa alfanumerica lunga
  442. dieci caratteri per identificare un bene finale, una stringa alfanumerica lunga dieci caratteri per identificare un
  443. bene intermedio e la quantità necessaria di prodotto intermedio (indicata come un numero frazionario), per la
  444. produzione del primo prodotto.
  445. \end{itemize}
  446. \end{frame}
  447. \begin{frame}[fragile]{Prodotto interno lordo}
  448. \begin{itemize}
  449. \item Dichiarare in C due tipi di dato, chiamati bene\_finale\_t e materiale\_t, per rappresentare in memoria
  450. ciascun un rigo del primo e del secondo file, rispettivamente.
  451. \end{itemize}
  452. \end{frame}
  453. \begin{frame}[fragile]{Prodotto interno lordo}
  454. \begin{itemize}
  455. \item Si consideri la seguente definizione di tipo di dato:
  456. \begin{lstlisting}[language=C]
  457. typedef struct {
  458. bene_finale_t b;
  459. float quantita;
  460. } vendita_t;
  461. \end{lstlisting}
  462. \item Scrivere in C il codice della funzione int main(){...} che apra il file BeniFinali.txt, conteggi il
  463. numero complessivo di beni di consumo da considerare per il calcolo del PIL (cioè calcoli il numero di righi nel
  464. file) e dichiarando un vettore di tipo vendita\_t di una lunghezza massima prefissata (superiore sicuramente al numero di beni
  465. descritti nel file BeniFinali.txt), lo inizializzi acquisendo da tastiera la quantità di prodotto venduta per
  466. ciascun bene.
  467. \end{itemize}
  468. \end{frame}
  469. \begin{frame}[fragile]{Prodotto interno lordo}
  470. \begin{itemize}
  471. \item Scrivere in C la funzione:
  472. \begin{lstlisting}[language=C]
  473. float calcola_valore_aggiunto(char ID[],
  474. char nomeFileMateriali[],
  475. vendita_t elenco[],
  476. int lungElenco);
  477. \end{lstlisting}
  478. avente come argomenti l'identificativo di un bene, una stringa contenente il nome del file con le informazioni
  479. sui materiali necessari per produrlo (quindi un file di testo organizzato come Materiali.txt), un array di
  480. tipo vendita\_t e la lunghezza di quest'ultimo.
  481. \item La funzione restituisce un numero frazionario calcolato come la differenza tra il prezzo di vendita del bene (con
  482. identificativo passato come parametro) meno i prezzi delle quantità di materiale impiegate per produrlo.
  483. La funzione restituisce il valore 0.0 nel caso in cui l'identificativo passato come parametro non corrisponda ad
  484. alcun bene.
  485. \end{itemize}
  486. \end{frame}
  487. \begin{frame}[fragile]{Prodotto interno lordo}
  488. \begin{itemize}
  489. \item Scrivere in C la funzione:
  490. \begin{lstlisting}[language=C]
  491. ...calcola_PIL_consumi(...)
  492. \end{lstlisting}
  493. avente come parametri un array di tipo vendita\_t e la sua lunghezza, e che restituisca il PIL dei consumi,
  494. calcolato come la somma dei “valori aggiunti” dei beni presenti nell'array passato come parametro e tenendo
  495. conto delle quantità dei beni in esso riportate.
  496. \end{itemize}
  497. \end{frame}
  498. \begin{comment}
  499. \section{Extra}
  500. \begin{frame}[fragile]{Monte Carlo}
  501. Scrivere un programma che calcoli il valore di $\pi$, utilizzando il metodo di Monte Carlo.
  502. \end{frame}
  503. \end{comment}
  504. \begin{comment}
  505. \begin{frame}[t,allowframebreaks]
  506. \frametitle{References}
  507. \nocite{*}
  508. \printbibliography
  509. \end{frame}
  510. \end{comment}
  511. \begin{comment}
  512. \begin{frame}
  513. \frametitle{License}
  514. \begin{center}
  515. \vfill
  516. \includesvg[height=1.5cm]{by-sa}\\
  517. {\footnotesize These slides are published under a Creative Commons Attribution-ShareAlike 4.0 license\footnote{\url{https://creativecommons.org/licenses/by-sa/4.0/}}.}
  518. \end{center}
  519. \end{frame}
  520. \end{comment}
  521. \end{document}