Avatar billede m0nk3y Nybegynder
06. august 2003 - 18:52 Der er 21 kommentarer og
1 løsning

Hvordan tager man et tilfældig navn af mange ?

Hej alle sammen.

Jeg skal til at lave et program hvor der er 28 navne der står i en liste ned ad i programmet. Når man trykker på en knap skal den hel tilfældig vægle en, BORTSET fra 8 andre som ikke skal udvælges så mange gange :D Lad os sige at de skal kunne vælges 50 % mindre gange end de andre. Jeg er rimelig ny til VB så derfor beder jeg om en rimelig nem forklaring og at koden gerne skulle virke uden alt for meget brok, hehe. Jeg giver 60 points for et rigtigt svar.
Avatar billede martin_moth Mester
06. august 2003 - 19:58 #1
"Lad os sige at de skal kunne vælges 50 % mindre gange end de andre."

..?

Randomize og rnd() er det du har brug for. Rnd returnerer et tilfældigt decimaltal mellem 0 og 1. Randomize "nulstiller" rnd-funktionen

Står dine navne i en liste eller i et array, kan du vælge et tilfældigt et

Fra liste (List1):
  Randomize
  MsgBox List1.List(Int(Rnd * 28))

Fra Array (NavnaArray):
  Randomize
  MsgBox NavneArray(Int(Rnd * 28))
Avatar billede m0nk3y Nybegynder
06. august 2003 - 19:59 #2
Hmm ... er rimelig ny i VB som sagt, kan du ikke give et helt kode eksempel med nogle navne .. ? så skal du med det samme få de 60 point's ...
Avatar billede martin_moth Mester
06. august 2003 - 20:05 #3
Hvis de første 8 navne skal udvælges ca. halvt så ofte som de andre:

  Randomize
  If rnd < 0.5 then ' vil være opfyldt ca. 50 % af gangene
    MsgBox List1.List(Int(Rnd * 20) + 8) 'Vælger mellem de sidste 20 navne
  else
    MsgBox List1.List(Int(Rnd * 28)) 'Vælger mellem ALLE navnene
  End if

Du kan så loope fx. 10000 gange over ovenstående kode, og se om udvalgene fordeler sig som du forventer. Hvis du da har lyst til at være så avanceret :o)
Avatar billede martin_moth Mester
06. august 2003 - 20:10 #4
Kodeeksempel:

Smid en Listbox (List1) og to knapper (Command1 og Command2) på din form. Kopier følgende kode, og kør programmet:

Private Sub Command1_Click()

'Vælger et tilfældigt navn
  Randomize
  MsgBox List1.List(Int(Rnd * 28))

End Sub

Private Sub Command2_Click()

'Vælger, men første 8 navne 50% så ofte
If Rnd < 0.5 Then
  MsgBox List1.List(Int(Rnd * 20) + 8)
Else
  MsgBox List1.List(Int(Rnd * 28))
End If

End Sub

Private Sub Form_Load()
  Dim i As Byte
   
  'Fylder din listbox med navne
  For i = 0 To 27
    List1.AddItem "Navn nr. " & i
  Next i
 
  'Giver knapperne navne
  Command1.Caption = "Vælg tilfældigt"
  Command2.Caption = "Første 8 navne 50% så ofte"
End Sub
Avatar billede m0nk3y Nybegynder
06. august 2003 - 20:20 #5
Tak for det, 2 sek. eller lidt mere :D, tjekker lige om det virker...
Avatar billede m0nk3y Nybegynder
06. august 2003 - 20:23 #6
Hmm ... man skal ikke vede at de 8 1. navne bliver valgt ikke så tit, kan man så bare smide den ene knap væk ???
Avatar billede m0nk3y Nybegynder
06. august 2003 - 20:26 #7
Hmm ... behøves det at være i en listbox ?, kan man ikke lave det i et normalt stykke tekst ????
Avatar billede martin_moth Mester
06. august 2003 - 20:31 #8
Du kan principielt alt hvad du vil. Spørgsmålet er HVAD du vil...
Avatar billede m0nk3y Nybegynder
06. august 2003 - 20:34 #9
hehe ... der står der er fejl med "If Rnd < 0.5 Then" og i den linie Rnd ... hvad er der galt .. ?
Avatar billede martin_moth Mester
06. august 2003 - 20:38 #10
Nu er VB så snedigt indrettet, at der kommer en fejlmeddelse. Prøv at læs den. Der kommer ingen fejl hos mig, så mon ikke du har copy-pastet forkert?
Avatar billede m0nk3y Nybegynder
06. august 2003 - 20:43 #11
hmm ... er det mit program ... ? For jeg har også lavet efter en turtual .. og der sagde den også der var fejl i ....
Avatar billede m0nk3y Nybegynder
06. august 2003 - 20:45 #12
ej sry, hvordan skal jeg udfylde >> List1.AddItem "Navn nr. " & i << ??? ... eller skal den ikke udfyldes ... er rimelig dårlig til VB ... hehe
Avatar billede martin_moth Mester
06. august 2003 - 20:46 #13
Hvis jeg bare forstod hvad du spurgte om...?
Avatar billede m0nk3y Nybegynder
06. august 2003 - 20:48 #14
sry, der er en kode i den "store" kode du har lavet. Den hedder

