Tüm İhtimalleri Bulma

Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Herkese Selam,

İhtiyaç duyduğum bir konuda aşağıda anlatacağım husus hakkında bir kod geliştirmem gerekti ve birkaç değişik alternatif ile sorunumu çözdüm.

Sonra bu konunun Kod Geliştirme Açısından güzel bir konu olduğunu, Beyin Fırtınası açısından iyi bir örnek teşkil ettiği kanaatine nayil olup, tarafınıza yayınlamayı uygun buldum.

Soru şu'dur;

3 Haneli, 1 – 2 – A karakterlerinden oluşan bir Metinsel İfadenin alabileceği değerler.

1 1 1
1 1 2
1 1 A
1 2 1
1 2 2
1 2 A
1 A 1
1 A 2
1 A A
2 1 1
2 1 2
2 1 A
2 2 1
2 2 2
2 2 A
2 A 1
2 A 2
2 A A
A 1 1
A 1 2
A 1 A
A 2 1
A 2 2
A 2 A
A A 1
A A 2
A A A

Yukarıdaki gibi olup toplam 27 tanedir.

Örneğin toplam uzunluğu 6 Haneli, Herhangi Bir Harf Ya da Sayılardan oluşan bir Metinsel İfadenin Alabileceği Değerleri bulan Kod (yada fonksiyon) alternatifleri nelerdir?

Herkese iyi çalışmalar.
 
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Tufan Bey,

Benim ihtiyaç duyduğum konu da bu olmuştu. Maalesef şifre kırma konusu sitede yasaklı konulardan. O yüzden ona yakın bir örnek ve çözüm önerisi veremiyeceğim. Ama yukarıdaki gibi bir sorunun bir sakıncası yok diye düşünüyorum arkadaşlar önerilerini verince bende çözüm alternatifimi söyleyeceğim.

Kendim, şifreli bir excel dosyasına girmek için; internetten Şifre Kırma Dosyası araştırırken, bu dosyalarda en büyük sorunun, güvenilir olmayan sitenelerde yayınlanması oldu. Sonra düşündüm, Neden kendi şifre kırma Kodu Mu yazmıyorum? diye

ve çok güzel bir kod yazdım. Maalesef site prensipleri açısından yayınlayamıyorum.
Ne yazıkkı Hırsızlık yasaklanırken maalesef Çilingirlik de yasaklanıyor doğal olarak.

Ama can alıcı kısmı Tüm İhtimaller Nasıl bulunur? bu konuda Beyin Cimnastiği yapmak istedim.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,056
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn xxcell

İyi niyetli amaçlar için bir çalışma yaptığınızdan hiç şüphem yok. Ancak şifre kırma gibi konulara kurallarımız gereği izin vermiyoruz. Ancak yukarıdaki gibi temeli matematiğe dayanan başlıkları elbette açabilirsiniz.
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,469
Excel Vers. ve Dili
Office 2010 & 2013 tr
Selamlar,
6'lı döngü kullanarak bir çözüm ürettim.
Kod:
Sub dene()
Sat = 1
    For x = 1 To 6
        For y = 1 To 6
            For z = 1 To 6
                For q = 1 To 6
                    For w = 1 To 6
                        For r = 1 To 6
                        Cells(Sat, "h") = Cells(1, x) & Cells(1, y) & Cells(1, z) & Cells(1, q) & Cells(1, w) & Cells(1, r)
                        Sat = Sat + 1
                        Next
                    Next
                Next
            Next
        Next
    Next
End Sub
Hane sayısı arttığında, döngüyü sayıya göre artırmanız gerekir veya sayı azalıyorsa azaltmalısınız.
 

Ekli dosyalar

Son düzenleme:
Katılım
25 Nisan 2007
Mesajlar
459
Excel Vers. ve Dili
2007
Matematik'te Basamak Kavramını kullanarak Tüm İhtimalleri Bulma

Onluk Sayı sisteminde Örn. 1.000 ile 1.500 arasındaki tüm sayıları bulmak için
sayıları birer arttırırız. Bu işlemin Algoritması şöyle ilerler

a) en son hane Olabilecek Maximum Karaktere gelinceye kadar bir arttır

1000
1001
1002
1003
1004
1005
1006
1007
1008
1009

