Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - implementazioni calcolo enigmatico
Forum - Visual Basic 6 - implementazioni calcolo enigmatico

Avatar
maurizio74 (Normal User)
Pro


Messaggi: 116
Iscritto: 30/03/2009

Segnala al moderatore
Postato alle 11:51
Martedì, 12/03/2024
Ciao a tutti, provando ad implementare il calcolo enigmatico che avevo posto quache giorno fa, di cui Carlo mi ha dato una grande mano, mi sono accorto che il programma ha qualche falla nel senso che non funge come dovrebbe:

questo è il codice funzionante del programma realizzato con 5 numeri:

Codice sorgente - presumibilmente Plain Text

  1.  

Dim fatto As Boolean
Private Sub Command1_click()
Dim i As Long
Dim arr(1 To 5) As Variant
fatto = False ' azzera la variabile booleana
For i = 1 To 5
    arr(i) = i
    
Next


Call permutazioni(arr, 5, 5)

End Sub

Sub permutazioni(vettore() As Variant, dimensione As Long, n As Long)

Dim i As Long
If fatto Then Exit Sub ' termina la ricorsione

If dimensione = 1 Then
   fatto = risultato(vettore) ' memorizzo in fatto il valore booleano
  
    Exit Sub
End If

For i = 1 To dimensione
    Call permutazioni(vettore(), dimensione - 1, n)
    If dimensione Mod 2 = 1 Then
        Call Scambio(vettore(), 1, dimensione)
    Else
        Call Scambio(vettore(), i, dimensione)
    End If

Next

End Sub


Sub Scambio(arr() As Variant, indice1 As Long, indice2 As Long)

Dim temp_var As Variant

temp_var = arr(indice1)
arr(indice1) = arr(indice2)
arr(indice2) = temp_var

End Sub


    Function risultato(vettore()) As Boolean
      
        Dim value As Integer ' conterrà la somma delle uguaglianze
        ' riempimento Text (celle)
        TextO1 = vettore(1)
        TextO2 = vettore(2)
        TextO3 = vettore(3)
        TextO4 = vettore(4)
        TextO5 = vettore(5)
        Text01 = vettore(1)
        Text02 = vettore(2)
        Text03 = vettore(3)
        Text04 = vettore(4)
        Text05 = vettore(5)
        ' riga 4
        TextC4 = TextO1
        TextD4 = TextO2
        TextF4 = TextO3
        TextI4 = TextO1
        TextJ4 = TextO4
      
        ' riga 7
        TextD7 = TextO2
        TextF7 = TextO4
        TextJ7 = TextO3
      
        'riga10
        TextD10 = TextO3
        TextF10 = TextO1
        TextJ10 = TextO5
      
        ' verifica
      
      
        ' riga 14
        TextD14 = TextC4 & TextD4
        TextF14 = TextF4
        TextH14 = TextI4 & TextJ4
        If CInt(TextD14) - CInt(TextF14) - CInt(TextH14) = 0 Then TextJ14 = "VERO": value = value + 1 Else TextJ14 = "FALSO"
      
        ' riga 15
        TextD15 = TextD7
        TextF15 = TextF7
        TextH15 = TextJ7
        If CInt(TextD15) - CInt(TextF15) - CInt(TextH15) = 0 Then TextJ15 = "VERO": value = value + 1 Else TextJ15 = "FALSO"
      
        ' riga 16
        TextD16 = TextD10
        TextF16 = TextF10
        TextH16 = TextJ10
        If CInt(TextD16) + CInt(TextF16) - CInt(TextH16) = 0 Then TextJ16 = "VERO": value = value + 1 Else TextJ16 = "FALSO"
      
        ' riga 17
        TextD17 = TextC4 & TextD4
        TextF17 = TextD7
        TextH17 = TextD10
        If CInt(TextD17) - CInt(TextF17) * CInt(TextH17) = 0 Then TextJ17 = "VERO": value = value + 1 Else TextJ17 = "FALSO"
      
        ' riga 18
        TextD18 = TextF4
        TextF18 = TextF7
        TextH18 = TextF10
        If CInt(TextD18) - CInt(TextF18) - CInt(TextH18) = 0 Then TextJ18 = "VERO": value = value + 1 Else TextJ18 = "FALSO"
      
        ' riga 19
        TextD19 = TextI4 & TextJ4
        TextF19 = TextJ7
        TextH19 = TextJ10
        If CInt(TextD19) - CInt(TextF19) * CInt(TextH19) = 0 Then TextJ19 = "VERO": value = value + 1 Else TextJ19 = "FALSO"
    
        ' riga 20
        TextJ20 = value
  
        If TextJ20 = 6 Then
            risultato = True
        Else
            risultato = False
        End If
        
        DoEvents ' per vedere la progressione
      
    End Function
