Fondamenti di Informatica
Corso di Laurea in Ingegneria Informatica e Ingegneria Automatica

Prova al calcolatore 9 Dicembre 2003


Si vuole realizzare un programma per la gestione delle prove ufficiali dei gran premi di Formula 1.Per ogni pilota e' necessario mantenere le seguenti informazioni: cognome, casa automobilistica, secondi e centesimi di secondo del giro di prova.

Parte 1.

Scrivere una classe Pilota per rappresentare le informazioni relative ad un Pilota con la seguente interfaccia:
- Pilota(String cognome, String casa) : costruttore con due argomenti: cognome e casa automobilistica; il costruttore inizializza secondi e centesimi di secondo a 0;
- Pilota(String cognome, String casa, int secondi, int centesimi) : costruttore con quattro argomenti: cognome, casa automobilistica, secondi e centesimi di secondo;
- String getCognome( ) : restituisce il cognome del pilota; 
- String getCasa( ) : restituisce la casa automobilistica del pilota; 
- int getSecondi( ) restituisce i secondi del giro di qualificazione;
- int getCentesimi( ) : restituisce i centesimi di secondo del giro di qualificazione;
- void setSecondi( ) : modifica i secondi del giro;
- void setCentesimi( ) : modifica i centesimi di secondo del giro;
- boolean piuVeloceDi(Pilota x): restituisce true se il pilota su cui il metodo è invocato è stato piu' veloce del Pilota x, e false altrimenti;
- boolean uguale( Pilota x ) : restituisce true se il cognome e casa automobilistica del pilota su cui il metodo è invocato è uguale a x (indipendentemente da minuti,secondi e centesimi), e false altrimenti;

Programma di esempio: ProvaPilota.java

public class ProvaPilota {
    public static void main (String[] args) {
        Pilota p1 = new Pilota("Schumacher", "Ferrari",80,96);
           
        System.out.println("Pilota: "+p1.getCognome());
        System.out.println("Casa: "+p1.getCasa());
        int minuti=p1.getSecondi()/60;
        int secondi=p1.getSecondi()%60;
        System.out.println("Tempo: "+minuti+ ":"+secondi+":"+p1.getCentesimi());
        
        Pilota p2 = new Pilota("Montoya","Williams");
        System.out.println("P1 e P2 sono uguali:"+p1.uguale(p2));
        
        p2.setSecondi(81);
        p2.setCentesimi(10);
        System.out.println("P1 piu' veloce di P2:"+p1.piuVeloceDi(p2));
    }
}

Soluzione



Parte 2.

Secondo le regole dell formula 1, il pilota in pole position e' il pilota che ha realizzato il miglior tempo, mentre sono esclusi dal gran premio i piloti il cui tempo sia superiore al 107% del tempo del pilota della pole position.

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

Programma di prova per Qualificazioni1

import java.io.*;
   
class provaQualificazioni1 {
    public static void main (String[] args) throws IOException {
        Pilota[] r = qualificazioni.leggi("monza.txt");
        Pilota p = Qualificazioni1.polePosition(r);
        System.out.println("Pole Position a monza per "+ p.getCognome()+"!");
    }
}

Soluzione

Programma di prova per Qualificazioni2

import java.io.*;
   
class provaQualificazioni2 {
    public static void main (String[] args) throws IOException {
        Pilota[] r = qualificazioni.leggi("monza.txt");
        int e = Qualificazioni2.esclusi(r);
        System.out.println("Piloti esclusi a monza: "+ e+".");
    }
}

Soluzione