diff --git a/src/Temi d'esame/Persone/AlberoBinarioDiRicerca.java b/src/Temi d'esame/Persone/AlberoBinarioDiRicerca.java new file mode 100644 index 0000000..7df1f95 --- /dev/null +++ b/src/Temi d'esame/Persone/AlberoBinarioDiRicerca.java @@ -0,0 +1,66 @@ +import java.util.Comparator; +import java.util.Collections; +import java.util.Set; +import java.util.TreeSet; +import java.util.Scanner; +import java.io.PrintStream; + +public class AlberoBinarioDiRicerca{ + + public AlberoBinarioDiRicerca(Scanner sc, Comparator cmp){ + tree = new TreeSet(cmp); + Persona p=Persona.read(sc); + while(p!=null){ + tree.add(p); + p=Persona.read(sc); + } + } + + private AlberoBinarioDiRicerca(Set tree){ + this.tree=tree; + } + + public AlberoBinarioDiRicerca sort(Comparator cmp){ + Set newTree = new TreeSet(cmp); + for(Persona p: tree) + newTree.add(p); + return new AlberoBinarioDiRicerca(newTree); + } + + public void print(PrintStream ps){ + for(Persona p: tree) + p.print(ps); + } + + private Set tree; +} + +class NomeComparator implements Comparator{ + public int compare(Persona p1, Persona p2){ + return p1.getNome().compareTo(p2.getNome()); + } +} + +class CognomeComparator implements Comparator{ + public int compare(Persona p1, Persona p2){ + return p1.getCognome().compareTo(p2.getCognome()); + } +} + +class DataComparator implements Comparator{ + public int compare(Persona p1, Persona p2){ + return p1.getDataDiNascita().compareTo(p2.getDataDiNascita()); + } +} + +class PesoComparator implements Comparator{ + public int compare(Persona p1, Persona p2){ + return ((Double) p1.getPeso()).compareTo((Double) (p2.getPeso())); + } +} + +class AltezzaComparator implements Comparator{ + public int compare(Persona p1, Persona p2){ + return ((Double) p1.getAltezza()).compareTo((Double) (p2.getAltezza())); + } +} \ No newline at end of file diff --git a/src/Temi d'esame/Persone/Persona.java b/src/Temi d'esame/Persone/Persona.java new file mode 100644 index 0000000..01f9b70 --- /dev/null +++ b/src/Temi d'esame/Persone/Persona.java @@ -0,0 +1,112 @@ +import java.util.Scanner; +import java.io.PrintStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.text.ParseException; + +public class Persona{ + + public Persona(String nome, String cognome, Date dataDiNascita, double peso, double altezza){ + this.nome=nome; + this.cognome=cognome; + this.dataDiNascita=dataDiNascita; + this.peso=peso; + this.altezza=altezza; + } + + public String getNome(){ + return nome; + } + + public String getCognome(){ + return cognome; + } + + public Date getDataDiNascita(){ + return dataDiNascita; + } + + public double getPeso(){ + return peso; + } + + public double getAltezza(){ + return altezza; + } + + public void setNome(String nome){ + this.nome = nome; + } + + public void setDataDiNascita(Date dataDiNascita){ + this.dataDiNascita = dataDiNascita; + } + + public void setCognome(String cognome){ + this.cognome = cognome; + } + + public void setPeso(double peso){ + this.peso=peso; + } + + public void setAltezza(double altezza){ + this.altezza=altezza; + } + + public static Persona read(Scanner sc){ + String nome, cognome; + Date dataDiNascita; + double peso, altezza; + SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy"); + + if(!sc.hasNextLine()) return null; + nome=sc.nextLine(); + if(!sc.hasNextLine()) return null; + cognome=sc.nextLine(); + if(!sc.hasNextLine()) return null; + try{ + dataDiNascita=sdf.parse(sc.nextLine()); + } + catch(ParseException exception){ + System.err.println("Impossibile convertire la stringa in data"); + System.err.println("Data impostata a epoch"); + dataDiNascita=new Date(0); + } + if(!sc.hasNextLine()) return null; + try{ + peso=Double.parseDouble(sc.nextLine()); + } + catch(NumberFormatException exception){ + System.err.println("Impossibile convertire la stringa in data"); + System.err.println("Peso impostato a 0"); + peso=0; + } + if(!sc.hasNextLine()) return null; + try{ + altezza=Double.parseDouble(sc.nextLine()); + } + catch(NumberFormatException exception){ + System.err.println("Impossibile convertire la stringa in data"); + System.err.println("altezza impostata a 0"); + altezza=0; + } + + return new Persona(nome, cognome, dataDiNascita, peso, altezza); + } + + public void print(PrintStream ps){ + SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy"); + ps.println(nome); + ps.println(cognome); + ps.println(sdf.format(dataDiNascita)); + ps.println(peso); + ps.println(altezza); + } + + private String nome; + private String cognome; + private Date dataDiNascita; + private double peso; + private double altezza; +} \ No newline at end of file diff --git a/src/Temi d'esame/Persone/Prog-2013-05-28.pdf b/src/Temi d'esame/Persone/Prog-2013-05-28.pdf new file mode 100644 index 0000000..ad282ba Binary files /dev/null and b/src/Temi d'esame/Persone/Prog-2013-05-28.pdf differ diff --git a/src/Temi d'esame/Persone/Test.java b/src/Temi d'esame/Persone/Test.java new file mode 100644 index 0000000..d6cb126 --- /dev/null +++ b/src/Temi d'esame/Persone/Test.java @@ -0,0 +1,11 @@ +import java.io.File; +import java.util.Scanner; +import java.util.Collections; + +public class Test{ + public static void main(String [] args)throws Exception{ + File fl = new File("persone.dat"); + AlberoBinarioDiRicerca tree = new AlberoBinarioDiRicerca(new Scanner(fl), new PesoComparator()); + tree.sort(new NomeComparator()).print(System.out); + } +} \ No newline at end of file diff --git a/src/Temi d'esame/Persone/persone.dat b/src/Temi d'esame/Persone/persone.dat new file mode 100644 index 0000000..57168e2 --- /dev/null +++ b/src/Temi d'esame/Persone/persone.dat @@ -0,0 +1,20 @@ +Pinco Panco +cnome +12/02/1998 +65.9 +177.8 +Raffaele +Mignone +18/07/1996 +71.5 +175.5 +Pluto +Disney +15/09/2009 +34.6 +134.7 +Vincenzo +Manganiello +04/09/2005 +40.7 +146.9 \ No newline at end of file