-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMatrixMultiplication.java
More file actions
124 lines (115 loc) · 5.88 KB
/
Copy pathMatrixMultiplication.java
File metadata and controls
124 lines (115 loc) · 5.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// Gerekli Java kütüphanelerinin import edilmesi
import java.io.*; // Giriş/çıkış işlemleri için gerekli sınıfları içeren kütüphane
import java.util.Random; // Rastgele sayı üretmek için gerekli sınıfı içeren kütüphane
// Ana sınıf: MatrixMultiplication
class MatrixMultiplication {
// Matris boyutları için sabitler
static final int SATIR1 = 4; // A matrisinin satır sayısı
static final int ORTAK = 1; // A matrisinin sütunu ile B matrisinin satır sayısı (Matris çarpım kuralı)
static final int SUTUN2 = 7; // B matrisinin sütun sayısı
// Matrislerin tanımlanması
static int[][] A = new int[SATIR1][ORTAK];
static int[][] B = new int[ORTAK][SUTUN2];
static int[][] C = new int[SATIR1][SUTUN2]; // Sonuç matrisi
static int satirSayisi = 0; // Thread sayısını belirlemek için kullanılan sayaç
// Ana metod: main
public static void main(String[] args) {
randomDosyayaYaz(); // Rastgele A ve B matrislerini oluşturup dosyaya yazma işlemini gerçekleştirir
dosyadanAktar(); // Dosyadan oluşturulan A ve B matrislerini okuma işlemini gerçekleştirir
// Threadi başlatma
Thread[] threadler = new Thread[SATIR1];
for (int i = 0; i < SATIR1; i++) {
threadler[i] = new Thread(new Carpim()); // Her bir satır için bir Thread oluşturur
threadler[i].start(); // Oluşturulan Threadi başlatır
}
// Threadlerin tamamlanmasını bekler
for (int i = 0; i < SATIR1; i++) {
try {
threadler[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// Sonuç matrisini ekrana yazdırma
for (int i = 0; i < SATIR1; i++) {
for (int j = 0; j < SUTUN2; j++) {
if (C[i][j] < 10)
System.out.print(C[i][j] + " ");
else if (C[i][j] < 100)
System.out.print(C[i][j] + " ");
else if (C[i][j] < 1000)
System.out.print(C[i][j] + " ");
else if (C[i][j] < 10000)
System.out.print(C[i][j] + " ");
else
System.out.print(C[i][j] + " ");
}
System.out.println();
}
}
// Thread Sınıfı: Carpim
static class Carpim implements Runnable {
@Override
public void run() {
long baslangic = System.currentTimeMillis(); // Thread'in çalışma süresinin başlangıç zamanını alır
int threadNo;
synchronized (MatrixMultiplication.class) {
threadNo = satirSayisi++; // Thread'in hangi satırda çalıştığını belirler
}
// Çarpma işlemini gerçekleştirir ve sonucu C matrisine kaydeder
for (int i = 0; i < SUTUN2; i++) {
for (int j = 0; j < ORTAK; j++) {
C[threadNo][i] += (A[threadNo][j] * B[j][i]);
}
}
long son = System.currentTimeMillis(); // Thread'in çalışma süresinin sonunu alır
double calismaZamani = (son - baslangic) / 1000.0; // Thread'in çalışma süresini hesaplar
System.out.printf("Çarpımın sonuç matrisinin %d. satırı %f saniyede hesaplandı!\n", threadNo + 1, calismaZamani); // Thread'in çalışma süresini ekrana yazdırır
}
}
// Rastgele Dosyaya Yazma Metodu: randomDosyayaYaz
static void randomDosyayaYaz() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("matrisler.txt"))) {
Random rand = new Random();
// A matrisini dosyaya yazma
for (int i = 0; i < SATIR1; i++) {
for (int j = 0; j < ORTAK; j++) {
int sayi = rand.nextInt(100);
writer.write(String.format("%03d", sayi)); // Rastgele oluşturulan A matrisini dosyaya yazar
}
}
// B matrisini dosyaya yazma
for (int i = 0; i < ORTAK; i++) {
for (int j = 0; j < SUTUN2; j++) {
int sayi = rand.nextInt(100);
writer.write(String.format("%03d", sayi)); // Rastgele oluşturulan B matrisini dosyaya yazar
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
// Dosyadan Okuma Metodu: dosyadanAktar
static void dosyadanAktar() {
try (BufferedReader reader = new BufferedReader(new FileReader("matrisler.txt"))) {
// A matrisini dosyadan okuma
for (int i = 0; i < SATIR1; i++) {
for (int j = 0; j < ORTAK; j++) {
char[] okuma = new char[3];
reader.read(okuma);
A[i][j] = Integer.parseInt(new String(okuma)); // Dosyadan oluşturulan A matrisini okur
}
}
// B matrisini dosyadan okuma
for (int i = 0; i < ORTAK; i++) {
for (int j = 0; j < SUTUN2; j++) {
char[] okuma = new char[3];
reader.read(okuma);
B[i][j] = Integer.parseInt(new String(okuma)); // Dosyadan oluşturulan B matrisini okur
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}