Euler - 7

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

Orjinal Soru; By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10.001st prime number?

Türkçesi; İlk altı asal sayı: 2, 3, 5, 7, 11, ve 13, altıncı asal asal sayının 13 olduğunu görürüz.

10.001nci asal sayı kaçtır?

Önce siz çözmeyi deneyin, çözemezseniz

private static List<int> BulunanAsalSayilar = new List<int>();

private static bool AsalSayiMi(int Rakam) { bool AsalMi = BulunanAsalSayilar.TrueForAll(n => Rakam % n != 0); if (AsalMi) { BulunanAsalSayilar.Add(Rakam); }

return AsalMi; }

private static IEnumerable<int> TumAsalSayilariUret() { var SonucKumesi = from Rakam in Enumerable.Range(2, int.MaxValue - 1) where AsalSayiMi(Rakam) select Rakam;

return SonucKumesi; }

public static class Program { public static void Main(string[] args) { var Sonuc = TumAsalSayilariUret().Skip(10000).First(); Console.WriteLine(“10.001nci asal sayı : “ + Sonuc)

    Console.ReadLine();
} }

Kısa Sınav - 17

Aşağıdaki kod bloğunu çalıştırdığımızda ekranda hangi sonuçlar yazar?

Console.WriteLine(26 % 4 * 3);

Console.WriteLine(4 / 3 + 2);

var fiyat = 4; var indirim = 5;

Console.WriteLine(fiyat - indirim++);

byte rakam = 255;

Console.WriteLine(++rakam);

Windows 8 Metro Style ilk uygulamamız

Windows 8 Programlama makalelerinde ilk uygulamamızı geliştirmeye başlıyoruz.

Windows 8 Başlangıç Ekranımızda (Start Screen) Visual Studio 2011 üzerine tıklayarak, yeni bir Visual Studio 2011 başlatıyoruz.

File / New / Project menüsünden Windows Metro Style kategorisindeki Application proje şablonunu seçiyoruz ve MetroStyleIlkUygulama ismini vererek projemizi oluşturuyoruz.

Proje oluşturulduğunda Visual Studio 2011 varsayılan olarak MainPage.xaml dosyasını açıyor. Uygulamamızın başlangıç ekranı varsayılan olarak MainPage.xaml dosyasıdır.

Grid elementi içerisine bir button, bir de label eklemek için aşağıdaki satırları yazıyoruz;

<Button Content=”Mesaj Göster” FontSize=”28” Width=”250” Height=”80” HorizontalAlignment=”Center” /> <TextBlock x:Name=”MessageText” FontSize=”48” Foreground=”White” /></pre>

WPF ve Silverlight‘ta Label nesnesi oluşturmak için TextBlock nesnesi kullanmamız gerekiyor. Bu elementler ile ekranımıza Mesaj Göster metinli bir button ve metin içermediği için ekranda gözükmeyen bir textblock nesnesi koymuş olduk.

Fakat bu kontrolleri ekranda ortalayabilmek için bir StackPanel içerisine koymamız gerekiyor;

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" />
    <TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />
</StackPanel>

StackPanel ve Button elemanlarına verdiğimiz Alignment özellikleri sayesinde elemanları ekranda ortalıyoruz.

Son olarak Button element’imize

Click="Button_Click"

özelliğini ekleyelim. Böylece butona tıklanma event‘i ile tetiklenen bir method‘umuz oluyor.

MainPage.xaml.cs dosyasına;

private void Button_Click(object sender, RoutedEventArgs e)
{
    MessageText.Text = "Windows 8 üzerinde çalışan\r\nilk uygulamamız!!";
}

method’unu ekliyoruz.

Son olarak F5 tuşuna basarak projeyi test amaçlı çalıştırıyoruz. Uygulama açılışında ilk önce bekleme ekranı ekrana geliyor.

Fakat çok kısa süre içerisinde ilk ekranımız açılıyor.

Butona tıkladığımızda TextBlock metin ile doluyor.

Kodların tamamı;

<UserControl x:Class="MetroStyleIlkUygulama.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="768" d:DesignWidth="1366">

<Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button Content="Mesaj Göster" FontSize="28" Width="250" Height="80" HorizontalAlignment="Center" Click="Button_Click" />
        <TextBlock x:Name="MessageText" FontSize="48" Foreground="White" />
    </StackPanel>
</Grid>

</UserControl>


Dosya boyutu almak için Head isteğinde bulunmak

Uygulamalarımızda internet üzerindeki bir dosyanın boyut bilgisine ihtiyacımız olabilir.

Yapmamız gereken; dosyaya istekte bulunup Length özelliğinden dosya boyutu bilgisini almak.

var DosyaKonum = “/assets/uploads/2011/07/FPSOrnek.rar”;

WebClient wc = new WebClient(); var Dosya = wc.DownloadData(DosyaKonum);

int DosyaBoyut = Dosya.Length;</pre>

Bu yöntemin en önemli dezavantajı, dosyanın boyut bilgisini alabilmek için dosyayı gerçekten download etmemiz gerekiyor. Özellikle büyük boyutlu dosyalarda bu yöntem büyük problemlere yol açacaktır.

Aslında yapılan isteğin sonucunun Başlık (Header) bilgisinde dosya boyutu yer alıyor. Eğer Başlık‘tan (Header) boyut bilgisine ulaşabilirsek dosyayı download etmemize gerek kalmaz.

var DosyaKonum = "/assets/uploads/2011/07/FPSOrnek.rar";

var Request = WebRequest.Create(DosyaKonum);

Request.Method = "HEAD";

var Response = Request.GetResponse();

var DosyaBoyut = Response.Headers[HttpResponseHeader.ContentLength];


Öncelikle WebRequest sınıfının *static* Create() method'u sayesinde, parametresinde adresi verilmiş dosyaya bir **istek** oluşturuyoruz.

*Request* değişkeninin GetResponse() method'undan sonuç bilgisini almadan önce Method özelliğine **HEAD** değerini atıyoruz.

Böylece istek sonucunda, dosyanın içeriğinin değil **sadece başlık bilgisinin** bulunmasını sağlıyoruz.

HttpResponseHeader enum'ında yeralan **ContentLength** değeri ile *Response* değişkeninin Headers özelliğinden **dosyanın boyut bilgisine** ulaşabiliyoruz.

Windows 8 Programlama Ortamını Hazırlayalım

Windows 8 üzerinde geliştirme yapabilmemiz için öncelikle bilgisayarımıza Windows 8 ve Visual Studio 2011 kurmuş olmamız lazım.

Windows 8 Programlama makalemde kurulumlar ile ilgili bilgi vermiştim.

Eğer MSDN üyeliğiniz varsa, Visual Studio 2011 Ultimate Edition kurmanızı tavsiye ederim.

Kurulum penceresi sade hazırlanmış;

Kurulum tamamlandıktan sonra Visual Studio 2011‘imizi ilk defa çalıştırıyoruz;

Hemen hemen her Visual Studio sürümü ilk çalıştırıldığında bu ekrana benzer bir ekran ile karşılaşırız. Ben Visual C# Development Settings tercihini yaptım, Local Help Documentation seçeneğinden de None seçtim.

Kısa bir yapılandırmanın ardından Visual Studio 2011 Splash Screen ekrana geldi.

Başlangıç ekranımız Visual Studio 2010‘dan farklı değil, Visual Studio 2008‘den beri çok az değişiklik gösterdi.

Help / About Microsoft Visual Studio menüsünden Hakkında penceresini açtığımızda, bilgisayarımıza Visual Studio bileşenlerinin 11. versiyonlarının ve .Net 4.5 versiyonunun kurulu olduğunu görüyoruz.

File / New Project menüsünden yeni bir proje oluşturmak için New Project dialog kutusunu açtığımızda Metro Style proje şablonlarının geldiğini görüyoruz.

Bu ekranda Grid Application ve Split Application seçeneklerinden birini seçebiliriz.

Ofisten küçük bir görüntü; yeni proje şablonunu açtıktan sonra ilk dakikalar;

Windows 8 Programlama başlığını takip ederek özellikle Metro Style uygulama geliştirme konusunda daha ayrıntılı bilgiye sahip olabilirsiniz.

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı