sobota, 27 października 2012

Kalkulator CASIO fx-82ES PLUS i drażniący problem konwersji między systemami liczbowymi.

Jeśli już ktoś, kto zajmuje się informatyką i elektroniką cyfrową, decyduje się na zakup kalkulatora - często takie urządzenie bywa przydatne, a jak ktoś jest inżynierem, to posiadanie kalkulatora staje się nieodzowne (kalkulator to atrybut inżyniera) - chciałby, żeby jedną z jego podstawowych funkcjonalności była konwersja DEC->BIN->HEX->OCT->... A ponieważ tę funkcjonalność posiadają praktycznie wszystkie kalkulatory oznaczone napisem "scientific", nawet te bazarowe, zakupiłem kilka miesięcy temu wspomniany w tytule model, przejrzawszy wcześniej z grubsza jego funkcje. Właśnie - z grubsza. Okazało się, że kalkulatorek, który prowadzi obliczenia w zapisie naturalnym i jest naszpikowany wieloma funkcjami - w tym statystycznymi, potrafi obliczać wartości zadanej funkcji f(x) dla określonego przedziału x... nie ma wspomnianej konwersji!!! Miód po prostu... W pracy trzymam kalkulator za 12zł, który tę funkcjonalność posiada...
No ale trzeba sobie radzić. Oczywiście można dzielić sobie liczbę dziesiętną przez podstawę systemu docelowego, spisywać reszty z dzielenia itd. - znany algorytm. Ale do tego to w sumie kalkulatora nie trzeba - wystarczy kartka i ołówek. Odpada. Coś innego trzeba wymyślić...
I tak dziś, wykonując jakieś drobne obliczenia na tym wypas-kalkulatorze, przypomniał mi się problem konwersji i wymyśliłem sposób. Otóż jest w tym urządzonku wspomniana wcześniej funkcja obliczająca wartości f(x) dla pewnego przedziału x (x zmienia swoją wartość z zadanym krokiem). Wystarczy napisać funkcję, której wartości będą resztą z dzielenia x przez podstawę systemu liczbowego (testowałem na systemie binarnym, czyli 2), potem z uzyskanej tabelki spisać te wartości, które nas interesują (patrz: wspomniany wcześniej, popularny algorytm) i - voila! Mamy liczbę przekowertowaną!
A oto szczegóły:
  1. przełączamy kalkulator w tryb TABLE
  2. ustalamy liczbę miejsc dziesiętnych (FIX) na 0 - żeby funkcja Rnd zaokrąglała do wartości całkowitych
  3. funkcji, z której będziemy uzyskiwać wyniki, nadajemy postać f(x)=-(x-2Rnd(x/2)) - minus przed nawiasem, bo Rnd zaokrągla w górę, czyli np. 0,5 -> 1
  4. przedział dla x ustalamy od 0 do 12 (liczba, którą konwertujemy), z krokiem 1
  5. uruchamiamy proces i odczytujemy tabelkę :)
Podsumujmy więc:
  • zalety rozwiązania - bo jest to jakieś rozwiązanie problemu.
  • wady - sztuka dla sztuki, konieczność wspomagania się kartką, konwersja niewielkich liczb ze względu na ograniczoną pojemność pamięci kalkulatora...
No ale zawsze można się pobawić. Ot na przykład sprawdzić, jak kalkulator poradzi sobie z konwersją DEC->HEX :)

Inna rzecz, że gdyby się głębiej zastanowić, w konwersji DEC->BIN wystarczy tylko kartka i pisadło, nawet liczyć nie trzeba (nie wspomnę o konwersji niewielkich liczb w pamięci)...

Brak komentarzy:

Prześlij komentarz