2 – Problem Çözme ve Algoritmalar Ünitesi Ders Notu

Problem Çözme ve Algoritmalar Bilgisayar Bilimi dersinin ikinci ünitesidir. Aşağıda problem çözme ve algoritmalar ünitesine ait kitapta yer alan içeriklerin sadeleştirilmiş halini göreceksiniz. Problem çözme ve algoritmalar ünitesi problem çözme kavramını ve bu kavrama ilişkin yaklaşımları ele almaktadır. Problem çözme ve algoritma ünitesi ile programlama nedir, hata ayıklama nedir gibi soruların yanı sıra problem çözme süreçleri ve yöntemlerine ilişkin sorulara cevap aranmaktadır.

PROBLEM ÇÖZME ve ALGORİTMALAR
2.1. Problem Çözme Kavramları ve Yaklaşımlar
2.1.1. Programlama Nedir?

Bilgisayar bilimcileri genel olarak matematiksel sembolleri, işlemleri ve formülleri kullanır, mühendisler gibi tasarım yaparak farklı sistemler oluşturur ve bilim insanları gibi deney yaparak teknoloji desteği ile çözüm üretir. Bir bilgisayar bilimcisi için en önemli beceri problem çözme becerisidir. Problem çözme; problemleri formüle edebilme, farklı ve yaratıcı çözüm yolları önerebilme, çözümü̈ kesin ve doğru biçimde ifade edebilme becerisidir.

Bilgi İşlemsel Düşünme; bilgisayar biliminin kavramlarından yararlanarak problem çözme, sistem tasarlama ve insan davranışlarını anlama olarak tanımlanabilir. Ayrıca Bilgisayar Bilimi Öğretmenleri Birliği (Computer Science Teachers Association – CSTA) ve Uluslararası Eğitimde Teknoloji Topluluğu (International Society for Teachnology in Education – ISTE) tarafından tanımlandığı şekliyle bilgi işlemsel düşünme aşağıdaki özellikleri barındıran bir problem çözme sürecidir.

  • Problemleri bilgisayar veya başka araçlar yardımı ile çözebilir hâle getirme
  • Mantıklı bir şekilde verileri düzenleme ve çözümleme
  • Model ve benzetim desteği ile verileri sunma
  • Algoritmik düşünme çerçevesinde çözümleri otomatikleştirme
  • Kaynakları verimli bir şekilde kullanarak uygun çözümleri tanımlama, çözümleme ve uygulama
  • Bulunan çözümü farklı problemlere transfer etme ve genelleştirme

Bilgi işlemsel düşünme becerisi; problem çözümleme, veri sunma ve modelleme gibi bazı benzer kavramlar ile ilişkili görülmekte ve sadece bilgisayar bilimcileri için değil, herkes için gerekli temel bir beceri olarak tanımlanmaktadır. Farklı bir bakış açısı ile programlama; bilgisayarın donanıma nasıl davranacağını anlatan, bilgisayara yön veren komutlar ve işlemler bütünüdür. Kısaca yazılım geliştirme, test etme ve bakımını yapma sürecidir.

Bir programlama sisteminin iki bileşeni vardır:

  • Bilgisayara kurulmuş olan bileşen − programlama ortamı
  • Programcı tarafından oluşturulan algoritma ve program kodları

Kullandığımız programlama ortamı ile programcı tarafından kullanılacak kelime ve komutları oluşturur, program akışını ve mevcut durumu kontrol edebilir, adım adım işlemleri takip edebilir, oluşturduğumuz işlemleri genelleştirerek soyutlaştırabiliriz. Kullandığımız programlama dili ile yapmak istediğimiz işlemleri bilgisayarın anlayacağı biçimde ifade edebilir, işlemleri parçalara bölebilir, parçalardan farklı ve anlamlı bütünler oluşturabiliriz.

2.1.2. Program Nedir?

Program, yapılacak bir işlemi ya da hesaplamayı gerçekleştirmek için birbirini izleyen komut ya da yönergelerden oluşan yapıdır. İşlemler matematiksel ya da mantıksak olabilir. Örneğin bir formülün sonucunun hesaplanması ya da bir döküman içerisinde belirli bir metnin aranması gibi. Ayrıntılar programlama dillerine göre farklılaşsa bile belirli komutlar her dilde yer alır.

Girdi: Klavyeden, dosyadan veya başka bir aygıttan veri almadır.

Çıktı: Ekranda veriyi görüntüleme veya veriyi dosyaya veya başka bir aygıta göndermedir.

Matematik: Toplama, çarpma gibi bazı temel matematiksel işlemleri gerçekleştirmedir.

Koşullu Yürütme: Belirli durumları sınamak ve komutları uygun bir sıraya göre çalıştırmaktır.

Tekrarlama: Bazı eylemleri genellikle ufak tefek değişikliklerle yineleme işlemidir.

Programların çoğu, ne kadar basit ya da karmaşık olursa olsun temel olarak bu işlemlere dayalı olarak çalışır. Bu nedenle programlama, büyük ve karmaşık bir görevi bu temel komutlarla gerçekleştirebilecek kadar basit biçimde küçük alt görevlere bölme olarak tanımlanabilir.

2.1.3. Hata Ayıklama Nedir?

Programlama, karmaşık bir süreçtir ve programcılar programlamada hata (bug) yapabilirler. Programlama hatalarını bulma ve düzeltme işlemine hata ayıklama (debugging) denilir. Bir programda üç tür hata oluşabilir: Söz dizimsel hatalar, çalışma zamanı hataları ve anlam bilimsel hatalar.

  1. Söz dizimsel hatalar:

Söz dizimi, programın yapısı ve bu yapı hakkındaki kurallar demektir. Örneğin Türkçede bir cümle büyük harfle başlamalı ve uygun bir noktalama işaretiyle sona ermelidir. Bu kurallara uymayan cümlelere “Söz dizimi hatası içermektedir.” diyebiliriz. Programlama dilleri için söz dizimi, yoruma açık olmayacak şekilde kesin ve net ifadeler içermelidir. Aksi takdirde program, söz dizimi hatası verir ve programın doğru çalışmasını bekleyemeyiz.

  1. Çalışma zamanı hataları:

Bu hatalar ancak program çalıştırıldıktan sonra ortaya çıkar. Hesaplanması mümkün olmayan işlemler (sıfıra bölünme) ya da hiç gerçekleşmeyecek koşulların (5<3) yürütülmesi gibi durumlarda ortaya çıkar.

  1. Anlam bilimsel hatalar:

Bu durumda program, genellikle hata vermeden çalışır ancak çoğu zaman beklenen sonucu üretmez. Bu yüzden programı satır satır çalıştırarak, farklı adımlardaki çıktıları gözlemleyerek nerede mantık hatası yapıldığını bularak program doğru biçimde çalışana kadar bu hataları ayıklamak gerekir. Programlamayı öğrenirken kazanılacak önemli becerilerden biri de hata ayıklamadır. Yorucu olmasına rağmen, programlamada bilişsel yoğunluk gerektiren ilginç bir süreçtir. Hata ayıklama deneysel bir yaklaşımdır. Neyin hatalı gittiğine dair bir fikir oluştuğunda programı değiştirerek tekrar çalıştırırız. Böylece programlamaya yeni bir boyut daha kazandırmış oluruz. Programlama, program doğru biçimde çalışana kadar aşamalı olarak hata ayıklama sürecidir.

2.1.4. Günlük Hayatta Problem Çözme

Günlük hayatımızda problemlerimizi çözmek için yaşantımızı etkileyen pek çok karar veririz. Bu kararlar yalnızca yaşantımızı etkilemekle kalmaz, bazen yaşam kalitemizi ve geleceğimizi bile etkileyebilir. Örneğin karşılaştığımız problemler, televizyonda hangi kanalı seyretsem gibi basit de olabilir, hangi mesleği seçmeliyim gibi çok önemli de olabilir. Yanlış bir karar verilirse zaman ve kaynaklar boşa gidebilir, bu nedenle nasıl doğru karar verildiğini öğrenmek önemlidir. En iyi kararı vermek aslında problem çözmektir. İnsan hayatı aslında bir problem çözme sürecidir. Genellikle bir problemin birden fazla çözümü̈ vardır, her bir çözüm bir alternatif olarak düşünülebilir. Problem çözme, amaca ulaşabilmek için alternatifler arasından en uygun yolu belirlemektir. Alternatifler, farklı koşul ve beklentilere göre şekillenir. En uygun çözüm ise farklı koşul ve durumlar için değişiklik gösterebilir. Bu nedenle farklı kişiler ve problemler için çözüm önerileri de farklılık gösterebilir.

 

Problemler çözülmeye çalışılırken dikkate alınması gereken sınırlılıklar ve koşullar ile uyulması gereken kurallar vardır. Tüm bu veriler dikkate alınmaz ise doğru çözüme ulaşılamaz ya da problem geçici olarak göz ardı edilmiş olabilir. Bir problemi yazılım geliştirerek çözerken de çeşitli sınırlılıklar vardır: kullandığınız programlama dili, çalıştığınız ortam (kişisel bilgisayar, tablet vb.) ve performans (kullandığınız işlemci, hafıza, disk vb.). Bu nedenle programcılar için problem çözme, “bir dizi işlemi, belirtilen sınırlılıklara uygun biçimde gerçekleştirebilen programın yazılması” anlamına gelir. Programlamaya yeni başlayanlar işlemleri gerçekleştirip hedefe ulaşma konusunda daha fazla istekli olduklarından genellikle belirtilen sınırlılıklara uyma konusunda zorluk yaşayabilirler.

2.1.5. Problem Çözme Süreci

Problem çözme farklı biçimlerde düşünmeyi gerektiren bir eylemdir. Öncelikle klasikleşmiş bazı klasik bulmacaları ve bu bulmacaların çözümlerini inceleyelim.

2.1.5.1. Tilki, Kaz ve Mısır Çuvalı

Konuşacağımız ilk klasik problem, beraberindeki nesneleri nehrin karşısına taşıması gereken bir çiftçiyle ilgili bir bulmaca. Bu çiftçinin bir tilkiyi, bir kazı ve bir mısır çuvalını nehrin karşısına geçirmesi gerekmektedir. Çiftçinin bu işlemi gerçekleştirmek için küçük bir teknesi var ancak bu teknede çiftçi ile birlikte en fazla bir nesneye daha yer var. Ne yazık ki tilki ve kaz açtır. Bu yüzden tilki kaz ile yalnız kalamaz çünkü tilki kazı yiyebilir. Aynı şekilde kaz ve mısır çuvalı yalnız bırakılamaz çünkü̈ kaz mısırı yiyebilir. Bu koşullarda çiftçi nehrin karşısına tilki, kaz ve mısırı sorunsuz bir şekilde nasıl geçirebilir?

2.1.5.2. Sudoku

9×9 boyutlu bir tablo kısmen tek basamaklı (1-9 arası) sayı ile doldurulur ve oyuncu belirli kısıtlamalara göre hareket ederken yalnızca boş kareleri doldurmalıdır: Her bir satır ve sütunda, her rakam tam olarak bir kez yazılmalıdır ve her doldurulmuş 3×3 alanda her bir rakam tam olarak bir kez yer almalıdır. O zaman, verilen bir sudoku yapısındaki boşlukları 1-9 arasındaki her bir sayıyı; bulunduğu satır, sütun ve kare içinde yalnızca bir kez kullanılacak biçimde nasıl doldururuz?

2.1.5.3. Dikdörtgeni Parçalara Ayırma

Bir dikdörtgenden nasıl dik üçgenler oluşturabiliriz? Buna göre, bir dikdörtgeni bölerek, oluşturulabilecek dik üçgenleri şekil çizerek gösteriniz.

2.1.5.4. Engelli Yollar

Şekilde gösterilen A noktasından B noktasına gidebilmek için gri ile gösterilen alandan geçiş bulunmamaktadır. Buna göre A’dan B’ye gidebilmek için kaç farklı yol kullanılabilir?

2.1.5.5. Hanoi Kulesi

 

Problem Çözme ve Algoritmalar Ünitesi Ders Notu İndir

Bilgisayar Bilimi Kur 1 Kitabını İndir

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir