4 Ekim 2016 Salı

Algoritmada Kullanılan Terimler


Tanımlayıcı: Programcı tarafından oluşturulur. Programdaki değişkenleri, sabitleri, kayıt alanlarını, özel bilgi tiplerini vb. adlandırmak için kullanılan kelimelerdir. Tanımlayıcılar, yerini tuttukları ifadelere çağrışım yapacak şekilde seçilmelidir.

  1. İngiliz alfabesindeki A-Z veya a-z arasındaki 26 harf ile 0-9 arası rakamlar kullanılabilir. 
  2. Sembollerden sadece alt çizgi (_) kullanılabilir. 
  3. Tanımlayıcı isimleri harfle veya alt çizgiyle başlayabilir. 
  4. Tanımlayıcı ismi, rakamla başlayamaz veya sadece rakamlardan oluşamaz.

Değişken: Programın her çalıştırılmasında, farklı değerler alan bilgi/bellek alanlarıdır. Değişken isimlendirilmeleri, tanımlayıcı kurallarına uygun biçimde yapılmalıdır. Aşağıda çeşitli örnekler verilmiştir.

Dikdörtgenin uzun kenarının aktarıldığı değişken:
  • uzun_kenar,
  • UzunKenar,
  • uzunKenar
Bir öğrenciye ait ismin aktarıldığı değişken:
  • isim,
  • ogrenci_isim,
  • ogrenciIsim


Atama:Değişkenlere değer aktarma işlemidir. Değişkenlere atanan bu değerler daha sonra tekrar kullanılabilirler. Sağdaki Değer sonucu Değişken’e aktarılır. Bu durumda Değişken’in bir önceki değeri varsa silinir.

Sayaç: Bazı işlemlerin belirli sayıda yaptırılması ve üretilen değerlerin sayılması gerekebilir.
Bu tür sayma işlemlerine algoritmada Sayaç adı veriler.Sayaçlar da birer değişkendir.

Sayac=Sayac+1 Bu işlemde Sayac değişkenine 1 eklenmekte ve oluşan sonuç yine kendisine yani Sayac değişkenine aktarılmaktadır.


Döngü: Bir çok programda bazı işlemler, belirli ardışık değerlerle gerçekleştirilmekte veya belirli sayıda yaptırılmaktadır.
Programlardaki belirli işlem bloklarını, verilen sayıda gerçekleştiren işlem akış çevrimlerine “döngü” denir.
Örneğin; 1 ile 1000 arasındaki tek sayıların toplamını hesaplayan programda T=1+3+5 …. yerine 1 ile 1000 arasında ikişer artan bir döngü kurulur ve döngü değişkeni ardışık toplanır.




3 Ekim 2016 Pazartesi

İşlemler ve Operatörler

İşlemler 3’e ayrılır:
1-Matematiksel İşlemler
    Temel Aritmetik İşlemler: Toplama, çıkarma, çarpma, bölme.
    Matematiksel Fonksiyonlar: Üstel, logaritmik, trigono-metrik, hiperbolik vb.
2-Karşılaştırma İşlemleri
    Değişkenlerin büyük olma, küçük olma ve eşit olma durumlarını kontrol eden işlemlerdir.
3-Mantıksal (Logic) İşlemler
    «Ve, Veya, Değil» operatörleri hem matematiksel işlemlerde hem de karar ifadelerinde kullanılır.
    VE bağlacı ile söylenmek istenen her iki koşulun da sağlanmasıdır. VE bağlacı ile bağlanmış önermelerden en az birinin yanlış olması sonucu yanlış yapar.
    VEYA bağlacı ile bağlanan koşullardan bir tanesinin doğru olması sonucu doğru yapar.
DEĞİL bağlacı; doğruyu yanlış, yanlışı doğru yapar.

Örnek: Yazılım departmanında çalışan erkek personellerden yaşı 30’un üzerinde olanları ekrana yazdır.

Eğer;
------1.Koşul-------          ------2.Koşul----
(perCinsiyet = Erkek) VE   (perYas > 30)       ise ekrana yazdır.

30 Eylül 2016 Cuma

Mantıksal Yapılar

Bir bilgisayar programının geliştirilmesinde kullanılan programlama dili ne olursa olsun bu programların akış şemalarında genel olarak üç basit mantıksal yapı kullanılır.

1.Sıralı Yapı: Sıralı yapı, hazırlanacak programdaki her işlemin mantık sırasına göre nerede yer alması gerektiğini vurgular. Bu yapı sona erinceye kadar ikinci bir işlem başlayamaz.





2.Karar Verme Yapısı: Birden fazla sıralı yapı seçeneğini kapsayan modüllerde, hangi şartlarda hangi sıralı yapının seçileceğini belirler.





3.Tekrarlı Yapı: Algoritma içinde, bazı satırlar tekrarlı şekilde işlem görüyorsa, bir döngü söz konusudur. Döngülere belirli bir koşul geçerli olduğu sürece devam eden eylemleri tanımlamak için başvurulur.




Algoritma Gösterim Şekilleri

1.Düz yazı ile gösterim,
2.Sözde kod (pseudocode) ile gösterim,
3.Akış şeması ile gösterim.


Düz Yazı ile Gösterim: Çözülecek problem, adım adım metin olarak yazılır.
Her satıra numara verilir.  ‘BAŞLA’ ile başlanıp ‘BİTİR’ ile sonlandırılır.

Örnek:
1.BAŞLA
2.Yerinden kalk
3.Yönün tahtaya doğru mu?
    Hayırsa tahtaya dön
    Evetse 4. adıma git
4.Tahtaya doğru yürü
5.Tahtaya geldin mi?
    Hayırsa 4.adıma git
    Evetse 6. adıma git
6.Kalemi al
7.Adını yaz
8.BİTİR

Örneğin amacı, adımların tutarlılığını ve mantıksal sırasını göstermektir.
Burada emirler, belli sorgulamalar yapılarak ve mantıksal bir sıra içinde verilmiştir.
Yerinden kalk emri verilmeden kişiden yürümesi istenemez.
Kalemi almadan adını yaz emrinin verilmesi doğru olmaz.
Sorgulamalarla da işlemi yapıp yapmadığı kontrol edilmiştir.
Aslında bilgisayar bu tür işleri yerine getiremez.
Kullanıcılar bilgisayarlara belli girdiler verir.
Onlar da programcının verdiği adımlara göre bu girdiler üzerinde matematiksel ve mantıksal işlemler yaparak bir çıktı üretirler.


Sözde Kod (Pseudocode) ile Gösterim

Herkesin anlayabileceği ve rahatlıkla bir programlama diline çevrilebilecek basit komutlardan oluşan bir dildir.
Sözde kodun temel işlevi program geliştirmeye geçmeden algoritmayı oluşturmak ve üzerinde tartışabilmektir.
Sözde kodlar, doğrudan konuşma dilinde ve programlama mantığı altında, eğer, iken gibi koşul kelimeleri ve > = < gibi ifadeler ile beraber yazılır.
Programda kullanılacak elemanları temsil etmek üzere uygun isimler veya değişkenler seçilir.
Cebirsel notasyon ve kararlar kullanarak aritmetik işlemler gerçekleştir.




Akış Şemaları ile Gösterim

Bir algoritmanın görsel şekiller ve sembollerle ifade edilmiş haline «Akış Şemaları» adı verilir.
Akış şeması sembolleri ANSI (American National Standards Institute) standardı olarak belirlenmiş ve tüm dünyada kullanılmaktadır.
Algoritma doğal dille yazıldığı için herkes tarafından anlaşılamayabilir ya da başka anlamlar çıkarılabilir. Ancak akış çizgelerinde her bir şekil standart bir anlam taşıdığı için farklı yorumlanması mümkün değildir.






Algoritmaların Sahip Olması Gereken Genel Özellikler


Algoritmaların temel amacı giriş bilgisini işleyerek çıkış bilgisi oluşturmaktır. Ancak her durumda bir algoritmanın çıkış bilgisi istenenleri tam olarak karşılayamaz. Böyle durumlarda ilk algoritmanın ürettiği çıkış bilgisi başka bir algoritmaya giriş bilgisi olarak gönderilir ve böylece kullanıcı istediği bilgiye sahip olmuş olur.


Giriş/Çıkış Bilgisi: Algoritmalarda giriş ve çıkış bilgileri olmalıdır. Dışarıdan gelen verilere giriş bilgisi denir. Bu veriler algoritmada işlenir ve çıkış bilgisini oluşturur. Çıkış bilgisi her algoritmada mutlaka vardır. Algoritmaların temel amacı giriş bilgisini işleyerek çıkış bilgisi oluşturmaktır. Ancak her durumda bir algoritmanın çıkış bilgisi istenenleri tam olarak karşılayamaz. Böyle durumlarda ilk algoritmanın ürettiği çıkış bilgisi başka bir algoritmaya giriş bilgisi olarak gönderilir ve böylece kullanıcı istediği bilgiye sahip olmuş olur.  

Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmelidir.
Algoritma sonsuz döngüye girmemelidir.

Kesinlik: Her komut, kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.
Algoritmanın her adımı anlaşılır, basit ve kesin bir biçimde ifade edilmiş olmalıdır.
Kesinlikle yorum gerektirmemeli ve belirsiz ifadelere sahip olmamalıdır.


Etkinlik: Yazılan algoritmalar etkin ve dolayısıyla gereksiz tekrarlardan uzak oluşturulmalıdır. Bu algoritmanın temel özelliklerinden birisidir. Ayrıca algoritmalar genel amaçlı yazılıp yapısal bir ana algoritma ve alt algoritmalardan oluşturulmalıdır. Böylece daha önce yazılmış bir algoritma daha sonra başka işlemler için de kullanılabilir.
Buna örnek vermek gerekirse eğer elimizde, verilen n adet sayının ortalamasını bulmakta kullandığımız algoritma varsa bu algoritma, bir sınıfta öğrencilerin yaş ortalamasını bulan bir algoritma için de kullanılabilmelidir.

Başarım ve Performans: Amaç donanım gereksinimi (bellek kullanımı gibi), çalışma süresi gibi performans kriterlerini dikkate alarak yüksek başarımlı programlar yazmak olmalıdır. Gereksiz tekrarlar ortadan kaldırılmalıdır. Bir algoritmanın performans değerlendirmesinde aşağıdaki temel kriterler göz önünde bulundurulur.
Birim İşlem Zamanı
Veri Arama ve Getirme Zamanı
Kıyaslama Zamanı
Aktarma Zamanı


27 Eylül 2016 Salı

Algoritma Nedir?

Algoritma:  Algoritma kelimesinin matematikte kullanılan "logaritma" kavramıyla bir ilgisi yoktur. Algoritma kelimesi, IX. yüzyıl ünlü Türk bilgini matematikçi "Ebu Cafer Muhammed bin Musa El - Harezmi"nin isminin kısaltılmasından türetilmiştir. "El - Harezmi" kelimesinden esinlenerek İngilizce'de "algorithm" denilmiştir.

Algoritma en geniş anlamıyla, verilerden hareketle istenen sonucun nasıl alınacağını gösteren bir uygulama metodudur.
Algoritma; çözüm yolu aranan problemin herhangi bir adımında ne gibi işlemler yapılacağının tıpkı bir yemek tarifinde olduğu gibi yazıya dökülmüş şeklidir. Algoritmada her adımda giriş veya çıkış bilgileri, bölme, çarpma, aktarma, test ve benzeri işlemler yer almalıdır. Belli bir sayıda adımdan sonra algoritma mutlaka son bulmalıdır. Algoritma anlatımda kullanılan cümlelerin kolay, basit ve benzer konular için de geçerli olmasına dikkat edilmelidir. Program geliştiricisi çözümü istenen probleme uygun algoritmayı kurabilmek için, çeşitli kaynaklardan faydalanabilir. Benzer programlar verimli bir kaynak olabilir. Gelişmiş ülkelerde, bilgisayar kitapları ve diğer süreli yayınlar, belirli problemlere ilişkin algoritma yayınlamaktadırlar. Algoritmayı paket program kütüphaneleri şeklinde bazı büyük pazarlardan da elde etmek mümkündür. Nihayet, çok fazla rafine olmuş bazı programlama dillerinde, program geliştirme aşamasında algoritmaya ihtiyaç duyulmaz. Zira, bu tür dillerde algoritma, programlama dilinin tanımı içerisinde yer almıştır.


19.yy da İranlı Musaoğlu Horzumlu Mehmet (Alharezmi adını Araplar takmıştır) problemlerin çözümü için genel kurallar oluşturdu. Algoritma Alharezmi'nin Latince okunuşudur.

Basit tanım: Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.
Geniş tanım: Verilen herhangi bir sorunun çözümüne ulaşmak için uygulanması gerekli adımların hiç bir yoruma yer vermeksizin açık, düzenli ve sıralı bir şekilde söz ve yazı ile ifadesidir. Algoritmayı oluşturan adımlar özellikle basit ve açık olarak sıralandırılmalıdır.

Algoritmaya Dair


Algoritmanın etkin bir şekilde oluşturulması Program yazma adımından çok daha önemlidir.
Hazırlanan algoritmanın programlama diliyle yazılması işin basit kısmıdır.
Tasarladığınız algoritma iyi değilse, kullandığınız dilin hiçbir önemi yoktur (C, C++, C#, Java, Visual Basic vb.)
Bir sorunun çözümü için birbirinden farklı birden fazla sayıda algoritma hazırlanabilir. Bu da gösteriyor ki herhangi bir problemin çözümü için birbirinden farklı yüzlerce bilgisayar programı yazılabilir.

Algoritma Türüne Ait Örnekler


Arama algoritmaları
Bellek yönetimi algoritmaları
Bilgisayar grafiği algoritmaları
Evrimsel algoritmalar
Genetik algoritmalar
Kriptografik algoritmalar
Optimizasyon algoritmaları
Sıralama algoritmaları
Veri sıkıştırma algoritmalar
Veri madenciliği algoritmaları
İş zekası algoritmaları
Astronomi algoritmaları
Dinamik programlama algoritmaları
Sağlık bilimleri algoritmaları
Fizik algoritmaları
Veritabanı algoritmaları
İşletim sistemi algoritmaları

Descartes'ın Problem Çözme Bakış Açısı


Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayrılmalıdır. Descartes’in "Discourse on Method" isimli kitabında problem çözme teknikleri şu dört madde ile özetlenir:
Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının.
Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün.
Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz.
Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun.