zliczanie ilosci zer i jedynek w wierszu lub kolumnie

0

Hej :) Muszę napisać funkcję która sprawdzi czy w wierszu lub kolumnie nie jest więcej niż n/2 (n to wielkość tablicy) zer lub jedynek. Kursor się przesuwa i w nowej pozycji powinno to sprawdzić jeszcze raz, więc nie mogę tego zrobić na stało. n również jest zmienne. Siedzę już nad tym 3 dzień i wykorzystałam chyba wszystkie pomysły :( Byłabym wdzięczna za pomoc i wyjaśnienie co jest nie tak.

unsigned char sprawdz_reg2(char **tab, int n, int gx, int gy) { // tab- tablica utworzona, rozmiar może być zmieniany 

	for (int i = 0; i < n; i++)		 // n- wielkosc tablicy,  gx, gy- miejsce gdzie chwilowo znajduje się kursor
	{
		static int ilosc1_1 = 0;
		static int ilosc1_2 = 0;

		if (tab[gy-1][i] == '1')
			ilosc1_1++;

		if (tab[i][gx-1] == '1')
			ilosc1_2++;

		if (ilosc1_1 > n / 2 || ilosc1_2 > n / 2) 
				return 0;
		else  return 1; 
	}

	for (int i = 0; i < n; i++)				  
	{
		static int ilosc0_1 = 0;
		static int ilosc0_2 = 0;

		if (tab[gy-1][i] == '0')
			ilosc1_1++;

		if (tab[i][gx-1] == '0')
			ilosc1_2++;

		if (ilosc0_1 > n / 2 || ilosc0_2 > n / 2) 
				return 0;
		else  return 1; 
	}
	return 1;

} 
1

jaki jest sens tej funkcji jeśli nie zależnie co się stanie w tej Lini opuszczasz funkcję i nigdy nie przechodzisz dalej.

        if (ilosc1_1 > n / 2 || ilosc1_2 > n / 2) 
                return 0;
        else  return 1;  // nie zależnie w którym miejscu if się znajdziesz opuszczasz funkcję

btw. Na przyszłość zapoznaj się z funkcjami debbugera w twoim IDE. Łatwo będziesz dzięki temu znajdować takie błędy.

edit:
poza tym ta cała funkcja jest źle napisana(ogólnie nie ma sensu). Dwa razy powtarzasz ten sam algorytm tylko że z innym parametrem, nie lepiej po prostu zrobić uniwersalny algorytm który będzie przyjmował argument(0 lub 1). I po co static int?

0
revcorey napisał(a):

jaki jest sens tej funkcji jeśli nie zależnie co się stanie w tej Lini opuszczasz funkcję i nigdy nie przechodzisz dalej.

        if (ilosc1_1 > n / 2 || ilosc1_2 > n / 2) 
                return 0;
        else  return 1;  // nie zależnie w którym miejscu if się znajdziesz opuszczasz funkcję

btw. Na przyszłość zapoznaj się z funkcjami debbugera w twoim IDE. Łatwo będziesz dzięki temu znajdować takie błędy.

edit:
poza tym ta cała funkcja jest źle napisana(ogólnie nie ma sensu). Dwa razy powtarzasz ten sam algorytm tylko że z innym parametrem, nie lepiej po prostu zrobić uniwersalny algorytm który będzie przyjmował argument(0 lub 1). I po co static int?

Pewnie lepiej by było, tylko ja na prawdę nie mam pojęcia jak to zrobić :( programuję od 2 miesięcy i to tak bardzo kulawo i takie zadanie mnie trochę przerasta, stąd to pytanie. A czy masz jakąś propozycję jak można to napisać żeby działało?

1

no wiesz podałem ci miejsce w którym jest błąd(a raczej w całej twojej idei)..... Ale po kolei
a) Poczytaj czym jest słowo return LINK
b) Jeśli masz trudności Napisz sobie algorytm np. w schemacie blokowym LINK albo po prostu słowami na kartce.
c) przenieść do C++
d) Poczytaj o debbugerze w twoim IDE

Jest to jakieś zadanie na zaliczenie i jak tego w 100% robić za ciebie nie będę ponieważ nie to miał prowadzący na myśli więc jeszcze raz błędy w formie pytań może:

  1. Używasz wielokrotnie słowa return, co się stanie jak go użyjemy?
  2. Jak zwrócić z funkcji dwie różne wartości, bo ty potrzebujesz dwóch sprawdzeń?(ale czy trzeba?)
  3. Dlaczego robić dwa sprawdzenia w jednej funkcji? Nie lepiej żeby funkcja była uniwersalna i przyjmowała to co ma sprawdzać?
  4. co to są argumenty funkcji i co można porównywać w if? Czy można porównywać w if argumenty przekazane do funkcji?
0
revcorey napisał(a):

no wiesz podałem ci miejsce w którym jest błąd(a raczej w całej twojej idei)..... Ale po kolei
a) Poczytaj czym jest słowo return LINK
b) Jeśli masz trudności Napisz sobie algorytm np. w schemacie blokowym LINK albo po prostu słowami na kartce.
c) przenieść do C++
d) Poczytaj o debbugerze w twoim IDE

Jest to jakieś zadanie na zaliczenie i jak tego w 100% robić za ciebie nie będę ponieważ nie to miał prowadzący na myśli więc jeszcze raz błędy w formie pytań może:

  1. Używasz wielokrotnie słowa return, co się stanie jak go użyjemy?
  2. Jak zwrócić z funkcji dwie różne wartości, bo ty potrzebujesz dwóch sprawdzeń?(ale czy trzeba?)
  3. Dlaczego robić dwa sprawdzenia w jednej funkcji? Nie lepiej żeby funkcja była uniwersalna i przyjmowała to co ma sprawdzać?
  4. co to są argumenty funkcji i co można porównywać w if? Czy można porównywać w if argumenty przekazane do funkcji?

Dziękuję za dobre chęci, ale wciąż kompletnie nie wiem gdzie popełniam błąd i jak to zmienić, w swoim programie już pozmieniałam te returny i stworzyłam nowe if, a nawet kazałam mu zerować to ilość gdy przechodzi do innego wiersza, ale widocznie nie tak jak powinnam...

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