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

Zadanie - funkcja i tablice

Object Storage Arubacloud
0 głosów
598 wizyt
pytanie zadane 24 listopada 2017 w C i C++ przez rtoz Nowicjusz (120 p.)
otagowane ponownie 24 listopada 2017 przez Eryk Andrzejewski
Cześć wszystkim :)

Potrzebuję pomocy. Mam dane zadanie i o ile nie mam problemu z tablicami to wplecenie w to funkcji w taki sposób jaki mam zadany sprawia mi kłopot.

Wczytać dane do tablic a[N] [N] i  b[N] [N], gdzie N to dowolna stała. W tablicy a obliczyć za pomocą funkcji sumę elementów podzielnych przez 5 w 3 pierwszych kolumnach, zaś w tablicy b obliczyć sumę elementów podzielnych przez 2 w 4 pierwszych kolumnach. Wydrukować różnicę między tymi sumami.

Wiem, że funkcja ma zawierać 3 dane wejściowe ('która tablica, ile kolumn do zliczenia, przez jaką liczbę podzielne liczby), ale nie wiem jak to zrobić.

Proszę pomóżcie :)
komentarz 24 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Cześć smiley

Możesz doprecyzować o jakim języku konkretnie mówisz? Bo o ile w tagach widzę C, to niektórzy (którzy mówią o C++) przez pomyłkę wpiszą c zamiast c-plus-plus, dlatego wolę dopytać.

Aha, co do nazewnictwa samych tagów, to prosiłbym stosować konwencję, która utarła się już na forum: czyli nie zaczynamy ich od znaków #.

komentarz 24 listopada 2017 przez rtoz Nowicjusz (120 p.)
A to przepraszam jestem nowy, wpisalem 'c++' i c sie pokazalo samo. Chodzi o C++, dzięki, że dopytałeś.

Będę uważał na tagi, nie wiedziałem :)
komentarz 24 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Spokojnie, nie ma problemu. wink

Zaraz postaram się pomóc.

1 odpowiedź

+1 głos
odpowiedź 25 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 25 listopada 2017 przez Eryk Andrzejewski

No to tak:

Wczytać dane do tablic a[N] [N] i  b[N] [N], gdzie N to dowolna stała

Czyli na początku tworzysz sobie stałą (możesz nazwać ją również N) i tablice dwuwymiarowe a i b.

const int N = 5;
int a[N];
int b[N];

 W tablicy a obliczyć za pomocą funkcji sumę elementów podzielnych przez 5 w 3 pierwszych kolumnach, zaś w tablicy b obliczyć sumę elementów podzielnych przez 2 w 4 pierwszych kolumnach.

Czyli jak widać, schemat działania dla obu tablic jest ten sam. Tak jak napisałeś, najlepiej będzie skorzystać z funkcji. Jako jeden z parametrów podasz tablicę (tutaj mogą być pewne ograniczenia, zaraz do tego przejdę), następny - liczba kolumn i ostatni - liczba, przez którą dany element tablicy ma być podzielny.

W C++ generalnie lepiej jest używać kontenerów takich jak std::vector, std::array i tak dalej. Natomiast rozumiem, że to jakieś szkolne zadanie i nauczyciel/wykładowca preferowałby, aby zostały użyte zwykłe tablice.

Jest kilka sposobów na przekazanie kilkuwymiarowej tablicy do funkcji, ta metoda może nie jest najlepsza, ale dostosowuję ją do takich szkolnych "wymagań":

#include <iostream>

const int TAB_SIZE = 3;

void print(int tab[TAB_SIZE][TAB_SIZE])
{
	for (int i = 0; i < TAB_SIZE; ++i)
	{
		for (int j = 0; j < TAB_SIZE; ++j)
		{
			std::cout << tab[i][j] << ' ';
		}

		std::cout << "\n";
	}
}

int main()
{
	int tab[TAB_SIZE][TAB_SIZE] = {
		{1, 2, 3},
		{4, 5, 6},
		{7, 8, 9}
	};

	print(tab);
}

Jak mówiłem, można by to zrobić lepiej, choćby poprzez szablony, ale nie chcę Ci zbyt dużo mieszać, bo nie wiem czy o nich już zdążyłeś usłyszeć.

