Briansolive Ответов: 2

Привет, я новичок в C++ может кто-нибудь, пожалуйста, скажите мне, как я могу исправить ошибку в моем коде при нахождении минимальных и максимальных значений, пожалуйста.


Массив 3х5. 3 обезьяны едят 5 дней в неделю. Пользователь должен ввести количество пищи, которую каждая обезьяна съела в день. Код должен вычислять среднее количество пищи, съеденной обезьянами, наибольшее количество пищи, съеденной обезьяной, и наименьшее количество. Я получил среднюю сумму работы, но я застрял на мине и Максе. Пожалуйста помочь. Спасибо.

вот этот код:

#include <iostream>

using namespace std;
const int ROWS = 3;
const int COLS = 5;
void getDATA( int array[][COLS], int);
double getAVG(int array[][COLS], int);
int getSUM(int array[][COLS], int);
int x, y;



int main()
{
int monkeys[ROWS][COLS];
int mon1 = 0, mon2 = 1, mon3 = 2, mon1total, mon2total, mon3total, min, max;


getDATA(monkeys, ROWS);

mon1total = getSUM(monkeys, mon1);
mon2total = getSUM(monkeys, mon2);
mon3total = getSUM(monkeys, mon3);

max = monkeys[0][0];
min = monkeys[0][0];

 for (int x = 0; x < COLS; x++)
	        {

	         for (int y = 0; y < COLS; y++)

	        {

	            if (monkeys[x][y] > max)
	           max = monkeys[x][y];
	      
	            if (monkeys[x][y] < min)
	           min = monkeys[x][y];   

          }
          }



cout<<"The average daily food by the monkeys was "<<getAVG(monkeys, ROWS)<<endl;
cout<<"The least amount of food eaten by the monkeys was "<<min<<endl;
cout<<"The most amount of food eaten by the monkeys was "<<max<<endl;
}

void getDATA(int monkeys[][COLS], int ROWS)
{
  for(int x = 0; x < ROWS; x++)
  {
    cout<<"Monkey "<<(x + 1)<< " \n";

    for(int y = 0; y < COLS; y++)
    {
      cout<<"Day "<<(y + 1)<<endl;
      cin>> monkeys[x][y];
      while(monkeys[x][y]< 0)
      {
        cout<<"Error please enter a positive number"<<endl;
        cin>>monkeys [x][y];
      }
    }
    cout<<endl;
  }
}
int getSUM(int monkeys[][COLS], int monkeyNUM)
{
int total = 0;
for(int x =0; x < monkeyNUM; x ++)
{
for (int y = 0; y< COLS; y++)
total += monkeys[x][y];
}
return total;
}
double getAVG(int monkeys[][COLS], int ROWS)
{
  double total = 0;
  for(int y = 0; y < COLS; y++)
  {
    for (int x = 0; x < ROWS; x++)
    total += monkeys[x][y];
  }
  return (total/(COLS));
}


Что я уже пробовал:

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

CHill60

Что вы подразумеваете под словом "застрял" - опишите свою проблему и/или ошибки, которые вы получаете

Briansolive

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

2 Ответов

Рейтинг:
17

CPallini

Цитата:
max = обезьяны[0][0];
min = обезьяны[0][0];

для (int x = 0; x < СЕДЛА; икс++)
{

for (int y = 0; y < COLS; y++)

Должно быть вместо этого
max = monkeys[0][0];
min = monkeys[0][0];

 for (int x = 0; x < ROWS; x++)
	        {

	         for (int y = 0; y < COLS; y++)


Patrice T

+5

CPallini

Спасибо.

Stefan_Lang

Хорошо подмечено.

Кроме того я бы посоветовал переименовать эти константы и переменные:

for (int monkey = 0; monkey < MONKEYS; monkey++) {
for (int day = 0; day < DAYS; day++) {


это было бы гораздо более читабельно, и такую ошибку было бы тривиально обнаружить.

CPallini

Спасибо, но все равно четные ряды и колья совсем разные. :-)

Stefan_Lang

Верно, но если Вы читаете, если monkey < DAYS вам не нужно смотреть куда-то еще , чтобы распознать проблему. В то время как x < ROWS выглядит довольно неприметно

CPallini

Действительно.
По крайней мере, он мог бы использовать row вместо x!

Рейтинг:
0

Patrice T

Цитата:
пожалуйста, скажите мне, как я могу исправить ошибку в моем коде

Вы не указали, что это за ошибка и как она появляется.
Используйте отладчик, он замедляет ваш код, чтобы вы могли наблюдать за его выполнением.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
-----
Совет: Научитесь правильно делать отступы в вашем коде, это покажет его структуру и поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
#include <iostream>

using namespace std;
const int ROWS = 3;
const int COLS = 5;
void getDATA( int array[][COLS], int);
double getAVG(int array[][COLS], int);
int getSUM(int array[][COLS], int);
int x, y;



int main()
{
    int monkeys[ROWS][COLS];
    int mon1 = 0, mon2 = 1, mon3 = 2, mon1total, mon2total, mon3total, min, max;


    getDATA(monkeys, ROWS);

    mon1total = getSUM(monkeys, mon1);
    mon2total = getSUM(monkeys, mon2);
    mon3total = getSUM(monkeys, mon3);

    max = monkeys[0][0];
    min = monkeys[0][0];

    for (int x = 0; x < COLS; x++)
    {

        for (int y = 0; y < COLS; y++)

        {

            if (monkeys[x][y] > max)
                max = monkeys[x][y];

            if (monkeys[x][y] < min)
                min = monkeys[x][y];

        }
    }



    cout<<"The average daily food by the monkeys was "<<getAVG(monkeys, ROWS)<<endl;
    cout<<"The least amount of food eaten by the monkeys was "<<min<<endl;
    cout<<"The most amount of food eaten by the monkeys was "<<max<<endl;
}

void getDATA(int monkeys[][COLS], int ROWS)
{
    for(int x = 0; x < ROWS; x++)
    {
        cout<<"Monkey "<<(x + 1)<< " \n";

        for(int y = 0; y < COLS; y++)
        {
            cout<<"Day "<<(y + 1)<<endl;
            cin>> monkeys[x][y];
            while(monkeys[x][y]< 0)
            {
                cout<<"Error please enter a positive number"<<endl;
                cin>>monkeys [x][y];
            }
        }
        cout<<endl;
    }
}
int getSUM(int monkeys[][COLS], int monkeyNUM)
{
    int total = 0;
    for(int x =0; x < monkeyNUM; x ++)
    {
        for (int y = 0; y< COLS; y++)
            total += monkeys[x][y];
    }
    return total;
}
double getAVG(int monkeys[][COLS], int ROWS)
{
    double total = 0;
    for(int y = 0; y < COLS; y++)
    {
        for (int x = 0; x < ROWS; x++)
            total += monkeys[x][y];
    }
    return (total/(COLS));
}

Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]