c# Desktop

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

Bir önceki dersimizde kuraları çekmiştik. Ancak bazı takımların maçları arka arkayaydı. Halbuki her hafta bir takım bir maç oynayacaktı. Önceki dersimizde verilen çıktıyı buna göre sıralamız gerekir. Verilen çıktı sonuçlarını takimlar dizisinde takımların sırasına göre yazarsak aşağıdaki gibi bir sonuç elde edilir.

3  4
2  4
2  3
1  4
1  3
1  2
Elde edilen sonucu her haftada 1, 2, 3, 4 olmak üzere sıralamamız lazım. Sıralama işlemiyle ilgili kodları yazmadan önce bir maçın hangi haftada oynanacağını belirlemek için 3 boyutlu bir dizi oluşturmalıyız.
string[,,] fikstur = new string[toplam, hafta, 2];
Artık fikstur yardımıyla hangi hafta hangi takımın maçı var, onu tanımlayabiliriz. Öncelikle fikstur dizisinde o hafta içinde aynı takımın maçı olup olmadığını kontrol etmek için Search isminde bir metod tanımlayalım.
        public static bool Search(int hft, string[] takim, string evSahibi, string misafir, string[,] fiks)
        {
            string bay = "";
            int takimSayisi = takim.Length;
            if (takimSayisi % 2 != 0)
            {
                bay = takim[hft];
                if (bay == evSahibi || bay == misafir)
                    return false;
            }
 
            for (int i = 0; i < fiks.GetLength(0); i++)
            {
                if (fiks[i, 0] != "" && fiks[i, 1] != "")
                {
                    if (fiks[i, 0] == evSahibi || fiks[i, 1] == misafir || fiks[i, 1] == evSahibi || fiks[i, 0] == misafir)
                    {
                        return false;
                    }
                }
            }
            return true;
        }
Daha sonra m dizisinden fikstur dizisine aktarılan satırın silinmesi için TrimArray metodunu tanımlayalım.
        public static string[,] TrimArray(int rowToRemove, string[,] originalArray)
        {
            string[,] result = new string[originalArray.GetLength(0) - 1, originalArray.GetLength(1)];
 
            for (int i = 0, j = 0; i < originalArray.GetLength(0); i++)
            {
                if (i == rowToRemove)
                    continue;
 
                for (int k = 0, u = 0; k < originalArray.GetLength(1); k++)
                {
                    result[j, u] = originalArray[i, k];
                    u++;
                }
                j++;
            }
 
            return result;
        }
Şimdi de diziye yeni boş kayıt sahası eklemek için Add metodunu tanımlayalım.
        public static string[,] Add(string[,] array, int adet)
        {
            int newLength = array.GetLength(0) + adet;
 
            string[,] result = new string[newLength, 2];
 
            for (int i = 0; i < array.GetLength(0); i++)
            {
                result[i, 0] = array[i, 0];
                result[i, 1] = array[i, 1];
            }
 
            return result;
        }
Bir de seçilen maçın bir daha seçilmemesi için gereken metodu tanımlayalım.
        public static bool[] sifirla(int deger)
        {
            bool[] s = new bool[deger];
            for (int i = 0; i < deger; i++)
                s[i] = false;
            return s;
        }
Artık fikstür ayarlamasını yapabiliriz.
            p = q = 0;
            int sat = 0;
            secim = sifirla(max);
            do
            {
                do
                {
                    sat = rastgele.Next(0, m.GetLength(0));
                    if (secim[sat] == false)
                    {
                        secim[sat] = true;
                        break;
                    }
                    else
                    {
                        int d = 0;
                        for (int i = 0; i < secim.Length; i++)
                        {
                            if (secim[i] == true)
                            {
                                d++;
 
                            }
                        }
                        if (d == secim.Length)
                        {
                            sat = m.GetLength(0) + 1;
                            break;
                        }
                        continue;
                    }
                } while (true);
 
                if (sat > m.GetLength(0) - 1)
                {
                    Array.Clear(mYedek, 0, mYedek.Length);
                    Array.Clear(m, 0, m.Length);
                    Array.Clear(fikstur, 0, fikstur.Length);
                    p = q = 0;
                    m = mDepo;
                    secim = sifirla(m.GetLength(0));
                }
 
                if (Search(p, takimlar, m[sat, 0], m[sat, 1], mYedek))
                {
                    if (p % 2 != 0)
                    {
                        string ara;
                        ara = m[sat, 0];
                        m[sat, 0] = m[sat, 1];
                        m[sat, 1] = ara;
                    }
 
                    mYedek[q, 0] = m[sat, 0];
                    mYedek[q, 1] = m[sat, 1];
 
                    m = TrimArray(sat, m);
                    q++;
                    secim = sifirla(m.GetLength(0));
                }
 
 
                if (q == hafta) // haftada oynanacak maç sayısı
                {
                    for (int i = 0; i < mYedek.GetLength(0); i++)
                    {
                        fikstur[p, i, 0] = mYedek[i, 0];
                        fikstur[p, i, 1] = mYedek[i, 1];
                    }
                    Array.Clear(mYedek, 0, mYedek.Length);
                    q = 0;
                    secim = sifirla(m.GetLength(0));
                    p++;
                }
 
            } while (m.GetLength(0) != 0);
 
            int ilk = 0;
            for (int i = toplam / 2; i < toplam; i++)
            {
                for (int j = 0; j < hafta; j++)
                {
                    fikstur[i, j, 0] = fikstur[ilk, j, 1];
                    fikstur[i, j, 1] = fikstur[ilk, j, 0];
                }
                ilk++;
            }
Şimdi de mini ligimize ait takımların ilk yarı maç listesini görüntüleyelim.
            for (int i = 0; i < toplam; i++)
            {
                Console.WriteLine("\n{0}. Hafta Maçları", (i + 1));
                Console.WriteLine(new string('─', 30));
                for (int j = 0; j < hafta; j++)
                {
                    Console.Write(String.Format("{0,15} - {1,-15}\n", fikstur[i, j, 0], fikstur[i, j, 1]));
                }
            }
Projeyi kaydedip çalıştırdığımızda aşağıdaki pencere ekrana gelir.
Fikstür çekilişimiz tamam. Bir sonraki derslerde hafta hafta maçların oynanması işlemini yapmaya çalışacağız. Makalemizi paylaşırsanız sevinirim.

 


İ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ı
Sayısal Loto Çekilişini Yapan c# Uygulaması
Yazdırma İletişim Kutusu (PrintDialog)
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