Arşiv

Temmuz 2011 ayı için arşiv

Euler – 3

26 Ağustos 2010 1 yorum

Euler serisinin üçüncü yazısında, Project Euler’in 3. sorusunu çözeceğiz;

Orijinal soru; The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?

Türkçesi; 13195 rakamının asal çarpanları 5, 7, 13 ve 29′dur.
600851475143 rakamının en büyük asal çarpanı kaçtır?

Önce siz çözmeyi deneyin, çözemezseniz Devamını oku…

Kısa Sınav – 16

26 Ağustos 2010 Yorum yapılmamış

Windows Forms uygulaması geliştiriyorsunuz, uygulamanın final versiyonunun performansından memnun değilsiniz.

Öngörülerinize göre performans problemi kötü hafıza kullanımı kaynaklı.

Sorunlu kodu tespit etmek ve hafıza kaçaklarını düzeltmek istiyorsunuz.

Aşağıdaki araçlardan hangisini tercih etmelisiniz?

  • CLR Profiler
  • Event Viewer
  • Application Center Test Tool
  • Perfmon.exe

Sorunun doğru cevabı için; Devamını oku…

C# ile bilgisayarınızdaki diskleri listelemek

25 Ağustos 2010 1 yorum

.Net 2.0 ile birlikte System.IO namespace’inde bulunan birçok eksiklik giderilmiştir. Özellikle Windows’un Dosya Sistemine erişmek için yeni sınıflar ve methodlar eklenmiştir.

DriveInfo sınıfında yapılan bir geliştirme sayesinde sistemde kurulu disklere erişebilir, disklerin tiplerini sorgulayabilir, kapasitelerini ve boş alan miktarını öğrenebiliriz.

Örneğin, sistemdeki diskleri listelemek için;

DriveInfo[] diskler = DriveInfo.GetDrives();
foreach (DriveInfo disk in diskler)
{
    string diskAdi = disk.IsReady ? String.Format(" - {0}", disk.VolumeLabel) : null;
    Console.WriteLine( "{0} - {1}{2}", disk.Name, disk.DriveType, diskAdi);
}

C:\ – Fixed – Sistem
D:\ – Fixed – Dosyalar
E:\ – CDRom
F:\ – CDRom
G:\ – Removable
H:\ – Removable
T:\ – Fixed – Temp
Y:\ – Fixed – Yedekler

IsReady property’si sayesinde disk’in o anda sistemde kullanılabilir olup olmadığını kontrol ediyoruz. Örneğin, içinde CD olmayan CD okuyucu için, disk’in etiketini almaya çalışmıyoruz. Uygulamamızın hata ile karşılaşmaması için, bu dikkat etmemiz gereken bir nokta.

Name ve DriveType özellikleri, diskin hazır olduğu durumlardan bağımsız olarak, her zaman kullanılabilir durumdadır.

Euler – 2

23 Ağustos 2010 2 yorum

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 Devamını oku…

C# Textbox’ın AutoComplete Özelliği

23 Ağustos 2010 Yorum yapılmamış

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);

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

19 Ağustos 2010 1 yorum

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 Devamını oku…

Yeni Seri – Euler

19 Ağustos 2010 Yorum yapılmamış

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)

16 Ağustos 2010 2 yorum

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;

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();
	}
}