N
NeStLe
Guest
Açıklama : Dolu tanesi sayıları olarak da bilinen problem, girilecek bir pozitif tamsayı ile başlayan bir sayı dizisi oluşturmaya dayanır. Dizinin her bir elemanı, bir önceki sayı kullanılarak şu kural dahilinde hesaplanır: Eğer sayı çift ise bir sonraki sayı bu sayının yarısı, tek ise üç katının bir fazlası olacaktır. Böylece ilk sayısı verilen bir sayı dizisi oluşturulur.
Örneğin, ilk sayı 7 ise dizi şu şekilde oluşacaktır:
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1,...
Ya da ilk sayı 21 ise,
21, 64, 32, 16, 8, 4, 2, 1, ...
Görüldüğü gibi dizi 1 sayısına ulaştığı anda sonsuz döngüye girmektedir. Aslında
başlangıç sayısı olarak ne girersek girelim dizi her zaman 1 sayısına ulaşmaktadır,
ama bu durum henüz matematiksel olarak kanıtlanamamıştır...
Public Class Form1
Dim sayi, sayac, enbuyuk As Long
Private Sub btnbaslat_Click ( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles btnbaslat.Click
sayi = txtsayi.Text
lstdizi.Items.Clear()
sayac = 0
enbuyuk = 0
Do
lstdizi.Items.Add(sayi)
If sayi Mod 2 = 0 Then ‘Sayı çift ise.
sayi = sayi / 2
Else ‘Sayı tek ise.
sayi = sayi * 3 + 1
End If
sayac = sayac + 1
If sayi > enbuyuk Then enbuyuk = sayi ‘Sayı enbuyuk’ten daha büyük ise yeni enbuyuk değeri sayi olsun.
Loop Until sayi = 1
lstdizi.Items.Add(1)
lbladimsayisi.Text = sayac + 1
lblenbuyuk.Text = enbuyuk
End Sub
End Class
Örneğin, ilk sayı 7 ise dizi şu şekilde oluşacaktır:
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1,...
Ya da ilk sayı 21 ise,
21, 64, 32, 16, 8, 4, 2, 1, ...
Görüldüğü gibi dizi 1 sayısına ulaştığı anda sonsuz döngüye girmektedir. Aslında
başlangıç sayısı olarak ne girersek girelim dizi her zaman 1 sayısına ulaşmaktadır,
ama bu durum henüz matematiksel olarak kanıtlanamamıştır...

Public Class Form1
Dim sayi, sayac, enbuyuk As Long
Private Sub btnbaslat_Click ( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles btnbaslat.Click
sayi = txtsayi.Text
lstdizi.Items.Clear()
sayac = 0
enbuyuk = 0
Do
lstdizi.Items.Add(sayi)
If sayi Mod 2 = 0 Then ‘Sayı çift ise.
sayi = sayi / 2
Else ‘Sayı tek ise.
sayi = sayi * 3 + 1
End If
sayac = sayac + 1
If sayi > enbuyuk Then enbuyuk = sayi ‘Sayı enbuyuk’ten daha büyük ise yeni enbuyuk değeri sayi olsun.
Loop Until sayi = 1
lstdizi.Items.Add(1)
lbladimsayisi.Text = sayac + 1
lblenbuyuk.Text = enbuyuk
End Sub
End Class
Hata gördüğünüz takdirde bildirirseniz sevinirim. Tekrar dönüp kodlara bakıp düzenlerim..