...::::Tek Link Full Download::::...



İnternet Sayfamıza Hoşgeldiniz...

Sitemize üye olarak bir çok linki elde edebilirsin!!!

Anasayfa bölümünde bir çok konu bulunmaktadır....




...::::Tek Link Full Download::::...

İStediğiniz Türden Dosya....
 
AnasayfaSite AnalizTakvimSSSAramaÜye ListesiKullanıcı GruplarıKayıt OlGiriş yap
Sitemize Moderatör Aranmaktadır...
Başvuru yapacaklar admine ulaşabilirler...


Paylaş | 
 

 Lig Tablo(Kodlar)

Önceki başlık Sonraki başlık Aşağa gitmek 
YazarMesaj
Admin
Admin
avatar

Mesaj Sayısı : 63
Tecrübe Puanı : 173
Kayıt tarihi : 12/07/10

MesajKonu: Lig Tablo(Kodlar)   Salı Tem. 13, 2010 3:17 pm

FUTBOL LİGİ KURALLARI
________________________________________

Okullarda bilgisayar programlama derslerinde her zaman hocalar bu soruyu sormuştur. 18 takımlı bir futbol liginde takımları gerçek futbol kurallarına göre dizmek. Bir çok öğrenci bunu en başta kolay zanneder. Alt tarafı bir sıralama işlemi der. Bu kısmen doğrudur. Ama işler başladığında bunun çok da kolay olmadığı görülür. Şimdi 18 takımı sıralamadan önce gerçek futbol kuralları nelerdir kısaca bir hatırlayalım.

1.) Bütün takımlar büyük puandan küçük puana doğru sıralanır.

2.) Eğer aynı puana sahip takımlar varsa bunlar kendi aralarında oynadıkları maçlardaki puan üstünlüğüne göre yerleşir.

3.) Kendi aralarındaki maçlarda puan eşitliği varsa kendi aralarında oynadıkları maçlardaki gol averajına göre yerleşir. Eğer kendi aralarındaki maçlarda atılan gollerde eşitlik var ise deplasmanda fazla gol atan takım üstün sayılmaz.

4.) Kendi aralarındaki maçlarda puan ve gol eşitliği devam ediyorsa, genel puantajdaki gol averajına bakılır.

5.) Takımlar arasındaki gol averajı da eşit ise genel toplamda daha fazla gol atmış olan takım üstün sayılır.

6.) Bu şartlara rağmen eşitlik devam ediyorsa hükmen yenilgisi olmayan takım üstün sayılır.

7.) Bütün bu şartlara rağmen eşitliğin devam etmesi halinde ilgili takımlar arasında yapılacak tek maçlar neticesinde kazanan takım üstün sayılarak nihai sonuç alınır. Yani, bir A takımı ile bir B takımı sadece 1 maç yapar. Maçlar denmesinin sebebi aynı anda 2'den fazla takım olması durumudur.

DİZİ TANIMLAMAK
________________________________________

Şimdi aklımıza hemen bir dizi oluşturmak gelmiş olabilir. Diziyi aşağıdaki gibi tanımlayalım.


Kod:
 ' Takımlar için Diziler Tanımlanıyor..
  Dim Takim(1 to 18) As String
  Dim Puan(1 to 18) As Integer
  Dim Oynadigi(1 to 18) As Integer
  Dim Attigi(1 to 18) As Integer
....


Genelde ilk akla gelen uygulama budur. Her özellik için ayrı bir dizi oluşturulur ve aynı indisli veriler aynı takıma ait olan verilerdir. Örnek:


Kod:
 ' 5 nolu takım bilgileri
    Takim(5)  = "Antalyaspor"
    Puan(5) = 28
    Oynadigi(5)  = 16
    Attigi(5) = 20
....


Bu şekildeki bir mantık doğrudur fakat çok hantaldır. Özellikle sıralama işlerinde diziler karışır. Ve gereksizce fazla kod yazılır. Kodların takibi ve düzeni arapsaçı gibi olur. Çoğu kişinin hata yaptığı nokta doğru dizi mantığı kuramamaktadır. Şimdi bu iş için örnek bir dizi tanımı yapalım. TYPE yapısı oluşturarak birden çok değişkeni tek bir özellik altında gruplayabiliriz. Bu sayede bir nesnenin özelliklerini oluşturmuş oluruz.

Kod:
' Dizi için özel değişken tipi tanımlanıyor
    Type TakimOzellik
        Index As Integer
        isim As String
        Oynanan As Integer
        Galibiyet As Integer
        Beraberlik As Integer
        Maglubiyet As Integer
        Attigi As Integer
        Yedigi As Integer
        Puan As Integer
        HukmenMaglubiyet As Integer
        ikilipuan As Integer  ' İkili sınama durumunda puan
        ikiligol As Integer    ' ikili sınama durumunda gol sayısı
    End Type

    ' Bir tanesi yedek olmak üzere 19 takım tanımlanır.
    Public Takim(1 To 19) As TakimOzellik
Bu sayede tek bir diziye değişik özellikler eklemiş olduk. Artık bu diziyi bir nesne gibi kullanabiliriz. Yukarıdaki kodları proje içerisinde bir modul içine yazın. Böylece tüm proje içerisinde kullanabilirsiniz. Takim dizisine nasıl bir özellik kattığımızı aşağıda görebilirsiniz.

Kod:
Takim(1).isim = "Antalyaspor"
    Takim(1).Oynanan = 16
    Takim(1).Beraberlik = 4
    Takim(1).Attigi = 40
....


Artık dizimiz tek bir isim altında değişik özelliklere sahip olarak oluşturuldu. Yani nesne modelli programlamanın bir avantajını kullanmış olduk. Program başlarken sadece Erase Takim komutunu kullanarak diziyi resetleyebilir. Daha sonra istediğiniz bir yöntemle takimlar hakkındaki bilgileri Takim dizisi içerisine yazabilirsiniz. Bu konuda istediğiniz uygulamayı yapabilirsiniz. Ben örnek programımda bir text dosya içerisine maç skorlarını yazdırıp yine aynı dosyadan gerekli bilgileri okutturdum. İsteyen veritabanı da kullanabilir.

SIRALAMA MANTIĞI
________________________________________

Sıralama işlemi için birkaç sub programı tanımlayalım. Bunlar bizi her defasında benzer kodları yazma derdinden kurtaracak. Aynı zamanda daha anlaşılabilir bir kod düzeni sağlayacak. İlk Sub'ımız a ve b indisli takımları yer değiştirmekle ilgili.

Kod:
 Public Sub TakimDegistir(a, b)
        ' indexi a ve b olan iki takım yer değiştirilir.
        ' takim(19) boş olan takımdır. Değiştirme işlemi için kullanılır.
        Takim(19) = Takim(a)
        Takim(a) = Takim(b)
        Takim(b) = Takim(19)
    End Sub

Gördüğünüz gibi a ve b indisli takımları yer değiştirmek ne kadar kolay. Eğer bir sürü dizi tanımlasaydık gereksizce fazladan kod yazacaktık. Aşağıdaki Sub ise seçilen bir takıma puan vermek için kullanılır. Özellikle maçların sonuçlarını değerlendirirken işinize yarayacaktır.

Kod:
Sub PuanVer(TakimAdi As String, Puan As Integer, Att As Integer, Yed As Integer)
     
        ' Takımın Adına Göre Dizi Taranır. Bulunan Yerde Değişiklikler İşlenir.
        For i = 1 To 18
       
            If Takim(i).isim = TakimAdi Then
           
                Takim(i).Attigi = Takim(i).Attigi + Att
                Takim(i).Yedigi = Takim(i).Yedigi + Yed
                Takim(i).Puan = Takim(i).Puan + Puan
           
                Select Case Puan
                    Case 1: Takim(i).Beraberlik = Takim(i).Beraberlik + 1
                    Case 3: Takim(i).Galibiyet = Takim(i).Galibiyet + 1
                    Case 0: Takim(i).Maglubiyet = Takim(i).Maglubiyet + 1
                End Select
           
                Takim(i).Oynanan = Takim(i).Oynanan + 1
                Exit For

            End If
        Next

    End Sub

    ' Örnek Kullanım-1 : Antalyaspor, Fenerbahçe'yi  4-1 yendiyse
    PuanVer "Antalyaspor",3,4,1
    PuanVer "Fenerbahçe",0,1,4

    ' Örnek Kullanım-2 : Antalyaspor, Barcelona ile deplasmanda 2-2 berabere kaldıysa ve Barcelona'nın 2 golünde de ofsayt varsa :))
    PuanVer "Antalyaspor",1,2,2
    PuanVer "Barcelona",1,2,2

Şimdi sıralamaya geçelim. Bir Command butona bastığımızda sıralama işlemi başlamış olsun. Aşağıdaki kodları bir Command butonun Click yordamına yazın

Kod:
For i = 1 To 17
        For j = i + 1 To 18

            ' i. ve j. takımların puanları kontrol edilir.
            If Takim(i).Puan < Takim(j).Puan Then  ' Puan Üstünlüğü Durumu

                TakimDegistir i, j

              ElseIf Takim(i).Puan = Takim(j).Puan Then    ' Puan Eşitliği Varsa

                KendiMaclari i, j

            End If
       
        Next
    Next

İşte bütün sıralama işlemi bu kadar. Burada kullanılan sıralama algoritması EXCHANGE SORT (Yerdeğiştirme Sıralaması) olarak bilinen algoritmadır. Bununla ilgili detaylı bilgiyi [1] nolu algoritma konu anlatımında bulabilirsiniz. Eğer dikkat ettiyseniz, "Sıralamada alttaki takımın puanı, Üstteki takımın puanından büyükse değişiklik yap" diye bir kontrol var. Sadece bu kontrol bize yeter. Çünkü üstteki takımın puanı büyükse zaten yer değiştirmeye gerek yoktur. Bir de puan eşitliği olayı var. Eğer seçilen 2 takımın puanı eşitse, konunun en başında anlattığım futbol ligi sıralama kurallarına göre tek tek kontrol yapılması gerekir. Bu kontroller KendiMaclari adlı Sub program içerisinde yapılmaktadır.

Kod:
Sub KendiMaclari(a, b)

        ' Bu kısımda takımların kendi aralarında oynadıkları maçlara bakılarak
' İkiliGol ve İkiliPuan değerleri hesaplanır. Ben bu kısımdaki kodları yazmadım
' Siz kendinize uygun işlemle bu bilgileri derleyin.
' ---------------------------

' AÇIKLAMA : a indexi her zaman b indexinden küçüktür.
' a takımının ikili puanı b takımından büyükse yer değiştirmeye gerek yoktur.
           
If Takim(a).ikilipuan < Takim(b).ikilipuan Then
    TakimDegistir a, b
       
  ElseIf Takim(a).ikilipuan = Takim(b).ikilipuan Then
    ' İkili Puan eşitliği durumunda ikili Gollere bakılır.

    If Takim(a).ikiligol < Takim(b).ikiligol Then
        TakimDegistir a, b
           
      ElseIf Takim(a).ikiligol = Takim(b).ikiligol Then
        ' İkili Goller de eşit ise Genel Gol Averajına bakılır.

        If (Takim(a).Attigi - Takim(a).Yedigi) < (Takim(b).Attigi - Takim(b).Yedigi) Then
            TakimDegistir a, b

          ElseIf (Takim(a).Attigi - Takim(a).Yedigi) = (Takim(b).Attigi - Takim(b).Yedigi) Then
            ' Genel Gol Averajları da eşitse toplamda fazla gol atan takıma bakılır

            If Takim(a).Attigi < Takim(b).Attigi Then
                TakimDegistir a, b
               
              ElseIf Takim(a).Attigi = Takim(b).Attigi Then
                        ' Atılan Goller de Eşitse
                        ' Hükmen Yenilgisi Olmayan Takım Seçilir.
                        ' Her ikisinin hükmen yenilgi sayısı 0'dan büyükse seçim yapılmaz.
                        ' Bu durumda ancak b nin hükmen yenilgisi yoksa a nın üstüne çıkar.
                        ' Tersi durumda zaten a, b den üsttedir.

                If Takim(b).HukmenMaglubiyet = 0 And Takim(a).HukmenMaglubiyet <> 0 Then
                    TakimDegistir a, b
                 
                  Else

                    if Hafta = 36 Then

                        ' Eğer Ligin Son Haftasıysa :                   
                        ' Sıralamayı Belirleyecek Tek Maç Yapılır.
                        ' Bu maçta eşitlik durumu olmayacaktır.
                        ' Beraberlik durumunda Penaltılar sonucu belirler.

                    End If
                End If
            End If
        End If
    End If
End If

    End Sub
Bu hazır Sub programlarını, kendi programınız içerisinde kullanabilirsiniz. Görüldüğü gibi TYPE yapısıyla doğru şekilde dizi tanımlayınca işlemler çok basite indirgenmektedir.
Sayfa başına dön Aşağa gitmek
Kullanıcı profilini gör http://forumtime.fullforums.org
 
Lig Tablo(Kodlar)
Önceki başlık Sonraki başlık Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
...::::Tek Link Full Download::::... :: PROGRAMLAMA/WEB TASARIM :: Visual Basic-
Buraya geçin: