LABORATORIO 12 CLASSE LIFE

Documenti analoghi
Smazzare una partita di bridge

Esercitazione 5: the game of life

Campo Minato. in java

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2018

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

LABORATORIO 7 ARRAY. ATTENZIONE: argomenti da linea di comando!!!

Fondamenti di Programmazione

Calcolo su Polinomi ===================

Fondamenti di Informatica T-1

Esercizi

Elaborato Finale per il corso di Modelli Computazionali per Sistemi Complessi. Traccia Difficoltà (1-5) Gruppo Studenti

a.a Codice corso: 21012

Array di array. Walter Didimo

Laboratorio di Matematica e Informatica 1

Laboratorio di programmazione

LABORATORIO 4 - Iterazioni

Passare argomenti al programma

Laboratorio di Programmazione (Corso di Laurea in Informatica)

15 Riepilogo di esercizi in MATLAB

13 Esercizi di Riepilogo

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

ESERCIZIO 1 (FILE DI TESTO)

Ereditarietà. Esercizio Specifica

E17 Esercizi sugli Array in Java

Prova d Esame Compito A

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 17/02/2011

Definizione di classi

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Programmazione Procedurale in Linguaggio C++

Esame Laboratorio di Programmazione

Math_Vita 2-3 è il nome che abbiamo dato al microorganismo della ricerca matematicobiologica, che il dott Marco Confalonieri ci ha commissionato, una

Programmazione II Compitino (Vers. A)

Progetti Algoritmi e Strutture Dati A.A Si intende realizzare una coda di priorità mediante un max-heap.

Esercitazione n 2. Obiettivi

E7 Esercizi sul Capitolo 7 Realizzazione di Classi

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazione n 2. Obiettivi

E9 Esercizi sul Capitolo 9 Array

Quadrato Magico. Fondamenti di Programmazione

Laboratorio 1. 15/16 marzo 2018

Fondamenti di Informatica T-1

Preparazione allo Scritto di Programmazione

Programmazione II Compitino (Vers. B)

Esercizi 5 CICLI. Es.5(cicli)

Laboratorio di Programmazione 1 [Java]

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Array. Anno Accademico 2010/2011 Francesco Tortorella

Classe Vettore (i) Creare una classe che consenta di gestire un vettore di N elementi reali (double), che preveda i seguenti metodi:

Esercitazione n 2. Obiettivi

Programmazione II Compitino (Vers. A)

A1- Array MODULO Java3

Esercitazione Fondamenti di Informatica 2

LABORATORIO 9 UTILIZZO DI ArrayList

Introduzione a Matlab

Corso di Laurea in Matematica Corso di Informatica Prova d Esame del 02/02/2010

(Def. funzioni con parametri di tipo matrice)

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

ARRAY DI PUNTATORI. ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:

Matricola Nome Cognome Aula Fila (dalla cattedra) Posto (dalla porta)

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

Laboratorio di programmazione

ESERCIZIO 1 ESERCIZIO 1

Array. Aggragati di variabili omogenee...

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

Programmazione I - Preparazione A.A. 2010/2011

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B. Esempio di seconda prova in itinere A.A

Struttura logica del computer (semplificata)

Informatica (A-K) 14. Linguaggio C -4

PREPARAZIONE DI UN PROGRAMMA

Tipi primitivi ed array

I Fogli Elettronici (Microsoft Excel)

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

Programmazione Preparazione al II Compitino

4 GLI ARRAY E LE STRINGHE

Fondamenti di Informatica T-1

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2015

Esercizio 1. Esercizio 2

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

ESERCIZIO 1 (STRINGHE)

Esercizi di autovalutazione - Matlab Metodi Numerici con Elementi di Programmazione A.A

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

Esercizi. Fondamenti di Informatica

Problema. Vettori e matrici. Vettori. Vettori

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Prova d Esame Compito A

Corso sul linguaggio Java

Formato dei file. Definizione del formato immagine pbm. Il formato immagine pbm

Sistemi Web per il turismo - lezione 5 -

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati. Esercizi

Transcript:

CLASSE LIFE LABORATORIO 12 Life (vita, in inglese) è un automa cellulare inventato dal matematico John Conway per studiare un'emulazione elementare dei processi vitali. Life è diventato famoso dopo la sua descrizione su Scientific American nel 1971. L'automa cellulare rappresenta la vita di un insieme di nxm cellule che possono essere in due stati: vive o morte. Le cellula sono organizzate in una matrice di n righe e m colonne. Come mostrato nella tabella sotto, attorno a ogni cellula ci sono otto cellule adiacenti (nord, sud, est, ovest, nordovest N-O, nord-est N-E, sud-ovest S-O e sud-est S-E ). N-O Nord N-E Nord Cellula Est S-O Sud S-E Notate che la relazione di vicinanza tra le cellule della matrice è considerarsi ciclica: il bordo destro della matrice è da considerarsi adiacente a quello sinistro (il bordo destro è da considerarsi a sinistra del bordo sinistro), così come il bordo superiore è adiacente a quello inferiore (il bordo inferiore è sopra il bordo superiore). Altrimenti detto, le cellule sul bordo sinistro hanno come vicine dal lato ovest le cellula del bordo destro della matrice; le cellule sul bordo alto hanno come vicine sul lato nord le cellule del bordo basso della matrice; eccetera. Nella Tabella sottostante, le cellule del bordo sinistro (in giallo) hanno come vicine alla loro sinistra, quindi sul lato ovest, le cellule del bordo destro (in arancione). Le cellule del bordo sopra (in azzurro) hanno come vicine a nord, ovvero sopra di loro, le cellule del bordo sotto (in blu). Ad esempio, come mostrato nella tabella sotto, la cellula di coordinate (0, 0) Segnata con X in tabella ha a est la cellula (0,1), a ovest la cellula (0, m 1), a sud la cellula (1,0), a nord la cellula (n 1, 0), a sud-est la cellula (1,1), a sudovest la cellula (1, m-1), a nord-est la cellula (n-1,1), a nord-ovest la cellula (n-1,m-1). X E O S S-E S-O N N-E N-O Le regole di evoluzione della vita in Life sono molto semplici: - se una cellula è viva, sopravvive all'istante di tempo successivo se nel suo intorno ci sono 2 o 3 cellule vive; altrimenti muore per solitudine o sovraffollamento. - se una cellula è morta e nel suo intorno ci sono esattamente tre cellule vive diventa viva all'istante successivo.

Scrivere un programma che simuli Life e visualizzi graficamente l'evoluzione di una matrice le cui dimensioni sono specificate sulla riga di comando. A tal fine implementate la classe Automa che, contiene le seguenti variabile di istanza: - boolean/int/ [][] auto: questa è la matrice - di cui sceglierete voi il tipo (!!) - che contiene le cellule (ovvero il loro stato) - tutte le altre variabili di istanza che ritenete necessarie Oltre alle variabili di istanza, la classe contiene i seguenti metodi: un costruttore public Automa(int n, int m, double p): riceve in ingresso il numero di righe (n) e di colonne (m) della matrice di cellule, e un valore double p tale che 0<p<1. Questo valore è da intendersi come un valore di probabilità p che viene utilizzato per inizializzare la matrice delle cellule: ogni cellula sarà viva con probabilità p. Per sfruttare tale numero, generate un numero casuale rand tra 0 e 1; se rand<p la cellula è viva, altrimenti è morta. il metodo String tostring(): restituisce una stringa che rappresenta lo stato dell automa (ovvero restituisce una stringa che raffigura la matrice di cellule). Per ottenere la visualizzazione grafica, potete stampare la matrice emettendo il carattere + per le cellule morte, e il carattere o per le cellule vive. il metodo void evolvi(): fa evolvere la matrice di cellule facendola passare allo stato successivo. tutti gli altri metodi che ritenete necessari. Il programma Life deve prendere in input sulla riga di comando quattro parametri: il numero n, il numero m, una probabilità p, e un numero intero num positivo o nullo (num 0), che rappresenta il numero di evoluzioni da simulare. Il programma: - crea un oggetto della classe Automa che contie nxm cellule, inizializzate tramite la probabilità p; - stampa l automa dopo l inizializzazione; - fa evolvere l automa e si ferma dopo num evoluzioni o dopo una evoluzione in cui tutte le cellule sono morte; dopo ogni evoluzione viene stampato lo stato dell automa. - al termine dell evoluzione, Life stampa il numero di cellule vive dopo l inizializzazione dell automa e dopo ogni sua evoluzione. SUGGERIMENTI 1: 1. Per realizzare il passo di evoluzione nel metodo evolvi() potreste utilizzare una matrice di ausilio, che chiamiamo aux. Partendo dallo stato di auto, calcolate la configurazione successiva, che memorizzerete in aux. A questo punto dovete 2. Per ottenere l'effetto di avere relazioni di vicinanza cicliche, dovete incrementare o decrementare le coordinate utilizzando l'aritmetica modulare. Ad esempio, se la matrice si chiama a, le celle adiacenti ad a[x][y] sono: - cellula a sud: a[(x+1) % n][y] = a[(x+n+1) % n][(y+m) % m] - cellula a nord: a[(x+n-1) % n][y] = a[(x+n-1) % n][(y+m) % m] - cellula a est: a[x][(y+1) % m] = a[(x+n) % n][(y+m+1) % m] - cellula a ovest: a[x][(y+m-1) % m] = a[(x+n) % n][(y+m-1) % m] - cellula a sud-est: a[(x+1) % n][(y+1) % m] = a[(x+n+1) % n][(y+m+1) % m] - cellula a nord-est: a[(x+n-1) % n][(y+1) % m] = a[(x+n-1) % n][(y+m+1) % m] - cellula a sud-ovest: a[(x+1) % n][(y+m-1) % m] = a[(x+n+1) % n][(y+m-1) % m] - cellula a nord-ovest: a[(x+n-1) % n][(y+m-1) % m] = a[(x+n-1) % n][(y+m-1) % m]