Rozjaśniła Ci coś ta wypowiedź? Jak coś to pytaj, chętnie pomogę.

A więc twoja funkcja mogłaby wyglądać tak:

const int N = 5;

// ...

int count(int tab[N][N], int columns, int divider)
{
    /*
    A tutaj kodzik, który przejeżdża sobie po wszystkich elementach tablicy
    o kolumnie mniejszej lub równej <columns> i sprawdzający, czy jest podzielna
    przez dzielnik <divider>. Jeśli tak, to dodaje ją do zmiennej sum
    (zainicjalizowanej na początku funkcji na 0). Po sprawdzeniu wszystkich odpowiednich elementów
    Funkcja zwraca wynik */
}

A tak na koniec - gdybyś zastanawiał się jak sprawdzić, czy liczba jest podzielna przez inną, użyj operatora modulo.

int x = 4;

if (x % 3 == 0)
{
    std::cout << "Podzielna przez 3!";
}

if (x % 2 == 0)
{
    std::cout << "Podzielna przez 2!";
}

Oczywiście powyższy kodzik też jest dość poglądowy. Po prostu - jeśli wynik operacji modulo będzie równy 0 (reszta z dzielenia będzie równa 0 - czyli inaczej, nastąpi dzielenie bez reszty), to znaczy, że liczba jest podzielna.

komentarz 25 listopada 2017 przez rtoz Nowicjusz (120 p.)
edycja 25 listopada 2017 przez rtoz
Dzięki za odpowiedź :)

To co mi napisałeś jest dla mnie całkowicie czytelne, nie mam problemu z samą tablicą tylko raczej z funkcja. Jak ona powinna wyglądać?

Edit: nie wiem czy to mozliwe ale chyba mialem jakis bug i nie widzialem polowy testu :) sprawa do zamknięcia :)
komentarz 25 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Okej. Taka porada: jeśli uznasz pytanie za rozwiązane, sam możesz je zamknąć. Nie chcę też się zbytnio o coś upominać, ale jeśli odpowiedź Ci się podobała, możesz na nią zagłosować i ewentualnie oznaczyć jako najlepszą - taka rada na przyszłość wink

komentarz 26 listopada 2017 przez rtoz Nowicjusz (120 p.)
edycja 27 listopada 2017 przez rtoz

Hej, jednak dalej potrzebuję pomocy. pokażę co stworzyłem: 

using namespace std;
int c,d,roznica;
const int n=2;
int a[n][n];
int b[n][n];
int zliczkolumny(int tablica[n][n], int ile_kolumn, int dzielnik)
{
int suma{};

{
for (int i = 0; i < n; i++)
{
for (int i2 = 0; i2 < ile_kolumn; i2++)
if (tablica[i][i2] % dzielnik == 0)
suma+=tablica[i][i2];
}

}
return suma;
}

int main()
{

for (int i = 0; i < n; i++)
{
for (int i2 = 0; i2 < n; i2++)
{
cout<<"podaj liczbe do tablicy a"<<endl;
cin>>c;
cout<<"podaj liczbe do tablicy b"<<endl;
cin>>d;
c=a[i][i2];
d=b[i][i2];
;
}

}
//roznica=zliczkolumny(a[n][n], 3, 5)-zliczkolumny(b[n][n], 4, 2);//edytowane
roznica=zliczkolumny(a, 3, 5)-zliczkolumny(b, 4, 2); //po edicie
cout<<roznica;

}

program się wywala na końcu, na wywolaniu funkcji do policzenia roznicy, mowi o konwersji int to int (*) [2]. domyslam sie ze nie moge tak wywolac tych tablic do formuly. jak więc to zrobić?

EDIT: wywołało się poprawnie ale roznice i tak zwraca 0. nie wiem czemu. help :(

Podobne pytania

0 głosów
1 odpowiedź 418 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Lukasz95 Bywalec (2,160 p.)
0 głosów
1 odpowiedź 193 wizyt
pytanie zadane 6 listopada 2016 w C i C++ przez marcin8352 Nowicjusz (230 p.)
0 głosów
1 odpowiedź 196 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...