C ++ Primer Plus: 2D массивы - PullRequest
2 голосов
/ 30 мая 2010

Я только начал работать через C ++ Primer Plus, и у меня возник небольшой пень.

const int MONTHS = 12;
const int YEARS = 3;
int sales[YEARS][MONTHS] = {0};
const string months[MONTHS] = {"January", "February", "March", "April", "May", "June", "July",
                               "August", "September", "October", "November", "December"
                              };

for (int year = 0; year < YEARS; year++)
{
    for (int month = 0; month < MONTHS; month++)
    {
        cout << "Please enter year " << year + 1 << " book sales for the month of " << months[month] << ": \t";
        cin >> sales[year][month];

    }
}

int yearlyTotal[YEARS][3] = {0};
int absoluteTotal = 0;

cout << "Yearly sales:" << endl;

for (int year = 0; year < YEARS; year++)
{
    cout << "Year " << year + 1 << ":";

    for (int month = 0; month < MONTHS; month++)
    {
        absoluteTotal = (yearlyTotal[year][year] += sales[year][month]);

    }

    cout << yearlyTotal[year][year] << endl;

}

cout << "The total number of books sold over a period of " << YEARS << " years is: " << absoluteTotal << endl;

Я хочу показать сумму за все три года. Остальная часть кода работает нормально: ввод в порядке, индивидуальный годовой вывод в порядке, но я просто не могу сложить три года вместе для одного итогового результата.

Примерные данные будут вводить 1 для каждого варианта, чтобы дать мне три итоговых значения 12:

год 1: 12
год 2: 12
год 3: 12

Общее количество книг, проданных за 3 года: 12

Финал 12, очевидно, должен быть 36.

У меня было общее количество работ в одной точке, но у меня не работали отдельные итоги. Я запутался в этом и полностью изменил ситуацию.

Ответы [ 4 ]

1 голос
/ 30 мая 2010
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
const int MONTHS = 12;
const int YEARS = 3;
int sales[YEARS][MONTHS] = {0};
const string months[MONTHS] = {"January", "February", "March", "April", "May", "June", "July",
                               "August", "September", "October", "November", "December"
                              };

for (int year = 0; year < YEARS; year++)
{
    for (int month = 0; month < MONTHS; month++)
    {
        cout << "Please enter year " << year + 1 << " book sales for the month of " << months[month] << ": \t";
        cin >> sales[year][month];

    }
}

int yearlyTotal[YEARS] = {0};
int absoluteTotal = 0;

cout << "Yearly sales:" << endl;

for (int year = 0; year < YEARS; year++)
{
    cout << "Year " << year + 1 << ":";

    for (int month = 0; month < MONTHS; month++)
    {
        yearlyTotal[year] += sales[year][month];
    }
    absoluteTotal += yearlyTotal[year];

    cout << yearlyTotal[year] << endl;

}

cout << "The total number of books sold over a period of " << YEARS << " years is: " << absoluteTotal << endl;
return 0;
}
  1. Вам нужно только увеличивать абсолютную сумму за счет за месяц
  2. Вам нужен только одномерный массив для подсчета за год.

Когда дело доходит до таких вещей, это помогает сначала записать их на бумаге.

1 голос
/ 30 мая 2010

Похоже, вы сбрасываете absoluteTotal каждую итерацию. Вы действительно этого хотите?

Может быть, это то, что вы хотите?:

absoluteTotal += (yearlyTotal[year][year] += sales[year][month]);
0 голосов
/ 30 мая 2010

Проверьте код ниже. Это будет работать.

int yearlyTotal[YEARS];
int absoluteTotal = 0;

cout << "Yearly sales:" << endl;

for (int year = 0; year < YEARS; year++)
{
    yearlyTotal[year] = 0;

    cout << "Year " << year + 1 << ":";

    for (int month = 0; month < MONTHS; month++)
    {
        yearlyTotal[year] += sales[year][month];
        absoluteTotal += sales[year][month];
    }

    cout << yearlyTotal[year] << endl;

}

cout << "The total number of books sold over a period of " << YEARS << " years is: " << absoluteTotal << endl;
0 голосов
/ 30 мая 2010

Проблема в том, что у вас есть absoluteTotal приращение, которое вы подсчитываете предыдущие месяцы несколько раз (поскольку yearlyTotal является счетчиком, он увеличивается каждый месяц, поэтому добавление его к absoluteTotal каждый раз считает месяц 1 12 раз, месяц 2 11 раз и т. д.).

Вместо этого вы хотите, чтобы этот цикл выглядел следующим образом:

for (int year = 0; year < YEARS; year++)
{
    cout << "Year " << year + 1 << ":";

    for (int month = 0; month < MONTHS; month++)
    {
        (yearlyTotal[year][year] += sales[year][month]);

    }

    absoluteTotal += yearlyTotal[year][year]; 
    cout << yearlyTotal[year][year] << endl;

}

Чтобы вы считали каждый месяц только один раз.

РЕДАКТИРОВАТЬ: комментарий Good Person о необходимости только 1D массива также, конечно, правильно. :)

...