ciao Domenico
cerco di rispondere ad ogni tua osservazione, ripartendo da prima del weekend, anche se ormai sei andato avanti.
L'algoritmo di cui parlo si occupa di permutazioni.
Le permutazioni possono essere sviluppate in almeno 2 modi diversi, con diverse varianti
il modo più diffuso è quello lessicografico, cioè alfabetico.
Quindi in questo caso, partendo da una qualsiasi permutazione, l'algoritmo trova il numero esatto della posizione in cui essa si trova nello sviluppo lessicografico.
Con qualche algo, che però ormai ho manomesso e non ritrovo, ottengo, dalla permutazione
3,5,1,0,4,2, il valore di posizione
456:
sbagliato, DEVE essere
463 o
464 a seconda che l'algoritmo sia in base 0 o in base 1.
Tutto sta a vedere se l'errore dipende dal codice, cioè dall'uso dei contatori, o dall'uso impreciso della funzione SPLIT(), o da un improbabile lacuna del VBA.(ovvio che io non sono pratico di VBA).
nelle poche variabili usate, almeno tre, F, X() e ORD, per il fatto che possono assumere valori astronomici, devono essere
Variant, in fase di sviluppo non credo sia necessario mettere INTEGER o LONG, si puo' fare dopo.
L'espressione: "
f = 1: For i = 2 To N - 1: f = f * i: Next" è un modo rapido per calcolare il fattoriale di un numero, sta su una sola riga per mia comodità visiva, ed è ampiamente prevista dal VBA, potrei corredare il tutto con dei REM, questo sì
A mio carico devo dire di non aver capito bene l'uso di Inputbox e di Split(), e relative opzioni, ma psicologicamente rifiuto la InputBox, e il MsgBox
Mi sembra di aver capito che la macro dia risultati sballati se gli elementi sono numeri in forma di testo e/o se i numeri sono composti da più di 1 cifra
ecco la macro, che funziona:
-------------------
MACRO
Public Sub Giusta()
Dim N, x(), i, f, k, ord, A
A = Array(3, 5, 1, 0, 4, 2)
N = UBound(A) + 1
ReDim x(1 To N)
For i = 1 To N: x(i) = A(i - 1): Next
f = 1
For i = 2 To N - 1: f = f * i: Next
ord=0
For i = 1 To N - 1
ord = x(i) * f + ord
f = f / (N - i)
For k = i + 1 To N
If x(k) > x(i) Then
x(k) = x(k) - 1
End If
Next
Next
Range("A2").Value = ord
End Sub
-------
Il codice funziona ma per variare la quantità degli elementi bisogna agire al suo interno, altri tentativi da me fatti per modificarla non hanno funzionato.
Mi faresti un gran favore se inserissi tu al posto giusto il subcodice che mi hai fornito stamattina, io col mio nervoso di oggi non ci sono riuscito.
=====================
@tanimon ciao
onestamente la mia domanda iniziale non l'ho posta bene, ma ora è:
come prelevare da A1 un elenco di valori numerici separati da virgole,
da dare in pasto all'elaborazione, invece di modificare manualmente l'espressione A = Array(3, 5, 1, 0, 4, 2)
L'esatto valore della variabile
N è semplicemente la quantità di valori numerici dell'espressione appena scritta, nel caso di qui sopra
6
---------------
scusatemi per questo post logorroico, e ormai mi confondo fra copie e correzioni
LEO
[Modificato da L2018 02/11/2022 22:54]
LEO
https://t.me/LordBrum