PROBLEM ÇÖZME (PROBLEM SOLVING)
Algoritma Temelleri
Kaynak: ALGORİTMA VE PROGRAMLAMAYA PROGRAMLAMA YA GİRİŞ Prof.Dr.Mustafa ERGÜN Tasarım değişiklikleri ve içerikte ekleme düzeltme/güncellemeler (Bkz. Kaynaklar) (Dr. Enis KARAARSLAN)
Bilgisayar, sadece programcının kendisine söylediği şeyi nasıl yapacağını yapacağ ını bilir bilir.. Bundan dolayı programcı bilgisayara problemi nasıl çözeceğini bildirmelidir.
Bilgisayara nasıl iş yaptıracak, nasıl iletişim kuracaksınız? Bir “Program” ile. Bilgisay Bilgisayarlar arlar program olmadan çalışmazlar .
Bilgisayarla, bir mantık aracılığıyla iletişim kurabiliriz. Bu da algoritma (talimat,
rutin, reçete) ile olur.
Program yazma, yazma, çözülmüş bir problemin bir bilgisayar dili
ile kodlarını yazmaktır (kodlama). Bu, en son iştir.
Kodlamada odlamadan n önce ALGORİTMA yazılmalıdır.
Problem çözme döngüsü (Problem Solving Cycle)
1. Problemi anlama
(Understanding, Analyzing),
2. Bir çözüm yolu geliştirme 3. Algoritma ve program yazma 4. Tekrar tekrar test etme
(Designing), (Writing),
(Reviewing)
Polya, George (1957) ‘How To Solve It’, Princeton University Press, 2nd Edition
1. Ge Gere reke ken n Ana Anali lizi zi (Requirements Analysis):
Problemi bütün boyutları ile tanıma tan ıma ve ne yapılması istendiğini istendiğini net olarak anlama, problem çözülebilir mi? 2. Tasarım (Design): Bir çözüm yolu geliştirme
ve algoritmasını yazma. 3. Uygulama (Implementation ): Çözüm
algoritmasını uygun bir program diline çevirme 4. Test etme, hatalardan ayıklama, kurma ve bakımını yapma (Testing, debugging, inst in stal alli ling ng an and d ma main intten enan ance ce))
•Elinde bulunan veriler
Örnek: 2 saatte 190
(Girdi-Input)
km yol alan
arabanın ortalama •Sonunda elde edilmek hızı nedir? istenen •Output: saatte ortalama hız (Çıktı-Output) •Input: gidilen •Girdileri hedeflenen mesafe ve süre Çıktıya dönüştürecek •Process: orthız = işlem (process) belirlenir mesafe/süre
Problem çözme olgusunun grafiksel gösterimi Girdi
İşlem
Çıktı
(Input)
(Processing)
(Output)
Girdi-İşlem-Çıktı türüne en iyi
örnekler yemek tarifleridir. Malzemeler ve miktarları, hazırlama pişirme ve sonunda istenen yemek!
Algoritma
Algoritma (el-Harizmi tekniği Algorithm)
Bir problemin çözüm adımlarının (işlemlerin) belirlemesi
El-Harizmi. Kitab b el-c el-ceb ebr r “Kita ve‟l-mukabele” (Cebir denklemlerini
çözmenin kuralları)
Algoritma
Algoritma, matematikte ve bilgisayar
biliminde bir işi yapmak için tanımlanan, bir başlangıç durumundan başladığında, açıkça belirlenmiş bir son durumunda sonlanan, sonlu işlemler (adımla (adımlar) r) kümesidir.
http://tr.wikipedia.org/wiki/Algoritma
Algoritmanın Sağlaması Gereken Kriterler
1. Girdi: Sıfır veya daha fazla değer
dışarıdan verilmeli. 2. Çıktı: En azından bir değer üretilmeli. 3. Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli. 4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli. 5. Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.
Kullanıcının girdiği dört sayının ortalamasını görüntüleyen algoritma
8.
Başla Sayaç = 0 (Sayaç'ın ilk değeri 0 olsun) o lsun) Sayıyı kullanıcıdan al Toplam = Toplam + Sayı (Toplam„a sayıyı ekle) Sayaç = Sayaç + 1 (Sayaç'a 1 ekle) Sayaç < 4 ise 3. adıma git. (Eğer sayaç 4'ten küçükse 3.adıma git.) Ortalama = Toplam / 4 (Ortalama için Toplam „ı 4'e böl) Ortalama değerini ekrana yazdır.
9.
Dur
1. 2. 3. 4. 5. 6.
7.
Algoritma Algoritma sadece bilgisayar programlamada kullanılmaz. Bir fabrika üretiminin
algoritması, bir büro çalışma düzeninin algoritması, bir planlı gezinin algoritması...
Çay Yapma Algoritması 1-Başla 2-Çaydanlığa Su Doldur. 3-Çaydanlığı Ocağa Koy. 4-Su kaynadı mı?(Hayır ise 4.Adımı tekrardan sor.) 5-Çayı Demle(Yani demlikteki çayın içine
kaynamış su kat) 6-Çay Demlendi mi?(Hayır ise 6.Adımı tekrardan sor.) 7-Bitir
Algoritma Gösterim Şekilleri •Akış diyagramı (Flowcharts): Bir işi yapan mantıksal adımları ve adımlar arası geçişlerin grafiksel gösterimi. • Sözde kod / Satır algoritma (Pseudocode): Programın ana hatlarını ve adımlarını gösteren kısa komutlar. • Sıradüzeni grafiği (Hierarchy charts): Programın farklı parçalarının birbirleriyle ilişkilerini gösterir . Bunlar, kullanılacak programlama dilinden bağımsızdır..
Akış diyagramı diyagramı işaretleri işaretleri Başlama /
Başlama /
Bitirme
Bitirme
Okuma Data
Aritmetik,
mantık işlemi Şart KararVer me
Yazma
Bağlantı
Döngü Elle işlem Elle veri
girişi Diğer … Bilgi
gösterme
Gidiş yönü
Böl ve Yönet Metodu • Çok büy büyük ük probl problem emle leri ri parçala parçalara ra ayırarak daha kolay çözeriz. • Çöz Çözüle ülece cek k kadar kadar küç küçül ültt ttüle ülen n parçalar mantıklı bir sıraya koyulur. • Her parça, ayrı modüller olarak çözülür ve birbirine bağlanır (integration)
İfade yapıları • Sıralı (Sequence) ya yapılar – işlem hi hiç satır atlamadan doğrusal bir sıra ile olur • Karar (Decision) yapıları – İçinde “evet” -”hayır” soruları soran ve cevaba
göre farklı yönde farklı işlem işl em yapan yapan yapılar Eğer koşul doğruysa bunu yap Koşul sağlanmıyorsa şunu yap ( if then else)
İfade yapıları
Döngü (Looping) yapıları – Bir şart gerçekleşinceye gerçekleşi nceye kadar tekrar tekrar yapılan işlemler. Örnek: • 100 adet adet sayı sayı girilince girilinceye ye kada kadarr … • Ortala Ortalama ma değer 80 oluncay oluncaya a kadar kadar … ( for for,, whil while e .. Vb Vb))
Sözd Sö zde e Kod Kod – Ör Örne nek k1 Akış diyagramı
sayının tek ve çift olduğunu belirleyip
Başla
yazma
İki sayı al
Hayır
Sayı çift
Evet
mi?
TEK
ÇİFT
YAZ
YAZ YA Z
Bitiş
Program: Girilen iki
Pseudocode
İki Sayı Al Eğer sayı çift ise “Çift” yaz“ Değilse (sayı tek ise) “Tek” yaz
Genel öğütler • Akış Akış di diy yag agrram amla ları rı • ha hazı zırla rlanm nmas asıı zam zaman an alıc alıcıı ve ve güncellenmesi zordur. • Programlama eğitiminde mantıksal akışı vermekte kull kullanılı anılırr, • Profesyonel programcılar sözde kodlama ve çeşitli yazılım mühendisliği yöntemlerini tercih ederler.
Sözde Kod (Pseudo Code) •
•
•
Gerçek kodlar yazılmadan önce taslak sözde kodlarla oluşturulur. Ayrıntılara girilmeden, her programlama diline uygun bir yazımdır. Örneğin mili kilometreye kil ometreye dönüştüren sözde kod: Input Miles Kilometers = Miles * 1.609 Output Kilometers
Değişkenler
Programda verileri tutmak için kullanılan en basit veri yapılarıdır. Örn: x, y, sayac, toplam Değişkenlere değer atanır Değişkenlere X = 5 ( x değişkenine 5 değerini ata)
ÖRNEKLER …
1. Klavyeden Girilen İki Sayının Toplamını Bulan Prog
Örneğin klavyeden girilen iki sayının toplamını bulan ve sonucu ekrana yazdıran programın algoritması ve akış diyagramı istense istenseydi. ydi. Değişkenler • bi biri rinc ncii say sayı: ı: x • ik ikin inci ci say sayıı :y :y • iki sayı sayının nın topla toplamı:t mı:topl oplam am
Algoritma
Adım 1 :Başla Adım 2:Birinci sayıyı oku ve x değişkenine aktar.
Adım 3:ikinci sayıyı oku ve y değişkenine aktar.
Adım 4:x ve y sayılarını topla sonucu toplam değişkenine aktar. Adım 5:Toplam değerini ekrana yazdır. Adım 6:Dur
2. Baba oğul yaş problemi
Bir baba ve oğlunun yaşları farkını bulan programın algoritmasını ve akış diyagramını tasarlayınız.
Değişkenler • ba baba banın nın ya yaşı: şı: b • oğ oğlun lunun un ya yaşı: şı: o • ya yaşla şlarr fark farkı: ı: far fark k
Algoritma
Adım 1: Başla Adım 2: Babanın yaşını gir.(b) Adım 3: Oğlunun yaşını gir.(o) Adım 4: fark=b-0 işlemini yap Adım 5: fark değişkenini ekrana yaz. Adım 6: Bitir
3. Girilen 2 sayıdan büyük olanı ekrana yazdıran program
Girilen iki sayıdan büyük olanı ekrana yazdıran program
Değişkenler • İl İlk k sa sayı yı:: x • İk İkin inci ci sa sayı yı:: y
Algoritma
Adım 1: Başla Adım 2:Birinci sayıyı kullanıcıdan al.(x) Adım 3:İkinci sayıyı kullanıcıdan al.(y) Adım 4:Eğer x>y ise ekrana 1. sayı büyüktür yaz. Adım 7’ye git. Adım 5:Eğer y>x ise ekrana 2. sayı büyüktür yaz. Adım 7’ye git. Adım 6:Ekrana sayılar birbirine birbi rine eşittir yaz. Adım 7:Bitir
4. Girilen bir sayının tek mi çift mi olduğunu tespit eden prog
Bir sayının 2 ye bölündüğü zaman 0
kalanını verirse sayı çift 1 kalanını verirse sayı tek olduğu bilgisini hatırlatmamızz lazım. hatırlatmamı 5 sayısı tek mi çift mi? 5 i 2 ye bölersek kalan 1 - Tek 18 sayısı tek mi çift mi ? 18 i 2 ye bölersek kalan 0 Çift
Bilgiler
Bir sayının bölümden kalanını bulan matematiksel bir fonksiyon
mevcuttur. mevcuttu r. Birçok programlama
dilinde de bu fonksiyon tanımlanmıştır. Mo Mod d fo fon nks ksiiyo yonu nu:: bölümünden n 6 mod 2 (6’nın 2 ye bölümünde
kalanı verir)
Algoritması
Adım 1:Başla Adım 2:Herhangi bir sayı giriniz.(x) Adım 3:Eğer x mod 2 =0 =0 is ise ekr ekra ana çift yaz değilse tek yaz. Adım 4:Bitir
5. Suyun Halleri
Girilen sıcaklık değerine göre bir suyun katı, sıvı ve gaz olma durumunu gösteren programın algoritmasını ve akış şemasını tasarlayınız.
Bilgiler
Şimdi soruyu çözmeden önce kimya konularını biraz hatırlayalım. • Su sıfır sıfır derece derecenin nin altı altında nda katı, katı, • 0-100 derece arasında ise sıvı, fazla ise gaz halinde hali nde • 100 dereceden fazla bulunur.
Dolayısı ile bu soruda kullanıcı su sıcaklığını girdikten sonra belirli karşılaştırmalar yaparak karar vermemiz lazım.
Algoritma
Adım 1:Başla Adım 2:Sıcaklık değerini giriniz.(t) Adım 3: Eğer t<0 ise Ekrana katı yaz. Adım 5’e git. Adım 4: Eğer t>0 ve t<100 ise ekrana sıvı yaz değilse gaz yaz. Adım 5: Bitir.
6. İlk 100 sayının Toplamı 1.
Başla
6.
Sayac=1 : Toplam=0 : Aritmetik_Orta=0 Eğer Sayac=100 ise Git 6 Toplam=Toplam+Sayac Sayac=Sayac+1 : Git 3 Aritmetik_Orta=Toplam/100
7.
Aritmetik_Orta Aritmetik _Orta değerini yaz
8.
Dur.
2.
3. 4. 5.
Kaynaklar
http://www.dahiweb.com/algoritma-nedir http://tr.wikipedia.org/wiki/Algoritma http://www.ozgurlukicin.com/atolye/algori tma-ve-akis-diyagramlari-1/ http://cyberwarrior.org/Forum/orneklerle-algoritmave-akis-diyagrami_358092,2.cwx
Sorular?