

Visual Basicde 4Üncü Sayıyı Bulan Kod?
-
yok haci uzun uzaya gelmez oyle asiri uzun cikar hoca kufur eder amk :)...daha iyi bilen bir arkadas bakabilir....matematik az kuvvetli olsa cozeriz :)...amk egitim hayatimiz boyunca kesir sadelestirmesi gorduk faktoriyeli 1 ay falan gosterdiler :))...neyse temiz hava alayim bira kafa acilir belki.
-
Sabahın bu saatinde syntax dikkat etmeden en kolay ama uzun süren yoldan direkt algoritmasını yazıyorum.
1. 1 den 50000 kadar genel bir döngü başlat (For A=145 to 50000 .....next) (mesela : A=562 değerini alsın.)
2. A sayısının(562) kaç edet rakamdan oluştunu hesaplatmak için değeri string(CStr) e çevir.Sonra Len fonk. ile kaç basamaklı olduğunu bul.
len(CStr(A)) = 3 basamaklı
buna Y değeri ata Y=len(CStr(A))=3
3. basamak sayısı kadar yine döngü oluştur(for k=1 to Y ...next ile) sonra mid gibi bir fonk. her rakamı tek tek al ve faktöryelini bulup topla, faktöryel hesabını için ayrı bir recursive fonks. tanımla.
Y=3 (basamaklı sayı)
k=1 ... için mid(A,k,1) 5 olacak.. değeri faktöryel fonks. gönder ve 5! değerini bul
k=2 ....için mid(A,k,1) 6 olacak ..değeri faktöryel fonks. gönder ve 6! değerini bul
k=3 ... için mid(A,k,1) 2 olacak ..değeri faktöryel fonks. gönder ve 2! değerini bul
4.bulduğun sonuçları topla (5!+6!+2!) ve T gibi bir değişkene ata.
5.şimdi bulduğun T değeri ile A değeri aynı mı bak(IF THEN....). T = A ise tamam Sonuçu label a yazdır."Exit For" ile çıkış yap.
6.Eşit değil ise (else) boqu yedin, başa dön, counter bir artar. bu sefer A=563 oldu...
Bu işlem çok uzun sürer ve sayılar çok büyük olduğu için VB de double falan hak getire, kendi değişken tipinizi tanımlamanız lazım.Hız için multi threaded kullanmanız gerekecek, tabii vb de zor.C++ da yazmakda bunun için kasmaya deymez.Anlamayan varsa msnde anlatmaya çalışırım.
Bu arada herkesin anneler günü kutlu olsun.
-
sagol dai bekliyordum cukurova cozse diye ama bizde dogru karar vermisiz kalas bir soru ;)
-
Elinize,beyninize sağlık arkadaşlar.Cukurova ve computerwolf toprağımın dediği gibi şöyle bir cevab yayınlamışlar.Belki merak eden olmuştur diye buraya aktarıyorum.
Private Sub Command1_Click()
Dim p As Double, w As Double, s As Double, z As Double, l As Double
Dim q As Double, f As Double
Text1.Text = ""
For p = 0 To 9
For w = 0 To 9
For s = 0 To 9
For z = 0 To 9
For l = 0 To 9
q = Fact(p) + Fact(w) + Fact(s) + Fact(z) + Fact(l)
f = ((10000 * p) + (1000 * w) + (100 * s) + (10 * z) + (l))
If (q = f) Then
Text1.Text = Val(q)
End If
Next
Next
Next
Next
Next
End Sub
Private Function Fact(c As Double) As Double
If c <= 1 Then
Fact = 1
Else
Fact = c * Fact(c - 1)
End If
End Function
-
ee cevap ne ? :D
-
bulmuşlardı ya 40585 :))
cukurova hocam dehşet yaa.Harbi anlamadığı,yapamadı şey yok -
matematikden anlasam bende yapardım :)
Toplam Hit: 6076 Toplam Mesaj: 28