Jak najprościej można to zrobić? Pozdrawiam.
- posted
18 years ago
Jak najprościej można to zrobić? Pozdrawiam.
Cyfr dziesietnych? To dzielic przez 10 i masz, chyba, ze od poczatku robisz arytmetyke w BCD. Jak na hex to wogole nie ma problemu;)
W czterech krokach:
Jeśli nie masz rozkazu dzielenia, to zamiast tego robisz odejmowania dzielnika (za każdym razem od 0 do 9 sztuk - jest to jednocześnie wynik takiego emulowanego dzielenia). Jeśli nie masz rozkazu odejmowania dwubajtowego rozbijasz go na dwa odejmowania jednobajtowe z pożyczką.
Powodzenia Roman
Użytkownik Robert R napisał:
W pamięci? Kalkulatorem Windows?
Może napisz coś więcej?
Albert
Albert Bartoszko snipped-for-privacy@nt.kegel.com.pl> napisał(a):
dokładnie chodzi mi o wyświetlenie liczby 2-bajtowej (bascom - word) na 5 wyświetlaczach led. Program pisany będzie w bascomie.W jaki sposób mogę otrzymać interesującą mnie cyfrę + oddzielnie resztę którą mogę dalej dzielić? Dzielę np.65000 przez np.10000 Interesującą cyfrę wyciągam przez zaokrąglenie iloczynu (6)Następnie Uzyskaną cyfrę (6) mnożę przez poprzedni dzielnik (60000) i odejmuję od liczby wyjściowej 65000 - 60000 = 5000. itd.CZy można prościej? Pozdrawiam, dzięki.
A czy w BASCOMie nie ma odpowiednika funkcji sprintf albo itoa, znanych z jezyka C?
Użytkownik Robert R napisał:
Matematycznie - raczej nie.
Natomiast procesory i języki ich programowania inne niż assembler narzucają swoje ograniczenia.
Jeśli masz więc narzucony język programowania to po pierwsze możesz poszukać czy nie mają gotowych funkcji co już Ci Adam sugerował.
Dalej liczenie na procesorze różni się od matematyki więc możesz optymalizować sposób wykonywania działań. W twoim przykładzie zamiast dzielenia zmiennoprzecinkowego i zaokrąglania dać dzielenie całkowite i resztę z dzielenia, jeśli użyty język ma takie możliwości.
W zależności od procesora możesz zmienić algorytm. Tu już zależy jakimi typami danych dysponuje procesor, czy ma sprzętowe dzielenie i mnożenie, oraz rozpatrywanym wypadku dość ciekawe możliwości dają rozkazy dodawania lub korekcji dziesiętnej wyniku. Ale to już raczej assembler niż Bascom ;-)
Albert
W twoim przykładzie zamiast dzielenia zmiennoprzecinkowego
Język programowania może być w zasadzie dowolny.W bascomie napisałem najwięcej programów C - tylko teoretycznie przeglądanie i analiza źródeł.
No właśnie w jaki sposób uzyskać tę resztę z dzielenia całkowitego? Pewnie kryje się w jakimś rejestrze? Może Ktoś podrzuci mi kawałek kodu. Faktycznie szkoda ramu na dzielenie zmiennoprzecinkowe. Pozdrawiam.
Robert R snipped-for-privacy@gazeta.SKASUJ-TO.pl> napisał(a):
Najprościej to zerknąć do Helpa , ale jak Ci się nie chce ;-) to proszę: Co to za typ zmiennej unsign(ed ?) - word ? Jeśli WORD to można ...
Dim Cyfryascii As String * 5 , Liczba As Word Liczba = 65535 Cyfryascii = Str(liczba) .. Teraz odczytujesz 1 znak z ciągu i odejmujesz 48(&H30) . Są też pewnie inne sposoby ;)
Pozdrawiam Piotrek
tylze ze wyjdzie to jako hex + krzaczki
"Robert R" napisal:
A nie masz w bascomie operatora modulo? W C jest to AFAIR znak %. Ewentualnie zamiast dzielenia uzyj odejmowania - odejmuj zaczynajac od najwiekszej potegi 10 (u ciebie 10000) inkrementujac pierwsza cyferke, jak to co zostanie bedzie mniejsze od 10000 przestaw sie na 1000 i nastepna cferke i tak dalej az do jednosci. Algorytm jest typu "wiem ze to nieefektywne ale nie chce mi sie myslec" ale jest banalna w impelementacji w dowolnym jezyku programowania i zadziala na praktycznie kazdym procku :) GRG
Greg\(G.Kasprowicz\) snipped-for-privacy@gmail.com napisał(a):
Ja tak robię i nie mam żadnych krzaczków ;) Oto 2 przykłady:
$regfile = "m8def.dat" $crystal = 1000000
Dim Cc(1)as Byte At 96 , Cyfryascii As String * 5 At 97 Dim Y As String * 1 , X As Byte , Z As Byte Dim Liczba As Word
Liczba = 65432 Cyfryascii = Str(liczba)
'pierwszy LEGALNY sposób For X = 1 To Len(cyfryascii) Y = Mid(cyfryascii , X , 1) Z = Asc(y) - 48 'w zmiennej Z mamy kolejno dziesiątki tysięcy,jedności tysięcy 'setki,dziesiątki,jedności
Next X
Cyfryascii = Str(liczba)
'drugi "MNIEJLEGALNY" sposób , ale także mniej PAMIĘCIOŻERNY For X = 2 To 6 Cc(x) = Cc(x) And &H0F Next 'w tablicy Cc(2) do Cc(6) mamy kolejno dziesiątki tysięcy,jedności tysięcy 'setki,dziesiątki,jedności
I gwarantuję Ci , że to nie są ani HEX-y ani krzaczki ;-) Można sprawdić nawet w symulatorze , obserwując pamięć RAM.
Pozdrawiam Piotrek
Wielkie dzięki - pomysł z zamianą zmiennej word na stringa b.dobry.Pozdrawiam.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.