P p 8. Ünitede yinelemeli programlamanın teknikleri anlatılmaktadır. p p Gördüğünüz gibi, yinelemeli programlama bir problemin içinde problemin küçük parçalarını.

Slides:



Advertisements
Benzer bir sunumlar
Programlama-II (Java ile Bilgisayar Programlama)
Advertisements

SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Döngüler.
P 6. Ünite stack veri tipini anlatmaktadır. p Bu ünitede stack laerin örnek uygulamalarından bahsedilmektedir. p Bu sunumda N-Queens problemini çözmek.
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
Bölüm 6 – Metodlar ve Parametreler
OOP UYGULAMA 5.
EDUTIME Java Day 4 Serdar TÜRKEL.
Metodlar ve Parametreler
Tam İkili Ağaçlar 9. Ünite ağaçlardan bahseder.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
P AKET E RIŞIMLERI SıNıFLARıN YENIDEN KULLANıMı. P AKET ( P ACKAGE ) Paketler kütüphaneleri oluşturan elemanlardır. import java.io.BufferedReader; BufferedReader.
Java Programlama Koleksiyon(Collection) Sınıfları
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
DİZİLER.
P 2. Ünitede Nesneye Dayalı Programlama anlatılıyor. p Nesneye dayalı programlama yeni veri tiplerinin ve bu tipleri işletmek için gereken işlemleri oluşturmayı.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
METODLAR.
C# Metot Overloading (Aşırı yükleme)
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
NESNEYE DAYALI PROGRAMLAMA
Görsel C# Programlama Güz 2009 (6. Hafta).
Java Sınıf ve Nesne Kavramı UML Gösterimi
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
JAVA İLE PROGRAMLAMAYA GİRİŞ
Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü C ++ Nesne.
ÇOK BİÇİMLİLİK POLYMORPHISM
Önceki Dersi Hatırlama !!
P Koleksiyon sınıfı bir grup öğeyi tutabilen bir veri tipidir. p Java da, koleksiyon sınıfları öğeleri ekleme,çıkarma,inceleme metodlarıyla birlikte bir.
Kalıtım.
JAVA’DA DÖNGÜLER.
Numaralandırmalar(Enumaration)
Kalıtım , Sınıf Asli Ergün.
Demet AYDIN METODLAR Demet AYDIN
Class KahveFincani { public KahveFincani() { System.out.println("KahveFincani..."); } } public class YapilandirciBasitOrnek { public static void main(String[]
JAVA’DA DİZİLER Dr.Galip AYDIN.
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
P Önemli bir konu: önşartlar and hedefşartlar. p Bir metodun neyi netice vereceğinin belirlenmesinin yöntemleridirler. Önşartlar ve Hedefşartlar Java Kullanarak.
Java.lang.math.
Bölüm 5 Nesneler ve Metotlar
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
String class String karakterler dizisidir
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
Ders 2- Veri türleri, Karar ve Döngü Yapıları, Görsel Kontröller
JAVA PROGRAMLAMA ORNEKLER
Görsel C# ile Windows Programlama
ODTU-SEM Copyright (c) 2011 Kalıtım(Inheritance) Subclass lar tüm method ve attributes larının superclass ından alırlar. Bu işlem için extends keyword.
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
These courseware materials are to be used in conjunction with Software Engineering: A Practitioner’s Approach, 6/e and are provided with permission by.
Bilgisayar Programlama III C
Hafta2 Rekürsif Algoritmalar
Learning to learn network for low skilled senior learners ÖĞRENCİ Mİ? EVET, O BENİM! Learning to Learn Training Hafıza performansınızı geliştirmek Developed.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Students social life and join the social clubs. BARIŞ KILIÇ - EGE DÖVENCİ IŞIK ÜNİVERSİTESİ
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Kurucular(Yapıcılar), Yıkıcılar
Recursion (Özyineleme)
KODLAMA ÖĞRETİMİ Hayal Et– YARAT - PAYLAŞ
Sunum transkripti:

p p 8. Ünitede yinelemeli programlamanın teknikleri anlatılmaktadır. p p Gördüğünüz gibi, yinelemeli programlama bir problemin içinde problemin küçük parçalarını farketmeyi kapsar. p p Bu sunum,kitapta olmayan ek bir örnek vermektedir. Yinelemeli Düşünme Java Kullanarak Veri Yapıları ve Diğer Nesneler

Bir Araba Nesnesi p p Örneğe başlamak için, favori aile arabanızı düşünün

Bir Araba Nesnesi p p Örneğe başlamak için favori aile arabanızı düşünün

Bir Araba Nesnesi p p Örneğe başlamak için favori aile arabanızı düşünün

Bir Araba Nesnesi p p Örneğe başlamak için favori aile arabanızı düşünün

Bir Araba Nesnesi p p Örneğe başlamak için favori aile arabanızı düşünün p p Bu arabanın bilgisayardan gelen bir radyo sinyaliyle kontrol edildiğini hayal edin.

Bir Araba Sınıfı public class Araba {... } p p Örneğe başlamak için favori aile arabanızı düşünün p p Bu arabanın bilgisayardan gelen bir radyo sinyaliyle kontrol edildiğini hayal edin. p p Radyo sinyalleri Araba nesnesinin metodlarını aktifleştirerek oluşturulur.

public class Araba { public Araba(int carNumber); public public void move( ); public void turnAround( ); public boolean isBlocked( );... private alanları bilmek zorunda değiliz!... } Araba sınıfı için metodlar

public static void main(...) { Araba racer = new Araba(7);... Yapıcı metod Bir arabayı tanımladığımızda ve yapıcı metodunu aktifleştirdiğimizde, bilgisayar, belirli bir numarası olan bir arabayla radyo linki kurar.

public static void main(...) { Araba racer = new Araba(7); racer.turnAround( );... turnAround metodu turnAround metodunu aktifleştirdiğimizde,bilgisa yar arabaya 180 derece dönmesi için sinyal gönderecektir.

public static void main(...) { Araba racer = new Araba(7); racer.turnAround( ); racer.move( );... move metodu move metodunu aktifleştirdiğimizde, bilgisayar arabaya bir adım ilerlemesi için sinyal gönderir.

public static void main(...) { Araba racer = new Araba(7); racer.turnAround( ); racer.move( );... move metodu move metodunu aktifleştirdiğimizde, bilgisayar arabaya bir adım ilerlemesi için sinyal gönderir.

public static void main(...) { Araba racer = new Araba(7); racer.turnAround( ); racer.move( ); if (racer.isBlocked( ) ) System.out.println (“İlerleyemez!”);... isBlocked( ) metodu isBlocked metodu bariyerleri tespit eder.

Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız...

Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız...

Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız...

Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız... p p...sonra araba geri dönecek..

Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız... p p...sonra araba geri dönecek p p...ve geldiği yolu takip ederek ilk konumuna geri dönecek

Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız... p p...sonra araba geri dönecek p p...ve geldiği yolu takip ederek ilk konumuna geri dönecek

Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız... p p...sonra araba geri dönecek p p...ve geldiği yolu takip ederek ilk konumuna geri dönecek public void ricochet(Car movingCar)

ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. public void ricochet(Car movingCar)

Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar) movingCar.move( );...

movingCar.move( );... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Bu problemi biraz daha küçük hale getirir. Örneğin, eğer araba bariyerden 100 feet uzaklıkta başlarsa ft.

movingCar.move( );... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Bu problemi biraz daha küçük hale getirir. Örneğin, eğer araba bariyerden 100 feet uzaklıkta başlarsa...sonra,move bir kez çalışınca mesafe sadece 99 feet olur. 99 ft.

movingCar.move( );... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Şimdi başladığımız aynı problemin daha küçük versiyonu var elimizde. 99 ft.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Daha küçük problemi çözmek için yinelemeli çağrı yapın. 99 ft.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir. 99 ft.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Yinelemeli çağrı daha küçük problemi çözecekir. 99 ft.

movingCar.move( ); ricochet(movingCar);... Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Başlangıç konumuna dönmek için gereken son adım nedir? 99 ft.

movingCar.move( ); ricochet(movingCar); movingCar.move( ); Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar); Başlangıç konumuna dönmek için gereken son adım nedir? 100 ft.

movingCar.move( ); ricochet(movingCar); movingCar.move( ); Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar) Bu yinelemeli metod farkına varmanız gereken genel bir yol izleyecektir.

movingCar.move( ); ricochet(movingCar); movingCar.move( ); Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar) Problem basitse yinelemeli çağrı kullanmadan çözün. Bu, temel durumdur.

movingCar.move( ); ricochet(movingCar); movingCar.move( ); Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar) Problem daha kompleks olursa,aynı problemin daha küçük versiyonunu oluşturmakla başlayın.

movingCar.move( ); ricochet(movingCar); movingCar.move( ); Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar)...daha küçük problemi tamamen çözmek için yinelemeli çağrı kullan..

movingCar.move( ); ricochet(movingCar); movingCar.move( ); Ricochet için yalancı kod ¶ ¶movingCar.isBlocked( ) ise, araba zaten bariyerde demektir. Bu durumda sadece arabayı etrafında döndür. · ·Aksi halde, araba henüz bariyere ulaşmamış demektir,dolayısıyla,başlayacağınız yer: public void ricochet(Car movingCar)...ve son olarak orjinal problemin çözümünü tamamlamak için gereken ne varsa onu yap

ricochet in uygulaması public void ricochet(Car movingCar) { if (movingCar.isBlocked( )) movingCar.turnAround( ); // Temel durum else { // Yinelemeli kalıp movingCar.move( ); ricochet(movingCar); movingCar.move( ); } Bu kalıp için 8. Ünitenin diğer örneklerine bakınız.

Alıştırma ricochet i ayrı bir metod olarak yazmak yerine Car sınıfının yeni bir metodu olarak yazabilir misiniz? Uygulamayı yazmak için 2 dakikanız var public void ricochet( ) {...

Alıştırma public void ricochet( ) { if (isBlocked( )) turnAround( ); // Temel durum else { // yinelemeli kalıp move( ); ricochet( ); move( ); } Bir çözüm:

SON Presentation copyright 1999 Addison Wesley Longman, For use with Data Structures and Other Objects Using Java by Michael Main. Some artwork in the presentation is used with permission from Presentation Task Force (copyright New Vision Technologies Inc) and Corel Gallery Clipart Catalog (copyright Corel Corporation, 3G Graphics Inc, Archive Arts, Cartesia Software, Image Club Graphics Inc, One Mile Up Inc, TechPool Studios, Totem Graphics Inc). Students and instructors who use Data Structures and Other Objects Using Java are welcome to use this presentation however they see fit, so long as this copyright notice remains intact.