Google da ara

 

Şubat 2009
Pts Sal Çar Per Cum Cts Paz
« Kas   Mar »
 1
2345678
9101112131415
16171819202122
232425262728  

Google Reklamları

Dil Seçimi

Bağış yada Ödeme

CSharp Başlangıç Soruları (Programlama Mantığı 1.1)

Programlama ya Giriş Örnek Sorular:

1-      1 ile 100 arasındaki tek sayıları listeleyen bir program yazınız. (for)

2-      1 ile 100 arasındaki çift sayıları listeleyen bir program yazınız. (for)

3-      1 ile 100 arasındaki asal sayıları listeleyen bir program yazınız. (for)

4-      1 ile 100 arasındaki tek sayıları listeleyen bir program yazınız. (while)

5-      1 ile 100 arasındaki çift sayıları listeleyen bir program yazınız. (while)

6-      1 ile 100 arasındaki asal sayıları listeleyen bir program yazınız. (while)

7-      10 adet rastgele sayı üreten ve bunların en küçüğünü ekrana yazan bir program yazınız. (for)

8-      10 adet rastgele sayı üreten ve bunların en büyüğünü ekrana yazan bir program yazınız. (for)

9-      10 adet rastgele sayı üreten ve bunların en büyük çift sayısını ekrana yazan bir program yazınız.(for)

10-   10 adet rastgele sayı üreten ve bunların en küçük tek sayısını ekrana yazan bir program yazınız. (for)

11-   10 adet rastgele sayı üreten ve bunların en küçüğünü ekrana yazan bir program yazınız. (while)

12-   10 adet rastgele sayı üreten ve bunların en büyüğünü ekrana yazan bir program yazınız. (while)

13-   10 adet rastgele sayı üreten ve bunların en büyük çift sayısını ekrana yazan bir program yazınız.(while)

14-   10 adet rastgele sayı üreten ve bunların en küçük tek sayısını ekrana yazan bir program yazınız. (while)

 

 

Yukarıdaki soruları C# dili Console uygulaması projesinde geliştirerek lütfen her bir soru için kodları bu dokümanın sonuna ekleyiniz.

İlgili postun Word Dokümanı

For kullanımı :

for(int i =0 ; i< 10 ; i++)

{

//İlgili kodlar

}

While kullanımı :

while(Ali >Ahmet)

{

//Ali Ahmet den büyük hadi Ahmet i dövsün o zaman.

}

PLINQO – Professional LINQ to Objects

PLINQO Codesmith tarafından geliştirilmiş bir codesmith template idir. Standart Visual Studio 2008 Linq to SqlClasses template i tarafından çıkartılan class ları özelleştirmek sıkıntılı olduğundan, daha özelleştirilebilir bir Linq to Sql veri katmanı oluşturmak için çıkmıştır.

Codesmith in Visual Studio ile entegre çalıştığını da düşünürsek, bu template ile birlikte çok kolay bir şekilde Dbml ve ona bağlı classları oluşturabilmekteyiz. Aşağıda bir projeye eklenmiş Plinqo template inin sağ tık menüsünün nasıl olduğunu görebilirsiniz.

Visual Studio 2008 de projeye eklendiğinde görünen menü.

Visual Studio 2008 de projeye eklendiğinde görünen menü.

Hergün gelişen bu template ile ilgili ayrıntılı bilgiyi şu adreslerden edinebilirsiniz:

http://www.codeproject.com/KB/linq/PLINQO.aspx

http://code.google.com/p/codesmith/

XtraGridControl ve Linq EntitySet Refresh problemi

Devexpress 8.2.6 sürümünde XtraGridControl ile yaşadığım refresh problemi şu şekilde gerçekleşti : EntitySet i datasource olarak verdikten sonra, arka planda eklediğim herhangi bir entity grid üzerinde görünmemekteydi. Yani sadece grid üzerinden yaptığım değişiklikler görünüyor, arkaplandaki değişiklikler EntitySet nesnesi üzerinde debug anında görünmesine rağmen, grid üzerinde görünmüyordu.
Problemi teşhis ettikten sonra, ilk olarak grid nesnemin üzerindeki RefreshDataSource() methodunu denedim ancak; problemi gidermedi.
Sonrasında grid üzerindeki DataSource property sini tekrar aynı EntitySet nesnesini göndererek set ettim ve bir umutla çalıştırdım. Herhangi bir değişiklik yoktu.

Çözüm:

EntitySet<T> nesnemin methodlarına gözatarken GetNewBindingList() methodu dikkatimi çekti. Sorunun çözümü olduğunu düşünerek , hemen denedim ve bingo, sorun giderilmişti.

Niçin böyle bir methoda gerek duyulduğunu henüz anlamış değilim ancak anladığımda burada yayımlıyor olacağım.

Form.KeyPreview ile tüm klavye hareketlerini yakalamak.

Control üzerinde bulunan ve dolayısıyla tüm windows kontrollerinde bulunan KeyDown, KeyPress, KeyUp eventları normal şartlarda sadece o anda focus (odak) lanan control üzerinde patlar. Ancak çoğu zaman bu bizim işimizi görmez ve formun neresinde olursa olsun klavye vuruşlarını yakalamak isteriz.
Bu sebeple bulunduğumuz formun, KeyPreview özelliğini true yaparız ve Form üzerindeki KeyDown, KeyPress yada KeyUp eventlarından birini yakalarız.
Böylece focuslanan control ün klavye vuruş eventlarına ait methodlar tetiklenmeden önce, Form üzerindekiler tetiklenir.

Büyük text dosyaları performanslı okuma

Csharp ile büyük boyuttaki dosyaları daha performanslı okumak için aşağıda bulunan örnek kod satırını kullanabilirsiniz.

Kaynak

Stream inStream = File.Open("myfile.sql", FileMode.Open);

StreamReader reader = new StreamReader(inStream);

StringBuilder builder = new StringBuilder();

StringWriter writer = new StringWriter(builder);

writer.Write(reader.ReadToEnd());

reader.Close();

writer.Close();

string sqltext = builder.ToString();

WebClient kullanarak Asenkron dosya indirmek

Uygulamamızda internet üzerinden dosya indirme ihtiyacı duyduğumuzda kullanabileceğimiz sınıflardan bir taneside System.Net.WebClient sınıfıdır. Bu yazıda bu sınıfı kullanarak bir web sitesinden dosya indirmeyi anlatmaya çalışacağım.

Uygulamayı bir windows forms uygulaması olarak geliştireceğiz.
Bunun için Visual Studio üzerinde yeni bir proje oluşturdum ve karşıma gelen Form1.cs üzerinde işlemleri yapıyorum.

Dizayn için gerekenler :
1 Windows form (Form1.cs)
1 TextBox (textBox1)
1 Button (button1)
1 ProgressBar (progressBar1)
son olarakta bir Label (label1)

TextBox içine yazılan web adresindeki içeriği indirip açan, indirirkende durumu progressbarda gösteren ve label içerisinde kaç kb inmiş kaç kb kalmış gösteren bir program yazmayı hedefliyoruz.

Hiç vakit kaybetmeden button1_click olayını yakalayıp kodlarımızı yazmaya başlıyoruz:

        string myLocalFilePath;
private void button1_Click(object sender, EventArgs e)
{

#region DosyaIsmi
string[] pathArray = textBox1.Text.Split('/');
if(pathArray.Length == 0)
{
MessageBox.Show("Lütfen Düzgün bir web adresi giriniz");
return;
}
string fileName = pathArray[pathArray.Length - 1];

myLocalFilePath = Application.StartupPath + fileName;

#endregion
WebClient myClient = new WebClient();
myClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(myClient_DownloadProgressChanged);
myClient.DownloadFileCompleted += new AsyncCompletedEventHandler(myClient_DownloadFileCompleted);
Uri myWebAddress = new Uri(textBox1.Text);
myClient.DownloadFileAsync(myWebAddress,myLocalFilePath);
}

Burda yaptıklarımızı kısaca açıklamak gerekirse öncelikle methodun dışında, indirilecek olan dosyanın yolunu tutmak için bir field oluşturuyoruz, bu bize daha sonra lazım olacak.
Öncelikle, dosyanın bizim harddisk’imizdeki ismini kullanıcıya sormadığımız için, verilen web adresi üzerinden / ile  başlayan son string ifadeyi alıyoruz. Bu arada ufak bir kontrol ile bunun bir web adresi olup olmadığını da, anlıyor ve gerekirse kullanıcıya uyarı veriyoruz.

Daha sonra WebClient class’ından bir örnek oluşturup DownloadProgressChanged ve DownloadFileCompleted event larını yakalıyoruz.
Kullanıcının bize textBox1 ile gönderdiği değeri Uri classından bir örnek oluşturup varsayılan yapıcı(default contructor) methodu na gönderiyoruz.

Ve son olarak da oluşturduğumuz WebClient örneğimizin DownloadFileAsync methodunun (Uri fileAddress,string localFilePath) parametrelerini alan overload’unu elimizde bulunan myWebAddress ve myLocalFilePath değişkenlerimizi göndererek işletiyoruz.

Asenkron dosya böylece webClient ımız tarafından indirilmeye başlanıyor. Durum değişim (ProgressChanged) ve Dosya tamamlanma (FileCompleted) olaylarının tetikleyeceği methodlarıda aşağıdaki şekilde yazarak programımızı çalışmaya hazır hale getiriyoruz.

        void myClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
DialogResult dr = MessageBox.Show("Dosya indirme başarıyla gerçekleşti, Dosyayı açmak istermisiniz ?","Dosya indirildi",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
if(dr == System.Windows.Forms.DialogResult.Yes)
{
System.Diagnostics.Process.Start(myLocalFilePath);
}
}

void myClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = String.Format("{0} / {1} Kb", (e.BytesReceived/1024), (e.TotalBytesToReceive/1024));

}

Yazıda bulunan örnek kod (Zip)

?? operatörü (null coalescing operator) ve Nullable yapısı

C# 2.0 ile birlikte Nullable<T> yapısının hayatımıza girmesiyle birlikte yeni bir operatör daha kazandık. Özellikle veritabanındaki alanların karşılanması amacıyla eklenen Nullable<T> , değer tipteki veri tiplerinin null olabilmesi için kullanılır.

Tanımlaması :
Nullable<int> musteriNo = new Nullable<int>();
ya da
int? musteriNo = new int?();
şeklinde yapılabilir ikiside aynı sonucu veren kodlardır birincisi asıl sınıf ile çalışmamızı sağlamakta iken, diğeri yazımı kolaylaştırmak için getirilen ? ile yapılmaktadır.

Gelelim ?? operatörüne , Nullable<T> yapısının hayatımıza girmesiyle HasValue ve Value property lerininde kullanımına sıkça rastlar olmuştuk.

HasValue o değişken üzerinde bir değer olup olmadığını bize söylüyor.
Value ise o değere ulaşmamızı sağlıyordu.

Bir zaman sonra bu kullanımın aslında çok fazla kontrol gerektirdiğini farketmemle birlikte. ?? operatorü ile tanıştım. Önceden aşağıdaki gibi yazdığım kod satırlarını ?? kullanarak daha kısa sürede yazmaya başladım. ?? operatörü solundaki ifade null olduğunda sağında yazılan default değeri vermektedir. 

Örnek (HasValue ve Value ile kullanım):

int? musteriNo = new int?();
if(musteriNo.HasValue)
{
 int siparisMusteriNo = musteriNo.Value;
} 

Örnek (?? operatörü ile kullanım):

int? musteriNo =new int?();
int siparisMusteriNo = musteriNo ?? 0;