Section 10 Programming Exercises

Bölüm 10 Sorular

*10.1 (The Time class) Design a class named Time. The class contains:

(Time sınıfı) Time isminde bir sınıf tasarlayınız. Bu sınıf;

The data fields hour, minute, and second that represent a time.

A no-arg constructor that creates a Time object for the current time. (The values of the data fields will represent the current time.)

A constructor that constructs a Time object with a specified elapsed time since midnight, January 1, 1970, in milliseconds. (The values of the data fields will represent this time.)

A constructor that constructs a Time object with the specified hour, minute, and second.

Three getter methods for the data fields hour, minute, and second, respectively.

A method named setTime(long elapseTime) that sets a new time for the object using the elapsed time. For example, if the elapsed time is 555550000 milliseconds, the hour is 10, the minute is 19, and the second is 10.

Veri elemanları hour (saat), minute (dakika), ve second (saniye) zaman değerini gösterir.

Şu anki zamanı gösteren Time (zaman) nesnesi yaratan parametresiz constructor. (Veri elemanları şu anki zamanı gösterir.)

1 Ocak 1970 gece yarısından bu ana kadar geçen geçen zamanı milisaniye cinsinden alarak Time nesnesi yaratan constructor. (Veri elemanları bu zamanı gösterir.)

Verilen saat, dakika ve saniye değerleri ile Time nesnesi yaratan bir constructor.

Sırasıyla  hour, minute ve second veri elemanlarına ulaşmak için üç adet getter metodu.

Parametresinde verilen geçen zaman değerini kullanarak, nesnenin zaman değerlerini güncelleyen  setTime(long elapseTime) metodu. Örneğin, geçen zaman değeri 555550000 milisaniye ise bu, 10 saat, 19 dakika ve 10 saniyedir.

Draw the UML diagram for the class and then implement the class. Write a test program that creates two Time objects (using new Time() and new Time(555550000)) and displays their hour, minute, and second in the format hour:minute:second.

Sınıfı yazmadan önce, UML şemasını çiziniz. new Time() ve new Time(555550000) constructorlarını kullanarak iki tane Time nesnesi yaratıp, bu nesnelerin saat, dakika ve saniye değerlerini saat:dakika:saniye biçiminde gösteren bir test programı yazınız.

(Hint: The first two constructors will extract the hour, minute, and second from the elapsed time. For the no-arg constructor, the current time can be obtained using System.currentTimeMillis(), as shown in Listing 2.7, ShowCurrentTime.java.)

(İpucu: İlk iki constructor geçen zaman değerinden, saat, dakika ve saniyeyi hesaplar.  Parametresiz constructor şimdiki zaman değerini System.currentTimeMillis() metodu ile alabilir (madde 2.7 ShowCurrentTime.java).

10.2 (The BMI class) Add the following new constructor in the BMI class:

 (BMI sınıfı) BMI sınıfına aşağıdaki constructor’ı ekleyiniz:

/** Construct a BMI with the specified name, age, weight,  feet, and inches

*/

/**Verilen isim, yaş, ağırlık, fit ve inç değerleri ile VKI nesnesi yaratır.

*/

public BMI(String name, int age, double weight, double feet, double inches)

10.3 (The MyInteger class) Design a class named MyInteger. The class contains:

(MyInteger sınıfı) MyInteger isminde bir sınıf tasarlayınız. Bu sınıf;

An int data field named value that stores the int value represented by this object.

A constructor that creates a MyInteger object for the specified int value.

A getter method that returns the int value.

The methods isEven(), isOdd(), and isPrime() that return true if the value in this object is even, odd, or prime, respectively.

The static methods isEven(int), isOdd(int), and isPrime(int) that return true if the specified value is even, odd, or prime, respectively.

The static methods isEven(MyInteger), isOdd(MyInteger), and isPrime(MyInteger) that return true if the specified value is even, odd, or prime, respectively.

The methods equals(int) and equals(MyInteger) that return true if the value in this object is equal to the specified value.

A static method parseInt(char[]) that converts an array of numeric characters to an int value.

A static method parseInt(String) that converts a string into an int value.

Nesnenin değerini saklayacak,  int türden  value isminde veri elemanı.

Verilen int türden değer ile MyInteger nesnesi yaratan constructor

int türden değeri veren bir getter metodu.

Sırasıyla nesnenin değerinin çift, tek ve asal sayı olup olmadığını test eden ve doğru ise true geri dönüş değeri üreten  isEven(), isOdd() ve isPrime() metotları

Verilen değerin çift, tek ve asal sayı olup olmadığını test eden ve eğer doğru ise true geri dönüş değeri üreten  isEven(int), isOdd(int), ve isPrime(int) statik metotları

Verilen değerin çift, tek ve asal sayı olup olmadığını test eden ve eğer doğru ise true geri dönüş değeri üreten  isEven(MyInteger), isOdd(MyInteger), ve isPrime(MyInteger) statik metotları

Verilen değerin, nesnenin değerine eşit olup olmadığını test eden ve eğer eşitse true geri dönüş değeri üreten  equals(int) ve equals(MyInteger) metotları

Bir Sayısal karakter dizisini int türden değere dönüştüren  parseInt(char[])  statik metodu.

Bir String’i int türden değere dönüştüren  parseInt(String) statik metodu

Draw the UML diagram for the class and then implement the class. Write a client program that tests all methods in the class.

Sınıfı yazmadan önce, UML şemasını çiziniz. Bu sınıfta bulunan tüm metotları test eden bir program yazınız.

10.4 (The MyPoint class) Design a class named MyPoint to represent a point with x- and y-coordinates.

 (MyPoint sınıfı) x- ve y- koordinatları ile temsil edilen MyPoint isminde bir sınıf tasarlayınız.

The class contains:

The data fields x and y that represent the coordinates with getter methods.

A no-arg constructor that creates a point (0, 0).

A constructor that constructs a point with specified coordinates.

A method named distance that returns the distance from this point to a specified point of the MyPoint type.

A method named distance that returns the distance from this point to another point with specified x- and y-coordinates.

Bu sınıf;

Koordinat değerlerini saklayan x ve y veri elemanları ve bunların getter metotları.

Koordinatları (0, 0) olan bir nokta nesnesi yaratan, parametresiz constructor.

Verilen koordinat değerleri ile bir nokta nesnesi yaratan constructor.

Bu noktadan, MyPoint türünde başka bir noktaya olan uzaklığı veren distance metodu.

Bu noktadan, verilen x- ve y- koordinatlarına olan uzaklığı veren distance metodu.

Draw the UML diagram for the class and then implement the class. Write a test program that creates the two points (0, 0) and (10, 30.5) and displays the distance between them.

Sınıfı yazmadan önce, UML şemasını çiziniz. (0, 0) ve (10, 30.5) değerlerinde iki nokta yaratan ve bu noktalar arasındaki mesafeyi gösteren bir test programı yazınız.

*10.5 (Displaying the prime factors) Write a program that prompts the user to enter a positive integer and displays all its smallest factors in decreasing order. For example, if the integer is 120, the smallest factors are displayed as 5, 3, 2, 2, 2. Use the StackOfIntegers class to store the factors (e.g., 2, 2, 2, 3, 5) and

retrieve and display them in reverse order.

(Asal çarpanları göster) Kullanıcıdan pozitif bir tam sayı alan ve bu sayının tüm asal çarpanlarını azalan sırada gösteren bir program yazınız. Örneğin, 120 tam sayısı girildiğinde asal çarpanlar  5, 3, 2, 2, 2 şeklinde gösterilecek. Çarpanları (ör., 2, 2, 2, 3, 5) saklamak için StackOfIntegers sınıfını kullanın ve

buradan alarak ters sırada gösteriniz.

*10.6 (Displaying the prime numbers) Write a program that displays all the prime numbers less than 120 in decreasing order. Use the StackOfIntegers class to store the prime numbers (e.g., 2, 3, 5, ...) and retrieve and display them in reverse order.

(Asal sayıları göster)  120 ’den küçük tüm asal sayıları azalan sırada gösteren bir program yazınız. Asal sayıları saklamak için (ör., 2,  3, 5...) saklamak için StackOfIntegers sınıfını kullanın ve buradan alarak ters sırada gösteriniz.

**10.7 (Game: ATM machine) Use the Account class created in Programming Exercise 9.7 to simulate an ATM machine. Create ten accounts in an array with id 0, 1, . . . , 9, and initial balance $100. The system prompts the user to enter an id. If the id is entered incorrectly, ask the user to enter a correct id. Once an id is accepted, the main menu is displayed as shown in the sample run. You can enter a choice 1 for viewing the current balance, 2 for withdrawing money, 3 for depositing money, and 4 for exiting the main menu. Once you exit, the system will prompt for an id again. Thus, once the system starts, it will not stop.

(Oyun: ATM)  ATM ‘yi simüle etmek için Programlama Soruları  9.7 ‘de yazılan Account sınıfını kullanın. Başlangıç bakiyesi 100$ ve id’leri sırasıyla  0, 1, . . . , 9 olan on tane hesap yaratınız. Uygulama kullanıcıdan bir id girmesini isteyecek. Eğer yanlış bir id değeri girilirse, kullanıcıdan id değerini doğru şekilde girmesi istenecek. Doğru id değeri girilirse ana menü örnekte olduğu gibi gösterilecek. Güncel bakiye için 1, para çekmek için 2, para yatırmak için 3, ve çıkış için 4 seçeneklerinden biri girilebilecek. Çıkış yapıldığında ekranda ilgili değer bir kere daha gösterilecek. Uygulama kapatılana kadar çalışmaya devam edecek.

***10.8 (Financial: the Tax class) Programming Exercise 8.12 writes a program for computing taxes using arrays. Design a class named Tax to contain the following instance data fields:

(Finans: Tax sınıfı) Programlama Soruları 8.12’de dizilerle vergi hesaplayan bir uygulama bulunmaktadır. Aşağıdaki veri elemanlarına sahip Tax isimli bir sınıf tasarlayınız.

int filingStatus: One of the four tax-filing statuses: 0—single filer, 1— married filing jointly or qualifying widow(er), 2—married filing separately, and 3—head of household. Use the public static constants SINGLE_FILER (0), MARRIED_JOINTLY_OR_QUALIFYING_WIDOW(ER) (1), MARRIED_SEPARATELY (2), HEAD_OF_HOUSEHOLD (3) to represent the statuses.

int[][] brackets: Stores the tax brackets for each filing status.

double[] rates: Stores the tax rates for each bracket.

double taxableIncome: Stores the taxable income.

int filingStatus: Bu alan bildirim türünü gösterir. 0—bekar, 1— eşler birlikte ya da 2 yıldır dul, 2—eşler ayrı ayrı, ve 3—aile reisi. Bildirim türlerini göstermek için public statik sabitleri kullanınız. SINGLE_FILER (0), MARRIED_JOINTLY_OR_QUALIFYING_WIDOW(ER) (1), MARRIED_SEPARATELY (2), HEAD_OF_HOUSEHOLD (3)

int[][] brackets: Her bildirim türü için vergi dilimlerini saklar.

double[] rates: Her gelir dilimi için vergi oranlarını gösterir.

double taxableIncome: Vergilendirilebilir geliri gösterir.

Provide the getter and setter methods for each data field and the getTax() method that returns the tax. Also provide a no-arg constructor and the constructor Tax(filingStatus, brackets, rates, taxableIncome).

Her bir veri elemanının getter ve setter metotlarını yazınız. Vergi miktarına geri dönen getTax() metodunu yazınız. Parametresiz constructor ve  Tax(filingStatus, brackets, rates, taxableIncome) parametrelerine sahip constructor’ı yazınız.

Draw the UML diagram for the class and then implement the class. Write a test program that uses the Tax class to print the 2001 and 2009 tax tables for taxable income from $50,000 to $60,000 with intervals of $1,000 for all four statuses. The tax rates for the year 2009 were given in Table 3.2. The tax rates for 2001 are shown in Table 10.1.

Sınıfı yazmadan önce, UML şemasını çiziniz. 2001 ve 2009 vergi tablolarını, dört  farklı bildirim türü için, vergilendirilebilir gelirin $ 50,000 ile $ 60,000 aralığında 1,000 $ aralıklarla göstermek için Tax sınıfını kullanan bir test programı yazın. Tablo 3.2’de 2009 yılı vergi oranlarını bulabilirsiniz. Tablo 10.1’de 2001 yılı vergi oranlarını bulabilirsiniz.

**10.9 (The Course class) Revise the Course class as follows:

(Course sınıfı)  Course sınıfını yeniden düzenleyiniz.

The array size is fixed in Listing 10.6. Improve it to automatically increase the array size by creating a new larger array and copying the contents of the current array to it.

Implement the dropStudent method.

Add a new method named clear() that removes all students from the course.

Madde 10.6’da sabit boyutlu dizi kullanılmıştı. Yeni bir dizi yaratıp dizi boyutunu otomatik olarak arttıracak ve geçerli dizinin içeriğini yeni yaratılan diziye kopyalayacak bir geliştirme yapınız.

 dropStudent metodunu yazınız.

Kursa kaydolmuş tüm öğrencileri silen clear() isimli yeni bir metot yazınız.

Write a test program that creates a course, adds three students, removes one, and displays the students in the course.

Bir kurs nesnesi yaratan, kursa üç öğrenci ekleyen, bu öğrencilerden birini silen ve kursa kayıtlı tüm öğrencileri gösteren bir test programı yazınız.

*10.10 (The Queue class) Section 10.6 gives a class for Stack. Design a class named Queue for storing integers. Like a stack, a queue holds elements. In a stack, the elements are retrieved in a last-in first-out fashion. In a queue, the elements are retrieved in a first-in first-out fashion. The class contains:

(Queue sınıfı) Bölüm 10.6  Stack sınıfı bulunmaktadır. Tam sayı türünden değerleri saklamak için Queue isimli bir sınıf tasarlayınız. Stack veri yapısında olduğu gibi Queue veri yapısı da değerleri saklamak için kullanılır. Stack veri yapısında son giren ilk çıkar biçimindeyken,  Queue veri yapısında ilk giren ilk çıkar biçimindedir. Bu sınıf;

An int[] data field named elements that stores the int values in the queue.

A data field named size that stores the number of elements in the queue.

A constructor that creates a Queue object with default capacity 8.

The method enqueue(int v) that adds v into the queue.

The method dequeue() that removes and returns the element from the queue.

The method empty() that returns true if the queue is empty.

The method getSize() that returns the size of the queue.

Queue’daki değerleri saklayacak,  int[] türden  elements isminde veri elemanı.

Queue’daki eleman sayısını tutan  size isminde veri elemanı.

Varsayılan kapasitesi 8 olan bir  Queue nesnesi yaratan constructor.

Queue’ya değer eklemek için  enqueue(int v) metodu.

Queue’daki elemanı silen ve sildiği elamanı döndüren dequeue() metodu.

Queue boşsa true değer dönen empty() metodu.

Queue’daki eleman sayısını veren  getSize() metodu.

Draw an UML diagram for the class. Implement the class with the initial array size set to 8. The array size will be doubled once the number of the elements exceeds the size. After an element is removed from the beginning of the array, you need to shift all elements in the array one position the left. Write a test program that adds 20 numbers from 1 to 20 into the queue and removes these numbers and displays them.

Sınıfın UML şemasını çiziniz. Dizinin başlangıç boyutu 8 olacak şekilde sınıfı yazınız. Eğer eleman sayısı dizinin boyutunu aşarsa, dizi boyutu iki katına çıkarınız. Dizinin başındaki eleman silindiğinde, dizide bulunan tüm elemanları bir pozisyon sola kaydırmalısınız. 1’den 20’ye kadar sayıları kuyruğa ekleyen ve sonra silen bir test programı yazınız.

*10.11 (Geometry: the Circle2D class) Define the Circle2D class that contains:

(Geometri:  Circle2D sınıfı) Circle2D isminde bir sınıf tasarlayınız. Bu sınıf:

Two double data fields named x and y that specify the center of the circle with getter methods.

A data field radius with a getter method.

A no-arg constructor that creates a default circle with (0, 0) for (x, y) and 1 for radius.

A constructor that creates a circle with the specified x, y, and radius.

A method getArea() that returns the area of the circle.

A method getPerimeter() that returns the perimeter of the circle.

A method contains(double x, double y) that returns true if the specified point (x, y) is inside this circle (see Figure 10.21a).

A method contains(Circle2D circle) that returns true if the specified circle is inside this circle (see Figure 10.21b).

A method overlaps(Circle2D circle) that returns true if the specified circle overlaps with this circle (see Figure 10.21c).

Çemberin merkez koordinatlarını gösteren, double türden x ve y isminde iki adet veri elemanı. Bu veri elemanlarının getter metotları.

Çemberin yarıçapını saklayan  radius isminde veri elemanı ve getter metodu.

Merkez koordinatı (0, 0) ve yarıçapı 1 olan bir çember nesnesi yaratan parametresiz constructor.

Belirtilen x, y ve radius parametreleri bir çember nesnesi yaratan constructor.

Geri dönüş değeri çemberin alanı olan getArea() metodu.

Geri dönüş değeri çemberin çevresi olan  getPerimeter() metodu.

Verilen (x, y) noktası çemberin içerisinde ise true dönen  contains(double x, double y) metodu. (bkz. Şekil 10.21a).

Parametresinde verilen çember, bu çemberin içerisinde ise true dönen  contains(Circle2D circle) metodu.  (Bkz. Şekil  10.21b).

Parametresinde verilen çember, bu çember ile kesişiyor ise  true dönen  overlaps(Circle2D circle) metodu.  (Bkz. Şekil  10.21c).

FIGURE 10.21 (a) A point is inside the circle. (b) A circle is inside another circle. (c) A circle overlaps another circle.

ŞEKİL 10.21 (a) Nokta çemberin içerisinde (b) Çember diğer çemberin içerisinde. (c) Kesişen çemberler.

Draw the UML diagram for the class and then implement the class. Write a test program that creates a Circle2D object c1 (new Circle2D(2, 2, 5.5)), displays its area and perimeter, and displays the result of c1.contains(3, 3), c1.contains(new Circle2D(4, 5, 10.5)), and c1.overlaps(new Circle2D(3, 5, 2.3)).

Sınıfı yazmadan önce, UML şemasını çiziniz. c1 isminde  Circle2D nesnesi yaratan  (new Circle2D(2, 2, 5.5)), bu çemberin alanını, çevresini ve c1.contains(3, 3), c1.contains(new Circle2D(4, 5, 10.5)),  c1.overlaps(new Circle2D(3, 5, 2.3)) metot çağrılarının sonuçlerını gösteren bir test programı yazınız.

***10.12 (Geometry: the Triangle2D class) Define the Triangle2D class that contains:

(Geometri:  Triangle2D sınıfı) Triangle2D isminde bir sınıf tasarlayınız. Bu sınıf:

Three points named p1, p2, and p3 of the type MyPoint with getter and setter methods. MyPoint is defined in Programming Exercise 10.4.

A no-arg constructor that creates a default triangle with the points (0, 0), (1, 1), and (2, 5).

A constructor that creates a triangle with the specified points.

A method getArea() that returns the area of the triangle.

A method getPerimeter() that returns the perimeter of the triangle.

A method contains(MyPoint p) that returns true if the specified point p is inside this triangle (see Figure 10.22a).

A method contains(Triangle2D t) that returns true if the specified triangle is inside this triangle (see Figure 10.22b).

A method overlaps(Triangle2D t) that returns true if the specified triangle overlaps with this triangle (see Figure 10.22c).

 p1, p2 ve p3 isminde  MyPoint türünden üç nokta ve bu veri elemanlarının getter/setter metotları. Programlama Soruları 10.4’te MyPoint sınıfı tanımlanmıştı.

Köşe noktaları; (0, 0), (1, 1), ve (2, 5) olan bir üçgen yaratan parametresiz constructor.

Verilen noktalar ile bir üçgen nesnesi yaratan constructor.

Geri dönüş değeri üçgenin alanı olan getArea() metodu.

Geri dönüş değeri üçgenin çevresi olan  getPerimeter() metodu.

Parametresinde verilen nokta, bu üçgenin içerisinde ise true dönen  contains(MyPoint p) metodu. (Bkz. Şekil 10.22a).

Parametresinde verilen üçgen bu üçgenin içerisinde ise true dönen  contains(Triangle2D t) metodu.  (Bkz. Şekil  10.22b).

Parametresinde verilen üçgen , bu üçgen ile kesişiyor ise  true dönen  overlaps(Triangle2D t) metodu.  (Bkz. Şekil  10.22c).

FIGURE 10.22 (a) A point is inside the triangle. (b) A triangle is inside another triangle. (c) A triangle overlaps another triangle.

ŞEKİL 10.22 (a) Nokta üçgenin içinde. (b) Üçgen diğer üçgenin içinde. (c) Kesişen üçgenler.

Draw the UML diagram for the class and then implement the class. Write a test program that creates a Triangle2D objects t1 using the constructor new Triangle2D(new MyPoint(2.5, 2), new MyPoint(4.2, 3), new MyPoint(5, 3.5)), displays its area and perimeter, and displays the result of t1.contains(3, 3), r1.contains(new Triangle2D(new MyPoint(2.9, 2), new MyPoint(4, 1), MyPoint(1, 3.4))), and t1.overlaps(new Triangle2D(new MyPoint(2, 5.5), new MyPoint(4, -3), MyPoint(2, 6.5))).

Sınıfı yazmadan önce, UML şemasını çiziniz.  t1 isminde new Triangle2D(new MyPoint(2.5, 2), new MyPoint(4.2, 3), new MyPoint(5, 3.5)),  construtor ile bir Triangle2D nesnesi yaratan, bu üçgenin alanını, çevresini ve  t1.contains(3, 3), r1.contains(new Triangle2D(new MyPoint(2.9, 2), new MyPoint(4, 1), MyPoint(1, 3.4))), ve t1.overlaps(new Triangle2D(new MyPoint(2, 5.5), new MyPoint(4, -3), MyPoint(2, 6.5))) metot çağrılarının sonuçlarını gösteren bir test programı yazınız.

(Hint: For the formula to compute the area of a triangle, see Programming Exercise 2.19. To detect whether a point is inside a triangle, draw three dashed lines, as shown in Figure 10.23. If the point is inside a triangle, each dashed line should intersect a side only once. If a dashed line intersects a side twice, then the point must be outside the triangle. For the algorithm of finding the intersecting point of two lines, see Programming Exercise 3.25.)

(İpucu: Üçgenin alan formülü için Programlama Soruları 2.19’a bakabilirsiniz. Noktanın üçgenin içinde olup olmadığını anlamak için, Şekil 10.23’de gösterildiği gibi üç tane kesik çizgi çizin. Eğer nokta üçgenin içerisinde ise, her bir kesik çizgi bir kenarla sadece bir kez kesişmelidir.  Eğer kesik çizgi, bir kenarı iki kere kesiyorsa nokta üçgenin dışındadır. İki doğrunun kesişim noktasını bulan algoritma için, Programlama Soruları 3.25’e bakınız.)

FIGURE 10.23 (a) A point is inside the triangle. (b) A point is outside the triangle.

ŞEKİL 10.23 (a) Nokta, üçgenin içinde. (b) Nokta, üçgenin dışında.

*10.13 (Geometry: the MyRectangle2D class) Define the MyRectangle2D class that contains:

(Geometri:  MyRectangle2D sınıfı) MyRectangle2D isminde bir sınıf tasarlayınız. Bu sınıf:

Two double data fields named x and y that specify the center of the rectangle with getter and setter methods. (Assume that the rectangle sides are parallel to x- or y- axes.)

The data fields width and height with getter and setter methods.

A no-arg constructor that creates a default rectangle with (0, 0) for (x, y) and 1 for both width and height.

A constructor that creates a rectangle with the specified x, y, width, and height.

A method getArea() that returns the area of the rectangle.

A method getPerimeter() that returns the perimeter of the rectangle.

A method contains(double x, double y) that returns true if the specified point (x, y) is inside this rectangle (see Figure 10.24a).

A method contains(MyRectangle2D r) that returns true if the specified rectangle is inside this rectangle (see Figure 10.24b).

A method overlaps(MyRectangle2D r) that returns true if the specified rectangle overlaps with this rectangle (see Figure 10.24c).

Dikdörtgenin merkez koordinatlarını gösteren, double türden x ve y isminde iki adet veri elemanı. Bu veri elemanlarının getter ve setter metotları. (Dikdörtgenin kenarlarının x- ve y- koordinat eksenlerine paralel olduğunu varsayalım)

En ve boy değerleri için  width ve height veri elemanları ve getter/setter metotları.

Merkez koordinatı (x, y) için (0, 0) ve width ve height değeri 1 olan varsayılan bir dikdörtgen nesnesi yaratan parametresiz constructor.

Belirtilen x, y  width ve height parametreleri ile bir dikdörtgen nesnesi yaratan constructor.

Geri dönüş değeri dikdörtgenin alanı olan getArea() metodu.

Geri dönüş değeri dikdörtgenin çevresi olan  getPerimeter() metodu.

Verilen (x, y) noktası dikdörtgenin içerisinde ise true dönen  contains(double x, double y) metodu. (bkz. Şekil 10.24a).

Parametresinde verilen dikdörtgen bu dikdörtgenin içerisinde ise true dönen  contains(MyRectangle2D r) metodu.  (Bkz. Şekil  10.24b).

Parametresinde verilen dikdörtgen bu dikdörtgen ile kesişiyor ise true dönen  overlaps(MyRectangle2D r) metodu.  (Bkz. Şekil  10.24c).

FIGURE 10.24 A point is inside the rectangle. (b) A rectangle is inside another rectangle. (c) A rectangle overlaps another rectangle. (d) Points are enclosed inside a rectangle.

ŞEKIL 10.24 Nokta dikdörtgenin içerisinde. (b) Dikdörtgen diğer dikdörtgenin içerisinde. (c) Kesişen dikdörtgenler. (d) Dikdörtgen ile çevrelenmiş noktalar.

Draw the UML diagram for the class and then implement the class. Write a test program that creates a MyRectangle2D object r1 (new MyRectangle2D(2, 2, 5.5, 4.9)), displays its area and perimeter, and displays the result of r1.contains(3, 3), r1.contains(new MyRectangle2D(4, 5, 10.5, 3.2)), and r1.overlaps(new MyRectangle2D(3, 5, 2.3, 5.4)).

Sınıfı yazmadan önce, UML şemasını çiziniz. r1 isminde  MyRectangle2D nesnesi yaratan  (new MyRectangle2D(2, 2, 5.5, 4.9)), bu dikdörtgenin alanını, çevresini ve r1.contains(3, 3), r1.contains(new MyRectangle2D(4, 5, 10.5, 3.2)), ve r1.overlaps(new MyRectangle2D(3, 5, 2.3, 5.4)) metot çağrılarının sonuçlarını gösteren bir test programı yazınız.

*10.14 (The MyDate class) Design a class named MyDate. The class contains:

 (MyDate sınıfı) MyDate isminde bir sınıf tasarlayınız. Bu sınıf;

The data fields year, month, and day that represent a date. month is 0-based, i.e., 0 is for January.

A no-arg constructor that creates a MyDate object for the current date.

A constructor that constructs a MyDate object with a specified elapsed time since midnight, January 1, 1970, in milliseconds.

A constructor that constructs a MyDate object with the specified year, month, and day.

Three getter methods for the data fields year, month, and day, respectively.

A method named setDate(long elapsedTime) that sets a new date for the object using the elapsed time.

Veri elemanları year, month ve day tarih bilgisini gösterir. month değişkeni 0’dan başlar. Yani Ocak ayının değeri 0’dır.

Şu anki tarihi gösteren MyDate nesnesi yaratan parametresiz constructor .

1 Ocak 1970 gece yarısından bu ana kadar geçen geçen zamanı milisaniye cinsinden alarak MyDate nesnesi yaratan constructor.

Verilen yıl, ay ve gün değerleri ile MyDate nesnesi yaratan constructor.

year, month ve day, veri elemanlarına ulaşmak için üç adet getter metodu.

Parametresinde verilen geçen zaman değerini kullanarak, nesnenin tarih bilgisini güncelleyen  setDate(long elapseTime) metodu.

Draw the UML diagram for the class and then implement the class. Write a test program that creates two MyDate objects (using new MyDate() and new MyDate(34355555133101L)) and displays their year, month, and day.

Sınıfı yazmadan önce, UML şemasını çiziniz. İki tane MyDate nesnesi ( new MyDate() ve new MyDate(34355555133101L)) yaratan ve bu nesnelerin yıl, ay, ve gün bilgisini gösteren bir test programı yazınız.

(Hint: The first two constructors will extract the year, month, and day from the elapsed time. For example, if the elapsed time is 561555550000 milliseconds, the year is 1987, the month is 9, and the day is 18. You may use the GregorianCalendar class discussed in Programming Exercise 9.5 to simplify coding.)

(İpucu: İlk iki constructor geçen zaman değerinden yıl, ay ve günü hesaplar. Örneğin, geçen zaman değeri 561555550000 milisaniye ise, yıl 1987, ay 9,  ve gün 18 değerleri elde edilir. Kodlama yükünü azaltmak için Programlama Soruları 9.5’teki  GregorianCalendar sınıfını kullanabilirsiniz.

*10.15 (Geometry: the bounding rectangle) A bounding rectangle is the minimum rectangle that encloses a set of points in a two-dimensional plane, as shown in Figure 10.24d. Write a method that returns a bounding rectangle for a set of points in a two-dimensional plane, as follows:

(Geometri: sınır dikdörtgen) Sınır dikdörtgen iki boyutlu düzlemde bulunan noktaları çevreleyen en küçük dikdörtgendir. İki boyutlu düzlemde bulunan noktaların sınır dikdörtgenini bulan aşağıdaki bildirime sahip bir metot yazınız:

public static MyRectangle2D getRectangle(double[][] points)

public static MyRectangle2D getRectangle(double[][] points)

The Rectangle2D class is defined in Programming Exercise 10.13. Write a test program that prompts the user to enter five points and displays the bounding rectangle’s center, width, and height. Here is a sample run:

Rectangle2D sınıfı Programlama Soruları 10.13’te tanımlanmıştır. Kullanıcıdan 5 nokta girmesini isteyen ve bu noktaların sınır dikdörtgeninin merkez koordinatı, en ve boyunu hesaplayıp gösteren bir test programı yazınız.  Örnek akışı inceleyiniz:

*10.16 (Divisible by 2 or 3) Find the first ten numbers with 50 decimal digits that are divisible by 2 or 3.

( 2 ya da 3 bölünebilme) 2 ya da 3 ile bölünebilen, 50 ondalık basamaklı ilk on sayıyı bulunuz.

*10.17 (Square numbers) Find the first ten square numbers that are greater than Long.MAX_VALUE. A square number is a number in the form of n2. For example, 4, 9, and 16 are square numbers. Find an efficient approach to run your program fast.

(Kare sayılar) Long.MAX_VALUE  Değerinden büyük olan ilk on kare sayıyı bulunuz. n2 biçiminde sayılar kare sayılardır. Örneğin; 4, 9, 16 kare sayılardır. Programınızın daha hızlı çalışması için verimli bir algoritma geliştiriniz.

*10.18 (Large prime numbers) Write a program that finds five prime numbers larger than Long.MAX_VALUE.

(Büyük asal sayılar)  Long.MAX_VALUE değerinden büyük olan ilk beş asal sayıyı bulan bir program yazınız.

*10.19 (Mersenne prime) A prime number is called a Mersenne prime if it can be written in the form 2p - 1 for some positive integer p. Write a program that finds all Mersenne primes with p … 100 and displays the output as shown below.

(Mersenne asal sayıları)Bir asal sayı,  Mersenne asal sayısı ise, p pozitif tam sayısı için  2p - 1 şeklinde yazılabilir.   p … 100  için tüm Mersenne asal sayılarını bulan ve sonucu aşağıdaki şekilde gösteren bir program yazınız.

(Hint: You have to use BigInteger to store the number, because it is too big to be stored in long. Your program may take several hours to run.)

(İpucu: Sayıyı saklamak için BigInteger kullanmalısınız, çünkü bu sayı long sınırını aşacaktır. Programınızın çalışma süresi birkaç saat sürebilir.)

*10.20 (Approximate e) Programming Exercise 5.26 approximates e using the following series:

(e sayısı hesaplama) Aşağıdaki seriyi kullanarak e sayısının yaklaşık değerini hesaplayabilirsiniz: (Bkz. Programlama Soruları 5.26)

In order to get better precision, use BigDecimal with 25 digits of precision in the computation. Write a program that displays the e value for i = 100, 200, . . ., and 1000.

Daha hassas bir sonuç için 25 basamak duyarlılığa sahip BigDecimal kullanınız.  i = 100, 200, . . ., ve 1000 değerleri için e’yi hesaplayıp gösteren bir program yazınız.

10.21 (Divisible by 5 or 6) Find the first ten numbers greater than Long.MAX_VALUE that are divisible by 5 or 6.

( 5 ya da 6 tam bölünme) Long.MAX_VALUE ‘dan büyük ve 5 ya da 6’ya tam bölünebilen ilk on sayıyı bulunuz.

**10.22 (Implement the String class) The String class is provided in the Java library. Provide your own implementation for the following methods (name the new class MyString1):

( String sınıfı)  String sınıfı Java kütüphanesinde bulunmaktadır. Aşağıdaki metotları kendiniz yeniden yazınız. (Oluşturduğunuz yeni sınıfın adı  MyString1 olsun):

public MyString1(char[] chars);

public char charAt(int index);

public int length();

public MyString1 substring(int begin, int end);

public MyString1 toLowerCase();

public boolean equals(MyString1 s);

public static MyString1 valueOf(int i);

         

**10.23 (Implement the String class) The String class is provided in the Java library. Provide your own implementation for the following methods (name the new class MyString2):

( String sınıfı)  String sınıfı Java kütüphanesinde bulunmaktadır. Aşağıdaki metotları kendiniz yeniden yazınız. (Oluşturduğunuz yeni sınıfın adı  MyString2 olsun):

public MyString2(String s);

public int compare(String s);

public MyString2 substring(int begin);

public MyString2 toUpperCase();

public char[] toChars();

public static MyString2 valueOf(boolean b);

10.24 (Implement the Character class) The Character class is provided in the Java library. Provide your own implementation for this class. Name the new class MyCharacter.

( Character sınıfı)  Character  sınıfı Java kütüphanesinde bulunmaktadır. Bu sınıfı kendiniz yeniden yazınız. Yazdığınız yeni sınıfın adı MyCharacter olsun.

**10.25 (New string split method) The split method in the String class returns an array of strings consisting of the substrings split by the delimiters. However, the delimiters are not returned. Implement the following new method that returns an array of strings consisting of the substrings split by the matching delimiters, including the matching delimiters.

(Yeni string split metodu)  String sınıfında bulunan  split metodu,  verilen ayırıcıya göre bölünmüş alt string’lerden oluşan bir dizi geri döndürür. Ancak ayırıcı geri döndürülmez. Verilen ayırıcıya göre oluşturulmuş alt string’lerle birlikte ayırıcıyı da geri döndüren, aşağıdaki bildirime sahip split metodunu yazınız.

public static String[] split(String s, String regex)

For example, split("ab#12#453", "#") returns ab, #, 12, #, 453 in an array of String, and split("a?b?gf#e", "[?#]") returns a, b, ?, b, gf, #, and e in an array of String.

Örneğin split(”ab#12#453”, “#”ab#12#453”, “#”) geri dönüş değeri ab, #, 12, #, 453  ve split(”a?b?gf#e”, “[?#]”a?b?gf#e”, “[?#]”) geri dönüş değeri a, b, ?, b, gf, # ve e‘den oluşan bir String dizisidir.

*10.26 (Calculator) Revise Listing 7.9, Calculator.java, to accept an expression as a string in which the operands and operator are separated by zero or more spaces. For example, 3+4 and 3 + 4 are acceptable expressions. Here is a sample run:

(Hesap Makinesi) Madde  7.9’daki Calculator.java,’yı  girilen ifadeyi string olarak alacak ve operatör ile operand arasında boşluk olsa da olmasa da kabul edecek şekilde yeniden düzenleyeniz. Örneğin; 3+4 ve 3 + 4  geçerli ifadelerdir. Örnek akışı inceleyiniz:

**10.27 (Implement the StringBuilder class) The StringBuilder class is provided in the Java library. Provide your own implementation for the following methods (name the new class MyStringBuilder1):

( StringBuilder sınıfı) StringBuilder  sınıfı Java kütüphanesinde bulunmaktadır. Aşağıdaki metotları kendiniz yeniden yazınız. (Oluşturduğunuz yeni sınıfın adı  MyStringBuilder1 olsun):

public MyStringBuilder1(String s);

public MyStringBuilder1 append(MyStringBuilder1 s);

public MyStringBuilder1 append(int i);

public int length();

public char charAt(int index);

public MyStringBuilder1 toLowerCase();

public MyStringBuilder1 substring(int begin, int end);

public String toString();

**10.28 (Implement the StringBuilder class) The StringBuilder class is provided in the Java library. Provide your own implementation for the following methods (name the new class MyStringBuilder2):

( StringBuilder sınıfı) StringBuilder  sınıfı Java kütüphanesinde bulunmaktadır. Aşağıdaki metotları kendiniz yeniden yazınız. (Oluşturduğunuz yeni sınıfın adı  MyStringBuilder2 olsun):

public MyStringBuilder2();

public MyStringBuilder2(char[] chars);

public MyStringBuilder2(String s);

public MyStringBuilder2 insert(int offset, MyStringBuilder2 s);

public MyStringBuilder2 reverse();

public MyStringBuilder2 substring(int begin);

public MyStringBuilder2 toUpperCase();