Section 6 Programming Exercises

Bölüm 6 Sorular

 

 6.1 (Math: pentagonal numbers) A pentagonal number is defined as n(3n–1)/2 for n = 1, 2, . . ., and so on. Therefore, the first few numbers are 1, 5, 12, 22, . . . . Write a method with the following header that returns a pentagonal number:

 (Matematik: beşgensel sayılar) Beşgensel sayılar n = 1, 2, .... için n(3n–1)/2 şeklinde tanımlanır. Buna bağlı olarak ilk birkaç beşgensel sayı 1, 5, 12, 22, ... ‘dir. Aşağıdaki şekilde bildirilen ve beşgensel sayı üreten bir metot yazınız

public static int getPentagonalNumber(int n)

Write a test program that uses this method to display the first 100 pentagonal numbers with 10 numbers on each line.

Bu metodu kullanarak ilk 100 beşgensel sayıyı her satırda 10 sayı olacak şekilde gösteren bir test programı yazınız.

*6.2 (Sum the digits in an integer) Write a method that computes the sum of the digits in an integer. Use the following method header:

(Basamak değerlerinin toplamı) Bir tam sayının basamak değerlerini toplayan bir metot yazınız.  Aşağıdaki metot bildirimini kullanınız:

public static int sumDigits(long n)

For example, sumDigits(234) returns 9 (2 + 3 + 4). (Hint: Use the % operator to extract digits, and the / operator to remove the extracted digit. For instance, to extract 4 from 234, use 234 % 10 (= 4). To remove 4 from 234, use 234 / 10 (= 23). Use a loop to repeatedly extract and remove the digit until all the digits are extracted. Write a test program that prompts the user to enter an integer and displays the sum of all its digits.

Örneğin, sumDigits(234) ‘ün geri dönüş değeri 9 (2 + 3 + 4).  (İpucu:  % operatörünü kullanarak basamak değerlerini elde edebilir, / operatörü ile değeri elde edilen basamağı kaldırabilirsiniz. Pratik olarak, 234’ten 4’ü elde etmek için 234 % 10 (= 4). 4’ü atmak için 234 / 10 (= 23)  Tüm basamaklar elde edilene kadar basamakları elde edip kaldıran bir döngü kullanın. Kullanıcıdan bir tam sayı alan ve basamak değerleri toplamını gösteren bir test programı yazınız.

**6.3 (Palindrome integer) Write the methods with the following headers

(Palindrome tam sayılar) Aşağıdaki bildirime sahip metotları yazınız.

// Return the reversal of an integer, i.e., reverse(456) returns 654

//Tam sayının basamaklarını tersine çevirir, Ör, reverse(456) geri dönüş değeri 654

public static int reverse(int number)

// Return true if number is a palindrome

// Eğer sayı palindrom ise true döner

public static boolean isPalindrome(int number)

Use the reverse method to implement isPalindrome. A number is a palindrome if its reversal is the same as itself. Write a test program that prompts the user to enter an integer and reports whether the integer is a palindrome.

isPalindrome metodunu tanımlamak için reverse metodunu kullanınız. Eğer basamakları tersine çevrilmiş sayı ile sayının kendisi aynı ise bu sayıya palindrome denir.  Kullanıcıdan bir tam sayı alan ve bu sayının palindrome olup olmadığını gösteren bir test programı yazınız.

*6.4 (Display an integer reversed) Write a method with the following header to display an integer in reverse order:

 (Tam sayının basamaklarını ters sıra ile gösterme) Bir tam sayının basamaklarını tersten gösteren aşağıdaki bildirime sahip bir metot yazınız.

public static void reverse(int number)

For example, reverse(3456) displays 6543. Write a test program that prompts the user to enter an integer and displays its reversal.

Örneğin; reverse(3456)’in sonucu 6543.  Kullanıcıdan bir tam sayı alan ve bunu ters sıra ile gösteren bir test programı yazınız.

*6.5 (Sort three numbers) Write a method with the following header to display three numbers in increasing order:

(Üç sayıyı sıralama) Üç sayıyı artan şekilde sıralayan aşağıdaki bildirime sahip bir metot yazınız.

public static void displaySortedNumbers(double num1, double num2, double num3)

Write a test program that prompts the user to enter three numbers and invokes the method to display them in increasing order.

Kullanıcıdan üç sayı alan ve bu metodu kullanarak kullanıcıya sayıları artan sıra ile gösteren bir test programı yazınız.

*6.6 (Display patterns) Write a method to display a pattern as follows:

(Desen oluşturma) Aşağıdaki deseni oluşturacak bir metot yazınız.

The method header is

Metot bildirimi;

public static void displayPattern(int n)

*6.7 (Financial application: compute the future investment value) Write a method that computes future investment value at a given interest rate for a specified number of years. The future investment is determined using the formula in Programming Exercise 2.21.

(Finans uygulaması: yatırımın gelecek değerini hesaplama) Belirlenen yıllar için verilen faiz oranını kullanarak yatırımın gelecekteki değerini hesaplayınız. Bunun için alıştırma 2.21’deki formülü kullanınız.

Use the following method header:

Aşağıdaki metot bildirimi kullanınız:

public static double futureInvestmentValue(

double investmentAmount, double monthlyInterestRate, int years)

For example, futureInvestmentValue(10000, 0.05/12, 5) returns 12833.59.

Örneğin; futureInvestmentValue(10000, 0.05/12, 5) geri dönüş değeri 12833.59.

Write a test program that prompts the user to enter the investment amount (e.g., 1000) and the interest rate (e.g., 9%) and prints a table that displays future value for the years from 1 to 30, as shown below:

Kullanıcıdan yatırım tutarı (ör,1000) ve faiz oranı (ör. 9%) bilgilerini alan ve 1 yıldan 30 yıla kadar getiriyi aşağıdaki gibi gösteren bir test programı yazınız.

                    Yatirim miktari:  1000

                    Yillik faiz orani:  9

                    Yillar               Gelecek Degeri

                     1                              1093.80

                     2                              1196.41

                    . . .            

                    29                          13467.25

                    30                          14730.57

6.8 (Conversions between Celsius and Fahrenheit) Write a class that contains the following two methods:

 (Santigrat ve Fahrenhayt arasında dönüşüm) Aşağıdaki iki metoda sahip bir sınıf yazınız:

/** Convert from Celsius to Fahrenheit */

/** Santigttan fayrenhayta dönüştürme*/

public static double celsiusToFahrenheit(double celsius)

/** Convert from Fahrenheit to Celsius */

/** Fayrenhayttan Santigrata dönüştürme */

public static double fahrenheitToCelsius(double fahrenheit)

The formula for the conversion is:

Dönüşüm için aşağıdaki formülü kullanabilirsiniz:

fahrenheit = (9.0 / 5) * celsius + 32

celsius = (5.0 / 9) * (fahrenheit – 32)

fahrenhayt = (9.0 / 5) * santigrat + 32

santigrat = (5.0 / 9) * (fahrenhayt – 32)

Write a test program that invokes these methods to display the following tables:

Yukarıdaki metotları kullanarak aşağıdaki tabloyu oluşturan bir test programı yazınız:

Celsius                 Fahrenheit         |         Fahrenheit         Celsius

---------------------------------------------------------------------------------------------

40.0                 104.0                  |         120.0                 48.89

39.0                 102.2                  |         110.0                 43.33

...

32.0                 89.6                 |         40.0                 4.44

31.0                 87.8                 |         30.0                 -1.11

Santigrat         Fahrenhayt         |         Fahrenhayt         Santigrat

---------------------------------------------------------------------------------------------

40.0                 104.0                  |         120.0                 48.89

39.0                 102.2                  |         110.0                 43.33

...

32.0                 89.6                 |         40.0                 4.44

31.0                 87.8                 |         30.0                 -1.11

6.9 (Conversions between feet and meters) Write a class that contains the following two methods:

 (feet ve metre arasında dönüşüm) Aşağıdaki iki metoda sahip bir sınıf yazınız:

/** Convert from feet to meters */

/** Feetten metreye dönüşüm*/

public static double footToMeter(double foot)

/** Convert from meters to feet */

/** Metreden feete dönüşüm*/

public static double meterToFoot(double meter)

The formula for the conversion is:

Dönüşüm için aşağıdaki formülü kullanabilirsiniz:

meter = 0.305 * foot

foot = 3.279 * meter

metre = 0.305 * feet

feet = 3.279 * metre

Write a test program that invokes these methods to display the following tables:

Yukarıdaki metotları kullanarak aşağıdaki tabloyu oluşturan bir test programı yazınız:

Feet                 Meters                 |         Meters                 Feet

---------------------------------------------------------------------------------------------

1.0                 0.305                 |         20.0                 65.574

2.0                 0.610                 |         25.0                 81.967

...

9.0                 2.745                 |         60.0                 196.721

10.0                 3.050                 |         65.0                 213.115

Feet                 Metre                 |         Metre                 Feet

---------------------------------------------------------------------------------------------

1.0                 0.305                 |         20.0                 65.574

2.0                 0.610                 |         25.0                 81.967

...

9.0                 2.745                 |         60.0                 196.721

10.0                 3.050                 |         65.0                 213.115

6.10 (Use the isPrime Method) Listing 6.7, PrimeNumberMethod.java, provides the isPrime(int number) method for testing whether a number is prime. Use this method to find the number of prime numbers less than 10000.

(isPrime metodunu kullan) Madde 6.7, PrimeNumberMethod.java, dosyasında sayının asal sayı olup olmadığını test eden isPrime(int number) metodu bulunmaktadır. Bu metodu kullanarak 10000’den küçük asal sayıları bulan bir program yazınız.

6.11 (Financial application: compute commissions) Write a method that computes the commission, using the scheme in Programming Exercise 5.39. The header of the method is as follows:

(Finans uygulaması:  komisyon hesaplama) Programlama Alıştırmaları 5.39’daki şemayı kullanarak komisyon oranlarını hesaplayan bir metot yazınız.  Metot bildirimi aşağıdaki şekildedir:

public static double computeCommission(double salesAmount)

Write a test program that displays the following table:

Aşağıdaki tabloyu oluşturacak bir test programı yazınız:

Sales Amount                 Commission

----------------------------------------------------

10000                         900.0

15000                         1500.0

...

95000                         11100.0

100000                         11700.0

Satis Miktari                Komisyon

----------------------------------------------------

10000                         900.0

15000                         1500.0

...

95000                         11100.0

100000                         11700.0

6.12 (Display characters) Write a method that prints characters using the following header:

(Karakterleri gösterme) Aşağıdaki bildirime sahip ve karakterleri yazan bir metot yazınız:

public static void printChars(char ch1, char ch2, int numberPerLine)

This method prints the characters between ch1 and ch2 with the specified numbers per line. Write a test program that prints ten characters per line from 1 to Z. Characters are separated by exactly one space.

Bu metot ch1 ve ch2 arasındaki tüm karakterleri “numberPerLine” parametresinde belirtilen sayıya göre gösterir.  Her satırda 10 karakter olacak şekilde 1 ‘den Z ‘ye kadar sayıları gösteren bir test programı yazınız. Karakterler arasında tam olarak bir boşluk bulunmalıdır.

*6.13 (Sum series) Write a method to compute the following series:

(Seri toplamı) Aşağıdaki serileri hesaplayan bir metot yazınız:

Write a test program that displays the following table:

Aşağıdaki tabloyu oluşturacak bir test programı yazınız:

i                 m(i)

--------------------------------

1                 0.5000

2                 1.1667

...

19                 16.4023

20                 17.3546

*6.14 (Estimate p) p can be computed using the following series:

(yaklaşık p) p değeri aşağıdaki seriler kullanılarak hesaplanabilir:

Write a method that returns m(i) for a given i and write a test program that displays the following table:

Verilen i değeri için m(i) değerlerini hesaplayan bir metot yazınız ve aşağıdaki tabloyu gösteren bir test programı yazınız:

i                 m(i)

--------------------------------

1                 4.0000

101                 3.1515

201                 3.1466

301                 3.1449

401                 3.1441

501                 3.1436

601                 3.1433

701                 3.1430

801                 3.1428

901                 3.1427

*6.15 (Financial application: print a tax table) Listing 3.5 gives a program to compute tax. Write a method for computing tax using the following header:

(Finans uygulaması: vergi tablosu oluşturma) Madde 3.5’te vergileri hesaplayan bir program mevcut. Aşağıdaki bildirime sahip vergi oranlarını hesaplayan bir metot yazınız.

public static double computeTax(int status, double taxableIncome)

Use this method to write a program that prints a tax table for taxable income from $50,000 to $60,000 with intervals of $50 for all the following statuses:

Yukardaki metodu, $50,000 ile $60,000 arasındaki vergilendirilebilir geliri, her bir adımda $50 arttırarak aşağıda belirtilen her durum için  bir vergi tablosunda gösteren bir program yazmak için kullanın.

Taxable            Single                 Married Joint                Married                 Head of

Income                                or Qualifying                 Separate              a House

                                Widow(er)

50000                 8688                        6665                 8688                7353

50050                 8700                        6673                 8700                7365

...

59950                 11175                        8158                 11175                 9840

60000                 11188                        8165                 11188                 9853

     Vergilendirilebilir            Bekar                   Evli ortak (beyanname)        Evli                      Ev reisi

Gelir                                   veya ozellikli dul               Ayri (beyanname)                                            

50000                 8688                        6665                 8688                7353

50050                 8700                        6673                 8700                7365

...

59950                 11175                        8158                 11175                 9840

60000                 11188                        8165                 11188                 9853

Hint: round the tax into integers using Math.round (i.e., Math .round(computeTax(status, taxableIncome))

İpucu: vergiyi bu metot aracılığıyla tam sayıya yuvarlayabilirsiniz. Math.round (ör. Math.round(computeTax(status, taxableIncome))

*6.16 (Number of days in a year) Write a method that returns the number of days in a year using the following header:

(Bir yıldaki gün sayısı) Bir yıldaki gün sayını gösteren, aşağıdaki bildirime sahip bir metot yazınız.

        public static int numberOfDaysInAYear(int year)

Write a test program that displays the number of days in year from 2000 to 2020.

2000’den 2020’ye kadar tüm yıllar için gün sayısını gösteren bir test programı yazınız.

*6.17 (Display matrix of 0s and 1s) Write a method that displays an n-by-n matrix using the following header:

(0 ve 1 matrisi oluşturma)Aşağıdaki bildirime sahip, nxn boyutunda matris oluşturan bir metot yazınız.

public static void printMatrix(int n)

Each element is 0 or 1, which is generated randomly. Write a test program that prompts the user to enter n and displays an n-by-n matrix. Here is a sample run:

Matrisin her elemanı rastgele üretilmil  0 ya da 1. Kullanıcıdan n değerini alan ve ekranda nxn boyutunda bir matris gösteren test programını yazınız. Örnek akışı inceleyiniz:

                     n giriniz:  3

                     0 1 0

                     0 0 0

                     1 1 1

**6.18 (Check password ) Some websites impose certain rules for passwords. Write a method that checks whether a string is a valid password. Suppose the password rules are as follows:

(Şifre kontrolü) Bazı web siteleri şifre oluşturmada kesin kurallar uygularlar. Girilen bir string’in geçerli bir şifre olup olmadığını kontrol eden bir metot yazınız. Şifre kurallarının aşağıdaki gibi olduğunu varsayalım:

A password must have at least eight characters.

A password consists of only letters and digits.

A password must contain at least two digits.

 Şifre en az 8 karakterden oluşmalıdır.

 Şifre sadece harf ve rakamlardan oluşabilir.

 Şifre en az iki rakam içermelidir.

Write a program that prompts the user to enter a password and displays Valid Password if the rules are followed or Invalid Password otherwise.

Kullanıcıdan bir şifre girmesini isteyen ve eğer şifre belirtilen kurallara uygunsa “Geçerli Şifre” değilse “Geçersiz Şifre” mesajını gösteren bir program yazınız.

*6.19 (The MyTriangle class) Create a class named MyTriangle that contains the following two methods:

 (BenimUcgenim sınıfı)Aşağıda bildirilen iki metodu içeren BenimUcgenim isimli bir sınıf tanımlayın:

/** Return true if the sum of any two sides is greater than the third side. */

/** Eğer iki kenar uzunluğunun toplamı üçüncüden büyükse true döner. */

public static boolean isValid(double side1, double side2, double side3)

/** Return the area of the triangle. */

/** Üçgenin alanını hesaplar. */

public static double area(double side1, double side2, double side3)

Write a test program that reads three sides for a triangle and computes the area if the input is valid. Otherwise, it displays that the input is invalid. The formula for computing the area of a triangle is given in Programming Exercise 2.19.

Kullanıcıdan kenar uzunluklarını alan ve girdiler geçerli ise üçgenin alanını hesaplayan bir test programı yazınız. Eğer girdiler geçerli değilse bunu kullanıcıya gösteriniz. Üçgenin alanının hesaplanması için kullanılacak formül Programlama Soruları 2.19 verilmiştir.

*6.20 (Count the letters in a string) Write a method that counts the number of letters in a string using the following header:

(Yazıdaki harf sayısı) Aşağıdaki bildirime sahip ve bir yazıdaki harfleri sayan bir metot yazınız.

public static int countLetters(String s)

Write a test program that prompts the user to enter a string and displays the number of letters in the string.

Kullanıcıdan bir yazı girmesini isteyen ve bu yazıdaki harf sayısını gösteren bir test programı yazınız.

*6.21 (Phone keypads) The international standard letter/number mapping for telephones is shown in Programming Exercise 4.15. Write a method that returns a number, given an uppercase letter, as follows:

(Telefonun tuş takımı) Telefon tuşlarında kullanılan uluslararası standart harf/sayı karşılıkları Programlama Alıştırmaları 4.15’te gösterilmektedir. Girilen büyük harf karakterine karşılık gelen rakamı veren aşağıdaki bildirime sahip bir metot yazınız:

int getNumber(char uppercaseLetter)

Write a test program that prompts the user to enter a phone number as a string. The input number may contain letters. The program translates a letter (uppercase or lowercase) to a digit and leaves all other characters intact. Here is a sample run of the program:

Kullanıcıdan telefon numarasını yazı olarak girmesini isteyin. Girdi farklı karakterler içerebilir. Program harfi (büyük ya da küçük)ona karşılık gelen rakama çevirecek ancak diğer karakterlerde herhangi değişiklik yapmayacak. Programın örnek akışını inceleyiniz:

 

                    Bir yazi giriniz: 1- 800 - Flowers

                    1 - 800 - 3569377

                    Bir yazi giriniz: 1800flowers

                    18003569377

**6.22 (Math: approximate the square root) There are several techniques for implementing the sqrt  

method in the Math class. One such technique is known as the Babylonian method. It approximates the square root of a number, n, by repeatedly performing a calculation using the following formula:

(Matematik: yaklaşık karekök) Math sınıfındaki sqrt metodunu yazmak için birkaç yöntem bulunmaktadır.  

Bu yöntemlerden biri de Babylonian metodudur. Bu yöntem n sayısının karekökünün yaklaşık değerini hesaplamak için aşağıdaki formulü tekrar ederek kullanır.

nextGuess = (lastGuess + n / lastGuess) / 2

birsonrakiTahmin = (sonTahmin + n / sonTahmin) / 2

When nextGuess and lastGuess are almost identical, nextGuess is the approximated square root. The initial guess can be any positive value (e.g., 1). This value will be the starting value for lastGuess. If the difference between nextGuess and lastGuess is less than a very small number, such as 0.0001, you can claim that nextGuess is the approximated square root of n. If not, nextGuess becomes lastGuess and the approximation process continues. Implement the following method that returns the square root of n.

nextGuess ve lastGuess neredeyese aynı olduklarında, nextGuess yaklaşık karekök değerini verir.  Başlangıç tahmin değeri herhangi bir pozitif sayı olabilir. (Ör. 1). Bu lastGuess değişkeni için başlangıç değeri olacaktır. Eğer nextGuess ve lastGuess arasındaki fark oldukça küçük bir sayı olursa (0.0001 gibi) nextGuess’in n sayısının karekök değeri olduğuna hükmedebilirsiniz.  Eğer değilse nextGuess in değeri lastGuess e atanır ve hesaplama devam eder.  n sayısının karekök değerini hesaplayan aşağıda bildirimi bulunan metodu yazınız.

public static double sqrt(long n)

*6.23 (Occurrences of a specified character) Write a method that finds the number of occurrences of a specified character in a string using the following header:

(Bir karakterin tekrar sayısı) Belirlenen bir karakterin bir string içerisinde kaç defa bulunduğunu bulan aşağıdaki bildirime sahip bir metot yazınız.

public static int count(String str, char a)

For example, count("Welcome", 'e') returns 2. Write a test program that prompts the user to enter a string followed by a character and displays the number of occurrences of the character in the string.

Örneğin, count(”Merhaba”, ‘a’) metodunun geri dönüş değeri 2’dir. Kullanıcıdan bir string ve arkasından bir karakter girmesini isteyen ve girilen karakterin string içerisinde kaç defa tekrarlandığını kullanıcıya gösteren bir test programı yazınız.

**6.24 (Display current date and time) Listing 2.7, ShowCurrentTime.java, displays the current time. Improve this example to display the current date and time. The calendar example in Listing 6.12, PrintCalendar.java, should give you some ideas on how to find the year, month, and day.

(Şu anki tarih ve zamanı gösterme) Madde 2.7, ShowCurrentTime.java, şu anki zamanı gösteriyordu.  Örneği geliştirip şu anki tarih ve zamanı gösterin.  Madde 6.12’deki PrintCalendar.java yıl, ay ve günü bulmanız konusunda size fikir verecektir.

**6.25 (Convert milliseconds to hours, minutes, and seconds) Write a method that converts milliseconds to hours, minutes, and seconds using the following header:

(Milisaniyeyi ; saat, dakika ve saniyeye çevirme) Aşağıdaki bildirime sahip Milisaniyeyi ; saat, dakika ve saniyeye çeviren bir metot yazınız.

public static String convertMillis(long millis)

The method returns a string as hours:minutes:seconds. For example, convertMillis(5500) returns a string 0:0:5, convertMillis(100000) returns a string 0:1:40, and convertMillis(555550000) returns a string 154:19:10.

Metot saat:dakika:saniye formatında bir string geri döndürsün. Örneğin, convertMillis(5500)’in sonucu 0:0:5, convertMillis(100000)’in sonucu 0:1:40 ve convertMillis(555550000)’in sonucu 154:19:10.

**6.26 (Palindromic prime) A palindromic prime is a prime number and also palindromic. For example, 131 is a prime and also a palindromic prime, as are 313 and 757. Write a program that displays the first 100 palindromic prime numbers. Display 10 numbers per line, separated by exactly one space, as follows:

(Palindrom asal sayılar) Palindrom asay sayı; hem asal sayı hem de palindrom olan sayılardır.  Örneğin 131 hem asal hem de palindromdur. 313 ve 757 de aynı şekilde. İlk 100 palindrom asal sayıyı gösteren bir program yazınız. Her satırda 10 sayı ve aralarında bir boşluk olacak şekilde gösteriniz.

2 3 5 7 11 101 131 151 181 191

313 353 373 383 727 757 787 797 919 929

...

**6.27 (Emirp) An emirp (prime spelled backward) is a nonpalindromic prime number whose reversal is also a prime. For example, 17 is a prime and 71 is a prime, so 17 and 71 are emirps. Write a program that displays the first 100 emirps. Display 10 numbers per line, separated by exactly one space, as follows:

(Lasa) Lasa (asal’ın tersten yazılışı) palindrom olmayan asal sayıların tersten yazılışları da asal sayı olan sayılardır. Örneğin 17 asal sayıdır ve tersi olan 71 de asal sayıdır. Bu durumda 17 ve 71 sayıları lasa’dır.  İlk yüz lasa’yı gösteren bir program yazınız.  Her satırda 10 sayı ve aralarında bir boşluk olacak şekilde gösteriniz.

13 17 31 37 71 73 79 97 107 113

149 157 167 179 199 311 337 347 359 389

...

**6.28 (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 … 31 and displays the output as follows:

(Mersenne asal sayıları) Bir asal sayının 2p - 1 işleminin sonucu da bir asal sayı ise bu sayı Mersenne asal sayısıdır. 31’e kadar tüm Mersenne asal sayılarını bulan bir program yazınız. Program çıktısı aşağıdaki tabloyu oluşturacak şekilde formatlayınız:

p         2^p –1

--------------------

2         3

3         7

5         31

...

**6.29 (Twin primes) Twin primes are a pair of prime numbers that differ by 2. For example, 3 and 5 are twin primes, 5 and 7 are twin primes, and 11 and 13 are twin primes. Write a program to find all twin primes less than 1,000. Display the output as follows:

(İkili asal sayılar) İkili asal sayılar aralarında iki sayı fark olan bir çift asal sayıdır. Örneğin, 3 ve 5 , 5 ve 7 , 11 ve 13 ikili asal sayılardır.  1000’den küçük olan tüm ikili asal sayıları bulan bir program yazınız.  Programın sonucunu aşağıdaki gibi gösteriniz:

(3, 5)

(5, 7)

...

**6.30 (Game: craps) Craps is a popular dice game played in casinos. Write a program to play a variation of the game, as follows:

(Oyun: Craps) Craps popüler bir zar oyunudur. Aşağıdaki yönergelere göre oyunu oynayabileceğiniz bir program yazınız.

Roll two dice. Each die has six faces representing values 1, 2, …, and 6, respectively. Check the sum of the two dice. If the sum is 2, 3, or 12 (called craps), you lose; if the sum is 7 or 11 (called natural), you win; if the sum is another value (i.e., 4, 5, 6, 8, 9, or 10), a point is established. Continue to roll the dice until either a 7 or the same point value is rolled. If 7 is rolled, you lose. Otherwise, you win.

İki zar atın. Her bir zarın altı yüzü vardır ve üzerinde 1, 2, … ve 6’ya kadar rakamlar vardır. İki zarın toplamını alın. Eğer toplam 2, 3 ya da 12 (craps denir) ise kaybedersiniz. Eğer toplam 7 ya da 11 (natural denir) ise kazanırsınız. Eğer toplam bunların dışında bir değerse (ör., 4, 5, 6, 8, 9 ya da 10) bu sayıyla oyun başlar. 7 ya da gelen sayı tekrar gelene kadar zar atılmaya devam edilir. Eğer 7 gelirse kaybedersiniz. Aksi takdirde kazanırsınız.

Your program acts as a single player. Here are some sample runs.

Yazacağınız program tek oyuncu gibi davranacak. Programın örnek akışını inceleyiniz:

                     5 + 6 = 11 attiniz

                     Kazandiniz

                     1 + 2 = 3  attiniz

                     Kaybettiniz

                    4 + 4 = 8 attiniz

                    8 puan

                    6 + 2 = 8  attiniz

                    Kazandiniz

                    3 + 2 = 5 attiniz

                    5 puan

                    2 + 5 = 7  attiniz

                    Kaybettiniz

**6.31 (Financial: credit card number validation) Credit card numbers follow certain patterns. A credit card number must have between 13 and 16 digits. It must start with:

(Finans: kredi kartı numarası geçerliliği) Kredi kart numaraları belirli bir kalıba sahiptirler. Kredi kartı numaraları en az 13, en fazla 16 hanelidir. Başlangıç numarasına göre kartlar:

4 for Visa cards

5 for Master cards

37 for American Express cards

6 for Discover cards

4 Visa kart

5 Master kart

37 American Express kart

6 Discover kart

In 1954, Hans Luhn of IBM proposed an algorithm for validating credit card numbers. The algorithm is useful to determine whether a card number is entered correctly or whether a credit card is scanned correctly by a scanner. Credit card numbers are generated following this validity check, commonly known as the Luhn check or the Mod 10 check, which can be described as follows (for illustration, consider the card number 4388576018402626):

1954 yılında IBM’den Hans Luhn kredi kartı numaralarının geçerliliğini kontrol etmek için bir algoritma önerdi. Bu algoritma kredi kartı numarasının doğru girilip girilmediğini ya da doğru taranıp taranmadığını kontrol etmek için kullanılır. Genel olarak Luhn kontrolü ya da Mod 10 kontrolü olarak bilinen bu algoritma, kredi kartı numaralarının üretilmesinde kullanılır. (Deneme için kart numarasının 4388576018402626 olduğunu varsayalım).

1. Double every second digit from right to left. If doubling of a digit results in a two-digit number, add up the two digits to get a single-digit number.

1. Sağdan sola doğru her ikinci basamağın iki katını alın. Eğer sonuç iki basamaklı bir sayı çıkarsa basamak değerlerini toplayınız ve tek basamaklı bir sayı elde ediniz.

2. Now add all single-digit numbers from Step 1.

2. Elde ettiğiniz tüm rakamları toplayınız.

4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37

3. Add all digits in the odd places from right to left in the card number.

3. Sağdan sola tek pozisyonunda duran rakamları toplayınız.

6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38

4. Sum the results from Step 2 and Step 3.

4. 2. ve 3.adımda çıkan değerleri toplayınız.

37 + 38 = 75

5. If the result from Step 4 is divisible by 10, the card number is valid; otherwise, it is invalid. For example, the number 4388576018402626 is invalid, but the number 4388576018410707 is valid.

5. Eğer 4. adımda elde edilen değer 10’a tam bölünüyorsa kredi kartı numarası geçerlidir. Aksi takdirde geçersizdir. Örneğin 4388576018402626 numarası geçersizdir. Ancak 4388576018410707 numarası geçerlidir.

Write a program that prompts the user to enter a credit card number as a long integer. Display whether the number is valid or invalid. Design your program to use the following methods:

Kullanıcıdan kredi kartı numarasını long sayı tipinde alan ve numaranın geçerli olup olmadığını gösteren bir program yazınız. Programınızı aşağıdaki metodları kullanacak şekilde tasarlayınız.

/** Return true if the card number is valid */

/** Kredi kartı numarası geçerliye true döner. */

public static boolean isValid(long number)

/** Get the result from Step 2 */

/** 2. adımdaki sonucu hesaplar*/

public static int sumOfDoubleEvenPlace(long number)

/** Return this number if it is a single digit, otherwise,

* return the sum of the two digits */

/** Eğer tek basamak ise sayının kendi değerini döndürür.

* değilse iki basamağın toplamını döndürür*/

public static int getDigit(int number)

/** Return sum of odd-place digits in number */

/** Tek pozisyonunda bulunan basamakların toplamını döndürür */

public static int sumOfOddPlace(long number)

/** Return true if the digit d is a prefix for number */

/** d basamağının önek olduğu durumda true döner */

public static boolean prefixMatched(long number, int d)

/** Return the number of digits in d */

/** basamak sayısını hesaplar */

public static int getSize(long d)

/** Return the first k number of digits from number. If the

* number of digits in number is less than k, return number. */

/**number değişkenin k kadar basamağını bulur. Eğer;

* basamak sayısı k’dan küçükse sayının kendisine döner*/ */

public static long getPrefix(long number, int k)

Here are sample runs of the program: (You may also implement this program by reading the input as a string and processing the string to validate the credit card.)


Programın örnek akışını inceleyiniz: (Bu programı kullanıcıdan kart numarasını string olarak okuyarak da alabilirsiniz. String’i işleyerek kredi kartı numarasının geçerliliğini kontrol edebilirsiniz. )

                   Kredi karti numarasini uzun bir tam sayi olarak giriniz:

                   4388576018410707

                   4388576018410707 gecerli

                   Kredi karti numarasini uzun bir tam sayi olarak giriniz:

                   4388576018402626

                   4388576018402626 gecersiz

**6.32 (Game: chance of winning at craps) Revise Exercise 6.30 to run it 10,000 times and display the number of winning games.

(Oyun: craps oyununda kazanma olasılığı) 6.30’daki alıştırmayı kullanarak oyunu 10 000 defa oynatıp oyunu kaç defa kazandığınızı ekrana yazdırınız.

**6.33 (Current date and time) Invoking System.currentTimeMillis() returns the elapsed time in milliseconds since midnight of January 1, 1970. Write a program that displays the date and time. Here is a sample run:

(Şimdiki tarih ve saat) System.currentTimeMillis() metodu 1 Ocak 1976 tarihinin gece yarısından şu ana kadar geçen zamanı mili saniye olarak verir. Tarih ve saati gösteren bir program yazınız. Örnek akışı inceleyiniz:

                   Simdiki tarih ve saat 16 Mayıs, 2012    10:34:23

**6.34 (Print calendar) Programming Exercise 3.21 uses Zeller’s congruence to calculate the day of the week. Simplify Listing 6.12, PrintCalendar.java, using Zeller’s algorithm to get the start day of the month.

(Takvim) Programlama Soruları 3.21 Zeller Algoritması ile verilen bir tarihin hangi gün olduğu hesaplar. Madde 6.12’deki  PrintCalendar.java kodunu Zeller Algoritması’nı kullanarak basitleştirin.

6.35 (Geometry: area of a pentagon) The area of a pentagon can be computed using the following formula:

 (Geometri: Beşgenin alanı) Bir beşgenin alanını aşağıdaki formülü kullanarak hesaplayabilirsiniz.

Write a method that returns the area of a pentagon using the following header:

Beşgenin alanını hesaplayan aşağıdaki bildirime sahip bir metot yazınız.

public static double area(double side)

Write a main method that prompts the user to enter the side of a pentagon and displays its area. Here is a sample run:

Main metodunda kullanıcıdan kenar uzunluğunu alan ve alanını gösteren kodu yazınız. Örnek akışı inceleyiniz:

                   Kenar uzunlugu giriniz:  5.5

                   Besgenin alani 52.04444136781625

*6.36 (Geometry: area of a regular polygon) A regular polygon is an n-sided polygon in which all sides are of the same length and all angles have the same degree (i.e., the polygon is both equilateral and equiangular). The formula for computing the area of a regular polygon is

(Geometri: Düzgün çokgenin alanı) Düzgün çokgen; n kenardan oluşan ve her kenarın uzunluğu ve aralarındaki açı aynı olan çokgenlere denir. Düzgün çokgenin alanını hesaplamak için kullanılacak formül:

Write a method that returns the area of a regular polygon using the following header:

Düzgün çokgenin alanını hesaplayan aşağıdaki bildirime sahip bir metot yazınız.

public static double area(int n, double side)

Write a main method that prompts the user to enter the number of sides and the side of a regular polygon and displays its area. Here is a sample run:

Main metodunda kullanıcıdan kenar sayısını ve kenar uzunluğunu alan ve alanını hesaplayıp gösteren kodu yazınız. Örnek akışı inceleyiniz:

                    Kenar sayisi giriniz:  5

                    Kenar uzunlugunu giriniz:  6.5

                    Cokgenin alani  72.69017017488385

6.37 (Format an integer) Write a method with the following header to format the integer with the specified width.

(Tam sayı formatlama)Belirtilen genişlikte bir tam sayıyı formatlayan ve aşağıdaki bildirime sahip bir metot yazınız.

public static String format(int number, int width)

The method returns a string for the number with one or more prefix 0s. The size of the string is the width. For example, format(34, 4) returns 0034 and format(34, 5) returns 00034. If the number is longer than the width, the method returns the string representation for the number. For example, format(34, 1) returns 34.

Metot sayının önüne bir veya daha fazla 0 (Sıfır) ekleyerek geri döner. Girilen sayının uzunluğunu başına 0 ekleyerek tamamlayanız. Örneğin; format(34, 4),  0034 döner ya da format(34, 5), 00034 döner gibi. Eğer girilen sayının basamak sayısı, uzunluk değerinden büyük ise girilen sayının aynısını geri dönsün. Örneğin; format(34, 1) ise 34.

Write a test program that prompts the user to enter a number and its width and displays a string returned by invoking format(number, width).

Kullanıcıdan bir sayı ve formatlanacağı genişlik değerini alan ve format(number, width) metodunu çağırarak formatlanmış string’i gösteren bir program yazınız.

*6.38 (Generate random characters) Use the methods in RandomCharacter in Listing 6.10 to print 100 uppercase letters and then 100 single digits, printing ten per line.

(Rastgele karakter üretme) Madde 6.10’daki RandomCharacter metodunu kullanarak her bir satırda 10 tane olacak şekilde 100 tane büyük harf ve 100 tane rakamı ekranda gösteriniz.

6.39 (Geometry: point position) Programming Exercise 3.32 shows how to test whether a point is on the left side of a directed line, on the right, or on the same line. Write the methods with the following headers:

(Geometri: nokta pozisyonu) Programlama Alıştırması 3.32’de bir noktanın bir çizginin sağında mı, solunda mı ya da üzerinde mi olduğunu test etmeyi öğrenmiştik. Aşağıdaki bildirimlere sahip metotları yazınız:

/** Return true if point (x2, y2) is on the left side of the directed line from (x0, y0) to (x1, y1) */

/** (x2, y2) noktası (x0, y0)’dan (x1, y1)’e çizilen doğrunun solunda ise true geri dönüş değeri üretir*/

public static boolean leftOfTheLine(double x0, double y0, double x1, double y1, double x2, double y2)

/** Return true if point (x2, y2) is on the same line from (x0, y0) to (x1, y1) */

/** (x2, y2) noktası (x0, y0)’dan (x1, y1)’e çizilen doğrunun doğrultusunda ise true geri dönüş değeri üretir */

public static boolean onTheSameLine(double x0, double y0, double x1, double y1, double x2, double y2)

/** Return true if point (x2, y2) is on the line segment from (x0, y0) to (x1, y1) */

/** (x2, y2) noktası (x0, y0)’dan (x1, y1)’e çizilen doğrunun üzerinde ise true geri dönüş değeri üretir */

public static boolean onTheLineSegment(double x0, double y0, double x1, double y1, double x2, double y2)

Write a program that prompts the user to enter the three points for p0, p1, and p2 and displays whether p2 is on the left of the line from p0 to p1, right, the same line, or on the line segment. Here are some sample runs:

p0, p1, p2 değerlerini kullanıcının girdiği ve p2 noktasının p0, p1arasında çizilen doğrunun sağında, solunda, üzerinde ya da doğrultusunda olduğunu gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

                   p0, p1 ve p2 icin uc nokta giriniz:  1  1  2  2  1.5  1.5

                   (1.5, 1.5), (1.0, 1,0)’dan (2.0, 2.0)’a uzanan dogrultu yonundedir.

                   p0, p1 ve p2 icin uc nokta giriniz:  1  1  2  2  3  3

                   (3.0, 3.0), (1.0, 1,0)’dan (2.0, 2.0)’a uzanan dogrultu uzerindedir.

                   p0, p1 ve p2 icin uc nokta giriniz:  1  1  2  2  1  1.5

                   (1.0, 1.5), (1.0, 1,0)’dan (2.0, 2.0)’a uzanan dogrultunun solundadır.

                   p0, p1 ve p2 icin uc nokta giriniz:  1  1  2  2  1  -1

                   (1.0, -1.0), (1.0, 1,0)’dan (2.0, 2.0)’a uzanan dogrultunun sagindadir.