Section 11 Programming Exercises

*11.1 (The Triangle class) Design a class named Triangle that extends GeometricObject. The class contains:

(Triangle sınıfı) GeometricObject sınıfından türeyen Triangle isminde bir sınıf tasarlayınız. Bu sınıf;

Three double data fields named side1, side2, and side3 with default values 1.0 to denote three sides of the triangle.

A no-arg constructor that creates a default triangle.

A constructor that creates a triangle with the specified side1, side2, and side3.

The accessor methods for all three data fields.

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

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

A method named toString() that returns a string description for the triangle.

Üçgenin kenarlarını temsil eden, varsayılan değeri 1.0 olan double türden  side1, side2,ve side3 isminde üç adet veri elemanı

Varsayılan bir üçgen yaratan, parametresiz constructor.

 Verilen side1, side2 ve side3 değerleri ile bir üçgen yaratan constructor

Bu üç veri elemanı için erişim metotları

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

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

 Üçgene ait bilgileri string olarak geri döndüren toString() metodu

For the formula to compute the area of a triangle, see Programming Exercise 2.19.

The toString() method is implemented as follows:

return "Triangle: side1 = " + side1 + " side2 = " + side2 + " side3 = " + side3;

Üçgenin alan formülü için Programlama Soruları 2.19’a bakabilirsiniz.

 toString() metodu aşağıdaki şekilde yazılabilir.

return “Ucgen: kenar1 = “ + side1 + “+ side1 + “ kenar2 = “ + side2 + “+ side2 + “ kenar3 = " + side3;

Draw the UML diagrams for the classes Triangle and GeometricObject and implement the classes. 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.

Triangle ve GeometricObject sınıflarını yazmadan önce UML şemalarını çiziniz. Kullanıcıdan, üçgenin kenar değerlerini, üçgenin rengi ve üçgenin dolu olup olmadığı bilgisini mantıksal bir değer olarak alan bir test programı yazınız. Program verilen kenar değerleri ile bir üçgen yaratacak, color ve filled veri elemanlarının değerlerini atayacak.

the color and filled properties using the input. Program üçgenin alanını, çevresini, rengini ve dolu olup olmadığını belirten true ya da false değerini gösterecek.

11.2 (The Person, Student, Employee, Faculty, and Staff classes) Design a class named Person and its two subclasses named Student and Employee. Make Faculty and Staff subclasses of Employee. A person has a name, address, phone number, and email address. A student has a class status (freshman, sophomore, junior, or senior). Define the status as a constant. An employee has an office, salary, and date hired. Use the MyDate class defined in Programming Exercise 10.14 to create an object for date hired. A faculty member has office hours and a rank. A staff member has a title. Override the toString method in each class to display the class name and the person’s name.

 ( Person, Student, Employee, Faculty, ve Staff sınıfları)  Person ve bu sınıftan türetilmiş olan Student ve Employee sınıflarını tasarlayınız.  Faculty ve Staff sınıflarını, Employee sınıfından türetiniz. Bir kişi (Person) ad, adres, telefon numarası ve e-posta adresine sahiptir. Bir öğrenci (Student) sınıf seviyesine sahiptir. (Bunlar; freshman, sophomore, junior ya da senior) Sınıf seviyelerini sabit olarak tanımlayınız. Bir çalışan (Employee) ofis, maaş, işe başlama tarihi bilgisine sahiptir. İşe başlama tarihini Programlama Soruları 10.14’de tanımlamış olduğunuz MyDate sınıfı türünden bir nesne yaratarak kullanabilirsiniz. Bir fakülte üyesi (Faculty) ofis saatleri ve dereceye sahiptir. Bir personel (Staff) unvana sahiptir. Her bir sınıfta toString metodunu override ederek sınıfın adını ve kişinin adını gösteriniz.

Draw the UML diagram for the classes and implement them. Write a test program that creates a Person, Student, Employee, Faculty, and Staff, and invokes their toString() methods.

Sınıfları yazmadan önce UML şemalarını çiziniz. Person, Student, Employee, Faculty ve  Staff türlerinden nesneler yaratan ve bunların toString()  metotlarını çağıran bir test programı yazınız.

