Kcode1
Kcode1

Reputation: 41

VB programme producing incorrect outputs

Function ScoreAverage(ByVal Sname As String, ByVal test1 As Integer, ByVal test2 As Integer, ByVal test3 As Integer)
    Dim average As Integer

    average = (test1 + test2 + test3) / 3

    If average > 7 Then
        Console.WriteLine(Sname & " your average score is " & average & " which is excellent")
    ElseIf average > 4 <= 7 Then
        Console.WriteLine(Sname & "  your average score is " & average & " which is good")
    ElseIf average <= 4 Then
        Console.WriteLine(Sname & "  your average score is " & average & " which is a fail")
    End If

    ScoreAverage = average
End Function
Sub Main()
    Dim Sname As String
    Dim test1, test2, test3 As Integer

    Console.WriteLine("This programme calculates the average of 3 tests scored out of 10")
    Console.WriteLine("Please enter your name...")
    Sname = Console.ReadLine

    Console.WriteLine(Sname & " enter your first test score out of 10")
    test1 = Console.ReadLine

    Console.WriteLine(Sname & " enter your second test score out of 10")
    test2 = Console.ReadLine

    Console.WriteLine(Sname & " enter your second test score out of 10")
    test3 = Console.ReadLine


    ScoreAverage(Sname, test1, test2, test3)

End Sub

End Module

I wrote this programme using functions on vb but when I run it I am presented with incorrect average outputs. Could anyone please help figure out what I have done wrong or missed out? Thanks.

Upvotes: 0

Views: 60

Answers (2)

Mark Hall
Mark Hall

Reputation: 54532

Change

average = test1 + test2 + test3 /3

to

average = (test1 + test2 + test3) /3 

You are adding test1 and test2 then adding 1/3 of test3, the parenthesis will allow you to add your test results then divide them by 3. see this MSDN article on Operator Precedence

You are also returning an integer from your ScoreAverage Function you need to return a Double instead, as it stands right now you will just get whole numbers.

Function ScoreAverage(ByVal Sname As String, ByVal test1 As Integer, ByVal test2 As Integer, ByVal test3 As Integer) As Double
    Dim average As Double

    average = (test1 + test2 + test3) / 3

    If average > 7 Then
        Console.WriteLine(Sname & " your average score is " & average.ToString("N2") & " which is excellent")
    ElseIf average > 4 Then
        Console.WriteLine(Sname & "  your average score is " & average.ToString("N2") & " which is good")
    Else
        Console.WriteLine(Sname & "  your average score is " & average.ToString("N2") & " which is a fail")
    End If

    Return average
End Function

Upvotes: 1

Change your code to:

Dim average As Double = ((test1 + test2 + test3) / 3)

And change you outputs to:

If average > 7 Then
    Console.WriteLine(Sname & " your average score is " & average.ToString("N2") & " which is excellent")
ElseIf average <= 4 Then
    Console.WriteLine(Sname & "  your average score is " & average.ToString("N2") & " which is a fail")
Else
    Console.WriteLine(Sname & "  your average score is " & average.ToString("N2") & " which is good")
End If

Upvotes: 1

Related Questions