Sumowanie elementów kolumny w n+1 wierszu tablicy

0

Witam, mam do napisania program, który dla tablicy tab[n][m] zliczy sumy danych elementów z każdej kolumny oraz wiersza i wpisze je w n+1 wierszu (w m+1 kolumnie). W przypadku wierszy program radzi sobie tak jak powinien, lecz w przypadku kolumn działa dobrze jedynie w pierwszej kolumnie.
Jako, że z programowaniem dopiero zaczynam nie widzę, gdzie może leżeć błąd, wszelkie sugestie mile widziane.
A oto mój kod:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	srand(time(NULL));
	int i, j, n, m;
	
	printf("Generowanie tablicy [n][m] wypelnionej losowymi cyframi\n");
	printf("Ile wierszy powinna miec tablica?(podaj zakres 1-9)\n");
	scanf("%d", &n);
	printf("Ile kolumn powinna miec tablica?(podaj zakres 1-9)\n");
	scanf("%d", &m);
	
	int tab[i][j];

	system("cls");
	printf("Generowanie tablicy [n][m] wypelnionej losowymi cyframi\n");
	
	if(n<1 || n>10)
	printf("Nie podano liczb z zakresu 1-9\n");
	
	else if(m<1 || m>10)
	printf("Nie podano liczb z zakresu 1-9\n");
	
	else
	{
		printf("Wygenerowana tablica [%d][%d] z nastepujacymi losowymi elementami:\n\n", n, m);
			for(i=0; i<n; i++)
			{
				int row_sum = 0;
				for(j=0; j<m; j++)
				{
					tab[i][j] = rand() %10;
					row_sum += tab[i][j];
					printf("%4d ", tab[i][j]);
				} 
			printf("%4d ", row_sum);
			printf("\n\n");
			}
			for(j=0; j<m; j++)
			{
				int column_sum = 0;
				for(i=0; i<n; i++)
				{
					column_sum += tab[j][i];
				}
			printf("%4d ", column_sum);
			}
	}
	return 0;
}

Z góry dzięki za pomoc!

0
int tab[i][j];

Twój program ma niezdefiniowane zachowanie.
W chwili deklaracji tablicy zmienne określające rozmiary, są niezainicjalizowane.

0

Rzeczywiście nie zwróciłem uwagi. Czyli zakładając, że chcę, aby tablica miała rozmiary wybrane przez użytkownika, powinienem ją zdefiniować jako tab[n][m]?
I czy wtedy reszta kodu będzie miała sens,czy dalej występują jakieś błędy myślenia?

0

Jeśli sumy wierszy i kolumn mają być zapisane w ostatnich komórkach wierszy i kolumn,
to rozmiar tablicy powinien być

int tab[n + 1][m + 1];

bo będzie buffer overflow.
BTW: w tym kodzie nie zapamiętujesz wyników.

0

Popraw mnie jeśli się mylę (a pewnie tak jest, skoro to tak nie działa), ale ta pętla:

			for(j=0; j<m; j++)
			{
				int column_sum = 0;
				for(i=0; i<n; i++)
				{
					column_sum += tab[j][i];
				}
			printf("%4d ", column_sum);
			}

powinna chyba zacząć od kolumny z indeksem 0, wyzerować wartość column_sum, dodać wszystkie wartości z kolumny aż do indeksu i = n-1, zapisać je w zmiennej column_sum (czyli niejako zapamiętać wynik), a następnie wypisać pod kolumną i przejść do kolumny z indeksem j. Kontynuacja aż do j = m-1. W której części kodu to tak nie działa i jak mogę to ewentualnie naprawić?

0

wpisze je w n+1 wierszu (w m+1 kolumnie).

printf("%4d ", column_sum);

Tutaj nie dzieje się nic takiego. Zamiast wpisać (zapamiętać), wypisujesz sumę na ekran.

jak mogę to ewentualnie naprawić?

tab[j][n] = column_sum;

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