Beyin yakan soru ve cevabı

Beyin yoran (yada yakan) soruları çok severim. Ve ne yazık ki çok zamanımı da alır (yaş kemale erdi sonuçta). Sayılar arasında ilişki kurmak, hatta bunları genarete eden uygulamacıklar haline getirmek bana çok keyif verir. Az sonra aşağıda paylaşacağım soruyu da geçtiğimiz aylarda bir arkadaşım -cevabını bulamadığı için-  sormuş ve bu sebeple de birkaç saatimi çalmıştı. Sonuca ulaşınca harcadığım zamana acımış ve kendime çok kızmıştım. Eminim çok daha kısa sürede çözecek arkadaşlar olacaktır.

Cevabı hemen paylaşmayacak ama yazdığım (C#) ve sonucu genarete eden uygulamayı aşağıda paylaşıyor olacağım. Tabi cevapla birlikte kısa bir süre içinde uygulamanın kodlarını da paylaşıyor olacağım.

Soru şu (üzerine tıklayarak büyütebilirsiniz);

soru

 

Tabi paylaştığım uygulama ile sonucu bulmak çok basit olacaktır. Burada biz yazılımcıların amacı biraz kafa yorup, sayılar ve sıralar arasındaki ilişkiyi formül haline getirmek olmalı. Keygen Generator gibi 🙂

Uygulamayı indirmek için adres : http://mustak.org/depo//view.php?file=hmustak/2016-03-30.7z

Ekran görüntüsü;

Ekran

Kısa süre içinde cevabı ve kodları yayınlıyor olacağım.

Hakan Müştak @2016/03

 


 

03/04/2016 – Sonradan eklenen kısım;

Önce bahsettiğim basit formülü paylaşayım. Basit diyerek küçümsememin sebebi onu çözmüş olmamdır; eğer siz çöz-e-mediyseniz, benim gibi basit diyemezseniz 🙂

Sıra çiftse = ( (Sıra sayısı / 2) + 1 ) x Sıra sayısı
Sıra Tekse = Mevcut sıra sayısı + Bir önceki sıranın değeri

 

Kodları da açıklayayım;

Önce form üzerinde görülen Genarete Butonunun içine bakalım;

        // Genarete Butonu
        private void button1_Click(object sender, EventArgs e)
        {
            // Hata olursa, engelleyelim - Çok uğraşmaya da gerek yok
            try
            {
                //Kullanıcının girdiği değeri alalım
                Int64 girilenDeger = Int64.Parse(textBox1.Text);

                //Girilen değerin tek mi çift mi olduğunu görelim
                if (girilenDeger % 2 == 0)
                {
                    label4.Text = String.Format("{0:0,0}", ciftse(girilenDeger));
                }
                else
                {
                    label4.Text = String.Format("{0:0,0}", tekse(girilenDeger));
                }

            }
            catch ()
            {
                MessageBox.Show("Hatalı giriş yaptınız", "Hata uyarısı", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
  • Hatalı hesaplamalar için basit bir try-catch bloğu koydum. Olası hatada catch scobe’unda gördüğünüz uyarıyı veriyor.
  • Kullanıcıdan değerini istediği satır sayısını textbox içinden Int64’le tanımlanan girilenDeger değişkeni içine alıyoruz.
  • Basit bir if bloğu ile sayının tek mi çift mi olduğuna bakıyoruz.
  • Sayının çift yada tek oluşuna göre ilgili metod içinde hesaplamasını yapıp label4 üzerine getiriyoruz.
  • String.Format’la gelen sayıyı biçimliyor ve ekrana şık bir şekilde yazıyoruz.

ciftse() metodumuz ;

        //Gelen sayı Çiftce
        public Int64 ciftse(Int64 gelen)
        {
            return ( (gelen / 2) + 1 ) * gelen ;
        }

tekse() metodumuz;

        //Gelen sayı Tekse
        public Int64 tekse(Int64 gelen)
        {
            return (gelen + ciftse((gelen-1)));
        }

Satır girişi yapılan textbox’a sadece sayı yada harf girilmesi ile ilgili bir kontrolümüz daha var. Onuda bir sonraki yazımda yazacağım. Takipte kalın 🙂

Hakan Müştak @2016/04

   

5 yorum

  1. Chemal dedi ki:

    Açıklasaymışsın ya hocam

  2. Kali dedi ki:

    Soru size aitse elinize sağlık. Benim sormak istediğim uygulama üzerinde karakter-sayı kontrolünü nasıl yaptınız. Paylaşırsanız seviniriz. KATÜden selamlar.

  3. hmustak dedi ki:

    Eminim bulmuşsunuzdur ama ayrı bir konu olarak paylaşacağım. Bizden de selamlar. 😎

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

question razz sad evil exclaim smile redface biggrin surprised eek confused cool lol mad twisted rolleyes wink idea arrow neutral cry mrgreen

*

Captcha Kontrolü * Zaman aşımı, sayfayı tekrar yükleyin


Top