*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:
3×4’luk bir matrısı sıra halinde giriniz:
1.5 2 3 4
5.5 6 7 8
9.5 1 3 1
0. sütündaki verilerin toplamı 16.5
1. sütündaki verilerin toplamı 9.0
2. sütündaki verilerin toplamı 13.0
3. sütündaki verilerin toplamı 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:
4×4’lük bir matrisi sıra halinde giriniz:
1 2 3 4.0
5 6.5 7 8
9 10 11 12
Ana çaprazdaki verilerin toplamı 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 + bij’dir. Ö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 toplamı aşağıdaki 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. cij’nin 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 sayısını yazınız: 8
8 noktayı giriniz: 0 0 1 1 -1 -1 2 2 -2 -2 -3 -3 -4 -4 5 5
Birbirine en yakın iki nokta (0.0, 0.0) ve (1.0, 1.0)
Birbirine en yakın iki nokta (0.0, 0.0) ve (-1.0, -1.0)
Birbirine en yakın iki nokta (1.0, 1.0) ve (2.0, 2.0)
Birbirine en yakın iki nokta (-1.0, -1.0) ve (-2.0, -2.0)
Birbirine en yakın iki nokta (-2.0, -2.0) ve (-3.0, -3.0)
Birbirine en yakın iki nokta (-3.0, -3.0) ve (-4.0, -4.0)
Birbirlerine uzakıikları 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:
*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
1010En büyük satır indeksi: 2
En büyük sütün 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 arası bir sayı 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 satır ve sütün sayısını giriniz: 3 4
Diziyi giriniz:
23.5 35 2 10
4.5 3 45 3.5
35 44 5.5 9.6
En büyük elemanın 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. sıradaki tüm 0’lar
3. sıradaki tüm 1’ler
Hiçbir sütünda aynı sayı yok
Büyük çapraz hatta aynı sayı yok
Küçük çapraz hatta aynı sayı 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:
Beş nokta giriniz: 3.4 2 6.5 9.5 2.3 2.3 5.5 5 -5 4
Beş nokta aynı doğru üstünde değildir
Beş nokta giriniz: 1 1 2 2 3 3 4 4 5 5
Beş nokta aynı doğru üstündedir
*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:
*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.
Şehir saısını giriniz: 5
Şehirlerin koordinatlarını giriniz:
2.5 5 5.1 3 1 9 5.4 54 5.5 2.1
Merkez şehir (2.5 5.0) koordinatlarındadır.
Diğer şehirlere 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) 6×6 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) 6×6 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 6×6 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:
6×6 boyutunda bir matrisi satır satır yazınız:
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:
3×3 boyutunda bir matrisi satır satır yazınız:
0.15 0.875 0.375
0.55 0.005 0.225
0.30 0.12 0.4
Bu Markov matrisi
3×3 boyutunda bir matrisi satır satır yazınız:
0.95 -0.875 0.375
0.65 0.005 0.225
0.30 0.22 -0.4
Bu Markov matrisi değil.
*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:
3×3 boyutunda bir matrisi satır satır yazınız:
0.15 0.875 0.375
0.55 0.005 0.225
0.30 0.12 0.4
Satırı sıralanmış 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:
3×3 boyutunda bir matrisi satır satır yazınız:
0.15 0.875 0.375
0.55 0.005 0.225
0.30 0.12 0.4
Satırı sıralanmış 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
İki dizi birebir aynıdır
Liste1’i giriniz: 51 25 22 6 1 4 24 54 6
Liste2’yi giriniz: 51 22 25 6 1 4 24 54 6
İki dizi birebir aynı değildir.
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
İki dizi birbirine eşittir.
Liste1’i giriniz: 51 5 22 6 1 4 24 54 6
Liste2’yi giriniz: 51 22 25 6 1 4 24 54 6
İki dizi birebir aynı değildir.
*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
Ücgenin alanı 2.25´tir.
x1, y1, x2, y2, x3, y3’u giriniz: 2 2 4.5 4.5 6 6
Üç nokta aynı doğru üzerindedir.
*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
Üçgenlerin alanları 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 sağdaki en küçük 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 satır sayısını giriniz: 5
Matrisi satır satır 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 büyük 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 sayısını giriniz: 4
Boşluklarla ayrılmis 4 satır harf giriniz:
A B C D
B A D C
C D B A
D C A B
Girilen dizi harf karesidir
n sayısını giriniz: 3
Boşluklarla ayrılmıs 3 satır harf giriniz:
A F D
Hatalı giris: Harfler A ve C arası olmalıdır.
**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’nın başkenti neresidir? Montogomery
Doğru cevap Montgomery
Alaska’nın başkenti neresidir? Juneau
Cevabınız doğru
Arizona’nın başkenti neresidir? . . .
. . .
Doğru cevap sayısı 35