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

dziesietna->binarna, zapełnienie tablicy[4] liczbą binarną poprzez f. rekurencyjną

Object Storage Arubacloud
0 głosów
98 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez jacekkk Nowicjusz (120 p.)
edycja 28 kwietnia 2020 przez jacekkk

Cześć walczę prawdopodobnie z dosyć błahym problem ale po 2 dniach nic więcej nie przychodzi mi do głowy.

A mianowicie: tworzę program, który przelicza wartości dziesiętne na binarne, następnie te wartości binarne zapisuje w tablicy 4-ro elementowej. Robię to po to aby moć w łatwy sposób sprawdzać, na którym bicie jest: 0, a na którym: 1 do późniejszych celów(ale ta część jest nieistotna).

Problem: 
1)Poprawnie zapisują się tylko liczby 8-15(1000-1111), wszystko poniżej to jakiś random(może nie :p)
2a)Co więcej liczby od 8-11 wywołują się poprawnie tylko za pierwszym razem, przy drugim wywołaniu funkcji "dwojkowo()" z inna liczbą z tego przedziału coś jest nie tak.
2b) postanowiłem to sprawdzić poprzez "zapiątkowanie"/zerowanie(); i mam taki odczyt:

1100 // dla liczby -12, czyli poprawnie
5511 // dla liczby - 14(1110) -czyli fatalnie 

Wspomnę, że jestem osobą, która szuka pomocy poprzez post w ostateczności ale już mi ręce opadły i wiem, że sam sobie nie poradzę..
Z góry dziękuje za pomoc

#include<iostream>
using namespace std;

int tab_bin[4]{};

int dwojkowo(int liczba, int binara[])
{	
	
	static int j = 0;

	int reszta = liczba % 2;
	if (liczba > 1)
	{	
		dwojkowo(liczba / 2, binara);
	}

	binara[j] = reszta;
	j++;
		
	return 5;
}

int zerowanie(int tab_zero[])
{
	for (int i = 0; i < 4; i++)
	{
		tab_zero[i] = 5;
	}
	return 5;
}


int main()
{
	

	int statystyka[16]{ 15,29,42,81,0,13,185,1,43,257,821,644,32,123,46,27 };
	
	dwojkowo(12, tab_bin);
	cout << tab_bin[0] << tab_bin[1] << tab_bin[2] << tab_bin[3] << endl;

	zerowanie(tab_bin);

	dwojkowo(14, tab_bin);
	cout << tab_bin[0] << tab_bin[1] << tab_bin[2] << tab_bin[3] << endl;

}
1
komentarz 28 kwietnia 2020 przez DragonCoder Nałogowiec (36,500 p.)

cos czuje, ze wali sie przez sama kolejnosc wykonywania wenwatrz Twojej funkcji:

void dwojkowo(int liczba, int *binara)
{
    static int j = 0;
    binara[j] = liczba % 2;
    j++;
    if (liczba > 1) {
        dwojkowo(liczba/2, binara);
    }
}

tutaj przekazuje tablice przez wkszanik, zamiats robic globalna

komentarz 28 kwietnia 2020 przez jacekkk Nowicjusz (120 p.)

Człowieku o złotych palcach, niechaj ci Bóg w programach wynagrodzi wink

Do wskaźników z Panem Gręboszem jeszcze nie doszedłem więc przesyłam na razie tablicę do funkcji :)
Dla zainteresowanych: Propozycja Pana(up) trafna, z jedną korektą dotyczącą wypisywania liczb binarnych od tyłu(drobnostka, ale może komuś w przyszłości się przyda) :)

void dwojkowo(int liczba, int binara[])  // lub int *binara
{
    static int j = 3;                    //tu zmiana
    binara[j] = liczba % 2;
    j--;                                 //tu zmiana
    if (liczba > 1) {
        dwojkowo(liczba/2, binara);
    }
}


 

komentarz 28 kwietnia 2020 przez DragonCoder Nałogowiec (36,500 p.)
ah no tak :D no bo to normalne, ze od konca trzeba wypisywac, ktore jak przy robieniu tego recznie

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 260 wizyt
pytanie zadane 1 grudnia 2022 w C i C++ przez Janchess Początkujący (480 p.)
0 głosów
0 odpowiedzi 310 wizyt
+1 głos
3 odpowiedzi 501 wizyt
pytanie zadane 9 sierpnia 2022 w SQL, bazy danych przez KonDZIKs Bywalec (2,770 p.)

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 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!

...