c# Desktop

TrendYol 2024 - 2025 Süper Lig Fikstür Kura Çekimini Yapan c# Console Uygulaması-3

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 tanımlayalım. Metodumuza DtoB ismini verelim. Tanımladığımız metod ana programdan sayısal bilgi alacak, ana programa string bir bilgi yollayacaktır.

        public static string DtoB(decimal a)
        {
            string aktar = "";
            decimal k;
 
            while (a > 0)
            {
                k = a % 2;
                a = Math.Floor(a / 2);
                aktar = k + aktar;
            }
 
            return aktar;
        }
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.
            string[] takimlar = { "Galatasaray", "Fenerbahçe", "Beşiktaş", "Trabzonspor" };
 
            string bValue;
            int setSize, finalValue, bValueSize, max;
 
            setSize = takimlar.Length;
            string[] siralama = new string[setSize];
            Random rastgele = new Random();
            int sec;
            int hafta = takimlar.Length / 2;
            int toplam;
            if (setSize % 2 == 0)
                toplam = (setSize - 1) * 2;
            else
                toplam = setSize * 2;
 
            finalValue = (int)Math.Pow(2, setSize);
            max = setSize * (setSize - 1) / 2;
            string[,] m = new string[max, 2];
            string[,] mDepo = new string[max, 2];
            bool[] secim = new bool[max];
            string[,] mYedek = new string[hafta, 2];
 
            int p, q;
            // takım sayısına göre haftada oynanacak maçların sayısı belirlenecek
            string[,,] fikstur = new string[toplam, hafta, 2];
 
            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 (int i = 1; i <= finalValue; i++)
            {
                bValue = "";
 
                bValue = DtoB(i);
                bValueSize = bValue.Length;
                for (int k = 0; k < setSize - bValueSize; k++)
                    bValue = "0" + bValue;
 
                q = 0;
 
                int count = bValue.Count(f => f == '1');
                if (count == 2)
                {
                    for (int j = 0; j < setSize; j++)
                        if (bValue.Substring(j, 1) == "1")
                        {
                            m[p, q] = takimlar[j];
                            q = q + 1;
                        }
                    p++;
                }
            }
            mDepo = m;
İşlemler tamam. Artık eşleştirmeleri listeleyebiliriz.
            for (int i = 0; i < max; i++)
            {
                Console.Write(String.Format("{0,15} - {1,-15}\n", m[i, 0], m[i, 1]));
            }
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.

 


İlgili Makaleler
Nesne Tabanlı Programlama Çalışma Soruları
Kompleks Veri Bağlama (Complex Data Binding)
Basit Veri Bağlama (Simple Data Binding)
Veri Girişi Doğrulama (Input Validation)
Konsol Ekranında Kod Yazma ve Çalıştırma
Veri Girişi Maskeleme (MaskedTextBox)
Konteyner Kontrolleri
GroupBox Paneliyle Gruplandırılan Bilgisayar Parçalarının Satışını Yapan c# Form Uygulaması
Form Sınıfı
Form Sayfalarında Ayrıntılı ListBox Kullanımı
c# Console Uygulamalarında ReadKey Metoduyla Klavye Tuşlarını Kontrol Etme
TabControl Panelini Kullanarak Lokantalar İçin Müşteri Siparişi Alan c# Form Uygulaması
Değişken Tanımlama Kuralları
Yazdırma İletişim Kutusu (PrintDialog)
Sayısal Loto Çekilişini Yapan c# Uygulaması
WebBrowser ve Panel Kontrollerini Kullanarak Web Tarayıcı Oluşturan c# Form Uygulaması
Yıkıcı Metotlar (Destructors)
Panel Üzerinde Serbest Çizim Yapan c# Form Uygulaması
Pisagor Bağıntısı İşlemlerini Gerçekleştiren c# Uygulaması
c# Console Uygulamalarında Ping Nasıl Kullanılır, Ping Atma

Yorum Ekle
   
Kötü İyi