Discussione:
tombola!
(troppo vecchio per rispondere)
Gulp®
2013-01-15 11:46:33 UTC
Permalink
Tombola.
Purtroppo ancora non con il punto esclamativo come da oggetto.

90 numeri casuali sono posti in una matrice Estraendi(1 to 90)
devo stamparli tutti, ma 5 per riga su 3 righe per cartella.
Le cartelle sono 6, tre a sinistra e tre a destra in un foglio A4
(Printer.Orientation = vbPRORLandscape). Totale righe 18, colonne 18.
Nelle colonne devo rispettare la posizione delle unità, prima decina,
seconda decina ecc.
Ho fatto così:

dim Casa(17,8)as boolean 'individua tutte le caselle disponibili
dim rg(17) As Integer ' per contare max 5 numeri per riga

For i = 1 To 90
Estratto = Estraendi(i)
For r = 0 To 17 'cicla le righe
If rg(r) = 5 Then GoTo prosegui
RSCol = TrovaCol(Estratto) 'per posizione matrice
sd = "sx"
If r > 8 Then sd = "dx"
Colonna = TrovaCol(Estratto, sd)'per stampa sx-dx
If Casa(r, RSCol) = False Then 'se non occupata
FindXY r, Colonna
Printer.CurrentX = theX
Printer.CurrentY = theY
Printer.Print Estratto
Casa(r, RSCol) = True 'occupa la casella
rg(r) = rg(r) + 1 'conta i numeri per riga
totStampati = totStampati + 1
Exit For
End If
prosegui:
Next r
Next i

Printer.EndDoc

TrovaCol individua una delle 9 colonne della matrice, quando presenta
l'opzione sd, aumenta di 9 il numero di colonna, determinando il
CurrentX per la stampa sulle cartelle a sinistra.
FindXY determina le coordinate di stampa.

Il codice non stampa tutti 90 i numeri,ma 89, oppure 88: evidentemente
in fondo al ciclo si ritrova con numeri che non trovano collocazione su
casella libera.

Qualche suggerimento?
Grazie in anticipo.

P.S. Normalmente non sarebbe corretto postare codice, ma un problema del
genere è difficilmente spiegabile altrimenti. Mi scuso.
--
Gulp®
vbMizio
2013-01-15 13:43:55 UTC
Permalink
Ciao,
onestamente non mi sono messo ad analizzare tutto il codice, ma mi viene in
mente una cosa...
la tua matrice di estraendi, contiene tutti i numeri da 1 a 90?
O si tratta di una matrice di numeri casuali da 1 a 90? Cioe', potrebbe
capitare che hai 2 volte il 4, 3 volte il 15 e via di seguito?
Immagino che la mia prima ipotesi sia quella corretta.
Ad occhio mi viene in mente che potrebbe non esserci "spazio" per un numero
= 80, questo perche' nella colonna dell'80, ci va anche il 90, quindi
quella colonna deve ospitare 11 numeri, a differenza delle altre colonne che
ne devono ospitare 10 e addirittura la prima che ne ospita solo 9 (da 1 a
9).
Hai modo di sapere, di volta in volta, quali numeri non vengono stampati?


__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 7895 (20130115) __________

Il messaggio è stato controllato da ESET NOD32 Antivirus.

www.nod32.it
Gulp®
2013-01-15 14:10:09 UTC
Permalink
Post by vbMizio
la tua matrice di estraendi, contiene tutti i numeri da 1 a 90?
si
Post by vbMizio
O si tratta di una matrice di numeri casuali da 1 a 90?
si

Cioe', potrebbe
Post by vbMizio
capitare che hai 2 volte il 4, 3 volte il 15 e via di seguito?
Impossibile! La matrice estraendi viene creata randomizzando 90 numeri
dall'1 al 90, quindi mescolando tali numeri.

Non vengono stampati numeri doppi, ma invece alla stampa mancano sempre
uno o due numeri.
Ordinandoli sulle colonne 2-3-4-6 ecc., poi 10-15-19 ecc., poi 20,23,29
ecc. e così via sulle 9 colonne e 5 per riga sulle 17 righe,
probabilmente "qualcuno" non trova la casella libera alla fine del ciclo.
Post by vbMizio
Immagino che la mia prima ipotesi sia quella corretta.
Ad occhio mi viene in mente che potrebbe non esserci "spazio" per un
numero >= 80, questo perche' nella colonna dell'80, ci va anche il 90,
quindi quella colonna deve ospitare 11 numeri
Se hai notato non ciclo colonne, ma righe quindi un numero da 80 a 90
ha 18 possibilità per 10 numeri