List1.AddItem "Navn nr. " & i

Og det er den der er fejl i. Du må undskylde hvis jeg spørger dumt, men hvad skal jeg med det ???? det har jo en sammenhæng med listboxen, men hvordan. ??? kan du forklare koden ???
Avatar billede martin_moth Mester
06. august 2003 - 21:05 #15
Det nytter ikke en pind at du skriver at der er fejl, så længe du ikek skriver HVAD for en fejl der er. Som jeg sagde før, det virker perfekt hos mig (Visual Basic 6), så mon du ikke har copy-pastet forkert, kaldt dine kontroller noget andet end List1, Command1 og Command2..?

Jeg kan fornemme at det er første gang du nogensinde prøver at programmere - no offence.

For i = o To 27... er en løkke - eller et loop. Og det må jeg indrømme at jeg ikke gider forklare hvad er, læs om det i en tutorial. Det er helt centralt at forstå løkker i programmering, så på den igen med den tutorial ;o)

I løkken smider jeg navne ind i list1. Til det bruger jeg List1.AddItem. Kan man lidt engelsk, vil man se, at det må være noget i retning af at "AddItem" = "tilføje et emne", i dette tilfælde et navn. Løkkens funktion er altså at tilføje navne i List1. Alternetivt kunne du droppe løkken og skrive

List1.AddItem "Anders And"
List1.AddItem "Onkel Joakim"
...
indtil der er smidt 28 navne i list1.

Prøv at læs lidt i udvalgte spørgsmål i dette link : http://www.eksperten.dk/kat/5/?searchtype=txt&words=tutorial&method=and&sort=score&catid=5

Du sparer dig selv og os andre for en masse(!) besvær ved at læse lidt på sagerne før du springer ud i det. Du skal som minimum forstå:

  Løkke-strukturer (While, For..to osv.)
  Betingede Sætninger (If Then, Select Case osv)
  Variabler og variabeltyper (Hvad er en "Integer", hvad er en "String", osv.)
  Forstå at kontroller (fx. knapper og listboxe) har noget der hedder egenskaber (Properties), Metoder (Methods) og Hændelser (Events)

Før du forstår ovenstående er der ingen ide i at forsøge at programmere. Held og lykke :o)
Avatar billede m0nk3y Nybegynder
06. august 2003 - 21:10 #16
Thx for svaret og hjælpen med VB jeg skal give dig de 60 point's og så begynde at læse på sagerne :D tak for det. Men jeg har altså været igang med VB før ... og kan vildt meget HTML. Tjek forbi www.WON-FreeWare.tk Der er der nogle programmer jeg har lavet. Dog ikke helt selv, men har da kunne lave den ... hehe .. man tak ...
Avatar billede m0nk3y Nybegynder
06. august 2003 - 21:11 #17
Hjemmesiden er ikke færdig endnu ... bare så du ved det ;D
Avatar billede martin_moth Mester
06. august 2003 - 21:15 #18
Held og lykke med VB6 - når du bliver god til det, vil du se at du kan lave de sejeste ting med det. Desuden er VB-syntaksen 99% identisk med VBScript, som du kan bruge hvis du laver asp-sider (nu nævnte du jo selv noget med hjemmesider). Desuden er VBA - macrosproget til bla. MS-Officepakken også 99% identisk med VB6. Så bare klø på. Starter du på helt bar bund, kunne du måske overveje VB.NET, med de fordele og ulemper det giver..
Avatar billede martin_moth Mester
06. august 2003 - 21:20 #19
PS: Kunne ikke undgå at bemærke, at I åbenbart lever af at lave og sælge hjemmesider til folk, og har gjort det siden 2000. Men på de tre år har I ikke fået jeres egen hjemmeside til at fungerer? Måske skulle I kikke lidt på "Target=" når I laver jeres links, så linket starter i det rigtige vindue ;o)

(sorry - kunne ikke lade være ;o)

Held og lykke med VB6 :o)
Avatar billede m0nk3y Nybegynder
06. august 2003 - 21:20 #20
hehe ... takker ... :D har du fået dine point's ??
Avatar billede m0nk3y Nybegynder
06. august 2003 - 21:21 #21
ja ... det kan jeg se ... hehe ...
Avatar billede m0nk3y Nybegynder
06. august 2003 - 22:39 #22
Hvis du snakker om www-WON-FreeWare.tk 's link, er det fordi siten ikke er færdig endnu ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging