• 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

Object Storage Arubacloud
0 głosów
6,764 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,276 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Wolv63 Użytkownik (630 p.)
+1 głos
3 odpowiedzi 2,015 wizyt
pytanie zadane 21 maja 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
0 głosów
1 odpowiedź 718 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...