a differenza delle altre
Post by vbMizio
colonne che ne devono ospitare 10 e addirittura la prima che ne ospita
solo 9 (da 1 a 9).
Hai modo di sapere, di volta in volta, quali numeri non vengono stampati?
posso inserirli in una list1 e vedere.
Effettivamente sulla prima colonna a fronte di diciotto caselle vi sono
9 numeri da inserire e sull'ultima, come dici tu invece, uno in più
rispetto alle altre colonne... mumble..mumble....
--
Gulp®
logicmind
2013-01-15 14:19:32 UTC
Permalink
mi scuso per l'intromissione ... è in C++, ci sono sorgenti e binario
http://www.ennepisoft.it/tombola/tombola.php
magari può essere utile come spunto
Gulp®
2013-01-15 14:29:27 UTC
Permalink
Post by logicmind
mi scuso per l'intromissione ... è in C++, ci sono sorgenti e binario
http://www.ennepisoft.it/tombola/tombola.php
magari può essere utile come spunto
Non conosco il signor C, comunque, da bazzicatore di codice, darò
un'occhiata.

Ma se l'hai scritto tu, visto che oggi è il mio compleanno, lo spunto
per stampare un tabellone di sei cartelle con i famigerati 90 numeri in
modo casuale, me lo potresti dare?

Ciao
--
Gulp®
logicmind
2013-01-15 15:26:48 UTC
Permalink
Post by Gulp®
Post by logicmind
mi scuso per l'intromissione ... è in C++, ci sono sorgenti e binario
http://www.ennepisoft.it/tombola/tombola.php
magari può essere utile come spunto
Non conosco il signor C, comunque, da bazzicatore di codice, darò
un'occhiata.
Ma se l'hai scritto tu, visto che oggi è il mio compleanno, lo spunto
per stampare un tabellone di sei cartelle con i famigerati 90 numeri in
modo casuale, me lo potresti dare?
Ciao
:-) auguri

se ti serve una cosa veloce ... la via più immediata è usare il mio
eseguibile e poi prendere il suo risultato (*) e usarlo nel tuo codice.

Se invece vuoi fartelo tutto da solo ... comincia a spezzare la logica.
Inizia con la generazione di una cartella (dal bussolotto di 90 numeri),
una cartella è fatta da tre righe, ogni riga (di nove colonne) usa
cinque numeri. Questi cinque numeri non possono essere troppo
'appiccicati', quindi magari uno o più di essi possono essere scambiati
con le altre due righe, es. tra due righe:
1,12,23,34,45, , , , |
,15, , ,48,55,66,77, |

dopo lo scambio
1,12,23, ,45, ,66, , |
,15, ,34,48,55, ,77, |

Nel mio codice uso una classe per contenere i (9)-10-(11) numeri per
ciascuna colonna e le estrazioni le faccio da lì, ordino le colonne in
modo da avere in testa quelle con più numeri ancora da estrarre, poi ne
prendo casualmente cinque tra le prime sei. In questo modo si escludono
da sole le colonne terminate.

poi ... varie ed eventuali :-)
Considera che il codice è vecchio di almeno 10 anni, anzi di più, e non
è che me lo ricordi poi tanto.

Ciao

(*) puoi scegliere di creare il file in formato 'tabbed', cioè una
cartella per riga separata da tab, quindi 27 colonne in ciascuna riga
Gulp®
2013-01-15 15:48:16 UTC
Permalink
Post by logicmind
Se invece vuoi fartelo tutto da solo ... comincia a spezzare la logica.
Nella stampa di cartelle, abbastanza grandi, tre su un foglio A4, sono
già riuscito... qui si tratta di stampare invece l'intero tabellone,
cioè 6 cartelle che contengano tutti 90 numeri distribuiti in modo casuale.

Comunque grazie per i consigli, possono tornarmi utili per rivedere il
mio codice... in fin dei conti non si finisce mai di imparare...

Ciao

Ah, grazie, fanno 57 ahia, iahi !
--
Gulp®
logicmind
2013-01-15 16:03:16 UTC
Permalink
Post by Gulp®
Post by logicmind
Se invece vuoi fartelo tutto da solo ... comincia a spezzare la logica.
Nella stampa di cartelle, abbastanza grandi, tre su un foglio A4, sono
già riuscito... qui si tratta di stampare invece l'intero tabellone,
cioè 6 cartelle che contengano tutti 90 numeri distribuiti in modo casuale.
Comunque grazie per i consigli, possono tornarmi utili per rivedere il
mio codice... in fin dei conti non si finisce mai di imparare...
Ciao
ogni sei cartelle si esauriscono i novanta numeri e si ricomincia da
capo ...

