The Stig Skrevet 11. oktober 2008 Del Skrevet 11. oktober 2008 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
The Stig Skrevet 11. oktober 2008 Forfatter Del Skrevet 11. oktober 2008 Løsningen var selvsagt "And" .... Jaja, man lærer så lenge man lever Lenke til kommentar
GeirGrusom Skrevet 11. oktober 2008 Del Skrevet 11. oktober 2008 (endret) 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 11. oktober 2008 av GeirGrusom Lenke til kommentar
The Stig Skrevet 11. oktober 2008 Forfatter Del Skrevet 11. oktober 2008 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
GeirGrusom Skrevet 11. oktober 2008 Del Skrevet 11. oktober 2008 Jeg har ikke brukt VB på mange mange år nå, så det er sikkert min feil, tenker jeg har satt parantess på feil plass. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå