17 Aralık 2015 Perşembe

Algoritma Örneği

Merhaba arkadaşlar, bu makalemizde yeni bir örnek üzerinde algoritmamızı kurguyalım. Ardından Visual Studio ortamında bir Console projesi üzerinde örneğimizin kodlarını yazalım. Bu makalenin daha faydalı olabilmesi için öncelikle  Algoritma Nedir ve Algoritma Örneği makalesini okumanızı tavsiye ederim.
Yeni örneğimizde kullanıcı tarafından klavyeden girilen iki sayıdan büyük olanı küçük olana bölelim ve bölümü ekrana yazdıralım. Visual studio ortamına geçmeden önce problemin algoritmasını yazmamız gerekecektir. 

Dilerseniz şimdi algoritmasını yazmaya başlayalım.
1.Başla
2.Girilen sayıları bellekte tutabilmek ve gerektiğinde ulaşabilmek için sayısal değerleri tutabilecek 3 tane değişken tanımlayalım. değişkenler sayı1,sayı2 ve sonuç bilgileri içindir.
3.Kullanıcıdan ilk sayıyı iste
4.Kullanıcının girdiği sayıyı değişkenlerden ilkine atama işlemi.
5.Kullanıcıdan ikinci sayıyı iste
6.Kullanıcının girdiği ikinci sayıyı diğer değişkene ata
7.İki sayıdan büyük olanı tespit etme
8.Büyük olan sayıyı bulduğumuz için diğer sayının küçük olandır. Artık büyük sayıyı küçük sayıya bölme işlemi
9.Bölüm sonucunu ekrana yazdıralım.
10.Dur

Evet gördüğünüz gibi problemin çözümü için 10 tane adımdan oluşan bir algoritma yazmış olduk. Şimdi bunun kodlarını yazalım. Visual studio ortamına geçip bir console projesi oluşturalım. Projenin adı BolmeIslemi olsun.
















Proje şablonu olarak Console seçelim.





















Kodlarımızı main içerisine yazmamız gerekecektir. Klavyeden kullanıcı tarafından girilen değerlerden büyük olan küçük olana bölünür. Burada bulunan bölüm değeri sonuç değişkeninin içerisine atanır.




















Eğer ondalıklı değerlerin ekranda görülmesi sırasında veri kaybı yaşanmasını istemiyorsak böyle bir durumda sonuç değişkeninin ondalıklı değerleri tutabilmesi için o tipten bir değişken tanımlamamız gerekecektir. Değişkeni tanımlarken değişken tipini double ya da float olarak belirtmemiz durumunda sonuç ondalıklı ise herhangi bir veri kaybı gerçekleşmeyecektir. Double ile float tiplerinin arasındaki fark bellekte kapladıkları alanlardır. Double bellekte 64 bit yer kaplarken float 32 bit yer kaplıyor. 

Bu makalemizde yeni bir algoritma örneği yazmış olduk. Bir sonraki makalemizde görüşürüz. İyi Çalışmalar. :)

16 Aralık 2015 Çarşamba

Algoritma Nedir ve Algoritma Örneği


Merhaba arkadaşlar,  bu makalemizde algoritma nedir, algoritmayı neden yazarız ve algoritmayı yazarken dikkat etmemiz gereken kurallardan bahsedeceğim. Sonrasında algoritma nasıl olmalıdır sorusuna da cevap bulabileceğiniz minik bir örnek uygulama yapacağız.
Programlama ortamına yeni adım atmışsanız ve bu konular hakkında hiç bilginiz yokken kendinizi algoritma dersi içerisinde bulduysanız size göre iş biraz zor gözüküyor gibi olabilir. Bu tür karmaşıklıklardan uzak durmanızı ve acilen dersi anlamaya odaklanmanızı öneririm. :)
Hadi ısınma turumuzu tamamladığımıza göre algoritma nedir diyerek başlayalım. Birçoğunuz özellikle bu yıl üniversiteyi seçenler ilk kez bu derste adını duymuş olabilirler. Yazılım ile uğraşacaksanız bundan sonra sıkça duyacağınız bu kavram nedir?
Algoritma dediğimiz kavram, bir problemi çözmek veya belirli bir amaca ulaşmak için çizdiğimiz yoldur. Mevcut bir problemin çözümü sırasında izlenecek olan adımlardır bir diğer tanımlamayla algoritma. Problemin adımlarını belirlerken başlangıç ve son arasındaki diğer olaylar sırayla yazılır. Adımları yazarken dikkat etmemiz gereken ise mantıksal olarak sıradır. Düşündüklerimizi adımlar halinde yazmaktır.  
 Çok sık göreceğiniz algoritma bir programlama dili değildir. Sadece problemin çözümlenmesi için gerekli olan adımların sırayla belirtilmesidir. 
Hadi bir algoritma örneğinden bahsedelim. Arkadaşlarınızla buluşmak için dışarı çıkacaksınız hava durumuna göre ne giyeceğinize karar vermeniz gerekecek. Böyle bir senaryonun algoritmasını yazalım.
     1. Başla
     2. Akıllı telefonundan hava durumu uygulamasına bak.
     3. Hava sıcaklığını öğren.
     4 .Eğer hava sıcaklığı 20 derece üzerindeyse tshirt giy.
     5. Eğer hava sıcaklığı 20 dereceden düşükse kazak giy.
     6. Son
Dilerseniz şimdi bir örnek uygulama yapalım. 
Problem: Bir bakteri her 10 dakikada bir mitoz bölünüyor. Kullanıcının belirleyeceği kadar zaman geçtikten sonra, kaç adet yeni bakteri oluştuğunu hesaplayan programı yazınız. 
Bu tarz bir problemle karşılaştığımız zaman yapmamız gereken bizden istenen problemi çözüm aşamasında hangi işlemleri tek tek yaparsak bunları belirtmemiz gerekecektir.

  1. Başla
  2. Kullanıcının girdiği dakika bilgisini her 10 dakikada bir bölünme gerçekleşiyorsa kaç kez bölündüğünü bulmak için girilen değeri 10’a bölerek bölünme adedini bulma.(Bakteri bölünme hızı 10 dakika)
  3. Bakteri mitoz bölünme ile her seferinde iki farklı bakteri oluşturduğu için toplam kaç farklı bakteri oluştuğu hesaplanırken 2 üssü şeklinde 2.adımda bulunan bölünme adedi şeklinde hesaplanıyor olması gerekecektir. (2 üssü bölünme adedi)
  4. Dur
Algoritmayı da yazdığımıza göre şimdi bunun programını yazalım. Programı yazarken programlama dili olarak C# uygulama geliştirme ortamı olarak da Visual Studio kullanacağım.
File menüsü altından bir New Project diyelim. 














Şablon olarak kendimize bir Console projesi oluşturalım. Projenin isimlendirilmesi kısmında Name ve Solution Name isimlerini verelim. Bilgisayarda bu projenin nereye kaydedildiği bilgisini de görüyor olacağız.
















Projemizin türünü belirlediğimize göre artık kodlamayı yapabiliriz.
Kullanıcı etkileşimli bir örneğimiz olduğu için yapmamız gereken kullanıcıdan “Kaç Dakika” bilgisini alıyor olmamız gerekecektir. Kullanıcının girmiş olduğu değere göre kaç tane yeni bakteri oluştuğunu bulabiliriz. Kullanıcı tarafından girilen değeri, bakterinin 10 dakikada bir bölündüğünü göz önüne alarak, kaç kez bölünme işleminin gerçekleştiğini bulmak için kullanacağız. Bu işlemi yapan bir metod hazırlayalım.
         1. Metoda, bölünme işleminin yapılacağı toplam süreyi saniye cinsinden alan bir parametre tanımlayalım. (int sure)
         2. Girilen bu değer metod içerisinde kullanılacaktır. Her 10 dakikada bölünme işlemi gerçekleştiği göz önüne alınarak bu girilen değerin kaç kez bölünme gerçekleştirdiği hesaplanır. (sure/10)
         3. Her bir bakterinin mitoz bölünme sonucu 2 tane yeni bakteri oluşturduğu bilgisini daha önceden bildiğimizi varsayarak bölünme adedi kadar yeni bakteriler oluştuğu düşünülür ve bunu hesaplamak adına 2 üssü bolünme adedi bilgisi kullanılır.
Tanımlamış olduğumuz metodu main dışarısına class içerisine yazıyor olmamız gerekecektir.











Bir Console projesinde yazmış olduğumuz kodları Visual Studio ortamında çalıştırmak için kullanmamız gereken bazı yapılar mevcuttur.
         1. CTRL+F5 ile çalıştırabiliriz.
         2. F5 ile çalıştırırsak kod hemen derlenip çalışacak ve birden kapanacaktır. Bu konsol ekranı görebilmemiz için Console.Read() komutunu kullanabiliriz.
         3. Visual Studio File menüsü altındaki sırada bulunan Start’a basarak çalıştırabiliriz. Yine ekranın hemen kapanmaması için Console.Read() komutunu kullanabiliriz.
Console projelerde uygulamayı çalıştırdığımız anda kodlar main içerisinde sırasıyla satır satır çalışır ve main’den çıktığı anda uygulama kapanır. Dolayısıyla kodları main içerisine yazmamız gerekecektir. Main dışarısına yazdığımız metoda çağrıda bulunmak istersek yine main tarafından çağırmamız gerekecektir.








Kullanıcı uygulamayı çalıştırdığı anda uygulama hakkında bilgi alması ve ondan “Kaç Dakika” bilgisini girebilmesi için ekrana Console.WriteLine() komutunu kullanarak bilgi yazdıralım.




Metoda BolunmeHesapla ismini verelim bu isim bizim için metodu kullanmak istediğimiz zaman ulaşabilmemiz için gerekli olan o metodu çağırmaya yarayan ifadedir.
     Programını da tamamlamış olduk. İyi Çalışmalar bir sonraki makalemizde görüşmek üzere :) 

12 Kasım 2015 Perşembe

Web Servis Kullanımı


Merhaba arkadaşlar, kişi bilgilerini tutan bir veritabanı oluşturalım. Tablonun kolonları id,ad,soyad,telefon bilgilerinden oluşsun. Bu bilgileri çekebilmemize yardımcı olacak bir stored procedure oluşturalım. Sonrasında web servis kullanarak verileri çekip
 web tarafından gösterelim.





Stored Procedure oluşturalım dışarıdan id değeri alıp o id değerine göre bilgi getiren SPBILGILERIGETIR isimli bir stored procedure yazalım. 


Yeni bir webproject oluşturalım. Bu projenin içerisine bir tane .asmx uzantılı servis dosyası ekleyelim.

Servis yapıları metotlara online olarak ulaşabilmemizi sağlayan bir yapıdır.

Veri tabanımızda bulunan bilgileri çekeceğimiz alanlar için projemizde bir sınıf oluşturalım. Bu sınıfı oluşturmamızın amacı veri tabanından gelen bilgileri bir sınıf üzerinde tutarak kullanıcıya göndermemizdir.

Projeye sağ tıklayıp bir class ekleyelim.
Class id,ad,soyad,telefon bilgilerinden oluşsun.

Web servisimiz içerisine kişilerin bilgilerini getiren kodları ekleyelim.





Sonra web servisimizi çağırırsak xml olarak o kişinin bilgilerini bize döndürecektir.


15 Ekim 2015 Perşembe

Algoritma Örnekleri


Algoritma, bilindiği üzere problem çözümünde kullanılan sıralı basamaklardır.

Aşağıda bazı algoritma örnekleri yer almaktadır. 



  • Yıldız Teknik Üniversitesi tarafından hazırlanmış algoritma örneğine ulaşmak için tıklayınız

  • Ayran Yapma Algoritması







  • Çay Demleme Algoritması








  • MEB tarafından yapılan sınavda sorulan algoritma sorusu 














  • Yüz Yapma Algoritması














  • Civciv Yapma Algoritması








  • Crack the code Algoritması




















  • Kurabiye Yapma Algoritması



















  • Uyanma Algoritması

1 Ekim 2015 Perşembe

Entity Framework İle Code First Yaklaşımı

Linq To SQL gibi Entity Framework mimariside biz yazılımcılara oldukça hız kazandırmakta ve veritabanı işlemlerinde atılan bir çağın basamaklarını teşkil etmektedir. Haliyle biz yazılımcılar ister istemez bu mimarilere yönelmekte ve meraklarımızın yanında çalışmalarımızı da bu mimarilerle sürdükmekteyiz. Tabi günümüzde bir yapı yahut mimariye yönelirken kendimize uygun prensip ve yaklaşım seçmemiz yaşayacağımız karışıklığı ortadan kaldıracaktır. Burada demek istediğim o ki, günümüzde her mekanizmasının birden fazla yaklaşımı ve prensibi mevcut olduğundan, öğrenme sürecinde kaçınılmaz olarak kaynakların farklılıkları kafanızı karıştıracaktır. İşte bunun sebebi, her kaynağın farklı bir yaklaşımı merkez edinmesindendir.

Entity Framework mimarisinde temelde üç adet yaklaşım mevcuttur.

Code First
Database First
Model First
Bu yazımızda Code First yaklaşımı üzerine duracağız. Zamanla diğer yaklaşımlar üzerinde de istişaremizi ederiz diye umuyorum.

Code First Nedir?
Veritabanı ile Programlama dili arasında bağ kuran bir tekniktir. Projenizde veritabanı işlemlerinizi mümkün mertebe Visual Studio tarafında kod yazarak gerçekleştirmenizi sağlayan bir yaklaşımdır. Bu yaklaşım sayesinde veritabanı arayüzü ile yazılımcı arasında ilişki minimize edilmektedir.

Code First yapısında programlama dilindeki “class” yapıları veritabanındaki “tablo” yapılarına, “property” yapıları ise veritabanındaki “kolon” yapılarına denk gelmektedir.

Ayrıca Attribute’lar sayesinde veritabanı yapılarına Validationlar uygulanabilmekte ve kolonlara belirli şartlar veyahut kısıtlamalar koyulabilmektedir.

En önemlisi ise projenizdeki modelin oto kontrolünü elinizde hissetmenize ve tam hakimiyetle istediğiniz gibi kullanmanıza olanak tanıyor. Database First yaklaşımı Linq To SQL yapısındaki gibi sürükle bırak mantığıyla çalışmakta ve herşeyi otomatik halletmektedir. Eee bir yazılımcının en büyük arzusu; tez işte tam hakimiyet… İşte Code First böyle bir çizgiye sahiptir.

Projeye Entegrasyonu ve Code First Yapısının İnşası
Öncelikle yapmamız gereken, üzerinde çalıştığımız projeye Entity Framework Nuget paketini eklemektir.

“Tools” -> “Nuget Package Manager” -> “Manage Nuget Packages for Solution…” kombinasyonunu takip edin.








Açılan pencerede aşağıdaki gibi “entity” anahtar kelimesini aratın. Listede karşınıza çıkan “EntityFramework” paketini Install ediniz.








Yüklemeyi gerçekleştirdikten sonra gerekli Entity Framework referansları projeye entegre edilmiş bulunmaktadır.
Şimdi sıra geldi Code First yapısıyla bir model oluşturmaya. Haliyle oluşturma aşamasında inşa sürecinide görmüş olacağız.
Hatırlarsanız eğer Code First yapısı veritabanı işlemlerini programatik olarak gerçekleştirmemize yarayan bir yaklaşım sergilemekteydi. O halde örnek olarak çalışacağımız projede hem veritabanı oluşturacağız, hem de Code First yapısının diğer nimetlerinden faydalanacağız.

Code First ile tüm modele hakimiyet sağlamanın ekstra getirisi kodlara disiplinli bir hiyerarşik düzen sağlamanın sorumluluğu getirmesidir. Haliyle modele tam hakimeyet demek, a’dan z’ye biz kodlayacağız demek. O yüzden entitylerimi(yani tabloları) “Entity” klasörüne, yazılım ile server arasında iletişimi sağlayacak olan Context sınıfını da “Context” klasörüne oluşturacağım.
Şimdi Code First ile bir veritabanı oluşturmayı ve bu veritabanı içerisine bir tablo eklemeyi görelim.


class OrnekTablo
{
    public int ID { get; set; }
    public string Kolon1 { get; set; }
    public string Kolon2 { get; set; }
}

Öncelikle tablomuzu temsil eden sınıfımı oluşturdum. Şimdi veritabanı ile bağlantı kuracağımız Context sınıfını oluşturuyorum.


class OrnekVeriDbContext : DbContext
{
    public DbSet<OrnekTablo> OrnekTablos { get; set; }
}

Context sınıfımızı incelerseniz eğer DbContext sınıfından türemektedir. Bunun sebebi, Entity Framework mimarisinin nimetlerine bu sınıfın mirasından erişebilecek, ayriyetten ilgili sınıfımızın bir Context sınıfı olmasını sağlayacaktır. “OrnekVeriDbContext” sınıfına verdiğimiz isim bizim için oldukça önemlidir.
Code First yapısında en temel nokta, veritabanındaki tablolaları temsil edecek Generic yapıdaki DbSet tipinden propertyler olarak tutmasıdır. Yukarıda gördüğünüz “OrnekTablos” isimli property, bizim “OrnekTablo” isimli tablomuzun, veritabanındaki fiziksel yansımasını oluşturacaktır.
İşte en temelde de olsa Code First yapısında bir veritabanı dizayn ettik ve sıra bu veritabanını oluşturmaya geldi. Peki… Oluşturduğumuz bu yapı, hangi Server’da hangi isimde veritabanı oluşturacağını biliyor mu? hayır…
İşte bu bildiriyi de eğer web kısmında çalışıyorsanız “web.config” dosyasında, yok eğer masaüstünde takılıyorsanız “app.config” dosyasında belirtebilirsiniz.



<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="OrnekVeriDbContext" connectionString="Server=.;Database=OrnekVeritabani;Trusted_Connection=true;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>



Yukarıdaki app.config dosyasına “connectionStrings” node’ı eklenerek gerekli ayarlama yapılmıştır. Tabi, sizlerin net görebilmesi benimde net izah edebilmem için ilgili parçayı aşağı almamız uygun olacaktır.


.
.
.
  <connectionStrings>
    <add name="OrnekVeriDbContext" connectionString="Server=.;Database=OrnekVeritabani;Trusted_Connection=true;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
.
.
.


Gördüğünüz gibi bir connectionStrings node’ı açıyor ve içerisine ekleme yapıyoruz. “name” özelliğine Context sınıfımızla birebir aynı ismi veriyoruz. Bunda zorunlu değiliz lakin başka Context’lere nazaran karışıklığı önlediği için tavsiye ediyorum. “connectionString” Attribute’una bildiğiniz Provider’ımızı yazıyoruz. Ama burada dikkat!!! Yazdığınız bu Provider’da ki veritabanı olmayan bir veritabanı olması gerekiyor. Olması gerekiyor ki, Code First yapısı kendisi oluşturabilsin. Bunların yanında “providerName” Attribute’u sayesinde ilgili bağlantının System.Data.SqlClient kütüphanesinde çalışacağını, yani SQL Server olduğunu belirtmiş oluyoruz.
Bu işlemlerden sonra Program.cs sınıfında “OrnekVeriDbContext” sınıfından bir nesne üretip ilk oluşumu seyredebiliriz.


class Program
{
    static void Main(string[] args)
    {
        OrnekVeriDbContext Veri = new OrnekVeriDbContext();
        Veri.Database.Create();
    }
}

Yukarıdaki kod bloğunu çalıştırdığımız zaman neler olmuş bakalım



SQL Çalışma Sorularının Çözümü

 -Ürünler tablosundaki ürünlerden Rengi siyah,silver ya da multi renkte olanları fiyat bilgisine göre büyükten küçüğe getirilip gösterilecek...