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#, Programlama
euler, fibonacci, generic, IEnumerable, lambda, long, return, static, sum, where, while, yield
Yazdığımız uygulamalarda dosya sisteminde arama yapmaya ihtiyaç duyabiliriz. Bu durumda genelde döngüler yazarız. Peki LINQ kullanamaz mıyız? Üzerinde biraz çalıştıktan ve araştırma yaptıktan sonra, aşağıdaki kodu elde ettim;
private IEnumerable<FileInfo> DosyaListesi(DirectoryInfo KokDizin, string Uzanti, string DosyaAdiParcasi)
{
foreach (var f in KokDizin.GetFiles().Where(Dosya => Dosya.Extension == Uzanti && Dosya.Name.Contains(DosyaAdiParcasi)))
yield return f;
foreach (DirectoryInfo d in KokDizin.GetDirectories())
foreach (var f in DosyaListesi(d, Uzanti, DosyaAdiParcasi))
yield return f;
}
Gördüğünüz gibi fonksiyon, parametre olarak aramaya başlanacak kök dizini, arama yapılacak dosyanın uzantısını ve dosya isminde bir parçayı alıyor, geriye FileInfo sınıfında liste döndürüyor.
İlk foreach döngüsünde kök dizinde parametre ile alınmış kriterlere göre arama yapılıyor ve yield anahtar kelimesi ile, bulunan her sonuç dönüş kümesine ekleniyor.
İkinci (ve üçüncü) foreach döngülerinde ise, recursive (kendini tekrarlamalı) olarak DosyaListesi() fonksiyonu kendi kendisini çağırarak, arama işlemini alt klasörlerde de yapıyor.
C#, Programlama
csharp, directoryinfo, döngü, extension, fileinfo, foreach, getdirectories, getfiles, linq, method, recursive, return, yield
Geçen aylarda BilgeAdam‘da bir öğrencimin sorduğu soru geldi aklıma. Soru aslında çok basit, fakat farkettim ki, internette bu konu ile ilgili pek kaynak yok. Bari kendim yazayım dedim. Soru şu;
Bir method'dan geriye true/false değer döndürmem lazım.
Method içerisine yazdığım kodları try-catch-finally blokları içerisine almam gerekiyor.
Eğer try içerisinde hata oluşmazsa, geriye true değer döndüreceğim. Hata oluşur ve kod catch bloğuna girerse false değer döndüreceğim.
Ama finally kod bloğunda yapmam gereken işler var. (Açık bağlantıları kapatmak, vs.)
Eğer try-catch içerisinde return ifadesini kullanırsam, finally bloğundaki kod çalışır mı?
Sorunun doğru cevabı için; Devamını oku…