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
C# / VB.NET - numeri sempre diversi in un array bidimensionale
Forum - C# / VB.NET - numeri sempre diversi in un array bidimensionale - Pagina 3

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:34
Lunedì, 31/05/2010
Stai girando alla cieca perchè se non riesci a controllare i precedenti, il che implica due (o uno) semplicissimi cicli for, significa che non riesci a rappresentare il problema e a causa di ciò nemmeno a risolverlo.

List è una classe generics, non un modulo. Se vuoi usare una lista puoi fare così:
Codice sorgente - presumibilmente VB.NET

  1. 'ArrA = righe
  2. 'ArrB = colonne
  3. Dim L As New List(Of Int32)
  4. Dim N As Int32
  5. Dim Rnd As New Random()
  6.  
  7. 'Estrae tot numeri casuali distinti
  8. For I As Int32 = 1 To (ArrA * ArrB)
  9.    Do
  10.       N = Rnd.Next(1, 91)
  11.    Loop While L.Contains(N)
  12.    L.Add(N)
  13. Next
  14.  
  15. 'E li mette nella matrice:
  16. For I As Int32 = 0 To ArrA - 1
  17.    For J As Int32 = 0 To ArrB - 1
  18.       matrice(I, J) = L(I * ArrB + J)
  19.    Next
  20. Next



Senza lista, invece:
Codice sorgente - presumibilmente VB.NET

  1. Dim N As Int32
  2. Dim Rnd As New Random()
  3. Dim Exists As Boolean
  4.  
  5. For I As Int32 = 0 To ArrA - 1
  6.    For J As Int32 = 0 To ArrB - 1
  7.       Do
  8.          N = Rnd.Next(1, 91)
  9.          Exists = False
  10.          For H As Int32 = 0 To (I * ArrB + J) - 1
  11.              If matrice(H \ ArrB, H Mod ArrB) = N Then
  12.                  Exists = True
  13.                  Exit For
  14.              End If
  15.          Next
  16.       Loop While Exists
  17.       matrice(I, J) = N
  18.    Next
  19. Next



P.S.: codici scritti sul momento, non testati...

PM Quote
Avatar
alimuzzy (Normal User)
Rookie


Messaggi: 28
Iscritto: 24/02/2009

Segnala al moderatore
Postato alle 16:14
Lunedì, 31/05/2010
Ho trascorso settimane comprese alcune notti, per cercare di capire come fare e mi rendo conto che dopo aver visto il tuo listato non ci sarei mai riuscito, in quanto non sapevo come dire al programma quello che hai fatto tu  
Codice sorgente - presumibilmente C# / VB.NET

  1. If matrice(H \ ArrB, H Mod ArrB) = N Then


Cercando anche tra i vari testi, non ho riscontrato esempi del genere, o almeno qualche spiegazione a riguardo.
Ne deduco che dai testi  posso solamente apprendere nozioni che mi instradano e mi spiegano i meccanismi essenziali della programmazione con tutte le sue evoluzioni, ma che se  si dovesse addentrare sul particolare, come in questo caso, bisognerebbe, affidarsi, alla buona volontà e alla disponibilità di persone come "Totem" e di tutti quelli che come lui, fanno parte di quelle comunità che contribuiscono alla diffusione del linguaggio sia con gli esempi  sia con le spiegazioni, validi in quanto provati da una maturata esperienza .
Voglio aggiungere anche che ad aiutare la comprensione del linguaggio ci vuole anche una buona dose di matematica, senza la quale il cammino risulterebbe essere molto ma molto lento.
Voglio scusarmi per questa premessa, ma l'ho ritenuto necessario per ringraziare ulteriormente gli autori di questa comunità.



PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 16:27
Lunedì, 31/05/2010
Testo quotato

Postato originariamente da alimuzzy:

Ho trascorso settimane comprese alcune notti, per cercare di capire come fare e mi rendo conto che dopo aver visto il tuo listato non ci sarei mai riuscito, in quanto non sapevo come dire al programma quello che hai fatto tu  
Codice sorgente - presumibilmente C# / VB.NET

  1. If matrice(H \ ArrB, H Mod ArrB) = N Then


Cercando anche tra i vari testi, non ho riscontrato esempi del genere, o almeno qualche spiegazione a riguardo.
Ne deduco che dai testi  posso solamente apprendere nozioni che mi instradano e mi spiegano i meccanismi essenziali della programmazione con tutte le sue evoluzioni, ma che se  si dovesse addentrare sul particolare, come in questo caso, bisognerebbe, affidarsi, alla buona volontà e alla disponibilità di persone come "Totem" e di tutti quelli che come lui, fanno parte di quelle comunità che contribuiscono alla diffusione del linguaggio sia con gli esempi  sia con le spiegazioni, validi in quanto provati da una maturata esperienza .
Voglio aggiungere anche che ad aiutare la comprensione del linguaggio ci vuole anche una buona dose di matematica, senza la quale il cammino risulterebbe essere molto ma molto lento.
Voglio scusarmi per questa premessa, ma l'ho ritenuto necessario per ringraziare ulteriormente gli autori di questa comunità.




Ciao, ma alla fine hai risolto ?


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
alimuzzy (Normal User)
Rookie


Messaggi: 28
Iscritto: 24/02/2009

Segnala al moderatore
Postato alle 16:35
Lunedì, 31/05/2010
Si si alla fine tutto risolto e compreso, penso di aver imparato un bel po di cose su queste benedette matrici, finalmente posso passare ad altro e soprattutto posso dormire la notte:k:

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 14:13
Martedì, 01/06/2010
Il codice che ti ho postato era solo un modo più breve ed elegante per rimpiazzarne uno altrimenti più complesso. Tuttavia lo scopo mi sembra chiaro. L'operatore \ rappresenta la divisione intera e Mod il resto della divisione intera. Perciò se contiamo da 0 fino a I*ArrB+J (ossia tutti gli elementi della matrice da (0,0) a (I,J) escluso), H\ArrB restituisce la riga a cui ci troviamo, mentre H Mod ArrB la colonna. Ad esempio:
Codice sorgente - presumibilmente C# / VB.NET

  1. Matrice 10x10 (ArrB=10)
  2. H = 48 -> riga = 48\10 = 4, colonna = 48 mod 10 = 8
  3. H = 50 -> riga = 50\10 = 5, colonna = 50 mod 10 = 0


Sarebbe stato lo stesso scrivere:
Codice sorgente - presumibilmente VB.NET

  1. For H As Int32 = 0 To I
  2.    For K As Int32 = 0 To ArrB Then
  3.       If (H = I) And (K = J) Then
  4.          Exit For
  5.       End If
  6.       If matrice(H, K) = N Then
  7.          Exists = True
  8.          Exit For
  9.       End If
  10.    Next
  11. Next



E comunque sì. Lo dico sempre: non esiste una guida per tutto. Le guide illustrano solo gli strumenti da usare: come (e quando) usarli è tutto un altro discorso.

PM Quote
Avatar
alimuzzy (Normal User)
Rookie


Messaggi: 28
Iscritto: 24/02/2009

Segnala al moderatore
Postato alle 14:39
Giovedì, 03/06/2010
Non volevo chiederlo per non essere troppo rompiscatole, ma alla fine hai, senza chiederlo, inviato la spiegazione :k
Un ennesimo Grazie da parte mia..

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo