Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-11-2015, 22:17   #1
Picchio75
Junior Member
 
Iscritto dal: Nov 2015
Messaggi: 2
Algoritmo fusione array (bilanciato)

Buonasera a tutti,
sto cercando di risolvere un problema e non riesco a trovare la soluzione. Provo a descrivere velocemente il problema.
In un foglio di lavoro EXCEL dati due elenchi di dati (es. colonna A e colonna B) devo creare una terza colonna che sia la fusione delle prime due.
Fin qui tutto bene se non che questa terza colonna deve avere gli elementi di A e B bilanciati ed ordinati, ovvero, l'elenco con elementi minore (es. B) deve essere distribuito nell'elenco totale (C) distribuito equamente tra l'elenco con maggiore elementi (es. A)

Esempio

Colonna A (il trattino - separa gli elementi delle varie caselle)
A-B-C-D-A-B-C-D-A-B-C-D-A-B-C-D

Colonna B (il trattino - separa gli elementi delle varie caselle)
1-2-3-3-4

Il risultato nella colonna C deve essere il seguente:
A-B-C-1-D-A-B-2-C-D-A-3-B-C-D-3-A-B-C-4-D

L'algoritmo potrebbe essere dividere il numero degli elementi della lista maggiore per quello della lista degli elementi minore. Nell'esempio 16:5=3,2
Dispongo gli elementi della lista B ogni 3 elementi della lista A.

Tutto bene se non che quando le liste diventano estremamente lunghe i "resti" che si lasciano per strada pesano alla fine del "merge" facendo si che gli elementi della lista minore si distribuiscano non omogeneamente tra gli elementi della lista maggiore.

Non riesco a trovare l'algoritmo corretto per poter poi codificare la macro in VBA che mi faccia questo lavoro. Qualcuno può aiutarmi?

Grazie
Pablo
Picchio75 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2015, 16:45   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Vedi se questo codice fa al caso tuo:
Codice:
Public Sub merge()
Dim s   As Worksheet
Dim na  As Integer
Dim nb  As Integer
Dim a   As Integer
Dim b   As Integer
Dim lb  As Integer
Dim c   As Integer
    Set s = ActiveSheet
    Call clean(s, 3)
    na = conta(s, 1)
    nb = conta(s, 2)
    For a = 1 To na
        b = 1 + (a - 1) / (na - 1) * (nb - 1)
        c = c + 1
        s.Cells(c, 3).Value = s.Cells(a, 1).Value
        If b > lb Then
            c = c + 1
            s.Cells(c, 3).Value = s.Cells(b, 2).Value
            lb = b
        End If
    Next a
End Sub

Private Function conta(s As Worksheet, col As Integer) As Integer
Dim i   As Integer
    i = 1
    Do While s.Cells(i, col).Value <> ""
        i = i + 1
    Loop
    conta = i - 1
End Function

Private Sub clean(s As Worksheet, col As Integer)
Dim i   As Integer
    i = 1
    Do While s.Cells(i, col).Value <> ""
        Call s.Cells(i, col).Clear
        i = i + 1
    Loop
End Sub
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2015, 22:14   #3
Picchio75
Junior Member
 
Iscritto dal: Nov 2015
Messaggi: 2
Funziona.

Grazie 1000 Daniel


Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Vedi se questo codice fa al caso tuo:
Codice:
Public Sub merge()
Dim s   As Worksheet
Dim na  As Integer
Dim nb  As Integer
Dim a   As Integer
Dim b   As Integer
Dim lb  As Integer
Dim c   As Integer
    Set s = ActiveSheet
    Call clean(s, 3)
    na = conta(s, 1)
    nb = conta(s, 2)
    For a = 1 To na
        b = 1 + (a - 1) / (na - 1) * (nb - 1)
        c = c + 1
        s.Cells(c, 3).Value = s.Cells(a, 1).Value
        If b > lb Then
            c = c + 1
            s.Cells(c, 3).Value = s.Cells(b, 2).Value
            lb = b
        End If
    Next a
End Sub

Private Function conta(s As Worksheet, col As Integer) As Integer
Dim i   As Integer
    i = 1
    Do While s.Cells(i, col).Value <> ""
        i = i + 1
    Loop
    conta = i - 1
End Function

Private Sub clean(s As Worksheet, col As Integer)
Dim i   As Integer
    i = 1
    Do While s.Cells(i, col).Value <> ""
        Call s.Cells(i, col).Clear
        i = i + 1
    Loop
End Sub
Picchio75 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
Claude adatta un modello alle GPU AMD in...
Stangata alla pirateria da Nintendo: col...
Cisco potenzia AI Defense: arriva l'inte...
Basta cambiare pasta termica: la nuova i...
Aura Ink 10: la cornice E-Ink si rifà il...
Auto cinesi bandite dalle caserme tedesc...
Addio criogenia: il prototipo di compute...
iPhone e iPad possono ora emulare la PS3...
SMS falso dell'INPS: l'app da scaricare ...
Da 120 a 520 qubit: il nuovo chip IBM Ni...
Gemini Decisions API: Google sfida OpenA...
City e-bike in carbonio a un prezzo mai ...
PlayStation 5 supera i 100 milioni di un...
LG Sound Suite: l'impianto Dolby Atmos c...
Nintendo cambia tutto: addio al login ra...
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: 12:55.


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