0

学校向けのプロジェクトがあります。彼らは、10*10 の配列にする必要があるデータ ファイルをくれました。この配列は上三角形である必要があります。つまり、対角線以下の値はすべてゼロでなければなりません。このデータ ファイルは、プロジェクトがステージごとにかかる時間です。これは、すべての [i][j] が i から j までの段階の時間を表すことを意味します。問題をさらに複雑にするために、列ごとの最長時間を見つけて、次の列の最長時間に追加するよう求められます。これまでの私のコードは次のとおりです。

#include <iostream>
#include<iomanip>
#include <fstream>
#include <cmath>
using namespace std;

//Function prototype
int minCompletionTime (int Data[], int numTasks);

int main()
{
    //Declaring and initializing variables
    int num_Events(0), completion_Time(0);
    int startSearch(0), endSearch(0);
    const int SIZE(10);
    char datch;

    //Declaring an array to hold the duration of each composite activity
    int rows(0),duration_Data [10];

    //Declaring an input filestream and attaching it to the data file
    ifstream dataFile;
    dataFile.open("duration.dat");

    //Reading the data file and inputting it to the array. Reads until eof
    //marker is read
    while (!dataFile.eof())
    {
        //Declaring an index variable for the array

        //Reading data into elements of the array
        dataFile >> duration_Data[rows];

        //Incrementing the index variable
        rows++;

    }
    //Taking input for the number of events in the project
    cout << "Enter the number of events in the project >>> ";
    cin  >> num_Events;

    //Calling the function to calculate the minimum completion time 
    completion_Time = minCompletionTime(duration_Data, num_Events);

    //Outputting the minimum completion time
    cout << "The minimum time to complete this project is " << completion_Time
        << "." << endl;

}

int minCompletionTime (int Data[], int numTasks)
{
    int sum=0;
    //As long as the index variable is less than the number of tasks to be
    //completed, the time to complete the task stored in each cell will be 
    //added to a sum variable
    for (int Idx=0; Idx < numTasks ; Idx++)
    {
        sum += Data[Idx];
    }

    return sum;
}

私のデータ ファイルには、この要素を保持する 6 つの要素しかありません: 9 8 0 0 7 5 操作を開始するには、データは次のようになります。

0 0 0 0 0 0 0 0 0 0 
0 0 9 8 0 0 0 0 0 0 
0 0 0 0 7 0 0 0 0 0
0 0 0 0 5 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0

少し混乱します。ごめんなさい。1 列目と 2 列目は、同じように 0 と 1 行目の値を持つ必要があります。5 行目以降もすべてゼロにする必要があります。これは、他のデータ ファイルからの情報が追加されるためです。

4

1 に答える 1

0

この問題を解決するにはいくつかの方法があります。ここに2つの非常に素朴な方法があります:

1. 10x10 配列を使用します。

  • データ ファイル ( ) からすべてを読み取りますdataFile >> data[row][col]
  • ネストされたループが 2 つあります。
    • 外側のループは列を反復処理します。
    • 内側のループは、その特定の列の行を反復処理します。
    • 最大値を見つける必要があり、対角線の下の値はゼロであるため、怠惰で各列の最大値を見つけることができます (10x10 よりもはるかに大きい場合は問題が発生する可能性があります)。ただし、必要な行だけを調べたい場合は、理解してもらいます (非常に簡単です。考えすぎないでください)。

2. 1x10 アレイのみを使用します。

  • 配列を最小値 (0 または -1 で動作するはずです) で初期化しますmax_row
  • 各行の項目ごとに読み取り、に格納されている値と比較して、max_row適切に置き換えます。
  • 終わったら、 の要素を合計するだけですmax_row
于 2012-06-29T16:12:19.227 に答える