Oppure

Loading
08/07/11 14:11
Founderleader
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

 
If 1>2 
And 2>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 08/07/11 14:15
aaa
10/07/11 10:03
GrG
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)
aaa
10/07/11 11:19
Il Totem
@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...
aaa
11/07/11 10:06
Il Totem
Ovvio che si fa dinamicamente. Non puoi pensare di controllare tutti i casi possibili, giacché sono infiniti.

Dim verifica As Boolean = True

For I = 0 To numeroRecord - 3
   For J = I + 1 To numeroRecord - 2
      If celle(I)(1) = celle(J)(0) Then
         For K = J + 1 To numeroRecord - 1
            If celle(K)(0) = celle(J)(1) And celle(K)(1) = celle(I)(0) Then
               verifica = False
               Exit For
            End If
         Next K
      End If
      If verifica = False Then Exit For
   Next J
   If verifica = False Then Exit For
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).
aaa
14/07/11 19:11
GrG
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

aaa