Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 00:14:21 - Stefan Sundin, i forum visual basic - allmänt, Tråden har 9 Kommentarer och lästs av 460 personer

Jag har gjort en rekursiv funktion för att omvandla decimal- till binär notation
Den fungerar men bara till 290 sedan blir det fel
Koden ser ut så här:

'Public Function BIN(z As Long)

'If z > 0 Then
' txtRuta.Text = ""

' BIN (z / 2)
' txtRuta.Text = txtRuta.Text & (z Mod 2)
'End If

'End Function

dec 290 ger 100100010
MEN 291 ger 100100101 istället för 100100011

Begriper inte varför ?
Koden borde väl funka eller inte funka- inte funka ett tag??


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 00:35:37 - Pelle Johansson

Exempel:

<code>
Public Function dec2bin(mynum As Variant) As String
Dim loopcounter As Integer
If mynum >= 2 ^ 31 Then
dec2bin = "För stor"
Exit Function
End If

Do
If (mynum And 2 ^ loopcounter) = 2 ^ loopcounter Then
dec2bin = "1" & dec2bin
Else
dec2bin = "0" & dec2bin
End If

loopcounter = loopcounter + 1
Loop Until 2 ^ loopcounter > mynum

End Function

Public Function Bin2Dec(iBin As String) As Integer

For i = 0 To Len(iBin) - 1
iTempTal = 0
iTempTal = Int(Mid(iBin, Len(iBin) - i, 1)) * 2 ^ i
iTal = iTal + iTempTal
Next i

Bin2Dec = iTal

End Function
</code>


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 07:07:11 - Sven Åke Persson

Hej
Förbaskat smart lösning.Den var inte dålig, snacka om optimering.
Den åkte i godislådan direkt.

Option Explicit
Private Sub Command1_Click()
Label1.Caption = ""
Call BIN(291)
MsgBox "Klar"
End Sub

Private Sub BIN(ByVal z As Long)
If z > 0 Then
Call BIN (z \ 2) 'rekursivt anrop
Label1.Caption = Label1.Caption & CStr((z Mod 2))
End If
End Sub

Kan någon förklara hur det kommer sig att Subrutinen hoppar ur det
rekursiva anropet, jag förstår det inte.

/Sven


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 10:06:12 - Anders Drevin

Så småningom blir z = 1.

z \ 2 ger bara heltalsdelen och den är då 0, z är inte längre > 0 och den "hoppar ur".

Anders


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 10:23:22 - Sven Åke Persson

Hej
Oki på detta, kom på det själv efter ett tag.
Till Sundin anledningen till att din lösning inte blev rätt är
att du gör flyttalsdivision ' BIN (z / 2)
Skall vara heltalsdivision Call BIN (z \ 2) 'rekursivt anrop.

dvs ibland blev din division x,5 då höjdes talet till närmaste högre heltal.

Så här blir det omvända hållet

Option Explicit
Private Sub Command1_Click()
Dim bitStr As String
bitStr = Text1.Text ' "100100011"
Label1.Caption = BitConvert(bitStr)
End Sub

Private Function BitConvert(ByVal bitStr As String) As String
Dim i As Long, sLen As Long, tmpStr As String
Dim bitSum As Long
tmpStr = StrReverse(bitStr)
sLen = Len(tmpStr)
For i = 1 To sLen
If Mid$(tmpStr, i, 1) = "1" Then
bitSum = bitSum + 2 ^ i
End If
BitConvert = CStr(bitSum \ 2)
Next 'i
End Function

/Sven


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 15:53:30 - Stefan Sundin

OK
Tack till er alla för snabba svar!
Sundin


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 16:45:45 - Pontus Wång

En liten optimering är väl på sin plats?

<code>
Public Function dec2bin(mynum As Variant) As String
Dim loopcounter As Integer
If mynum >= 2 ^ 31 Then
dec2bin = "För stor"
Exit Function
End If

For loopcounter = 31 to 1 step -1
If cbool(mynum And 2 ^ loopcounter) Then
dec2bin = "1" & dec2bin
Else
dec2bin = "0" & dec2bin
End If
Next loopcounter
'Negativa tal hade ni missat helt
if mynum < 0 then
dec2bin = "1" & dec2bin
end if
End Function

Public Function Bin2Dec(iBin As String) As Integer
For i = 0 To Len(iBin) - 1
Bin2Dec = Bin2Dec + (Int(Mid(iBin, Len(iBin) - i, 1)) * 2 ^ i)
Next i
If left(iBin,1) = "1" and len(ibin) = 32 then
Bin2Dec = Bin2Dec * -1
End if
End Function
</code>


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 16:49:35 - Sven Åke Persson

~~ Tänker höll på att göra bort mig Igen :-)
DS


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-10 17:12:30 - Pontus Wång

Jag tror inte du tänkte göra bort dig, såg lite fel, negativa binära tal representeras inte som jag har kodat och jag orkar inte fixa det nu :-/


Svara

Sv: Rekursiv funktion för binär representation PROBLEM

Postades av 2003-02-12 11:17:08 - Roger Alsing

här är min icke rekursiva version

<code>

Private Function GetBin(tal As Long)
Dim i As Long
Dim s As String
For i = 0 To 30
s = IIf((tal And (2 ^ i)), "1", "0") & s
Next
GetBin = s
End Function

</code>

//Roger


[edit]
oj , trash , såg inte din version..
[/edit]



Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 169
27 953
271 705
998
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies