Основы программирования на С++ для начинающих

Задачи: Двумерные массивы C++

Чтобы приступить к решению задач, предложенных в этой статье, вам необходимо знать что такое двумерные (многомерные) массивы . Задачи расположены от простой к сложной. Так что, если вы новичок в программировании, начинайте с первой, чтобы лучше разобраться с остальными.

1. Объявить двумерный массив, заполнить целыми числами и показать на экран. 

2) Объявить двумерный массив и заполнить его построчно с клавиатуры. После заполнения – показать заполненную матрицу на экран и посчитать сумму элементов отдельно в каждом столбце и каждой строке.

3) Заполнить двумерный массив случайными  числами от 10  до 100. Посчитать сумму элементов отдельно в каждой строке и определить номер строки,  в которой эта сумма максимальна.

Ваши вопросы, которые возникли при решении задач, оставляйте в комментариях к этой статье.

118 thoughts on “Задачи: Двумерные массивы C++

  1. ошибку нашел но не знаю как исправить проверял в отдельных случаях массив забивается мусором после строки “s[i] += a[i][j];” в цикле

  2. В общем разобрался. Программу я писал в visual studio, а там если не заполнить массив то в нем мусор хранится. А если заполнить массив нолями, а потом проделать то же самое получается то что и требуется

  3. #include
    #include
    #include
    #include
    #include
    using namespace std;

    int main ()
    {
    const int arr=3;
    int mas[arr][arr]={};
    int sum[arr]={};
    int maxi=0;
    srand(time(NULL));

    for (int i=0;i<arr;i++)
    {
    for(int j=0;j<arr;j++)
    {

    mas[i][j]=10+rand()%100;

    cout<<setw (10)<< mas[i][j]<<setw (10);

    }

    cout<<endl;

    }
    for (int i=0;i<arr;i++)
    {
    for(int j=0;j<arr;j++)
    {
    sum[i]+=mas[i][j];
    }
    cout<<setw (10)<<"summa stroki "<<i+1<<" | " <<sum[i]<<endl;

    }
    for (int i=1;isum[maxi])
    {
    maxi=i;
    }

    }

    cout<<maxi;
    return 0;
    }

  4. Не могу вывести сумму строк в 3-й задаче, заполненный массив показывает, а дальше как будто ни чего нет.Вот код: #include
    #include
    using namespace std;
    int main()
    {
    setlocale(LC_ALL, "rus");
    const int First = 2;
    const int Second = 5;
    int Array[First][Second] = {};
    int sumArray[First]{};
    srand(time(NULL));

    for (int i = 0; i < First; i++)
    {
    for (int a = 0; a < Second; a++)
    {
    Array[i][a] = 10+rand() % 90;
    cout << Array[i][a] << " ";
    sumArray[i] +=Array[i][a];
    }
    cout << endl<<endl;
    }

    for (int i = 0; i << First; i++)
    {
    cout << "Сумма " << i + 1 << "-й строки:" << sumArray[i] << endl;
    }

    return(0);
    }

    При чем и во второй задаче точно такая же проблема, сумма строк не выводится на экран, остальные команды задания не проверял пока что ,решил разобраться с этим

    1. В cout нельзя выводить целый массив (sumArray[i] ) одним оператором, а можно выводить только поэлементно.

      Двумерные массивы можно выводить (точно так же как и заполнять) только вложенными циклами.

      1. Но в решении 3-й задачи сумма строк выведена точно так же поэлементно через цикл по сути, или я что то не понимаю
        for (int i = 0; i < MatrixSize; i++)
        {
        cout << i + 1 << "-я строка: " << rowSum[i] << endl;
        }

      2. А как во второй задаче,в этом выражении rowSum[rowNum] += ourMatrix[rowNum][columnNum];
        columnSum[rowNum] += ourMatrix[columnNum][rowNum];добавляется сумма введенная,не пойму почему rowsum[rownum]например, знает,что в cout потом нужно выводить сумму трёх чисел (сумма строк)???

      1. Хоть убей, все равно не могу понять ,что не так=((ведь у меня он тоже одномерный
        int sumArray[First]{};

    2. Мне так надоели ваши комментарии, что скопировал точно с экрана и выполнил (Linux, компилятор GCC):

      [olej@dell comments]$ g++ c1.cc -o c1
      c1.cc: В функции «int main()»:
      c1.cc:13:24: предупреждение: extended initializer lists only available with -std=c++11 or -std=gnu++11
      int sumArray[First]{};
      ^
      [olej@dell comments]$ ./c1
      47 17 72 68 39

      59 71 76 49 55

      1. Спасибо за Ваше терпение и за то, что пытались мне помочь, но оказывается ошибка была очень глупа, из-за моей не внимательности :
        for (int i = 0; i << First; i++)
        Лишний знак ‘<'

    3. Хорошая ошибка … смешная. Потому что i << First – это совершенно допустимое выражение, дающее значением i сдвинутое влево на First двоичных позиций (т.е. i * 2^First).
      А 2-м параметром цикла for это значение сравнивается с 0 на равно / не равно (ложь/истина).
      ;-)

      1. Это не воспринимается как ошибка. При использовании инициализации с фигурными скобками, разрешается отбросить знак =
        Но лучше всё писать явно

    1. Потому что srand() – это начальная инициализация датчика случайных чисел, которая должна вызываться только 1 раз, в начале. А может и вообще не вызываться – тогда датчик инициализируется по умолчанию.

  5. Не могу найти ошибку.. задал кол-во строк и столбцов 10х10, а на экран выводиться 5х5.

    1. Уберите операторы (строки):

      j++;
      ...
      i++
      ...

      Они у вас уже в теле циклов записаны.
      Вот вы и скачете через 1 элемент.

  6. Здравствуйте! Не могу разобраться, почему при равном числе строк и столбцов двумерного массива подсчет суммы строк и столбцов программой выполняется корректно, а при не равном (например, 3 строки и 5 столбцов или на оборот) – не корректно? Это касается только подсчета сумма значений по столбцам.
    Как решить такую проблему?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *