Reputation: 41
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
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
Reputation: 9981
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