Avatar billede fune Nybegynder
25. april 2006 - 11:59 Der er 15 kommentarer og
1 løsning

Brugte ord i et array

Jeg er igang med at lave et program, hvor man skal stave til forskellige ord, og i det program har jeg et array som dette:

        OrdArray(0).Ord = "Hest"
        OrdArray(1).Ord = "Hund"
        OrdArray(2).Ord = "Kat"
        OrdArray(3).Ord = "Fisk"
        OrdArray(4).Ord = "Giraf"
        OrdArray(5).Ord = "Elefant"
        OrdArray(6).Ord = "Abe"
        OrdArray(7).Ord = "Løve"
        OrdArray(8).Ord = "Tiger"
        OrdArray(9).Ord = "Haj"

Programmet vælger selv et random array af disse 10 forskellige muligheder, mit spørgsmål er; Hvordan får jeg den til at tjekke om den har brugt et af array'ne? Forstået på den måde at når den f.eks. har taget OrdArrray(6).Ord = "Abe", så må den ikke længere bruge dette ord, før man genstarter programmet. Sådan man kan "gennemføre" programmet efter at have været igennem de 10 ord.

Håber i kan hjælpe mig snarest :D!
/fune
Avatar billede excelent Ekspert
25. april 2006 - 12:36 #1
Avatar billede fune Nybegynder
25. april 2006 - 12:47 #2
Kan du ikke prøve at forklare hvordan jeg skal gøre? Fordi forstod ikke lige så meget i det link du sendte mig der :/
Avatar billede supertekst Ekspert
25. april 2006 - 16:29 #3
Lav et array af boolean med samme antal elementer. Når programmet starter - så sættes alle værdier til True. Når et ord er valgt - sættes værdien på samme plads i array2 til False. Når random vælger værdi - så vælges der igen, hvis tilsvarende plads i array2 er false.
Avatar billede excelent Ekspert
25. april 2006 - 19:24 #4
indsæt i modul tal listes i A1:a10, dyr listes i B1:b10

Sub ny()
Dim t, j, x, b, tt(10), tal(10), var(10)
var(0) = "Hest": var(1) = "Hund": var(2) = "Kat": var(3) = "Fisk"
var(4) = "Giraf": var(5) = "Elefant": var(6) = "Abe"
var(7) = "Løve": var(8) = "Tiger": var(9) = "Haj"

For t = 1 To 10
  tt(t) = t
Next

For t = 1 To 10
om:
x = Int(Rnd * 10) + 1
If tt(x) = "0" Then GoTo om
For j = 1 To 10
  If tt(j) = x Then
    tal(t) = tt(j)
  tt(j) = "0"
  End If
Next
Next

For j = 1 To 10
  Range("a" & j).Value = tal(j)
  Range("b" & j).Value = var(j - 1)
Next
End Sub
Avatar billede fune Nybegynder
26. april 2006 - 08:41 #5
excelent, jeg har valgt at sætte det op på den her måde:
OrdVærdi = Round(Rnd() * 9, 0)
    'If OrdVærdi ikke er i brugteordarray Then
        Form1.lblOrd.Caption = OrdArray(OrdVærdi).Ord
        txtIndtast.Text = ""
        If OrdArray(OrdVærdi).Billede <> "" Then
            pctBillede = LoadPicture(OrdArray(OrdVærdi).Billede)
        Else
            pctBillede.Picture = Nothing
        End If
    'Else
        'NytOrd
    'End If

Det jeg ikke helt kan finde ud hvordan jeg skal omsætte til VB sprog er; "'If OrdVærdi ikke er i brugteordarray Then"

Håber du kan hjælpe mig :) .. Er lidt tabt :/
Avatar billede excelent Ekspert
26. april 2006 - 11:49 #6
Min kode genererer de 10 tal i tilfældig orden tal(1) til tal(10)
det er den variabel du skal bruge når du skal have vist dine billeder
så lav fx. en for next løkke, hvor de vises efter tur

jeg har mere end svært ved at gennemskue dine array variabler
virker de hos dig?
Avatar billede fune Nybegynder
26. april 2006 - 12:01 #7
Ja altså programmet virker fint med at den tager et tilfældig tal.. Jeg kan ikke i din kode finde det sted hvor den sortere dem fra, sådan at når den har brugt tal(2), så må den ikke bruge den mere før man genstarter programmet.

Skal jeg prøve at poste hele min kode, så kan du se hvad jeg har skrevet indtil videre?
Avatar billede excelent Ekspert
26. april 2006 - 12:12 #8
ja prøv det
Avatar billede fune Nybegynder
26. april 2006 - 12:13 #9
Public BrugteOrdArray As String
Public I As Integer
Private OrdVærdi As Integer
Private Type TypeOrd
    Ord As String
    Billede As String
    Lyd As String
    Svar As Boolean
    Brugt As Boolean
End Type

Private OrdArray(9) As TypeOrd

Private Sub cmdAfslut_Click()
End
End Sub

Private Sub cmdKontaktOs_Click()
KontaktOs.Show
End Sub

Private Sub cmdOk_Click()
    If LCase(txtIndtast) = LCase(lblOrd) Then
        MsgBox ("Flot :)")
        OrdArray(OrdVærdi).Brugt = True
        OrdArray(OrdVærdi).Svar = True
        NytOrd
        'I = 0
        'BrugteOrdArray(I) = LCase(txtIndtast)
        'I = I + 1
    Else
        MsgBox ("Synd :(")
    End If


End Sub

Private Sub cmdOmP_Click()
    OmProgrammet.Show
End Sub

Private Sub cmdVidere_Click()
    NytOrd
End Sub

Private Sub Form_Load()
        Randomize Time
        OrdArray(0).Ord = "Hest"
        OrdArray(1).Ord = "Båd"
        OrdArray(2).Ord = "Kat"
        OrdArray(3).Ord = "Fisk"
        OrdArray(4).Ord = "Giraf"
        OrdArray(5).Ord = "Elefant"
        OrdArray(6).Ord = "Abe"
        OrdArray(7).Ord = "Løve"
        OrdArray(8).Ord = "Tiger"
        OrdArray(9).Ord = "Haj"
        OrdArray(0).Billede = "Hest.gif"
        OrdArray(1).Billede = "Båd.gif"
        'OrdArray(2).Billede = "Kat.gif"
        'OrdArray(3).Billede = "Fisk.gif"
        'OrdArray(4).Billede = "Giraf.gif"
        'OrdArray(5).Billede = "Elefant.gif"
        'OrdArray(6).Billede = "Abe.gif"
        'OrdArray(7).Billede = "Løve.gif"
        'OrdArray(8).Billede = "Tiger.gif"
        'OrdArray(9).Billede = "Haj.gif"
        'OrdArray(0).Lyd = "Hest.wav"
        'OrdArray(1).Lyd = "Båd.wav"
        'OrdArray(2).Lyd = ".wav"
        'OrdArray(3).Lyd = ".wav"
        'OrdArray(4).Lyd = ".wav"
        'OrdArray(5).Lyd = ".wav"
        'OrdArray(6).Lyd = ".wav"
        'OrdArray(7).Lyd = ".wav"
        'OrdArray(8).Lyd = ".wav"
        'OrdArray(9).Lyd = ".wav"
        NytOrd

   
End Sub

Private Sub NytOrd()
    OrdVærdi = Round(Rnd() * 9, 0)
    'If OrdVærdi ikke er i brugteordarray Then <---- Det jeg skal have oversat til VB
        Dysleksi.lblOrd.Caption = OrdArray(OrdVærdi).Ord
        txtIndtast.Text = ""
        If OrdArray(OrdVærdi).Billede <> "" Then
            pctBillede = LoadPicture(OrdArray(OrdVærdi).Billede)
        Else
            pctBillede.Picture = Nothing
        End If
    'Else
        'NytOrd
    'End If
   
End Sub

Private Sub txtIndtast_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        cmdOk_Click
    End If
End Sub
Avatar billede excelent Ekspert
26. april 2006 - 13:06 #10
her er min blander:

Sub Bland()
'Genererer 1-10 i tilfældig orden subben kaldes i opstartsface
Dim t, j, x, tt(10), tal(10)

For t = 1 To 10
  tt(t) = t
Next

For t = 1 To 10
om:
x = Int(Rnd * 10) + 1
If tt(x) = "0" Then GoTo om
For j = 1 To 10
  If tt(j) = x Then
    tal(t) = tt(j)
  tt(j) = "0"
  End If
Next
Next

End Sub

og din vælger:
Private Sub NytOrd()
Dim ordtal
  OrdVærdi = tal(ordtal + 1): ordtal = ordtal + 1
  Dysleksi.lblOrd.Caption = OrdArray(OrdVærdi).Ord
  txtIndtast.Text = ""
    If OrdArray(OrdVærdi).Billede <> "" Then
      pctBillede = LoadPicture(OrdArray(OrdVærdi).Billede)
    Else
      pctBillede.Picture = Nothing
    End If
   
End Sub

kan ikke teste her, så prøv lige selv
Avatar billede excelent Ekspert
26. april 2006 - 13:13 #11
med kaldes mener jeg  - Call Bland
Avatar billede fune Nybegynder
27. april 2006 - 09:06 #12
Din blander, den tager bare et tilfældig tal mellem 1-10. Men gør den også sådan at når jeg har brugt f.eks. nummer 2, så kommer den ikke igen, før programmet genstartes?

Sådan når man har svaret på de 10 ord, så skal man genstarte programmet.
Avatar billede excelent Ekspert
27. april 2006 - 10:39 #13
nej min blander genererer 10 tal i tilfældig orden fx. sådan:

tal(1)=5 tal(2)=9 tal(3)=1 tal(4)=8 tal(5)=6
tal(6)=2 tal(7)=4 tal(8)=7 tal(9)=10 tal(10)=3

første gang du kører din sub NytOrd, får Ordværdi værdien 5 og så fremdeles

Når du starter på en ny runde, skal variablen ordtal sættes=0
Avatar billede mihl Nybegynder
27. april 2006 - 10:58 #14
Dim Taeller as Single
Public BrugteOrdArray As String
Public I As Integer
Private OrdVærdi As Integer
Private Type TypeOrd
    Ord As String
    Billede As String
    Lyd As String
    Svar As Boolean
    Brugt As Boolean
    Vaerdi as Boolean
End Type

Private OrdArray(9) As TypeOrd

Private Sub cmdAfslut_Click()
End
End Sub

Private Sub cmdKontaktOs_Click()
KontaktOs.Show
End Sub

Private Sub cmdOk_Click()
    If LCase(txtIndtast) = LCase(lblOrd) Then
        MsgBox ("Flot :)")
        OrdArray(OrdVærdi).Brugt = True
        OrdArray(OrdVærdi).Svar = True
        NytOrd
        'I = 0
        'BrugteOrdArray(I) = LCase(txtIndtast)
        'I = I + 1
    Else
        MsgBox ("Synd :(")
    End If


End Sub

Private Sub cmdOmP_Click()
    OmProgrammet.Show
End Sub

Private Sub cmdVidere_Click()
    NytOrd
End Sub

Private Sub Form_Load()
        Randomize Time
        OrdArray(0).Ord = "Hest"
        OrdArray(1).Ord = "Båd"
        OrdArray(2).Ord = "Kat"
        OrdArray(3).Ord = "Fisk"
        OrdArray(4).Ord = "Giraf"
        OrdArray(5).Ord = "Elefant"
        OrdArray(6).Ord = "Abe"
        OrdArray(7).Ord = "Løve"
        OrdArray(8).Ord = "Tiger"
        OrdArray(9).Ord = "Haj"
        OrdArray(0).Billede = "Hest.gif"
        OrdArray(1).Billede = "Båd.gif"
        'OrdArray(2).Billede = "Kat.gif"
        'OrdArray(3).Billede = "Fisk.gif"
        'OrdArray(4).Billede = "Giraf.gif"
        'OrdArray(5).Billede = "Elefant.gif"
        'OrdArray(6).Billede = "Abe.gif"
        'OrdArray(7).Billede = "Løve.gif"
        'OrdArray(8).Billede = "Tiger.gif"
        'OrdArray(9).Billede = "Haj.gif"
        'OrdArray(0).Lyd = "Hest.wav"
        'OrdArray(1).Lyd = "Båd.wav"
        'OrdArray(2).Lyd = ".wav"
        'OrdArray(3).Lyd = ".wav"
        'OrdArray(4).Lyd = ".wav"
        'OrdArray(5).Lyd = ".wav"
        'OrdArray(6).Lyd = ".wav"
        'OrdArray(7).Lyd = ".wav"
        'OrdArray(8).Lyd = ".wav"
        'OrdArray(9).Lyd = ".wav"
    OrdArray(0).Vaerdi = false
    OrdArray(1).Vaerdi = false
    OrdArray(2).Vaerdi = false
    OrdArray(3).Vaerdi = false
    OrdArray(4).Vaerdi = false
    OrdArray(5).Vaerdi = false
    OrdArray(6).Vaerdi = false
    OrdArray(7).Vaerdi = false
    OrdArray(8).Vaerdi = false
    OrdArray(9).Vaerdi = false
    Taeller = 0
        NytOrd

 
End Sub

Private Sub NytOrd()
    OrdVærdi = Round(Rnd() * 9, 0)
    If Ordarray(OrdVærdi).Vaerdi = false then
        Dysleksi.lblOrd.Caption = OrdArray(OrdVærdi).Ord
        txtIndtast.Text = ""
        If OrdArray(OrdVærdi).Billede <> "" Then
            pctBillede = LoadPicture(OrdArray(OrdVærdi).Billede)
        Else
            pctBillede.Picture = Nothing
        End If
    Ordarray(ordværdi).Vaerdi = true
    Else
        if Taeller > 9 then
        NytOrd
        Taeller = Taeller + 1
    else
    Msgbox("Woov... Du har gennemført")
    End If
 
End Sub

Private Sub txtIndtast_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        cmdOk_Click
    End If
End Sub

Sådan der... Go' fornøjelse...
Avatar billede fune Nybegynder
27. april 2006 - 10:58 #15
Mange tak :D
Avatar billede mihl Nybegynder
27. april 2006 - 11:03 #16
Svar ;)
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