Tüm Versiyonu Göster : 10 luk sayı sisteminden 2-3-4... sayı sistemlerine geçiş
uzmanamele
24-01-2008, 14:17
merhaba
10 luk sayı sisteminde yazdığımız bir sayıyı 2-3-4-5-6-7-8-9... sayı sistemlerine dönüştürecek, yerleşik fonksiyonlarla formül kurulabilir mi?
merhaba
10 luk sayı sisteminde yazdığımız bir sayıyı 2-3-4-5-6-7-8-9... sayı sistemlerine dönüştürecek, yerleşik fonksiyonlarla formül kurulabilir mi?
=DEC2BIN(a1)
=DEC2BIN(500)
gibi.
..
uzmanamele
24-01-2008, 15:09
merhaba
10 luk sistemden 2lik sisteme geçebiliyoruz, ya 3-4-5... sayı sistemlerine?
Burada anafikrini anlatmaya çalışmışlar...
http://www.arkasokak.net/arsiv/t-31180.html
Levent Menteşoğlu
24-01-2008, 15:14
Diğer sayı sistemlerine dönüştürme amaçlı bir dosya hazırladım inceleyin. 8'lik ve 16'lık sayı sistemlerinde harfte kullanıldığından dosyada bu dikkate alınmamıştır. Bu iki sistem için zaten Toolpak eklentisinin yüklenmesi kaydıyla hazır fonksiyonlar mevcuttur.
2'lik için =DEC2BIN(.....)
8'lik için =DEC22HEX(....)
16'lık için =DEC2OCT(....)
Not: Toolpak çözümleyicisi yüklü ve işaretli olmalıdır.
Aşağıdaki kullanıcı tanımlı fonksiyon 2'lik sayı içindir. Ancak;
renklendirdiğim yerleri istedeğiniz sistem için değiştirmeniz yeterlidir.
Function D2B(ByVal n As Long) As String
n = Abs(n)
D2B = ""
Do While n > 0
If n = (n \ 2) * 2 Then
D2B = "0" & D2B
Else
D2B = "1" & D2B
n = n - 1
End If
n = n / 2
Loop
End Function
Örneğin 3'lü sistem için bu kodlar:
Function D3B(ByVal n As Long) As String
n = Abs(n)
D3B = ""
Do While n > 0
If n = (n \ 3) * 3 Then
D3B = "0" & D3B
Else
D3B = "1" & D3B
n = n - 1
End If
n = n / 3
Loop
End Function
şeklinde değiştirerek istediğiniz şekilde bu türde fonksiyonlar üretmeniz mümkün.
Fonksiyonun söz dizimi:
=D2B(sayı)
..
uzmanamele
24-01-2008, 15:38
merhaba
syn Yurttaş, syn Leventm, syn Haluk
ilginize teşekkür ederim.
Merhaba;
Yukarıdaki dokümandan yararlanarak, ekte örnek olarak 4'lük ve 8'lik tabanlı sayıların 10'luk tabandaki değerleri yerleşik fonksiyonlarla bulunmuştur.
.
Ekteki biraz daha genel kullanım amaçlı oldu .....
.
lewent27
18-12-2009, 22:54
mantık guzel ama yanlıslıklar var 2 lik taban 0 ve 1 lerden olusur ama 3,4,5,6... sadece bunlardan olusmaz fonksıyon 2 lık taban ıcın dogrudur ama dıgerlerınde hatalı sonuc vercektır.
Arkadaşlar,
Bir fonksiyon yazdım. Lütfen kontrol edin.
Access uygulamasını da ekliyorum.
Herkese iyi çalışmalar.
Public Function sayi_cevir(onluk As Integer, sistem As Byte) As String
Dim a As Integer, x As Integer
a = 100
ReDim yeni(a) As String
Do While onluk > sistem
a = a - 1
yeni(a) = onluk Mod sistem
onluk = onluk \ sistem
Loop
yeni(a - 1) = onluk
For x = 0 To 99
sayi_cevir = sayi_cevir & yeni(x)
Next x
End Function
Arkadaşlar,
Levent Beyin uyarısıyla gözden kaçan bir noktayı düzelttim:
Public Function sayi_cevir(onluk As Integer, sistem As Byte) As String
Dim a As Integer, x As Integer
a = 100
ReDim yeni(a) As String
Do While onluk >= sistem
a = a - 1
yeni(a) = onluk Mod sistem
onluk = onluk \ sistem
Loop
yeni(a - 1) = onluk
For x = 0 To 99
sayi_cevir = sayi_cevir & yeni(x)
Next x
End Function
Bölme işllemi, sayı sisteme eşit olduğu zaman da devam etmeli. bu yüzden araya bir = eklenmesi gerekiyor.
İyi çalışmalar
İş tam olsun diye ters fonksiyonu da yazdım.
Public Function onluk_sistem(sayi As String, sistem As Byte) As Double
Dim a As Integer
a = Len(Trim(sayi))
For x = a To 1 Step -1
If CDbl(Mid(sayi, x, 1)) >= sistem Then
MsgBox sistem & " lik sayı sistemnide " & sistem - 1 & " den büyük rakkam kullanılamaz! ", vbCritical, "UYARI"
onluk_sistem = 0
Exit Function
End If
onluk_sistem = onluk_sistem + CDbl(Mid(sayi, x, 1)) * sistem ^ (a - x)
Next x
End FunctionYine de kontrol edilmesi gerekir.
İyi çalışmalar
ellerine saglık güzel olmuş
vBulletin v3.7.2, Copyright ©2000-2012, Jelsoft Enterprises Ltd.