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] zmienna Integer na byte

Kubaand 23 Maj 2010 21:05 4041 8
REKLAMA
  • #1 8110275
    Kubaand
    Poziom 10  
    Witam mam pytanie jak rozłożyć zmienną Integer np. 296 na pojedyńcze cyfry abym mógł je zapisać w zmiennej byte (2,9,6) czy jest może jakaś prosta komenda?
    za odp dziekuje
  • REKLAMA
  • #2 8110396
    And!
    Admin grupy Projektowanie
    Jeżeli nie ma wbudowanych automatów można zrobić na piechotę (prosto i zasobożernie):

    np:
    x=297

    a=x/100=2
    b=(x-(a*100))/10=9
    c=(x-((a*100)+b*10)=7

    Chyba że satysfakcjonuje cię wyświetlanie w BCD,
    Przy dzielnikach większych od 100 można zrobić obliczenia w pętli,
    aby nie klepać poszczególnych etapów obliczeń.
  • REKLAMA
  • #3 8110733
    ElektroTME
    Poziom 14  
    Widzę że kolega And! nigdy nie programował w Bascomie, otóż ten język nie przyjmuje aż tak skomplikowanych działań. Trzeba prościej.

    Zważając na to że integer to także liczby ujemne sugeruję taki oto kodzik:

    Dim A As Integer , C1 As Byte , C2 As Byte , C3 As Byte , C4 As Byte , C5 As Byte
    Dim Temp As Integer , Znak As Bit
    A = -31945
    
    If A < 0 Then
    Znak = 1
    A = Abs(a)
    else
    znak = 0
    End If
    
    
    Temp = A \ 10000
    C1 = Temp
    Temp = A Mod 10000
    Temp = Temp \ 1000
    C2 = Temp
    Temp = A Mod 1000
    Temp = Temp \ 100
    C3 = Temp
    Temp = A Mod 100
    Temp = Temp \ 10
    C4 = Temp
    Temp = A Mod 10
    C5 = Temp


    Kod nie modyfikuje zmiennej A, oprócz tego ze usuwa minus, a ustawia 1 w zmiennej znak(1 = a było ujemne)
    zmienne c1..c5 to kolejne cyfry od możliwej największej

    czyli
    znak = 1
    c1=3
    c2=1
    c3=9
    c4=4
    c5=5

    przy A = 234
    znak = 0
    c1=0
    c2=0
    c3=2
    c4=3
    c5=4


    Jeżeli zależy Ci tylko na przedziale dodatnim, możesz usunąć część zmieniającą znak, i zmienną znak.
    jeżeli zależy Ci na mniejszym przedziale np 0...999 to możesz usunąć fragment z c1 i c2 (zawsze mniej kodu program przerabia)

    Program będzie tez działał dla zmiennej typu word, trzeba wtedy zmienić typ zmiennej temp na word i można usunąć zmienną znak oraz instrukcję If a<0.....end if

    Pozdrawiam
  • #4 8114721
    Kubaand
    Poziom 10  
    dokładnie o to mi chodziło możesz mi napisać coś o komendzie " Mod "?
  • REKLAMA
  • #5 8114821
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #6 8114831
    ElektroTME
    Poziom 14  
    :)

    Komenda mod to taka reszta z dzielenia

    czyli: zmienna = liczba mod 4

    zmienna - miejsce gdzie zostanie wpisana reszta z dzielenia
    liczba - zmienna która jest dzielona przez 4
    (w miejsce 4 możesz wstawić inną liczbę lub zmienna)

    Dodatkowo w Bascomie są dwa rodzaje dzielenia
    znak / i \
    pierwszy (/) używamy do dzielenia z resztą (w przypadku zmiennej nie przyjmującej wartości po przecinku liczba jest zaokrąglana w górę lub w dół)
    drugi (\) używamy do dzielenia i odrzucenia reszty(czyli 5\2 = 2 a nie 2,5(lub w zaokrągleniu 3 jak to było by w przykładzie poprzednim)

    Myślę że pomogłem choć trochę w zrozumieniu tego prostego języka, pozdrawiam

    Tutaj link do polskiego "Helpa BASCOMa" ;)

    ElektroTME
  • #7 8115592
    Logan
    Poziom 30  
    Można jeszcze zmienić zmienną na Stringa i wtedy "powycinać" poszczególne cyfry.
  • REKLAMA
  • Pomocny post
    #8 8115927
    ElektroTME
    Poziom 14  
    W sumie można, lecz autor chciał mieć format byte, domyślam się że potrzebne to mu było do wyświetlania liczby na wyświetlaczach siedmiosegmentowych.

    Jeżeli tak, to Ciekawy jestem czy autor korzysta z lini Data i instrukcji lookup(), czy może z select case?
  • #9 9574764
    Kubaand
    Poziom 10  
    temat zamykam pomógł kolega ElektroTME :)
REKLAMA