1. ホーム
  2. c++

[解決済み] モンキービジネスc++ [重複]

2022-03-03 17:53:24

質問

古い教科書を使って独学でC++を学ぼうとしているのですが、ご意見をお聞かせください。オンラインでプログラムの動作するコードを見つけることができますが、全く異なるアプローチを試す前に自分のコードを動作させたいと考えています。

3x7の2次元配列を使って、3匹のサルが1週間を通して食べた毎日の食料を保持するプログラムを書きたいのですが、どうすればいいですか?

一日の食物消費量の平均値、一週間の食物消費量が最も少ないサル、一週間の食物消費量が最も多いサルを出力する必要があります。

getLeast関数は、その名の通り、サルの中で最も少ない週間食料消費量を取得するものですが、それ以外は今のところすべて動作します。しかし、getMost関数は問題なく動作しているのに対し、getLeast関数は0を出力します。

また、私のコードの改善や効率化についてアドバイスいただけるようなコメントをお待ちしています。お読みいただきありがとうございました。

以下は私のコードです。

#include<iostream>
using namespace std;

const int numberRows = 3;
const int numberCol = 7;

void getData(int array[][numberCol], int);
double getAverage(int array[][numberCol], int);
int getRowSum(int array[][numberCol], int);
double getAverage(int array[][numberCol], int);
int getLeast(int, int, int);
int getMost(int, int, int);

int main()
{
    int monkeys[numberRows][numberCol];
    int monkey1 = 0, monkey2 = 1, monkey3 = 2, monk1Total, monk2Total, monk3Total, largest, smallest;
    getData(monkeys,numberRows);
    monk1Total = getRowSum(monkeys, monkey1);
    monk2Total = getRowSum(monkeys, monkey2);
    monk3Total = getRowSum(monkeys, monkey3);
    smallest = getLeast(monk1Total, monk2Total, monk3Total);
    largest = getMost(monk1Total, monk2Total, monk3Total);
    cout << "The average daily food consumption by the monkeys was " << getAverage(monkeys, numberRows)/3 << "." << endl;
    cout << "The smallest amount of food eaten by one monkey in a week was: " << smallest << "."<<endl;
    cout << "The largest amount of food eaten by one monkey in a week was: " << largest << "."<<endl;

}
void getData(int monkeys[][numberCol],int numberRows)
{
    for (int rows = 0; rows < numberRows; rows++)
    {
        cout << "Monkey " << (rows + 1) << endl;
        for (int cols = 0; cols < numberCol; cols++)
        {
            cout << " Day " << (cols + 1) << ": ";
            cin >> monkeys[rows][cols];
            while (monkeys[rows][cols] < 0){
                cout << "Cannot accept negative numbers, please try again: ";
                cin >> monkeys[rows][cols];}}
        cout << endl;}}
int getRowSum(int monkeys[][numberCol], int monkeyNum)
{
    int total = 0;

    for (int rows = 0; rows < monkeyNum; rows++)
    {
        for (int cols = 0; cols < numberCol;cols++)
            total += monkeys[rows][cols];}
    return total;
}
double getAverage(int monkeys[][numberCol], int numberRows)
{
    double total = 0;

    for (int cols = 0; cols < numberCol; cols++){
        for (int rows = 0; rows < numberRows; rows++)
            total += monkeys[rows][cols];}
    return (total/(numberCol));
}

int getMost(int monkey1, int monkey2, int monkey3){
    int array[3]{monkey1, monkey2, monkey3};
    int max = array[0];
    for (int count = 0; count < 3; count++)
    {
        if (array[count] > max)
        {
            max = array[count];
        }}
    return max;
}

int getLeast(int monkey1, int monkey2, int monkey3)
{
    int array[3]{monkey1, monkey2, monkey3};
    int min = array[0];

    for (int count = 0; count < 3; count++)
    {
        if (array[count] < min)
        {
            min = array[count];
        }
    }
    return min;
}

解決方法は?

のロジックは getRowSum は欠陥があります。使用する

int getRowSum(int monkeys[][numberCol], int monkeyNum)
{
   int total = 0;

   for (int cols = 0; cols < numberCol;cols++)
      total += monkeys[monkeyNum][cols];

      return total;
}

それを直せばもう一つの問題が解決するのかどうかはわからない。