Pozycyjne systemy numeryczne

Autor:johan l vgren

W moim projekcie (C ++, GUI w języku C #) konieczne było działanie z różnymi systemami liczbowymi (2, 6, 10, 16 i nie tylko). Ponadto wykonuj na nich operacje matematyczne (dodawanie, odejmowanie, mnożenie, dzielenie). Musimy pracować z liczbami naturalnymi i rzeczywistymi. I najlepiej, aby uzyskać wyjście z całości i ułamkowych części w postaci, na przykład, linii - aby pokazać użytkownikom.

Konieczne jest wywołanie funkcji, na przykład dodanie dwóch argumentów: 1 - liczba naturalna w układzie dziesiętnym (2300), 2 - liczba rzeczywista w systemie trójskładnikowym ("2120.102")

Czy są jakieś biblioteki (w C ++ lub C #), które mogłyby zapewnić tę funkcjonalność?

Jeśli go nie ma, czy nie lepiej byłoby zaimplementować go w jakimś języku funkcjonalnym (chociaż najprawdopodobniej już istnieje) i połączyć go z C ++ lub C #?

Komentarze:
I wiesz dokładnie, czego potrzebujesz? Po co zapisywać i wykonywać obliczenia w różnych systemach liczbowych? Mimo wszystko jednak w zwojach binarnych. Czy jest jakiś zysk z danych systemów liczbowych? Jeśli jest to praca edukacyjna, radzę pisać własnymi rękami. - linda schnetzer
Będę działał, oczywiście, z jednym numerem i nie zamierzam przechowywać numerów w różnych systemach (to po prostu nie ma sensu). A samo pytanie brzmiało, czy istnieją biblioteki z już zaimplementowaną funkcjonalnością dla wiązania. operacje. Otóż, tak jak widzę wywołanie, na przykład funkcja dodawania w znalezionej bibliotece: pierwszy argument jest łańcuchem o rzeczywistym numerze n1-ary ("222010.222" jest potrójnym), drugi argument jest ciągiem o rzeczywistym n2-arowym numerze ("424010.2401" - 5-ric), trzeci to rodzaj wynikowego układu liczbowego - system liczb m-ary (hex-ric), a na wyjściu chcę uzyskać linię zsumowania w formacie systemu m-ary ("FF3.44D"). - suzy page
Tzn spodziewasz się zobaczyć coś takiego:
ciąg Add_3base_to_5_base_ret_16_base (string base_3, string base_5);
? Ile funkcji należy zadeklarować w takiej bibliotece? Tak, i dlaczego?

Jeśli tak, to czekaj na próżno, bo wszystko rozwiązuje się w inny sposób:
to_base (from_base (base3, 3) + from_base (base5, 5), 16);

Opcje konwersji, aby znaleźć nie problem. Czy jest naprawdę problem - napisać dwie funkcje konwersji i, jeśli to konieczne, jedną klasę z 4 przeciążonymi operatorami i niezbędnymi owijkami do operacji na macie? - tracey holden
Tak, miałem na myśli dokładnie ten format, który napisałeś - pośpiesz się z odpowiedzią ...
O tym, że problem - nie, nie jest problemem. Prawdopodobnie pytanie o jigera nie jest tego warte ... - ashley espey
Dlaczego musisz operować z numerem w dziwnym systemie liczbowym? Przechowuj w jednym, jak zwykle binarnie, poprowadź go, przeczytaj w nim, a następnie wypakuj tak, jak powinien. - tania hutley
Powyżej, już odpowiedziałem, że jest to dokładnie to, co zamierzałem zrobić, cała istota pytania sprowadza się do pytania, czy istnieje gotowy kod (funkcja) do konwersji, przeprowadzenia mata. operacje z liczbami rzeczywistymi.
Tak, znane mi są algorytmy konwersji. - shrabonti
Ponownie. Istnieje nawrócenie. Operacje, dlaczego? Operacje są wykonywane w zwykły sposób przy użyciu zwykłej reprezentacji binarnej w sprzęcie, wynik jest wyświetlany tak, jak chcemy. Dla liczb całkowitych jest link Dla prawdziwych, nie wiem. - seng chuen
Hmm ... tak, masz rację, najważniejsza jest konwersja, ale nie potrzebujesz operacji ... Tak, byłem zbyt inteligentny ... - neni

Odpowiedzi

shrieking
Miksujesz logikę z wyświetlaczem. (A to jeden z największych grzechów w programowaniu)
Nie ma liczb w systemie dziesiętnym ani w systemie trójskładnikowym - liczby, to liczby. Istnieje system rejestracji liczby dziesiętnej. (Tj. Mówię o wyświetlaczu).
Jeśli poprawnie podzielisz, będziesz miał - konwertery od łańcucha po numeryczne iz powrotem oraz zwykłe funkcje matematyczne.

Na przykład: utwórz klasę Number, dodaj do niej funkcje:
Liczba (& lt; nagrane ciągi & gt; & bdquo; & gt;)
__toString (& lt; bit bit & gt;)
I przeciążone dodawanie, odejmowanie, operatory podziału.
Odpowiedzi:
Po prostu nie do końca sformułowałem pytanie. Moja logika i wyświetlacz nie są w żaden sposób pomieszane. Powyżej, dodałem pytanie. Rozumiem, że wszystkie operacje pośrednie będą miały postać: od ciągu od systemu X-nar do 10. (no, w zasadzie binarny, ale nie będziemy się głębiej), a następnie wykonywanie operacji, a następnie wyprowadzanie w formacie string do Y-ary. - leyla
heather rowland
kilka lat temu miałem dużo zabawy (sam napisałem kalkulator), ale musiałem sam napisać zajęcia: niczego takiego nie robiłem.

To prawda, że ​​zachowałem wszystko w formie tablic (i porządku, mantysy i podstawy SS) i programowo wykonałem na nich działania. Było wyraźnie bardzo wolno. Ale ilustrował pracę z różnymi podstawami systemu liczbowego.
Odpowiedzi:
Czy coś takiego jest w istocie moim celem :) - valentino
czy jest na githabie? Byłoby ciekawie to zobaczyć - rachel barkley
Jak opublikować tłumaczenie? :: Gra o piasku w Linuksie? :: Jak sortować listy w Gmailu według ilości załączników? :: Reverse proxy: Squid VS nginx? :: Kupcy dla SaaS?
Zostaw odpowiedź
Linki