Gå til innhold

Hva er feil? VB Oppgave.


Anbefalte innlegg

Hallo.

 

Sitter med en oppgave i boken "Visual Basic 2005". Oppgaven er enkelt og greit å binde en bokstav (karakter) til tall i et array. Problemet er at det er tydligvis noe galt med utregningen, ettersom jeg får samme bokstav til alle tallene. Kommenterer jeg bort If-setningen for "B", får jeg kun "C" i output, kommenterer jeg bort "C" får jeg kun "D" osv osv.

 

Har kjørt meg utrolig fast nå, og har prøvd "hundrevis" av kombinasjoner, men har nå sett meg helt blind på koden - håper derfor det er noen som kan hjelpe meg.

 

Det skal også sies at jeg sliter litt med å forstå hvordan formelen skal fungere, men den er altså skrevet som vist i boken.

 

Here goes:

 

Public Class project2
Dim scores(19) As Integer
Dim mean As Double
Dim s, sdev, ammount, j, k As Double
'Dim grades As String

Private Sub btnAnalyze_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnalyze.Click

	lstOutput.Items.Clear()
	mean = 0
	sdev = 0


	examscores()
	ammount = scores.Length

	For a As Integer = 0 To scores.GetUpperBound(0)

		mean += scores(a) / ammount

	Next

	For b As Integer = 0 To scores.GetUpperBound(0)

		sdev += ((scores(b) - mean)) ^ 2 / (ammount - 1)
		s = Math.Sqrt(sdev)
	Next

	lstOutput.Items.Add(ammount)
	lstOutput.Items.Add(mean)
	lstOutput.Items.Add(FormatNumber(s))

	j = s * 1.5
	k = s * 0.5

	For c As Integer = 0 To scores.GetUpperBound(0)

		grades(c)

	Next

End Sub
Sub examscores()
	scores(0) = 59
	scores(1) = 60
	scores(2) = 65
	scores(3) = 75
	scores(4) = 56
	scores(5) = 90
	scores(6) = 66
	scores(7) = 62
	scores(8) = 98
	scores(9) = 72
	scores(10) = 95
	scores(11) = 71
	scores(12) = 63
	scores(13) = 77
	scores(14) = 65
	scores(15) = 77
	scores(16) = 65
	scores(17) = 50
	scores(18) = 85
	scores(19) = 62
End Sub

Sub grades(ByRef c As Double)
	If scores(c) >= (mean + j) Then
		lstOutput.Items.Add("A")
		Exit Sub
	End If
	If (mean + k) <= scores(c) < (mean + j) Then
		lstOutput.Items.Add("B")
		Exit Sub
	End If
	If (mean - k) <= scores(c) < (mean + k) Then
		lstOutput.Items.Add("C")
		Exit Sub
	End If
	If (mean - j) < scores(c) <= (mean - k) Then
		lstOutput.Items.Add("D")
		Exit Sub
	End If
	If scores(c) < (mean - j) Then
		lstOutput.Items.Add("F")
		Exit Sub
	End If
End Sub


End Class

Lenke til kommentar
Videoannonse
Annonse

Er ikke den koden vanvittig komplisert for noe såpass enkelt?

 

Dim results As Char() = {'A', 'B', 'C, 'D', 'F'}
Dim Medians As Char() = {'-', ' ', '+'}
Dim grades() As Double = {59, 67, 100}

Public Function GetCharFromScore(score As Double) As Char
 Return Results((100*results.Length)/score )
End Function
Public Function GetMedian(score As Double) As Char
 Return Medians((score - Math.Floor(score)) * Medians.Length)
End Function

Public Sub ExamResults()
 For Each d As Double in grades
Console.WriteLine(GetCharFromScore(d) & GetMedian(d))
 Next
End Sub

 

Jeg får ikke testet om dette fungerer, siden jeg sitter på en maskin med Linux, men jeg tror det er sånn sirkus riktig.

Endret av GeirGrusom
Lenke til kommentar

Fikk ikke prøvd koden din, fikk en del syntax-feil i "Diminga". Kunne vært veldig spennende å prøve :)

 

Vil forøvrig påstå at koden min er veldig fordummet, noe den dessverre måtte være da den skulle følge "oppskriften" i boka. Personlig ville jeg for eksempel heller laget en tekstfil i stedet for å fylle ut tabellen manuelt, og heller brukt "Select Case" eller "ElseIf", menmen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...