Novità

OVERFLOW

salvo50

Advanced Member >PLATINUM PLUS<
Ciao a Tutti!

Questo è uno script fatto da Joe, dove la variabile N contiene un numero con più di 30 cifre e non va in errore di overflow


Codice:
 ' PIRAMIDARE Scritto da Joe91   09/03/2007 V.3.0
' Aggiunta Funzione Fuori9      24/07/2007 Rosanna
' Nuova Impaginazione risultati 25/07/2007 Joe91

Sub Main()
Dim c()
n = InputBox("Inserisci il numero di cui calcolare la piramide",,"000000000987654321012345678999999999")
For A = 1 To Len(N) : Scrivi Mid(n,a,1) & " ",0,0 : Next : Scrivi 'Formatta e scrive la formazione iniziale
For fine = Len(n) To 2 Step - 1 'Impone la fine dei calcoli per mancanza di Numeri
Sp = Sp + 1 : For pir = 1 To sp : Scrivi " ",0,0 : Next
x = fine : r = "" : ReDim c(x) 'memorizza la (nuova) lunghezza e pulisce il risultato
For a = 1 To x : c(a) = Mid(n,a,1) : Next 'scompatta i numeri
For a = 1 To x - 1 'per ogni numero da sinistra a destra
t = Fuori9(c(a) + c(a + 1)) 'sommo i due valori col fuori9
Scrivi t & " ",0,0
r = r & t 'Ricompone via via la formazione risultante
Next 'Passa al prossimo numero
Scrivi 'A capo su altra riga.
n = r 'Rimemorizza la formazione calcolata
Next 'Ripete le operazioni di calcolo
Scrivi
End Sub
'------------------------------------------------------------------------------------------
Function Fuori9(nn)
If nn -(9*Int(nn/9)) = 0 Then Fuori9 = 9 Else Fuori9 =(nn -(9*Int(nn/9)))
End Function



quest'altro è uno script con una variabile uguale ma con solo 10 cifre è va in errore di overflow, anche col fuori90 e con questo tipo di divisione < \ > invece con 9 cifre non va in errore, siccome devo fare dei calcoli (divisioni, fuori90, mod, moltiplicazioni) con numeri superiori alle nove cifre e per non farli mano, volevo farli tramite script e dato che vanno in errore, chiedevo se esiste qualche "trucco" o tipo di variabile diversa per poter correggere questa anomalia


Codice:
 Option Explicit
Sub Main()
    Dim A,X
    A = InputBox("Inserisci il numero ",,"7654321012 ")
    X = A Mod 90
    Scrivi Format2(A)
    Scrivi
    Scrivi Format2(X)
End Sub
 
Ultima modifica:
Questo "scherzetto" lo fà anche col Fuori90, col FuoriX e col divisore \,

Mi sembra di capire (ho tradotto con google) che bisogna fare una divisione normale e poi calcolare il resto.

Grazie!
 
si hai capito bene .. con la seguente funzione il resto al numero che passi modulo 90 è 22

Codice:
Option Explicit
Sub Main()
    Dim A,X
    A = InputBox("Inserisci il numero ",,"7654321012")
    'X = A Mod 90
    X = ModX(A,90)
    Scrivi Format2(A)
    Scrivi
    Scrivi Format2(X)
End Sub
Function ModX(n,m)
    ModX = n -(Fix(n/m) * m)
End Function
 
Ciao Salvo.

Si ... ma non è un numero.

:)
 
Ultima modifica:
Grazie!

Però non riesco a capire le variabili n e m

Function ModX(n,m)
ModX = n -(Fix(n/m) * m)
End Function

Appaiono per la prima volta, da nessuna parte le è stato assegnato un valore, cioè cosa divide quando fa per esempio n/m

Ho constatato che alla variabile A le posso assegnare massimo 17 cifre, si può modificare il numero delle cifre o è un valore fisso?
 
Significa esattamente quello che c'è scritto.

ENNE non è un numero

di conseguenza,, il mio script che hai proposto

