Skocz do zawartości

Zmiana zapisu binarnego na decymalny (chyba dobrze :P)


Gość

Rekomendowane odpowiedzi

Witam :) Zacznę od tego, że nie jestem pewien czy to decymalne :P (chyba tak). Z racji, że nic nie dodaję, nudzi mi się, postanowiłem napisać skrypt zamiany zapisu binarnego (składającego się z 1 lub 0) na decymalny (czyli 0, 1, 2, 3, 4, 5, 6, 7, 8 ,9). Nie jest to nic specjalnego, ale może się do czegoś przyda.

Na pewno wiecie, że zapis binarny to np. 1011010010, a decymalny to 1234567890. Zamiana zapisu binarnego na decymalny nie jest trudna. Wygląda to mniej więcej tak: z 110111 na decymalny

GML
1 * (2^5) + 1 * (2^4) + 0 * (2^3) + 1 * (2^2) + 1 * (2^1) + 1 * (2^0) = 54

Za bardzo nie wiem jak to wytłumaczyć, ale mnożymy każdą cyfrę (0 lub 1) przez potęgę liczby 2. Ile razy mamy potęgować? Otóż, ostatnią cyfrę potęgujemy 0 razy, czyli można przyjąć, że to jest 0. Przed ostatnia to jest potęgowanie 1 raz, czyli kolejne (wcześniejsze) to potęgujemy +1 razy. :P Chyba coś z tego zrozumiecie :P Kiedy już policzymy każdą cyfrę, dodajemy wyniki do siebie (czyli np 11: 1 * (2^1) = 2 * 1 = 2; 1 * (2^0) = 1 * 0 = 0; 2 + 0 = 2 :P)

A teraz przejdę do skryptu.

Opracowałem sobie to tak, dla moich potrzeb:

GML
CREATE:

 

liczba = get_string("Wpisz kod binarny (np. 1001101)", ""); //wyswietlenie pola do wpisania liczby

wynik = 0; //koncowy wynik

var _i, _znak; //tymczasowe zmienne

for (_i = string_length(liczba) - 1; _i > 0; _i -= 1;) //wiadomo :P

{

if !((string_char_at(liczba, _i) == "1") or (string_char_at(liczba, _i) == "0")) //jesli każda cyfra w liczbie nie jest 0 albo 1...

{

game_end(); //... to kończy program

}

else //a jesli jest

{

_znak = real(string_char_at(liczba, _i)); //odzczytuje kazda cyfre...

wynik += _znak * (power(2, real(_i))); //... i dodaje do wyniku koncowego obliczenie kazdej cyfry

}

 

}

 

DRAW:

draw_text(10, 10, string(liczba) + " = " + string(wynik)); //wyswietla wynik koncowy :)</span></span>

A więc jak mówiłem, nie jest to nic specjalnego, ale początkującemu (np. który siedzi na stronkach typu HackMe :P) może się przydać :)

 

Pozdrawiam :)

 

E: Może być nieoptymalne, albo nie wiem jeszcze jakie, ale starałem się to napisać jak najlepiej :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...