Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Greggy Gianini Firmansyah / TI-1F / 1741720088 Algoritma & Struktur Data

1) Pangkat
Source Code

Pangkat

package minggu3;

public class Pangkat


{
public int x, n;

int pangkatBruteforce(int angka, int pangkat)


{
int hasil = 1;

for (int i = 1; i <= pangkat; i++)


{
hasil *= angka;
}
return hasil;
}

int pangkatDivideConquer(int angka, int pangkat)


{
if (pangkat == 1)
{
return angka;
}
return angka *= pangkatDivideConquer(angka, pangkat-1);
}
}
PangkatMain

package minggu3;
import java.util.Scanner;

public class PangkatMain


{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("Masukkan nilai Angka: ");
int angka = sc.nextInt();

System.out.print("Masukkan nilai Pangkat: ");


int pangkat = sc.nextInt();

Pangkat obj = new Pangkat();

obj.x = angka;
obj.n = pangkat;

System.out.println("Brute Force \t: " +


obj.pangkatBruteforce(obj.x, obj.n));
System.out.println("Divide Conquer \t: " +
obj.pangkatDivideConquer(obj.x, obj.n));
}
}
Hasil
2) Matriks
Source Code

Matriks

package minggu3;

public class Matriks


{
int[][] elemenMatriks = new int[4][4];
}

MatriksMain

package minggu3;
import java.util.Scanner;

public class MatriksMain


{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
Matriks matriks = new Matriks();

for (int i = 0; i < matriks.elemenMatriks.length; i++)


{
for (int j = 0; j < matriks.elemenMatriks[i].length; j++)
{
System.out.print("Matriks [" + i +"][" + j +"] : ");
matriks.elemenMatriks[i][j] = sc.nextInt();
}

System.out.println("");
}

for (int i = 0; i < matriks.elemenMatriks.length; i++)


{
for (int j = 0; j < matriks.elemenMatriks[i].length; j++)
{
System.out.print(matriks.elemenMatriks[i][j]+ " ");
}
System.out.println();
}
}
}
Hasil
3) MatriksKali
Source Code

Matriks

package minggu3;

public class Matriks


{
int[][] elemenMatriks = new int[4][4];
}

KaliMatriksBF

package minggu3;

public class KaliMatriksBF


{
Matriks matriks1 = new Matriks();
Matriks matriks2 = new Matriks();

public KaliMatriksBF(Matriks matrik1, Matriks matrik2)


{
for (int i = 0; i < matrik1.elemenMatriks.length; i++)
{
for (int j = 0; j < matrik1.elemenMatriks[i].length; j++)
{
matriks1.elemenMatriks[i][j] = matrik1.elemenMatriks[i][j];
matriks2.elemenMatriks[i][j] = matrik2.elemenMatriks[i][j];
}
}
}

public void BruteForce(Matriks hasil)


{
for (int i = 0; i < matriks1.elemenMatriks.length; i++)
{
for (int j = 0; j < matriks2.elemenMatriks[i].length; j++)
{
int x = 0;

for (int k = 0; k < matriks2.elemenMatriks.length; k++)


{
x+= matriks1.elemenMatriks[i][k] *
matriks2.elemenMatriks[k][j];
}
hasil.elemenMatriks[i][j] = x;
}
}
tampilBF(hasil);
}
public void tampilBF(Matriks hasil)
{
for (int i = 0; i < hasil.elemenMatriks.length; i++)
{
for (int j = 0; j < hasil.elemenMatriks[i].length; j++)
{
System.out.print(hasil.elemenMatriks[i][j] + " ");
}
System.out.println();
}
}
}
KaliMatriksDC

package minggu3;

public class KaliMatriksDC


{
Matriks matriks1 = new Matriks();
Matriks matriks2 = new Matriks();

public KaliMatriksDC(Matriks matrik1, Matriks matrik2)


{
for (int i = 0; i < matrik1.elemenMatriks.length; i++)
{
for (int j = 0; j < matrik1.elemenMatriks[i].length; j++)
{
matriks1.elemenMatriks[i][j] = matrik1.elemenMatriks[i][j];
matriks2.elemenMatriks[i][j] = matrik2.elemenMatriks[i][j];
}
}
}

void DivideConquer(Matriks hasil, int tambah, int size, int baris, int
kolom, int kali)
{
if (kali == size)
{
kali = 0;
kolom++;

if (kolom == size)
{
kolom = 0;
baris++;

if (baris == size)
{
tampilDC(hasil);
return;
}
}
}

tambah = sum(hasil,tambah,size, baris, kolom, kali,

matriks1.elemenMatriks[baris][kali]*matriks2.elemenMatriks[kali][kolom]);

DivideConquer(hasil, tambah, size, baris, kolom, kali+1);


}

int sum(Matriks hasil, int tambah,int size,int baris,int kolom, int


kali, int hasilKali)
{
if (kali < size)
{
tambah = tambah + hasilKali;
if (kali == size - 1)
{
hasil.elemenMatriks[baris][kolom]= tambah;
tambah = 0;
}
}
return tambah;
}

public void tampilDC(Matriks hasil)


{
for (int i = 0; i < hasil.elemenMatriks.length; i++)
{
for (int j = 0; j < hasil.elemenMatriks[i].length; j++)
{
System.out.print(hasil.elemenMatriks[i][j] + " ");
}
System.out.println();
}
}
}
KaliMatriksMain

package minggu3;
import java.util.Scanner;

public class KaliMatriksMain


{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
Matriks matriks1 = new Matriks();
Matriks matriks2 = new Matriks();

System.out.println("Matriks 1");
for (int i = 0; i < matriks1.elemenMatriks.length; i++)
{
for (int j = 0; j < matriks1.elemenMatriks[i].length; j++)
{
System.out.print("Matriks [" + i +"][" + j +"] : ");
matriks1.elemenMatriks[i][j] = sc.nextInt();
}
}

System.out.println("Matriks 2");
for (int i = 0; i < matriks2.elemenMatriks.length; i++)
{
for (int j = 0; j < matriks2.elemenMatriks[i].length; j++)
{
System.out.print("Matriks [" + i +"][" + j +"] : ");
matriks2.elemenMatriks[i][j] = sc.nextInt();
}
}

System.out.println("Matriks 1");
tampilMatriks(matriks1);

System.out.println("Matriks 2");
tampilMatriks(matriks2);

Matriks hasil = new Matriks();


System.out.println("Hasil Matriks BF: ");
KaliMatriksBF matriksBF = new KaliMatriksBF(matriks1, matriks2);
matriksBF.BruteForce(hasil);

System.out.println("Hasil Matriks DC: ");


KaliMatriksDC matriksDC = new KaliMatriksDC(matriks1, matriks2);
matriksDC.DivideConquer(hasil,0, hasil.elemenMatriks.length, 0, 0,
0);
}

static void tampilMatriks(Matriks matrik)


{
for (int i = 0; i < matrik.elemenMatriks.length; i++)
{
for (int j = 0; j < matrik.elemenMatriks[i].length; j++)
{
System.out.print(matrik.elemenMatriks[i][j]+ " ");
}
System.out.println();
}
}
}

Hasil
4) Perkalian 2 Angka, masing-masing 4 digit
Source Code

Kali

package minggu3;

public class Kali


{
int temp;
int AngkaSatuan;
int AngkaPuluhan;

public void Kalil(long[] x, long[] y, int n)


{
int hasilBaris = n;
int hasilKolom = n*n;
int[][] hasil = new int[hasilBaris][hasilKolom];
int isiBaris = 0;
int isiKolom = hasilKolom-1;
int[] simpan = new int[n];

for (int i = n-1; i >= 0; i--)


{
AngkaPuluhan = 0;
for (int j = n-1; j >= 0; j--)
{
temp = (int)(x[j] * y[i]);
temp = temp + AngkaPuluhan;
AngkaSatuan = temp % 10;
AngkaPuluhan = temp / 10;

if (j == 0 && String.valueOf(temp).length() == 2)
{
hasil[isiBaris][isiKolom] = AngkaSatuan;
hasil[isiBaris][isiKolom-1] = AngkaPuluhan;
}
else
{
hasil[isiBaris][isiKolom] = AngkaSatuan;
}

isiKolom--;
}

isiBaris++;
isiKolom = hasilKolom-1;
}

int[][] newHasil = hilangNull(simpan, hasil, n);


int[][] finalHasil = tambahNol(newHasil, newHasil[0].length);
int[] hasilAkhir = hitungHasil(finalHasil);
tampilHasil(hasilAkhir);
}
int[] hitungHasil(int[][] finalHasil)
{
int AngkaPuluh = 0;
int AngkaSatu;
int simpan;
int[] hasilAkhir = new int[finalHasil[0].length];

for (int i = finalHasil[0].length-1; i >= 0; i--)


{
simpan = finalHasil[0][i] + finalHasil[1][i] + finalHasil[2][i]
+ finalHasil[3][i];
simpan = simpan + AngkaPuluh;
AngkaSatu = simpan % 10;
AngkaPuluh = simpan / 10;

hasilAkhir[i] = AngkaSatu;
}
return hasilAkhir;
}

int[][] tambahNol(int[][] newHasil, int batas)


{
if (batas == 4)
{
int[][] finalHasil =
{
{0, 0, 0, newHasil[0][0], newHasil[0][1], newHasil[0][2],
newHasil[0][3]},
{0, 0, newHasil[1][0], newHasil[1][1], newHasil[1][2],
newHasil[1][3], 0},
{0, newHasil[2][0], newHasil[2][1], newHasil[2][2],
newHasil[2][3], 0, 0},
{newHasil[3][0], newHasil[3][1], newHasil[3][2],
newHasil[3][3], 0, 0, 0},
};

return finalHasil;
}
else if (batas == 5)
{
int[][] finalHasil =
{
{0, 0, 0, newHasil[0][0], newHasil[0][1], newHasil[0][2],
newHasil[0][3], newHasil[0][4]},
{0, 0, newHasil[1][0], newHasil[1][1], newHasil[1][2],
newHasil[1][3], newHasil[1][4], 0},
{0, newHasil[2][0], newHasil[2][1], newHasil[2][2],
newHasil[2][3], newHasil[2][4], 0, 0},
{newHasil[3][0], newHasil[3][1], newHasil[3][2],
newHasil[3][3], newHasil[3][4], 0, 0, 0},
};

return finalHasil;
}
return newHasil;
}

int[][] hilangNull(int[] simpan, int[][] hasil, int digit)


{
boolean stop;
int isiBaris = 0;
int isiKolom = 0;
int count;
for (int i = 0; i < hasil.length; i++)
{
count = 0;
stop = false;

for (int j = 0; j < hasil[i].length; j++)


{
if (hasil[i][j] != 0)
{
stop = true;
}
if (stop)
{
count++;
}
}
simpan[i] = count;
}

int maxSimpan = maxCount(simpan);


int[][] newHasil = new int[digit][maxSimpan];
for (int i = 0; i < hasil.length; i++)
{
if (isiBaris == newHasil.length)
{
break;
}
stop = false;

for (int j = 0; j < hasil[i].length; j++)


{
if (isiKolom == maxSimpan)
{
break;
}
if (j >= (digit*digit)- maxSimpan)
{
stop = true;
}
if (stop)
{
newHasil[isiBaris][isiKolom] = hasil[i][j];
isiKolom++;
}
}
if (stop)
{
isiKolom = 0;
isiBaris++;
}
}
return newHasil;
}
int maxCount(int[] simpan)
{
int max = simpan[0];
for (int i = 1; i < simpan.length; i++)
{
if (max < simpan[i])
{
max = simpan[i];
}
}
return max;
}

void tampilHasil(int[] hasil)


{
System.out.print("Hasil: ");
for (int i = 0; i < hasil.length; i++)
{
if (i == 0 && hasil[0] == 0)
{
continue;
}
System.out.print(hasil[i]);
}
System.out.println();
}
}

KaliMain

package minggu3;
import java.util.Scanner;

public class KaliMain


{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int digit = 4;

long[] x = new long[digit];


long[] y = new long[digit];

for (int i = 0; i < digit; i++)


{
System.out.print("Masukkan nilai x digit ke-"+(i+1)+": ");
x[i] = sc.nextLong();
}
System.out.println();

for (int i = 0; i < digit; i++)


{
System.out.print("Masukkan nilai y digit ke-"+(i+1)+": ");
y[i] = sc.nextLong();
}

Kali kali = new Kali();


kali.Kalil(x, y, digit);
}
}

Hasil

You might also like