Fondamenti di Informatica
Ingegneria Idraulica Marittima e Trasporti, sede di Civitavecchia
Ingegneria della Sicurezza e Protezione, sede di Civitavecchia

Esercizio di Autovalutazione 3


Si vuole realizzare un programma per la gestione degli iscritti alla maratona 42 Km della città di Roma. Per ogni maratoneta nella corsa è necessario mantenere le seguenti informazioni: nome (String), età (int), peso (double), tempo record personale (double).

Parte 1.

Scrivere una classe Maratoneta per rappresentare le informazioni relative a un maratoneta con la seguente interfaccia:
- Maratoneta(String nome, int eta, double peso, double record) : costruttore con quattro argomenti: nome, età, peso e tempo record;
- String getNome( ) : restituisce il nome del maratoneta; 
- int getEta( ) : restituisce l'età del maratoneta; 
- double getPeso( ) : restituisce il peso del maratoneta;
- double getRecord( ) : restituisce il tempo record personale;
- void setRecord(double r) : imposta il nuovo record personale del maratoneta a r;
- boolean aRischio(): restituisce true se l'età del maratoneta è maggiore o uguale a 45 anni, oppure se ha strettamente meno di 20 anni ed ha un peso superiore a 90 Kg, e false altrimenti;
- boolean uguale( Maratoneta x ) : restituisce true se il maratoneta su cui il metodo è invocato ha lo stesso nome, età e peso del maratoneta x (indipendentemente dalla velocità), e false altrimenti;

Programma di esempio: ProvaMaratoneta.java

public class ProvaMaratoneta {
    public static void main (String[] args) {
        Maratoneta a1 = new Maratoneta("Ottavio Andriani", 30, 54, 2.10);
           
        System.out.println("Nome: "+a1.getNome());
        System.out.println("Eta': "+a1.getEta());
        System.out.println("Peso: "+a1.getPeso()+ " Kg");
        System.out.println("Record personale: "+a1.getRecord());
      
        a1.setRecord(2.0846);
        System.out.println("Nuovo record personale: "+a1.getRecord());

        Maratoneta a2 = new Maratoneta(new String("Ottavio Andriani"), 30, 54, 2.0846);
        if (a1.uguale(a2)) System.out.println("a1 e a2 sono uguali");
        else System.out.println("a1 e a2 sono diversi");
    }
}



Parte 2.

Si assuma che un maratoneta è a rischio se ha un'età maggiore o uguale a 45 anni, oppure se ha strettamente meno di 20 anni ed ha un peso superiore a 90 Kg (vedi metodo aRischio della classe Maratoneta sviluppata nella Parte 1).

Viene fornita una classe LeggiMaratona che mette a disposizione un metodo Maratoneta[] leggi(String nomefile) che legge da un file avente il nome passato come argomento un insieme di record rappresentanti oggetti della classe Maratoneta, e ritorna un array di oggetti Maratoneta opportunamente istanziato.

Programma di prova per Maratona1

import java.io.*;
   
class ProvaMaratona1 {
    public static void main (String[] args) throws IOException {
        Maratoneta[] v = LeggiMaratona.leggi("maratona.dat");
        System.out.println("Eta' media con oltre 50 Kg: " + Maratona1.etaMedia(v, 50) + " (risultato corretto: 35.0)");
        System.out.println("Eta' media con oltre 100 Kg: " + Maratona1.etaMedia(v, 100) + " (risultato corretto: 0.0)");
    }
}

Programma di prova per Maratona2

import java.io.*;

class ProvaMaratona2 {
    public static void main (String[] args) throws IOException{
        Maratoneta[] v = LeggiMaratona.leggi("maratona.dat");
        Maratoneta m = Maratona2.piuVeloceARischio(v);
        System.out.println("Maratoneta a rischio piu' veloce: " + m.getNome() + " (corretto: Luca Pazzi)");
    }
}