Microsoft Word
Beğen (0)

Word VBA ile Süper Lig Uygulaması – Bölüm 3: Dinamik Olarak Kuraların Çekilmesi

Uygulamaya ait örnek dosyayı buradan indirebilirsiniz.

Mini süper ligimize ait takımların kurada hangi sırada olacağını bir önceki makalemizde belirlemiştik. Bu makalemizde kura çekimine geçebiliriz artık. 

b) Kuraların çekilmesi

Geldik en önemli bölüme. Kuralar nasıl çekilecek. Öncelikle kaç hafta maç oynanacağını bulmaya çalışalım. Bizim belirlediğimiz takım sayısı 4. Buna n diyelim. 

Birinci yarı maç sayısı n - 1 yani 4 - 1 = 3 hafta olacaktır. İkinci yarı da aynı maç oynanacağına göre, 2 * (n - 1) toplam maç sayısını bulmamızı sağlayacaktır.  

Peki her hafta kaç maç oynanacak. Bir maç için 2 takıma ihtiyaç olduğuna n / 2 toplam maç sayısını bize verecektir. Buna göre her hafta 2 maç oynanacaktır. Buna göre birinci yarıda 3 * 2 = 6 maç oynanacaktır.

Geldik takımları eşleştirmeye. Burada kümeler konusundan yararlanacağız. Yukarıda verilen takimlar kümesi 4 elemanlı olduğuna göre, bunun 2 elemanlı alt kümeleri bizim kura çekimimizi oluşturacaktır. K(4,2) küme eleman sayısı 6 olduğuna göre bu da bizim ilk yarı maç sayısını vermektedir. Bu alt kümeyi oluşturmak için ikilik sayı sisteminden yararlanacağız. Seçilen takımlara 1, seçilmeyen takımlara ise 0 verdiğimizde ikili alt kümeleri bulmuş olacağız.

Bunu örneklendirmeye çalışalım.

Galatasaray - Fenerbahçe için 1 1 0 0 ikilik sayısı yani 12 sayısı kullanılacaktır. Verilen onluk sayı ikilik sayı sistemine dönüştürüldüğünde elde edilen ikilik sayıda iki tane 1 varsa, bu bizim ikili alt kümemizi yani takım eşleştirmesini verecektir. 4 elemanlı bir kümenin her bir elemanı 1 olduğunda bu bize kümenin onlu maksimum sayısını verecektir. Buna göre 1111 ikili sayısı 15 sayısına denk gelir. 1 ile 15 sayısı arasındaki sayıların ikilik sayı karşılıkları içinde 2 tane 1 olursa bu bize maç eşleştirmesini verecektir.

1 0 1 0 ise Galatasaray - Beşiktaş

0 1 1 0 ise Fenerbehçe - Beşiktaş

0 1 0 1 ise Fenerbahçe - Trabzonspor

Yukarıda verilen eşleştirmelerde görüldüğü gibi, artık takımlarımızı ikili eşleştirmiş olduk. Geldik bu anlatılanları kodlamaya.

Öncelikle verilen sayıyı ikilik sayıya dönüştüren metodu ve ikilik sayı sisteminde yer alacak birlerin sayısını bulan fonksiyonları tanımlayalım. Metotlarımıza DtoB ve CountOnes isimlerini verelim. Tanımladığımız DtoB metodu ana programdan sayısal bilgi alacak, ana programa string bir bilgi yollayacaktır. CountOnes ise ana programdan string bir bilgi alacak, ana programa sayısal bir bilgi yollayacaktır.

Public Function DtoB(ByVal a As Double) As String
    Dim aktar As String
    Dim k As Double
    
    aktar = ""
    
    Do While a > 0
        k = a Mod 2
        a = Int(a / 2)
        aktar = CStr(k) & aktar
    Loop
    
    DtoB = aktar
End Function

Public Function CountOnes(ByVal value As String) As Integer

    Dim i As Integer, sayac As Integer
    sayac = 0
    
    For i = 1 To Len(value)
        If Mid(value, i, 1) = "1" Then
            sayac = sayac + 1
        End If
    Next i
    
    CountOnes = sayac

End Function

Fonksiyonumuzu tanımladık. Sıra geldi uygulamaya ait değişkenleri tanımlamaya. Bu uygulamaya ait değişkenler aşağıda verilmiştir.

Dim bValue As String
Dim setSize As Integer, finalValue As Long
Dim bValueSize As Integer, max As Integer

setSize = UBound(takimlar) + 1

finalValue = 2 ^ setSize
max = setSize * (setSize - 1) / 2

Dim m() As String
ReDim m(max - 1, 1)

Dim p As Integer, q As Integer
p = 0

Geldik işlemleri yapmaya. Döngümüzü 2n = 24 = 16 sayısına kadar döndüreceğiz. Döngüde sırası gelen sayıyı ikilik sayıya dönüştüreceğiz. Elde edilen ikilik sayıda iki tane bir varsa, takimlar dizisinde bir sayılarının olduğu takımları m dizisine aktaracağız.

For i = 1 To finalValue

    bValue = DtoB(i)
    bValueSize = Len(bValue)
    
    ' Eksik bitleri sola sıfır ekleyerek tamamla
    Do While Len(bValue) < setSize
        bValue = "0" & bValue
    Loop
    
    q = 0
    
    ' Kaç tane 1 var?
    If CountOnes(bValue) = 2 Then
    
        Dim j As Integer
        For j = 1 To setSize
        
            If Mid(bValue, j, 1) = "1" Then
                m(p, q) = takimlar(j - 1)
                q = q + 1
            End If
            
        Next j
        
        p = p + 1
    End If
    
Next i

İşlemler tamam. Artık eşleştirmeleri listeleyebiliriz.

ActiveDocument.Content.InsertAfter "Mini Süper Lig Eşleşmeleri" & vbCr

Dim k As Integer
For k = 0 To max - 1
    ActiveDocument.Content.InsertAfter _
    Format(m(k, 0), "@@@@@@@@@@@@@@@") & " - " & _
    m(k, 1) & vbCr
Next k

Böylece 4 takımlı bir ligde takımların eşleşmeleri tamam. Takımları eşleştirdik. Aşağıdaki pencere görüntüsünü programı çalıştırdığımda aldım.

Yukarıdaki ekranda görüldüğü gibi, Galatasarayın maçları arka arkaya. Halbuki bir haftada tek maç oynamalıydı. Dersimizi burada bitirelim. Kafamız karışmadan en önemli aşamaları bir sonraki derste anlatmaya çalışalım. Makaleyi beğenmeyi ve paylaşmayı unutmayalım.

 

Okunma Sayısı: 3

Yorumlar

Yorum Ekle
Kötü İyi
İlgili Makaleler
Microsoft Word Programında Yer İşareti (BookMarks) Ekleme
14 Mayıs 2023 Cumhurbaşkanligi Seçim Sonuçlarını Baklava Grafikle Gösteren Programı Word Programında Yapınız
Word Programında Filigran ve Arka Plan Eklemek
İki Sayının Toplamını Bulan Programı Microsoft Word VBA İle Kodlayınız
Microsoft Word Programında Visaul Basic For Application (VBA) Kullanımı
Word Programında Belgeyi Sütunlarla Gösterme
Microsoft Word Programında VBA Penceresinde Yeni Form Oluşturma
Word Programında Herhangi Bir İle Ait Yerel Seçim Sonuçlarını Grafikle Gösteren Programı Yapınız
Word Programında Hedefe Ok Atışı Oyununu Kodlayınız
Word VBA ile Süper Lig Uygulaması – Bölüm 2: Kuraya Katılacak Takımların Rastgele Sıralanması
Adres Takip ve Telefon Rehberi Programını Word Programında Yapınız
Microsoft Word Programında VBA Kodlarının Çalıştırılması
Word VBA ile Süper Lig Uygulaması – Bölüm 3: Dinamik Olarak Kuraların Çekilmesi
Word Programında 3 Sayının Ortalamasını Bulan Programı Kodlayınız
Word VBA ile Süper Lig Uygulaması – Bölüm 1: Sabit Değerlerle Fikstür ve Puan Hesaplama
Word Programında Puzzle Oyununu Yapan Programı Kodlayınız
Word Programında Paralelkenarın Alanını Bulan Programı Kodlayınız
Word Programında Random (Rastgele Erişimli) Dosyalarda Dosya İşlemleri
Word Programında Üçgenin Alanını Bulan Programı VBA İle Kodlayınız
Word Programında Vize ve Final Notuna Göre Ortalamayı Bulan Programı VBA İle Kodlayınız