Avvicinarsi a ZERO



  • Avvicinarsi a ZERO
    di Hellboy (utente non iscritto) data: 29/11/2015 15:27:03

    Ciao ragazzi, sto scrivendo un codice per un mio programma ... ho scritto il codice che mi trova tra 4 numeri quello più piccolo.
    Ora a questo numero, io ci devo sottrarre o aggiungere se negativo, il valore 0.00833333 per avvicinarmi il più possibile a ZERO.
    Ma non so come potrei fare, inutitivamente capisco che devo fare sempre un confronto ma non saprei da dove iniziare.
    Se scrivo un ciclo, do while, while fino a quando ?


    Posto il pezzettino di programma con il quale, una volta individuato il numero più piccolo, dovrei andare a fare somma o sottrazione.

    Per ora mi basta capire come fare l'operazione per la PosizioneX, per le altre vengono da se.

    Grazie anticipate.

     
    Dim ValoreMinimo As Double
    ValoreMinimo = MyMin(PosizioneX.Text, PosizioneY.Text, PosizioneZ.Text, PosizioneC.Text)
    MsgBox " Il valore più piccolo è " & ValoreMinimo
    Select Case ValoreMinimo
              Case PosizioneX.Text
                   MsgBox " Infatti " & PosizioneX.Text
              Case PosizioneY.Text
                   MsgBox " Infatti " & PosizioneY.Text
              Case PosizioneZ.Text
                   MsgBox " Infatti " & PosizioneZ.Text
              Case PosizioneC.Text
                   MsgBox " Infatti " & PosizioneC.Text
    End Select



  • di patel data: 29/11/2015 16:32:56

    prova questa macro e adattala al tuo caso , vale per valori positivi e negativi
     
    Sub a()
    valoreminimo = 0.01
    incremento = 0.00833333
    If valoreminimo < 0 Then
      incremento = -incremento
      While valoreminimo <= 0
        valoreminimo = valoreminimo - incremento
      Wend
    Else
      While valoreminimo >= 0
        valoreminimo = valoreminimo - incremento
      Wend
    End If
    valoreminimo = valoreminimo + incremento
    MsgBox valoreminimo
    End






  • di Hellboy (utente non iscritto) data: 29/11/2015 18:01:41

    Cioè, con una cosa del genere ?

    Se per esempio metto come valore da decrementare 3,
    ottengo:
    2.166667
    1.333334
    0.500001

    NON FUNZIONA.
     
    Public Sub a(ValoreMinimo As Double, incremento As Double)
    If ValoreMinimo < 0 Then
      incremento = -incremento
      While ValoreMinimo <= 0
        MsgBox "(A)" & ValoreMinimo
        ValoreMinimo = ValoreMinimo - incremento
      Wend
    Else
      While ValoreMinimo >= 0
        MsgBox "(B)" & ValoreMinimo
        ValoreMinimo = ValoreMinimo - incremento
      Wend
    End If
    ValoreMinimo = ValoreMinimo + incremento
    MsgBox "Avvicinato a " & ValoreMinimo
    End Sub
    



  • di hellboy (utente non iscritto) data: 29/11/2015 18:07:37

    Ho fatto un casino ... non capisco come adattare il codice a quello che mi interessa.

    Ho un numero X, ci devo sottrarre o aggiungere il valore 0.00833333 ed avvicinarmi il più possibile a ZERO.

    la cosa del valoreminimo è come se fosse un'apporssimazione ? Se è cosi va anche bene, anzi benissimo.



  • di patel data: 29/11/2015 18:38:52

    avevo copiato male, ora ho corretto





  • di hellboy (utente non iscritto) data: 29/11/2015 19:24:12

    Si, avevo capito.
    Ma non capisco come posso utilizzare il tuo codice.



  • di patel data: 30/11/2015 07:41:40

    ma ti funziona come desideravi ? per il resto se non alleghi il tuo file non è possibile aiutarti





  • di Hellboy (utente non iscritto) data: 30/11/2015 09:55:45

    Ho scritto questo codice, secondo voi funziona bene o si puo' migliorare ?

    Vorrei che il risultato si avvicinasse il piùà possibile a Zero, sia che sia il risultato di una somma che di una sottrazione.

    Allego file EXCEL 2007



  • di patel data: 30/11/2015 17:41:29

    sicuro di aver allegato il file giusto ?





  • di Mister_x (utente non iscritto) data: 30/11/2015 18:26:54

    ciao

    una funzione di prova dove metti in 4 celle dei valori e in altra celle il valore da sottrarre o aggiungere

    io ho usato un range di A1:D1 dove ho inserito valori a caso
    con la funzione ho trovato il piu' piccolo e avendo il tuo valore messo in G1 0,00833333 ho impostato questa formula
    in altra cella con decimali alla 25quesima
    10 7 -1 8 _________ 0,00833333
    =zero(A1:D1;G1)
    -0,0000003999999975135000000

    ciao


     
    Option Explicit
    Public Function Zero(valori As Range, minRzero As Double) As Double
    Dim minimo As Double
    Dim max0 As Double, min0 As Double
    minimo = Application.Min(valori)
    max0 = minRzero
    min0 = 0 - minRzero
    Do While minimo > max0 Or minimo < min0
      If minimo > 0 Then
       minimo = minimo - minRzero
      Else
      minimo = minimo + minRzero
      End If
    Loop
    Zero = CDec(minimo)
    End Function