• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed [C] Sumowanie zawartości kolumn tablicy dwuwymiarowej

VPS Starter Arubacloud
0 głosów
6,949 wizyt
pytanie zadane 13 kwietnia 2016 w C i C++ przez programmero Bywalec (2,420 p.)
zamknięte 5 maja 2016 przez programmero

Trywialne zadania, lecz głowię się nad rozwiązaniem gdyż wyjście jest dosyć specyficzne :)

Do funkcji przekazuję wypełnioną tablicę dwuwymiarową, funkcja sumuje zawartość kolumn i wynik zapisuje w nowej tablicy jednowymiarowej.

// TAB_SIZE 2
// size - rozmiar tablicy, w tym przypadku TAB_SIZE

void sum_columns(int tab[][TAB_SIZE], int tab_sum[], int size)
{
	int i, j;

	for (i = 0; i < size; i++)
	{
		for (j = 0; j < size; j++)
		{
			tab_sum[i] += tab[i][j];
		}
	}
}

Takie dostaje wyjście:

--- wypisanie 2d ---
tab[0][0] = 4
tab[0][1] = 4

tab[1][0] = 2
tab[1][1] = 9

--- wypisanie 1d ---
tab[0] = 2280752
tab[1] = 1627419947

 

Czy funkcja jest dobrze napisana?

komentarz zamknięcia: rozwiązanie

3 odpowiedzi

0 głosów
odpowiedź 14 kwietnia 2016 przez programmero Bywalec (2,420 p.)
 
Najlepsza
// sumuje kolumny i zapisuje w nowej tablicy jednowymiarowej
void sum_cols(int tab[][TAB_SIZE], int tab_sum[], int size)
{
	int i, j;

	for (j = 0; j < size; j++)
	{
		for (i = 0; i < size; i++)
		{
			tab_sum[j] += tab[i][j];
		}
	}
}
int col_tab[TAB_SIZE] = {0};

Nie zainicjalizowałem tablicy :)

+1 głos
odpowiedź 13 kwietnia 2016 przez maciekak Obywatel (1,300 p.)

A sumuje dobrze?

Bo to co wypisuje Ci pod tym: "--- wypisanie 1d ---" to są najprawdopodobniej adresy na pierwsze elementy tablic jednowymiarowych, które składają się na tablicę dwuwymiarową. Bo jak wiadomo tablica dwuwymiarowa to tablica tablic, więc wypisanie tylko jedno wymiaru daje adresy poszczególnych tablic tablicy.

Czyli, analogicznie jak masz:

int tablica[3] = { 1, 2, 3};
cout << tablica[0] << endl; // wypisuje wartość pierwszego elementu czyli 1
cout << *tablica << endl; // również wypisuje wartość pierwszego elementu, ponieważ tablice to są tak naprawdę wskaźniki
cout << tablica << ednl; // wypisuje adres pierwszego elementu
cout << *(tablica+1) << endl // wypisuje wartość drugiego elementu czyli 2
cout << (tablica+1) << endl; //adres drugiego elementu
cout << &tablica[1] << endl; // również adres drugiego elementu

Analogicznie działa to dla tablic wielowymiarowych.

Starałem się w miarę jasno pisać, jakby coś było nie jasne to pisz :)

komentarz 14 kwietnia 2016 przez programmero Bywalec (2,420 p.)
Czysty C, więc zapis z C++ odpada (w tytule specjalnie dopisałem, że chodzi o C), ale mniejsza o to gdyż rozwiązałem problem.

Zawartość tablicy jednowymiarowej nie została zainicjalizowana zerami, stąd problem.
+1 głos
odpowiedź 14 kwietnia 2016 przez draghan VIP (106,230 p.)
Funkcja jest prawie dobrze napisana, chociaż zapomniałeś o jednej bardzo ważnej rzeczy. Ile wynosi zawartość komórek tablicy wyjściowej przed rozpoczęciem iteracji?

Z innych spraw - ja bym odrzucił parametr wyjściowy na poczet zwracanej wartości, zaś typ parametru size zmienił na size_t... lub w ogóle zrezygnowałbym z gołych tablic, w zamian używając jakiegoś kontenera.
komentarz 14 kwietnia 2016 przez programmero Bywalec (2,420 p.)
Zawartość tablicy jednowymiarowej nie została zainicjalizowana zerami, stąd problem. Wpadłem na to dokładnie wczoraj kilka chwil po tym jak położyłem się spać :)

O co chodzi z kontenerem? Wiesz, ja dopiero na bardzo wczesnym etapie programowania jestem :)
komentarz 14 kwietnia 2016 przez draghan VIP (106,230 p.)
Poszukaj informacji o std::vector. To jeden z kontenerów, bardzo popularny. Mówiąc prostacko: taka wygodna tablica o zmiennej ilości elementów.

Podobne pytania

0 głosów
2 odpowiedzi 1,364 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)
+1 głos
3 odpowiedzi 2,210 wizyt
pytanie zadane 21 maja 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
0 głosów
1 odpowiedź 800 wizyt

93,005 zapytań

141,971 odpowiedzi

321,251 komentarzy

62,343 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...