Menu Chiudi

Coding e modelli 4/4

Workshop

Puntata precedente: Coding e modelli 3/4. Vedere anche Programmare senza … 1/3 e Introduzione a Blockly, un breve corso per usare subito il generatore di codice di Google.

Gli infettivi day by day

Aggiungiamo qualche istruzione per tenere traccia degli infettivi un giorno dopo l’altro. Dobbiamo creare una lista, inizialmente vuota, a cui aggiungeremo ogni giorno (simulato) un elemento che conterrà il numero degli infettivi attuali. La funzione SituazioneIniziale si deve occupare della creazione della lista mentre la procedura FineGiornata avrà il compito di aggiornarla. È importante notare che la funzione PropagaContagio non deve essere modificata. Questa è una prova della bontà delle scelte che abbiamo fatto finora.

Le modifiche a SituazioneIniziale

SituazioneIniziale(n, infettiviIniziali)
  InfettiviStorico = crea una lista vuota
  m = crea una lista con n elementi tutti nulli
  i = 0
  ripeti finchè i < infettiviIniziali
    x = numero casuale tra 1 e n
    se m[x] == 0 allora
      m[x] = 1
      i = i+1
  ritorna m

Qui sopra lo pseudo-codice della funzione SituazioneIniziale modificata come annunciato. L’unica differenza con quella formalizzata in Coding e modelli 1/4 è la riga InfettiviStorico = crea una lista vuota che predispone la lista che conterrà il numero giornaliero di infettivi.

Modifichiamo anche la corrispondente funzione realizzata con Blockly. Notare i due blocchi iniziali, i primi contenuti all’interno del blocco funzione: si crea una lista vuota e si assegna alla variabile infettiviStorico.

Le modifiche a FineGiornata

Ora dobbiamo contare gli infettivi attuali e aggiungere un elemento alla lista infettiviStorico per memorizzare questo numero. Ovviamente questa operazione deve essere eseguita al termine di ogni iterazione del ciclo principale e quindi dobbiamo modificare la funzione FineGiornata. Qui di seguito la nuova formalizzazione, in linguaggio quasi-naturale, delle modifiche.

FineGiornata(m)
  infettiviOggi = 0
  ripeti per i da 1 a lunghezza di m
    se m[i] > 0 allora
      m[i] = m[i]+1
      aumenta infettiviOggi di 1
  alla lista infettiviStorico aggiungi infettiviOggi come ultimo elemento

In grassetto sono evidenziati i cambiamenti. La variabile infettiviOggi è usata per contare quanti contagiati ci sono attualmente nella lista degli agenti. Al termine della conta (del ciclo ripeti) si aggiunge il numero ottenuto come nuovo elemento della lista infettiviStorico.

Ed ecco pronta la corrispondente funzione realizzata con Blockly!

Articoli correlati