Esercizio 8
Una popolazione d'insetti ha un ciclo vitale caratterizzato
dai seguenti parametri: -
degli n0 insetti che hanno meno di un'ora di vita il 60%
sopravvive fino alla seconda ora
degli n1 insetti nella seconda ora di vita l'80% sopravvive
fino alla terza ora
degli n2 insetti nella terza ora di vita, nessuno sopravvive
fino alla quarta ora.
il 50% degli n1 insetti (nella seconda ora di vita) generano
3 insetti ciascuno
il 10% degli n2 insetti (nella terza ora di vita) generano
5 insetti ciascuno
A secondo dell'età, l'insetto è:
n0=bianco
n1=verdi
n2=blu.
In questo caso, bisogna simulare l'evoluzione nel tempo di una popolazione
di insetti che ha un ciclo vitale caratterizzato dai seguenti parametri:
- degli n0 insetti che hanno meno di un'ora di vita il 60% sopravvive
fino alla seconda ora
- degli n1 insetti nella seconda ora di vita l'80% sopravvive fino
alla terza ora
- degli n2 insetti nella terza ora di vita, nessuno sopravvive fino
alla quarta ora.
- il 50% degli n1 insetti (nella seconda ora di vita) generano 3
insetti ciascuno
- il 10% degli n2 insetti (nella terza ora di vita) generano 5 insetti
ciascuno.
A secondo dell'età, l'insetto è:
- n0=bianco
- n1=verdi
- n2=blu
Scegliamo di risolvere il problema usando un vettore di interi
T[]= new int[3];
dove
T[0] rappresenta la quantità di insetti della
prima ora di vita.
T[1] la quantità di insetti della seconda
ora di vita.
T[2] la quantità di insetti della terza ora
di vita.
Poi usiamo una variabile ausiliaria intera: n,
per acquisire da tastiera un certo numero di esemplari che costituiscono
la popolazione iniziale degli insetti:
do{
System.out.print("numero di individui della popolazione
iniziale:");
n=in.nextInt();
}while(n<10);
T[0]=n;
Il ciclo in questione ci obbliga ad inserire
un numero maggiore di 9.
In questo modo ci assicuriamo che almeno inizialmente ci siano 10
individui.
La scansione del tempo che trascorre può essere effettuata da un
altro costrutto do-while: ad ogni ciclo effettuato corrisponde un'ora
di tempo.
La prima istruzione eseguita è n=T[0]; cioè,
la variabile n memorizza la quantità di insetti che nell'ora precedente
stavano trascorrendo la prima ora di vita questo perchè questo valore
sicuramente cambierà.
Infatti il 50% degli n1 insetti (della seconda ora di vita) generano
3 insetti ciascuno
T[0]= 3*T[1]*1/2;
Bisogna specificare che usando dei numeri interi la nozione del
50%(=1/2) è approssimata perchè se ammettiamo T[1]=15 non avrebbe
senso che nascano T[0]=3*15*1/2=22,5 esemplari, o ne nascono 22
oppure 23.
Nel nostro caso il valore generato sarà 22 perchè un operazione
fra interi produce un intero (si perde il resto).
La successiva operazione dice che il 10% degli n2 insetti (nella
terza ora di vita) generano 5 insetti ciascuno (che si aggiungono
ai precedenti)
T[0]+= 5*T[2]*1/10;
con gli stessi criteri si ottengono i nuovi valori per gli individui
della seconda e della terza ora. Notiamo come venga usata n
T[1]=n*6/10
per calcolare il nuovo numero di individui che stanno trascorrendo
la seconda ora; questo perchè a questo punto dell'esecuzione il
valore originario di T[0] è stato perso; quindi per far riferimento
al valore che aveva nell'ora precedente bisogna usare la varabile
n, impostata all'inizio del ciclo.
import java.util.Scanner;
class insetti{
public static void main (String args []){
Scanner in=new Scanner(System.in);
char ch;
int n,i,T[]= new int[3];
boolean estinta=false;
do{
System.out.print("numero di individui della popolazione
iniziale:"); n=in.nextInt();
}while(n < 10);
T[0]=n;
System.out.println(T[0]+" bianchi\t"+T[1]+" verdi\t"+T[2]+ " blu");
do {
n=T[0];//memorizzo nella variabili
ausiliaria n gli individui
//con meno di un ora di vita
//il 50% degli n1 insetti (nella
seconda ora di vita)
// generano 3 insetti ciascuno
T[0]= 3*T[1]*1/2;
//il 10% degli n2 insetti (nella
terza ora di vita)
// generano 5 insetti ciascuno
T[0]+= 5*T[2]*1/10;
T[2]=T[1]*8/10;//degli n1 insetti
nella seconda ora di vita l'80%
//sopravvive fino alla terza
ora
T[1]=n*6/10;//degli n0 insetti
che hanno meno di un'ora di vita
//il 60% sopravvive fino alla seconda ora
System.out.println(T[0]+" bianchi\t"+T[1]+" verdi\t"+T[2]+
" blu"); System.out.print("continui (s/n)?:");
ch=in.next().charAt(0);
if(T[0]==0 && T[1]==0 && T[2]==0) estinta=true;
if(estinta) System.out.println("POPOLAZIONE ESTINTA
!");
}while(ch!='n' && estinta==false);
}//fine main
}//fine classe
.