Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: liczba binarna na dziesietna?
reaz
i klops




Typ: neutral
Postów: 6
Zarejestrowany: Nov 2003
liczba binarna na dziesietna?

Taka idea ostatnio pojawila sie wsrod kolegow, ze byloby fajnie gdybysmy napisali prog, ktory przeksztalcalby liczbe binarna na dziesietna...Jednak zadanie to, jak sie okazalo, przerasta nasze sily, wiec szukamy pomocy tutaj..
Czy ktokolwiek bylby zdolny nam pomoc? Ogromnie wdzieczni bysmy byli za pomoc w rozwiazaniu tego problemu..

29-11-2003 17:33
Pokaż profil reaz  Wyślij email do reaz   
Strength




Typ: neutral
Postów: 26
Zarejestrowany: Oct 2003

coz... wydaje mi sie, ze jest cos takiego od razu w vb.
kiedys napisalem cos takiego w asmie:

.model tiny
.code
org 100h
start:

        mov ah, 09h
        lea dx, EnterMsg
        int 21h
        lea dx, Buff            ; do dx wrzuc adres bufora na znaki do pobrania
        mov ah, 0Ah            ; f. pobierajaca ciag znakow
  int 21h        ; wywolaj przerwanie
  call bin2dec      ; przekonwertuj ciag znakow
  int 20h                ; zakoncz proga

bin2dec:

        lea di, Buff+2          ;\
        _loop:                  ; \
        cmp byte ptr[di], 0dh  ;  \
        je _continue            ;  \
        cmp byte ptr[di], 31h  ;    \ ta petla wywala z poczatku
        ja _bad                ;    / na koniec stringa sprawdzajac
        cmp byte ptr[di], 30h  ;  /  przy okazji czy user nie wpisal
        jb _bad                ;  /  znakow innych od '1' i '0'
        inc di                  ; /
        jmp _loop              ;/
       
        _continue:

        xor dx, dx              ; w dx bedzie liczba w hexach (later sie ja zamieni na dec
        mov bx, 1              ; w bx bedzie 'mnoznik [taki jak jest w gta ;]'

        _loop2:
        dec di
        cmp byte ptr[di], 31h  ; czy aktualny znak to '1'
        jne _checkagain
        add dx, bx
        jmp _checkagain
        _checkagain:
        cmp byte ptr[di], 0ffh  ; czy 'ff' (dla nas znaczy to, ze to koniec
        je _checkdone
        shl bx, 1              ; to mnozy bx (czyli mnoznik przez 2)
        jmp _loop2
        _checkdone:

        push dx

        call clearbuff

        mov ax, dx
        lea di, Buff+2
        lea si, Buff+256

        mov cx, 10              ;\
        mov bx, 10              ; \
                                ;  \
        _convloop:              ;  \
        cmp byte ptr[si], 0ffh  ;    \
        je _koniec              ;    \ konwertuje hex-->dec
        xor dx, dx              ;      procka napisana przez shield'a
        div bx                  ;    / sa tylko malutkie zmiany
        add dl, 30h            ;    /
        mov byte ptr[si], dl    ;  /
        dec si                  ;  /
        jnz _convloop          ; /
                                ;/
        _koniec:               


        mov ax, dx              ;\
        lea di, Buff+2          ; \
                                ;  \
        _convloop2:            ;  \
        mov dl, [di]            ;    \
        cmp dl, '0'            ;    \  'naprawianie liczby dec'
        jne _write              ;      \  tzn. np: 0021 po naprawianiu ma 21
                                ;      /
        sub dl, '0'            ;    /
        mov [di], dl            ;    /
        inc di                  ;  /
        jmp _convloop2          ;  /
                                ; /
        _write:                ;/

        mov ah, 09h
        mov dx, offset LiczbaDec
        int 21h

        mov ah, 09h
        mov dx, offset di
        int 21h
        pop ax

        jmp _end

        _bad:
        mov ah, 09h
        lea dx, BadMsg
        int 21h

        _end:
        ret

        clearbuff:              ;\
        lea di, Buff+2          ; \
        _clearloop:            ;  \
        cmp byte ptr[di], 0    ;  \  po tym callu buff sie czysci ;]
        je _nieczyscjuz        ;    \ tzn. wyglada: 0ffh,0,0,0,0,0,0...
        mov byte ptr[di], 0    ;    /
        inc di                  ;  /
        jmp _clearloop          ;  /
        _nieczyscjuz:          ; /
        ret                    ;/

        Buff            db 0FFh
                        db 256 dup (0)
                        db '$'
        BadMsg          db 13,10,'podana liczba nie jest liczba binarna! wpisz np: 1010110$'
        EnterMsg        db 'wpisz liczbe binarna:',13,10,'$'
        LiczbaDec      db 13,10,'liczba decymalna:',13,10,'$'
end start

banalnie prosto to mozna przelozyc na vb... sa komentarze wiec chyba problemu nie bedzie
jak bedziecie chcieli to przeloze ;]


_____________________________________________

www.strength.prv.pl

29-11-2003 17:47
Pokaż profil Strength  Wyślij email do Strength   Odwiedź stronę Strength       2037723
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

dobrze zrozumialem liczbe binarna(system dwojkowy czyli zera i jedynki) jesli tak to nie wiem w czym problem
bo ogolnie jest taki wzor
a*2^n + ... + b*2^2+c*2^1+d*2^0 = daje syttem dziesietny

w vb mozna zrobic to tak:

dim bin as string
dim dzies as long

b= "0101011"

for a= len(bin) to 0 step -1
  dzies = dzies + (int(mid(bin,a,1))*(2^(len(bin)-a)))
next a

mozliwe ze zamiast  len(b) powinno byc len(bin)-1 a zamiast zera, jedynka. A to dlatego bo nie mam gdzie tego sprawdzic

30-11-2003 18:12
Pokaż profil kicaj  Wyślij email do kicaj        3914568
mailover




Typ: neutral
Postów: 40
Zarejestrowany: Mar 2003

Sprawdzone i działa
'Zmienne
Dim intA As Integer
Dim intB As Integer
Dim strA As String
'Sprawdzona procedura
For intB = Len(strA) To 1 Step -1
intA = intA + (Int(Mid(strA, intB, 1)) * (2 ^ (Len(strA) - intB)))
strA = Mid(strA, intB, 1)

03-12-2003 12:53
Pokaż profil mailover  Wyślij email do mailover   
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

W druga strone powinno byc chyba latwiej:

Dim dziesietna As Integer
Dim binarna As String
dziesietna=35
Do
  binarna = (dziesietna Mod 2) & binarna
  dziesietna = dziesietna \ 2
Loop While (dziesietna <> 0)

03-12-2003 21:59
Pokaż profil kicaj  Wyślij email do kicaj        3914568
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003
,

ja juz napisalem takiego proga. Oprocz przeksztalcania liczby dziesietnej na binarna, ma tez mozliwosc przeksztalcania kodu bimnarnego-->dziesietny. Poza tym potrafi ciag znakow przedstawic jako kod binarny


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

05-12-2003 16:22
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Sam też napisałem programik (ale to było dawno i nieprawda ) przekształcający liczby zapisane w "każdym" systemie tzn np z dwójkowego na czwórkowy, z ósemkowego na szesnastkowy itd Ale właśnie ciekawiło mnie zapisanie ciągu znaków w systemie dwójkowym (binarnym). Jak oddzielasz poszczególne znaki? Bo zasadniczo nie ma problemu w przekszttałcenie znaku na binarke bo kazdy znak to przecież liczby w ascii...

Mikmas napisz tu albo podeślij mi tego swojego proga. Dzięks


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

05-12-2003 18:39
Pokaż profil m-a-x  Wyślij email do m-a-x   
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

Sorry ze sie wtracam, ale jasli dobrze rozumiem chcesz zamienic np 1010101001010101010010101010
na znaki ??
Bo jesli tak to poprostu wyciagaj liczac od konca grupy osmiu znakow i zamien to na dziesiatene a potem na ASCII.

06-12-2003 17:09
Pokaż profil kicaj  Wyślij email do kicaj        3914568
Wszystkich odpowiedzi: 7 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1