ALCUNI ESERCIZI ADDIZIONALI Moreno Marzolla Fondamenti di Informatica, modulo B 16/01/2006 1) Scrivere una funzione "media_array" che accetta due parametri: un array a[] di double, e la sua dimensione dim_a (un intero), e restituisce un double che rappresenta la media dei valori presenti in a[]. La media e' definita come la somma dei valori presenti in a[], divisa per il numero di elementi presenti nel vettore. Se il vettore e' vuoto (il numero di elementi e' zero), la media vale zero. Utilizzare quindi la funzione "media_array" per scrivere un programma che funzioni come segue. Il programma definisce un array vet[] di 100 double. Il programma deve poi chiedere all'utente di specificare il numero dim_vet di elementi da inserire nell'array. Tale numero deve essere maggiore o uguale di zero; se minore di zero occorre richiederlo finche' dim_vet >= 0. A questo punto il programma chiede all'utente di specificare i valori da inserire nei primi dim_vet elementi di vet[]. Il programma utilizza la funzione "media_array" per visualizzare su video la media dei valori inseriti dall'utente in vet[]. 2) Scrivere un programma che realizza quanto segue. Definisce un array fib[] di 20 interi. Il programma deve riempire l'array (ossia, deve definire i valori di tutti i 20 elementi dell'array) in modo che l'n-esimo elemento dell'array corrisponda all'n-esimo numero di Fibonacci. Questo vuol dire che gli elementi dell'array devono essere definiti come segue: a) fib[0] = 1; b) fib[1] = 1; c) per ogni n > 1, fib[n] = fib[n-1] + fib[n-2] 3) [Esercizio un po' complicato] Scrivere un programma che risolva il seguente problema. Viene richiesto all'utente di inserire un importo di denaro, espresso in euro. Supponiamo, per semplicita', che l'importo sia intero (quindi niente centesimi di euro). Il programma deve stampare il numero minimo di banconote da 50, 20, 10, 5 euro e di monete da 2 e 1 euro necessari per rappresentare l'importo indicato. Realizzare il programma seguendo i passi che seguono: a) Definire una funzione "int num_banconote( int& somma, int taglio )", in cui il primo parametro (passato per riferimento) rappresenta la somma di denaro, il secondo parametro il taglio della banconota o della moneta (quindi il secondo parametro potra' assumere un valore tra 50, 20, 10, 5, 2, 1); il risultato della funzione e' il numero massimo di pezzi (banconote o monete) del taglio indicato, tali che la loro somma sia minore o uguale al parametro "somma". Ad esempio: num_banconote( 137, 50 ) = 2, perche' 2 e' il massimo numero di banconote da 50 euro la cui somma totale sia minore o uguale a 137. num_banconote( 27, 1 ) = 27, perche' 27 e' il massimo numero di monete da 1 euro la cui somma totale sia minore o uguale (in questo caso uguale) a 27 euro. _ATTENZIONE_: Il valore del primo parametro (somma, quello passato per riferimento) deve essere _modificato_ dalla funzione. In pratica la funzione opera come segue: fintanto che il valore di somma e' maggiore o uguale a taglio, viene sottratto "taglio" da "somma". Il risultato della funzione e' il numero di sottrazioni effettuate. Ovviamente il valore di "somma", al termine della funzione, sara' modificato e rappresenta l'importo residuo. b) A questo punto e' possibile utilizzare la funzione num_banconote() per risolvere il problema di partenza, come segue. Dato un importo non negativo x da chiedere all'utente (richiederlo se l'utente inserisce un valore negativo) si inizia a stampare il numero massimo di banconote da 50 euro necessarie: cout << "Numero Banconote da 50 euro=" << num_banconote(x, 50) << endl; A questo punto x e' un numero minore di 50, che rappresenta l'importo residuo. Stampiamo il numero di banconote da 20 euro necessarie a coprire il residuo: cout << "Numero Banconote da 20 euro=" << num_banconote(x, 20) << endl; Si procede in questo modo per i tagli via via inferiori (10, 5, 2 e 1 euro); i numeri stampati sono il numero di banconote di ogni taglio richiesto.