PRAKTIKUM ALGORITMA & STRUKTUR DATA TIF - G
BAB NAMA
: :
1
Rafi Ananta Nugraha
NIM : 235150200111035
ASISTEN : RAKHA ALIF ATHALLAH
GRATIA YUDIKA MORADO SILALAHI TGL PRAKTIKUM
TGL PENGUMPULAN : :
Jumat, 8 Maret 2024 Kamis, 14 Maret 2024
1. Soal 3.9 Latihan
Terdapat array dengan data 30, 87, 90, 3, 1, 50, 23, 4, 25, 23, 40, 35, 47, 2, 33.
1. Buatlah Kodenya dalam bahasa Java.
2. Jalankan dan pastikan tidak ada errornya.
Kode
public class modulasd {
public static void main(String[] args) {
int [] rak = {30, 87, 90, 3, 1, 50, 23, 4, 25, 23, 40, 35, 47, 2, 33};
for (int i = 0; i < rak.length; i++) { System.out.print(rak[i]+" ");
} } }
Output
Penjelasan Kode
Dibuat array bertipe integer yang data didalamnya langsung diisikan didalam program sepeerti pada soal tanpa inputan user, lalu di tampilkan dengan looping untuk i dari 0 – 14(dari 0 sampai kurang dari Panjang array)
2. Soal 3.10
Berdasar latihan yang telah anda buat maka:
1. Urutkan data pada array tersebut.
2. Hitung rata-rata data tersebut.
3. Hitung nilai maksimal dan minimalnya.
4. Tampilkan data yang bilangan ganjil saja dan prima saja.
5. Dari data tersebut, buatlah array 2 dimensi dengan format 3 baris dan 5 kolom.
(ini buat per nomer 1 method aja) Kode
public class ModulASD {
public static void main(String[] args) {
int [] data = {30, 87, 90, 3, 1, 50, 23, 4, 25, 23, 40, 35, 47, 2, 33};
Array arr = new Array();
System.out.print("sebelum : ");
for (int i = 0; i < data.length; i++) { System.out.print(data[i]+" ");}
arr.sort(data);
System.out.println();
System.out.print("setelah : ");
for (int i = 0; i < data.length ; i++) { System.out.print(data[i]+ " ");
}
double rerata = arr.ratarata(data);
System.out.println();
System.out.printf("%s%.2f","Rata-rata : ", rerata);
System.out.println();
int []maxmin=arr.maxmin(data);
System.out.println("Bilangan terbesar : "+
maxmin[0]);
System.out.println("Bilangan terkecil : "+
maxmin[1]);
System.out.print("Bilangan ganjil : ");
for (int ganjil : data){
if(arr.Ganjil(ganjil)) {
System.out.print(ganjil + " ");
}
}
System.out.println();
System.out.print("Bilangan prima : ");
for (int prima : data) { if(arr.Prima(prima)){
System.out.print(prima + " ");
} }
System.out.println();
System.out.println("Array 2D dengan 3 baris 5 kolom : ");
int[][]result=arr.arrayBaru2D(data);
for ( int i = 0; i < 3; i++) { for (int j = 0; j <5 ; j++) {
System.out.printf("%-5d",result[i][j]);
}
System.out.println();
} } }
class Array {
public void sort(int[] rak) { int a = rak.length;
for (int i = 0; i <a-1 ; i++) {
for (int j = 0; j < a-i-1; j++) { if (rak[j]>rak[j+1]){
int ganti = rak[j];
rak[j]=rak[j+1];
rak[j+1]= ganti;
} } } }
public double ratarata(int[] rak) { double total = 0;
for (int i = 0; i < rak.length; i++) { total += rak[i];
}
return total / rak.length;
}
public int[] maxmin(int[] rak) {
int terbesar = rak[rak.length - 1];
int terkecil = rak[0];
int[] hasil = {terbesar, terkecil};
return hasil;
}
public static boolean Ganjil(int x) { for (int i = 0; i < x; i++) { if (x% 2 != 0) {
return true;
} }
return false;
}
public static boolean Prima(int y){
if(y<=1){
return false;
}
for (int i = 2; i*i<=y ; i++) { if(y%i==0){
return false;
} }
return true;
}
public static int[][] arrayBaru2D(int[] rak){
int [][]array2D = new int [3][5];
int index=0;
for (int i = 0; i <3 ; i++) { for (int j = 0; j <5 ; j++) { array2D[i][j]=rak[index];
index++;
} }
return array2D;
} }
Output
Penjelasan Kode
Dibuat array bertipe integer yang data didalamnya langsung diisikan didalam program sepeerti pada soal tanpa inputan user,
Didalam class array memiliki beberapa method anatara lain sort, ratarata,maxmin, ganjil, prima dan array 2D baru
• Didalam method sort disini digunakan algoritma bubble sort menggunakan looping, jadi jika data setelahnya lebih besar maka posisi akan ditukar.
• Didalam method rata rata, data dari index 0 sampai index terakhir akan dijumlahkan lalu dibagi dengan Panjang array
• Didalam method max min akan mengembalikan nilai didalam index terakhir untuk nilai terbesar karena sudah di sorting sebelumnya, dan sebaliknya untuk nilai min
• Untuk method ganjil akan memerika apakah data ganjil atau tidak dengan modulus 2 jika tidak bersisa 0 maka akan mengembalikan true(ganjil)
• Untuk method prima juga akan diperiksa dengan cara looping dan membagi data (y) dengan 2 sampai deengan akar y. dan jika angka diantara 2-akar y dapat membagi maka akan direturn false (bukan prima). Looping dilakukan dari 2- akar y dikakeranakan factor terbesar dari (Y) adalah akar y itu sendiri maka dilakukan pengecekan sampai akar y untuk meringankan penghitungan
• Dalam method array2d akan dibuat array2d baru yang nantinya akan dimasukkan data satu persatu dari array awal dengan nested loop.
lalu di tampilkan dengan looping untuk i dari 0 - 14
3. Soal 4.10 Tugas 1
Modifikasilah program Latihan di atas sehingga SLL dapat menampung sembarang object. Untuk itu anda perlu membuat class baru bernama Mahasiswa dengan data dan method sebagai berikut :
Mahasiswa
String nim String nama double ipk
Constructor Mahasiswa double getIpk
String getNim String getNama
Kode
package modulasd;
class Node {
private Mahasiswa data;
private Node next;
public Node(Mahasiswa data) { this.data = data;
this.next = null;
}
public Mahasiswa getData() { return data;
}
public Node getNext() { return next;
}
public void setNext(Node next) { this.next = next;
} }
class SLL {
private Node head, tail;
int size = 0;
void inisialisasi() { head = null;
tail = null;
}
boolean isEmpty() { return (size == 0);
}
int size() { return size;
}
void addFirst(Node input) { if (isEmpty()) {
head = input;
tail = input;
} else {
input.setNext(head);
head = input;
}
size++;
}
void addLast(Node input) { if (isEmpty()) {
head = input;
tail = input;
} else {
tail.setNext(input);
tail = input;
}
size++;
}
public static void main(String[] args) { SLL linkedlist = new SLL();
Mahasiswa m1 = new Mahasiswa("235150200111035",
"Rafi", 3.8);
Mahasiswa m2 = new Mahasiswa("235150210202000",
"huda", 2.8);
Mahasiswa m3 = new Mahasiswa("231481884999288",
"rizky", 5.0);
Node node1 = new Node(m1);
Node node2 = new Node(m2);
Node node3 = new Node(m3);
linkedlist.addFirst(node1);
linkedlist.addLast(node2);
linkedlist.addLast(node3);
Node current = linkedlist.head;
while (current != null) {
Mahasiswa dataMahasiswa = current.getData();
System.out.println("NIM: " + dataMahasiswa.getNim() + " Nama: " + dataMahasiswa.getNama() + " IPK: " + dataMahasiswa.getIpk());
current = current.getNext();
} } }
class Mahasiswa {
private String nim;
private String nama;
private double ipk;
public Mahasiswa(String nim, String nama, double ipk) { this.nim=nim;
this.nama=nama;
this.ipk=ipk;
}
public double getIpk(){
return this.ipk;
}
public String getNim(){
return this.nim;
}
public String getNama(){
return this.nama;
} }
Output
Penjelasan Kode
Program bertujuan untuk membuat singlelinkedlist dengan node yang dapat menerima data berupa nama mahasiswa, Nim dan ipk. Dengan algoritma yang sama dengan singlelinkedlist, dalam program ini hanya terletak perbedaan pada node saja.
Jadi didalam program dibuat class mahasiswa.
• didalam class mahasiswa terdapat variable nim nama dan ipk, kemudian terdapat constructor untuk class mahasiswa dengan parameter nim nama dan ipk, dan getter.
• Dalam pembuatan node terdapat constructor node dengan parameter Mahasiswa data(Mahasiswa merujuk pada class mahasiswa). Selain hal tersebut pembuatan node sama seperti linkedlist pada umumnya.
• Dalam class singlelinkedist terdapat beberapa method seperti addlast addfisrt dan isempty
• Didalam main Membuat 3 objek baru dengan menggunakan konstruktor yang menerima tiga parameter: NIM, nama, dan IPK. Informasi dari setiap objek
Mahasiswa dicetak diambil menggunakan metode getNim(), getNama(), dan getIpk().
Mendeklarasi melalui setiap node dalam linked list SLL, dimulai dari kepala hingga node terakhir, dan mencetak informasi mahasiswa yang disimpan dalam setiap node.
Setiap iterasi mengambil objek Mahasiswa dari node saat ini dan mencetak NIM, nama, dan IPK menggunakan metode getNim(), getNama(), dan getIpk().