[Risolto]Primissimi passi con OO, Basic, ecc.
Regole del forum
Solo richieste di aiuto. Per saluti e presentazioni utilizzate il forum Discussioni Generali e Presentazioni.
Solo richieste di aiuto. Per saluti e presentazioni utilizzate il forum Discussioni Generali e Presentazioni.
[Risolto]Primissimi passi con OO, Basic, ecc.
Ciao a tutti.
Premetto di essermi iscritto oggi al forum dopo avere installato il magnifico OpenOffice da pochi giorni.
Vorrei creare tutti i riquadri 3 x 3 possibili che contengano gli interi da 1 a 9 senza ripetizioni, e che rispettino determinate condizioni (somma dei valori in riga, in colonna e in diagonale compresa tra i valori 10, 11, 12, 14, 15, 16, 17, 18 senza ripetizioni)
Ho pensato di creare una Macro per programmare in Basic una matrice modificabile che rispetti tali condizioni e che mi mostri a video tutte le combinazioni diciamo....................."vincenti".
Come potete immaginare, da neofita di OO e del suo Basic, mi trovo alle prese con una montagna di problemi, per cominciare:
- è la strada giusta per risolvere il mio problema o posso fare di meglio?
- come memorizzare i risultati trovati per poi, alla fine, visualizzarli?
- oppure è meglio visualizzarli man mano che si trovano?
- tutto l'output che riesco ad ottenere è la visualizzazione in un pop up dei valori della prima matrice, uno alla volta.........
E così via. Ciò che chiedo sono solo dritte, consigli, osservazioni, e non un codice di cui fare copia e incolla, anche se qualche frammento esplicativo potrebbe essere utile. Desidero imparare il linguaggio e l'uso di OO in generale. E poi risolvere il quesito che da giorni stiamo dibattendo nel forum di matematicamente.it, sezione "Giochi matematici"
Credo di avere già messo molta carne al fuoco (spero non troppa) e sono ansioso di conoscere qualche parere. Grazie quindi in anticipo a chiunque voglia darmi una mano.
Cordialmente.
Marco
Premetto di essermi iscritto oggi al forum dopo avere installato il magnifico OpenOffice da pochi giorni.
Vorrei creare tutti i riquadri 3 x 3 possibili che contengano gli interi da 1 a 9 senza ripetizioni, e che rispettino determinate condizioni (somma dei valori in riga, in colonna e in diagonale compresa tra i valori 10, 11, 12, 14, 15, 16, 17, 18 senza ripetizioni)
Ho pensato di creare una Macro per programmare in Basic una matrice modificabile che rispetti tali condizioni e che mi mostri a video tutte le combinazioni diciamo....................."vincenti".
Come potete immaginare, da neofita di OO e del suo Basic, mi trovo alle prese con una montagna di problemi, per cominciare:
- è la strada giusta per risolvere il mio problema o posso fare di meglio?
- come memorizzare i risultati trovati per poi, alla fine, visualizzarli?
- oppure è meglio visualizzarli man mano che si trovano?
- tutto l'output che riesco ad ottenere è la visualizzazione in un pop up dei valori della prima matrice, uno alla volta.........
E così via. Ciò che chiedo sono solo dritte, consigli, osservazioni, e non un codice di cui fare copia e incolla, anche se qualche frammento esplicativo potrebbe essere utile. Desidero imparare il linguaggio e l'uso di OO in generale. E poi risolvere il quesito che da giorni stiamo dibattendo nel forum di matematicamente.it, sezione "Giochi matematici"
Credo di avere già messo molta carne al fuoco (spero non troppa) e sono ansioso di conoscere qualche parere. Grazie quindi in anticipo a chiunque voglia darmi una mano.
Cordialmente.
Marco
Ultima modifica di Teorema55 il martedì 1 agosto 2017, 18:53, modificato 1 volta in totale.
Le persone credono di essere libere, ma sono solo libere di crederlo.
Jim Morrison
Jim Morrison
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Con il basic quello esercizio sarebbe molto difficile. Con python invece, un linguaggio abbastanza bene integrato con OpenOffice/LibreOffice, diventa molto più facile!
Ecco un esempio per ottenere le combinazioni che desideri:e per trasformarle in una matrice inseribile in Calc:
Se sei neofita, imparare python o basic sarà uguale penso...
Allego un file con l'intero codice:
Ecco un esempio per ottenere le combinazioni che desideri:
Codice: Seleziona tutto
from itertools import permutations
def getseries():
def isvalid(serie):
lines = (serie[0:3], serie[3:6], serie[6:9], # rows
serie[0::3], serie[1::3], serie[2::3], # columns
serie[0::4], serie[2:-1:2]) # diagonals
return all(sum(line) in limits for line in lines)
limits = range(10, 18+1)
P = permutations(range(1,10))
return (serie for serie in P if isvalid(serie))
Codice: Seleziona tutto
from itertools import chain, zip_longest
def series2calcarray(series):
def grouper(iterable):
return zip_longest(*[iter(iterable)]*n, fillvalue=fillvalue)
n = 3
fillvalue=''
# <serie+('',)> permette di interporre una riga vuota
res = [grouper(serie+('',)) for serie in series]
return list(chain(*res))
Allego un file con l'intero codice:
Codice: Seleziona tutto
from itertools import permutations, chain
try:
from itertools import izip_longest as zip_longest
except ImportError:
from itertools import zip_longest
from com.sun.star.sheet.CellFlags import VALUE, STRING
DOWN, UP = 10, 18
MAXCOL = 15
STARTCOL, STARTROW = 1, 1
DEST_SHEET = "riquadri"
def crea_riquadri(event=None):
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.Sheets.getByName(DEST_SHEET)
sheet.clearContents(VALUE|STRING)
series = getseries()
data = getseries()
data = series2calcarray(series)
# dividerer in colonne
maxrows = getmaxrows(data)
startcol = STARTCOL
while data:
column = data[:maxrows]
dest = sheet.getCellRangeByPosition(startcol, STARTROW, startcol+len(column[0])-1, len(column)-1+STARTROW)
startcol += len(column[0])+1
dest.setDataArray(tuple(column))
dest.Columns.OptimalWidth = True
del data[:maxrows]
def getseries():
def isvalid(serie):
lines = (serie[0:3], serie[3:6], serie[6:9], # rows
serie[0::3], serie[1::3], serie[2::3], # columns
serie[0::4], serie[2:-1:2]) # diagonals
return all(sum(line) in limits for line in lines)
limits = range(DOWN, UP+1)
P = permutations(range(1,10))
return (serie for serie in P if isvalid(serie))
def series2calcarray(series):
def grouper(iterable):
return zip_longest(*[iter(iterable)]*n, fillvalue=fillvalue)
n = 3
fillvalue=''
# <serie+('',)> permette di interporre una riga vuota
res = [grouper(serie+('',)) for serie in series]
return list(chain(*res))
def getmaxrows(data):
x = len(data) // MAXCOL
return x+(4-x%4)
Editato: Versione corretta |
Ultima modifica di hubert lambert il mercoledì 26 luglio 2017, 21:48, modificato 3 volte in totale.
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Win7 + LinuxMint
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Ciao e benvenuto sul forum @Teorema55.
Se ti vuoi presentare puoi farlo qui: viewforum.php?f=16
Buon proseguimento.
Se ti vuoi presentare puoi farlo qui: viewforum.php?f=16
Buon proseguimento.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Grazie a entrambi, ragazzi, davvero.
Rimando le presentazioni alla sezione ad hoc.
Ciao, per ora.
Marco
Rimando le presentazioni alla sezione ad hoc.
Ciao, per ora.
Marco
Le persone credono di essere libere, ma sono solo libere di crederlo.
Jim Morrison
Jim Morrison
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Ciao,
Ecco une terza versione.
Mi dispiace, non avevo capito bene il "senza ripetizioni"! .Teorema55 ha scritto:somma dei valori in riga, in colonna e in diagonale compresa tra i valori 10, 11, 12, 14, 15, 16, 17, 18 senza ripetizioni
Ecco une terza versione.
- Allegati
-
- Teoreme55-v3.ods
- (18.83 KiB) Scaricato 135 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Win7 + LinuxMint
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Grazie infinite, amico mio.
Sto provando il nuovo codice, ma sembra che non dia output (so che esistono matrici con quelle caratteristiche, ne conosco almeno due). Vedrò di risolvere confrontandolo con il precedente.......
Quanto a Python, appena fuori da questa "sfida" (anzi anche durante), è un linguaggio che non conosco assolutamente, mentre di Basic ho una certa infarinatura. Ma, amando le sfide, vedrò di capirne qualcosa, è molto diverso dal Basic..........in che senso intendevi "Con il basic quell' esercizio sarebbe molto difficile" ?
E, infine: come faccio a vedere il codice sorgente della macro?
Notturnamente.
Marco
Sto provando il nuovo codice, ma sembra che non dia output (so che esistono matrici con quelle caratteristiche, ne conosco almeno due). Vedrò di risolvere confrontandolo con il precedente.......
Quanto a Python, appena fuori da questa "sfida" (anzi anche durante), è un linguaggio che non conosco assolutamente, mentre di Basic ho una certa infarinatura. Ma, amando le sfide, vedrò di capirne qualcosa, è molto diverso dal Basic..........in che senso intendevi "Con il basic quell' esercizio sarebbe molto difficile" ?
E, infine: come faccio a vedere il codice sorgente della macro?
Notturnamente.
Marco
Le persone credono di essere libere, ma sono solo libere di crederlo.
Jim Morrison
Jim Morrison
-
- Volontario
- Messaggi: 164
- Iscritto il: venerdì 9 giugno 2017, 13:48
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Con piacere: è un po' come una sfida anche per me .Teorema55 ha scritto:Grazie infinite, amico mio.
Quali sono i tuoi sistema e programma?Teorema55 ha scritto:Sto provando il nuovo codice, ma sembra che non dia output
Da me, l'output è quello, sia con OpenOffice che con Libreoffice:
Funzioni di permutazione, di raggrupamento o taglio di matrici... sono già scritte ed ottime, quando si deve crearle "a mano" con basic. Lo stesso codice sarà molto più lungo e, forse, meno efficace.Teorema55 ha scritto:in che senso intendevi "Con il basic quell' esercizio sarebbe molto difficile" ?
Il più semplice:Teorema55 ha scritto:E, infine: come faccio a vedere il codice sorgente della macro?
- carica ed installa l'estensione APSO, che permette di vedere e di recuperare il codice inserito nel file;
- copialo nella cartella del user: per esempio in Windows, C:\Users\<username>\AppData\Roaming\OpenOffice\4\user\Scripts\python, dove sarà più facile da modificare.
Lo troverai anche allegato qui.
Saluti,
HL
- Allegati
-
- Teorema55.zip
- (1.06 KiB) Scaricato 127 volte
OpenOffice 4.1.2/4.1.4 | LibreOffice 5.4.4/6.0
Win7 + LinuxMint
Win7 + LinuxMint
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Ho Windows 10 upgradato da Windows 7 ed uso OpenOffice 4, Math..........forse dovrei usare il foglio di calcolo?
Sono al lavoro e scaricherò il codice questa sera.
Ti faccio sapere.
Cordialmente.
Marco
Sono al lavoro e scaricherò il codice questa sera.
Ti faccio sapere.
Cordialmente.
Marco
Le persone credono di essere libere, ma sono solo libere di crederlo.
Jim Morrison
Jim Morrison
Re: Primissimi passi con OO, Basic per Macro, matrici e visu
Finalmente sono riuscito a vedere il codice, anche se non a inserirlo nella Macro
Non ti chiedo di darti ulteriormente da fare per risolvere il mio problema: Python deve avere grandi qualità ma è arabo per me. Penso che continuerò a tentare di combinare qualcosina con il Basic, all'occorrenza.
Grazie ancora per il tuo magnifico contributo.
Cordialmente.
Marco
Non ti chiedo di darti ulteriormente da fare per risolvere il mio problema: Python deve avere grandi qualità ma è arabo per me. Penso che continuerò a tentare di combinare qualcosina con il Basic, all'occorrenza.
Grazie ancora per il tuo magnifico contributo.
Cordialmente.
Marco
Le persone credono di essere libere, ma sono solo libere di crederlo.
Jim Morrison
Jim Morrison