1

どうぞよろしくお願いいたします。

以下は、宿題のために提出しようとしている簡単なプログラミングの割り当てです... プログラムの 65 行目と 69 行目に 2 つの関数を書きました * 1 行前にコメントでマークされ、関数は 93 行目で定義されています101 および 103-111 *1 行先にコメントを付けてマークすることもできます。プログラムを実行すると、「最大降雨量」と「最小降雨量」の値 0 が返され、月 (インデックス) の値は提供されません。それが降った月で最大の降雨量とそれが発生した月で最小の降雨量を表示することが私の目標です...これに正しく近づいていますか?

いつもありがとう。

    Module Module1

Sub Main()
    'declare constant for array size- to be used in parrallel arrays 
    Const SIZE As Integer = 12

    'declare parrallel arrays rainfall and month
    Dim rainfall(SIZE) As Double
    Dim month(SIZE) As String
    month(0) = "January"
    month(1) = "February"
    month(2) = "March"
    month(3) = "April"
    month(4) = "May"
    month(5) = "June"
    month(6) = "July"
    month(7) = "August"
    month(8) = "September"
    month(9) = "October"
    month(10) = "November"
    month(11) = "December"

    'declare other variables
    Dim total As Double
    Dim average As Double
    Dim index As Integer
    Dim largest As Double = rainfall(0)
    Dim smallest As Double = rainfall(0)
    Dim keepGoing As String = "yes"


    'main program is encapsulated in a while loop 
    'so that user can choose to use program again or exit
    While keepGoing = "yes" Or keepGoing = "Yes"
        'program intro text
        Call programIntro()

        '***********main program module********************************
        Call rainfallProgram(index, SIZE, month, rainfall, total, average, largest, smallest)

        Console.WriteLine("  ")
        Console.WriteLine("  ")
        Console.WriteLine("Would you like to use RainfallAverage again?")
        Console.Write("Enter 'yes' to keep going or any other key to exit:  ")
        keepGoing = Console.ReadLine()
        Console.WriteLine("  ")
        Console.WriteLine("  ")
    End While
End Sub

Sub rainfallProgram(ByRef index, ByVal SIZE, ByVal month, ByRef rainfall,
                    ByRef total, ByRef average, ByRef largest, ByRef smallest)
    'input months and rainfall data in parallel arrays
    For index = 0 To SIZE - 1
        Console.Write("Enter rainfall for " & (month(index)) & ":  ")
        rainfall(index) = (Console.ReadLine())
        Console.WriteLine(" ")
    Next

    Call getTotalRainfall(index, SIZE, rainfall, total)

    Call getAverageRainfall(average, total)

    Console.WriteLine(" ")
    ' ******First problem occurs here
    Console.WriteLine("The largest amount of rainfall was " & (CDbl(getLargestRainfall(index, SIZE, rainfall, largest))) & " inches")
    Console.WriteLine("     and occurred durring" & month(index))

    Console.WriteLine(" ")
    '**********Second Problem occurs here 
    Console.WriteLine("The smallest amount of rainfall was " & (CDbl(getSmallestRainfall(index, SIZE, rainfall, smallest))) & " inches")
    Console.WriteLine("     and occurred durring" & month(index))


    ' Call functionSmallestRainfall()
End Sub

'module for total rainfall
Sub getTotalRainfall(ByVal index, ByVal SIZE, ByVal rainfall, ByRef total)
    For index = 0 To SIZE - 1
        total = total + rainfall(index)
    Next
    Console.WriteLine(" ")
    Console.WriteLine("Total Rainfall:  " & total & " inches")
    index = index + 1
End Sub

'module for average rainfall
Sub getAverageRainfall(ByRef average, ByRef total)
    average = (total / 12)
    Console.WriteLine(" ")
    Console.WriteLine("Average Rainfall:  " & average & " inches")
End Sub

'function for largest rainfall
'********** Another Problem occurs here 
Function getLargestRainfall(ByVal index As Integer, ByVal SIZE As Integer, ByVal rainfall() As Double, ByRef largest As Double) As Double
    For index = 0 To rainfall.Length - 1
        If rainfall(index) > largest Then
            rainfall(index) = largest
        End If
    Next
    Return largest
End Function

'function for smallest rainfall
 '********** Another Problem occurs here 
Function getSmallestRainfall(ByVal index As Integer, ByVal SIZE As Integer, ByVal rainfall() As Double, ByRef smallest As Double) As Double
    For index = 0 To rainfall.Length - 1
        If rainfall(index) > smallest Then
            rainfall(index) = smallest
        End If
    Next
    Return smallest
End Function

'program intro text display
Sub programIntro()
    Console.WriteLine(" ")
    Console.WriteLine("---------------------------------------------------------")
    Console.WriteLine("************   Welcome to RainfallAverage   ************")
    Console.WriteLine("---------------------------------------------------------")
    Console.WriteLine("                                                      ")
    Console.WriteLine("     This program will help to total, average, ")
    Console.WriteLine("       and compare the rainfall of 12 months    ")
    Console.WriteLine(" ")
    Console.WriteLine("      Unit is inches. Input numeric values only")
    Console.WriteLine(" ")
    Console.WriteLine(" ")
End Sub

エンドモジュール

4

1 に答える 1

3

これが課題であることを考えると(正直に言ってくれてありがとう)完全な解決策は提供しませんが、残りの部分を自分で理解するのを助けるという精神で、私が見た2つの問題を指摘します:-)

Function getSmallestRainfall(ByVal index As Integer, ByVal SIZE As Integer, ByVal rainfall() As Double) As Double
    Dim smallest = rainfall(0) 
    For index = 0 To rainfall.Length - 1
        If rainfall(index) < smallest Then
            smallest = rainfall(index) 
        End If
    Next
    Return smallest
End Function

ifステートメントを変更して、必要なときに、つまり、すでにアクセスした値よりも小さい値に達したときに割り当てが実行されるようにしました(rainfall(index)<smallest)。代入文も変更しました。現在検査されている要素が削除され、現在最小の降雨値に置き換えられるように、降雨配列を変更したもの。=は破壊的な更新演算子であり、左側と右側を等しくするものではありません。したがって、どの値を変更し、どの値を保持しているかを知る必要があります。更新するものを左側に配置し、その新しい値を右側に配置します(たとえば、x = 5は値5をxに割り当てます)。

お役に立てば幸いです。

于 2012-11-29T18:30:24.797 に答える