sommare



  • sommare
    di griorgio (utente non iscritto) data: 14/06/2017 12:28:14

    Salve,

    per favore un aiuto forse un pò singolare,
    si tratta di sommare le cifre di un numero.
    Partendo da una formula questa deve tenere conto che se le cifre di un numero
    sono > di 2 cioè 3-4-5-6 tranne l'ultima cifra deve fare la somma delle cifre
    precedenti l'ultima portando a somma ad una sola cifra,
    l'ultima cifra sarà abbinata al numero ottenuto dallasommativa.
    Per chiarezza riporto un pò di esempi:
    752 di questo numero devo sommare solo le prime 2 cifre cioè
    7 + 5 = 12 come si vede ci sono sempre 2 cifre quindi devo
    sommare ancora 1 e 2 che = 3.
    Il numero finale sarà 32;
    numero a 4 cifre: 3752 devo sommare
    3+7+5 = 15 e ancora 1 e 5 = 6.
    Il numero finale sarà 62
    Da distinguere che il numero finale non sarà mai superiore 90
    cioè se 91 oppure 95 rimarrà 1 di 91 e 5 di 95.
    Esempio 180 = 1+ 8 =9 abbinato lo zero = 90
    mentre 185 sarà 1 + 8 = 9 che abbinato il i 5 = 95 ma siccome supera
    90 rimane solo il 5.

    Questi i casi possibili conteplati.

    Grazie



  • di Vecchio Frac data: 14/06/2017 14:20:41

    Questo è carino come esercizio ^_^




  • sommare
    di griorgio (utente non iscritto) data: 14/06/2017 15:17:31

    per renderlo più sfizioso (carino) do un aiutino.

    Per esempio sugli ultimi 2 esempi
    181 =1+8=9 abbino 1 =91 poichè > 90 si può continuare la somma
    delle 2 cifre cioè 1+9=10 ma ancora 1+0=1 senza abbinamento percè
    è stato già abbinato;
    185 = 1+8=9 abbino 5 = 95 poichè > 90 si continua la somma cioè
    9+5=14 e 1+4 =5.

    Questo manualmente ma tradotto in formula?
    ; ;



  • di Vecchio Frac data: 14/06/2017 15:18:24

    No certo, avevo ben capito, ho già steso il codice funzionante ma volevo che provassi tu ^_^




  • sommare
    di griorgio (utente non iscritto) data: 14/06/2017 15:25:14


    ciao Frac

    e la soluzione?

    Ho pensato all'aiutino ma se hai risolto
    l'aiutino va bene per quelli (IO) come me.



  • di Vecchio Frac data: 14/06/2017 15:52:06

    La soluzione è pronta che ti aspetta.
    Non vuoi fare nemmeno un tentativo? :)

    p.s. io ho scritto codice VBA. Non una formula. Per cui se non è questo che cerchi allora bisogna aspettare i maghi delle formule ;)




  • sommare
    di griorgio (utente non iscritto) data: 14/06/2017 16:02:54


    non so ai fini dell'adattamento

    però se non me lo fai VEDERE? il codice.

    Visto che siamo in via di codice / formule
    e se scrivi una FUNCTION non si taglia la testa al toro?
    (che a chiedere sono bravo e a farlo molto ma molto meno)



  • di Vecchio Frac data: 14/06/2017 16:11:15

    Va bene, non insisto altrimenti passo per cattivissimo e non è vero :)
    La function seguente messa in un modulo ti permette di essere utilizzata anche in un foglio come formula: =CIPHER_SUM(numero)
     
    Function cipher_sum(n As Long) As Integer
    Dim s As String, i As Integer, d As Integer
    
        s = CStr(n)
        Do
            If Len(CStr(d)) > 1 Then s = CStr(d) & "0": d = 0
            For i = 1 To Len(s) - 1
                d = d + Mid(s, i, 1)
            Next
        Loop Until Len(CStr(d)) = 1
        
        cipher_sum = d & Right(n, 1)
        
        If cipher_sum > 90 Then cipher_sum = cipher_sum Mod 90
    
    End Function





  • sommare
    di griorgio (utente non iscritto) data: 14/06/2017 16:28:20


    Non sei cattivissimo ma BRAVISSIMO

    In un certo senso prima avevo chiesto un consiglio
    se andava meglio una function ma visto che non mi hai fatto aprire bocca....
    che penso va bene questa soluzione.
    Cosa ne pensi?

    Magnifico grazie



  • di Luca73 data: 14/06/2017 18:59:18

    Scusate mi ci sono buttato anche io
    Al contrario di VF io preferisco usare i numeri e non le stringhe e ho ottenuto la macro sottostante
     
    Option Explicit
    
    
    Public Function SommaDigit(Numero)
    
    
    Dim Resto
    Dim Somma
    If Numero > 10 Then
    
    Resto = Numero Mod 10
    Numero = Numero  10
    Do
        Somma = 0
        Do
            Somma = Somma + Numero Mod 10
            Numero = Numero  10
        Loop Until Numero = 0
        Numero = Somma
    Loop Until Numero < 10
    SommaDigit = (Numero * 10 + Resto) Mod 90
    End If
    End Function






  • di Luca73 data: 14/06/2017 19:04:07

    POi ci ho pensato su un po e tutto qul sommare e risommare mi ha ricordato che null'altro che quello che ci hanno insegnato alle elementari: fare la prova del nove e che riportato a livello di studi più alti null'eltro è che il resto del numero diviso per 9
    e pertanto la function diventa più semplice
     
    Public Function SommaDigit2(Numero)
    
    
    Dim Resto
    Dim Somma
    If Numero > 10 Then
    
    Resto = Numero Mod 10
    Numero = Numero  10
    Numero = Numero Mod 9
    SommaDigit2 = (Numero * 10 + Resto) Mod 90
    End If
    End Function






  • di Luca73 data: 14/06/2017 19:08:38

    Ops ad andare avanti si diventa golosi
    forse è ancora più banale
    e banalmente con la formula
    =RESTO(E6;90)


     
    Public Function SommaDigit3(Numero)
    
    If Numero > 10 Then
    
    SommaDigit3 = Numero Mod 90
    End If
    End Function
    






  • di Luca73 data: 14/06/2017 19:09:32

    Giusto per verifica le tre function e la formula danno lo stesso risultato di VF
    Ciao a tutti





  • sommare
    di griorgio (utente non iscritto) data: 14/06/2017 19:25:27

    ciao Luca,

    diciamo che a me interessa il risultato giusto
    che entrambi Vecchio Frac e Luca mi date.

    In verità non avevo svelato l'arcano del 9
    e detto in formula si risolve anche con la seguente formula:
    =SE(RESTO((A1);90)=0;90;RESTO((A1);90))
    Ho visto che a volte più notizie dai per farti aiutare
    e più si depista l'argomento.

    Io non me ne intendo delle tecniche che aveto usato
    ma vi ringrazio

    che il cielo vi illumini sempre altrimenti come fate a risolvermi i problemi?
    Ciao



  • di Vecchio Frac data: 14/06/2017 22:35:40

    Luca bravissimo, la SommaDigit3 è quella che mi piace di più percè è semplice, lineare, concisa, efficace e naturalmente corretta :)




  • sommare
    di griorgio (utente non iscritto) data: 15/06/2017 13:02:47

    Salve,

    per maggiore approfondimento,

    Premesso che non sarei interessato:

    ho fatto delle prove in fatto di quante cefre è formato il numero;
    la Functione di Vecchio Frac inserendo fino a 10 cifre ti da il risultato
    poi da 11 a 13 da Num! se vai oltre da E + 1;
    mentre quella di Luca fino a 10 va bene con 11 eccetera da valore;
    mentre la formula se la cava fino a 14 dopo ... dopo garantito non mi interessa.

    Solo a titolo notizie approfondite.

    Ciao



  • di Vecchio Frac data: 15/06/2017 13:57:15

    Penso che sia solo questione di dimensionare correttamente il tipo di dato.
    Dichiara tutte le variabili da Integer a Long e rifai i test.