Gość Opublikowano 23 Października 2009 Udostępnij Opublikowano 23 Października 2009 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 Więcej opcji udostępniania...
Makary155 Opublikowano 24 Października 2009 Udostępnij Opublikowano 24 Października 2009 Rzeczywiście nic specjalnego, łap skrypt na odwrócenie procesu GML var znak, reszta, liczba liczba=get_real("podaj liczbę",0) while(liczba>0) { reszta=liczba mod 2 liczba=liczba div 2 znak+=string(reszta) } Teraz tylko musisz odwrócić string. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
qanaroo Opublikowano 24 Października 2009 Udostępnij Opublikowano 24 Października 2009 potęgujemy 0 razy, czyli można przyjąć, że to jest 0 Jeśli potęgujesz coś do potęgi 0 to zawsze jest to 1. A skrypt raczej nieprzydatny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę