Section 9 Programming Exercises

Bölüm 9 Sorular

 9.1 (The Rectangle class) Following the example of the Circle class in Section 9.2, design a class named Rectangle to represent a rectangle. The class contains:

(Dikdörtgen sınıfı) Bölüm 9.2’deki Circle sınıfı gibi bir dikdörtgeni temsil eden Rectangle sınıfı yazınız. Bu sınıf;

Two double data fields named width and height that specify the width and height of the rectangle. The default values are 1 for both width and height.

A no-arg constructor that creates a default rectangle.

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

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

A method named getPerimeter() that returns the perimeter.

Dikdörtgenin, en ve boy değerlerini tutan iki tane double türden width and height isimli veri elemanı.  width ve height’in ilk değeri 1 olsun.

Varsayılan bir dikdörtgen yaratan, parametresiz constructor.

Belirtilen width ve height parametreleri ile bir dikdörtgen yaratan constructor.

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

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

Draw the UML diagram for the class and then implement the class. Write a test program that creates two Rectangle objects—one with width 4 and height 40 and the other with width 3.5 and height 35.9. Display the width, height, area, and perimeter of each rectangle in this order.

Sınıfı yazmadan önce UML şemasını çiziniz. Boyu 4, eni 40 ve boyu 3.5, eni 35.9 olan iki tane Rectangle nesnesi yaratan bir program yazınız. Her bir dikdörtgenin en, boy, alan ve çevresini gösterin.

9.2 (The Stock class) Following the example of the Circle class in Section 9.2, design a class named Stock that contains:

(Stock sınıfı) Bölüm 9.2’deki Circle sınıfı gibi Stock isminde bir sınıf yazınız. Bu sınıf:

A string data field named symbol for the stock’s symbol.

A string data field named name for the stock’s name.

A double data field named previousClosingPrice that stores the stock price for the previous day.

A double data field named currentPrice that stores the stock price for the current time.

A constructor that creates a stock with the specified symbol and name.

A method named getChangePercent() that returns the percentage changed from previousClosingPrice to currentPrice.

Stok sembolü için  symbol isminde string türünden bir veri elemanı.

Stok adı için name isminde string türünden bir veri elemanı.

Bir önceki güne ait stok fiyatını tutan  previousClosingPrice isminde double türden bir veri elemanı.

Bir güncel stok fiyatını tutan currentPrice isminde double türden bir veri elemanı.

Belirtilen sembol ve isim parametreleri ile bir stok nesnesi yaratan constructor.

Geri dönüş değeri, güncel fiyat (currentPrice) ile bir önceki fiyat (previousClosingPrice) arasındaki değişim olan getChangePercent() metodu.

Draw the UML diagram for the class and then implement the class. Write a test program that creates a Stock object with the stock symbol ORCL, the name Oracle Corporation, and the previous closing price of 34.5. Set a new current price to 34.35 and display the price-change percentage.

Sınıfı yazmadan önce UML şemasını çiziniz. Stok sembolü ORCL, ismi Oracle Corporation ve bir önceki kapanış fiyatı 34.5 argümanları ile Stock türünden nesne yaratan bir program yazınız. Güncel fiyatı 34.35 olarak atayın ve fiyat değişim yüzdesini (getChangePercent()) gösterin.

*9.3 (Use the Date class) Write a program that creates a Date object, sets its elapsed time to 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, and 100000000000, and displays the date and time using the toString() method, respectively.

( Date sınıfı) Bir  Date nesnesi yaratın ve geçen zamanı (elapsed time) 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000,  100000000000 olarak ayarlayın ve tarih - zamanı sırasıyla toString()  metodunu kullanarak gösteriniz.

*9.4 (Use the Random class) Write a program that creates a Random object with seed 1000 and displays the first 50 random integers between 0 and 100 using the nextInt(100) method.

(Random sınıfı) Kök değeri (seed) 1000 olan bir Random nesnesi yaratan  ve 0 ile 100 arasında  nextInt(100) metodunu kullanarak ilk 50 rastgele tam sayıyı gösteren bir program yazınız.

*9.5 (Use the GregorianCalendar class) Java API has the GregorianCalendar class in the java.util package, which you can use to obtain the year, month, and day of a date. The no-arg constructor constructs an instance for the current date, and the methods get(GregorianCalendar.YEAR),  get(GregorianCalendar.MONTH) and get(GregorianCalendar.DAY_OF_MONTH) return the year, month, and day. Write a program to perform two tasks:

(GregorianCalendar sınıfını kullanın) Java API’sinin  java.util paketinde GregorianCalendar sınıfı bulunmaktadır. Bu sınıfı gün, ay ve yıl bilgisini elde etmek için kullanabilirsiniz. Parametresiz constructor ile şu anki tarih bilgisine sahip bir nesne yaratılabilir, get(GregorianCalendar.YEAR),  get(GregorianCalendar.MONTH) ve get(GregorianCalendar.DAY_OF_MONTH)  metotları ile yıl, ay ve gün bilgisini elde edebilirsiniz. Aşağıdaki iki görevi gerçekleştiren bir program yazınız.

Display the current year, month, and day.

The GregorianCalendar class has the setTimeInMillis(long), which can be used to set a specified elapsed time since January 1, 1970. Set the value to 1234567898765L and display the year, month, and day.

Şu anki gün, ay ve yılı gösterin.

 GregorianCalendar sınıfının setTimeInMillis(long) metodunu 1 Ocak 1970’ten itibaren geçen zamanı vererek istenilen tarih için kullanabilirsiniz. Metoda 1234567898765L değerini argüman olarak geçin ve yıl, ay ve günü gösteriniz.

*9.6 (Stopwatch) Design a class named StopWatch. The class contains:

Private data fields startTime and endTime with getter methods.

A no-arg constructor that initializes startTime with the current time.

A method named start() that resets the startTime to the current time.

A method named stop() that sets the endTime to the current time.

A method named getElapsedTime() that returns the elapsed time for the stopwatch in milliseconds.

(Kronometre) StopWatch isimli bir sınıf tasarlayınız. Bu sınıf;

 startTime ve endTime isimli private veri elemanları ve bunların getter metotlarını içerecek.

Parametresiz constuctor’ı startTime’ı şu anki zaman olarak ayarlayacak.

 start() metodu startTime veri elemanına o anki zaman değerini atayacak.

 stop() metodu endTime veri elemanına o anki zaman değerini atayacak.

 getElapsedTime() metodu geçen süreyi milisaniye olarak olarak geri döndürecek.

Draw the UML diagram for the class and then implement the class. Write a test program that measures the execution time of sorting 100,000 numbers using selection sort.

Sınıfı yazmadan önce UML şemasını çiziniz. Seçimli sıralama (selection sort) algoritması ile 100 000 sayının sıralanmasında geçen süreyi gösteren bir test programı yazınız.

9.7 (The Account class) Design a class named Account that contains:

 ( Account sınıfı)  Account isimli bir sınıf tasarlayınız.

A private int data field named id for the account (default 0).

A private double data field named balance for the account (default 0).

A private double data field named annualInterestRate that stores the current interest rate (default 0).  

Assume all accounts have the same interest rate.

A private Date data field named dateCreated that stores the date when the account was created.

A no-arg constructor that creates a default account.

A constructor that creates an account with the specified id and initial balance.

The accessor and mutator methods for id, balance, and annualInterestRate.

The accessor method for dateCreated.

A method named getMonthlyInterestRate() that returns the monthly interest rate.

A method named getMonthlyInterest() that returns the monthly interest.

A method named withdraw that withdraws a specified amount from the account.

A method named deposit that deposits a specified amount to the account.

Hesap numarası için, id isminde int türden bir private veri elemanı (varsayılan 0).

Hesap bakiyesi için, balance isminde double türden bir private veri elemanı (varsayılan 0).

Güncel faiz oranı için annualInterestRate isminde double türden bir private veri elemanı (varsayılan 0).  

Tüm hesapların aynı faiz oranına sahip olduklarını varsayalım.

Hesabın yaratıldığı tarih bilgisi için dateCreated isminde Date türünde bir private veri elemanı.

Varsayılan bir hesap yaratan parametresiz bir constructor.

Belirtilen id ve bakiye parametreleri ile bir account nesnesi yaratan constructor.

 id, balance, ve annualInterestRate için erişim metotları ile değiştiren metotları yazınız.

 dateCreated için erişim metodu.

Geri dönüş değeri aylık faiz oranı olan getMonthlyInterestRate() metodu.

Geri dönüş değeri aylık faiz olan getMonthlyInterestRate() metodu.

Hesaptan belirtilen miktarda para çekilmesini sağlayan withdraw metodu.

Hesaba belirtilen miktarda para yatırılmasını sağlayan deposit metodu.

Draw the UML diagram for the class and then implement the class. (Hint: The method getMonthlyInterest() is to return monthly interest, not the interest rate. Monthly interest is balance * monthlyInterestRate. monthlyInterestRate is annualInterestRate / 12. Note that annualInterestRate is a percentage, e.g., like 4.5%. You need to divide it by 100.)

Sınıfı yazmadan önce UML şemasını çiziniz. (İpucu:  getMonthlyInterest() metodunun geri dönüş değeri faiz oranı değil, aylık faiz miktarı olmalı. Aylık faiz miktarı; balance * monthlyInterestRate. monthlyInterestRate = annualInterestRate / 12.  annualInterestRate yüzde olarak verilir.Örneğin, %4.5. Bu değeri 100’e bölmeniz gerekir.)

Write a test program that creates an Account object with an account ID of 1122, a balance of $20,000, and an annual interest rate of 4.5%. Use the withdraw method to withdraw $2,500, use the deposit method to deposit $3,000, and print the balance, the monthly interest, and the date when this account was created.

Hesap numarası (id) 1122, bakiyesi (balance) 20 000$ ve yıllık faiz oranı %4.5 değerleriyle bir Account nesnesi yaratan bir program yazınız. withdraw metodunu kullanarak 2 500$ çekiniz, deposit metodunu kullanarak 3 000$ yatırınız. Bakiyeyi, aylık faiz oranını ve hesabın açılış tarihini gösteriniz.

9.8 (The Fan class) Design a class named Fan to represent a fan. The class contains:

Three constants named SLOW, MEDIUM, and FAST with the values 1, 2, and 3 to denote the fan speed.

A private int data field named speed that specifies the speed of the fan (the default is SLOW).

A private boolean data field named on that specifies whether the fan is on (the default is false).

A private double data field named radius that specifies the radius of the fan (the default is 5).

A string data field named color that specifies the color of the fan (the default is blue).

The accessor and mutator methods for all four data fields.

A no-arg constructor that creates a default fan.

A method named toString() that returns a string description for the fan. If the fan is on, the method returns the fan speed, color, and radius in one combined string. If the fan is not on, the method returns the fan color and radius along with the string “fan is off” in one combined string.

( Fan sınıfı) Fan isimli bir sınıf tasarlayınız. Bu sınıfta olması gerekenler:

 SLOW, MEDIUM ve FAST isminde 1, 2 ve 3 değerlerine sahip, fanın hızını temsil eden üç tane sabit bildiriniz.

Fanın hızı için speed isminde int türden bir private veri elemanı (varsayılan değeri SLOW).

Fanın açık/kapalı bilgisi için on isminde boolean türden bir private veri elemanı (varsayılan değeri false).

Fanın duruş açısı için radius isminde double türden bir private veri elemanı (varsayılan değeri 5).

Fanın rengi için color isminde string türden bir private veri elemanı (varsayılan değeri mavi).

Tüm veri elemanları için erişim metotları ile değiştiren metotları yazınız.

Parametresiz constructor varsayılan bir fan nesnesi yaratır.

 toString() metodunun geri dönüş değeri fan nesnesinin açıklamalarıdır. Eğer fan nesnesi açık ise bu metot, hız, açı ve renk bilgisinden oluşan bir string geri döner. Eğer fan nesnesi kapalıysa bu metot, fanın rengi ve açısıyla ‘fan kapalı’ mesajından oluşan bir string geri döner.

Draw the UML diagram for the class and then implement the class. Write a test program that creates two Fan objects. Assign maximum speed, radius 10, color yellow, and turn it on to the first object. Assign medium speed, radius 5, color blue, and turn it off to the second object. Display the objects by invoking their toString method.

Sınıfı yazmadan önce, UML şemasını çiziniz. İki tane Fan nesnesi yaratan bir test programı yazınız: İlk nesnenin hızı en yüksek, açısı 10, rengi sarı, ve durumu açık olacaktır. İkinci nesnenin hızı orta, açısı 5, rengi mavi ve durumu kapalı olacaktır.  toString metotlarını çağırarak nesnelerin durumunu gösteriniz.

**9.9 (Geometry: n-sided regular polygon) In an n-sided regular polygon, all sides have the same length and all angles have the same degree (i.e., the polygon is both equilateral and equiangular). Design a class named RegularPolygon that contains:

(Geometri: n-kenarlı düzgün çokgen) n kenarlı düzgün çokgen, kenar uzunlukları ve tüm iç açıları aynı olan çokgendir. (eşkenar ve eş açılı çokgen).  RegularPolygon isimli bir sınıf tasarlayınız.

A private int data field named n that defines the number of sides in the polygon with default value 3.

A private double data field named side that stores the length of the side with default value 1.

A private double data field named x that defines the x-coordinate of the polygon’s center with default value 0.

A private double data field named y that defines the y-coordinate of the polygon’s center with default value 0.

A no-arg constructor that creates a regular polygon with default values.

A constructor that creates a regular polygon with the specified number of sides and length of side, centered at (0, 0).

A constructor that creates a regular polygon with the specified number of sides, length of side, and x- and y-coordinates.

The accessor and mutator methods for all data fields.

The method getPerimeter() that returns the perimeter of the polygon.

The method getArea() that returns the area of the polygon.

The formula for computing the area of a regular polygon is

Çokgenin kenar sayısını gösteren n isminde int türden bir private veri elemanı (varsayılan değeri 3)

Kenar uzunluğu için side isminde double türden bir private veri elemanı (varsayılan değeri 1).

Çokgenin merkez koordinatının yatay bileşeni için x isminde double türden bir private veri elemanı (varsayılan değeri 0).

Çokgenin merkez koordinatının dikey bileşeni için y isminde double türden bir private veri elemanı (varsayılan değeri 0).

Parametresiz constructor varsayılan değerlerle bir düzgün çokgen yaratır.

Kenar sayısı ve kenar uzunluğu parametreleri ile merkezi (0, 0) olan bir düzgün çokgen yaratmak için constructor.

Kenar sayısı, kenar uzunluğu, x ve y koordinatları parametreleri ile bir düzgün çokgen yaratmak için constructor.

 Tüm veri elemanları için, erişim metotları ile değiştiren metotları yazınız.

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

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

Düzgün çokgenin alanını hesaplamak için kullanılacak formül:

Draw the UML diagram for the class and then implement the class. Write a test program that creates three RegularPolygon objects, created using the no-arg constructor, using RegularPolygon(6, 4), and using RegularPolygon(10, 4, 5.6, 7.8). For each object, display its perimeter and area.

Sınıfı yazmadan önce UML şemasını çiziniz. Parametresiz constructor ile varsayılan RegularPolygon (6, 4) ve RegularPolygon (10, 4, 5.6, 7.8) constructorlarını kullanarak üç tane RegularPolygon nesnesi yaratan bir test programı yazınız. Her çokgenin alanı ve çevresini gösteriniz.

*9.10 (Algebra: quadratic equations) Design a class named QuadraticEquation for a quadratic equation ax2 + bx + x = 0. The class contains:

(Cebir: ikinci dereceden denklemler) ax2 + bx + x = 0 ikinci dereceden denklemi için QuadraticEquation isminde bir sınıf tasarlayınız. Bu sınıf;

Private data fields a, b, and c that represent three coefficients.

A constructor for the arguments for a, b, and c.

Three getter methods for a, b, and c.

A method named getDiscriminant() that returns the discriminant, which is b2 - 4ac.

The methods named getRoot1() and getRoot2() for returning two roots of the equation

Üç tane katsayı için  a, b, ve c isminde private veri elemanı.

 a, b, ve c parametrelerini alan bir constructor.

a, b, ve c için üç tane getter metodu.

Geri dönüş değeri diskriminant (b2 - 4ac) olan getDiscriminant() metodu

Geri dönüş değeri denklemin kökleri olan getRoot1() ve getRoot2() metotları

These methods are useful only if the discriminant is nonnegative. Let these methods return 0 if the discriminant is negative.

Bu metotlar diskriminant değeri negatif olmadığı durumlarda kullanılır. Diskriminant değeri negatif ise bu metotlar 0 değeri ile geri dönecekler.

Draw the UML diagram for the class and then implement the class. Write a test program that prompts the user to enter values for a, b, and c and displays the result based on the discriminant. If the discriminant is positive, display the two roots. If the discriminant is 0, display the one root. Otherwise, display “The equation has no roots.” See Programming Exercise 3.1 for sample runs.

Sınıfı yazmadan önce UML şemasını çiziniz. Kullanıcıdan a, b, c değerlerini alan ve diskriminantı hesaplayıp, denklemin sonucunu gösteren bir program yazınız. Eğer diskriminant pozitifse iki kökü gösteriniz. Eğer diskriminant 0 ise bir kökü gösteriniz. Aksi takdirde “Denklemin hiçbir gerçek kökü yoktur” mesajını gösteriniz. Örnek akış için Programlama Soruları 3.1’e bakınız.

*9.11 (Algebra: 2 * 2 linear equations) Design a class named LinearEquation for a 2 * 2 system of linear equations:

(Cebir: 2 * 2 doğrusal denklem) 2*2 doğrusal denklemler için  LinearEquation isminde bir sınıf tasarlayınız.

The class contains:

Private data fields a, b, c, d, e, and f.

A constructor with the arguments for a, b, c, d, e, and f.

Six getter methods for a, b, c, d, e, and f.

A method named isSolvable() that returns true if ad - bc is not 0.

Methods getX() and getY() that return the solution for the equation.

Bu sınıf;

 a, b, c, d, e, ve f isminde private veri elemanları.

 a, b, c, d, e, ve f parametrelerini alan bir constructor.

■  a, b, c, d, e, ve f veri elemanları için getter metotları

■  ad - bc değeri 0 değilse true geri dönen isSolvable() metodu.

■  Geri dönüş değeri denklemin çözümü olan getX() ve getY() metotları içersin.

Draw the UML diagram for the class and then implement the class. Write a test program that prompts the user to enter a, b, c, d, e, and f and displays the result. If ad - bc is 0, report that “The equation has no solution.” See Programming Exercise 3.3 for sample runs.

Sınıfı yazmadan önce UML şemasını çiziniz. Kullanıcıdan a, b, c, d, e, f değerlerini alan ve sonucu gösteren bir program yazınız. Eğer, ad - bc 0 ise “Denklemin çözümü yoktur!” mesajını gösteriniz. Örnek akış için Programlama Soruları 3.3’e bakınız.

**9.12 (Geometry: intersecting point) Suppose two line segments intersect. The two endpoints for the first line segment are (x1, y1) and (x2, y2) and for the second line segment are (x3, y3) and (x4, y4). Write a program that prompts the user to enter these four endpoints and displays the intersecting point. As discussed in Programming Exercise 3.25, the intersecting point can be found by solving a linear equation. Use the LinearEquation class in Programming Exercise 9.11 to solve this equation. See Programming Exercise 3.25 for sample runs.

(Geometri: Kesişim noktası) İki doğru parçasının kesiştiğini varsayalım. İlk doğru parçasının uç noktaları (x1, y1) ve (x2, y2) ve ikinci doğru parçasının uç noktaları (x3, y3) ve (x4, y4) olsun. Kullanıcıdan dört nokta alan ve kesişim noktasını gösteren bir program yazınız. Programlama Soruları 3.25’te olduğu gibi kesişim noktaları doğrusal denklem sistemi çözülerek bulunabilir. Bu denklem sisteminin çözümü için Programlama Soruları 9.11’de yazdığınız LinearEquation sınıfını kullanınız. Örnek akış için Programlama Soruları 3.25’e bakınız.

**9.13 (The Location class) Design a class named Location for locating a maximal value and its location in a two-dimensional array. The class contains public data fields row, column, and maxValue that store the maximal value and its indices in a two-dimensional array with row and column as int types and maxValue as a double type.

(Location sınıfı) İki boyutlu bir dizinin en büyük elemanın değerini ve konumunu belirleyen Location isminde bir sınıf tasarlayınız. Bu sınıfın  row, column ve maxValue isminde public veri elemanları bulunur. maxValue,  double türden iki boyutlu dizinin en büyük elemanın değerini; row ve column, int türden en büyük elemanın indeksini saklar.

Write the following method that returns the location of the largest element in a two-dimensional array:

İki boyutlu bir dizinin en büyük elemanın konumunu geri döndüren, aşağıdaki bildirime sahip metodu yazınız.

public static Location locateLargest(double[][] a)

The return value is an instance of Location. Write a test program that prompts the user to enter a two-dimensional array and displays the location of the largest element in the array. Here is a sample run:

Geri dönüş değeri Location türünden bir nesnedir. Kullanıcıdan iki boyutlu bir dizi alan ve bu dizinin en büyük elemanının satır ve sütun indekslerini gösteren bir test programı yazınız. Örnek akışı inceleyiniz:

             Dizideki satir ve sütun sayisini giriniz: 3 4

             Diziyi giriniz:

             23.5  35  2  10

             4.5  3  45  3.5

             35  44  5.5  9.6

             En buyuk eleman (1, 2)´de bulunan 45´tir.