Attenzione: non eliminate i +n e i +m apparentemente ridondanti; sono necessari perché l'implementazione del modulo sui numeri negativi è errata. Esempio di esecuzione Il comando >java Life 8 11 0.1 20 POTREBBE produrre il seguente output (attenzione! Il vostro output potrebbe variare a seconda della inizializzazione delle cellule! L inizializzazione viene fatta con una probabilità!!) + + + o + + + + + + + + + + o + + + + + + + + + + + + + + + + o + Numero Cellule vive dopo inizializzazione=7 Cellule vive dopo evoluzione numero 1=0 Notate che, nonostante siano state richieste 20 evoluzioni, il programma si ferma subito dopo la prima perché tutte le cellule sono morte Per dimostrarvi che il vostro programma subisce la variabilità data dall utilizzo di una probabilità per inizializzare il problema, lanciate di nuovo la classe Life con lo stesso input. Io ho ottenuto: >java Life 8 11 0.1 20 + + + + + + + + o + + + o + + + + + + + + + + + + + + o + + + + + + o + + + + + + + + + Numero Cellule vive dopo inizializzazione=4

Cellule vive dopo evoluzione numero 1=0 Il comando >java Life 8 11 0.35 10 POTREBBE produrre il seguente output + o o o + o + o o + + + + + + + + o + + + o + + + o + + + o + o + + + o + + + o + o + + + + o + o o + + + o o + o + o + o + + o o o o + + + o + + + o + + + o + + o + o o o o o Numero Cellule vive dopo inizializzazione=35 + o o o o o + + + + o + + + o o + o + + o + + + + + + + o o o o + + + o + o o o o o + o o o o + o o o o + + o + o o o + o + + o + + + o o o o + o + + + + + o + + o + o + + + o + o + + + + o + + o o + + + + + + o + + o o + + o + o + + + + + o o + + + + o o o + o o + + + + + + + + + + + o + + + + + + + + + o o + + + + + + + + o o + + + + + + + + + + + + + + + + o o + + + + + + + + + o + o + + o + + + + + + o + + o + o + + + + + + + + o + o + + + + + + + + + o + + + + + o o o + + + + + + + + + + + o + o

+ + + + + + o o o + o + + + + + + o + o o + + + + + + + + + o o + o + + + + + + + + + o + + + + + o + + o o + + + + + + o o + + + o + + + + + + o + + + o + + + + + + + o + + + + + + + + + + + o o + + + + + + o o o o + + + + + + + o + + + o + + + + + + o o + + o o + + + + + o o o + + + + + + + + + + o o o + + + + + + + + + o o + + + + + + + + o o o + + + + + + o + + o + + + + + + + o + + o + + + + + + o + + + o o + + + + + o + + + + o o + + + + + o + + + + o + + + + + + + + + o + + + + + + + + o + + + + + + + o o + o o + + + + + + o + o o o + o o + + + o + o o o + o + + + + + + + + + + o + + + + + + + + + o o + + + + + o o + o + + + + + + o + + + o o + + + + o o + o + + + o o + + o o + o o + + o + + + + + + + o o + + + + + + + + + + + o o

+ + + + + o + o o o + + + + o o + o + o o + o + + o o + o + + + o Cellule vive dopo evoluzione numero 1=43 Cellule vive dopo evoluzione numero 2=15 Cellule vive dopo evoluzione numero 3=15 Cellule vive dopo evoluzione numero 4=15 Cellule vive dopo evoluzione numero 5=18 Cellule vive dopo evoluzione numero 6=17 Cellule vive dopo evoluzione numero 7=22 Cellule vive dopo evoluzione numero 8=18 Cellule vive dopo evoluzione numero 9=19 Cellule vive dopo evoluzione numero 10=24