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

Konwerter binarny w c++ (błąd)

Object Storage Arubacloud
0 głosów
328 wizyt
pytanie zadane 24 listopada 2015 w C i C++ przez Adam Jakś Dyskutant (8,940 p.)

Witam, czy jest ktoś w stanie powiedzieć mi, dlaczego mój kod nie działa poprawnie?

Jest to konwerter z języka dziesiętnego na język dwójkowy (binarny). Jednym ze sposobu konwersji liczby jest skorzystanie z reszty z dzielenia przez 2. Czyli dajmy na to mamy liczbę 23 i dzielimy ją na 2.

23/2 = 11 + r1

11/2=5 + r1

5/2=2 + r1

2/2=1 + r0

1/2=0 + r1

Następnie czytamy od tyłu- a więc 23(10) = 10111(2)

W ten sam sposób napisałem program- ilość bitów się zgadza, ale wszystkie z nich wyświetlają się jako zera.

#include <iostream>

using namespace std;
int tab[50],y,z,i;

int bin (int x)
{
    while (x!=0) 
    {
        y=x%2; //reszta z modulo (0 lub 1)
        tab[i]=y; //zapisanie wyniku dzielenia modulo do tablicy
        x/=2; //podzielenie x (czyli liczby podanej do programu w celu konwersji) przez 2
        z++; //licznik petli potrzebny do odczytania danych z tablicy
        i++; //inkrementacja i potrzebna do poprawnego zapisania (0/1) do tablicy
    }

    for (int j=z;j>=1;j--)
    {
        cout<< tab[i];
    }
}

int main()
{
    int num;
    cin>>num;
    bin(num);
    return 0;
}

Pozdrawiam.

2 odpowiedzi

+1 głos
odpowiedź 24 listopada 2015 przez Radfler VIP (101,030 p.)
wybrane 24 listopada 2015 przez Adam Jakś
 
Najlepsza

Pętla wypisująca powinna być taka:

for (int j = z - 1 ;j >= 0; j--) {
  cout << tab[j];
}

Powineneś zaczynać od elementu z - 1, a pętla powinna trwać dopóki j jest większe lub równe 0 (indeks pierwszego elemntu). Zmienna i chyba nie jest potrzebna.

komentarz 24 listopada 2015 przez Adam Jakś Dyskutant (8,940 p.)

Zmiennej i używałem przy zapisywaniu reszty do tablicy, ale teraz widzę, że można skorzystać z z.

Drugą pętlę najpierw robiłem pod i, potem przepisywałem pod i zapomniałem o cout'cie.

Dzięki.

0 głosów
odpowiedź 24 listopada 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
chyba powineneś zastosować typ zmienno przecinkowy zamiast całkowitch
komentarz 24 listopada 2015 przez Adam Jakś Dyskutant (8,940 p.)
Int jest tutaj nieodzowny. Nie da się inaczej obliczyć reszty z dzielenia.
komentarz 24 listopada 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
tak masz rację za szybko chciałem :)

Podobne pytania

0 głosów
1 odpowiedź 660 wizyt
pytanie zadane 12 września 2017 w Egzaminy zawodowe przez dejkat Nowicjusz (160 p.)
0 głosów
1 odpowiedź 602 wizyt
pytanie zadane 7 października 2015 w Nasze projekty przez Wartownik Obywatel (1,990 p.)
0 głosów
1 odpowiedź 581 wizyt

92,536 zapytań

141,377 odpowiedzi

319,455 komentarzy

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

...