ed in allegato la foto dei textbox disposti nel programma.


maurizio74 ha allegato un file: calcolo enigmatico a 5 numeri.jpg (157776 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da maurizio74 il 12/03/2024 alle 11:53
PM Quote
Avatar
maurizio74 (Normal User)
Pro


Messaggi: 116
Iscritto: 30/03/2009

Segnala al moderatore
Postato alle 12:05
Martedì, 12/03/2024
nell' implementazione che non ho fatto altro che modificare la parte del command1 come potete vedere:

Codice sorgente - presumibilmente Plain Text

  1.  

Dim fatto As Boolean
Private Sub Command1_click()
Dim i As Long
Dim arr(1 To 7) As Variant
fatto = False ' azzera la variabile booleana
For i = 1 To 7
    arr(i) = i
    
Next


Call permutazioni(arr, 7, 7)

End Sub

e la parte della function che gestisce i textbox:

Codice sorgente - presumibilmente Plain Text

  1.  

Function risultato(vettore()) As Boolean
      
        Dim value As Integer ' conterrà la somma delle uguaglianze
        ' riempimento Text (celle)
        TextO1 = vettore(1)
        TextO2 = vettore(2)
        TextO3 = vettore(3)
        TextO4 = vettore(4)
        TextO5 = vettore(5)
        TextO6 = vettore(6)
        TextO7 = vettore(7)
        
        TextO1 = vettore(1)
        TextO2 = vettore(2)
        TextO3 = vettore(3)
        TextO4 = vettore(4)
        TextO5 = vettore(5)
        TextO6 = vettore(6)
        TextO7 = vettore(7)
        ' riga 4
        TextC4 = TextO1
        TextD4 = TextO2
        TextF4 = TextO3
        TextI4 = TextO2
        TextJ4 = TextO4
      
        ' riga 7
        TextC7 = TextO1
        TextD7 = TextO4
        TextF7 = TextO4
        TextJ7 = TextO5
      
        'riga10
        TextD10 = TextO4
        TextF10 = TextO6
        TextJ10 = TextO7
      
        ' verifica
      
      
        ' riga 14
        TextD14 = TextC4 & TextD4
        TextF14 = TextF4
        TextH14 = TextI4 & TextJ4
        If CInt(TextD14) * (CInt(TextF14) - CInt(TextH14)) = 0 Then TextJ14 = "VERO": value = value + 1 Else TextJ14 = "FALSO"
      
        ' riga 15
        TextD15 = TextC7 & TextD7
        TextF15 = TextF7
        TextH15 = TextJ7
        If CInt(TextD15) - (CInt(TextF15) * CInt(TextH15)) = 0 Then TextJ15 = "VERO": value = value + 1 Else TextJ15 = "FALSO"
      
        ' riga 16
        TextD16 = TextD10
        TextF16 = TextF10
        TextH16 = TextJ10
        If CInt(TextD16) + CInt(TextF16) - CInt(TextH16) = 0 Then TextJ16 = "VERO": value = value + 1 Else TextJ16 = "FALSO"
      
        ' riga 17
        TextD17 = TextC4 & TextD4
        TextF17 = TextD7
        TextH17 = TextD10
        If CInt(TextD17) - CInt(TextF17) - CInt(TextH17) = 0 Then TextJ17 = "VERO": value = value + 1 Else TextJ17 = "FALSO"
      
        ' riga 18
        TextD18 = TextF4
        TextF18 = TextF7
        TextH18 = TextF10
        If CInt(TextD18) + CInt(TextF18) - CInt(TextH18) = 0 Then TextJ18 = "VERO": value = value + 1 Else TextJ18 = "FALSO"
      
        ' riga 19
        TextD19 = TextI4 & TextJ4
        TextF19 = TextJ7
        TextH19 = TextJ10
        If CInt(TextD19) - (CInt(TextF19) * CInt(TextH19)) = 0 Then TextJ19 = "VERO": value = value + 1 Else TextJ19 = "FALSO"
    
        ' riga 20
        TextJ20 = value
  
        If TextJ20 = 6 Then
            risultato = True
        Else
            risultato = False
        End If
        
        DoEvents ' per vedere la progressione
      
    End Function

non riesco a capire l'inghippo del programma, poichè intanto non mi fa vedere la progressione dei numeri sui textbox text01 text02 text03 ecc.ecc. e poi non effettua nemmeno il corretto calcolo come faceva per il calcolo enigmatico a 5 numeri.

se qualcuno a qualche bella idea??? sarebbe utile per la mia mente che sta andando in fumo...


maurizio74 ha allegato un file: calcolo enigmatico con 7 numeri.png (16808 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da maurizio74 il 12/03/2024 alle 12:12
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1351
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 17:01
Martedì, 12/03/2024
Hai fatto solo errori di trascrizione, riguarda bene, metti le righe e le colonne per identificare le textbox.

La riga: TextF17 = TextD7 è incompleta, dopo l'uguale ci vanno due textbox nel giusto ordine

In allegato l'eseguibile funzionante.

Se togli DoEvents non vedi la progressione ma le permutazioni avvengono più velocemente.


Carlo ha allegato un file: CALCOLO ENIGMATICO.zip (8980 bytes)
Clicca qui per scaricare il file


in programmazione tutto è permesso
PM Quote
Avatar
maurizio74 (Normal User)
Pro


Messaggi: 116
Iscritto: 30/03/2009

Segnala al moderatore
Postato alle 19:00
Martedì, 12/03/2024
Ciao Carlo sempre gentilissimo,

effettivamente avevo distrattamente saltato textC7
nella riga 17 TextF17 = textC7 & TextD7 pero' da me non funziona ugualmente
non capisco perchè'? poi come puoi vedere non avevo tolto il DoEvents come mai oltre al calcolo errato non vedo la progressione???

ti allego il progetto se daresti un occhiata??'

grazieeeeee....

Ultima modifica effettuata da maurizio74 il 14/03/2024 alle 10:53
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1351
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 20:06
Martedì, 12/03/2024
1) Text01 e TextO1, non è la stessa cosa... nel form hai le textbox con lo zero al posto della O

2) caricare due volte le Text è inutile:
Codice sorgente - presumibilmente Plain Text

  1. TextO1 = vettore(1)
  2. TextO2 = vettore(2)
  3. TextO3 = vettore(3)
  4. TextO4 = vettore(4)
  5. TextO5 = vettore(5)
  6. TextO6 = vettore(6)
  7. TextO7 = vettore(7)
  8.        
  9. TextO1 = vettore(1)
  10. TextO2 = vettore(2)
  11. TextO3 = vettore(3)
  12. TextO4 = vettore(4)
  13. TextO5 = vettore(5)
  14. TextO6 = vettore(6)
  15. TextO7 = vettore(7)



questa riga è sbagliata:
Codice sorgente - presumibilmente Visual Basic 6

  1. If CInt(TextD14) * (CInt(TextF14) - CInt(TextH14)) = 0 Then TextJ14 = "VERO": value = value + 1 Else TextJ14 = "FALSO"



Si vuole verificare se il valore in TextD14 moltiplicato il valore in TextF14 da come risultato il valore presente in TextH14
es: 10x2=20?
La tua riga fa: se (2-20) moltiplicato 10 da zero il calcolo è esatto... (SBAGLIATO)

Invece devi fare se 10x2 meno 20 da zero il calcolo è esatto!!! (ESATTO)

Il resto è tutto corretto, bravo ma non sufficientemente attento, la programmazione non ammette errori :k:


Ultima modifica effettuata da Carlo il 12/03/2024 alle 21:18


in programmazione tutto è permesso
PM Quote
Avatar
maurizio74 (Normal User)
Pro


Messaggi: 116
Iscritto: 30/03/2009

Segnala al moderatore
Postato alle 21:21
Martedì, 12/03/2024
Ciao Carlo,

grazie per la veloce risposta,  non so' che dirti, hai ragione, ovviamente lo so che, Text=01 e TextO1, non sono la stessa cosa forse sara' l'unica cosa di cui ne so certo.... come sono certo che ho fatto parecchi errori di trascrizione infatti avevo fatto dei copia incolla per fare piu' veloce tra il mio programma ed alcune parti del code che mi avevi postato, poi potrei aggiungere che sono un po' cieco, da questo miscuglio e nato tutto l'inghippo.:hail::hail::hail:  Adesso a mente fredda e distaccata e con le tue evidenziazioni ho sistemato tutto... pero' anche questo mi servira' per il futuro...
grazie ancora:k::k::k::k:

alla prossima...

Buon Lavoro...:k::k:

PM Quote