Esercitazione n. 4
Esame di una sequenza pseudocasuale
Il metodo random.random()
(dopo aver eseguito una import random
) restituisce un valore float
pseudocasuale compreso tra 0 (incluso) e 1 (escluso). Ad ogni chiamata del metodo random.random()
viene restituito un nuovo valore. Quindi, il frammento di codice seguente stampa una successione di 10 numeri casuali compresi in [0, 1):
conta = 0
while conta<10:
x = random.random();
print(x);
conta = conta + 1
Prendendo spunto dal frammento di codice proposto, scrivere un programma che:
- accetta in input un numero intero positivo
n
,
- genera e stampa
n
valori pseudocasuali.
Modificare il programma in modo da raggiungere, uno alla volta, i seguenti obiettivi (deve essere generata una sola sequenza):
- stampare anche la somma dei valori generati (la somma deve essere stampata una sola volta)
- stampare il massimo dei valori generati (il massimo deve essere stampato una sola volta)
- stampare il minimo dei valori generati (il minimo deve essere stampato una sola volta)
- decidere se la sequenza generata contiene almeno un elemento maggiore di 0.9, (utilizzare una variabile boolean ...)
- decidere se la sequenza generata è composta esclusivamente da elementi maggiori di 0.11, (utilizzare una variabile boolean per cercare violazioni alla condizione richiesta ...)
- decidere se la sequenza generata è crescente (per risolvere questo punto è necessario mantenere sia il valore corrente che il valore generato nell'iterazione precedente; a ciascuna iterazione il valore corrente viene copiato nella variabile che contiene il valore della iterazione precedente ...),
- contare il numero di sequenze massimali crescenti. Ad esempio, la sequenza
0.23 - 0.15 - 0.01 - 0.48 - 0.68 - 0.27 - 0.83
è composta da 4 sequenze crescenti:
0.23; 0.15; 0.01 - 0.48 - 0.68; 0.27 - 0.83;
(una sequenza crescente termina appena si incontra ..., oppure alla fine della sequenza ...),
- trovare la lunghezza della massima porzione crescente della sequenza (questo punto è particolarmente impegnativo): ad esempio, se la sequenza generata fosse 0.23 - 0.15 - 0.01 - 0.48 - 0.68 - 0.27 - 0.83, la massima porzione crescente sarebbe lunga 3 (0.01 - 0.48 - 0.68)
- contare il numero di massimi locali (un massimo locale è un elemento che è preceduto da un elemento minore e seguito da un elemento minore. Il primo e l'ultimo elemento non possono essere massimi locali)
Fattorizzazione di un numero naturale
Scrivere un programma che, dato in input un numero naturale, stampa la sua scomposizione in fattori primi.
Ad esempio, se fosse dato in input il numero 792, il programma dovrebbe stampare
792 = 2 2 2 3 3 11
o, preferibilmente,
792 = 2 * 2 * 2 * 3 * 3 * 11
Suggerimenti:
- una volta trovato un divisore, dovrà essere fattorizzato il quoziente ...
- ogni divisore deve essere considerato più volte, finché divide il numero residuo
792: 2 * 396
396: 2 * 198
198: 2 * 99
99: 3 * 33
33: 3 * 11
11: 11 * 1
fine