Euler - 2

Euler serisinin ikinci yazısında, Project Euler’in 2. sorusunu çözeceğiz;

*Orijinal soru; *Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

Find the sum of all the even-valued terms in the sequence which do not exceed four million.

*Türkçesi; *Fibonacci serisinde her rakam, kendisinden önce gelen iki rakamın toplamıdır. 1 ve 2 ile başlayan serinin ilk 10 rakamı:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

Bu serinin 4.000.000 (Dört Milyon) ‘dan küçük tüm çift rakamlarının toplamını bulunuz.

Önce siz çözmeyi deneyin, çözemezseniz ;

using System; using System.Linq; using System.Collections.Generic;

class Program { static IEnumerable< long > FibonacciSeri() { long a = 1; long b = 1;

    while (true)
    {
        a = a + b;
        b = a - b;

        if (b < 4000000)
            yield return b;
        else
            break;
    }
}

static void Main(string[] args)
{
    long Toplam = FibonacciSeri().Where(Rakam => Rakam % 2 == 0).Sum();

    Console.WriteLine("Toplam : {0}", Toplam);

    Console.ReadLine();
} }

C# Textbox'ın AutoComplete Özelliği

Genellikle web uygulamalarında gördüğümüz metin kutularının otomatik tamamlama özelliğini Windows Masaüstü uygulamalarımıza da ekleyebiliriz.

Yapmamız gereken, otomatik tamamlama özelliği vermek istediğimiz Textbox‘ın birkaç özelliğini ayarlamak;

AutoCompleteMode : Varsayılan olarak None değerini içerir Append, yazılan harflere uyan ilk kelimenin kalanını textbox’a ekler ve seçili hale getirir Suggest, aşağı açılan listeyi gösterir SuggestAppend, hem aşağı açılan listeyi gösterir, hem de yazılan harflere uyan ilk kelimenin kalanını textbox’a ekler ve seçili hale getirir

AutoCompleteSource : Varsayılan olarak None değerini içerir FileSystem, FileSystemDirectories, HistoryList, RecentlyUsedList, AllSystemSources, AllUrl, CustomSource değerlerinden birini içerebilir

AutoCompleteCustomSource : AutoCompleteSource özelliği CustomSource olarak atanmışsa AutoCompleteCustomSource özelliği string dizisi olarak listeyi tutar

Önce aşağıdaki ekran görüntüsünde form oluşturalım;

TextBox AutoCompleteMode Form

Öncelikle formumuzun yüklenme olayında (Form_Load Event) Kaynak açılır listesine (ComboBox), otomatik tamamlama kaynaklarının listesini ekleyelim;

cmbKaynak.Items.Add(AutoCompleteSource.CustomSource); cmbKaynak.Items.Add(AutoCompleteSource.FileSystem); cmbKaynak.Items.Add(AutoCompleteSource.FileSystemDirectories); cmbKaynak.Items.Add(AutoCompleteSource.HistoryList); cmbKaynak.Items.Add(AutoCompleteSource.RecentlyUsedList); cmbKaynak.Items.Add(AutoCompleteSource.AllSystemSources); cmbKaynak.Items.Add(AutoCompleteSource.AllUrl);</pre>

TextBox AutoCompleteSource List

Daha sonra, TextBox‘ın AutoCompleteMode ve AutoCompleteCustomSource özelliklerine değer atamaları yapalım;

txtWebSitesi.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
txtWebSitesi.AutoCompleteCustomSource.AddRange(new string[] { "http://www.enginpolat.com", "http://www.karalamalar.net", "http://www.cebirci.com", "http://www.kadirgunay.com" });
cmbKaynak.SelectedIndex = 0;

Son olarak, Kaynak combobox‘ının seçili eleman değişti olayında (SelectedIndexChanged Event) textbox‘ın AutoCompleteSource özelliğini değiştiriyoruz;

txtWebSitesi.AutoCompleteSource = (AutoCompleteSource)cmbKaynak.SelectedItem;

TextBox AutoCompleteCustomSource

TextBox AutoCompleteSource FileSystem

TextBox AutoCompleteSource History List

Örnek uygulamanın tüm kaynak kodu;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

public partial class frmMain : Form
{
    public frmMain()
    {
        InitializeComponent();
    }

    private void frmMain_Load(object sender, EventArgs e)
    {
        cmbKaynak.Items.Add(AutoCompleteSource.CustomSource);
        cmbKaynak.Items.Add(AutoCompleteSource.FileSystem);
        cmbKaynak.Items.Add(AutoCompleteSource.FileSystemDirectories);
        cmbKaynak.Items.Add(AutoCompleteSource.HistoryList);
        cmbKaynak.Items.Add(AutoCompleteSource.RecentlyUsedList);
        cmbKaynak.Items.Add(AutoCompleteSource.AllSystemSources);
        cmbKaynak.Items.Add(AutoCompleteSource.AllUrl);

        txtWebSitesi.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
        txtWebSitesi.AutoCompleteCustomSource.AddRange(new string[] { "http://www.enginpolat.com", "http://www.durgut.com", "http://www.karalamalar.net", "http://www.kadirgunay.com", "http://www.microsoft.com", "http://www.bilgeadam.com", "http://www.ntvmsnbc.com", "http://www.arcelik.com" });

        cmbKaynak.SelectedIndex = 0;
    }

    private void cmbKaynak_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtWebSitesi.AutoCompleteSource = (AutoCompleteSource)cmbKaynak.SelectedItem;
    }

    private void lblenginpolatcom_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        Process.Start("http://www.enginpolat.com");
    }
}


Euler - 1

Euler serisinin ilk yazısında, Project Euler’in 1. sorusunu çözeceğiz;

*Orijinal soru; *If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.

*Türkçesi; *3′ün veya 5′in katı olan 10′dan küçük tüm doğal sayıları listelersek, 3, 5, 6, ve 9′u elde ederiz. Bu katların toplamı 23′tür. 3′ün veya 5′in 1000′den küçük tüm katlarının toplamını bulunuz.

Önce siz çözmeyi deneyin, çözemezseniz ;

using System; using System.Linq; using System.Collections.Generic;

class Program { static void Main(string[] args) { ///Yöntem (1) ///IEnumerable< int > Rakamlar = Enumerable.Range(1, 999); ///int Toplam = (from Rakam in Rakamlar where Rakam % 3 == 0 || Rakam % 5 == 0 select Rakam).Sum();

    ///Yöntem (2)
    int Toplam = Enumerable.Range(1, 999).Where(r => r % 3 == 0 || r % 5 == 0).Sum();

    Console.WriteLine("Toplam : {0}", Toplam);

    Console.ReadLine();
} }

Yeni Seri - Euler

cebirci arkadaşım sayesinde yeni bir seri yazmaya başlıyorum; Euler.

http://www.projecteuler.net adresinde sorularına ulaşabileceğiniz Project Euler, matematiğine güvenen programcılara hitap ediyor.

Project Euler, basit olarak sizi, şu ana kadar tanımlanmış ve kolaydan zora göre numaralandırılmış 299 matematik sorusunu çözmeye davet ediyor.

Fakat, soruları istediğiniz programlama dili ile yazacağınız uygulamalara çözdürmeniz lazım.

Ben soruları C# programlama dilini kullanarak çözmeye çalışacağım.

C# Sistem Olayları (SystemEvents)

C# ile geliştirdiğimiz uygulamalarda, işletim sistemi seviyesinde oluşan bazı olayları yakalamamız ve bu olaylarla ilgili kodlar yazmamız gerekebilir.

Örneğin, kullanıcı Windows oturumunu kapatırken, biz de uygulamamızı kapatmak veya şifre korumasını aktif hale getirmek isteyebiliriz.

Veya, kullanıcı Windows oturumunu kapattığında hala çalışmakta olan uygulamamızın belirli durumları loglamasını ve kullanıcı oturumunu geri açtığında bu logları kullanıcıya göstermeyi isteyebiliriz.

Kullanıcının, kendi ayarlarını değiştirmesinden, ekran çözünürlüğünü değiştirmesine kadar, çeşitli işletim sistemi olaylarını C# ile yakalayabilir ve ilgili olaylara kod yazabiliriz.

Öncelikle Microsoft.Win32 namespace‘ini kodumuzun using kısmına ekleyelim;

using Microsoft.Win32;</pre>

Daha sonra yapmamız gereken, SystemEvents sınıfının statik olaylarını delegate methodlar sayesinde yakalamak.

Örneğin, ekran ayarlarının değiştirilmesi anında uygulamamızın belirli bir işi gerçekleştirmesini istiyorsak;

SystemEvents.DisplaySettingsChanging += delegate(object sender, EventArgs e) {
    Console.WriteLine("Windows Görüntü Çözünürlüğü değiştiriliyor");
};

Başka yakalayabileceğimiz olaylar;

**DisplaySettingsChanging : **Ekran özellikleri değiştirilirken **DisplaySettingsChanged : **Ekran özellikleri değiştirildikten sonra **InstalledFontsChanged : **İşletim Sisteminde kurulu fontlarda değişiklik olduğunda **PaletteChanged : **Kullanıcı farklı bir palet kullanan başka bir uygulamaya geçtiğinde **PowerModeChanged : **Kullanıcı oturumunu Suspend veya Resume yaptığında **SessionEnding : **Kullanıcı oturumunu veya işletim sistemini kapatırken **SessionEnded : **Kullanıcı oturumunu veya işletim sistemini kapattığında **SessionSwitch : **Kullanıcı oturumunu değiştirirken **TimeChanged : **Sistem saati değiştiğinde **UserPreferenceChanging : **Kullanıcı ayarlarını değiştirirken **UserPreferenceChanged : **Kullanıcı ayarlarını değiştirdiğinde

Örnek uygulamanın tüm kodları;

using System;
using Microsoft.Win32;

class Program
{
    static void Main(string[] args)
    {
        SystemEvents.DisplaySettingsChanging += delegate(object sender, EventArgs e) {
            Console.WriteLine("Windows Görüntü Çözünürlüğü değiştiriliyor");
        };

        SystemEvents.DisplaySettingsChanged += delegate(object sender, EventArgs e)
        {
            Console.WriteLine("Windows Görüntü Çözünürlüğü değiştirildi");
        };

        SystemEvents.InstalledFontsChanged += delegate(object sender, EventArgs e) {
            Console.WriteLine("Windows yüklü fon listesinde değişiklik var (ekleme veya silme)");
        };

        SystemEvents.SessionEnding += delegate(object sender, SessionEndingEventArgs e) {
            switch (e.Reason)
            {
                case SessionEndReasons.Logoff:
                    Console.WriteLine("Windows Kapatılıyor (LogOff)");
                    break;
                case SessionEndReasons.SystemShutdown:
                    Console.WriteLine("Windows Kapatılıyor (Shutdown)");
                    break;
            }
        };

        SystemEvents.SessionEnded += delegate(object sender, SessionEndedEventArgs e) {
            switch (e.Reason)
            {
                case SessionEndReasons.Logoff:
                    Console.WriteLine("Windows Kapatıldı (LogOff)");
                    break;
                case SessionEndReasons.SystemShutdown:
                    Console.WriteLine("Windows Kapatıldı (Shutdown)");
                    break;
            }
        };

        SystemEvents.SessionSwitch += delegate(object sender, SessionSwitchEventArgs e) {
            switch (e.Reason)
            {
                case SessionSwitchReason.SessionLock:
                    Console.WriteLine("Windows Kilitlendi (Windows Locked)");
                    break;
                case SessionSwitchReason.SessionUnlock:
                    Console.WriteLine("Windows Açıldı (Windows Unlocked)");
                    break;
            }
        };

        SystemEvents.UserPreferenceChanging += delegate(object sender, UserPreferenceChangingEventArgs e) {
            Console.WriteLine(e.Category.ToString() + " Ayarları Güncelleniyor");
        };

        SystemEvents.UserPreferenceChanged += delegate(object sender, UserPreferenceChangedEventArgs e) {
            Console.WriteLine(e.Category.ToString() + " Ayarları Güncellendi");
        };

        Console.ReadLine();
    }
}


Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 458

Creative Commons Lisansı