11.3 (Subclasses of Account) In Programming Exercise 9.7, the Account class was defined to model a bank account. An account has the properties account number, balance, annual interest rate, and date created, and methods to deposit and withdraw funds. Create two subclasses for checking and saving accounts. A checking account has an overdraft limit, but a savings account cannot be overdrawn.

 ( Account sınıfından türetme) Programlama Soruları 9.7’de bir banka hesabını temsil eden  Account sınıfı tanımlanmıştı. Bir hesap, hesap numarası, bakiye, yıllık faiz oranı ve açılma tarihi özellikleri ile para yatırma ve çekme metotlarına sahiptir. Taban sınıfı Account olan, Vadesiz hesap (CheckingAccount) ve tasarruf hesabı (SavingsAccount) isminde iki sınıf türetiniz. Vadesiz hesabın üst çekme limiti olacak ancak tasarruf hesabının limit aşımı olmayacaktır.

Draw the UML diagram for the classes and then implement them. Write a test program that creates objects of Account, SavingsAccount, and CheckingAccount and invokes their toString() methods.

Sınıfları yazmadan önce, UML şemasını çiziniz. Account, SavingsAccount ve CheckingAccount türünden nesneler yaratan ve bunların  toString() metotlarını çağıran bir test programı yazınız.

11.4 (Maximum element in ArrayList) Write the following method that returns the maximum value in an ArrayList of integers. The method returns null if the list is null or the list size is 0.

(ArrayList ‘in en büyük elemanı ) Tam sayılardan oluşan bir ArrayList’teki en büyük elmanın değerini döndüren aşağıdaki bildirime sahip bir metot yazınız. Eğer liste null ya da boyutu 0 ise, metot  null dönecektir.

public static Integer max(ArrayList<Integer> list)

Write a test program that prompts the user to enter a sequence of numbers ending with 0, and invokes this method to return the largest number in the input.

Kullanıcıdan 0 girene kadar sayı girmesini isteyen ve bu metodu çağırarak en büyük sayıyı geri döndüren bir program yazınız.

11.5 (The Course class) Rewrite the Course class in Listing 10.6. Use an ArrayList to replace an array to store students. Draw the new UML diagram for the class.

You should not change the original contract of the Course class (i.e., the definition of the constructors and methods should not be changed, but the private members may be changed.)

(Course sınıfı) Madde 10.6’daki Course sınıfını yeniden düzenleyiniz. Öğrencileri tutan dizi yerine ArrayList kullanınız. Sınıfın UML şemasını çiziniz.

Course sınıfının arayüzünü değiştirmemelisiniz. (Constructor ve metot tanımları değiştirilmemeli, gerekli private veri elemanları değiştirilebilir.)

11.6 (Use ArrayList) Write a program that creates an ArrayList and adds a Loan object, a Date object, a string, and a Circle object to the list, and use a loop to display all the elements in the list by invoking the object’s toString() method.

( ArrayList kullanımı ) Bir ArrayList nesnesine, Loan türünden bir nesne, Date türünden bir nesne,  string türünden bir nesne ve Circle türünden bir nesne ekleyen ve bir döngü içerisinde bu nesnelerin  toString() metodunu çağırarak ekranda gösteren bir program yazınız.

11.7 (Shuffle ArrayList) Write the following method that shuffles the elements in an ArrayList of integers.

(ArrayList’i karıştır ) Tam sayılardan oluşan bir ArrayList’te bulunan elemanları karıştıran aşağıdaki bildirime sahip bir metot yazınız.

public static void shuffle(ArrayList<Integer> list)

**11.8 (New Account class) An Account class was specified in Programming Exercise 9.7. Design a new Account class as follows:

(Yeni Account sınıfı) Programlama Soruları 9.7’de bir Account sınıfı verilmişti. Aşağıdaki yönlendirmelere göre yeni bir Account sınıfı tasarlayınız.

Add a new data field name of the String type to store the name of the customer.

Add a new constructor that constructs an account with the specified name, id, and balance.

Add a new data field named transactions whose type is ArrayList that stores the transaction for the accounts. Each transaction is an instance of the Transaction class. The Transaction class is defined as shown in Figure 11.6.

Müşterinin ad bilgisini saklayan String türden name isminde veri elemanı

Belirtilen name, id, and balance bilgileri ile yeni bir Account nesnesi yaratan constructor

Hesap hareketlerini saklamak için  ArrayList türünden transactions isminde veri elemanı Her bir hesap hareketi Transaction sınıfı türünden bir nesne olacak. Transaction sınıfı Şekil 11.6’daki gibi tanımlanmıştır.

FIGURE 11.6 The Transaction class describes a transaction for a bank account.

ŞEKİL 11.6  Transaction sınıfı bir banka hesabının hesap hareketlerini temsil eder.

Modify the withdraw and deposit methods to add a transaction to the transactions array list.

All other properties and methods are the same as in Programming Exercise 9.7.

 withdraw ve deposit metotlarını düzenleyerek  transactions listesine hesap hareketlerini ekleyiniz.

Diğer veri elemanları ve metotlar Programlama Soruları 9.7 ile aynıdır.

Write a test program that creates an Account with annual interest rate 1.5%, balance 1000, id 1122, and name George. Deposit $30, $40, and $50 to the account and withdraw $5, $4, and $2 from the account. Print an account summary that shows account holder name, interest rate, balance, and all transactions.

Yıllık faiz oranı 1.5%, bakiye 1000, id 1122 ve isim  George değerleri ile bir account nesnesi yaratan test programı yazınız. Bu hesaba 30, 40, 50 dolar yatırın ve hesaptan 5, 4 ve 2 dolar çekiniz. Hesap sahibinin adını, faiz oranını, bakiyeyi ve tüm hesap hareketlerini gösteren hesap özetini yazdırınız.

*11.9 (Largest rows and columns) Write a program that randomly fills in 0s and 1s into an n-by-n matrix, prints the matrix, and finds the rows and columns with the most 1s. (Hint: Use two ArrayLists to store the row and column indices with the most 1s.) Here is a sample run of the program:

(En büyük satırlar ve sütunlar) n-n boyutunda bir matrisin elemanlarına  rastgele 0 ya da 1 değerleri atayıp, bu matrisi gösteren ve en fazla 1 değerine sahip satırları ve sütunları gösteren bir program yazınız. (İpucu: En fazla 1 değerine sahip satır ve sütun indekslerini saklamak için iki adet ArrayList kullanınız. Programın örnek akışını inceleyiniz:

11.10 (Implement MyStack using inheritance) In Listing 11.10, MyStack is implemented using composition. Define a new stack class that extends ArrayList.

Draw the UML diagram for the classes and then implement MyStack. Write a test program that prompts the user to enter five strings and displays them in reverse order.

( MyStack sınfını türetme kullanarak yazma) Madde 11.10’da, MyStack sınıfı compositon kullanılarak yazılmıştı.  ArrayList sınıfından türetilen yeni bir Stack sınıfı yazınız.

MyStack sınıfını yazmadan önce, UML şemasını çiziniz. Kullanıcıdan beş string girmesini isteyen ve bu string’leri ters sırada gösteren bir test programı yazınız.

11.11 (Sort ArrayList) Write the following method that sorts an ArrayList of numbers:

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

public static void sort(ArrayList<Integer> list)

Write a test program that prompts the user to enter 5 numbers, stores them in an array list, and displays them in increasing order.

Kullanıcıdan 5 tane sayı girmesini isteyen, bu sayıları array list’te saklayan ve bunları artan sıra ile gösteren bir test programı yazınız.

11.12 (Sum ArrayList) Write the following method that returns the sum of all numbers in an ArrayList:

( ArrayList Toplama) ArrayList’de bulunan tüm sayıları toplamını geri döndüren aşağıdaki bildirime sahip bir metot yazınız.

public static double sum(ArrayList<Double> list)

Write a test program that prompts the user to enter 5 numbers, stores them in an array list, and displays their sum.

Kullanıcıdan 5 tane sayı girmesini isteyen, bu sayıları array list’te saklayan ve bunların toplamını gösteren bir test programı yazınız.

*11.13 (Remove duplicates) Write a method that removes the duplicate elements from an array list of integers using the following header:

(Aynı olanları silme) Tam sayılardan oluşan bir ArrayList’teki aynı değere sahip elemanları silen aşağıdaki bildirime sahip bir metot yazınız.

public static void removeDuplicate(ArrayList<Integer> list)

Write a test program that prompts the user to enter 10 integers to a list and displays the distinct integers separated by exactly one space. Here is a sample run:

Kullanıcıdan 10 tam sayı girmesini isteyen ve listedeki birbirinden farklı tam sayıları aralarında bir boşluk olacak şekilde gösteren bir test programı yazınız. Örnek akışı inceleyiniz:

        

11.14 (Combine two lists) Write a method that returns the union of two array lists of integers using the following header:

(İki listeyi birleştirme) Tam sayılardan oluşan iki array list’i birleştiren aşağıdaki bildirime sahip bir metot yazınız.

public static ArrayList<Integer> union(ArrayList<Integer> list1, ArrayList<Integer> list2)

For example, the union of two array lists {2, 3, 1, 5} and {3, 4, 6} is {2, 3, 1, 5, 3, 4, 6}. Write a test program that prompts the user to enter two lists, each with five integers, and displays their union. The numbers are separated by exactly one space in the output. Here is a sample run:

Örneğin, verilen {2, 3, 1, 5} ve {3, 4, 6} array list’lerinin birleşimi {2, 3, 1, 5, 3, 4, 6} dır. Kullanıcıdan her biri 5 elemanlı, iki adet array list girmesini isteyen ve bu iki aray list’in birleşimini ekranda gösteren bir test programı yazınız. Sayılar aralarında sadece bir boşluk olacak şekilde gösterilmelidir. Örnek akışı inceleyiniz:

*11.15 (Area of a convex polygon) A polygon is convex if it contains any line segments that connects two points of the polygon. Write a program that prompts the user to enter the number of points in a convex polygon, then enter the points clockwise, and display the area of the polygon. Here is a sample run of the program:

(Dışbükey çokgenin alanı) Çokgenin iki noktasını birbirine bağlayan herhangi bir doğru parçası varsa bu çokgen dışbükeydir. Kullanıcıdan dışbükey bir çokgenin nokta sayılarını ve bu noktaları saat yönünde alan ve çokgenin alanını gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

**11.16 (Addition quiz) Rewrite Listing 5.1 RepeatAdditionQuiz.java to alert the user if an answer is entered again. Hint: use an array list to store answers. Here is a sample run:

Madde 5.1’deki RepeatAdditionQuiz.java’yı kullanıcı bir cevabı ikinci kez girdiyse uyaracak şekilde yeniden yazınız. İpucu: Cevapları saklamak için bir array list kullanınız. Örnek akışı inceleyiniz:

**11.17 (Algebra: perfect square) Write a program that prompts the user to enter an integer m and find the smallest integer n such that m * n is a perfect square. (Hint: Store all smallest factors of m into an array list. n is the product of the factors that appear an odd number of times in the array list. For example, consider m = 90, store the factors 2, 3, 3, 5 in an array list. 2 and 5 appear an odd number of times in the array list. So, n is 10.) Here are sample runs:

(Cebir: Tam kare)  Kullanıcıdan tam sayı türünden bir m girmesini ve  m * n ‘in bir tam kare olduğu en küçük tam sayı olan n ‘i bulmasını isteyen bir program yazınız. (İpucu: m’in tüm asal çarpanlarını bir array list’te saklayınız. array list’te bulunma sayısı tek sayı olan asal çarpanlar kullanılarak n değeri elde edilir. Örneğin; m = 90 olsun, ve bunun array list’te tutulan asal çarpanları  2, 3, 3, 5 tir. 2 ve 5’in array list’te bulunma sayısı tek sayıdır. Bu nedenle, n 10’dur.) Programın örnek akışını inceleyiniz: