edutecnica

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

.