Esercizi su arrays

Primo esercizio

Data una sequenza di numeri a0, a1, a2, ... an-1, la media mobile di lunghezza k in posizione i è definita come la media dei k elementi nelle posizioni ai, ai+1, ..., ai+k-1. È possibile definire la media mobile di lunghezza k solo per le posizioni da 0 a n-k.

  1. Scrivere un metodo che, dati come parametri un array di double s che rappresenta una sequenza, un intero k e un intero p, restituisce la media mobile di lunghezza k in posizione p. Assumiamo che il valore dei parametri attuali k e p specificati in qualunque chiamata del metodo siano sempre compatibili con la lunghezza dell'array.
  2. Scrivere un metodo che, dati come parametri un array di double s che rappresenta una sequenza e un intero k, restituisce la sequenza di tutte le medie mobili di lunghezza k per le posizioni da 0 a n-k, dove n è la lunghezza dell'array. Questo metodo utilizza il metodo definito al punto precedente.
  3. Utilizzando il metodo precedente, scrivere un altro metodo che, dato un array e un intero k, restituisce la posizione in corrispondenza della quale la media mobile di lunghezza k è massima.

Per verificare il funzionamento del metodo che trova la posizione di media mobile massima, applicarlo a un array di valori double pseudocasuali la cui lunghezza è definita dall'utente.

Secondo esercizio

Si vuole realizzare una simulazione di lanci di moneta, ciascuna con esito 'T' o 'C'.
In particolare, si vuole studiare come varia il massimo numero di esiti consecutivi uguali al variare della lunghezza della sequenza di estrazioni. Ad esempio, nella sequenza di lunghezza 10:
T C C C T T C T C C
si hanno 3 esiti consecutivi uguali (C C C), e ci si aspetterebbe che su sequenze più lunghe tale numero tenda ad aumentare. Ad esempio, nella sequenza di lunghezza 20:
T C C T C C C T T T T C C C C T C T T T
osserviamo 4 esiti consecutivi uguali.

Scrivere un programma che esegue simulazioni di lanci di moneta di lunghezza 10, 20, 40, 80, ..., 327680, 655360 (la lunghezza raddoppia di volta in volta), e in corrispondenza di ogni simulazione stampa il massimo numero di esiti consecutivi uguali. I lanci sono simulati attraverso chiamate del metodo Math.random().

L'esercizio può essere risolto definendo prima un metodo che, a partire da un parametro n, simula una sequenza di lanci di moneta e restituisce la lunghezza della massima sequenza