Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    {VB6} Aiuto programma per calcolare M.C.D

    Ciao, ragazzi, vi presento il mio problema.
    Ho creato un programmino con il visual basic 6 pro che mi consente di calcolare il massimo comune divisore di un tot di numeri, massimo 100.
    Quando però vado ad inserire un controllo per far sì che mi dia un errore se inserisco lettere e non numeri, il programma sfasa dandomi l'errore n.13.
    Ho fatto 1000 tentativi ma niente.
    Spero che voi mi possiate dare una mano.Grazie. Vi posto tutti i comandi inseriti qui sotto.

    codice:
    Public Sub Form_Load()
    Dim M, n, R As Double
    Dim Scambio As Double
    Dim Cont, K, Num, Contr As Byte
    Dim Numeri(1 To 100) As Double
        Cont = InputBox("DI QUANTI NUMERI VUOI CALCOLARE L'MCD ?", "MCD", _
               vbOKOnly)
        Contr = 0
        Do While (Contr = 0)
            If (Not (IsNumeric(Cont)) Or (Cont < 2)) Then
                MsgBox ("Valore Errato....Dgitare un Numero > 1 !")
                Cont = InputBox("DI QUANTI NUMERI VUOI CALCOLARE L'MCD ?", "MCD", _
                vbOKOnly)
                Contr = 0
            Else: Contr = 1
            End If
        Loop
        For K = 1 To Cont
          Numeri(K) = InputBox("SCRIVI IL NUMERO DI INDICE " & K, "MCD", _
               vbOKOnly)
         Num = Numeri(K)
          Contr = 0
          Do While (Contr = 0)
            If Not (IsNumeric(Num)) Then
              MsgBox ("Valore Errato....Dgitare un Numero > 1 !")
                Num = InputBox("Ridigita il valore", "MCD", _
                vbOKOnly)
                Numeri(K) = Num
                Contr = 0
            Else
            Contr = 1
            End If
        Loop
        Next K
        MCD = Comune(Numeri(1), Numeri(2))
            Debug.Print "M.C.D. ", Comune(Numeri(1), Numeri(2)), Num
             For K = 3 To Cont
          Debug.Print "M.C.D. ", Comune(MCD, Numeri(K)), Num
          MCD = Comune(MCD, Numeri(K))
        Next K
    'B = Comune(M, n) * 3
    'Debug.Print B
          End
    End Sub
    Public Function Comune(X, Y)
    If X < Y Then
        Scambio = X
        X = Y
        Y = Scambio
    End If
    R = X Mod Y
    Do While (R <> 0)
    X = Y
    Y = R
    R = X Mod Y
    Loop
    Comune = Y
    End Function

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    A parte l'errata dichiarazione delle variabili, devi spiegare anche la logica di esecuzione del tuo programma, perchè a me non sembra proprio corretta.

    Che senso ha 'codificare' 2 volte l'input del 1° InputBox()?
    Oltretutto, indipendentemente dall'esito del 1°, il codice del 2° viene eseguito comunque, allora a che serve il 1°?

    Ma anche il resto lo vedo abbastanza 'scombinato' ...
    Non ultimo, l'uso deprecato di End!!!
    Tra l'altro, se non sbaglio, mi pare che tu usi nessuna interfaccia utente (non vedo ne controlli, ne metodo Show); se è così non ha senso unsare un Form, è sufficiente un modulo BAS.

    Facci sapere.


  3. #3
    no vabbè ho risolto mettendo le stringhe;
    oltre a ciò me lo puoi correggere please^

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da peppeperru97
    no vabbè ho risolto mettendo le stringhe;
    Ah, adesso così è tutto più chiaro!

    Originariamente inviato da peppeperru97
    oltre a ciò me lo puoi correggere please^
    Ma che domanda è?...
    - Non hai risposto a nessuna delle richieste che ti ho fatto.
    - Per contro, stai chiedendo a me di fare il lavoro al posto tuo.
    - Francamente il tuo codice è completamente sbagliato.

    Evidentemente non hai la più pallida idea di come funziona un Forum tecnico.

    Sei TU che devi correggerti il codice, altrimenti per richieste di questo genere c'è l'apposito forum Offerte/Richieste lavoro.
    http://forum.html.it/forum/forumdisp...?s=&forumid=67

    Basta fare un po' di DEBUG, e se non sai farlo, si impara.


  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Originariamente inviato da peppeperru97
    oltre a ciò me lo puoi correggere please^
    Richieste come questa non sono ammesse, come da Regolamento interno.

    E' tua cura scrivere del codice, provarlo ed eventualmente postarlo nel forum assieme agli errori ottenuti in fase di compilazione/esecuzione. Le richieste di aiuto devono vertire su questi errori e gli utenti ti aiuteranno a correggerli.

    Se non specifichi gli errori che ottieni, dove li ottieni (compilazione/esecuzione), con quali eventuali input li ottieni, ma prima ancora, se hai modificato il codice e non posti la nuova revisione, direi che non ti si può dire nulla di più di quanto già detto.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    facendo COSI' l'ho corretto ed ora funziona cioè mi calcola sia mcd che mcm di un tot di numeri... altro che completamente sbagliato!Provare per credere...
    codice:
    Public Sub Form_Load()
    Dim M, n, R As Double
    Dim Scambio As Double
    Dim K, Contr As Integer
    Dim Cont, Numeri(1 To 100), Num, Numero1, Numero2 As String
    Cont = InputBox("DI QUANTI NUMERI VUOI CALCOLARE L'MCD ?", "MCD", _
               vbOKOnly)
        Contr = 0
        Do While (Contr = 0)
            If (Not (IsNumeric(Cont)) Or (Cont < 2)) Then
                MsgBox ("Valore Errato....Dgitare un Numero > 1 !")
                Cont = InputBox("DI QUANTI NUMERI VUOI CALCOLARE L'MCD ?", "MCD", _
                vbOKOnly)
                Contr = 0
            Else: Contr = 1
            End If
        Loop
        For K = 1 To Cont
         Numeri(K) = InputBox("SCRIVI IL NUMERO DI INDICE " & K, "MCD", _
               vbOKOnly)
         Num = Numeri(K)
         Contr = 0
            Do While Contr = 0
                If Not (IsNumeric(Num)) Then
                    MsgBox ("Valore Non numerico...Ridigita")
                    Contr = 0
                    Numeri(K) = InputBox("SCRIVI IL NUMERO DI INDICE " & K, "MCD", _
                    vbOKOnly)
                    Num = Numeri(K)
                Else
                    Contr = 1
                End If
            Loop
         Next K
        Numero1 = Numeri(1)
        Numero2 = Numeri(2)
        MCD = MassimoComuneDivisore(Numeri(1), Numeri(2))
        mcm = MinimoComuneMultiplo(Numero1, Numero2, MCD)
        Debug.Print "M.C.D. ", MCD, "mcm ", mcm
        For K = 3 To Cont
            numerok = Numeri(K)
            numerok1 = numerok
            MCD = MassimoComuneDivisore(MCD, Numeri(K))
            mcm1 = mcm
            MCD1 = MassimoComuneDivisore(mcm, numerok)
            mcm = MinimoComuneMultiplo(mcm1, numerok1, MCD1)
            Debug.Print "M.C.D. ", MCD, "mcm ", mcm
        Next K
        End
    End Sub
    Public Function MassimoComuneDivisore(X, Y)
    If X < Y Then
        Scambio = X
        X = Y
        Y = Scambio
    End If
    R = X Mod Y
    Do While (R <> 0)
    X = Y
    Y = R
    R = X Mod Y
    Loop
    MassimoComuneDivisore = Y
    End Function
    
    Public Function MinimoComuneMultiplo(X, Y, Z)
    MinimoComuneMultiplo = X / Z * Y
    End Function

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.