Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente bannato
    Registrato dal
    Mar 2013
    Messaggi
    13

    oridinare file senza caricare elementi in memoria!(quindi no vettori..)

    fiat
    punto
    1200
    Ferrari
    gto
    2400
    alfa
    giulietta
    1400
    meclaren
    mercedes
    500

    ho questo file(ciascuna macchina è definita per costruttore,modello e chilometri) devo ordinarlo gia ho creato tutti i metodi di lettura e stampa,la traccia dice ''Scrivere un programma per l’ordinamento del file rispetto ai chilometri percorsi. Evitare di caricare TUTTE le auto in memoria.''
    io ho provato cosi ma non viene..

    codice:
    public void printFileOrdinato(PrintStream p) throws IOException
    	{
    	Scanner s=new Scanner(new File(file));
    	automobile a=automobile.leggi(s);//questo punta alla prima ''terna del file''
    	automobile b=automobile.leggi(s);//questo alla seconda
             while(a!=null && b!=null)
             {
                  if(a.getkm()<b.getkm())
                      { 
                     a.stampa(p);
                      a=automobile.leggi(s);
                       }
                   else
                   {
                      b.stampa(p);
                      b=automobile.leggi(s);
                   }
    
             }
            if(a==null)
             {
                  while(b!=null)
                 {
                    b.stampa(p);
                      b=automobile.leggi(s);
                  }
             }
             else if(b==null)
             {
                  while(a!=null)
                 {
                    a.stampa(p);
                      a=automobile.leggi(s);
                  }
             }
             }
    cosi non va bene....non funziona come dovrebbe.....

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ho corretto il tuo post aggiungendo i tag CODE, obbligatori come da regolamento interno.

    Leggendo la traccia, comunque, c'è scritto di evitare di caricare tutte le automobili, non di evitare di leggere tutti i kilometraggi. Anche perchè è impossibile stabilire un ordinamento se non si conoscono prima TUTTI i termini di paragone.

    Io chiederei maggiori delucidazioni in merito (oppure posterei la traccia completa, perchè messa così è ridicola) perchè, se da un lato si può fare mantenendo la sola informazione della "posizione" nel file, dall'altro c'è un'inefficienza immane ed incommensurabile nell'andare a ri-leggere (anche più volte) il file una volta concluso l'ordinamento.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente bannato
    Registrato dal
    Mar 2013
    Messaggi
    13
    la traccia completa è cosi:

    Un file, denominato “auto”, contiene le informazioni sulle auto disponibili un una
    concessionaria di auto usate.

    Ogni auto è rappresentata dalle seguenti informazioni, una per riga:

    costruttore
    modello
    chilometri percorsi


    Esempio:
    fiat
    punto
    1200
    Ferrari
    gto
    2400
    alfa
    giulietta
    1400
    meclaren
    mercedes
    500

    Scrivere un programma per l’ordinamento del file rispetto ai chilometri percorsi. Evitare di caricare TUTTE le auto in memoria.

    ci sto sbattendo la testa da ieri

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Secondo me puoi procedere così:

    Fai una prima lettura di tutto il file, cercando e mantenendo l'informazione dell'auto con il kilometraggio minore. Alla fine della lettura, stampa i dati dell'auto trovata.

    Poi fai una seconda lettura di tutto il file, cercando le informazioni dell'auto con il kilometraggio minore (ma maggiore di quello dell'auto scovata prima). Alla fine, stampi i dati dell'auto trovata.

    Prosegui così, finchè non trovi nessuna auto con kilometraggio minore (ma maggiore dell'ultima).

    In questo modo, alla fine di tutti questi cicli, avrai stampato a video le auto in ordine di kilometraggio, senza avere mantenuto in memoria tutte le auto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente bannato
    Registrato dal
    Mar 2013
    Messaggi
    13
    questo piu o meno l avevo intuito..ma non riesco a scrivere il codice per farlo..

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Veramente c'è una bella differenza fra l'algoritmo che ti ho proposto e quello che hai fatto tu.
    Si tratta di prevedere un metodo (cercaMinimo(), ad esempio) che riceve un parametro (l'automobile trovata al passo precedente, null al primo giro) e ritorna l'automobile con kilometraggio minimo (ma maggiore rispetto a quella passata come argomento, se non nulla).

    Il main, a questo punto, è di una banalità impressionante:

    codice:
       public static void main(String[] args) {
          Automobile a = cercaMinimo( null );
          while (a != null) {
             System.out.println("Marca: " + a.getMarca());
             System.out.println("Modello: " + a.getModello());
             System.out.println("KM: " + a.getKm());
             a = cercaMinimo( a );
          }
       }
    Il metodo cercaMinimo deve occuparsi delle seguenti cose:

    1) Aprire il file
    2) Scorrerlo tutto tenendo in memoria solo l'auto con km minimo, maggiore rispetto a quella passata nel parametro (se non nulla).
    3) Chiudere il file.

    Non è così complicato... io ci ho messo meno di 15 minuti per scrivere tutto il programma.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Credo che sia un modo per richiederti di implementare un external sort.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente bannato
    Registrato dal
    Mar 2013
    Messaggi
    13
    fai prima se mi metti il codice..XD

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da rossonero92
    fai prima se mi metti il codice..XD
    Se avessi letto il regolamento interno, sapresti che non è una richiesta ammessa.
    Le indicazioni ti sono state date, ora mettici del tuo.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente bannato
    Registrato dal
    Mar 2013
    Messaggi
    13
    hahah dai un altro aiutino e basta.....non ti è mai capitato che programmi idioti come questi non vogliano uscire mentre di piu difficili invece escono?XP

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.