Son hane olabilecek En yüksek ihtimale gediğinde, Ondan önceki karakteri bir arttır ve arttırdığın karakterden sonraki tüm karakterleri sıfır (0) yap

yani 1010 yap

ve döngüyü başa al. Yani son hane 9 oluncaya kadar döndür, ve yine son hane en yüksek ihtimale geldiğinde, ondan önceki karakteri bir arttır ve arttırdığın karakterden sonraki tüm karakteri minimum karakter yap ve döngüyü tekrar başa al.

bu şekilde

1099 sayısına ulaşınca, Son hane 9 olduğu için bir önceki hane'ye bakıyor ve o da olabilecek en yüksek değeri aldığı için ondan bir öncekine bakıyor ve eğer o en yüksek değer değilse o haneyi bir arttırıp ondan sonraki tüm haneleri sıfırlıyor ve yine son haneyi arttırma işlemini yapıyor.

Matematikte Onluk, Onaltılık, ikilik veya tüm sayı sistemlerinde arttırma bu şekilde yapılır.

Sayının alabileceği tüm ihttimaller Her hane (digit) için olabilecek ihtimallerin çarpınıa eşittir, yukarıda 4 dijit söz konusu ve 9 x 6 x 10 x 10 = 5.400 adet ihtimal var. (1 nci hane 1 ile 9 , 2 nci hane 0 ile 6 diğer haneler 0 ile 9 arası değerler alıyor)

Bende bu kavramı temel alarak Şifreyi bir arttır şeklinde bir döngü kurdum istenilen örneğe uyarlanmış ekteki öneği geliştirdim.

Benim örneğim A - Z arası harfleri, a - z arası harfleri, 0 - 9 arası sayılarını kapsıyor. Bu kapsamı belirten en kestirme yol, Ascıı kod sayfasındaki 48 ile 122 nci karakterler arasıdır. Asc(48) SIFIR karakteridir. Asc(122) küçük z harfidir.

Yani benim örneğim için her hane 75 değişik değer alabilir, 6 hane için
75 x 75 x 75 x 75 x 75 x 75 = 1,78E+11 adet ihtimal vardır.

Ben bu ihtmallere şifre kırmak için ulaşmıştım. Makinenin her ihtimali teker teker denerek şifre kırması bu yüzden biraz zaman alabilir.

Aşağıdaki fonksiyon; Minimum karakteri ve Maximum Karakteri bellirli bir şifreden sonra gelecek şifreyi üretir.

Kod:
Function SonrakiSifre(sifre As String, MinimumKarakter As Integer, MaximumKarakter As Integer)
Dim DerlenenDigit As Integer
DerlenenDigit = Len(sifre)

Do While DerlenenDigit > 0
If Asc(Mid(sifre, DerlenenDigit, 1)) >= MaximumKarakter Then DerlenenDigit = DerlenenDigit - 1 Else Exit Do
Loop

SifreUzunlugu = Len(sifre)

If DerlenenDigit > 0 Then
    sifre = Left(sifre, DerlenenDigit - 1) & Chr(Asc(Mid(sifre, DerlenenDigit)) + 1)
    Do While Len(sifre) < SifreUzunlugu
    sifre = sifre & Chr(MinimumKarakter)
    Loop
Else
    sifre = ""
    For n = 1 To SifreUzunlugu + 1
    sifre = sifre & Chr(MinimumKarakter)
    Next
End If

SonrakiSifre = sifre

End Function
Bu fonksiyon yardımıyla basit bir döngü kurarak olabilecek tüm ihtimaller excel sayfasına alalım, BEKLEMEKTEN SIKILDIĞINIZDA KODU DEBUG YAPINIZ

Kod:
Sub SifreBul()
Dim sifre As String

sifre = "000000"
satir = 1
sutun = 1

Do

sifre = SonrakiSifre(sifre, Asc("0"), Asc("z"))

Cells(satir, sutun) = sifre

satir = satir + 1
If satir = 65536 Then
satir = 1
sutun = sutun + 1
End If

Loop

End Sub
 
Katılım
10 Temmuz 2009
Mesajlar
1
Excel Vers. ve Dili
office 2003 - türkçe
SifreyiBul isimli makroyu çalıştırınız diyor nasıl gerçekleştireceğiz bunu
 
Katılım
16 Ağustos 2004
Mesajlar
137
Excel Vers. ve Dili
Office 2010 En 64 Bit
Araçlar > Makro > Makrolar'a gelin ve Açılan Penceredeki SifreBul yazısına çift tıklayın.
 

baydeniro

Altın Üye
Katılım
26 Ocak 2007
Mesajlar
4,625
Excel Vers. ve Dili
Ofis 2016
Altın Üyelik Bitiş Tarihi
20-02-2025
Çok teşekkürler. İlginç bir çalışma
 
Katılım
29 Ocak 2010
Mesajlar
4
Excel Vers. ve Dili
2003 türkçe
güvenlik ayarlarını en düşük moda almama rağmen güvenlik hatası verdi neden yapabilir
 
Katılım
19 Eylül 2008
Mesajlar
6
Excel Vers. ve Dili
2007 enterprise
3 haneli

Herkese Selam,

İhtiyaç duyduğum bir konuda aşağıda anlatacağım husus hakkında bir kod geliştirmem gerekti ve birkaç değişik alternatif ile sorunumu çözdüm.

Sonra bu konunun Kod Geliştirme Açısından güzel bir konu olduğunu, Beyin Fırtınası açısından iyi bir örnek teşkil ettiği kanaatine nayil olup, tarafınıza yayınlamayı uygun buldum.

Soru şu'dur;

3 Haneli, 1 – 2 – A karakterlerinden oluşan bir Metinsel İfadenin alabileceği değerler.

1 1 1
1 1 2
1 1 A
1 2 1
1 2 2
1 2 A
1 A 1
1 A 2
1 A A
2 1 1
2 1 2
2 1 A
2 2 1
2 2 2
2 2 A
2 A 1
2 A 2
2 A A
A 1 1
A 1 2
A 1 A
A 2 1
A 2 2
A 2 A
A A 1
A A 2
A A A

Yukarıdaki gibi olup toplam 27 tanedir.

Örneğin toplam uzunluğu 6 Haneli, Herhangi Bir Harf Ya da Sayılardan oluşan bir Metinsel İfadenin Alabileceği Değerleri bulan Kod (yada fonksiyon) alternatifleri nelerdir?

Herkese iyi çalışmalar.



Makro yazmaya yeni başlayan biri olarak 3 haneli sorunun cevabını ekte gönderiyorum.
6 haneli için de bir çalışma yapacağım.

İyi çalışmalar herkese.

Dosya eklemede bir problem olmuştur.



Sub deneme()
Dim a
Dim b
Dim c


For a = 1 To 3
For b = 1 To 3
For c = 1 To 3



If (a = 3) And (b = c) And (c = 3) Then
a = "A"
b = "A"
c = "A"

ElseIf (a = 3) And (b = 3) Then
a = "A"
b = "A"
ElseIf (b = 3) And (c = 3) Then
b = "A"
c = "A"
ElseIf (a = 3) And (c = 3) Then
a = "A"
c = "A"

ElseIf a = 3 Then
a = "A"

ElseIf b = 3 Then
b = "A"

ElseIf c = 3 Then
c = "A"
End If
abc = a & b & c

MsgBox abc

If (a = "A") And (b = "A") And (c = "A") Then

a = 3
b = 3
c = 3


ElseIf (a = "A") And (b = "A") Then
a = 3
b = 3

ElseIf (b = "A") And (c = "A") Then
b = 3
c = 3

ElseIf (a = "A") And (c = "A") Then
a = 3

c = 3

ElseIf a = "A" Then
a = 3

ElseIf b = "A" Then
b = 3

ElseIf c = "A" Then
c = 3
End If



Next
Next
Next


End Sub
 
Son düzenleme:
Katılım
9 Aralık 2012
Mesajlar
3
Excel Vers. ve Dili
2003 türkçe
Selam herkese ;

MANTIĞININ BENZER OLACAĞINI DÜŞÜNDÜĞÜM,
BİR PROBLEMİM VAR

elimde
75,80,100,120,150 sayıları var,

bu sayılar ile 1200 rakamına ulaşmak istiyorum.

En fazla 11 sayı kullanmak zorundayım.

Her sayıyı birden fazla kullanabilirim (en fazla 11)

bu sayıları örnek olarak verdim .. Amac mantığını kavramak

bana bu sayılarla sonuca ulaşılacak tüm kombinasyonları verebilecek bir makro nasıl yazılabilir?
 

Ekli dosyalar

Üst