Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao Totem
Credimi le sto provando tutte, e il listato che secondo me si avvicina di piu e questo:
Module Module1
Sub Main()
Dim i As Integer
Dim j As Integer
Dim conteggio As Integer
Dim rand As New Random
Dim numero As Integer
Dim ArrA As Integer
Dim ArrB As Integer
Console.Write("Inserisci la prima lunghezza dell'array: ")
ArrA = Console.ReadLine
Console.WriteLine()
Console.Write("Inserisci la seconda lunghezza dell'array: ")
ArrB = Console.ReadLine
Console.WriteLine()
Dim diverso(ArrA, ArrB) As Integer
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
diverso(i, j) = 0
Next
Next
numero = rand.Next(1, 10)
conteggio = 0
While conteggio < ArrA * ArrB
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
If numero <> diverso(i, j) Then
diverso(i, j) = numero
conteggio += 1
End If
numero = rand.Next(1, 10)
Next
Next
End While
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
Console.Write(diverso(i, j).ToString("00") & " ")
Next
Console.WriteLine()
Next
Console.ReadLine()
End Sub
End Module
Ho fatto un range da 1 a 10 per avere una visuale piu ristretta di numeri a caso
e da come puoi vedere i numeri non sono sempre differenti..
Ma dove sbaglio?????
Grazie
Ultima modifica effettuata da alimuzzy il 24/05/2010 alle 2:42
Ciao Totem
Credimi le sto provando tutte, e il listato che secondo me si avvicina di piu e questo:
Module Module1
Sub Main()
Dim i As Integer
Dim j As Integer
Dim conteggio As Integer
Dim rand As New Random
Dim numero As Integer
Dim ArrA As Integer
Dim ArrB As Integer
Console.Write("Inserisci la prima lunghezza dell'array: ")
ArrA = Console.ReadLine
Console.WriteLine()
Console.Write("Inserisci la seconda lunghezza dell'array: ")
ArrB = Console.ReadLine
Console.WriteLine()
Dim diverso(ArrA, ArrB) As Integer
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
diverso(i, j) = 0
Next
Next
numero = rand.Next(1, 10)
conteggio = 0
While conteggio < ArrA * ArrB
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
If numero <> diverso(i, j) Then
diverso(i, j) = numero
conteggio += 1
End If
numero = rand.Next(1, 10)
Next
Next
End While
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
Console.Write(diverso(i, j).ToString("00") & " ")
Next
Console.WriteLine()
Next
Console.ReadLine()
End Sub
End Module
Ho fatto un range da 1 a 10 per avere una visuale piu ristretta di numeri a caso
e da come puoi vedere i numeri non sono sempre differenti..
Ma dove sbaglio?????
Grazie
Ciao Alimuzzi o visto il tuo codice, forse intendi che ti compaiono numeri ripetuti ?
se si, forse manca un controllo in tal senso, mi sono imbattuto anche io in questo
genere di problematiche, ma una volta che le risolvi ne hai molta soddisfazione,
io non sono un maestro della programmazione, quindi non mi permetto di darti dei
consigli che potrebbero essere errati, comunque come ho fatto io puoi vedere come
anno risolto questo genere di problemi altri programmatori, che hanno esposto il
loro codice in merito a queste tematiche, un saluto da (Ultimo)
Postato originariamente da alimuzzy: numero = rand.Next(1, 10)
conteggio = 0
While conteggio < ArrA * ArrB
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
If numero <> diverso(i, j) Then
diverso(i, j) = numero
conteggio += 1
End If
numero = rand.Next(1, 10)
Next
Next
End While
Allora, questa è la parte di codice da analizzare. Avrai già capito che anche questa è sbagliata, e mi sembra evidente il perchè. In sostanza tu estrai un numero casuale intero nell'intervallo [1,9]. Per ArrA*ArrB volte, scansioni tutta la matrice. La prima volta, ossia quando entri nel while dopo l'inizializzazione di conteggio, hai che tutti i valori della matrice sono 0, poiché li hai impostati poco prima e 0 è evidentemente diverso da qualsiasi numero in [1,9], perciò la matrice viene popolata con numeri casuali (non necessariamente diversi). In particolare, hai che il codice dentro l'if viene eseguito esattamente ArrA*ArrB volte, poiché, come già detto, la condizione numero<>diverso(i,j) è sempre vera. Poiché, quindi, alla fine dei for, conteggio=ArrA*ArrB, esci dal while, rendendo il tutto inutile.
E' evidente che non stai prendendo la via più semplice, oppure che, se ti dessi una matrice, non sapresti dire se contiene numeri uguali (penso che sia la prima ipotesi...). Semplicemente, per ogni valore estratto, ricontrolli tutti i precedenti per verificare se tale valore esiste già: se esiste, lo modifichi o lo riestrai, altrimenti passi al successivo.
P.S.: affinché in una matrice esistano solo numeri interi distinti appartenenti a [1,9] è necessario che ArrA*ArrB <= 9 (quindi sono ammesse solo 1x9, 2x4, 3x3 e le relative trasposte).
Ciao Totem.
Le ho provate tutte, infatti quello che non riesco a fare e dire al programma di leggere il numero precedente.
in una matrice bidimensionale arr(arra, arrb), il precedente della colonna è
arr(arra, arrb - 1)??
Il problema e quello, ho cercato e ricercato ovunque su google e nei vari testi di programmazione ma non ho trovato nulla.
tra l'altro ho provato anche con arr(arra, arrb - 1), niente... non funzionaaaaaa.. hehehehe
Non mollo....
Ultima modifica effettuata da alimuzzy il 24/05/2010 alle 22:00
Dimenticavo di ringraziare Ultimo per il suggerimento riguardo al controllo, in effetti manca proprio il controllo delle ultime estrazioni.
Cercherò di studiare come leggere da una matrice bidimensionale il valore precedente di un indice cosi da poter fare il paragone con l'ultimo numero estratto.
Forse impiego troppo tempo alla ricerca sui forum e su google piuttosto di studiare
Grazie cmq per l'interessamento Ultimo
Inserisci tutti i numeri in un vettore di strutture ed estrai un numero compreso tra il primo e l'ultimo elemento. Quando hai scelto un numero, sposta l'ultimo elemento dell'array nel posto che hai scelto in precedenza e riduci di una unità i numeri totali da poter scegliere.
Ci sono miliardi di soluzioni già pronte, e decine solo su questo forum. Alimuzzy vuole provare da solo a risolvere il problema prima di ricorrere ad una soluzione.
E ti correggo, non ho detto il precedente, ma i precedenti. Il precedente potrebbe anche essere diverso, ma se anche tutti quelli che vengono prima non lo sono, allora esistono numeri ripetuti.
Il precedente di A(i,j) è A(i,j-1) solo se j>0, altrimenti è A(i-1,col-1), con col numero di colonne. Il precedente esiste solo se i>0 e j>0, o, se vuoi una cosa ciclica può essere A(righe-1,col-1).
Ma tutto questo non serve per il tuo programma.
Prendendo esempi da altri post alla fine ero riuscito a trovare la soluzione utilizando il modulo list, arrivando a questo:
Codice sorgente - presumibilmente VB.NET
For i = 1 To 90
numero.Add(i)
Next
Randomize()
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
valori = rand.Next(numero.Count- 1)
diverso(i, j)= numero(valori)
numero.RemoveAt(valori)
Next
Next
Ma il punto e che a tutt'ora non sono riuscito, nemmeno utilizzando il modulo list, a fare il paragone tra i valori estratti e quelli ancora da estrarre.
Codice sorgente - presumibilmente VB.NET
For i = 0 To ArrA - 1
For j = 0 To ArrB - 1
estratto = rand.Next(1, 20)
IfNot contenitore.Contains(estratto)Then
contenitore.Add(estratto)
ForEach estratto In contenitore
estrazione(i, j)= estratto
Next
EndIf
Next
Next
se dovessi fare un estrazione di 2 righe e 6 colonne ad esempio il programma mi restituisce non 12 valori ma 10 e in quelli mancanti mi inserisce 0.
Non ce la faccio + ho provato mille soluzioni ma si vede che faccio lo stesso sbalgio in modi differenti
Help..... me
Ultima modifica effettuata da alimuzzy il 30/05/2010 alle 14:10