logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom] Jak robić liczbę dziesiętną na 2 jedności?

13 Kwi 2009 17:10 6930 14
REKLAMA
  • #1 6409970
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 6409978
    BoskiDialer
    Poziom 34  
    dzielenie całkowite + modulo. Przy dzieleniu przez 10 uzyskasz górną cyfrę, przy modulo 10 dolną.
  • #3 6727986
    SzymonHK
    Poziom 21  
    Podłączę się do tematu, a jak odczytuje się z dzielenia modulo wynik i resztę?
  • REKLAMA
  • #5 6728204
    SzymonHK
    Poziom 21  
    % to operator modulo w bascomie czy c?
  • REKLAMA
  • #7 6728224
    SzymonHK
    Poziom 21  
    Wydaje mi się że bascomie jest po prostu MOD, rozumiem, że dla dziesiątek typ zmiennej musi byc Integer?
  • #8 6728234
    Brutus_gsm
    Poziom 25  
    Szczerze to nie mam pojęcia, gdyż nigdy nie miałem styczności z BASCOM'em ;) Podałem tylko prosty przykład rozwiązania problemu ;)
  • REKLAMA
  • #9 6728246
    Konto nie istnieje
    Poziom 1  
  • #10 6729078
    jacek13
    Poziom 15  
    Powinno byc tak:
    dziesiatki = liczba \ 10
    jednosci = liczba mod 10
  • #11 6729853
    SzymonHK
    Poziom 21  
    Dzięki, czyli tak jak się spodziewałem, trzeba zrobic dwa działania.
  • #12 6730742
    BoskiDialer
    Poziom 34  
    SzymonHK napisał:
    Dzięki, czyli tak jak się spodziewałem, trzeba zrobic dwa działania.

    W niektórych przypadkach funkcja dzielenia dostarcza obie wartości jednocześnie. Jeśli jednak tak nie jest, a mnożenie jest szybsze niż dzielenie, to można obie wartości policzyć tak:
    dziesiatki = liczba \ 10 
    jednosci = liczba - 10*dziesiatki

    Druga linijka wynika z prostej zależności, którą muszą spełniać wszystkie funkcje dzielenia (tutaj: liczba = dziesiatki*10 + jednosci)
  • #13 7153670
    ukas
    Poziom 12  
    Postanowiłem kontynuować wątek pomimo, że nie pisze w BASCOM'ie a w GCC.
    Problem jednak wydaje mi się uniwersalny bez względu na język programowania.

    Ja mam problem jak rozbić liczbę dziesiętną zapisaną w zmiennej 64-bitowej na pojedyncze cyfry.

    To rozbicie ma posłużyć mi do wyświetlenia wartości zmiennej na wyświetlaczu.
    Procedurę obsługi wyświetlacza mam taką, że potrafi wyświetlać pojedyncze cyfry.

    Napisałem:

    uint64_t liczba;         //zmienna 64-bitowa której wartość chcę wyświetlać
    unsigned char cyfra;  //zmienna którą wyświetlę na LCD - w kolejnych wykonaniach pętli będzie posiadała wartośc jedności, dziesiątek, setek itd.
    
    //aby wyświetlić dziesiątki napisałem		
    cyfra=liczba/10;
    LCD_cyfra(cyfra);
    liczba=liczba-cyfra*10;
    
    //aby wyświetlić setki napisałem		
    cyfra=liczba/100;
    LCD_cyfra(cyfra);
    liczba=liczba-cyfra*100;


    pojawił się jednak błąd:
    c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: aaa.elf section .text will not fit in region text
    c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: region text overflowed by 400 bytes

    Może podejść do tego w zupełni inny sposób gdy mamy doczynienia z tak dużymi liczbami?
  • #14 7155288
    sepako
    Poziom 14  
    Jeśli dobrze rozumiem to powiedzmy chcesz liczbę 12345 wyświetlić wysyłając do wyświetlacza poszczególne cyfry. Ty to robisz w ten sposób:
    cyfra = 12345/10 => 1234 czyli źle bo liczba dziesiątek jest 4
    liczba = 12345-12340 => 5 czyli zmienna liczba jest zapisana wartością jedności i całą informacje o liczbie straciłeś. Zaczynasz od tyłu i tracisz wartość, obliczenia sprawdzą sie jedynie w wypadku gdy liczba jest z zakresu 1-99 wtedy dostajesz dziesiątki i jedności ale po co wtedy 64bity gdy wystarczy 8.
    Dla liczby z zakresu 1-9999 można to zrobić np. tak:
    
                    uint_8t je,dz,ty;   
    		uint_16t se;
    
                            se = liczba%1000;   
    			ty = liczba/1000;
    			dz = se%100;   
    			se = se/100;
    			je = dz%10;
    			dz = dz/10;
    
  • #15 7155680
    Brutus_gsm
    Poziom 25  
    Dokładnie tak jak mówi sepako do wyciągania ostatniej cyfry najlepiej użyć dzielenia modulo, czyli "%" w C. Dostajemy w ten sposób resztę z dzielenia. Czyli 123%10 = 3; a więc cyfra jedności ;)

    Wyświetlanie dużych cyfr najlepiej zrobić w pętli. Za każdym razem dzielisz modulo przez 10 a następnie dzielisz normalnie przez 10. Pętle wykonujesz w zależności od tego ile wyświetlaczy masz.
REKLAMA