C# Çekiliş Kodu

  • Konuyu başlatan shuu
  • Başlangıç Tarihi
  • Mesaj 1
  • Görüntüleme 2.248

shuu

Hectopat
Katılım
8 Şubat 2015
Mesajlar
2
Daha fazla  
Cinsiyet
Erkek
Ben bir tane Çekiliş program ödevim var ama program da şoyle bir sey olcakmış:

Mesela

Ömer , Faruk , Yakup ,

kura çekilince sadece isimleri alıcakmış ve bir diziye aktarcakmış acaba bunu nasıl yaparım :D

Acaba bun kodu nedir :D
 
Son düzenleyen: Moderatör:
Giriş

C# ile rastgele numara oluşturmak epey kolay olabilir lakin içlerinden bir kazanan seçmek istediğinde biraz daha fazlasını yapmak gerekir. Bu örnekte farklı yükü olan biletlere sahip jenerik sınıf bir piyango uygulamasına bakacağız. Draw() metodunu çağırarak bir sonraki kazananı belirleyebilirsiniz: removeWinner parametresi kazananaın listeden silinip silinmeyeceğini belirler.

Matematik

Bütün biletlerin tickets[] adındakji bir sırada olduğunu varsayalım ve her biletin w kadar yükü olsun ve sıradaki bütün yüklerin toplamı, toplamda bir araya gelsin. Bu durumda her bir bileitin olasılığı (ticket.p=:

Kod:
tickets[i].p = tickets[i].w / sum


Kodun Kullanımı

Aşağıdaki sınıfı çözümünüze ekleyin:

Kod:
public class Lottery<T>
{
    public class Ticket
    {
        public T Key { get; private set; }
        public double Weight { get; private set; }
        public Ticket(T key, double weight)
        {
            this.Key = key;
            this.Weight = weight;
        }
    }
    List<Ticket> tickets = new List<Ticket>();
    static Random rand = new Random();
    public void Add(T key, double weight)
    {
        tickets.Add(new Ticket(key, weight));
    }
    public Ticket Draw(bool removeWinner)
    {
        double r = rand.NextDouble() * tickets.Sum(a => a.Weight);
        double min = 0;
        double max = 0;
        Ticket winner = null;
        foreach (var ticket in tickets)
        {
            max += ticket.Weight;
            //-----------
            if (min <= r && r < max)
            {
                winner = ticket;
                break;
            }
            //-----------
            min = max;
        }
        if (winner == null) throw new Exception();
        if (removeWinner) tickets.Remove(winner);
        return winner;
    }
}

Lisans

Bu makale, ekteki dosyalar ve kaynak kodu ile birlikte The Code Project Open License (CPOL) lisansı altındadır.

Kaynak: Weighted Generic Lottery in C# - CodeProject

@shuu , hocanın verdiği ödevi araştırmak yerine kolaya kaçarak yapmak istediğini bir kenara bırakalım, Sosyal kurallarına uymadığından dolayı sana 1 hafta ceza verdim. Ödevin amacı sana bir şeyler öğretmektir. Burada kimse senin konuna öncelik göstermek zorunda değil. Derslerine iyi çalış ve İngilizce'ni ilerlet!
 
Uyarı! Bu konu 11 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı