Prosila bi vas če mi lahko pomaga te pri naslednjem problemu: VBA se učim iz vaše knjige, ki je mimo grede odlična, vendar pa se mi je zataknilo pri neki vaji na strani 82, kjer predlagate, da naj sami popravimo makro za preverjanje matematičnega znanja!
Uporabnika ne smemo več spraševati po številu zaželjenih vprašanj, temveč mu nova postavljamo dokler ne odgovori konec. Končamo zanko in izpišemo rezultat.
Mislim da sem to z zanko rešilal, vendar pa mi ne izpiše rezultata na koncu! Ker pa se že nekaj časa ubadam s tem problemov bi vas prosila če mi poveste kje sem naredila napako!
Moja koda je nasledja:
p.s. ne vem če je prav kako sem rešila to da mi šteje koliko vprašanj je bilo rešenih!
Sub mat()
Dim st1 As Integer
Dim st2 As Integer
Dim odgovor As String
Randomize
Dim odstotek As Single
Dim pravilnih As Integer
Dim sporocilo As String
Dim n As Integer
pravilnih = 0
While odgovor <> "konec"
st1 = CInt((100 * Rnd) + 1)
st2 = CInt((100 * Rnd) + 1)
odgovor = InputBox(CStr(st1) & "+" & CStr(st2) & "=", "Malo matematike")
n = CInt(odgovor) + 1
If (CInt(odgovor) = (st1 + st2)) Then
MsgBox ("odgovor je pravilen!")
pravilnih = pravilnih + 1
Else
MsgBox ("Napačen odgovor!!!" & CStr(st1) & "+" & CStr(st2) & "=" & CStr(st1 + st2))
End If
Wend
odstotek = ((pravilnih * 100) / n)
sporocilo = "Izmed " & vseh & " vprašanj ste pravilno odgovorili na " & pravilnih & " vprašanj! " & "To je ocena "
Select Case odstotek
Case Is < 60
MsgBox (sporocilo & "ena!")
Case Is < 70
MsgBox (sporocilo & "dva!")
Case Is < 85
MsgBox (sporocilo & "tri!")
Case Is < 95
MsgBox (sporocilo & "štiri!")
Case Else
MsgBox (sporocilo & "pet!")
End Select
End Sub
Morda je prav problem v tem štetju teh poskusov!
Že vnaprej se vam zahvaljujem za pomoč!
Lp, missy.
Vaša knjiga-pomoč
Pozdravljeni,
Kodo sem vam popravil in dodal ustrezne opombe. Toda koda, ki je napisana spodaj še vedno ne bo delovala povsem pravilno, ker je problem še v zanki, zato si preberite še razlago spodaj:
Problem, ki se pojavi v tej kodi je v zanki, saj uporabnik v nekem trenutku lahko odgovori z nečim kar ni število ('Konec' ni število) in zato pri preverjanju pravilnosti rezultata stvar klavrno "crkne". V zanko je zatorej potrebno dodati še vprašanje, ali je uporabnik sploh vnesel številko. V spodnji kodi je zapisana samo koda zanke, ki jo ustrezno pač vstavite v gornjo kodo:
Kodo sem vam popravil in dodal ustrezne opombe. Toda koda, ki je napisana spodaj še vedno ne bo delovala povsem pravilno, ker je problem še v zanki, zato si preberite še razlago spodaj:
Koda: Izberi vse
Sub mat()
Dim st1 As Integer
Dim st2 As Integer
Dim odgovor As String
Randomize
Dim odstotek As Single
Dim pravilnih As Integer
Dim sporocilo As String
' to bo števec vseh vprašanj zato ga tako tudi poimenujte Dim n As Integer
Dim vseh As Integer
pravilnih = 0
While odgovor <> "konec"
st1 = CInt((100 * Rnd) + 1)
st2 = CInt((100 * Rnd) + 1)
odgovor = InputBox(CStr(st1) & "+" & CStr(st2) & "=", "Malo matematike")
' število vprašanj nima popolnoma nobene zveze z odgovorom
'n = CInt(odgovor) + 1
' postavili smo novo vprašanje zato moramo povečati števec vseh vprašanj!
vseh = vseh + 1
If (CInt(odgovor) = (st1 + st2)) Then
MsgBox ("odgovor je pravilen!")
pravilnih = pravilnih + 1
Else
MsgBox ("Napačen odgovor!!!" & CStr(st1) & "+" & CStr(st2) & "=" & CStr(st1 + st2))
End If
Wend
' odstotek izračunamo iz števila vseh vprašanj
'odstotek = ((pravilnih * 100) / n)
odstotek = ((pravilnih * 100) / vseh)
sporocilo = "Izmed " & vseh & " vprašanj ste pravilno odgovorili na " & pravilnih & " vprašanj! " & "To je ocena "
Select Case odstotek
Case Is < 60
MsgBox (sporocilo & "ena!")
Case Is < 70
MsgBox (sporocilo & "dva!")
Case Is < 85
MsgBox (sporocilo & "tri!")
Case Is < 95
MsgBox (sporocilo & "štiri!")
Case Else
MsgBox (sporocilo & "pet!")
End Select
End Sub
Koda: Izberi vse
While odgovor <> "konec"
st1 = CInt((100 * Rnd) + 1)
st2 = CInt((100 * Rnd) + 1)
odgovor = InputBox(CStr(st1) & "+" & CStr(st2) & "=", "Malo matematike")
vseh = vseh + 1
' preverjanje pravilnosti rezultata izvajamo SAMO, če je uporabnik vnesel številko
If (IsNumeric(odgovor)) Then
' število vprašanj nima popolnoma nobene zveze z odgovorom
'n = CInt(odgovor) + 1
' postavili smo novo vprašanje zato moramo povečati števec vseh vprašanj!
If (CInt(odgovor) = (st1 + st2)) Then
MsgBox ("odgovor je pravilen!")
pravilnih = pravilnih + 1
Else
MsgBox ("Napačen odgovor!!!" & CStr(st1) & "+" & CStr(st2) & "=" & CStr(st1 + st2))
End If
End If
Wend
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator