1 BBS 514 YAPISAL PROGRAMLAMA (STRUCTURED PROGRAMMING) LECTURE 1: ALGORITHMS Lecturer: Burcu Can BBS 514 - Yapısal Programlama (Structured Programming)
İçerik Bilgisayar için problem çözme süreci ve Pólya nın Nasıl Çözmeli listesi Algoritma kavramı Yalancı kod Kontrol yapıları
Problem Çözme Problem çözme (sözlük anlamı): çözülmesi gereken mesele, sorun veya aşılması gereken engel için çözüm bulma. Problem çözmeyi siz nasıl tanımlarsınız?
Problem Çözme Nasıl Çözmeli: Matematiksel Yöntem için Yeni Bir Bakış - George Pólya Matematiksel problemler için yazılmış Liste oldukça genel ve bilgisayar için de uyarlanabilir. Bilgisayarla ilişkili problemleri çözmek için de kullanabiliriz.
Problem Çözme Problemleri nasıl çözersiniz? Problemi anla Bir plan oluştur n Planı gerçekleştir. n Gözden geçir. Eğer bu yöntemle çözülmezse, Pólya şunu tavsiye ediyor: Bir problemi çözemiyorsanız, çözmenin mümkün olduğu daha basit bir problem vardır. Eğer problemiçözemiyorsanız, onunla ilişkili başka bir problemiçözmeye çalışın.
Stratejiler Sorular sor! Problem hakkında ne biliyorum? Çözümü bulmak için elimde nasıl bilgiler mevcut? Nasıl bir çözüm bulunması gerekiyor? Özel durumlar var mı?
Stratejiler Sorular sor! Tekerleği yeniden icat etme! Benzer problemler farklı biçimlerde karşımıza çıkabilir. İyi bir programcı, daha önce çözülmüş bir görevi tanıyarak başka bir problemin çözümü için onu yeni çözüme dahil eder. Birbirine benzer iki problem tanımlayın!
Stratejiler Böl ve Yönet Büyük bir problemi daha küçük parçalarına böl ve alt problemleri çöz. Her alt görev başa çıkılır oluncaya dek böl ve yönet taktiği tekrar tekrar uygulanabilir.
Bilgisayarda Problem Çözme Analiz ve tanımlama aşaması Analiz et Tanımla Algoritma geliştirme aşaması Algoritma geliştirme Algoritmayı test et Uygulama aşaması Algoritmayı kodla Algoritmayı test et Bakım aşaması Kullan Hataları/eksiklikleri gider Tekrar eden kısımlar hangileridir?
Kod Geliştirme Aşamaları
Algoritmalar Algoritma Bir problemi veya alt problemi belli bir zamanda, sonlu sayıda veriyle çözmek için gerekli olan komutlar kümesi
Algoritma Yemek tarifleri, yol tarifleri en bilinen algoritmalardandır. Kek tarifi: Fırını 180 dereceye getirelim. Yumurtaları ve toz şekeri bir kabın içersine döküp köpük köpük olana kadar mikserle çırpalım. Burada dikkat etmeniz gereken şey, 3 yumurtayı aynı anda değil, tek tek kırıp köpük yapıp üzerine diğer yumurtayı kırıp işleme devam edin. Köpük köpük yaptıktan sonra diğer tüm malzemeleri sırasıyla kabın içerisine dökün ve çırpmaya devam edin. Kolay kekin harcını yaptıktan sonra istediğiniz şekildeki kalıba dökün ve fırına verin. Yaklaşık olarak 30-35 dakika kadar pişirdikten sonra fırından alın ve biraz demlenmesini bekledikten sonra servis yapın.
Algoritma Kekin yapımı: Fırını 180 dereceye getir. Bir kap al. Kabın içine 3 yumurtayı kır ve 2 çay bardağı toz şeker koy WHILE (köpürmedi) yumurta ve toz şekeri çırp Diğer bütün malzemeleri (2 çay bardağı yoğurt, yarım su bardağı zeytinyağı, 1 paket kabartma tozu, 1 paket vanilin, 3 su bardağı un) kabın içine koy Bütün harcı birkalıba dök. Kalıbı fırına koy WHILE (kek pişmedi) Kalıbı fırında tut. Keki fırından çıkar.
Yöntemin Özeti Problemi analiz et Problemi anla! Saldırı planının geliştirilmesi. Ana görevleri listele (Ana modül) Problemi görev listesi olarak yeniden ifade et. Her göreve bir ad ver. Kalan modülleri yaz Her modülü bir görev listesiyle yeniden ifade et. Her göreve bir ad ver. Gerekirse yeniden sırala ve gözden geçir
Bir Algoritmanın Geliştirilmesi Bir problemi çözmede bilgisayar çözümü üretmenin iki yöntemi vardır: Yukarıdan aşağı tasarım (Top-down design) n Yapılacak görevlere yoğunlaşır. Nesneye yönelik tasarım (Object-oriented design) n Veriye yoğunlaşır. Algoritmaları ifade etmek için yalancı kodlar kullanılır!
Yukarıdan-Aşağı Tasarım
Yalancı Kod Yalancı kod (pseudocode): İngilizce idadelerle programlama dili ifadelerinin karışık bir şekilde kullanıldığı kodlar. Örnek:10 luk tabandaki bir sayının başka bir tabana çevrilmesi: While (the quotient is not zero) Divide the decimal number by the new base Make the remainder the next digit to the left in the answer Replace the original decimal number with the quotient While (bölüm sıfır değil) Yeni ondalıklı sayıyı yeni tabana böl Kalanı sola doğru birsonraki basamakyap Orjinal ondalıklı sayıyı bölümle yer değiştir.
Yalancı Kod While (bölüm sıfır değil) Yeni ondalıklı sayıyı yeni tabana böl Kalanı sola doğru birsonraki basamakyap Orjinal ondalıklı sayıyı bölümle yer değiştir. Ondalık tabanda 93 ün 8 lik tabandaki karşılığı nedir? 93/8 in sonucu 11, kalan 5 tir. 11/8 nın sonucu 1, kalan 3 tür. 1/ 8 in sonucu 0, kalan 1 dir. sonuç: 1 3 5
Yalancı Kod
Tam Çözüm için Yalancı Kod Yazdır: Yeni tabanı giriniz" Oku: yenitaban Yazdır: Çevrilecek sayıyı giriniz" Oku: ondalıksayı Bölümü 1 olarak kaydet. WHILE (bölüm 0 değil) Bölüme ondalıksayi/yenitaban değerini ata Kalana ondalıksayi % yenitaban değerini ata Kalanı sola doğru bir basamak olarak kaydet. ondalıksayı değerini bölüm olarak güncelle Yazdır: Sonuç: " Sonucu yazdır
Yalancı Koddaki İfadeler Değişkenler: Verilerin kaydedildiği depo alanları n Örnek: bölüm, ondalıksayı, yenitaban Atama ifadeleri: Bir değişkene yeni değer verme n Bölüme 64 değerini ata.
Yalancı Koddaki İfadeler Çıktı Bir çıktı aygıtına değerin yazdırılması: Girdi n Yazdır (Write, Print) Dış dünyadan değerlerin alınıp değişkenlere kaydedilmesi n Oku (Get, Read)
Kontrol Yapıları Kontrol yapısı: Programda komutların hangi sırada çalıştırılacağını belirleyen komuttur.
Seçim İfadeleri Seçim: Farklı ifadelerin içinden birini çalıştırmak için seçmek veya bazı ifadeleri atlamak için kullanılır. Sayıyı al IF (sayı < 0) Yazdır sayı + " 0 dan küçüktür." veya Yazdır Pozitif bir sayı giriniz." Sayıyı al IF(sayı < 0) Yazdır sayı + " 0 dan küçüktür." Yazdır Talimatlara uymadınız."
Seçim İfadeleri à if deyimi
Seçim İfadeleri Problem: Verilen birhava sıcaklığına göre uygun kıyafeti yazdır. Yazdır: Sıcaklık değerini girin: " Sıcaklık değerini al. Kıyafeti belirle.
Seçim İfadeleri Kıyafeti Belirle IF (sicaklik > 90) Yazdır Hava sıcak: şort giy. ELSE IF (sicaklik > 70) Yazdır ideal hava: Kısa kollu t- shirt giymekuygundur. ELSE IF (sicaklik > 50) Yazdır Biraz serin: ince bir ceket giy. ELSE IF (sicaklik > 32) ELSE Yazdır Oldukça soğuk: Kalın bir mont giy. Yazdır İçeride kal.
Döngü İfadeleri Tekrar: Bir dizi ifadenin tekrar edilmesi. Set count to 1 WHILE ( count < 10) Write "Enter an integer number" Read anumber Write "You entered " + anumber Set count to count + 1 Kaç değer okunur?
Döngü İfadeleri à while ifadesi
Döngü İfadeleri Sayaç kontrollü döngü: Toplama 0 değerini ver. Sayaca 1 değerini ver. While (sayac <= limit) Sayıyı oku Toplama, toplam+sayı değerini ata. Sayacı artır Yazdır: Toplam:" + toplam Neden sayaç kontrollü deyim deniyor?
Döngü İfadeleri Olay kontollü deyim: Toplama 0 değerini ver. Pozitif değişkenine dogru değerini ver WHILE (Pozitif) Sayı oku IF (Sayı > 0) Toplama toplam+sayı değerini ver. ELSE Pozitif e yanlış değerini ver. Yazdır: Toplam" + toplam Neden olaykontrollü döngü deniyor? Buradaki olaynedir?
Döngü İfadeleri Karekökü hesapla: Sayıyı oku Karekökünü hesapla Karekökünü yazdır.
Döngü İfadeleri Karekökü hesapla: Epsilonun değerini 1 olarak belirle WHILE (Epsilon > 0.001) Yeni tahmini hesapla Epsilonun değerini mutlakdeger(sayı - tahmin * tahmin) olarak belirle.
Döngü İfadeleri Yeni tahmini hesapla: Yeni tahminin degerini belirle: (tahmin + (sayi/tahmin)) / 2.0
Döngü İfadeleri Sayıyı oku Tahmini sayı/4 olarak belirle Epsilonun degerini 1 olarak belirle WHILE (epsilon > 0.001) Yeni tahmini hesapla Epsilonun degerini mutlak deger(sayı - tahmin * tahmin) olarak belirle. Sayıyı ve tahmini yazdır.
Yalancı Kod Örneği Problem: Tekrarlı bir şekilde bir çift sayı al ve değerleri yazdır. WHILE (not done) Write "Enter two values separated by blanks" Read number1 Read number2 Print them in order
Yalancı Kod Örneği Değerlerisırayla yazdır: Write "How many pairs of values are to be entered?" Read numberofpairs Set numberread to 0 WHILE (numberread < numberofpairs) Write "Enter two values separated by a blank;; press return" Read number1 Read number2 IF(number1 < number2) Print number1 + " " + number2 ELSE Print number2 + " " number1 Increment numberread
Yalancı Kodun Çevrilmesi Hangi dile çevrilecek? Assembly dili Çok ayrıntılı ve zaman alır. Üst düzey programlama dili Yazması dahakolay.
From problem to program 39 In real world Problem in Natural language Top Down Design in pseudo-code Program in computer code (code in almost any computer language.) Requirements: A program that does this and that and the other. It must take data from this source and DESIGN The Problem Do this repeat if something then do this else do the other Print all done The Design (Algorithm) The Program Reduce cognitive load separating design and coding using top-down design IMPLEMENT BBS 514 - Yapısal Programlama (Structured Programming)
Steps of Software Development 40 1. Problem Understanding Read the problem carefully and try to understand what is required for its solution. 2. Analysis Identify problem inputs and outputs. 3. Design Develop a list of steps (algorithm) to solve the problem Refine steps of this algorithm. (Divide and Conquer) Verify that the algorithm solves the problem, i.e. the algorithm is correct. 4. Implementation Implement the algorithm as a (java) program. You have to know a specific programming language (java) Convert steps of the algorithm into programming language statements. 5. Testing and Verification Test the completed program, and verify that it works as expected. Use different test cases (not one) including critical test cases. BBS 514 - Yapısal Programlama (Structured Programming)
Algorithm 41 An algorithm is a design written in pseudo code. (in English, but a formal style) Algorithms contains: Sequence Decision Repetition BBS 514 - Yapısal Programlama (Structured Programming)
Everyday Algorithms 42 Problem: To drink a glass of milk. Algorithm: 1. Enter the kitchen 2. Get a glass 3. Get the milk from the refrigerator 4. Fill the glass with milk 5. Drink it Refine step 1: 1. Walk to the kitchen door 2. If the door is close then 2.T. Open it 3. Walk into the kitchen Refine step 3: 1. Open the refrigerator 2. Get the milk 3. Close the refrigerator Refine step 4: 1. while the glass is not full 1.1. Pour some milk into the glass BBS 514 - Yapısal Programlama (Structured Programming)
Area- Circumference Problem 43 Requirements: Design an algorithm to find and report the area and circumference of a circle whose radius the user gives. Example interaction Welcome to circle computer Please enter the radius: 5 The area of a circle of radius 5 is 78.55 and its circumference is 31.42 BBS 514 - Yapısal Programlama (Structured Programming)
Area- Circumference Problem 44 To find area & circumference of circle 1. Print welcome message 2. Ask for & get radius from user 3. Compute area as pi.radius.radius 4. Compute circumference as 2.pi.radius 5. Report area, circumference & radius Identify preconditions & ensure they are satisfied. Once we are sure that this is correct, move on to solve any nontrivial sub-problems. BBS 514 - Yapısal Programlama (Structured Programming)
Area- Circumference Problem (cont.) 45 Solve 2. Ask for & get radius from user 1. Ask (prompt) the user to enter radius 2. Get radius value from user Solve 5. Report area, circumference & radius 1. Print msg The area of a circle with radius 2. Print radius value 3. Print msg is 4. Print area value and move to next line 5. Print msg and its circumference is 6. Print circumference value 7. Print blank line BBS 514 - Yapısal Programlama (Structured Programming)
Calculating the average score of an exam 46 Problem: Calculating the average score of an exam Inputs : Scores of an exam Output: Average score of the exam Algorithm: 1. Set count to zero 2. Set sum to zero 3. while there is an exam sheet do 3.1. Read the score on the sheet 3.2. Add the score on the sheet to sum 3.3. Add one to count 3.4. Move to the next sheet 4. Compute average as sum/count 5. Display average BBS 514 - Yapısal Programlama (Structured Programming)
Prime Number 47 Problem: Deciding that a given integer number is prime or not. Input : An integer number N Output: A sentence indicating that N is prime or not. Algorithm: 1. Read the number N 2. Test whether N is prime or not 3. Display the result. Refine step 2: 1. set counter to 2 2. set PrimeFlag to true 3. while (counter < N and PrimeFlag = true) do 3.1. if N is divisible by counter then 3.1.T. set PrimeFlag to false 3.2. Increment counter by 1 BBS 514 - Yapısal Programlama (Structured Programming) Refine step 3: 1. if PrimeFlag = true then 1.T. Display that N is prime else 1.F. Display that N is not prime
Factorial 48 Problem: Calculating N! Inputs: A positive integer N Output: N! Algorithm: 1. Read a positive integer N 2. Calculate NFactorial 3. Display NFactorial Refine step 2: 1. Set NFactorial to 1 2. Set counter to 2 3. while (counter <= N) do 3.1. Multiply NFactorial by counter 3.2. Increment counter by 1 BBS 514 - Yapısal Programlama (Structured Programming)
Types & Layout (of algorithm steps) 49 Sequence Decision 1. step 2. step 3. step 4. step Repetition Any step can be replaced with one of the other types n. if condition then nt step else nf step indent n. while condition do step n. do step while condition indent n. for so many times do step indent BBS 514 - Yapısal Programlama (Structured Programming)