• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
6,986 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,397 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)
+1 głos
3 odpowiedzi 2,260 wizyt
pytanie zadane 21 maja 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
0 głosów
1 odpowiedź 826 wizyt

93,106 zapytań

142,082 odpowiedzi

321,605 komentarzy

62,447 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 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...