Section 13 Programming Exercises

Bölüm 13 Sorular

**13.1 (Triangle class) Design a new Triangle class that extends the abstract GeometricObject class. Draw the UML diagram for the classes Triangle and GeometricObject and then implement the Triangle class. Write a test program that prompts the user to enter three sides of the triangle, a color, and a Boolean value to indicate whether the triangle is filled. The program should create a Triangle object with these sides and set the color and filled properties using the input. The program should display the area, perimeter, color, and true or false to indicate whether it is filled or not.

(Üçgen sınıfı) GeometricObject soyut sınıfından türetilmiş bir  Triangle sınıfı tasarlayınız. Triangle ve GeometricObject sınıfları için UML şemasını çiziniz ve  Triangle sınıfını yazınız. Kullanıcıdan, üçgenin kenar değerlerini, üçgenin rengi ve üçgenin dolu olup olmadığı bilgisini Boolean  türünden bir değer olarak alan bir test programı yazınız. Programınız Triangle nesnesini, girilen kenar değerleri, renk ve dolu olup olmadığı bilgisini kullanarak yaratacaktır. Program üçgenin alanını, çevresini, rengini ve dolu olup olmadığını belirten true ya da false değerini gösterecektir.

*13.2 (Shuffle ArrayList) Write the following method that shuffles an ArrayList of numbers:

public static void shuffle(ArrayList<Number> list)

(ArrayList’i karıştır) Sayılardan oluşan bir ArrayList’teki değerleri karıştıran, aşağıdaki bildirime sahip bir metot yazınız.

public static void shuffle(ArrayList<Number> list)

*13.3 (Sort ArrayList) Write the following method that sorts an ArrayList of numbers.

public static void sort(ArrayList<Number> list)

(ArrayList’i sırala) Sayılardan oluşan bir ArrayList’i sıralayan, aşağıdaki bildirime sahip bir metot yazınız.

public static void sort(ArrayList<Number> list)

**13.4 (Display calendars) Rewrite the PrintCalendar class in Listing 6.12 to display a calendar for a specified month using the Calendar and GregorianCalendar classes. Your program receives the month and year from the command line. For example:

**13.4 (Takvimleri göster) Madde 6.12’deki PrintCalendar sınıfını,  Calendar ve GregorianCalendar sınıflarını kullanarak belirtilen aya göre takvimi gösterecek şekilde yeniden yazınız. Programınız ay ve yıl bilgisini komut satırından alacaktır. Örneğin:

java Exercise13_04 5 2016

This displays the calendar shown in Figure 13.9.

Programın çalıştırılmasının ardından Şekil 13.9’daki takvim gösterilecektir.

FIGURE 13.9 The program displays a calendar for May 2016.

ŞEKİL13.9 Program 2016 yılı Mayıs ayı takvimini gösterir.

You also can run the program without the year. In this case, the year is the current year. If you run the program without specifying a month and a year, the month is the current month.

Aynı programı yıl girilmeden de çalıştırabilirsiniz. Bu durumda  içinde bulunulan yıl kullanılacaktır. Eğer program, yıl ve ay girilmeden çalıştırılırsa bu durumda içinde bulunulan ay ve yıla ait takvim gösterilecektir.

*13.5 (Enable GeometricObject comparable) Modify the GeometricObject class to implement the Comparable interface, and define a static max method in the GeometricObject class for finding the larger of two GeometricObject objects.

Draw the UML diagram and implement the new GeometricObject class. Write a test program that uses the max method to find the larger of two circles and the larger of two rectangles.

(GeometricObject’i karşılatırılabilir yap) GeometricObject sınıfında Comparable  arayüzünü de yazınız ve iki GeometricObject nesnesinden büyük olanını bulmak için  GeometricObject sınıfında statik bir max metodu tanımlayınız.

UML şemasını çiziniz ve yeni bir GeometricObject sınıfı yazınız. max metodunu kullanarak iki çemberden ve iki dikdörtgenden büyük olanını bulan bir test programı yazınız.

*13.6 (The ComparableCircle class) Define a class named ComparableCircle that extends Circle and implements Comparable. Draw the UML diagram and implement the compareTo method to compare the circles on the basis of area. Write a test class to find the larger of two instances of ComparableCircle objects.

( ComparableCircle sınıfı) Circle sınıfından türetilmiş bir  ComparableCircle sınıfı tanımlayınız ve  Comparable’ı yazınız. UML şemasını çiziniz ve iki daireyi alanlarına göre karşılaştıran compareTo  metodunu yazınız. ComparableCircle türünden iki nesneden büyük olanını bulan bir test sınıfı yazınız.

*13.7 (The Colorable interface) Design an interface named Colorable with a void method named howToColor(). Every class of a colorable object must implement the Colorable interface. Design a class named Square that extends GeometricObject and implements Colorable. Implement howToColor to display the message Color all four sides.

Draw a UML diagram that involves Colorable, Square, and GeometricObject.

Write a test program that creates an array of five GeometricObjects. For each object in the array, display its area and invoke its howToColor method if it is colorable.

(Colorable arayüzü) howToColor() isimli bir void metodu olan Colorable isimli bir arayüz tasarlayınız. Boyanabilir her bir nesne Colorable arayüzünü yazmak zorundadır.  GeometricObject sınıfından türetilmiş ve Colorable arayüzünü yazmış Square isimli bir sınıf tasarlayınız. howToColor metodunu yazınız ve “Dört kenarı da boyalıdır” mesajını gösteriniz.

Colorable, Square ve GeometricObject’i de kapsayacak şekilde UML şemasını çiziniz.

Beş adet GeometricObject‘den oluşan bir dizi yaratan test programı yazınız. Dizideki her bir nesne alanını gösterecek ve eğer nesne Colorable arayüzünü yazmışsa howToColor metodunu çağıracaktır.

*13.8 (Revise the MyStack class) Rewrite the MyStack class in Listing 11.10 to perform a deep copy of the list field.

(MyStack sınıfını düzenleyin) Madde 11.10’da bulunan MyStack sınıfının list alanını derin kopyalama yapacak şekilde yeniden düzenleyiniz.

*13.9 (Enable Circle comparable) Rewrite the Circle class in Listing 13.2 to extend GeometricObject and implement the Comparable interface. Override the equals method in the Object class. Two Circle objects are equal if their radii are the same. Draw the UML diagram that involves Circle, GeometricObject, and Comparable.

(Circle sınıfını karşılaştırılabilir yapma) Madde 13.2’deki Circle sınıfını GeometricObject sınıfından türetiniz ve  Comparable arayüzü ile birlikte yeniden yazınız. Object sınıfının equals metodunu override ediniz. Eğer yarıçapları aynı ise iki Circle nesnesi birbirine eşittir. Circle, GeometricObject ve Comparable’i de kapsayacak şekilde UML şemasını çiziniz.

*13.10 (Enable Rectangle comparable) Rewrite the Rectangle class in Listing 13.3 to extend GeometricObject and implement the Comparable interface. Override the equals method in the Object class. Two Rectangle objects are equal if their areas are the same. Draw the UML diagram that involves Rectangle, GeometricObject, and Comparable.

(Dikdörtgen sınıfını karşılaştırılabilir yapma) Madde 13.3’deki Rectangle sınıfını, GeometricObject sınıfından türetiniz ve  Comparable arayüzü ile birlikte yeniden yazınız. Object sınıfının equals metodunu override ediniz. Eğer alanları aynı ise iki Rectangle nesnesi birbirine eşittir. Rectangle, GeometricObject ve Comparable’i de kapsayacak şekilde UML şemasını çiziniz.

*13.11 (The Octagon class) Write a class named Octagon that extends GeometricObject and implements the Comparable and Cloneable interfaces. Assume that all eight sides of the octagon are of equal length. The area can be computed using the following formula:

(Octagon sınıfı) GeometricObject sınıfından türetilmiş,  Comparable ve Cloneable arayüzlerini yazmış Octagon isminde bir sınıf yazınız. Sekizgenin tüm kenar uzunlukları eşit olsun. Sekizgenin alanı aşağıdaki formül kullanılarak hesaplanabilir:

Draw the UML diagram that involves Octagon, GeometricObject, Comparable, and Cloneable. Write a test program that creates an Octagon object with side value 5 and displays its area and perimeter. Create a new object using the clone method and compare the two objects using the compareTo method.

Octagon, GeometricObject, Cloneable ve Comparable’i de kapsayacak şekilde UML şemasını çiziniz. Kenar uzunluğu 5 olan bir Octagon nesnesi yaratan ve bunun alanını ve çevresini gösteren bir test programı yazınız. clone  metodunu kullanarak yeni bir nesne yaratınız ve compareTo  metodunu kullanarak iki nesneyi karşılaştırınız.

*13.12 (Sum the areas of geometric objects) Write a method that sums the areas of all the geometric objects in an array. The method signature is:

public static double sumArea(GeometricObject[] a)

(Geometrik nesnelerin alanları toplamı) Bir dizide bulunan tüm geometrik nesnelerin alanlarının toplamını hesaplayan bir metot yazınız. Metot bildirimi:

public static double sumArea(GeometricObject[] a)

Write a test program that creates an array of four objects (two circles and two rectangles) and computes their total area using the sumArea method.

Dört nesneden oluşan (iki daire, iki dikdörtgen) bir dizi yaratan ve sumArea metoduyla bunların toplam alanını hesaplayan bir test programı yazınız.

*13.13 (Enable the Course class cloneable) Rewrite the Course class in Listing 10.6 to add a clone method to perform a deep copy on the students field.

(Course sınıfını kopyalanabilir yapın) Madde 10.6’daki Course sınıfına clone metodunu ekleyerek students alanını derin kopyalama yapacak şekilde yeniden düzenleyiniz.

*13.14 (Demonstrate the benefits of encapsulation) Rewrite the Rational class in Listing 13.13 using a new internal representation for the numerator and denominator. Create an array of two integers as follows:

private long[] r = new long[2];

 (Encapsulation’ın faydalarını gösterin) Madde 13.13’deki Rational sınıfını, pay ve payda değerleri için yeni bir iç yapı kullanarak yeniden yazınız. Aşağıdaki gibi iki tam sayıdan oluşan bir dizi yaratınız:

private long[] r = new long[2];

Use r[0] to represent the numerator and r[1] to represent the denominator. The signatures of the methods in the Rational class are not changed, so a client application that uses the previous Rational class can continue to use this new Rational class without being recompiled.

r[0]’ı pay ve r[1]’i payda olarak kullanın.  Rational sınıfının metot imzaları değiştirilmemiştir, bu nedenle bu sınıfı kullanan uygulamalar yeniden derlemeye gerek duymadan kullanılmaya devam edilebileceklerdir.

*13.15 (Use BigInteger for the Rational class) Redesign and implement the Rational class in Listing 13.13 using BigInteger for the numerator and denominator.

(Rational sınıfı için BigInteger kullanın) Madde 13.13’de bulunan Rational sınıfının pay ve payda değişkenlerini BigInteger kullanarak yeniden düzenleyiniz.

*13.16 (Create a rational-number calculator) Write a program similar to Listing 7.9, Calculator.java. Instead of using integers, use rationals, as shown in Figure 13.10a. You will need to use the split method in the String class, introduced in Section 10.10.3, Replacing and Splitting Strings, to retrieve the numerator string and denominator string, and convert strings into integers using the Integer.parseInt method.

(Kesirli sayılar için hesap makinesi) Madde 7.9’daki Calculator.java’ya benzer bir program yazınız. Şekil 13.10a’da gösterildiği gibi tam sayı kullanmak yerine kesirli sayıları kullanınız. Payı ve paydayı string olarak elde etmek ve bu stringleri Integer.parseInt metodunu kullanarak tam sayıya dönüştürmek için  Bölüm 10.10.3 String’leri Değiştirme ve Bölme bölümünde anlatılan String sınıfının split metodunu kullanmanız gerekecektir.

FIGURE 13.10 (a) The program takes three arguments (operand1, operator, and operand2) from the command line and displays the expression and the result of the arithmetic operation. (b) A complex number can be interpreted as a point in a plane.

ŞEKİL 13.10 (a) Program komut satırından üç argüman alır (operand1 operatör operand2) ve oluşturulan ifade ile bunun aritmetik sonucunu gösterir. (b) Bir karmaşık sayı düzlemde bir nokta olarak yorumlanabilir.

*13.17 (Math: The Complex class) A complex number is a number in the form a + bi, where a and b are real numbers and i is 2-1. The numbers a and b are known as the real part and imaginary part of the complex number, respectively. You can perform addition, subtraction, multiplication, and division for complex numbers using the following formulas:

 (Matematik: Complex sınıfı) Karmaşık sayılar, a ve b gerçek sayı ve i2 = -1 olmak üzere,  a + bi biçiminde tanımlanır.   a sayısı karmaşık sayının gerçek kısmı, b sayısı ise sanal kısmı olarak isimlendirilir. Aşağıdaki formülleri kullanarak karmaşık sayılarda toplama, çıkarma, çarpma ve bölme işlemlerini gerçekleştirebilirsiniz:

You can also obtain the absolute value for a complex number using the following formula:

Bunun yanında aşağıdaki formül aracılığı ile bir karmaşık sayının mutlak değerini de elde edebilirsiniz.

(A complex number can be interpreted as a point on a plane by identifying the (a,b) values as the coordinates of the point. The absolute value of the complex number corresponds to the distance of the point to the origin, as shown in Figure 13.10b.)

(Bir karmaşık sayı, (a, b) değerleri bir noktanın koordinat değerleri olmak üzere  düzlemde bir nokta gibi yorumlanabilir. Şekil 13.10b‘de gösterildiği gibi karmaşık sayının mutlak değeri, onun başlangıç koordinatına olan uzaklığına karşılık gelir.)

Design a class named Complex for representing complex numbers and the methods add, subtract, multiply, divide, and abs for performing complexnumber operations, and override toString method for returning a string representation for a complex number. The toString method returns (a + bi) as a string. If b is 0, it simply returns a. Your Complex class should also implement the Cloneable interface.

Karmaşık sayıları temsil eden ve add, subtract, multiply, divide, ve abs metotları ile sırasıyla toplama, çıkarma, çarpma, bölme ve mutlak değer işlemlerini yapan, buna ek olarak toString  metodunu override ederek karmaşık sayının string olarak gösterilmesini sağlayan  ismi Complex olan bir sınıf tasarlayınız.  toString metodu (a + bi) değerini string olarak geri döndürecektir. Eğer b’nin değeri 0 ise yalnızca a’nın değerini döndürecektir. Complex sınıfı aynı zamanda Cloneable arayüzünü de yazmalıdır.

Provide three constructors Complex(a, b), Complex(a), and Complex(). Complex() creates a Complex object for number 0 and Complex(a) creates a Complex object with 0 for b. Also provide the getRealPart() and getImaginaryPart() methods for returning the real and imaginary part of the complex number, respectively.

Complex(a, b), Complex(a) ve Complex() biçiminde üç adet constructor’u bulunmalıdır. Complex() contructor’u değeri 0 olan bir karmaşık sayı nesnesi yaratırken Complex(a) b’nin 0 olduğu bir karmaşık sayı nesnesi yaratır. Sırasıyla karmaşık sayının gerçek ve sanal kısmının değerini döndüren getRealPart() ve getImaginaryPart() isimli metotları da yazınız.

Write a test program that prompts the user to enter two complex numbers and displays the result of their addition, subtraction, multiplication, division, and absolute value. Here is a sample run:

Kullanıcıdan iki karmaşık sayı girmesini isteyen ve bu sayıların toplamını, farkını, çarpımını, bölümünü ve mutlak değerini gösteren bir program yazınız. Örnek akışı inceleyiniz.

13.18 (Use the Rational class) Write a program that computes the following summation series using the Rational class:

13.18 ( Rational sınıfını kullan) Rational sınıfını kullanarak aşağıda verilen serinin toplamını hesaplayan bir program yazınız:

You will discover that the output is incorrect because of integer overflow (too large). To fix this problem, see Programming Exercise 13.15.

Tam sayı taşması (değer çok büyük) nedeniyle sonucun doğru olmadığını göreceksiniz. Bu sorunun çözümü için Programlama Soruları 13.15’e bakınız.

13.19 (Convert decimals to fractions) Write a program that prompts the user to enter a decimal number and displays the number in a fraction. Hint: read the decimal number as a string, extract the integer part and fractional part from the string, and use the BigInteger implementation of the Rational class in Programming Exercise 13.15 to obtain a rational number for the decimal number. Here are some sample runs:

 (Ondalık sayıları kesirli sayılara dönüştürme) Kullanıcıdan bir ondalık sayı girmesini isteyen ve bunun kesirli sayı karşılığını gösteren bir program yazınız. İpucu: ondalık sayıyı bir string olarak okuyun, string’den tam sayı kısmı ve ondalık kısmı alın ve kesirli sayıyı elde etmek için Programlama Soruları 13.15’teki Rational sınıfının BigInteger ile yazılmış biçimini kullanın. Programın örnek akışını inceleyiniz:

13.20 (Algebra: solve quadratic equations) Rewrite Programming Exercise 3.1 to obtain imaginary roots if the determinant is less than 0 using the Complex class in Programming Exercise 13.17. Here are some sample runs.

(Cebir: ikinci dereceden denklem çözümü) Programlama Soruları 3.1’i determinant 0’dan küçükse sanal kökleri elde etmek için Programlama Soruları 13.17’deki Complex sınıfını kullanarak yeniden yazınız. Programın örnek akışını inceleyiniz:

13.21 (Algebra: vertex form equations) The equation of a parabola can be expressed in either standard form (y = ax2 + bx + c) or vertex form (y = a(x - h)2 + k). Write a program that prompts the user to enter a, b, and c as integers in standard form and displays h and k in the vertex form. Here are some sample runs.

(Cebir: tepe noktası biçimi) Bir parabolik denklem standart biçim  (y = ax2 + bx + c) ve tepe noktası biçimi  (y = ax2 + bx + c)  olarak ifade edilebilir. Kullanıcıdan a, b, c tam sayılarını standart biçimde alan ve tepe noktası biçiminin h ve k değerlerini gösteren bir program yazınız. Programın örnek akışını inceleyiniz: