/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Sortering af tal
Fra : Ole J. Hansen


Dato : 26-12-01 17:57

Hej NG og Glædelig jul og godt Nytår.

Jeg har et problem, jeg har lavet et program der finder 7 Lottotal og sætter
dem ind
i 7 tekstboxe, men nu har jeg brugt det meste af julen til at finde ud af,
hvordan jeg
kunne sortere tallene i tekstboxene, således at det mindste tal kom i nr. 1
o.s.v.,
men det kan jeg ikke finde ud af.
Er der en der kan hjælpe en begynder med dette, det må ikke være for
vanskeligt
ellers skal det være så letforståeligt forklaret, at selv jeg kan finde ud
af det.
Min kode er som her:

Private Sub Find_Click()
Dim antaltal As Integer
Dim Talnr As Integer
Dim tilfældigttal As Integer
Dim Ikkebrugt As Boolean
Dim Tabel(0 To 6) As Integer
Dim Tal As Integer


Do Until antaltal > 6
Tal = Tal + 1
Randomize
tilfældigttal = Int(1 + Rnd * 36)



Ikkebrugt = True
For Talnr = 0 To antaltal

If tilfældigttal = Tabel(Talnr) Then
Ikkebrugt = False
End If

Next Talnr
If Ikkebrugt = True Then
Tabel(antaltal) = tilfældigttal
lblTal(antaltal) = tilfældigttal
antaltal = antaltal + 1
End If

Loop

End Sub

Med venlig hilsen
Ole J. Hansen



 
 
Harald Staff (26-12-2001)
Kommentar
Fra : Harald Staff


Dato : 26-12-01 20:03

Hei OIe

Du skal bare sortere dem. Jeg hart lagt til en enkel rutine i bunden, den
forstår du nemt:

Private Sub Find_Click()
Dim antaltal As Integer
Dim Talnr As Integer
Dim tilfældigttal As Integer
Dim Ikkebrugt As Boolean
Dim Tabel(0 To 6) As Integer
Dim Tal As Integer

Dim Ytre As Integer
Dim Indre As Integer
Dim Temp As Integer

Do Until antaltal > 6
Tal = Tal + 1
Randomize
tilfældigttal = Int(1 + Rnd * 36)

Ikkebrugt = True
For Talnr = 0 To antaltal

If tilfældigttal = Tabel(Talnr) Then
Ikkebrugt = False
End If

Next Talnr
If Ikkebrugt = True Then
Tabel(antaltal) = tilfældigttal
'lblTal(antaltal) = tilfældigttal
antaltal = antaltal + 1
End If
Loop
'HERFRA:
For Ytre = 0 To 5
For Indre = 0 To 5
If Tabel(Indre) > Tabel(Indre + 1) Then
Temp = Tabel(Indre)
Tabel(Indre) = Tabel(Indre + 1)
Tabel(Indre + 1) = Temp
End If
Next
Next
'TEST:
For Ytre = 0 To 6
MsgBox "Tal nr " & Ytre + 1 & " er " & Tabel(Ytre)
Next
End Sub

HTH. Beste hilsen Harald

"Ole J. Hansen" <ojh@hansen.mail.dk> wrote in message
news:3c2a0282$0$55519$edfadb0f@dspool01.news.tele.dk...
> Hej NG og Glædelig jul og godt Nytår.
>
> Jeg har et problem, jeg har lavet et program der finder 7 Lottotal og
sætter
> dem ind
> i 7 tekstboxe, men nu har jeg brugt det meste af julen til at finde ud af,
> hvordan jeg
> kunne sortere tallene i tekstboxene, således at det mindste tal kom i nr.
1
> o.s.v.,
> men det kan jeg ikke finde ud af.
> Er der en der kan hjælpe en begynder med dette, det må ikke være for
> vanskeligt
> ellers skal det være så letforståeligt forklaret, at selv jeg kan finde ud
> af det.
> Min kode er som her:
>
> Private Sub Find_Click()
> Dim antaltal As Integer
> Dim Talnr As Integer
> Dim tilfældigttal As Integer
> Dim Ikkebrugt As Boolean
> Dim Tabel(0 To 6) As Integer
> Dim Tal As Integer
>
>
> Do Until antaltal > 6
> Tal = Tal + 1
> Randomize
> tilfældigttal = Int(1 + Rnd * 36)
>
>
>
> Ikkebrugt = True
> For Talnr = 0 To antaltal
>
> If tilfældigttal = Tabel(Talnr) Then
> Ikkebrugt = False
> End If
>
> Next Talnr
> If Ikkebrugt = True Then
> Tabel(antaltal) = tilfældigttal
> lblTal(antaltal) = tilfældigttal
> antaltal = antaltal + 1
> End If
>
> Loop
>
> End Sub
>
> Med venlig hilsen
> Ole J. Hansen
>
>



