Zmiana z systemu dziesiętnego na binarny

Cześć.
Utknąłem w czymś. Jakby dalej ruszyć? Dacie radę coś podpowiedzieć :slight_smile:
Chcę, aby program python zamieniał mi wprowadzoną liczbę z dziesiętnej na binarną - mam już taki kod:

n= input("podaj liczbe dziesietna a bedzie zamieniona na binarna ")
n= int(n)
while n >0:
    n = n % 2
    # tutaj jakby dalej się zabrać za działanie, aby poszło dalej (101) już?
    print("twoja liczba wynosi", n)
    break
    
else:
    print("twoja liczba binarna wynosi 0")

Czy początek jest ok? Wszystko chcę wykonać iteracyjnie

Nie zadziała tak jak próbujesz.
Jako podpowiedź masz jak program powinien mniej więcej działać. Spróbuj to zakodować. To pod spodem nie jest kodem ale krokami jakie powinien robić program.

dec_to_bin(100)

100 > (2^0) (Tak)
100 > (2^1) (Tak)
100 > (2^2) (Tak)
100 > (2^3) (Tak)
100 > (2^4) (Tak)
100 > (2^5) (Tak)
100 > (2^6) (Tak)
100 > (2^7) (Nie)

1xxxxxx

100-64=36

36 >= (2^5) (Tak)

11xxxxx

36-32=4

4 >= (2^4) (Nie)

110xxxx

4 >= (2^3) (Nie)

1100xxx

4 >= (2^2) (Tak)

11001xx

0 > (2^1) (Nie)

110010x

0 > (2^0) (Nie)

1100100

100(dec)=1100100(bin)

masa ludzi tego nie zrozumie, sztuka dla kumatych :slight_smile: powodzenia
walcz

1 polubienie

Jakieś rozwiązanie (ale nie iteracyjnie)
n= input("podaj liczbe dziesietna a bedzie zamieniona na binarna ")
n= int(n)

print(„Liczba jaka podales dziesietnie”, n, „wynosi binarnie:”)
print(bin(n),)

:slight_smile:
@jajecpl
@aesereht a tutaj jest definicja funkcji

dec_to_bin(100)

Dzięki.
Jak coś będę miał bardziej sensownego napiszę tutaj. Walka trwa.

Tu nie ma rozwiązania. Tu nie ma nic :smiley:

#include <iostream>

size_t binuj (int i)
{
    if ( i < 2 ) { return i ; }
    else { return 10 * binuj(i/2) + (i%2) ; }
}

int main ()
{
    std::string s ;
    while ( std::cin >> s )
    { printf ( "%d\n", binuj(std::stoi(s)) ) ; }

    return 0;
}

Potrzebny jest wyższy standard:

𝄞 g++ -Wall -pedantic -std=c++11 ./binuj.cxx -o binuj
./binuj.cxx: In function ‘int main()’:
./binuj.cxx:13:44: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t {aka long unsigned int}’ [-Wformat=]
     { printf ( "%d\n", binuj(std::stoi(s)) ) ; }

𝄞 echo "254" | ./binuj
11111110

Jak widać, ma to potencjał na overflow, i to niemały :wink: Ale w pierwszym poście widać brak odporności na kazdy overflow, więc pozwoliłem sobie to olać

Jak wspomniano powyżej, Python ma taką konwersję wbudowaną. Dwa rozwiązania:

def decimalToBinary(n):
    return bin(n).replace("0b", "")
def decimalToBinary(n):
    return "{0:b}".format(int(n))

Przypuszczam jednak że chodzi o zaprogramowanie algorytmu krok po kroku, tak aby go zrozumieć, więc wbudowane funkcje odpadają

1 polubienie

@Bradlee
Dokładnie jak piszesz. Chodziło mi o algorytm, w celu przećwiczenia pętli.
@aesereht a tutaj jest definicja funkcji

dec_to_bin(100)

O to by chodziło co napisałeś? Dasz radę coś podpowiedzieć :slight_smile:

Witaj @nowy1231
Może takie rozwiązanie

decy= input("podaj liczbe dziesietna a bedzie zamieniona na binarna ")
decy= int(decy)
while decy >0:
    print("twoja liczba wynosi", "{0:08b}".format(decy))
    break
    
else:
    print("twoja liczba binarna wynosi 0")
podaj liczbe dziesietna a bedzie zamieniona na binarna 
19
twoja liczba wynosi 00010011

Pozdrawiam serdecznie
Juliusz

dec_to_bin to przykładowa nazwa docelowej funkcji jaką masz do napisania. @wielkipiec nazwał ją sobie binuj chociaż jego kod jest w C++, @Bradlee np. definiował funkcje
decimalToBinary() z użyciem wbudowanej funkcji do konwertowania do formatu binarnego

def decimalToBinary(n):
    return bin(n).replace("0b", "")

@iJuliusz podał po prostu wyświetlenie liczby w innym formacie tutaj nawet nie jest potrzebna pętla

print("twoja liczba wynosi", "{0:08b}".format(decy))

Samo to przekształci liczbę dziesiętną na binarną, ale raczej nie o to chodzi. Dodatkowo zamiast 0:08b możesz napisać 0:01b aby nie mieć dodatkowych zer z przodu

1 polubienie