non tratta ENNE "da numero".

Perlomeno ... per come lo si intenderebbe normalmante essere

trattato da numero.

Se poi ... si vuole essere più attenti, al lotto, normalmente, non ci sono numeri,

ma, è altro discorso piuttosto difficile da comprendere ad un lottologo.

Codice:
Option Explicit

Sub Main

Dim N,M

N="010203040506070809101112131415"

M="161718192021222324252627282930"

Scrivi N + M

End Sub


:)
 
Ultima modifica:
n è il numero oggetto del calcolo ed m è il modulo.
Sono i parametri della funzione ModX

quando la funzione ModX viene richiamata vengono passati dei valori reali tra le parentesi quindi essa opera sulle variabili m ed n i cui valori dipendono dal chiamnte.

infatti nella sub MAIN quando modX viene richiamata riceve 2 valori reali , uno il numero inserito nell'inputbox l'altro il modulo 90.

volendo ad esempio il resto a 5 modulo 2 si scirverebbe Resto = Modx(5,2)
 
Ultima modifica di un moderatore:
Ciao a Tutti!

Per LiugiB, credo di aver capito

Per Joe, me lo avevi già spiegato in un altra occasione, anche LuigiB tempo addietro aveva fatto degli esempi, ma è più forte di me, se vedo un numero 123456789 o "123456789" li interpreto allo stesso modo, cercherò in futuro di non fare questo errore, quindi mi verrebbe da pensare che lo scriptino fatto da me andava in errore perchè non era un numero e invece anche togliendo le virgolette va in errore lo stesso, comunque non ha più importanza perchè fino a 17 cifre posso usare lo scriptino di LuigiB.

Codice:
 Option Explicit
Sub Main()
    Dim A,X
    A = InputBox("Inserisci il numero ",,7654321011)
    X = Fuori90 (A)
    Scrivi Format2(A)
    Scrivi
    Scrivi Format2(X)
End Sub
 
Ciao Salvo ...

forse allora è anche un pò al contrario oltre che diverso.

Mi perdonerai se non amo utilazzare parti di discorsi altrui,

ma se metti assieme:

"se vedo un numero 123456789 o "123456789" li interpreto allo stesso modo"

con

"anche togliendo le virgolette va in errore lo stesso,"

Paiono essere due errori diversi e quasi opposti che inducono ad una conclusione sbagliata.

Mi spiego;

* Le virgolette non mettono al riparo dagli errori. Anzi... se presenti, non si dovrebbe sommare.

* Un numero non è una stringa

* Una stringa non è necessariamente un numero.

* La somma di "2 numeri di enne cifre" da come risultato "enne cifre".

(Eventualmente con il riporto di PIU' UNA CIFRA)

* La "somma" di 2 stringhe di enne cifre (che NON E' una "somma") ha come risultato "2 x Enne" cifre.

* CIFRE e NUMERI sono realtà differenti (in alcuni casi apparentemente uguali).

Con i numeri principalmente ... i limiti dipendono essenzialmente dalla "potenza del sistema" disponibile.

:)
 
Ultima modifica:
Per chi come me non ha la teoria, è facile fare confusione, mi sono sbagliato nel confondermi. :)
 

Ultima estrazione Lotto

  • Estrazione del lotto
    venerdì 17 gennaio 2025
    Bari
    10
    87
    77
    23
    60
    Cagliari
    75
    33
    60
    24
    15
    Firenze
    45
    34
    66
    41
    17
    Genova
    05
    65
    15
    53
    86
    Milano
    20
    84
    74
    76
    01
    Napoli
    90
    29
    38
    52
    68
    Palermo
    33
    36
    02
    20
    68
    Roma
    68
    12
    59
    07
    74
    Torino
    03
    22
    29
    90
    28
    Venezia
    81
    24
    35
    18
    03
    Nazionale
    06
    31
    35
    89
    74
    Estrazione Simbolotto
    Bari
    14
    24
    17
    13
    08
Indietro
Alto