Problem z wypisaniem sumy elementów kolumn w tablicy 2d

0

Hej,

Nie mogę zrozumieć dlaczego poprawna suma wyświetla się tylko dla ostatniej kolumny

void sumKW(int T[][3], int N)
{
    int i, j;
    int sumK[N], sumW[N];
    for(i=0;i<N;i++)
    {
        sumW[i]=0;
        sumK[i]=0;
        for(j=0;j<N;j++)
        {
            T[i][j]=rand()%10;
            sumW[i]+=T[i][j];
            sumK[i]+=T[j][i];
            printf(" %d ", T[i][j]);
        }
        printf(" %d\n", sumW[i]);
    }
    for(i=0;i<N;i++)
    {
        printf("%d ", sumK[i]);
    }
}

void main()
{
    const int N=3;
    int T[N][N];
    sumKW(T);
}

To co dostaję na ekranie to:
1 7 4 12
0 9 4 13
8 8 2 18
5373369 1968305378 10

0

Można trochę inteligentniej, przesyłać do funkcji gotową tablicę. oraz rozdzielić sumowanie kolumn i wierszy, to przynajmniej będzie łatwiej debugować:) :

void printArray(int * arr, int sz){
	printf("[");
	for (int i = 0; i < sz; ++i)
		printf(" %d", arr[i]);
	printf("]");
	printf("\n");
}
void sumColumnsAndRows(int arr [][3], int n) {
	int sumC[n];
	int sumR[n];
	for (int i = 0; i < n; ++i) {
		sumR[i] = 0;
		for (int j = 0; j < n; ++j) {
			sumR[i] += arr[i][j];
		}
	}
	for (int i = 0; i < n; ++i) {
		sumC[i] = 0;
		for (int j = 0; j < n; ++j) {
			sumC[i] += arr[j][i];
		}
	}
	printf("rows: \n");
	printArray(sumR, n);
	printf("columns: \n");
	printArray(sumC, n);
}
int main(int argc, char ** argv){
	int ar [3][3] = {{1, 2, 3}, {3, 4, 5}, {6, 7 ,8}};
	sumColumnsAndRows(ar, 3); // ->
	/*rows: 
	[ 6 12 21]
	columns: 
	[ 10 13 16]
	*/
	printf("\n");
	return 0;
}

PS C? Czy C++?

0

C. Nie rozdzielałam, bo efekt końcowy miał wyglądać tak jak u mnie. Zrobiłam to mniej inteligentniej, ale powinno działać, więc dlaczego nie działa? :)

0

Na to pytanie debuger odpowie :)

0

No i powiedział :D Wystarczyło przenieść to do głębszej pętli.
sumK[i]=0;

0

Podziel sumKW na niezależne części:

  • fillRandom
  • printSumOfColumns
  • printSumOfRows

A twój błąd sam się naprawi (sumujesz rzeczy zanim ustalona/wylosowana została wartość).

Shadowean napisał(a):

No i powiedział :D Wystarczyło przenieść to do głębszej pętli.
sumK[i]=0;

Zdecydowania to nie jest prawda. Programowanie permutacyjne jest drogą donikąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1