ma il tuo problema è la generazione dei numeri o la stampa?
Se è la stampa, riduci il problema alla generazione delle cartelle e poi
le posizioni come vuoi.
Post by Gulp®
Ah, grazie, fanno 57 ahia, iahi !
... siamo quasi coetanei :-(
Gulp®
2013-01-15 16:18:29 UTC
Permalink
Post by logicmind
ogni sei cartelle si esauriscono i novanta numeri e si ricomincia da
capo ...
Quando stampo cartelle, di esaurire i 90 numeri mi importa meno, infatti
per avere un numero enorme di cartelle senza che si ripetano ho deciso
di mescolare i 90 numeri ogni volta che preparo una cartella (15 numeri)
Post by logicmind
ma il tuo problema è la generazione dei numeri o la stampa?
La stampa!

In una matrice ho i 90 numeri già mescolati, ma il mio problema è
stamparli posizionandoli in modo casuale dentro a 162 caselle
disponibili (sei cartelle di tre righe) mantenendone solo 5 per riga
come richiede il gioco.

Complimenti per esserti preoccupato anche dell'"estetica" della
cartella... con lo scambio di numero-riga... non saprei proprio da che
parte iniziare...ma non sono mai stato un programmatore, ma solo una
persona che in modo del tutto autodidatta si è cimentata con VB6, a
volte con qualche buon risultato: il gestionale del mio studio me lo
sono fatto io... ed è la cosa più bella perchè quando vuoglio e quando
serve lo posso modificare.
--
Gulp®
logicmind
2013-01-15 16:51:09 UTC
Permalink
Post by Gulp®
Post by logicmind
ogni sei cartelle si esauriscono i novanta numeri e si ricomincia da
capo ...
Quando stampo cartelle, di esaurire i 90 numeri mi importa meno, infatti
per avere un numero enorme di cartelle senza che si ripetano ho deciso
di mescolare i 90 numeri ogni volta che preparo una cartella (15 numeri)
Post by logicmind
ma il tuo problema è la generazione dei numeri o la stampa?
La stampa!
In una matrice ho i 90 numeri già mescolati, ma il mio problema è
stamparli posizionandoli in modo casuale dentro a 162 caselle
disponibili (sei cartelle di tre righe) mantenendone solo 5 per riga
come richiede il gioco.
Allora parti con l'usare il mio programmino e ti fai generare (almeno)
sei cartelle in formato 'tabbed'.
Ogni riga del file generato è una cartella con le nove per tre caselle
già pronte per l'utilizzo, ogni casella separata da un tab. La casella
vuota è indicata dallo spazio, nelle altre c'è il valore.

Quindi apri il file, leggi una riga per volta, la spezzi in un array (o
matrice, come preferisci) e poi passi quell'array alla tua funzione di
stampa (quindi già una prima separazione tra la preparazione dei dati ed
il loro utilizzo).
Così intanto verifichi la stampa. Poi se vuoi cimentarti nella
costruzione della cartella ... l'importante è che ti generi un array di
ventisette valori.
Post by Gulp®
Complimenti per esserti preoccupato anche dell'"estetica" della
cartella... con lo scambio di numero-riga... non saprei proprio da che
parte iniziare...ma non sono mai stato un programmatore, ma solo una
persona che in modo del tutto autodidatta si è cimentata con VB6, a
volte con qualche buon risultato: il gestionale del mio studio me lo
sono fatto io... ed è la cosa più bella perchè quando vuoglio e quando
serve lo posso modificare.
L'estetica proviene dal filemaker, un programma 'tipo access', in cui ho
creato un db (nel file tombola.fp5 presente nello zip) con i 27 campi e
sistemati 'esteticamente' al loro posto. Poi ho importato il file
'tabbed' ed è tutto ... (la stessa cosa è fattibile anche da access)

Ciao
Gulp®
2013-01-15 18:07:30 UTC
Permalink
Il 15/01/13 17.51, logicmind ha scritto: ... (la stessa cosa è fattibile
anche da access)
Ciao
Proverò.

Grazie molte
Ciao
--
Gulp®
--
Gulp®
XP
2013-01-15 18:08:53 UTC
Permalink
...visto che oggi è il mio compleanno,.....
--
Gulp®
Ci ho messo 2 giorni pieni a capire il problema che avevamo in comune
sull'invio dei messaggi.
Devi inserire un Chr(10) tra la la fine dell'sms e il comando ctrlZ
Penso che tu stia utilizzando un nokia perchè è solo questo che da quei
problemi.
Ciao e auguri.
Gulp®
2013-01-16 08:09:17 UTC
Permalink
...visto che oggi è il mio compleanno,.....
--
Gulp®
Ci ho messo 2 giorni pieni a capire il problema ...
Io a suo tempo dopo un pomeriggio vi rinunciai e optai per un "comodo"
uscita e rientro.
Buono a sapersi. Grazie.
Ciao

Continua a leggere su narkive:
Loading...