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.