Section 8 Programming Exercises

Bölüm 8 Sorular

 *8.1 (Sum elements column by column) Write a method that returns the sum of all the elements in a specified column in a matrix using the following header:

(Sütun Toplamı) Aşağıdaki bildirime sahip, bir matrisin verilen sütunlarındaki değerlerin toplamını hesaplayan bir metot yazınız:

public static double sumColumn(double[][] m, int columnIndex)

Write a test program that reads a 3-by-4 matrix and displays the sum of each column. Here is a sample run:

3X4 bir matrisi okuyan her bir kolonun toplamını gösteren bir test programı yazınız. Örnek akışı inceleyiniz:

                   3x4’luk bir matrisi sira halinde giriniz:

                   1.5  2  3  4

                   5.5  6  7  8

                   9.5  1  3  1

                   0. sutundaki verilerin toplami  16.5

                   1. sutundaki verilerin toplami  9.0

                   2. sutundaki verilerin toplami  13.0

                   3. Sutundaki verilerin toplami 13.0

*8.2 (Sum the major diagonal in a matrix) Write a method that sums all the numbers in the major diagonal in an n * n matrix of double values using the following header:

(Matristeki ana çaprazların toplamı) double türden değerler tutan n*n  bir matrisin ana çaprazındaki değerlerin toplamını hesaplayan, aşağıdaki bildirime sahip bir metot yazınız.

public static double sumMajorDiagonal(double[][] m)

Write a test program that reads a 4-by-4 matrix and displays the sum of all its elements on the major diagonal. Here is a sample run:

4*4 boyutunda bir matrisi okuyan ve ana çaprazındaki değerlerin toplamını gösteren bir test programı yazınız. Örnek akışı inceleyiniz:

                   4x4’luk bir matrisi sira halinde giriniz:

                   1    2    3   4.0

                   5   6.5   7   8

                   9   10  11  12

                  Ana çaprazdaki verilerin toplami 34.5

*8.3 (Sort students on grades) Rewrite Listing 8.2, GradeExam.java, to display the students in increasing order of the number of correct answers.

(Öğrencileri nota göre sıralama) Madde 8.2 GradeExam.java’yı öğrencilerin doğru cevap sayısına göre artan sırada gösterecek şekilde yeniden yazınız..

**8.4 (Compute the weekly hours for each employee) Suppose the weekly hours for all employees are stored in a two-dimensional array. Each row records an employee’s seven-day work hours with seven columns. For example, the following array stores the work hours for eight employees. Write a program that displays employees and their total hours in decreasing order of the total hours.

(Haftalık çalışma saati hesaplama) Her bir çalışanın haftalık çalışma saatlerinin iki boyutlu bir dizide tutulduğunu varsayalım. Çalışanın yedi günlük çalışma saatleri bir satırın yedi ayrı sütununda saklansın. Örneğin aşağıdaki dizi sekiz çalışanın haftalık çalışma saatlerini saklar. Çalışanı ve toplam çalışma saatini azalan şekilde sıralanmış olarak gösteren bir program yazınız.

         

                                                   

8.5 (Algebra: add two matrices) Write a method to add two matrices. The header of the method is as follows:

(Cebir: İki matrisin toplamı) İki matrisi toplayan bir metot yazınız. Metot bildirimi aşağıdaki şekildedir;

public static double[][] addMatrix(double[][] a, double[][] b)

In order to be added, the two matrices must have the same dimensions and the same or compatible types of elements. Let c be the resulting matrix. Each element c ij is aij + bij. For example, for two 3 * 3 matrices a and b, c is

İki matrisin toplanabilmesi için elemanlarının aynı boyuta sahip olması ve aynı ya da birbiriyle uyumlu türden olması gerekir.  c sonuç matrisi olsun. c ij’nin her bir elemanı aij + bijdir. Örneğin iki tane 3 * 3 a ve b matrisleri için c :

Write a test program that prompts the user to enter two 3 * 3 matrices and displays their sum. Here is a sample run:

Kullanıcıdan iki tane 3*3 boyutunda matris alan ve bu matrislerin toplamını gösteren bir program yazınız. Örnek akışı inceleyiniz:

                   Matris1’i giriniz:  1  2  3  4  5  6  7  8  9

                   Matris2’yi giriniz: 0  2  4  1  4.5  2.2  1.1  4.3  5.2

                   Matrislerin toplami asagidaki gibidir:

                   1.0  2.0  3.0                0.0  2.0  4.0                    1.0  4.0  7.0

                   4.0  5.0  6.0      +        1.0  4.5  2.2         =        5.0  9.5  8.2

                   7.0  8.0  9.0                1.1  4.3  5.2                    8.1  12.3  14.2

**8.6 (Algebra: multiply two matrices) Write a method to multiply two matrices. The header of the method is:

(Cebir: İki matrisin çarpımı) İki matrisi çarpımını hesaplayan bir metot yazınız. Metot bildirimi aşağıdaki şekildedir;

public static double[][] multiplyMatrix(double[][] a, double[][] b)

To multiply matrix a by matrix b, the number of columns in a must be the same as the number of rows in b, and the two matrices must have elements of the same or compatible types. Let c be the result of the multiplication. Assume the column size of matrix a is n. Each element cij is ai1 * b1j + ai2 * b2j + c + ain * bnj.

a matrisinin b matrisi ile çarpılabilmesi için a matrisinin sütun sayısı, b matrisinin satır sayısını eşit olmalı ve elemanları aynı ya da birbiriyle uyumlu türlerden olmalıdır. c sonuç matrisi olsun. a matrisinin sütun sayısının n olduğunu varsayalım. cijnin her elemanı ai1 * b1j + ai2 * b2j + c + ain * bnj.

For example, for two 3 * 3 matrices a and b, c is

Örneğin iki adet 3 * 3 a ve b matrisi için c :

where cij = ai1 * b1j + ai2 * b2j + ai3 * b3j.

cij = ai1 * b1j + ai2 * b2j + ai3 * b3j.

Write a test program that prompts the user to enter two 3 * 3 matrices and displays their product. Here is a sample run:

Kullanıcıdan iki tane 3*3 boyutunda matris alan ve bu matrislerin çarpımını gösteren bir program yazınız. Örnek akışı inceleyiniz:

                   Matris1’i giriniz:  1  2  3  4  5  6  7  8  9

                   Matris2’yi giriniz: 0  2  4  1  4.5  2.2  1.1  4.3  5.2

                   Matrislerin carpimi asagidaki gibidir:

                       1  2  3                 0  2.0  4.0                   5.3   23.9   24 .0

                       4  5  6        *       1  4.5  2.2         =       11.  56.3  58.2

                       7  8  9                 1.1  4.3  5.2                17.9  88.7  92.4

 

*8.7 (Points nearest to each other) Listing 8.3 gives a program that finds two points in a two-dimensional space nearest to each other. Revise the program so that it finds two points in a three-dimensional space nearest to each other. Use a two-dimensional array to represent the points. Test the program using the following points:

(Birbirine en yakın noktalar) Madde 8.3´te iki boyutlu uzayda birbirine en yakın iki noktayı bulan bir program bulunmaktadır. Bu programı üç boyutlu uzayda birbirine en yakın iki noktayı bulacak şekilde düzenleyiniz. Noktaları saklamak için iki boyutlu bir dizi kullanınız. Aşağıda verilen noktaları kullanarak programınızı test ediniz.

double[][] points = {{-1, 0, 3}, {-1, -1, -1}, {4, 1, 1}, {2, 0.5, 9}, {3.5, 2, -1}, {3, 1.5, 3}, {-1.5, 4, 2}, {5.5, 4, -0.5}};

The formula for computing the distance between two points (x1, y1, z1) and (x2, y2, z2) is 2(x2 - x1)2 + (y2 - y1)2 + (z2 - z1)2.

(x1, y1, z1) ve (x2, y2, z2) gibi iki nokta arasındaki mesafeyi hesaplamak için 2(x2 - x1)2 + (y2 - y1)2 + (z2 - z1)2 formülü kullanılabilir.

**8.8 (All closest pairs of points) Revise Listing 8.3, FindNearestPoints.java, to display all closest pairs of points with the same minimum distance. Here is a sample run:

(En yakın nokta çiftleri) Madde 8.3 FindNearestPoints.java programını birbiriyle aynı ve en yakın mesafede olan nokta çiftlerini gösterecek şekilde yeniden yazınız. Örnek akışı inceleyiniz:

                       Nokta sayisini yaziniz: 8

                       8 noktayi giriniz:  0 0  1 1  -1 -1  2 2  -2 -2  -3 -3  -4 -4  5 5

                       Birbirine en yakin iki nokta  (0.0, 0.0) ve (1.0, 1.0)

                       Birbirine en yakin iki nokta  (0.0, 0.0) ve (-1.0, -1.0)

                       Birbirine en yakin iki nokta  (1.0, 1.0) ve (2.0, 2.0)

                       Birbirine en yakin iki nokta  (-1.0, -1.0) ve (-2.0, -2.0)

                       Birbirine en yakin iki nokta  (-2.0, -2.0) ve (-3.0, -3.0)  

                       Birbirine en yakin iki nokta  (-3.0, -3.0) ve (-4.0, -4.0)

                       Birbirlerine uzakliklari  1.4142135623730951

***8.9 (Game: play a tic-tac-toe game) In a game of tic-tac-toe, two players take turns marking an available cell in a 3 * 3 grid with their respective tokens (either X or O). When one player has placed three tokens in a horizontal, vertical, or diagonal row on the grid, the game is over and that player has won. A draw (no winner) occurs when all the cells on the grid have been filled with tokens and neither player has achieved a win. Create a program for playing tic-tac-toe.

(Oyun: Tic-tac-toe) Tic-tac-toe oyununda iki oyuncu sırasıyla 3*3 bir tabloda boş olan bir kareye X ya da O taşını koyar. Eğer bir oyuncu aynı satıra, aynı sütuna ya da çapraz olarak üç taş koyduysa oyun biter ve bu oyuncu kazanır. Tablodaki tüm alanlar doldurulursa ve bir oyuncu kazanmış durumda değilse oyun sonlanır ve bu oyun berabere biter. Tic-tac-toe oynatan bir program yazınız.

 

The program prompts two players to enter an X token and O token alternately. Whenever a token is entered, the program redisplays the board on the console and determines the status of the game (win, draw, or continue). Here is a sample run:

Program iki oyuncudan da X taşını ve O taşını tabloda bir yere koymasını istesin. Oyuncu oynadıktan sonra program tablonun durumunu göstersin ve oyunun durumuna karar versin (Kazandınız, berabere, devam edin). Örnek akışı inceleyiniz:

                 

                  X oyuncusu icin bir satir giriniz (0, 1 ya da 2):  1

                  X oyuncusu icin bir sutun giriniz (0, 1 ya da 2):  1

 

                 

                  O oyuncusu icin bir satir giriniz (0, 1 ya da 2):  1

                  O oyuncusu icin bir sutun giriniz (0, 1 ya da 2):  2

               

                  X oyuncusu icin bir satir giriniz (0, 1 ya da 2):  

                  .  .  .

             

                X oyuncusu kazandi

*8.10 (Largest row and column) Write a program that randomly fills in 0s and 1s into a 4-by-4 matrix, prints the matrix, and finds the first row and column with the most 1s. Here is a sample run of the program:

(En büyük satır ve sütun) 4*4 boyutunda bir matrisin elemanlarına rastgele 0 ya da 1 değerleri atayıp matrisi ekranda gösteren ve en fazla 1 elemanına sahip ilk satırın ve ilk sütunun indeksini gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

0011

0011

1101

1010

The largest row index: 2

The largest column index: 2

0011

0011

1101

1010

En buyuk satir indeksi: 2

En buyuk sutun indeksi: 2

**8.11 (Game: nine heads and tails) Nine coins are placed in a 3-by-3 matrix with some face up and some face down. You can represent the state of the coins using a 3-by-3 matrix with values 0 (heads) and 1 (tails). Here are some examples:

(Oyun: dokuz yazı ve tura) 3*3 matrise dokuz tane madeni para yerleştiriniz. Bazıları yazı bazıları tura olsun. Bu 3*3 boyutlu matriste yazı 0 ve tura 1 ile temsil edilsin. Aşağıda örnekleri inceleyiniz.

0 0 0 1 0 1 1 1 0 1 0 1 1 0 0

0 1 0 0 0 1 1 0 0 1 1 0 1 1 1

0 0 0 1 0 0 0 0 1 1 0 0 1 1 0

Each state can also be represented using a binary number. For example, the preceding matrices correspond to the numbers

Her bir matrisin durumu ikilik bir sayı ile de temsil edilebilir. Yukarıdaki matrisler aşağıdaki ikilik sayılara karşılık gelir.

000010000 101001100 110100001 101110100 100111110

There are a total of 512 possibilities, so you can use decimal numbers 0, 1, 2, 3, . . . , and 511 to represent all states of the matrix. Write a program that prompts the user to enter a number between 0 and 511 and displays the corresponding matrix with the characters H and T. Here is a sample run:

Toplam 512 tane olasılık bulunmaktadır. 0, 1, 2, 3, . . . ve 511 sayılarını kullanarak matrisin her bir durumunu gösterebilirsiniz. Kullanıcıdan 0 ile 511 aralığında bir sayı alan ve buna karşılk gelen matrisi Y (yazı) ve T (tura) karakterleri ile gösteren bir program yazınız. Örnek akışı inceleyiniz:

                 0 - 511 arasi bir sayi giriniz: 7

                 T T T

                 T T T

                Y Y Y

The user entered 7, which corresponds to 000000111. Since 0 stands for H and 1 for T, the output is correct.

Kullanıcı 7 girdiğinde bu 000000111’i temsil eder. 0 T ve 1 Y anlamına geldiği için, sonuç doğrudur.

**8.12 (Financial application: compute tax) Rewrite Listing 3.5, ComputeTax.java, using arrays. For each filing status, there are six tax rates. Each rate is applied to a certain amount of taxable income.

(Finans uygulaması: vergi hesaplama) Madde 3.5 ComputeTax.java’yı dizi kullanarak yeniden yazınız. Her bir bildirim türü için altı farklı vergi oranı bulunur. Her oran vergilendirilebilir gelirin belirli miktarına uygulanır.

For example, from the taxable income of $400,000 for a single filer, $8,350 is taxed at 10%, (33,950 - 8,350) at 15%, (82,250 - 33,950) at 25%, (171,550 - 82,550) at 28%, (372,550 - 82,250) at 33%, and (400,000 - 372,950) at 36%. The six rates are the same for all filing statuses, which can be represented in the following array:

Örneğin vergilendirilebilir gelir 400 000$ ve mükellef bekar olsun; $8,350 için vergi oranı 10%, (33,950 - 8,350) için vergi oranı %15, (82,250 - 33,950) için vergi oranı %25, (171,550 - 82,550) için vergi oranı %28, (372,550 - 82,250) için vergi oranı %33 ve (400,000 - 372,950) için vergi oranı %36. Her bildirim türü için vergi oranları aynıdır ve bu oranlar aşağıdaki dizide verilmiştir.

double[] rates = {0.10, 0.15, 0.25, 0.28, 0.33, 0.35};

The brackets for each rate for all the filing statuses can be represented in a two dimensional array as follows:

Her bildirim türü için vergi oranına göre beyan edilen miktarlar aşağıdaki iki boyutlu dizide verilmiştir.

int[][] brackets = {

{8350, 33950, 82250, 171550, 372950}, // Single filer // Bekar

{16700, 67900, 137050, 20885, 372950}, // Married jointly

// -or qualifying widow(er) // Eşler birlikte

{8350, 33950, 68525, 104425, 186475}, // Married separately // Eşler ayrı ayrı

{11950, 45500, 117450, 190200, 372950} // Head of household  // Aile reisi

};

Suppose the taxable income is $400,000 for single filers. The tax can be computed as follows:

Bekar bir mükellefin vergilendirilebilir gelirinin 400 000$ olduğunu varsayalım. Ödenecek vergi aşağıdaki şekilde hesaplanabilir.

tax = brackets[0][0] * rates[0] +

(brackets[0][1] – brackets[0][0]) * rates[1] +

(brackets[0][2] – brackets[0][1]) * rates[2] +

(brackets[0][3] – brackets[0][2]) * rates[3] +

(brackets[0][4] – brackets[0][3]) * rates[4] +

(400000 – brackets[0][4]) * rates[5]

vergi = vergiDilimleri[0][0] * oranlar[0] +

(vergiDilimleri[0][1] – brackets[0][0]) * oranlar[1] +

(vergiDilimleri[0][2] – brackets[0][1]) * oranlar[2] +

(vergiDilimleri[0][3] – brackets[0][2]) * oranlar[3] +

(vergiDilimleri[0][4] – brackets[0][3]) * oranlar[4] +

(400000 – vergiDilimleri[0][4]) * oranlar[5]

*8.13 (Locate the largest element) Write the following method that returns the location of the largest element in a two-dimensional array.

(En büyük elemanın yeri) İki boyutlu bir dizinin en büyük elemanın indeksini geri döndüren aşağıdaki bildirime sahip bir metot yazınız.

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

The return value is a one-dimensional array that contains two elements. These two elements indicate the row and column indices of the largest element in the two-dimensional array. 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 iki elemanı olan tek boyutlu bir dizidir. Bu iki eleman, iki boyutlu dizinin en büyük elemanın satır ve sütun indekslerini belirtir. 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:

                   Dizinin satir ve sutun 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 elemanin indeksleri (1, 2)

**8.14 (Explore matrix) Write a program that prompts the user to enter the length of a square matrix, randomly fills in 0s and 1s into the matrix, prints the matrix, and finds the rows, columns, and diagonals with all 0s or 1s. Here is a sample run of the program:

(Matris oluşturma) Kullanıcıdan kare bir matrisin uzunluğunu alan, matrise rastgele 0 ve 1 değerleri ekleyip matrisi gösteren ve tüm satır, sütun ya da diyagonali aynı (0 ya da 1) elemanlardan oluşanların indeksini gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

 

                   Matrisin boyutunu giriniz: 4

                   0111

                   0000

                   0100

                   1111

                   1. siradaki tum 0’lar

                   3. siradaki tum 1’ler

                   Hicbir sutunda ayni sayi yok

                   Buyuk capraz hatta ayni sayi yok

                   Kucuk capraz hatta ayni sayi yok

*8.15 (Geometry: same line?) Programming Exercise 6.39 gives a method for testing whether three points are on the same line.

(Geometri: aynı doğru mu?) Programlama Soruları 6.39’da üç noktanın aynı doğru üzerinde olup olmadığını test eden bir metot bulunmaktadır.

Write the following method to test whether all the points in the array points are on the same line.

points dizisindeki noktaların tümünün aynı doğru üzerinde olup olmadığını test eden aşağıdaki bildirime sahip bir metot yazınız.

public static boolean sameLine(double[][] points)

Write a program that prompts the user to enter five points and displays whether they are on the same line. Here are sample runs:

Kullanıcıdan beş nokta girmesini isteyen ve bu noktaların aynı doğru üzerinde olup olmadığını gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

                   Bes nokta giriniz: 3.4  2  6.5  9.5  2.3  2.3  5.5  5  -5  4

                   Bes nokta ayni dogru ustunde degildir

                   Bes nokta giriniz: 1  1  2  2  3  3  4  4  5  5

                   Bes nokta ayni dogru ustundedir

*8.16 (Sort two-dimensional array) Write a method to sort a two-dimensional array using the following header:

(İki boyutlu dizinin sıralanması) Aşağıdaki bildirime sahip iki boyutlu diziyi sıralayan bir metot yazınız:

public static void sort(int m[][])

The method performs a primary sort on rows and a secondary sort on columns. For example, the following array

Metot sıralamayı ilk olarak satırlar arasında, ardından sütunlar arasında yapacaktır. Örneğin; aşağıdaki dizi;

{{4, 2},{1, 7},{4, 5},{1, 2},{1, 1},{4, 1}}

will be sorted to

şu şeklinde sıralanacaktır

{{1, 1},{1, 2},{1, 7},{4, 1},{4, 2},{4, 5}}.

***8.17 (Financial tsunami) Banks lend money to each other. In tough economic times, if a bank goes bankrupt, it may not be able to pay back the loan. A bank’s total assets are its current balance plus its loans to other banks. The diagram in Figure 8.8 shows five banks. The banks’ current balances are 25, 125, 175, 75, and 181 million dollars, respectively. The directed edge from node 1 to node 2 indicates that bank 1 lends 40 million dollars to bank 2.

(Finansal tsunami) Bankalar birbirlerine borç para verirler. Ekonomik kriz durumunda batan bankalar borçlarını geri ödeyemeyebilirler. Bir bankanın toplam varlığı güncel bakiyesi ile diğer bankalara verdiği borçların toplamıdır. Şekil 8.8’deki şema beş bankayı gösterir. Bu bankaların güncel bakiyeleri sırasıyla  25, 125, 175, 75, ve 181 milyon dolardır. 1. düğümden 2. düğüme giden ok, 1. bankanın 2. bankaya 40 milyon dolar borç verdiğini gösterir.

     Şekil 8.8       Bankalar birbirine borç verir.  

If a bank’s total assets are under a certain limit, the bank is unsafe. The money it borrowed cannot be returned to the lender, and the lender cannot count the loan in its total assets. Consequently, the lender may also be unsafe, if its total assets are under the limit. Write a program to find all the unsafe banks. Your program reads the input as follows. It first reads two integers n and limit, where n indicates the number of banks and limit is the minimum total assets for keeping a bank safe. It then reads n lines that describe the information for n banks with IDs from 0 to n-1.

Eğer bir bankanın toplam varlığı belli limitin altındaysa bu banka risk altında olarak değerlendirilir. Bu bankaya verilen borç geri ödenmeyebilir; bu nedenle borç veren banka bunu toplam varlıklarına ekleyemez. Bu sebeple, borç veren bankanın da toplam varlıkları limit altında kalırsa bu banka da risk altında olarak değerlendirilir. Tüm risk altında olan bankaları bulan bir program yazınız. Programınız girdiyi aşağıdaki biçimde okusun. Öncelikle int türden n ve limit değerlerini okuyacak. n banka sayısını, limit ise bankanın risk altında olmayacağı en az varlık miktarını gösterir. Banka numarası 0’dan n-1’e kadar olacak şekilde; banka bilgilerini içeren n satırı okuyacak.

The first number in the line is the bank’s balance, the second number indicates the number of banks that borrowed money from the bank, and the rest are pairs of two numbers. Each pair describes a borrower. The first number in the pair is the borrower’s ID and the second is the amount borrowed. For example, the input for the five banks in Figure 8.8 is as follows (note that the limit is 201):

Satırdaki ilk sayı bankanın bakiyesi, ikinci sayı borç para verdiği banka sayısı ve diğerleri sayı çiftleri olarak devam eder. Her bir sayı çifti borç para alan bankayı gösterir. Bu sayı çiftlerinde bulan ilk sayı borç alan bankanın numarası, ikinci sayı borç aldığı miktarı gösterir. Örneğin; beş bankaya ait girdileri aşağıda bulabilirsiniz. (limit değeri 201’dir.)

5 201

25 2 1 100.5 4 320.5

125 2 2 40 3 85

175 2 0 125 3 75

75 1 0 125

181 1 2 125

The total assets of bank 3 are (75 + 125), which is under 201, so bank 3 is unsafe. After bank 3 becomes unsafe, the total assets of bank 1 fall below (125 + 40). Thus, bank 1 is also unsafe. The output of the program should be

3 numaralı bankanın toplam varlıkları (75 + 125) limit değer olan 201’in altında olduğu için bu banka riskli bankadır. 3 numaralı banka risk altında olduğu için, 1 numaralı bankanın da toplam varlıkları limitin altına düşer (125 + 40). Bu durumda 1 numaralı banka da risk altındadır. Program çıktısı şu şekilde olmalıdır.

Unsafe banks are 3 1

Risk altıa olan bankalar : 3, 1

(Hint: Use a two-dimensional array borrowers to represent loans. borrowers[i][j] indicates the loan that bank i loans to bank j. Once bank j becomes unsafe, borrowers[i][j] should be set to 0.)

(İpucu: Borç miktarını saklamak için iki boyutlu borrowers isimli diziyi kullanınız. borrowers[i][j] dizisi i bankasının j bankasına verdiği borcu göstersin.  j bankası risk altında olursa, borrowers[i][j]’ye 0 değeri atansın.)

*8.18 (Shuffle rows) Write a method that shuffles the rows in a two-dimensional int array using the following header:

(Satırları karıştır) İki boyutlu (int) bir dizide satırları karıştıran aşağıdaki bildirime sahip bir metot yazınız.

public static void shuffle(int[][] m)

Write a test program that shuffles the following matrix:

Aşağıdaki matrisi karıştıracak bir test programı yazınız:

int[][] m = {{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};

**8.19 (Pattern recognition: four consecutive equal numbers) Write the following method that tests whether a two-dimensional array has four consecutive numbers of the same value, either horizontally, vertically, or diagonally.

 (Desen tanıma: ardışık aynı dört sayı) İki boyutlu bir dizide aynı değere sahip ardışık dört sayıyı, satır, sütun ve çapraz olarak kontrol eden aşağıdaki bildirime sahip bir metot yazınız.

public static boolean isConsecutiveFour(int[][] values)

Write a test program that prompts the user to enter the number of rows and columns of a two-dimensional array and then the values in the array and displays true if the array contains four consecutive numbers with the same value. Otherwise, display false. Here are some examples of the true cases:

Kullanıcıdan iki boyutlu dizinin satır, sütun sayısını ve değerleri alan, eğer bu dizide ardışık aynı dört sayı varsa ekrana true yazan bir test programı yazınız. Aksi takdirde ekranda false gösterilecek. Aşağıda örnekleri inceleyiniz:

***8.20 (Game: connect four) Connect four is a two-player board game in which the players alternately drop colored disks into a seven-column, six-row vertically suspended grid, as shown below.

 (Oyun: dörtleme)Dörtleme iki kişi ile oynanır. Oyuncular birbirinden farklı renklerde diskleri 7 sütun ve 6 sıradan oluşan bir boşluklu tahta üzerinde, aşağıda gösterildiği gibi yukarıdan bırakırlar.

The objective of the game is to connect four same-colored disks in a row, a column, or a diagonal before your opponent can do likewise. The program prompts two players to drop a red or yellow disk alternately. In the preceding figure, the red disk is shown in a dark color and the yellow in a light color. Whenever a disk is dropped, the program redisplays the board on the console and determines the status of the game (win, draw, or continue). Here is a sample run:

Oyunun amacı aynı renkte olan 4 diski satır, sütun ya da çapraz olarak rakibinden önce yan yana getirmektir. Program sırasıyla iki oyuncudan; biri sarı(Y), diğeri kırmızı(R) olmak üzere bir disk koymalarını isteyecek. Aşağıdaki görselde kırmızı disk daha koyu, sarı disk daha açık renkte gösterilmiştir. Oyuncu oynadıktan sonra program tablonun durumunu gösterecek ve oyunun durumuna karar verecek. (Kazandınız, berabere kaldınız, devam edin) Örnek akışı inceleyiniz:

                   

                    0 - 6 sutunlarindan birine kirmizi bir disk koyun: 0

                   

                    0 - 6 sutunlarindan birine sari bir disk koyun: 3

                 

                   0 - 6 sutunlarindan birine sari bir disk koyun: 6

                 

                 

                  Sari diskli oyuncu kazandi.

     

*8.21 (Central city) Given a set of cities, the central city is the city that has the shortest total distance to all other cities. Write a program that prompts the user to enter the number of the cities and the locations of the cities (coordinates), and finds the central city and its total distance to all other cities.

(Merkez şehir) Verilen şehirler arasında, diğer şehirlere mesafelerin toplamı en küçük olan şehir, merkez şehirdir. Kullanıcıdan şehir sayını ve şehirlerin konumlarını (koordinat) alan, merkez şehri ve onun diğer şehirlere olan toplam mesafesini gösteren bir program yazınız.

                   Sehir sayisini giriniz: 5

                   Sehirlerin koordinatlarini giriniz:

                   2.5  5  5.1  3  1  9  5.4  54  5.5  2.1

                   Merkez sehir (2.5  5.0) koordinatlarindadir.

                   Diger sehirlere olan toplam mesafesi 60.81´dir.                  

*8.22 (Even number of 1s) Write a program that generates a 6-by-6 two-dimensional matrix filled with 0s and 1s, displays the matrix, and checks if every row and every column have an even number of 1s.

(Çift sayıda 1) 6x6 büyüklüğünde iki boyutlu,  0 ve 1 değerlerinden oluşan bir matris oluşturup matrisin her satır ve sütununda çift sayıda 1 olup olmadığını kontrol eden bir program yazınız.

*8.23 (Game: find the flipped cell) Suppose you are given a 6-by-6 matrix filled with 0s and 1s. All rows and all columns have an even number of 1s. Let the user flip one cell (i.e., flip from 1 to 0 or from 0 to 1) and write a program to find which cell was flipped. Your program should prompt the user to enter a 6-by-6 array with 0s and 1s and find the first row r and first column c where the even number of the 1s property is violated (i.e., the number of 1s is not even). The flipped cell is at (r, c). Here is a sample run:

(Oyun: tersine çevrilen elemanı bul) 6x6 büyüklüğünde iki boyutlu 0 ve 1 değerlerinden oluşan bir matris olsun. Her satır ve sütunda çift sayıda 1 değeri olsun. Kullanıcı bir elemanı tersine çevirsin (1’i 0, 0’ı 1 yapsın). Tersine çevrilen elemanı bulan bir program yazınız. Kullanıcıdan 6x6 büyüklüğünde 0 ve 1’den oluşan bir matris alan ve çift sayıda 1 kuralının bozulduğu ilk satır (r) ve ilk sütunu (c)  bulan bir program yazınız. Tersine çevrilmiş eleman (r, c)’dir. Örnek akışı inceleyiniz:

                  6x6 boyutunda bir matrisi satir satir yaziniz:

                  1  1  1  0  1  1

                  1  1  1  1  0  0

                  0  1  0  1  1  1

                  1  1  1  1  1  1

                  0  1  1  1  1  0

                  1  0  0  0  0  1

                  Tersine cevrilmis eleman (0, 1)´dedir.

*8.24 (Check Sudoku solution) Listing 8.4 checks whether a solution is valid by checking whether every number is valid in the board. Rewrite the program by checking whether every row, every column, and every small box has the numbers 1 to 9.

(Sudoku çözümü doğru mu?) Madde 8.4 girilen rakamların geçerli olup olmadığını kontrol ediyordu. Bu programı, her bir satır, sütun ve kutucukta olan sayıların 1’den 9’a kadar olup olmadığını kontrol edecek şekilde yeniden yazınız.

*8.25 (Markov matrix) An n * n matrix is called a positive Markov matrix if each element is positive and the sum of the elements in each column is 1. Write the following method to check whether a matrix is a Markov matrix.

(Markov matrisi) Her bir elemanı pozitif ve sütunlarındaki değerlerin toplamı 1 olan , n * n matrise pozitif Markov matrisi denir. Bir matrisin, Markov matrisi olup olmadığını kontrol eden aşağıdaki bildirime sahip bir metot yazınız.

public static boolean isMarkovMatrix(double[][] m)

Write a test program that prompts the user to enter a 3 * 3 matrix of double values and tests whether it is a Markov matrix. Here are sample runs:

Kullanıcıdan 3*3 boyutunda bir matrisin elemanlarını alan ve bunun Markov matrisi olup olmadığını kontrol eden bir program yazınız. Programın örnek akışını inceleyiniz:

                    3x3 boyutunda bir matrisi satir satir yaziniz:

                    0.15  0.875  0.375

                    0.55  0.005  0.225

                    0.30  0.12  0.4

                    Bu Markov matrisi

                    3x3 boyutunda bir matrisi satir satir yaziniz:

                    0.95  -0.875  0.375

                    0.65  0.005  0.225

                    0.30  0.22  -0.4

                    Bu Markov matrisi degil

*8.26 (Row sorting) Implement the following method to sort the rows in a two dimensional array. A new array is returned and the original array is intact.

(Satır sıralama) İki boyutlu bir dizinin satır elemanlarını sıralayan aşağıdaki bildirime sahip bir metot yazınız. Ana dizi değişmeden kalacak, metot yeni diziyi geri döndürecek.

public static double[][] sortRows(double[][] m)

Write a test program that prompts the user to enter a 3 * 3 matrix of double values and displays a new row-sorted matrix. Here is a sample run:

Kullanıcıdan 3*3 boyutunda bir matrisin elemanlarını alan ve satırları sıralanmış diziyi gösteren bir program yazınız. Örnek akışı inceleyiniz:

                    3x3 boyutunda bir matrisi satir satir yaziniz:

                    0.15  0.875  0.375

                    0.55  0.005  0.225

                    0.30  0.12  0.4

                    Satiri siralanmis dizi

                    0.15  0.375  0.875

                    0.005  0.225  0.55

                    0.12  0.30  0.4

*8.27 (Column sorting) Implement the following method to sort the columns in a two dimensional array.  A new array is returned and the original array is intact.

(Sütun sıralama) İki boyutlu bir dizinin sütun elemanlarını sıralayan aşağıdaki bildirime sahip bir metot yazınız.  Ana dizi değişmeden kalacak, metot yeni diziyi geri döndürecek.

public static double[][] sortColumns(double[][] m)

Write a test program that prompts the user to enter a 3 * 3 matrix of double values and displays a new column-sorted matrix. Here is a sample run:

Kullanıcıdan 3*3 boyutunda bir matrisin elemanlarını alan ve sütunları sıralanmış diziyi gösteren bir program yazınız. Örnek akışı inceleyiniz:

                    3x3 boyutunda bir matrisi satir satir yaziniz:

                    0.15  0.875  0.375

                    0.55  0.005  0.225

                    0.30  0.12  0.4

                    Sutunu siralanmis dizi

                    0.15  0.0050  0.225

                    0.3  0.12  0.375

                    0.55  0.875  0.4

8.28 (Strictly identical arrays) The two-dimensional arrays m1 and m2 are strictly identical if their corresponding elements are equal. Write a method that returns true if m1 and m2 are strictly identical, using the following header:

(Birebir eşit diziler) İki boyutlu m1 ve m2 dizilerinin karşılıklı elemanları birebir eşitse bu dizilere birebir eşit diziler denir. m1 ve m2 dizileri birbirine birebir eşitse true dönen aşağıdaki bildirime sahip bir metot yazınız.

public static boolean equals(int[][] m1, int[][] m2)

Write a test program that prompts the user to enter two 3 * 3 arrays of integers and displays whether the two are strictly identical. Here are the sample runs.

Kullanıcıdan 3*3 boyutunda iki matrisin de elemanlarını alan ve bu dizilerin birebir eşit olup olmadığını gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

                   Liste1’i giriniz:   51  22  25  6  1  4  24  54  6

                   Liste2’yi giriniz: 51  22  25  6  1  4  24  54  6

                   Iki dizi birebir aynidir

                   Liste1’i giriniz:   51  25  22  6  1  4  24  54  6

                   Liste2’yi giriniz: 51  22  25  6  1  4  24  54  6

                   Iki dizi birebir ayni degildir

8.29 (Identical arrays) The two-dimensional arrays m1 and m2 are identical if they have the same contents. Write a method that returns true if m1 and m2 are identical, using the following header:

(Eşit diziler) İki boyutlu m1 ve m2 dizilerinin elemanları aynı ise bu dizilere eşit diziler denir. m1 ve m2 dizileri birbirine eşitse true dönen aşağıdaki bildirime sahip bir metot yazınız.

public static boolean equals(int[][] m1, int[][] m2)

Write a test program that prompts the user to enter two 3 * 3 arrays of integers and displays whether the two are identical. Here are the sample runs.

Kullanıcıdan 3*3 boyutunda iki matrisin de elemanlarını alan ve bu dizilerin eşit olup olmadığını gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

                   Liste1’i giriniz:   51  25  22  6  1  4  24  54  6

                   Liste2’yi giriniz: 51  22  25  6  1  4  24  54  6

                   Iki dizi birbirine esittir

                   Liste1’i giriniz:   51   5   22  6  1  4  24  54  6

                   Liste2’yi giriniz: 51  22  25  6  1  4  24  54  6

                   Iki dizi birebir ayni degildir

*8.30 (Algebra: solve linear equations) Write a method that solves the following 2 * 2 system of linear equations:

(Cebir: doğrusal denklem çözümü) 2 bilinmeyenli doğrusal denklem sistemini çözen bir metot yazınız.

The method header is

Metot bildirimi:

public static double[] linearEquation(double[][] a, double[] b)

The method returns null if a00a11 - a01a10 is 0. Write a test program that prompts the user to enter a00, a01, a10, a11, b0, and b1, and displays the result. If a00a11 - a01a10 is 0, report that “The equation has no solution.” A sample run is similar to Programming Exercise 3.3.

Eğer a00a11 - a01a10ın değeri 0 ise metodun geri dönüş değeri null’dır. Kullanıcıdan a00, a01, a10, a11, b0, ve b1 değerlerini alan ve sonucu gösteren bir test programı yazınız. a00a11 - a01a10  değeri 0 ise “Denklemin çözümü yoktur” mesajını gösteriniz. Örnek akış için Programlama Soruları 3.3’e bakınız.

*8.31 (Geometry: intersecting point) Write a method that returns the intersecting point of two lines. The intersecting point of the two lines can be found by using the formula shown in Programming Exercise 3.25. Assume that (x1, y1) and (x2, y2) are the two points on line 1 and (x3, y3) and (x4, y4) are on line 2.

(Geometri: Kesişim noktaları) İki doğrunun kesişim noktalarını döndüren bir metot yazınız. İki doğrunun kesişim noktalarının hesaplanması için kullanılacak formülü Programlama Soruları 3.25’te bulabilirsiniz. Birinci doğrunun iki noktasının (x1, y1) ve (x2, y2) ve ikinci doğrunun iki noktasının (x3, y3) ve (x4, y4) olduğunu varsayalım.

The method header is:

Metot bildirimi:

public static double[] getIntersectingPoint(double[][] points)

The points are stored in a 4-by-2 two-dimensional array points with (points[0][0], points[0][1]) for (x1, y1). The method returns the intersecting point or null if the two lines are parallel. Write a program that prompts the user to enter four points and displays the intersecting point. See Programming Exercise 3.25 for a sample run.

Nokta verileri iki boyutlu 4*2’lik bir dizide (x1, y1) için (points[0][0], points[0][1]) şeklinde saklanabilir. Metot, eğer iki doğru kesişiyorsa kesişim noktasını, paralel ise null geri dönecektir. Kullanıcıdan dört nokta alan ve kesişim noktasını gösteren bir program yazınız. Örnek akış için Programlama Soruları 3.25’e bakınız.

*8.32 (Geometry: area of a triangle) Write a method that returns the area of a triangle using the following header:

 (Geometri: Üçgenin alanı) Üçgenin alanını geri döndüren aşağıdaki bildirime sahip bir metot yazınız.

public static double getTriangleArea(double[][] points)

The points are stored in a 3-by-2 two-dimensional array points with points[0][0] and points[0][1] for (x1, y1). The triangle area can be computed using the formula in Programming Exercise 2.19. The method returns 0 if the three points are on the same line. Write a program that prompts the user to enter three points of a triangle and displays the triangle's area. Here is a sample run of the program:

Nokta verileri iki boyutlu 3*2’lik bir dizide (x1, y1) için (points[0][0], points[0][1]) şeklinde saklanabilir. Üçgenin alanının hesaplanması için kullanılacak formülü Programlama Soruları 2.19’da bulabilirsiniz.  Eğer üç nokta aynı doğru üzerindeyse metodun geri dönüş değeri 0 olacaktır. Kullanıcıdan üçgenin köşe noktalarını alan ve alanını gösteren bir program yazınız. Programın örnek akışını inceleyiniz:

                     x1, y1, x2, y2, x3, y3’u giriniz: 2.5  2  5  -1.0  4.0  2.0

                    Ucgenin alani 2.25´tir.

                    x1, y1, x2, y2, x3, y3’u giriniz: 2  2  4.5  4.5  6  6

                   Uc nokta ayni dogru uzerindedir.

*8.33 (Geometry: polygon subareas) A convex 4-vertex polygon is divided into four triangles, as shown in Figure 8.9.

Write a program that prompts the user to enter the coordinates of four vertices and displays the areas of the four triangles in increasing order. Here is a sample run:

(Geometri: çokgenin alt alanları) 4 köşeli dışbükey çokgen Şekil 8.9’da gösterildiği gibi dört üçgene bölünebilir.

Kullanıcıdan dört köşe noktasının koordinatlarını alan ve dört üçgenin alanlarını artan sıra ile gösteren bir program yazınız. Örnek akışı inceleyiniz:

                     x1, y1, x2, y2, x3, y3, x4, y4’u giriniz:

                        - 2.5  2  4  4  3  -2  -2  -3.5

                    Ucgenlerin alanlari  6.17   7.96   8.08   10.42  

FIGURE 8.9 A 4-vertex polygon is defined by four vertices.

ŞEKİL 8.9 4 köşeli çokgen.

*8.34 (Geometry: rightmost lowest point) In computational geometry, often you need to find the rightmost lowest point in a set of points. Write the following method that returns the rightmost lowest point in a set of points.

(Geometri: En sağdaki en küçük nokta) Analitik geometride genellikle, birçok nokta içerisinden en sağdaki en küçük noktayı bulmak gerekir. Birçok nokta içerisinden en sağdaki en küçük noktayı bulan aşağıda bildirimi verilen metodu yazınız.

public static double[] getRightmostLowestPoint(double[][] points)

Write a test program that prompts the user to enter the coordinates of six points and displays the rightmost lowest point. Here is a sample run:

Kullanıcıdan 6 noktanın koordinatlarını alan ve en sağdaki en küçük noktayı gösteren bir program yazınız. Örnek akışı inceleyiniz:

                    6 nokta giriniz: 1.5  2.5  -3  4.5  5.6  -7  6.5  -7  8  1  10  2.5

                    En sagdaki en kucuk nokta (6.5,  -7.0)

**8.35 (Largest block) Given a square matrix with the elements 0 or 1, write a program to find a maximum square submatrix whose elements are all 1s. Your program should prompt the user to enter the number of rows in the matrix. The program then displays the location of the first element in the maximum square submatrix and the number of the rows in the submatrix. Here is a sample run:

(En büyük blok) 0 ve 1 değerlerinden oluşan bir kare matrisin, 1 değerinden oluşan en büyük kare alt matrisini bulan bir program yazınız. Kullanıcı matrisin satır sayısını girecek. Program bulduğu kare alt matrisin ilk elemanın konumunu ve satır sayısını ekranda gösterecek. Örnek akışı inceleyiniz:

                      Matristeki satir sayisini giriniz:  5

                      Matrisi satir satir giriniz:  

                      1 0 1 0 1

                      1 1 1 0 1

                      1 0 1 1 1

                      1 0 1 1 1

                      1 0 1 1 1  

                      En buyuk kare alt matrisi (2, 2)´dedir

Your program should implement and use the following method to find the maximum square submatrix:

En büyük kare alt matrisi bulmak için aşağıda bildirimi verilen metodu yazınız ve programınızda kullanınız.

public static int[] findLargestBlock(int[][] m)

The return value is an array that consists of three values. The first two values are the row and column indices for the first element in the submatrix, and the third value is the number of the rows in the submatrix.

Metodun geri dönüş değeri olan dizinin  üç elemanı olacak. İlk iki elman alt matristeki satır ve sütun indeksi, üçüncü eleman ise alt matristeki satır sayısını tutacaktır.

**8.36 (Latin square) A Latin square is an n-by-n array filled with n different Latin letters, each occurring exactly once in each row and once in each column. Write a program that prompts the user to enter the number n and the array of characters, as shown in the sample output, and checks if the input array is a Latin square. The characters are the first n characters starting from A.

(Harf karesi) Harf karesi; n x n büyüklüğünde, n farklı harfin her bir satır ve sütunda aynı harften bulunmayacak şekilde dizilmesiyle oluşan matrise denir. Kullanıcıdan harf sayısını (n) ve satır satır harfleri alan bir program yazınız. Program girdinin harf karesi olup olmadığını kontrol edip sonucu göstersin. Karakterler A harfinden başlar.

                n sayisini giriniz: 4

                Bosluklarla ayrilmis 4 satir harf giriniz:

                A  B  C  D

                B  A  D  C  

                C  D  B  A

                D  C  A  B

                Girilen dizi harf karesidir

                n sayisini giriniz: 3

                Bosluklarla ayrilmis 3 satir harf giriniz:

                A  F  D  

                Hatali giris: Harfler A ve C arasi olmalidir.

**8.37 (Guess the capitals) Write a program that repeatedly prompts the user to enter a capital for a state. Upon receiving the user input, the program reports whether the answer is correct. Assume that 50 states and their capitals are stored in a two dimensional array, as shown in Figure 8.10. The program prompts the user to answer all states’ capitals and displays the total correct count. The user’s answer is not case-sensitive.

(Başkenti tahmin et) Kullanıcıdan art arda bir eyaletin başkentini girmesini isteyen bir program yazınız. Kullanıcı giriş yaptıktan sonra program girilen cevabın doğru olup olmadığını göstersin. Şekil 8.10’da gösterildiği gibi 50 eyaletin ve başkentlerinin iki boyutlu bir dizide tutulduğunu varsayalım. Program kullanıcıya tüm eyaletlerin başkentlerini soracak ve sonunda toplam doğru sayısını gösterecek.  Kullanıcının cevabı büyük-küçük harf duyarlı olmayacak.

FIGURE 8.10 A two-dimensional array stores states and their capitals.

Here is a sample run:

ŞEKİL 8.10 Eyaletleri ve başkentleri saklayan iki boyutlu dizi

Örnek akışı inceleyiniz:

                   Alabama’nin baskenti neresidir? Montogomery

                   Dogru cevap Montgomery

                   Alaska’nin baskenti neresidir? Juneau

                   Cevabiniz dogru

                   Arizona’nin baskenti neresidir? . . .

                   . . .

                  Dogru cevap sayisi 35