Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanMetin Keles Değiştirilmiş 10 yıl önce
1
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
2
Bir Araba Nesnesi p p Örneğe başlamak için, favori aile arabanızı düşünün
3
Bir Araba Nesnesi p p Örneğe başlamak için favori aile arabanızı düşünün
4
Bir Araba Nesnesi p p Örneğe başlamak için favori aile arabanızı düşünün
5
Bir Araba Nesnesi p p Örneğe başlamak için favori aile arabanızı düşünün
6
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.
7
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.
8
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
9
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.
10
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.
11
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.
12
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.
13
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.
14
Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız...
15
Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız...
16
Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız...
17
Misyonunuz p p Bir Araba’yı bariyere gelinceye kadar ilerletecek bir metod yazınız... p p...sonra araba geri dönecek..
18
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
19
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
20
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)
21
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)
22
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( );...
23
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... 100 ft.
24
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.
25
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.
26
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.
27
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.
28
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.
29
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.
30
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.
31
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.
32
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.
33
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.
34
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.
35
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.
36
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.
37
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.
38
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.
39
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.
40
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.
41
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.
42
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..
43
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
44
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.
45
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( ) {...
46
Alıştırma public void ricochet( ) { if (isBlocked( )) turnAround( ); // Temel durum else { // yinelemeli kalıp move( ); ricochet( ); move( ); } Bir çözüm:
47
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.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.