[go: up one dir, main page]

0% found this document useful (0 votes)
54 views16 pages

Tugas (Jobsheet 3)

The document contains source code for several algorithms: 1) Exponentiation using brute force and divide-and-conquer approaches 2) Matrix operations including initializing a matrix and printing it 3) Matrix multiplication using brute force and divide-and-conquer approaches 4) Multiplication of two 4-digit numbers The source code defines classes and methods to implement the algorithms.

Uploaded by

Krisbell
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
54 views16 pages

Tugas (Jobsheet 3)

The document contains source code for several algorithms: 1) Exponentiation using brute force and divide-and-conquer approaches 2) Matrix operations including initializing a matrix and printing it 3) Matrix multiplication using brute force and divide-and-conquer approaches 4) Multiplication of two 4-digit numbers The source code defines classes and methods to implement the algorithms.

Uploaded by

Krisbell
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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