PROBLEM ÇÖZME SÜRECİ

9. sınıflar bilgisayar dersi konusu. Problem çözme teknikleri. Planlama, tekrar ifade etme, parçalara ayırma, benzerlikten yararlanma ve deneme yapma kavramları. Konu anlatımı.


Çözüm bekleyen her soru bir problemdir. Bir problemi çözmek için yapılan işlemler dizisine problemin çözüm yolu denilir. Problemin ifade edilmesinden, çözümüne kadar geçen süre problemin çözüm sürecidir. Bir problem basit bir matematik sorusu olabileceği gibi karmaşık bir algoritma sorusu da olabilir. Konumuz bilgisayar programlama olduğundan problemleri daha çok programlama üzerinden ele alacağız. Problem çözme sürecindeki başlıkları mümkün olduğunca somutlaştırmaya çalışacağız.


Problem Çözme Teknikleri

1. Her Zaman Bir Plan Yaparak Başlamak

Bu başlıkta neyin anlatılmak istendiğini izah edelim.

Örnek olarak size 33’den 171’e kadar olan sayıları toplayıp bu sayıların ortalamasını bulan programı yazmanız istensin. Programlamaya başlayacaksınız ama nasıl?

Öncelikle bir plan yapmamız lazım, en önemli sorun 33’den 171’e kadar olan sayıları bilgisayara nasıl toplatacağımız. Programlamayı bilenler için bu oldukça basit bir problemdir. Problem, "for" döngüsüyle çözülecektir.

Bir "for" döngüsü açarak bu döngüyü 33’den başlatıp 171’e kadar tekrarlatırız ve sayıları bir değişkende tutarız.

Peki, tek çözüm yolu bu mudur sizce?

Elbette ki hayır, siz bu problemi "while" veya "do while" döngüleriyle de çözebilirsiniz.

Peki, tek tek 138 sayıyı program içinden girmek bir çözüm müdür? Evet, bu da bir çözümdür ama oldukça uzun, sıkıcı ve amatör bir çözümdür.

Daha sonra da sonucu ekrana yazdıran kodları yazarız.

Peki, başlangıçta hiçbir plan yapmadan bilgisayar karşısına geçersek ne olur?

2. Problemi Tekrar İfade Etmek

Problem bize sunulurken anladığımızdan emin olmalı, kafamıza takılan soruları mümkünse sormalıyız. Daha sonra problem eğer zor ve karışık geliyorsa tekrar ifade etmek ve farklı biçimlerde ifade etmek çözümü bulmakta yararlı olabilir.

Böyle yaparak hem problemi anladığımızdan emin oluruz, hem de kendi yapımıza göre basitleştiririz. Aynı zamanda yanlış anlamaların önüne geçeriz.

Örneğin;

Problem: Kullanıcının girdiği 5 sayının ortalamasını bulan programı yazın.

1. İfade, kullanıcının girdiği 5 sayının ortalamasını bulan programı yazın.

2. ifade; yazacağınız programda, kullanıcı 5 adet sayı girecek, program bunların ortalamasını bulacak.

3. ifade; yazacağınız programda, kullanıcı 5 adet sayı girecek. Program girilen sayıları toplayacak ve ortalamasını bularak ekrana yazdıracak.

4. ifade; öyle bir program yazınız ki, program, kullanıcıdan 5 adet değer girmesini istesin. Kullanıcı değerleri girince, bu değerleri toplasın ve 5’e bölsün. Bulduğu sonucu ekrana yazdırsın.

Sizce problemi hangi ifade daha açık anlatıyor? 4. İfade adeta algoritmaları sırasıyla açıklıyor gibi.

Büyük projelerde, karmaşık problemler mümkün olduğunca küçük parçalara ayrılarak her parçanın yapacağı iş belirlenir.Daha sonra bu parçaların nasıl yazılacağı planlanır, gerekirse her parçanın yapacağı iş yeniden ifade edilir ve bir yere yazılır. Bu işlemler çözmekte zorlandığımız problemlerin çözümünü kolaylaştırır.

3. Problemi Küçük Parçalara Ayırmak

Verilen bir problemi küçük parçalara bölmek, problemi kolaylaştırır ve problem üzerinde daha kolay hakimiyet sağlar.

Örneğin şöyle bir problemimiz olsun,

Problem: Kullanıcıdan 10 adet sayı alan ve bu sayıların toplamını ve ortalamasını bulan, bu sayıları büyükten küçüğe ve küçükten büyüğe sıralayan, bu sayıların en büyüğünü ve en küçüğünü bulan bir program yazınız.

Bu programı bu haliyle tek bir modül içinde (örneğin ana gövde) yazmak oldukça zordur.

Problemi çözmek için sayıları alan kısmı bir modül, toplama işlemini yapan kısmı bir modül, ortalamayı bulan kısmı bir modül, sıralama ve en büyük ve en küçük değeri bulan kısımlarının da herbirini ayrı birer modül (fonksiyon) olarak yazarsak problemi daha rahat yazabiliriz. Ayrıca her işlemi yapan kısım ayrı bir modül (fonksiyon) olduğundan programa hakim olmak ve programı yeniden düzenlemek oldukça kolaylaşır.


4. Önce Çözümü Bilinen Kısımlardan Başlamak

Bir problemi alt parçalara ayırdıktan sonra önce çözümü bilinen parçaları yapmak, hem zamandan kazandıracaktır, hem de size özgüven kazandıracaktır. Ayrıca bilinen kısımları yaparken bilinmeyen kısımların çözümü beyninizde canlanabilir.


5. Problemi Basitleştirmek

Büyük, karışık ve uzun problemlerin çözümü, uzun ve karışık olmak zorunda değildir. Bazen 2 sayfada ifade edilebilen bir problem iki satırda çözülebilir. Size çok zor ve imkansız gibi görünen bir problemin çözümü 5 dakikanızı almayacak bir çözüm olabilir. Bu nedenle hiçbir problemi gözünüzde fazla büyütmeyin. Problemleri mümkün olduğunca basitleştirin.

Eğer problemi çözemiyorsanız, bu probleme yakın ve çözümünü bildiğiniz bir problem oluşturun. Bu problemin çözümünü yaparken asıl problemi bu çözümden yararlanarak nasıl çözebileceğinizi düşünün.

6. Benzerliklerden Yararlanmak

5. maddede belirtildiği üzere karşınıza zor bir problem çıkarsa ve bu problemi nasıl çözebileceğinizi bilmiyorsanız, bu probleme benzer olan ve çözümünü bildiğiniz problemleri çözerek bu çözümü ilgili probleme nasıl uygulayacağınızı düşünme işidir. Daha önce çözdüğünüz benzer problemlerin çözümünü inceleyerek bunların kapsamını genişletmek ve yeni probleme uyarlamaya çalışmak sizi çözüme götürebilir.


7. Deneme Yapmak

Deneme yapmak, tahmin yapmaktan farklıdır. Olası bir çözüm yöntemini hayata geçirerek verdiği sonuçları gözlemleme işidir. Bu sonuçların ışığında problemin nasıl çözülebileceği kestirilebilir.

 Programı yazdıktan sonra istediğimiz çıktıyı elde edemediğimiz durumlarda hata ayıklama işlemini yapmak ta deneysel bir yaklaşımdır.

Program içinde algoritmalarda çeşitli değişiklikler yaparak sonucu gözlemlemek bir denemedir. Eğer istediğimiz sonucu alamıyorsak, kritik noktalarda değişken değerini mesaj penceresi gibi form araçlarıyla ekrana yansıtıp algoritmanın nereye kadar doğru işlediğini görebiliriz. Böylece hatanın nereden kaynaklandığını bulup o kısımda değişiklikler yaparak problemi çözebiliriz.

Örneğin, şöyle bir problemimiz olsun,

Problem: kullanıcının girdiği iki matrisin toplamını ve çarpımını yapan ve sonucu ekrana yazdıran programı yazınız.

Bu problemin nasıl çözülebileceğini bilmiyorsak, önce ilgili programlama dilinde matrislerin nasıl tanımlandığını öğreniriz. Sonra değerlerini program içinden kendimizin girdiği matrislerle toplama ve çarpma işlemlerini yaparız. Doğru sonucu bulup hesaplama kısmını hallettikten sonra matrisleri kullanıcının gireceği biçimde düzenleriz. Bu şekil programlama denemeye dayalı programlama tekniğidir ve doğru hesaplamayı elde edinceye kadar her defasında örneğin, 4x4 şeklinde 2 matris için onca değeri girmekten kurtulmuş oluruz.

Yine hesaplama kısmında "for" döngüleriyle oynayarak iki matrisin doğru toplama ve çarpma işlemini elde edinceye kadar döngülerle oynayabiliriz. Bu da bir denemedir.


8. Problemin Çözümünde Kararlı Olmak

Bir problemi çözmeye çalışırken bunun mutlaka bir çözüm yolu olduğunu ve illaki bulunacağını düşünerek sabırla ve deneme yanılma yoluyla çalışmaya devam etmeliyiz. Her deneme bize biraz daha kazandıracaktır. Bir problemi çözmek için yaptığımız her şey bizi programcılıkta daha da uzmanlaştırmaktadır. Eni sonu o programı da yazacak seviyeye geleceğinize inanmalısınız ve ısrarla bu problem üzerinde çalışmalısınız. Çalışmalarınızda çözümü bulamadığınızda sık sık ara vererek beyninize kendisini toplama ve yeniden değerlendirme yapma şansı tanımalısınız. Her bir girişim başarısız olduğunda belli bir süre ara verin, çıkıp dolaşın ancak çözümsüzlük asla moralinizi bozmasın.

Yukarıda problem çözümünde izleyeceğiniz tekniklerden bahsettik. Aslında oldukça soyut olan ve ezberlenmesi ve akılda tutulması zor olan bu kavramları örneklerle somutlaştırarak akılda kalıcı hale getirmeye çalıştık. Bunların çoğunu günlük hayatınızda çeşitli problemlerde uyguluyorsunuz, ancak neyi uyguladığınızı bilmiyor veya düşünmüyorsunuz ve esasen bunu bilmemek problemi çözmenizi etkilemiyor. Fakat bunları yazıya dökmeniz gerekirse veya hiç bilmeyen kişilere öğretmeniz gerekirse işte o zaman yukarıda anlatılanlar önem kazanıyor.

Bir sonraki bölüm, programlama süreçlerinde "Problem Çözme Adımları" üzerine olacak. Ayrıca aşağıya C++ dili ile yazılmış olan ve serbest düşme hareketi yapan cismin hareket analizini gösteren programın anlatıldığı sayfanın linkini de veriyoruz.


Kolay gelsin.

Problem Çözme Yaklaşımları

Serbest Düşme Hareketi Program Kodları



SANATSAL BİLGİ

26/12/2017

  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM

YORUMLAR
Aylin
Su israfı ile yapsanız
COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI