Основи програмування на С ++ для початківців

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

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

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

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

3) Заповнити двовимірний масив випадковими числами від 10  до 100. Порахувати суму елементів окремо в кожному рядку і визначити номер рядка,  в якій ця сума максимальна.

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

118 думки про "Завдання: Двумерные массивы C

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

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

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

    int main ()
    {
    Const INT обр = 3;
    INT більш[arr][arr]={};
    INT сума[arr]={};
    ІНТ максі = 0;
    srand(time(NULL));

    for (INT I = 0;i<arr;i )
    {
    for(Int J = 0;j<arr;j )
    {

    але[i][j]= 10 + Rand()%100;

    cout<<setw (10)<< але[i][j]<<setw (10);

    }

    cout<<endl;

    }
    for (INT I = 0;i<arr;i )
    {
    for(Int J = 0;j<arr;j )
    {
    sum[i]+а =[i][j];
    }
    cout<<setw (10)<<"summa stroki "<<+ 1<<" | " <<sum[i]<<endl;

    }
    for (int i=1;Ізюм[максі])
    {
    максі = я;
    }

    }

    cout<<максі;
    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 << Спочатку – це абсолютно допустимий вираз, дає значенням i зрушене вліво на First довічних позицій (т.е. i * 2^ Перший).
      А 2-м параметром циклу for це значення порівнюється з 0 на одно / не дорівнює (брехня / істина).
      ;-)

      1. Це не сприймається як помилка. При використанні ініціалізації з фігурними дужками, дозволяється відкинути знак =
        Але краще все писати явно

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

  5. Не можу знайти помилку.. задав кількість рядків і стовпців 10х10, а на екран виводитися 5х5.

    1. приберіть оператори (строки):

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

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

      1. спасибі за допомогу.

  6. Вітаю! Не можу розібратись, чому при однаковій кількості рядків і стовпців двовимірного масиву підрахунок суми рядків і стовпців програмою виконується коректно, а при що не дорівнює (например, 3 рядки і 5 стовпців або на оборот) – некоректно? Це стосується тільки підрахунку сума значень по стовпцях.
    Як вирішити таку проблему?

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *