Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare
Mova Z70 Ultra Complete è un robot aspirapolvere che coniuga un'aspirazione potente e un lavaggio con rullo a logica di intelligenza artificiale che guida al meglio nella pulizia di casa: rulli e spazzole estensibili a pulire gli angoli e una base di ricarica che lava e ripristina il robot al emglio delle sue funzionalità dopo ogni azione di pulizia
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Abbiamo provato Google Pixel 11, il più accessibile della nuova gamma: chip Tensor G6 condiviso con i modelli Pro, fotocamera 48 MP con Magic Capture e Stili Fotografici, display Actua da 3000 nit e batteria da 4985 mAh. Ecco come si comporta nell'uso quotidiano, e cosa cambia davvero rispetto a Pixel 11 Pro e Pro XL
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-07-2010, 15:06   #21
Giovanni Tavella
Member
 
Iscritto dal: Feb 2010
Messaggi: 31
Quote:
Originariamente inviato da fero86 Guarda i messaggi
usa il tag CODE e indentalo come si deve perché cosi é illeggibile.



esatto: tipico utente iscritto apposta per trovare una soluzione rapida, semplice e gratuita al suo personalissimo problema, che poi magari due giorni dopo se ne esce con: "RISOLTO, potete chiudere" perché ha trovato altrove un gonzo da cui copiare. e certo, i moderatori stanno al suo servizio e aspettano che lui, nella sua magnanimitá, gli dia il permesso di eliminare la spazzatura che ha creato, no? proporrei il ban dell'IP per questa gente.



quotone; per chi scrive in SMSese invece proporrei un ban semplice


PS: tornando al problema del topic, ancora non leggo da nessuna parte uno straccio di indicazione sul formato del file: binario? binario come?
testuale? testuale come? ASCII? ANSI? Unicode? UTF-8?





Sono iscritto da 5 mesi (è puoi controllarlo dalla data di iscrizione)e non ho mai fatto una sola domanda , questo dovrebbe dimostrarti che quello che hai scritto è una grandissima caxxaxa! Mi sono iscritto perchè mi piaceva il sito , e leggevo anche il forum, ora ho dei problemi ed ho chiesto un aiuto ,non riesco a capire cosa ci sia di sbagliato.
__________________
-.-''
Giovanni Tavella è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2010, 16:15   #22
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Quote:
Originariamente inviato da Giovanni Tavella Guarda i messaggi
Ho grandi dubbi, comunque credo si faccia cosi:...
L'aspetto forse più affascinante della programmazione (che spesso i corsi scolastici non rendono e la professione deprime) è la possibilità di fare quello che più ti aggrada.

Puoi cioè esprimere una soluzione di carattere generale e fare in modo che il programma "ti segua".

L'esercizio ha un limite che sembra proibire l'uso delle liste: non puoi caricare in memoria tutti numeri e poi ordinarli, devi leggere e scrivere tout-court.

Dai libero sfogo alla tua fantasia.

Hai N file che contengono ciascuno una sequenza di numeri in ordine crescente.

Devi scrivere in un file di destinazione l'unione di quelle sequenza, sempre in ordine crescente.

Sappiamo che se le sequenze nei file sono ordinate, trattando i file come se fossero delle pile di numeri, otteniamo il risultato voluto estraendo il minore tra i valori in testa a ciascun file e trasferendolo nella destinazione.

Ergo, in termini generali, la soluzione è piuttosto semplice:

Codice:
finchè almeno uno dei file sorgente ha un valore in testa
    rimuovi dalla sua sorgente il minore tra quei quei valori e mettilo nella destinazione
Quindi abbiamo dei file che sono delle pile di numeri, un file che è una coda di numeri e un affascinante concetto di "numero che è consapevole della propria sorgente" (da cui deve essere rimosso).

Partiamo dalla soluzione:

Codice:
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException {
	SorgenteEntità fileUno = new SorgenteEntità(args[0]);
	SorgenteEntità fileDue = new SorgenteEntità(args[1]);
	DestinazioneEntità fileTre = new DestinazioneEntità(args[2]);
	SequenzaUnioneSorgenti sequenzaUnioneSorgenti = new SequenzaUnioneSorgenti(fileUno, fileDue);
	while(sequenzaUnioneSorgenti.hasNext()) {
	    fileTre.enqueue(sequenzaUnioneSorgenti.next());
	}
    }
}
Che abbiamo? Abbiamo i nostri fileUno e fileDue. Abbiamo la destinazione, fileTre. Abbiamo l'unione ordinata di quei file. Finchè quell'unione ha un valore successivo, lo trasferiamo su fileTre. E il gioco è fatto.

Dov'è il trucco? Il trucco sta nel far si che il linguaggio ci segua cioè nell'andare a creare quelle definizioni particolareggiate che permettano a quelle sette righe di fare ciò che sembra che facciano.

Partiamo dalle sorgenti.

Codice:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class SorgenteEntità {
    private final Scanner scanner;
    private EntitàNumerica current;

    public SorgenteEntità(String filePath) throws IOException {
	scanner = new Scanner(new File(filePath)).useDelimiter("\\D+");
	current = new EntitàNumerica(this, scanner.nextInt());
    }

    public void remove(EntitàNumerica e) {
	if(e != current) {
	    throw new IllegalStateException(e + " != " + current);
	}
	if(hasNext() && scanner.hasNextInt()) {
	    current = new EntitàNumerica(this, scanner.nextInt());
	} else {
	    current = null;
	}
    }

    public boolean hasNext() {
	return current != null;
    }

    public EntitàNumerica peekMinimum(EntitàNumerica entità) {
	if(current == null) {
	    return entità;
	} else if(entità == null) {
	    return current;
	} else {
	    return current.getValore().doubleValue() < entità.getValore().doubleValue() ?
		current : entità;
	}
    }
}
E' una pseudo pila di entità numeriche il cui "peek" è condizionato al fatto che l'elemento effettivamente in testa sia minore di quello ricevuto come argomento dove il minore tra null e X è X, il minore tra null e null e null.

Il metodo remove estrae la testa e passa all'elemento successivo se la testa è l'elemento che si vuole rimuovere, altrimenti rilascia un'eccezione.

Tutta 'sta roba è lì perchè è il minimo necessario e sufficiente affinchè il nostro meccanismo possa funzionare: se ne avessimo ideato un altro avremmo scritto cose affatto diverse.

L'entità numerica è ciò di cui parlavamo prima: un numero che conosce la propria sorgente ed è in grado di rimuoversi da essa.

Codice:
public class EntitàNumerica {
    private final Number VALORE;
    private final SorgenteEntità SORGENTE;

    public EntitàNumerica(SorgenteEntità sorgente, Number valore) {
	VALORE = valore;
	SORGENTE = sorgente;
    }

    public Number getValore() { 
	return VALORE;
    }

    public EntitàNumerica rimuoviDaSorgente() {
	SORGENTE.remove(this);
	return this;
    }
}
Qui EntitàNumerica sa chi sia la sua sorgente perchè essa è parte dei requisiti della sua inizializzazione. La rimozione è l'invocazione di remove che un'entità esegue usando sè stessa come argomento (anche qui si tratta solo di una possibile implementazione).

DestinazioneEntità è anche più stringata:

Codice:
import java.io.IOException;
import java.io.PrintStream;

public class DestinazioneEntità {
    private final PrintStream OUTPUT;
    private boolean first = true;

    public DestinazioneEntità(String file) throws IOException {
	OUTPUT = new PrintStream(file);
    }

    public void enqueue(EntitàNumerica next) {
	if(first) {
	    first = false;
	    OUTPUT.print(next.getValore());
	} else {
	    OUTPUT.print(",");
	    OUTPUT.print(next.getValore());
	}
	OUTPUT.flush();
    }
}
enqueue stampa il valore dell'entità numerica ricevuta come argomento sul file di destinazione (passato come argomento dell'inizializzatore).

Il ghirigoro dell'if-else serve per produrre dei numeri separati da virgola, evitando di mettere virgole di troppo.

L'ultimo pezzo del puzzle è SequenzaUnioneSorgenti. Dal Main vediamo che ha tre caratteristiche:

1. richiede una successione di sorgenti per l'inizializzazione
2. ha un metodo hasNext() che presumibilmente restituisce true se l'unione ha un valore ulteriore, false altrimenti
3. ha un metodo next() che restituisce il valore successivo della sequenza.

Anche qui si tratta di una classe di poche righe:

Codice:
public class SequenzaUnioneSorgenti {

    private final SorgenteEntità[] SORGENTI;

    public SequenzaUnioneSorgenti(SorgenteEntità... sorgenti) {
	SORGENTI = sorgenti;
    }

    public boolean hasNext() {
	for (int i = 0; i < SORGENTI.length; i++) {
	    if (SORGENTI[i].hasNext()) {
		return true;
	    }
	}
	return false;
    }

    public EntitàNumerica next() {
	EntitàNumerica entità = null;
	for (int i = 0; i < SORGENTI.length; i++) {
	    entità = SORGENTI[i].peekMinimum(entità);
	}
	return entità.rimuoviDaSorgente();
    }
}
hasNext() che fa? Dice: per ogni sorgente, se ce n'è almeno uno che ha ancora un valore da darmi, restituisci true. Altrimenti i giochi sono finiti.

next() opera in modo simile: deve restituire il minore tra i valori in testa ad ogni sorgente-pila. Usa un valore cache, inizialmente vuoto. Per ogni pila, la cache diventa il minimo tra la cache e il valore in testa alla pila attualmente esaminata. AL termine del ciclo è giocoforza che (se hasNext restituisce true) entità sia il minimo tra i valori in testa alle pile. Rimuove quindi quel valore dalla sua sorgente (l'entità sa chi sia) e lo restituisce.

Il formato dei file in input è specificato da SorgenteEntità.

new Scanner(new File(filePath)).useDelimiter("\\D+");

questo significa che lo scanner usa come delimitatore una qualsiasi successione di caratteri che non siano cifre. In soldoni, piglia solo numeri interi.

E questa è una soluzione. Come vedi è fatta di pochi piccoli pezzi dal significato peraltro indecifrabile a meno che non si conosca l'idea da cui si è partiti: con quell'idea le cose dovrebbeo assumere il loro senso.

L'ho scritta per darti un'idea del modus operandi: non limitarti a ciò che sai del linguaggio o a ciò che il linguaggio offre attraverso le sue librerie. Pensa a come risolveresti tu il problema da un punto di vista astratto, se potessi avere a disposizione tutti gli strumenti che preferisci, tutte le definizioni che puoi dare. A quel punto il programma, qualsiasi programma, non sarà altro che un mettere insieme definizione specifiche con quelle, più generali, offerte dalla piattaforma che decidi di usare.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2010, 18:33   #23
Giovanni Tavella
Member
 
Iscritto dal: Feb 2010
Messaggi: 31
grazie PGI-bis, ora studiero per bene quello che hai scritto...ti farò sapere se riusciro a capire questi "benedetti" file ... grazie
__________________
-.-''
Giovanni Tavella è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2010, 18:33   #24
Giovanni Tavella
Member
 
Iscritto dal: Feb 2010
Messaggi: 31
grazie PGI-bis, ora studiero per bene quello che hai scritto...ti farò sapere se riusciro a capire questi "benedetti" file ... grazie
__________________
-.-''
Giovanni Tavella è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2010, 19:56   #25
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da Giovanni Tavella Guarda i messaggi
Sono iscritto da 5 mesi (è puoi controllarlo dalla data di iscrizione)e non ho mai fatto una sola domanda ,
puoi esserti iscritto anche due minuti fa, il regolamento lo devi leggere lo stesso, il non aver mai fatto domande non vedo come possa giustificarti alcunché.



Quote:
questo dovrebbe dimostrarti che quello che hai scritto è una grandissima caxxaxa!
non leggo alcuna dimostrazione nel post che sto quotando, e una "caxxaxa" non so neanche cosa sia.



Quote:
Mi sono iscritto perchè mi piaceva il sito , e leggevo anche il forum, ora ho dei problemi ed ho chiesto un aiuto ,non riesco a capire cosa ci sia di sbagliato.
1) titolo irregolare;
2) non hai usato il tag CODE;
3) di conseguenza non hai neanche potuto indentare il codice;
4) sarebbe gradito leggere italiano corretto a meno di (sporadiche) sviste ortografiche.

EDIT
5) contestualizza: oramai hai modificato il post iniziale, ma ti garantisco che non era molto lucido (non che adesso sia perfetto comunque).

Ultima modifica di fero86 : 18-07-2010 alle 20:00.
fero86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre Recensione Google Pixel 11: non ha l'HiLight dei...
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
22 offerte Amazon da non perdere, dalla ...
Bose QuietComfort Earbuds a 129,95€: ANC...
L'unico con tante scorte, non fatevi sca...
Torna il super doppio sconto sulle e-bik...
Offerte Amazon componenti PC: RTX 5060 T...
Crucial Pro DDR5 da 32GB a 389,99€: perc...
Fable 5, il modello più potente d...
PC all-in-one Lenovo super elegante, per...
Lo Smart TV più venduto su Amazon...
Periferiche gaming in offerta su Amazon:...
L'IA non è una bolla, ma pu&ograv...
Il cinema in salotto: oggi TV Xiaomi QLE...
Passa a ho. Mobile, fino a fine agosto c...
Ai Giochi di Pechino i robot prendono fu...
Arianespace Ariane 6: lanciato il satell...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v