Ole J. Hansen (26-12-2001)
Kommentar
Fra : Ole J. Hansen


Dato : 26-12-01 21:02

Hej Harald!
Mange tak, tro det eller ikke, men jeg har fået det til at virke, det var
nok mere
fordi, at du skrev det så det var til at forstå.
Det er dejligt, at der er nogen der kan.
Endnu en gang mange tak, nu er nytåret for familien redet.
Ole J. Hansen
"Harald Staff" <harald.staff@eunet.no> skrev i en meddelelse
news:a0d6kg$8lk$1@oslo-nntp.eunet.no...
> Hei OIe
>
> Du skal bare sortere dem. Jeg hart lagt til en enkel rutine i bunden, den
> forstår du nemt:
>
> Private Sub Find_Click()
> Dim antaltal As Integer
> Dim Talnr As Integer
> Dim tilfældigttal As Integer
> Dim Ikkebrugt As Boolean
> Dim Tabel(0 To 6) As Integer
> Dim Tal As Integer
>
> Dim Ytre As Integer
> Dim Indre As Integer
> Dim Temp As Integer
>
> Do Until antaltal > 6
> Tal = Tal + 1
> Randomize
> tilfældigttal = Int(1 + Rnd * 36)
>
> Ikkebrugt = True
> For Talnr = 0 To antaltal
>
> If tilfældigttal = Tabel(Talnr) Then
> Ikkebrugt = False
> End If
>
> Next Talnr
> If Ikkebrugt = True Then
> Tabel(antaltal) = tilfældigttal
> 'lblTal(antaltal) = tilfældigttal
> antaltal = antaltal + 1
> End If
> Loop
> 'HERFRA:
> For Ytre = 0 To 5
> For Indre = 0 To 5
> If Tabel(Indre) > Tabel(Indre + 1) Then
> Temp = Tabel(Indre)
> Tabel(Indre) = Tabel(Indre + 1)
> Tabel(Indre + 1) = Temp
> End If
> Next
> Next
> 'TEST:
> For Ytre = 0 To 6
> MsgBox "Tal nr " & Ytre + 1 & " er " & Tabel(Ytre)
> Next
> End Sub
>
> HTH. Beste hilsen Harald
>
> "Ole J. Hansen" <ojh@hansen.mail.dk> wrote in message
> news:3c2a0282$0$55519$edfadb0f@dspool01.news.tele.dk...
> > Hej NG og Glædelig jul og godt Nytår.
> >
> > Jeg har et problem, jeg har lavet et program der finder 7 Lottotal og
> sætter
> > dem ind
> > i 7 tekstboxe, men nu har jeg brugt det meste af julen til at finde ud
af,
> > hvordan jeg
> > kunne sortere tallene i tekstboxene, således at det mindste tal kom i
nr.
> 1
> > o.s.v.,
> > men det kan jeg ikke finde ud af.
> > Er der en der kan hjælpe en begynder med dette, det må ikke være for
> > vanskeligt
> > ellers skal det være så letforståeligt forklaret, at selv jeg kan finde
ud
> > af det.
> > Min kode er som her:
> >
> > Private Sub Find_Click()
> > Dim antaltal As Integer
> > Dim Talnr As Integer
> > Dim tilfældigttal As Integer
> > Dim Ikkebrugt As Boolean
> > Dim Tabel(0 To 6) As Integer
> > Dim Tal As Integer
> >
> >
> > Do Until antaltal > 6
> > Tal = Tal + 1
> > Randomize
> > tilfældigttal = Int(1 + Rnd * 36)
> >
> >
> >
> > Ikkebrugt = True
> > For Talnr = 0 To antaltal
> >
> > If tilfældigttal = Tabel(Talnr) Then
> > Ikkebrugt = False
> > End If
> >
> > Next Talnr
> > If Ikkebrugt = True Then
> > Tabel(antaltal) = tilfældigttal
> > lblTal(antaltal) = tilfældigttal
> > antaltal = antaltal + 1
> > End If
> >
> > Loop
> >
> > End Sub
> >
> > Med venlig hilsen
> > Ole J. Hansen
> >
> >
>
>



Harald Staff (27-12-2001)
Kommentar
Fra : Harald Staff


Dato : 27-12-01 10:47

Bare hyggelig.
> Endnu en gang mange tak, nu er nytåret for familien redet.
-nå, Lottotrekningen skal vel også fullføres før redningen er et faktum ?


La meg nevne at dette er en av mange mange måter å sortere. For større
oppgaver (> 10000 tal etc) er denne metode ret langsom. Der finnes mange
algoritmer for QuickSort, BubbleSort, ShellSort,... Finnes f.eks. via
http://www.codehound.com/vb/

Et gammelt sørøverkneb er også å legge tallene (eller tekstene) inn i en
listbox der "Sorted" er sat til True. Så er det bare å lese dem fra toppen
etterpå.

Beste hilsen Harald

Ole J. Hansen <ojh@hansen.mail.dk> skrev i
news:3c2a2dbc$0$62877$edfadb0f@dspool01.news.tele.dk...
> Hej Harald!
> Mange tak, tro det eller ikke, men jeg har fået det til at virke, det var
> nok mere
> fordi, at du skrev det så det var til at forstå.
> Det er dejligt, at der er nogen der kan.
> Endnu en gang mange tak, nu er nytåret for familien redet.
> Ole J. Hansen
> "Harald Staff" <harald.staff@eunet.no> skrev i en meddelelse
> news:a0d6kg$8lk$1@oslo-nntp.eunet.no...
> > Hei OIe
> >
> > Du skal bare sortere dem. Jeg hart lagt til en enkel rutine i bunden,
den
> > forstår du nemt:
> >
> > Private Sub Find_Click()
> > Dim antaltal As Integer
> > Dim Talnr As Integer
> > Dim tilfældigttal As Integer
> > Dim Ikkebrugt As Boolean
> > Dim Tabel(0 To 6) As Integer
> > Dim Tal As Integer
> >
> > Dim Ytre As Integer
> > Dim Indre As Integer
> > Dim Temp As Integer
> >
> > Do Until antaltal > 6
> > Tal = Tal + 1
> > Randomize
> > tilfældigttal = Int(1 + Rnd * 36)
> >
> > Ikkebrugt = True
> > For Talnr = 0 To antaltal
> >
> > If tilfældigttal = Tabel(Talnr) Then
> > Ikkebrugt = False
> > End If
> >
> > Next Talnr
> > If Ikkebrugt = True Then
> > Tabel(antaltal) = tilfældigttal
> > 'lblTal(antaltal) = tilfældigttal
> > antaltal = antaltal + 1
> > End If
> > Loop
> > 'HERFRA:
> > For Ytre = 0 To 5
> > For Indre = 0 To 5
> > If Tabel(Indre) > Tabel(Indre + 1) Then
> > Temp = Tabel(Indre)
> > Tabel(Indre) = Tabel(Indre + 1)
> > Tabel(Indre + 1) = Temp
> > End If
> > Next
> > Next
> > 'TEST:
> > For Ytre = 0 To 6
> > MsgBox "Tal nr " & Ytre + 1 & " er " & Tabel(Ytre)
> > Next
> > End Sub
> >
> > HTH. Beste hilsen Harald
> >
> > "Ole J. Hansen" <ojh@hansen.mail.dk> wrote in message
> > news:3c2a0282$0$55519$edfadb0f@dspool01.news.tele.dk...
> > > Hej NG og Glædelig jul og godt Nytår.
> > >
> > > Jeg har et problem, jeg har lavet et program der finder 7 Lottotal og
> > sætter
> > > dem ind
> > > i 7 tekstboxe, men nu har jeg brugt det meste af julen til at finde ud
> af,
> > > hvordan jeg
> > > kunne sortere tallene i tekstboxene, således at det mindste tal kom i
> nr.
> > 1
> > > o.s.v.,
> > > men det kan jeg ikke finde ud af.
> > > Er der en der kan hjælpe en begynder med dette, det må ikke være for
> > > vanskeligt
> > > ellers skal det være så letforståeligt forklaret, at selv jeg kan
finde
> ud
> > > af det.
> > > Min kode er som her:
> > >
> > > Private Sub Find_Click()
> > > Dim antaltal As Integer
> > > Dim Talnr As Integer
> > > Dim tilfældigttal As Integer
> > > Dim Ikkebrugt As Boolean
> > > Dim Tabel(0 To 6) As Integer
> > > Dim Tal As Integer
> > >
> > >
> > > Do Until antaltal > 6
> > > Tal = Tal + 1
> > > Randomize
> > > tilfældigttal = Int(1 + Rnd * 36)
> > >
> > >
> > >
> > > Ikkebrugt = True
> > > For Talnr = 0 To antaltal
> > >
> > > If tilfældigttal = Tabel(Talnr) Then
> > > Ikkebrugt = False
> > > End If
> > >
> > > Next Talnr
> > > If Ikkebrugt = True Then
> > > Tabel(antaltal) = tilfældigttal
> > > lblTal(antaltal) = tilfældigttal
> > > antaltal = antaltal + 1
> > > End If
> > >
> > > Loop
> > >
> > > End Sub
> > >
> > > Med venlig hilsen
> > > Ole J. Hansen
> > >
> > >
> >
> >
>
>



Carsten Suurland (27-12-2001)
Kommentar
Fra : Carsten Suurland


Dato : 27-12-01 21:31

Hej Ole

En mulighed er at bruge "Count-Sort".
Den er egentligt ikke decideret beregnet til det du har brug for, men denkan
find bruges.

Det du skal vide for at kunne bruge CountSort, er det største og mindste
tal... I Lotto er det jo nemt at finde 1 og ...

Når du har fundet dine tal (i mit eksempel ligger de i et array fra 0-6) så
kommer CountSort ind i billedet...

Function CountSort(InArray, ByVal MinValue As Integer, ByVal MaxVaue As
Integer) As Integer()

Dim Result(MinValue To MaxValue) As Integer
Dim Cnt As Long

For Cnt = LBound(InArray) To UBound(InArray)
Result(InArray(Cnt)) = Result(InArray(Cnt)) + 1
Next

CountSort = Result
End Function

Du kan bruge CountSort således:

....
Dim a(0 to 6) as integer
Dim CountSorted() as integer

a(0) = 10
a(1) = 8
a(2) = 23
a(3) = 2
a(4) = 24
a(5) = 1
a(6) = 32

CountSorted = CountSort(1, 36, a)

Håber det kan hjælpe lidt på vej

/Carsten Suurland



Niels G (28-12-2001)
Kommentar
Fra : Niels G


Dato : 28-12-01 09:31

Her er en alternativ måde at løse problemet på


Dim tabel(1 To 36) As Boolean

Dim tal As Integer
Dim antal As Integer

Randomize

antal = 7

While antal > 0 ' Har vi fundet alle tal
antal = antal - 1

tal = Int(Rnd * 36) + 1

While tabel(tal) ' Er det brugt
tal = Int(Rnd * 36) + 1
Wend
tabel(tal) = True

Wend

' Vis tal

For tal = 1 To 36
If tabel(tal) Then ' Skriv de udvalgte tal
txtResultat.Text = txtResultat.Text & Str$(tal) & " "
End If
Next tal



- Niels G.


"Ole J. Hansen" <ojh@hansen.mail.dk> wrote in message
news:3c2a0282$0$55519$edfadb0f@dspool01.news.tele.dk...
> Hej NG og Glædelig jul og godt Nytår.
>
> Jeg har et problem, jeg har lavet et program der finder 7 Lottotal og
sætter
> dem ind
> i 7 tekstboxe, men nu har jeg brugt det meste af julen til at finde ud af,
> hvordan jeg
> kunne sortere tallene i tekstboxene, således at det mindste tal kom i nr.
1
> o.s.v.,
> men det kan jeg ikke finde ud af.
> Er der en der kan hjælpe en begynder med dette, det må ikke være for
> vanskeligt
> ellers skal det være så letforståeligt forklaret, at selv jeg kan finde ud
> af det.
> Min kode er som her:
>
> Private Sub Find_Click()
> Dim antaltal As Integer
> Dim Talnr As Integer
> Dim tilfældigttal As Integer
> Dim Ikkebrugt As Boolean
> Dim Tabel(0 To 6) As Integer
> Dim Tal As Integer
>
>
> Do Until antaltal > 6
> Tal = Tal + 1
> Randomize
> tilfældigttal = Int(1 + Rnd * 36)
>
>
>
> Ikkebrugt = True
> For Talnr = 0 To antaltal
>
> If tilfældigttal = Tabel(Talnr) Then
> Ikkebrugt = False
> End If
>
> Next Talnr
> If Ikkebrugt = True Then
> Tabel(antaltal) = tilfældigttal
> lblTal(antaltal) = tilfældigttal
> antaltal = antaltal + 1
> End If
>
> Loop
>
> End Sub
>
> Med venlig hilsen
> Ole J. Hansen
>
>



Tomas Christiansen (29-12-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 29-12-01 00:33

Niels G skrev:
> Her er en alternativ måde at løse problemet på

Som i en lettere modificeret udgave formentlig vil kunne erstatte Ole
J Hansens's oprindelige procedure Find_Click:

Private Sub Find_Click()
Dim IBrug(1 To 36) As Boolean
Dim Tæller As Long
Dim Udtrukket As Long

Randomize

For Tæller = 0 To 6
Do
Udtrukket = Int(36 * Rnd + 1)
Loop While IBrug(Udtrukket)
IBrug(Udtrukket) = True
Next

Tæller = 0
For Udtrukket = 1 To 36
If IBrug(Udtrukket) Then
lblTal(Tæller) = Udtrukket
Tæller = Tæller + 1
End If
Next
End Sub

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408886
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste