Многомерный массив C с суммой для каждой строки и столбца

#c #arrays #multidimensional-array #sum

#c #массивы #многомерный массив #сумма

Вопрос:

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

Урок начинается с этого кода:

 #include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    // ein 2-dim. Array erstellen
    int Zeile, Spalte;
    int Tab[5][4];

    for (Zeile = 0; Zeile <= 4; Zeile  )
    {
        for (Spalte = 0; Spalte <= 3; Spalte  )
        {
            Tab[Zeile][Spalte] = 0;
        }            
    }

    // 2-dim. Array mit Zufallszahlen füllen
    for (Zeile = 0; Zeile <= 4; Zeile  )
    {
        for (Spalte = 0; Spalte <= 3; Spalte  )
        {
            Tab[Zeile][Spalte] = rand() % 10   1;
        }        
    }

    // Ausgabe des 2-dim. Arrays
    for (Zeile = 0; Zeile <= 4; Zeile  )
    {
        for (Spalte = 0; Spalte <= 3; Spalte  )
        {
            cout << setw(8) << Tab[Zeile][Spalte];
        }
        cout << endl;
    }
    return 0;
}
  

Когда я запускаю этот код, я получаю что-то вроде этого:

6 3 5 1

7 4 4 2

3 3 3 3

1 2 3 4

6 7 7 7

Теперь я должен создать новую строку и новый столбец, заполненный СУММОЙ каждой строки и каждого столбца. Итак, это должно выглядеть так:

6 3 5 1 15

7 4 4 2 17

3 3 3 3 12

1 2 3 4 10

6 7 7 7 27

23 19 22 17 81

Единственное, что я получил, выглядит так:

 int main()
{
    // ein 2-dim. Array erstellen
    int Zeile, Spalte, Spaltensumme, Zeilesumme;
    int Tab[5][4];

    for (Zeile = 0; Zeile <= 4; Zeile  )
    {
        for (Spalte = 0; Spalte <= 3; Spalte  )
        {
            Tab[Zeile][Spalte] = 0;
        }            
    }

    // 2-dim. Array mit Zufallszahlen füllen
    for (Zeile = 0; Zeile <= 4; Zeile  )
    {
        for (Spalte = 0; Spalte <= 3; Spalte  )
        {
            Tab[Zeile][Spalte] = rand() % 10   1;
            
            // Finden der Spaltensumme 
            for (Zeile = 0; Zeile < 4;   Zeile)
            {
                for (Spalte = 0; Spalte <= 3;   Spalte)
                {
                    Spaltensumme = Spaltensumme   Tab[Zeile][Spalte];
                }
            }

            // Finden der Zeilensumme 
            for (Zeile = 0; Zeile < 4;   Zeile)
            {
                for (Spalte = 0; Spalte <= 3;   Spalte)
                {
                    Zeilesumme = Zeilesumme   Tab[Spalte][Zeile];
                }
            }
        }        
    }

    // Ausgabe des 2-dim. Arrays
    for (Zeile = 0; Zeile <= 4; Zeile  )
    {
        for (Spalte = 0; Spalte <= 3; Spalte  )
        {
            cout << setw(8) << Tab[Zeile][Spalte];
        }
        cout << endl;
    }
    return 0;
}
  

Извините, что комментарии на немецком языке. Я пишу в том же стиле, что и книга.
Я знаю, что мой код не работает, и с каждым часом становится все хуже. Может быть, кто-нибудь сможет мне помочь, прежде чем я сойду с ума. Спасибо!

Ответ №1:

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

 #include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    // ein 2-dim. Array erstellen
    int Zeile, Spalte;
    int Tab[6][5]; //increase number of columns and rows by 1 here to store the sum

    for (Zeile = 0; Zeile <= 5; Zeile  )//updated the bound of Zeile
    {
        for (Spalte = 0; Spalte <= 4; Spalte  )//updated the bound of Spalte
        {
            Tab[Zeile][Spalte] = 0;
        }            
    }
    
    // 2-dim. Array mit Zufallszahlen füllen
    for (Zeile = 0; Zeile <= 4; Zeile  )
    {
        for (Spalte = 0; Spalte <= 3; Spalte  )
        {
            Tab[Zeile][Spalte] = rand() % 10   1;
            Tab[Zeile][4]  = Tab[Zeile][Spalte]; // add to row sum 
            Tab[5][Spalte]  = Tab[Zeile][Spalte]; // add to column sum
            Tab[5][4]  = Tab[Zeile][Spalte]; //lowest-rightmost sum element
        }        
    }
    
    // Ausgabe des 2-dim. Arrays
    for (Zeile = 0; Zeile <= 5; Zeile  ) //updated the bound of Zeile
    {
        for (Spalte = 0; Spalte <= 4; Spalte  ) //updated the bound of Spalte
        {
            cout << setw(8) << Tab[Zeile][Spalte];
        }
        cout << endl;
    }
    return 0;
}