PDA

View Full Version : [Java] Programma SuperEnalotto


Prezzemolino
28-08-2014, 13:07
Salve a tutti, mi presento, mi chiamo Mirko ho 19 anni e sono di firenze, frequento la classe 5° informatica e sono qui per chiedervi una mano nella realizzazione di questo semplice programma.

SuperEnalotto - Compilazione Schede + Stampa

Ho realizzato l'interfaccia di questo programma chiedendo all'utente di inserire i 6 numeri per ogni pannello, mi baserò solo ed esclusivamente a schede da 5 pannelli (in quanto sono quelle che usa mio padre), lo scopo di questo programma è far inserire i numeri relativi ad ogni pannello e stamparli in modo formattato sulla scheda stessa.

Mi trovo al momento bloccato nella realizzazione della funzione stampa in quanto, non riesco a concretizzare un modo per far si che all'inserimento del numero, per esempio, 12 si stampi nel numero 12 un quadratino. il problema principale dunque è riusacire a formattare tutti i numeri di tutti i pannelli, in punti precisi del foglio ma non riesco a capire come fare.

avevo anche pensato di creare un file excel ma non è stata una buona idea.
ho provato a cercare sulla rete algoritmi di questo tipo ma non c'è stato modo di trovarne, voi sareste in grado di aiutarmi?

Freaxxx
28-08-2014, 13:15
la tabella da dove la prendi ?

la tabella è già prestampata su un foglio e tu hai le sue dimensioni, oppure devi stampare numeri e tabella insieme ?

EDIT:

per qualcosa di basico

http://docs.oracle.com/javase/tutorial/uiswing/misc/printtable.html
http://docs.oracle.com/javase/tutorial/uiswing/misc/printtext.html

Prezzemolino
28-08-2014, 16:57
la tabella da dove la prendi ?

la tabella è già prestampata su un foglio e tu hai le sue dimensioni, oppure devi stampare numeri e tabella insieme ?

EDIT:

per qualcosa di basico

http://docs.oracle.com/javase/tutorial/uiswing/misc/printtable.html
http://docs.oracle.com/javase/tutorial/uiswing/misc/printtext.html

Al di là dei comandi print che + o - conosco, non saprei come utilizzarli, provo a spiegarti meglio:

Al momento prendo in input solo i numeri del'utente. questi numeri vengono tenuti in una tabella contentente 5 record (6 numeri per ciascun record) - ((I record rappresentano i 5 pannelli)

Non importa come, l'importante è raggiungere l'obiettivo di riuscire a codificare questi numeri della tabella in quadratini (da sovrapporre al numero stesso nel processo di stampa della scheda).
Attualmente non conosco le misure della scheda ma prenderle non sarebbe un problema come invece sarebbe sapere cosa farci di queste misure. Immagino che bisogna inserire manualmente le cordinate di ogni singolo quadratino ma non ne sono molto sicuro anche perchè sarebbe una faccenda estremamente lunga

Prezzemolino
03-09-2014, 13:11
Ho chiesto troppo?

wingman87
03-09-2014, 13:58
Non so se ho capito bene ma non mi sembra complicato calcolare le coordinate dei numeri. Basta sapere le coordinate della tabella che contiene i numeri e poi tenere in considerazione la dimensione di ogni singolo numero e il numero di righe e colonne della tabella. Una volta che sai questo calcolare le coordinate di ogni numero non è difficile. E ho detto calcolare: non devi sicuramente specificare a mano tutte le coordinate di ogni singolo numero.

Prezzemolino
03-09-2014, 18:37
beh per spiegarmi meglio basta prendere una schedina reale del superenalotto


https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTUyaOsRrWZQLZ-7DyPT2gXWDYA7ITt_BYh9uvKaHwVg3NuzELW

io ottengo i numeri dall'utente, gli pongo in un archivio e da qui devo essere in grado di marchiare sulla scheda (stampando) un quadratino (o quel che si voglia) sul numero preciso. a partire dai comandi, mi ci sono messo ma non riesco proprio a capire come potrei fare!

wingman87
03-09-2014, 21:27
Allora, seguendo l'immagine (l'ho cercata a una risoluzione leggermente più alta):
http://sistemilotto.myblog.it/media/01/02/426881953.GIF
tenendo conto che per coordinate intendiamo l'angolo in alto a sinistra.
Poniamo quindi che la prima tabella abbia coordinate (X,Y) e le successive abbiano coordinate (X,Y+h*i) dove h è l'altezza di ogni tabella e i è l'indice della tabella.
Poniamo poi che ogni tabella sia suddividibile in 7x14 celle, 7 righe e 14 colonne. Questo significa che la coordinata di ogni cella sarà:
(X + wCel * iCol,Y+h*i + hCel * iRow)
dove wCel e hCel sono la larghezza e l'altezza di ogni singola cella (puoi ricavarli dividendo per 14 e per 7 la larghezza e l'altezza della tabella) e iCol e iRow sono l'indice di riga e l'indice di colonna (la prima riga e la prima colonna hanno indici 0 e 0).
Ora dato un numero devi calcolare l'indice di riga e colonna corrispondente e grazie a questi indici puoi applicare la formula scritta sopra.
Sappiamo che le prime 8 celle di ogni tabella non sono utilizzate, ne consegue che: dato un numero N
- la riga è data dalla divisione intera (N - 1 + 8)/14.
(il -1 è dovuto al fatto che gli indici di riga e colonna partono da zero)
- la colonna è data dal resto della stessa divisione intera

Spero di aver scritto tutto giusto, se non ti torna chiedi pure.

Tesinevb
10-09-2014, 19:44
beh per spiegarmi meglio basta prendere una schedina reale del superenalotto


https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTUyaOsRrWZQLZ-7DyPT2gXWDYA7ITt_BYh9uvKaHwVg3NuzELW

io ottengo i numeri dall'utente, gli pongo in un archivio e da qui devo essere in grado di marchiare sulla scheda (stampando) un quadratino (o quel che si voglia) sul numero preciso. a partire dai comandi, mi ci sono messo ma non riesco proprio a capire come potrei fare!

devi innanzitutto sapere come stampare se in modo orizzontale o verticale
poi stabilito questo
ti faccio un esempio con il vecchi totocalcio:

se orizzontale
hai 12 colonne e 14 righe quindi la stampante stamperà, se il segno è 1, il pallino nero sulla prima colonna nella prima riga delle prime 3 colonne e prima riga poi la puntina della stampante passerà alle colonne numero 4, 5, 6 sempre prima riga, per stampare il secondo segno e fosse "x" lo stamperà nella 5° colonna della prima riga...è chiaro?

per valutare le distanze ti devi aiutare con l'istruzione "margin" in visual basic mi ricordo che usavo questo print. margin un'istruzione di scostamento.

In definitiva ti devi aiutare usando una funzione di scostamento addizionando la varabile a seconda di dove vuoi che il pallino sarà stampato. Quando passi alla seconda riga la variabile scostamento la resetti a 0 e poi l'addizione, ripeto, dove vuoi che venga stampato il pallino.

azz quanto ho scritto

chiaro che devi incrementare anche la variabile dello scostamento verticale sempre con il margine di stampa che vuoi... fai delle prove e otterrai quello che vuoi fare