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 - Verificare che la proprietà transitiva di piu variabili non sia smentita
Forum - Visual Basic 6 - Verificare che la proprietà transitiva di piu variabili non sia smentita

Avatar
Founderleader (Normal User)
Newbie


Messaggi: 1
Iscritto: 08/07/2011

Segnala al moderatore
Postato alle 16:11
Venerdì, 08/07/2011
un titolo complesso ma cercherò di spiegarmi meglio;

Anzitutto saluto tutti, sono nuovo del forum,, anche se, devo ammettere, lo ho spesso utilizzato per risolvere alcuni problemini.

Il mio problema è il seguente:

dai un tot di soggetti (ES 15) vado a relazionare ogni soggetto con tutti gli altri andando a dare un "voto".

ES

1 vs 2 vince 2
1 vs 3 vince 1
e così via...

ovviamente però la logica impone che posto il caso

1 vs 2 vince 1
2 vs 3 vince 2

allora  automaticamente ci si debba ritrovare anche con

1 VS 3 vince 1

in sostanza è la proprietà transitiva secondo cui

Codice sorgente - presumibilmente Visual Basic 6

  1. If 1>2
  2. And 2>3
  3. Then 1>3



quello che vorrei capire è se esiste un metodo (forse un ciclo?) di controllo per cui possa essere verificato che la proprietà transitiva sia rispettata (tenendo conto che si tratterebbe non di 3 ma di 15 soggetti :noway: :om:)

Nota (se serve) : l'inserimento dei valori avverrebbe tramite tabella Excel

Ringrazio per l'aiuto e mi scuso se qualcosa nel post è risultato di difficile comprensione.


Ultima modifica effettuata da Founderleader il 08/07/2011 alle 16:15
PM
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Up
1
Down
V
Segnala al moderatore
Postato alle 12:03
Domenica, 10/07/2011
ma i numeri che hai messo sono solo di esempio?

perchè dire che 1>2 non è possibile... o diciamo che possono anche capitare casi simili? (ovviamente se usi if 1>2 then... allora la condizione risulta falsa perciò non viene eseguito il resto)

Si i numeri proposti erano un esempio, sarebbe meglio dire che if A>B and B>C then A>C - Founderleader - 11/07/11 09:49
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 13:19
Domenica, 10/07/2011
@GrG: 1 > 2 è possibile definendo un'opportuna relazione d'ordine >. In questo caso credo che molto probabilmente volesse indicare con 1, 2 e 3 il primo, il secondo e il terzo oggetto di un array.

Detto questo, la verifica è semplice. Come hai detto basta un ciclo.
Basta prendere come valide le prime due asserzioni, quindi dedurre da queste la terza (1 > 3) e poi verificare che in tutta la lista non sia mai presente il caso opposto (3 > 1). Dopodiché, prendi altre due asserzioni e riesegui ancora la verifica, e così via...

scusa ma non riesco a continuare il post, grazie per la risposta, potresti aiutarmi a farlo? Inoltre mi domando se si riesca a farlo in modo dinamico o se si debbano prevedere tutti i casi... grazie - Founderleader - 11/07/11 09:50
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 12:06
Lunedì, 11/07/2011
Ovvio che si fa dinamicamente. Non puoi pensare di controllare tutti i casi possibili, giacché sono infiniti.

Codice sorgente - presumibilmente VB.NET

  1. Dim verifica As Boolean = True
  2.  
  3. For I = 0 To numeroRecord - 3
  4.    For J = I + 1 To numeroRecord - 2
  5.       If celle(I)(1) = celle(J)(0) Then
  6.          For K = J + 1 To numeroRecord - 1
  7.             If celle(K)(0) = celle(J)(1) And celle(K)(1) = celle(I)(0) Then
  8.                verifica = False
  9.                Exit For
  10.             End If
  11.          Next K
  12.       End If
  13.       If verifica = False Then Exit For
  14.    Next J
  15.    If verifica = False Then Exit For
  16. Next I



celle è un array a due dimensioni, con numeroRecord elementi. In ogni array di primo livello il primo elemento indica quello che vince: celle(n)(0) > celle(n)(1).

Grazie mille! cerco di incorporare il tutto nel programma! :-) - Founderleader - 15/07/11 14:04
PM
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Up
1
Down
V
Segnala al moderatore
Postato alle 21:11
Giovedì, 14/07/2011
il codice postato da totem è in vb.net... in vb6 infatti non è consentito scrivere:


Dim verifica As Boolean = True

ma bisogna scriverlo come


Dim verifica As Boolean
Verifica = True


Si può fare anche in VB6, come in ogni altro linguaggio: http://www.techotopia.com/index.php/Declaring_Visual_Basic_Variables_and_Constants E in ogni caso non è l'inizializzazione di una variabile che cambia tra vb e vb.net - Il Totem - 15/07/11 14:34
PM