Visualizzazione dei risultati da 1 a 10 su 27

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    30

    Problema Ricerca Binaria

    Salve a tutti,
    ho problemi su un esercizio che le seguenti richieste: definire tre classi Studente, Università e tester.
    I dati dello studente sono: matricola(codice a 6 cifre), cognome e nome, data di nascita, altezza e genere. Sono stati forniti anche dati di collaudo.
    Le richieste sono:
    visualizzazione dell'array in forma tabellare;
    visualizzazione dello studente più giovane;
    ordinamento dell'array degli studenti in base all'altezza in maniera crescente(ho utilizzato il SelectionSort);
    calcolo dell'altezza media distinta per genere;
    Tutte queste richieste sono state rispettate e il programma esegue perfettamente quanto richiesto.
    Il problema è che io vorrei inserire una nuova richiesta cioè effettuare una ricerca binaria per ricercare una data altezza.
    Vi posto il codice delle tre classi e spero che possiate aiutarmi a risolvere questo problema.


    codice:
    public class Studente {
        
                public String matricola;
                private String nome;
                private GregorianCalendar data;
                public int altezza;
                private char genere;
                /**
                 * Costruttore
                 * @param matr matricola
                 * @param nom cognome e nome
                 * @param giorno giorno di nascita
                 * @param mese mese di nascita
                 * @param anno anno di nascita
                 * @param alt altezza
                 * @param gen genere(M o F)
                 */
                public Studente(String matr, String nom,int giorno, int mese, int anno, int alt, char gen)
                {
                        matricola=matr;
                        nome=nom;
                        data=new GregorianCalendar(anno, mese-1, giorno);
                        altezza=alt;
                        genere=gen;
                }
               
                /**
                 * Ottiene il numero di matricola
                 * @return matricola
                 */
                public String getMatricola()
                {
                        return matricola;
                }
               
                /**
                 * Ottiene il cognome e nome dello studente
                 * @return nome
                 */
                public String getNome()
                {
                        return nome;
                }
                  
                /**
                 * Ottiene la data di nascita
                 * @return data
                 */
                public GregorianCalendar getData()
                {
                        return data;
                }
               
                /**
                 * Ottiene la data di nascita dello studente in stringa
                 */
                public String getDataString()
                {
                        return String.format("%02d/%02d/%04d", data.get(GregorianCalendar.DATE), data.get(GregorianCalendar.MONTH)+1, data.get(GregorianCalendar.YEAR));
                }
               
                /**
                 * Ottiene l'altezza
                 * @return altezza
                 */
                public int getAltezza()
                {
                        return altezza;
                }
                /**
                 * Ottiene il sesso dello studente
                 * @return genere
                 */
                public char getGenere()
                {
                        return genere;
                }
               
                /**
                 * Visualizza i dati dello studente in stringa
                 */
                public String toString()
                {
                        return "Matricola n. "+matricola+", "+nome+", Nato il "+getDataString()+", altezza "+altezza+", "+genere;
                }
        
    
    
    }
    
    
    public class Università {
        
            
             Studente[] stud= new Studente[0];
           
            /**
             * Aggiunge un nuovo studente
             * @param matricola matricola
             * @param nom cognome e nome
             * @param giorno giorno di nascita
             * @param mese mese di nascita
             * @param anno anno di nascita
             * @param altezza altezza dello studente
             * @param genere genere(M o F)
             */
            public void addStudente(String matricola, String nom,int giorno, int mese, int anno, int altezza, char genere)
            {
                    Studente temp[]=new Studente[stud.length+1];
                    if (stud.length>0)
                            System.arraycopy(stud,0,temp,0,stud.length);
                    temp[temp.length-1]= new Studente(matricola, nom,giorno,mese,anno,altezza,genere);
                    stud=temp;
            }
            /**
             * Ottiene una stringa con una tabella contenente i dati degli studenti
             * @return str
             */
            public String getTable()
            {
                    String format ="%-9s|%-20s|%-11s|%-7s|%-6s";
                    String str;
                    str=String.format(format,"=========","====================","===========","=======","======")+"\n";
                    str+=String.format(format,"Matricola","Cognome e nome","DataNascita","Altezza","Genere")+"\n";
                    str+=String.format(format,"=========","====================","===========","=======","======")+"\n";
                    for (Studente e:stud)
                            str+=String.format(format,e.getMatricola(),e.getNome(),e.getDataString(),e.getAltezza(),e.getGenere())+"\n";
                    str+=String.format(format,"=========","====================","===========","=======","======")+"\n";
                    return str;
            }
           
            /**
             * Ottiene i dati dello studente più giovane
             * @return stringa
             */
            public String getYoungest()
            {
                   
                    Studente min;
                    min=stud[0];
                    for (int i=0;i<stud.length;i++)
                    {
                            if( stud[i].getData().after(min.getData()))
                                    min=stud[i];
                    }
                    return min.toString();
            }
           
            /**
             * Ordinamento per selezione in base all'altezza(crescente)
             */
    
    
            public void SelectionSort()
            {
                    Studente min;
                    int p=0;
                   
                    for(int i=0;i<stud.length;i++)
                    {
                            min=stud[i];
                            p=i;
                            for(int j=i+1;j<stud.length;j++)
                            {
                                    if(stud[j].getAltezza()<min.getAltezza())
                                    {
                                            min=stud[j];
                                            p=j;
                                    }
                                   
                            }
                    stud[p]=stud[i];
                    stud[i]=min;
                    }
            }
            
          public static int ricBinaria(int[] stud, int altezza)
          {
              int indice;
              int inizio;
              int fine;
              int centro;
              inizio = 0;
              fine = stud.length-1;
              indice = -1;
              
              while(indice == -1 && inizio <= fine)
              {
                  centro = (inizio + fine) / 2;
                  if(stud[centro] == altezza)
                      indice = centro;
                  else
                      if(altezza > stud[centro])
                          inizio = centro +1;
                      else
                          fine = centro - 1;
              }
              return indice;
          }
     //       public BinaryArray(int altezza)
     //       {
     //           stud = new Studente[altezza];
     //          for (int i = 0; i < altezza; i++)
            
     //       }
            /**
             * Ottiene l'altezza media distinta per genere
             * @param genere il sesso dello studente('M' o 'F'
             * @return altezza media
             */
            public double getAltezzaMedia(char genere)
            {
                    int conta=0;
                    for (int i=0;i<stud.length;i++)
                    {
                            if(stud[i].getGenere()==genere)
                            {
                                    conta+=stud[i].getAltezza();
                            }
                    }
                    return conta/stud.length;
            }
            
            
            
            /**
             * Menu dell'ufficio statistiche
             * @return stringa
             */
            public String getMenu()
            {
            return "===========================================================\n"+
                            "Ufficio statistiche università - Menu \n" +
                            "===========================================================\n"+
                            "1. Visualizzare gli array degli studenti in forma tabellare \n"+
                            "2. Visualizzare i dati dello studente più giovane \n"+
                            "3. Ordinamento dell'array degli studenti per altezza \n"+
                            "4. Calcolo dell'altezza media distinta per genere \n"+
                            "5. Termina programma\n"+
                            "===========================================================";
            }
    
    
    }
    
    
    public class Tester {
             
            public static void main(String[] args) {
                   
                    Università X= new Università();
                    /**
                     * Aggiunge dati di collaudo
                     */
                    X.addStudente("341208","Panucci Alda",13, 10,1991, 166, 'F');
                    X.addStudente("140662","Lanzarote Ugo",02, 05,1990, 184, 'M');
                    X.addStudente("218040","Ambrosi Carla",24,03,1992, 162, 'F');
                    X.addStudente("210412","Bello Piera",15, 12,1992, 166, 'F');
                   
                    Scanner sc= new Scanner(System.in);
                    int scelta;
                   
                    do
                    {
                            scelta=-1;
                            /**
                             * Stampa menu
                             */
                            System.out.println(X.getMenu());
                           
                            /**
                             * Richede la scelta all'utente
                             */
                    while ((scelta<0)|| (scelta>6))
                    {
                            System.out.print("Opzione numero: ");
                            scelta=sc.nextInt();
                    }
                   
                    switch (scelta)
                    {
                    case 1:
                            {
                                    System.out.println(X.getTable()+"\n\n");
                            };break;
                    case 2:
                            {
                                    System.out.println(X.getYoungest()+"\n\n");
                            };break;
                    case 3:
                            {
                                X.SelectionSort();
                                System.out.println(X.getTable()+"\n\n");
                            };break;
                    case 4:
                            {
                                    System.out.print("Genere Maschile ");
                                    System.out.println(X.getAltezzaMedia('M'));
                                    System.out.print("Genere Femminile ");
                                    System.out.println(X.getAltezzaMedia('F')+"\n\n");
                            };break;
                    case 5:
                    {
                        int position;
                        int cercato;
                        System.out.println("Inserire altezza da cercare");
                        cercato = sc.nextInt();
                        System.out.println();
                        int k;
                        position = X.ricBinaria(null, cercato); // qui non so che fare
                    
                        if(position == -1)
                            System.out.println("L'altezza " + cercato + " non è stata trovata.\n");
                        else
                            System.out.println("L'altezza " + cercato + " è stata trovata");
                        
                    }
                    
                    }
                   
                    } while (scelta!=6);
                   
                   
                    System.out.println("Programma terminato");
                    sc.close();
                   
                   
            }
     
    }

    Spero in un pronta risposta che possa aiutarmi.
    Ultima modifica di LeleFT; 01-09-2014 a 17:12 Motivo: Aggiunti i tag CODE

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.