|
| 1 | +\documentclass[11pt,a4]{article} |
| 2 | + |
| 3 | +\usepackage[margin=2cm]{geometry} |
| 4 | + |
| 5 | + |
| 6 | +\usepackage{collectbox} |
| 7 | + |
| 8 | +\newcommand{\mybox}[2]{$\quad$\fbox{ |
| 9 | +\begin{minipage}{#1cm} |
| 10 | +\hfill\vspace{#2cm} |
| 11 | +\end{minipage} |
| 12 | +}} |
| 13 | + |
| 14 | +\usepackage{fancyhdr} |
| 15 | +\pagestyle{fancy} |
| 16 | +\rhead{Programmazione 1 - Esercitazione 1, A.A. 2018-2019} |
| 17 | + |
| 18 | +\include{book_header} |
| 19 | + |
| 20 | +\begin{document} |
| 21 | +\thispagestyle{empty} |
| 22 | +\hrule |
| 23 | +\begin{center} |
| 24 | + {\Large {\bf Esercitazione 1 \hspace{3cm} $\quad \quad$ Programmazione 1, a.a. 2018-2019}} |
| 25 | +\end{center} |
| 26 | +{\bf Cognome: }\hspace{2.5cm} {\bf Nome: } \hspace{2.5cm} {\bf Matricola: } \\\ |
| 27 | +\hrule |
| 28 | + |
| 29 | +\begin{enumerate} |
| 30 | +\section*{} |
| 31 | + |
| 32 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 33 | +\item Scrivere una procedura ricorsiva chiamata {\tt Tab(x)} che prende in input un numero naturale {\tt x} e stampa a video |
| 34 | +la tabellina del numero corrispondente sino a 10. Per esempio, applicando il valore 7 alla procedura {\tt Tab(x)}, |
| 35 | +la procedura stampa a video (un numero per riga): |
| 36 | +\begin{verbatim} |
| 37 | +7 14 21 28 .. 70 |
| 38 | +\end{verbatim} |
| 39 | + |
| 40 | +\mybox{15}{3.5} |
| 41 | + |
| 42 | + |
| 43 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 44 | +\item Il metodo di Newton per trovare la radice cubica di un numero si basa sul fatto che se |
| 45 | +$y$ è un'approssimazione della radice cubica di x, allora un'approssimazione migliore è data |
| 46 | +da $\frac{\frac{x}{y^2} + 2y}{3}$. |
| 47 | +Si usi questa formula per implementare una procedura analoga a quella scritta per trovare |
| 48 | +la radice quadrata. Si prenda spunto dalle soluzioni elaborate nel notebook Lab3. |
| 49 | + |
| 50 | +\mybox{15}{4.5} |
| 51 | + |
| 52 | + |
| 53 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 54 | +\item Si consideri l'algoritmo del contadino russo per moltiplicare due numeri interi positivi spiegato a lezione. |
| 55 | +Si scriva una funzione chiamata {\tt MultiRec(a, b)} che prende in input due numeri interi {\tt a} e {\tt b} |
| 56 | +e calcola il prodotto tra i due numeri usando l'algoritmo appena citato. |
| 57 | +La funzione implementata deve avere un {\underline {\bf processo di calcolo ricorsivo lineare}} (si veda il notebook Lab4). |
| 58 | + |
| 59 | +{\bf NOTA}: In Python per effettuare la divisione intera tra due numeri si usa l'operatore {\tt //} (e.g. {\tt 3 // 2 = 1}). |
| 60 | +Per calcolare il resto di una divisione si usa l'operatore modulo {\tt \%} (e.g. {\tt 7\%4 = 3}). |
| 61 | +Si osservi che un numero {\tt x} è pari solo se {\tt x \% 2 == 0}. |
| 62 | + |
| 63 | +\mybox{15}{3.5} |
| 64 | + |
| 65 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 66 | +\item Si scriva una funzione {\tt MultiIter(a, b)} che implementa lo stesso algoritmo dell'esercizio precedente, ma con una procedura che realizza |
| 67 | +un {\underline {\bf processo di calcolo iterativo lineare}} (si veda il notebook Lab4). |
| 68 | + |
| 69 | +\mybox{15}{3.5} |
| 70 | + |
| 71 | + |
| 72 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 73 | +\item Si scriva una funzione ricorsiva {\tt FibonacciIter(n)} che calcolo l'$n$-esimo numero della sequenza di Fibonacci |
| 74 | +che realizza un {\underline {\bf processo di calcolo iterativo lineare}}. |
| 75 | + |
| 76 | +\mybox{15}{3.5} |
| 77 | + |
| 78 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 79 | +\item Il Massimo Comun Divisore (MCD) di due numeri intero $a$ e $b$ è definito come |
| 80 | +il più grande numero intero che divide sia $a$ che $b$ senza resto. |
| 81 | +Esiste un metodo famoso, dovuto ad Euclide, per calcolare il MCD. |
| 82 | +L'idea dell'algoritmo si basa sull'osservazione che, se $r$ è il resto di quando $a$ è diviso per $b$, |
| 83 | +allora i divisori comuni di $a$ e $b$ sono esattamente gli stessi divisori comuni tra $b$ e $r$. |
| 84 | +Quindi possiamo usare l'equazione $$MCD(a,b) = MCD(b,r)$$ per ridurre il problema di |
| 85 | +trovare i divisori comuni calcolando il MCD tra coppie di numeri interi via via più piccoli. Per esempio: |
| 86 | + |
| 87 | +\begin{verbatim} |
| 88 | +MCD(206, 40) = MCD(40, 6) = MCD(6,4) = MCD(4,2) = MCD(2,0) = 2 |
| 89 | +\end{verbatim} |
| 90 | + |
| 91 | +Scrivere una procedura che calcola il massimo comune divisore usando l'algoritmo di Euclide. |
| 92 | +{\bf NOTA}: per calcolare il resto di una divisione tra due numeri interi si usa l'operatore modulo {\tt \%}, |
| 93 | +ovvero il simbolo percentuale (esempio: {\tt 7\%3 = 1}). |
| 94 | + |
| 95 | +\mybox{15}{3.5} |
| 96 | + |
| 97 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 98 | +\item {\bf CHALLENGE (facoltativo)}: Si consideri il problema seguente. Siano date le monetine |
| 99 | +da 1, 2, 5 e 10 centesimi di euro: quanti modi esistono per cambiare una monetina da 20 centesimi? |
| 100 | +E se consideriamo anche le monetine da 20 e 50 centesimi, |
| 101 | +in quanti modi possiamo cambiare una moneta da un euro? |
| 102 | +Si utilizzino solo gli elementi del linguaggio Python visti a lezione. Mandare la soluzione per email al docente. |
| 103 | + |
| 104 | +\end{enumerate} |
| 105 | + |
| 106 | +\end{document} |
0 commit comments