You are on page 1of 68

Fakultas

Ilmu Komputer Universitas Indonesia


Buku Rancangan Pengajaran
CSF1600200
DasarDasar Pemrograman
Semester I Tahun Ajar 2012/2013

Bab I Informasi Umum

Pengajar

L. Yohanes Stefanus
Denny
Samuel Louvan
Bayu Distiawan
Rakhmad Azhari
Zaki Rahman

Tujuan:

Matakuliah ini mengajarkan konsepkonsep dan teknikteknik dasar pemrograman
komputer, dalam konteks pengenalan Ilmu Komputer. Bahasa pemrograman yang
dipergunakan adalah bahasa Java.

Referensi utama (wajib dibaca):


Cay S. Horstmann. Big Java. 4th Edition. John Wiley & Sons, 2010.

Referensi tambahan:

John Lewis & William Loftus. Java Software Solutions:


Design. 6th Edition. AddisonWesley,
2009.

Prasyarat:

Matematika SMA.

Kredit:

6 SKS (butuh 18 jam per minggu)

Status:

Mata kuliah wajib Fasilkom

Jadwal kuliah:

Lihat di SIAK

Jadwal tutorial:
Kelas A,C,E setiap Senin mulai jam 16.00
Kelas B,D,F setiap Rabu mulai jam 16.00

Situs web:

Lihat dan enroll di SCeLE

Foundations of Program

Proses Belajar


Pembelajaran kuliah ini merupakan kombinasi dari beberapa metode:
Interaktif tatap muka
Interaktif tatap muka akan dilakukan melalui kombinasi kuliah interaktif dan
pemelajaran aktif melalui lembar kerja dan pemecahan problem.
Elearning self study (belajar mandiri)
Pada sesi eLearning, mahasiswa mempelajari bahan materi baik dari yang tersedia
maupun dari sumber lain. Mahasiswa perlu mencoba mengerjakan soal latihan untuk
menguji pemahamannya.
Tutorial
Sesi tutorial diberikan terkait dengan materi yang telah dibahas di kelas. Mahasiswa
akan diberikan latihan untuk memantapkan pemahaman yang sudah diperolehnya.
Diskusi online
Pada sesi diskusi, mahasiswa diharapkan menyampaikan pemahaman yang
dimilikinya untuk didiskusikan dan dikonfirmasikan dengan pemahaman mahasiswa
lainnya. Mahasiswa juga membagi pengalaman belajarnya khususnya pada bagian
materimateri pilihan yang sesuai dengan minat.
Tugas
Mahasiswa akan diberikan tugastugas yang memacu pola pikir untuk
menyelesaikan permasalahan. Tugastugas yang diberikan disesuaikan dengan
materi yang telah diperoleh dengan beban yang sesuai.

Bab II Tujuan Instruksional

Mata kuliah ini bertujuan untuk mengajarkan konsepkonsep dasar serta teknik untuk
membuat program komputer menggunakan paradigma berorientasi obyek pada bahasa
pemrograman Java.

Tujuan Pembelajaran

Menjelaskan sejarah bahasabahasa pemrograman serta evolusi dari bahasa mesin ke
bahasa tingkat tinggi.
Memahami dasardasar konsep dan konstruksi pemrograman.
Menjelaskan istilah Class dan Object, serta memahami paradigma berorientasi obyek.
Memiliki pengetahuan tentang teori perintah kendali seperti pemilihan, percabangan
serta pengulangan.
Mengorganisasikan program besar dengan baik melalui pembuatan metodemetode
baru, serta memanfaatkan metodemetode yang sudah ada pada class library.
Mengolah data dalam list atau tabel.
Merancang class yang dapat dimanfaatkan kembali untuk keperluan lain, dan
memahami dasardasar inheritance.
Memahami hubungan antar class dalam sebuah hirarki serta sifat polymorphism
sebuah object.
Membuat program yang tidak salah (errorfree) dengan penanganan pengecualian
(exception).
Memindahkan data pada alat penyimpanan sekunder, dan memahami perbedaan
antara berkas teks dan biner.
Merancang dan membangun antarmuka grafis (GUI).
Dapat memahami dan membuat dokumentasi program yang baik.

Diagram alur pokok bahasan


Keterangan
Pokok bahasan berwarna kuning cerah menandakan pokok bahasan yang harus
dikuasai terlebih dahulu, dilanjutkan ke pokok bahasan berwarna oranye, kemudian
beberapa pokok bahasan berwarna hijau dan ungu
Tidak semua pokok bahasan berwarna hijau dan ungu dibahas dalam perkuliahan ini
Balon berwarna biru muda menandakan ketersediaan bahan tutorial terkait pokok
bahasan yang bersesuaian

Bab III Rencana Pengajaran



Week Date
1

Sep 3,5,7

Sep
10,12,14

Sep
17,19,21

Sep
24,26,28

Topic
Introduction to
computers and
programming

Notes
Subtopic
What is programming?; The Anatomy
of a Computer; Introduction to the
Java programming language;
Compiling and Running a Java
Program; Errors; Algorithms
Introduction to
Objects, Classes, and Methods;
Objects and Classes Instance Variables; Local Variables;

Object references; Implicit
Parameters; Drawing simple shapes
Number Types; Number Systems;
Twos Complement Representation; Tugas 1
Fundamental Data
diumumkan
Constants; Arithmetic Operations and
di awal
Types
Mathematical Functions; Calling
minggu
Static Methods; Strings; Reading Input
The if statement; Comparing Values;

Decisions
Multiple Alternatives; Boolean
Expressions; Code Coverage

Iteration
Arrays and Array
Lists
Designing Classes

Oct 1,3,5

Recursion

Oct 8,10,12

Interfaces and
Polymorphism

while loops; for loops; Nested loops; Tugas 1


dikumpulkan
Application: Random Numbers; Using
di akhir
a Debugger, Unit Testing
minggu
Arrays; Array Lists; Wrappers and Tugas 2
Autoboxing; The Enhanced for Loop; diumumkan
di awal
Partially Filled Arrays; Array
Algorithms; TwoDimensional Arrays minggu
Discovering Classes; Cohesion and
Coupling; Immutable Objects;
Preconditions and Postconditions;
Static Methods; Static Variables;
Scope; Packages; Unit Tests

Thinking Recursively; Recursive

Methods; Permutations; Mutual
Recursions
Tugas 2
Interfaces; Polymorphism; Inner
Classes; Event, Event Sources, and dikumpulkan
di
Event Listeners; Buttons, Timer
pertengahan
Events, Mouse Events
minggu

Oct
15,17,19

Inheritance

UTS

Nov 5,7,9

Graphical User
Interfaces

Inheritance Hierarchies; Subclasses;


Overriding Methods; Inheritance and Tugas 3
diumumkan
Polymorphism; Object: The Cosmic di awal
Superclass; Using Inheritance to
minggu
Customize Frames
Tugas 3
dikumpulkan
di akhir
minggu

Processing Text Input; Text Areas; Tugas 4


Layout Management; Choices; Menus; diumumkan
di awal
The Swing API
minggu

10

Nov
12,14,19

Text Input; Reading and Writing Text


Files; Throwing Exceptions; Checked
Input/Output and
and Unchecked Exceptions; Catching
Exception Handling
Exceptions; The finally Clause;
Designing Exception Types

11

ObjectOriented
Design

Nov
21,23,26

12

Nov
28,30
Dec 3

13

Dec
5,7,10

The Software Lif Cycle; Discovering


Classes; Relationships Between
Classes; Case Studies

Tugas 4
dikumpulkan
Sorting and
Sorting; Selection Sort; Quick Sort;
di
Searching
Merge Sort; Searching; Binary Search pertengahan
minggu
Tugas 5
Introduction to Data
Linked Lists; Abstract Data Types;
diumumkan
Structures and
Stack and Queues; Generic Classes; di awal
Generic
minggu
Generic Types; Generic Methods
Programming

Readers, Writers, and Streams; Binary

Streams and Binary


Input and Output; Random Access;
I/O
Object Streams

14

Dec
12,14,17

Multithreading

Threads; Thread Life Cycle; Running


and Terminating Threads; Race
Conditions; Synchronization;
Deadlocks

15

Dec
19,21

Case Study and


Review

Case Study: Sorting Animation;


Course Review


Tugas 5
dikumpulkan
di akhir
minggu

Bab IV Evaluasi Pembelajaran

Orientasi belajar

Belajar yang dilaksanakan dalam perkuliahan ini akan dilakukan secara aktif dengan
menuntut peran serta mahasiswa dalam proses kegiatan belajar mengajar untuk penguasaan
dan pengembangan materi yang maksimal sesuai dengan minat bakat.

1. Tatap Muka
Perkuliahan interaktif atau tatap muka dilakukan di kelas secara langsung. Dalam
perkuliahan ini metode yang dilakukan antara lain:
a) Ceramah; dosen menjelaskan mengenai materi tertentu. Metode ini dapat
dikombinasikan dengan tanya jawab secara langsung. Perlu diingat, dosen tidak
menyampaikan keseluruhan materi kuliah. Mahasiswa harus juga membaca buku dan
materi terkait sebelum perkuliahan.
b) Diskusi kelompok; mahasiswa membahas topiktopik tertentu yang ada dalam materi.
Mahasiswa diharapkan dapat menyampaikan pemahamannya dan mendapat tanggapan
atau koreksi dari rekanrekan ataupun dosen.
c) Membahas lembar kerja; Mahasiswa diharapkan telah mempelajari materi yang telah
dipersiapkan sebelum pertemuan, dan mengerjakan lembar kerja untuk memberikan
pengalaman dan pemahaman terhadap materi.

2. Belajar Mandiri (BM)
Belajar mandiri atau selflearning dilakukan tidak secara langsung bertatap muka
melainkan dengan memanfaatkan SCeLE. Dengan SCeLE, pemelajaran akan melibatkan
kegiatankegiatan sebagai berikut:
a) Akses materi (A); mahasiswa dapat mengakses materi langsung yang telah disediakan
di SceLE maupun yang tersedia di buku.
b) Diskusi (D); mahasiswa dapat melakukan diskusi dalam bentuk aktifitas forum yang ada
di SCeLE.
c) Chat (C); mahasiswa dapat pula berkomunikasi dengan pengajar dan temanteman
sekelas dalam kurun waktu yang telah ditentukan.

Tugas
Seluruh bentuk tugas dikerjakan secara individu. Diskusi diperbolehkan dan sangat
disarankan dalam proses belajar, namun perlu diingat bahwa seluruh tugas adalah tugas
individu yang akan dinilai secara individu oleh karena itu hasil diskusi anda dengan teman
anda harus dapat anda tuliskan dengan kalimat anda sendiri. Bagianbagian yang sama
terkait diagram, rumus, potongan code, algoritma harus dinyatakan secara eksplisit
sumbernya atau teman diskusinya. Uraian kalimat (penjelasan) tidak boleh sama. Kesamaan

dalam jumlah kecil pun dapat dinyatakan sebagai plagiat. Harap lihat bagian Kejujuran
Akademis.

Media instruksional
1. Internet (I)
2. Presentasi Multimedia (M)
3. White board, infocus (Wbi)

Sumber pembelajaran
1. Buku teks
2. Lembar kerja


Minggu Soal

Bab V ContohContoh Quiz

Ada berapa iterasi dalam tiaptiap loop berikut ini? i adalah sebuah integer yang nilainya tidak
diubah di dalam loop
1. for(i=1;i<=10;i++)...
2. for(i=0;i<10;i++)...
3. for(i=10;i>0;i)...
4. for(i=10;i<=10;i++)...
5. for(i=10;i>=0;i++)...
6. for(i=10;i<=10;i=i+2)...
7. for(i=10;i<=10;i=i+3)...

Temukan kesalahan pada loop berikut dan berikan dua cara penyelesaiannya.

double[]values=newdouble[10];
for(inti=1;i<=10;i++)values[i]=i*i;

Bila C adalah kelas yang mengimplementasi interface I dan J, dan i dideklarasi sbb:
Ii=newC();

Pernyataan manakah di bawah ini yang akan memberikan pesan kesalahan?
1. Cc=(C)i;
2. Jj=(J)i;
3. i=(I)null;

12

Jelaskan keluaran dari kode berikut ini



LinkedList<String>staff=newLinkedList<String>();
staff.addFirst("Harry");
staff.addLast("Diana");
staff.addFirst("Tom");
System.out.println(staff.removeLast());
System.out.println(staff.removeFirst());
System.out.println(staff.removeLast());

Bab VI Evaluasi Pembelajaran

Bentuk / jenis instrumen



1. Tugas Pemrograman
Tugas pemrograman bersifat problem solving dimana setiap mahasiswa harus
mengerjakannya secara individual. Diskusi dan belajar bersama diperbolehkan, namun
harus diperhatikan bahwa tugas yang dikerjakan dan dikumpulkan adalah hasil
pengerjaan sendiri.
2. Tutorial di lab
Terdapat tutorial di lab maks. sebanyak 12 kali. Tutorial ini dibuat untuk membantu
pemahaman mahasiswa terkait suatu topik pembahasan. Mahasiswa dituntut untuk
memahami topik pembahasan di kelas sekaligus mencoba menuliskan apa yang sedang
dibahas ke dalam program.
3. Quiz
Quiz akan diberikan pada topiktopik tertentu di kelas.
4. UTS / UAS
Ujian (UTS dan UAS), dilakukan pada periode yang ditetapkan fakultas dengan bentuk ujian
dapat berupa essay atau isian singkat. Ujian akan dilakukan secara tutup buku. Soal pada tugas
tugas yang lain dapat saja menjadi bagian dari soal ujian dalam bentuk dan bobot yang
disesuaikan.

Komposisi penilaian sebagai berikut :

Tugas pemrograman (5)


Tutorial di lab (12)
Quiz


UTS


UAS


20% (Problem solving)
10% (Mengulang kuliah, ada jawaban diakhir)

10% (Quiz masingmasing kelas)

20%

40%

Bab VII Contoh Soal Ujian


Soal Pilihan Ganda ( 5 soal). Bacalah soal dengan teliti, pilihlah jawaban yang anda anggap benar.

1. [Nilai 2] Perhatikan kode di bawah ini

q=(p%4)!=0?(p%4):4;

Apakah nilai akhir dari q ketika p adalah 9?
A. 0
B. 4
C. 2
D. 1

2. [Nilai 2] Perhatikan kode di bawah ini:

StringletterGrade=;
if(grade<90)

if(grade>=80)

letterGrade=B;
else

letterGrade=A;
System.out.println(letterGrade);

Apakah nilai dari letterGrade ketika grade adalah 95?
A. null
B. "A"
C. "B"
D. ""

3. [Nilai 2] Manakah dari pilihan di bawah ini yang menggambarkan urutan yang tepat dari
jangkauan tipe data dari yang paling besar sampai yang paling kecil?
A. long, int, short, byte
B. long, short, int, byte
C. int,short,long,byte
D. int,byte,short,long

4. [Nilai 2] Apakah nilai desimal dari representasi twos complement berikut ?
11111111111111111111111111111100
A. 4
B. 5
C. 6
D. 7

5. [Nilai 2] Ada berapa banyak pemanggilan rekursif fib (tidak termasuk pemanggilan pertama)
yang dilakukan ketika kita menghitung fib(7)?

publicstaticlongfib(intn){

if(n<=2)

return1;

else

returnfib(n1)+fib(n2);
}

A. 12
B. 24
C. 30
D. 32

Soal Isian/Essay

1. Rekursif [Nilai 8]

Perhatikan program di bawah ini:

publicstaticintmystery(inta,intb){

if(b==0)return1;

return1;

if(b%2==0)returnmystery(a*a,b/2);

returnmystery(a*a,b/2)*a;
}


A. Apakah output dari mystery(4,0)?
B. Apakah output dari mystery(4,4) ?
C. Apakah output dari mystery(5,4)?
D. Secara umum, operasi apa yang dilakukan method mystery tersebut?

2. String [Nilai 20]

Lengkapi method convertDate di bawah ini.
Anda bisa memakai bantuan method yang terdapat pada class String
indexOf(charcc)
Mengembalikan indeks pertama dimana karakter cc muncul pada suatu tring.
substring(intidx)
Mengembalikan substring dari string, mulai dari index keidx sampai akhir.
substring(intidx1,idx2)
Mengembalikan substring dari string, mulai dari index keidx1 sampai idx21.
charAt(i)
Mengembalikan karakter di indeks kei dari suatu string.

packageUTS;
publicclassDateConverter{

privateString[]bulan={"Januari","Februari","Maret","April",
"Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"};

/*FormatmasukannumericDateadalahtanggal.bulan.tahun
*Contoh:1.12.2010
*MethodinimengembalikanStringhasilkonversinumericDate
*kebentukformatkeluaranyanglain.
*Contoh:
*1.12.2010akandiubahmenjadi1Desember2010
*24.1.2011akandiubahmenjadi24Januari2011
*Gunakanlaharraybulandiatasdalamproseskonversi
**/
publicStringconvertDate(StringnumericDate){

publicstaticvoidmain(String[]args){
DateConverterconverter=newDateConverter();
System.out.println(converter.convertDate("1.3.2010"));
}

}


3. Perhatikan program di bawah ini: [Nilai 12]

packageUTS;
publicclassTestLoop2{

publicstaticvoidprintStar(intN){

for(inti=N;i<=N;i++){

for(intj=N;j<=N;j++){

if(i*i+j*j<=N*N)

System.out.print("*");

else

System.out.print(".");

System.out.println();

}
}

A. Apakah output dari printStar(1)?
B. Apakah output dari printStar(3)?
C. Apakah output dari printStar(4)?

4. [Nilai 20] Anda diminta untuk membuat suatu class Matriks, yang nantinya akan digunakan oleh
programmer lain. Untuk itu anda harus mengimplementasikan class Matriks, konstruktor dan
methodmethod yang diperlukan. Ukuran matriks selalu sama antara baris dan kolomnya
(bujursangkar).

Konstruktor dan method yang harus diimplementasikan, spefisikasinya sebagai berikut:
Konstruktor Matriks(intsize)
Melakukan alokasi space untuk array 2 dimensi sebesar size x size.

Method cerminDiagonal()
Melakukan refleksi elemenelemen matriks terhadap sumbu diagonal.
Contoh:
1
2
3
1
4
4
5
6
2
5
7
8
9
3
6

7
8
9

10
14
18
22

11
15
19
23

12
16
20
24

13
17
21
25

10
11
12
13

14
15
16
17

18
19
20
21

Method jumlahTotalAngkaKiriDiagonal()
Mengembalikan jumlah akumulasi angka di sebelah kiri sumbu diagonal.
Contoh:
1
2
3
4
5
6
7
8
9
Jumlah: 19

10
11
14
15
18
19
22
23
Jumlah : 120

13
17
21
25

Method jumlahTotalAngkaKananDiagonal()
Mengembalikan jumlah akumulasi angka di sebelah kanan sumbu diagonal.
Contoh:
1
2
3
4
5
6
7
8
9
Jumlah: 11

10
11
14
15
18
19
22
23
Jumlah : 90.

12
16
20
24

12
16
20
24

13
17
21
25

Method printMatriks()
Mencetak elemenelemen matriks per baris.
Contoh:
1 2 3
4 5 6

22
23
24
25

7 8 9

Berdasarkan spesifikasi di atas, lengkapi kode program di bawah ini:
packageUTS;
publicclassMatriks{

/*Array2dimensiuntukmenyimpanbilangan*/

/*Perhatikanindeksdimulaidarinol*/

privateint[][]data;

/*Konstruktor,melakukanalokasispaceuntukarraydenganukuran

sizexsize

*/

publicMatriks(intsize){

//Lengkapidengankodeanda

publicvoidcerminDiagonal(){

//Lengkapidengankodeanda

publicintjumlahTotalAngkaKiriDiagonal(){

//Lengkapidengankodeanda

publicintjumlahTotalAngkaKananDiagonal(){

//Lengkapidengankodeanda

publicvoidprintMatriks(){

//Lengkapidengankodeanda

}
}


5. [Nilai 9] Perhatikan kode program di bawah ini. Untuk setiap statement System.out.println,
tuliskan output dari program.

publicclassUTS{

publicstaticvoidmain(String[]args){

charch='a';

System.out.println(ch+"ku"+(int)ch);

Stringstr="";

switch(ch){

case'a':str="nol";

case'b':str="satu";break;

case'c':str="dua";break;

System.out.println(str);

inthasil=1;

while(hasil<75){

hasil*=2;

System.out.println("Hasil="+hasil);

int[]ar={1,2,3};

ar[1]=7;

System.out.println(ar[1]+","+ar[2]);

UTSob=newUTS();

ob.xxx(ar);

System.out.println(ar[1]+","+ar[2]);

inta=111,b=333,x;

x=ob.abc(a,b);

System.out.println(x);

System.out.println("a:"+a);

System.out.println("b:"+b);

x=ob.abc(ar[1],ar[2]);

System.out.println(x);

System.out.println(ar[1]+","+ar[2]);

publicintabc(inta,intb){

a=5;b=8;

return(a<b)?(a+b):(a+b);

publicvoidxxx(int[]arr){

intk=arr.length1;

arr[k]=arr[k]+1;

}
}

6. [Nilai 10] Anda diminta untuk membuat program yang memproses suatu array. Berikut adalah
method yang harus anda implementasikan:
countBlock(int[]array)

Method ini mengembalikan banyaknya block dalam suatu array. Definisi block disini adalah
deretan angka yang secara berurutan nilainya sama.

Contoh:
Array {1,2,3,4,5,5,5,6,7,8,8,9,0}, countBlock akan mengembalikan nilai 2 karena ada dua
block yaitu block yang dibentuk oleh angka 5 dan 8.
Array {1,2,3,4,5,6,7,8} countBlock akan mengembalikan nilai 0 karena tidak ada block yang
terbentuk.


packageTugas3;
publicclassCountBlock{

/*Mengembalikanbanyaknyablockpadaarray*/

publicstaticintcountBlock(int[]arr){

}
}


7. Interface [Nilai 10]

Perhatikanlah program berikut:
packageUTS;

importjava.util.ArrayList;

interfaceSpeakable{

voidspeak();
}

classDogimplementsSpeakable{

privateStringname;

publicDog(Stringname){

this.name=name;

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

this.name=name;

publicvoidspeak(){

System.out.println("Gukguk");

}
}

classCatimplementsSpeakable{

privateStringname;

publicCat(Stringname){

this.name=name;

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

this.name=name;

publicvoidspeak(){

System.out.println("Meongmeong");

}
}

publicclassAnimalRunner{

publicstaticvoidmain(String[]args){

ArrayList<Speakable>arr=newArrayList<Speakable>();

arr.add(newDog("Doggie"));

arr.add(newCat("BlackMamba"));

arr.add(newDog("Lassie"));

arr.add(newCat("WhiteMamba"));

arr.set(2,newCat("RedMamba"));

arr.remove(1);

for(Speakables:arr){//LINEA

s.speak();

Catc=newCat("A");

Dogd=newDog("B");

Speakables;

c.speak();//LINEB

s=d;

s=c;

s.speak();//LINEC

s=d;

d.speak();//LINED

s.speak();//LINEE

Dogd2=(Dog)s;

d2.speak();//LINEF

}
}
A. Apa sajakah output dari loop di LINE A?
B. Ubahlah bagian kode pada LINE A, dengan sintaks for loop konvensional yang biasa kita pakai
(menggunakan indeks untuk mengakses elemen).
C. Apakah output pada:
LINE B
LINE C

LINE D
LINE E
LINE F

Bab VIII Contoh Kumpulan Soal Tutorial

Pada perkuliahan ini mahasiswa perlu meluangkan waktu dari awal kuliah untuk mempelajari buku
acuan yang ditetapkan. Hal ini sangat diperlukan karena pengajaran oleh dosen diruang kelas tidak
akan menjabarkan seluruh uraian secara rinci. Dosen akan membantu menerangkan bagianbagian
tertentu pada materi dan mengarahkan membelajaran, serta membantu mahasiswa dalam
memahami ataupun mengevaluasi (memberikan feedback) materi yang dipelajarinya. Pada proses
pemelajaran tersebut disediakan beberapa contoh rincian objective dan gambaran keterkaitan
materi tersebut dengan materi lain dalam perkuliahan serta contoh pertanyaan untuk menguji
pemahaman diri.

1. Tutorial Introduction to Object & Classes



Tujuan:
Mahasiswa memahami cara membuat kelas sederhana
Mahasiswa memahami cara menulis kalimat ke keluaran standar
Mahasiswa memahami kesalahankesalahan yang bisa muncul saat membuat
program

Tutorial Membuat Program dan Mengenali Kesalahan Pada Program


1. Menjalankan file Java
Cara paling sederhana sebagai awal mempelajari bahasa pemrograman adalah mencoba
menghasilkan sebuah kalimat pendek. Kalimat yang umum digunakan di dunia ilmu komputer
adalah Hello, World!. Mari kita coba menghasilkan kalimat ini dengan menggunakan Java.

a) Buka editor (SciTe, Notepad++, dll) yang ada di komputer Anda. Tuliskan kode sumber di
bawah ini:

//********************
//Hello.java
//MencetakkalimatHello,World!
//********************
publicclassHello{

//

//mainmethodprintthegreeting

//

publicstaticvoidmain(String[]args){

System.out.println(Hello,World!);

}
}


b) Simpan (save) kode sumber ini dengan nama Hello.java. Simpan di direktori C:\DDP, atau
direktori lain yang mudah diakses

c) Agar bisa dijalankan, kode sumber tersebut harus dicompile terlebih dahulu. Untuk
pengguna Windows atau DOS, buka aplikasi Command atau cmd. Misalkan file disimpan
pada direktori C:\DDP, maka dijalankan perintah berikut

C:
cdddp

Untuk pengguna sistem operasi Linux, bukalah terminal kemudian arahkan direktori
ketempat file disimpan (pada contoh ini, file disimpan di home directory dalam
subdirectory ddp) dengan menjalankan perintah berikut

cd~
cdddp

d) Compile file Hello.java dengan mengetikkan perintah berikut

javacHello.java

Jika berhasil, di direktori yang sama akan muncul file baru bernama Hello.class. File inilah
yang akan dijalankan

e) Jalankan program dengan mengetikkan perintah berikut
javaHello

Apakah yang terjadi? Jelaskan selengkap mungkin
2. Syntax error
Syntax error adalah kesalahan yang ada pada penulisan kode sumber. Saat terdapat syntax error,
compiler akan memberikan error message dan tidak menghasilkan file .class sehingga tidak bisa
dijalankan
Berikut beberapa contoh syntax error yang sangat sering terjadi:

a) Nama class berbeda dengan nama file. Ubah nama class menjadi Hola, sehingga baris
program berubah menjadi public class Hola. Save, kemudian compile ulang. Apa error
message yang muncul?

b) Tidak ada tanda kutipganda di akhir kalimat. Perbaiki kode sumber seperti semula, lalu
hapus tanda kutipganda di akhir kalimat Hello, World!. Save, kemudian compile ulang. Apa
error message yang muncul?

c) Tidak ada tanda kutipganda di awal kalimat. Perbaiki kode sumber seperti semula, lalu
hapus tanda kutipganda di awal kalimat Hello, World!. Save, kemudian compile ulang. Apa
error message yang muncul?

d) Tidak ada (;) di akhir perintah. Perbaiki kode sumber seperti semula. Kemudian hapus
tanda (;) di akhir baris baris perintah untuk mencetak kalimat. Save, kemudian compile
ulang. Apa error message yang muncul?

e) Jumlah ( { ) dan ( } ) yang tidak sesuai. Perbaiki kode sumber seperti semula. Kemudian
hapus tanda ( } ) di baris terakhir. Save, kemudian compile ulang. Apa error message yang
muncul?
3. Latihan Mengatasi Syntax Errors
File Problems.java adalah sebuah program Java sederhana yang memiliki beberapa syntax error.
Buat kode sumber Problems.java dan simpan seperti langkah untuk program Hello.java. Temukan
kesalahankesalahan yang ada kemudian perbaiki sehingga saat dicompile tidak ada lagi error
message yang muncul.
Beberapa hal yang perlu diingat:
Java bersifat case sensitive. Dengan demikian public, Public, dan PUBLIC dianggap sebagai
kode yang berbeda. Untuk melakukan perbaikan, coba cocokkan dengan program Hello.java.
Saat muncul banyak error message, perbaiki yang pertama terlebih dahulu, kemudian save
dan compile ulang. Seringkali error message berikutnya diakibatkan compiler yang tidak yakin
di mana letak error yang sebenarnya.
Baca error message dengan seksama, kemudian lihat nomor baris kode yang dituju. Pada
umumnya di baris itulah error terjadi.

//********************
//Problems.java
//Mencarikesalahandalammenuliskodeprogram
//********************
publicclassProblems{
publicstaticvoidMain(string[]args){
System.out.println(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!);

System.out.println(Kodeinimemilikibanyakkesalahan,);

System.0ut.println(tapi bila ini berhasil dicetak, maka anda


telahberhasilmemperbaikinya.)

System.out.println(***Hore!***);

Sistem.out.println(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!);

}
}

Tutorial Mengisi String (Tambahan)


Buatlah program yang menghasilkan keluaran seperti di bawah ini. Perhatikan, tulisan Nama pada
keluaran merupakan nama anda masingmasing dan nilainya terlebih dahulu sudah disimpan
pada sebuah variabel string.

Hello,Nama!
WelcometoJavaProgramming!
Programmingisfun!!!

Langkahlangkah membuat program adalah sbb:


1. Buat sebuah class dengan nama DDP11102B
2. Buat method main dalam class tersebut
3. Buat sebuah variabel bertipe String dengan nama nama dan variabel tersebut diberi nilai nama
anda masingmasing
4. Buat tampilan keluaran seperti yang diminta
System.out.println();
5. Buat tampilan keluaran untuk nama
System.out.println(Hello,+nama);

anda

dengan
dengan

menuliskan

perintah

menuliskan

perintah

6. Buat tampilan keluaran untuk menuliskan kalimat WelcometoJavaProgramming!


7. Buat tampilan keluaran untuk menuliskan kalimat Programmingisfun!!!
8. Buat tampilan keluaran akhir dengan menuliskan perintah
System.out.println();
9. Save file tersebut.

10. Compile dan jalankan untuk melihat hasilnya


2. Tutorial Tipe Data Dasar


Tujuan:
Mahasiswa memahami tipetipe data dasar dalam bahasa pemrograman Java

Mahasiswa mengetahui batasanbatasan dari tipe data numeric


Mahasiswa dapat menggunakan tipetipe data dasar dalam operasi matematika
sederhana

Tutorial Fungsi Ceil dan Floor


Pada tutorial ini anda diminta untuk membuat sebuah program yang menghitung fungsi ceiling dan
floor. Fungsi ceiling dari bilangan x adalah bilangan bulat terkecil yang lebih besar atau sama
dengan x (ceiling (3.45) = 4). Sedangkan fungsi floor dari bilangan x adalah bilangan bulat terbesar
yang lebih kecil atau sama dengan x (floor (3.45) = 3).

Pada tutorial ini anda diminta untuk mengimplementasikan operasi ceil dan floor. Anda dilarang
menggunakan method ceil dan floor yang sudah disediakan oleh Java dari class Math. Pada
tutorial ini anda juga diminta untuk mempelajari Java API yang dapat membantu anda
menggunakan kelas dan method yang sudah disediakan oleh Java.

Format Masukan
Masukan dibaca dari masukan standar berupa bilangan A. Bilangan A ini adalah bilangan yang akan
dihitung hasil ceiling dan floornya.

Format Keluaran

Keluaran berupa keluaran standar yang berisi hasil dari fungsi ceiling atau floor

Contoh Masukan
3.56


Contoh Keluaran
NilaiCeilingdari3.56adalah4
NilaiFloordari3.56adalah3

Langkahlangkah untuk membuat program tersebut adalah sebagai berikut:
1. Buat sebuah class dengan nama DDP11102A
2. Buatlah method main dalam class tersebut
3. Buatlah sebuah variabel bernama masukan dengan tipe data double untuk menampung
masukan bilangan desimal
4. Buatlah sebuah variabel objek class Scanner dengan nama reader untuk membaca masukan
dari masukan standar
Anda dapat membaca penjelasan beserta contoh penggunaan class Scanner dari Java API berikut
Pahamilah terlebih dahulu fungsionalitas yang diberikan oleh class Scanner sehingga anda dapat
menggunakannya sesuai kebutuhan dalam program anda
5. Bacalah masukan dari user dengan memanggil method nextDouble() yang dimiliki variabel
reader dan simpan hasilnya ke dalam variabel masukan
6. Buatlah dua variabel hasilCeil dan hasilFloor dengan tipe data int.

7. Untuk menghitung operasi ceil lakukanlah konversi masukan ke dalam tipe data integer dan
simpan ke dalam variabel hasilCeil. Kemudian tambahkan nilai 1 kepada hasilCeil.
8. Untuk menghitung operasi floor lakukanlah konversi masukan ke dalam tipe data integer dan
simpan ke dalam variabel hasilFloor.
9. Cetaklah hasil perhitungan fungsi ceiling dan floor ke dalam layar sesuai dengan format pada
contoh keluaran di atas

Note: Untuk selanjutnya, bila anda ingin melakukan operasi ceil dan floor, anda dapat menggunakan
method static ceil dan floor dari class Math. Anda dapat melihat dokumentasi class Math pada
Java API berikut dan silakan anda memperbanyak latihan menggunakan methodmethod yang
sudah disediakan oleh class Math tersebut.

Tutorial Memformat Bilangan dengan Menampilkan 3 Angka di Belakang


Koma (Tambahan)
Pada tutorial ini anda diminta untuk melakukan formatting terhadap sebuah masukan yang berupa
huruf maupun angka. Untuk masukan angka, anda diminta untuk menampilan 3 angka dibelakang
koma. Dalam tutorial ini anda dilarang untuk menggunakan method printf.

Format Masukan
Masukan dibaca dari masukan standar berupa bilangan A. Bilangan A ini adalah bilangan desimal
yang akan ditampilkan hanya sampai 3 angka di belakang koma.

Format Keluaran

Keluaran berupa keluaran standar yang berupa bilangan A dengan 3 angka di belakang koma.

Contoh Masukan
3.56326262


Contoh Keluaran
3.563

Langkahlangkah untuk membuat program tersebut adalah sebagai berikut:
1. Buatlah class dengan nama DDP11002B
2. Buatlah method main dalam class tersebut
3. Buatlah variabel bernama masukan dan keluaran dengan tipe data double untuk menyimpan
masukan bilangan desimal. Buatlah juga sebuah variabel bernama hasilFormat dengan tipe
data int untuk menyimpan bilangan bulat
4. Buatlah sebuah variabel objek class Scanner dengan nama reader untuk membaca masukan dari
masukan standar
Bila anda ingin melihat dokumentasi Java API class Scanner ikutilah link yang telah diberikan
pada tutorial sebelumnya

5. Baca masukan dari user dengan memanggil method nextDouble() yang dimiliki variabel
reader dan simpan hasilnya ke dalam variabel masukan
6. Selanjutnya, kalikan masukan dengan 1000 dan simpan ke dalam variabel hasilFormat.
Perhatian, untuk menyimpan tipe data double ke dalam variabel dengan tipe data int perlu
dilakukan casting. Casting yang dilakukan adalah sebagai berikut :
hasilFormat = (int) masukan;
7. Bagi hasilFormat dengan 1000.0 dan simpan ke dalam variabel keluaran
8. Tampilkan nilai keluaran ke layar

3. Tutorial Perkenalan GUI


Tujuan:
Mahasiswa memahami komponen dasar graphical user interface seperti Rectangle
dan JFrame
Mahasiswa memahami proses pembuatan objek dari suatu kelas untuk digunakan di
kelas lain

Tutorial Menggambar Bendera Merah Putih Pada Frame


Dalam bahasa pemrograman Java terdapat kelaskelas yang sudah disediakan bagi kita untuk
membuat komponenkomponen yang selanjutnya disebut graphical user interface (GUI).
Beberapa contoh komponen adalah bentuk persegi, lingkaran, elips, tombol, tabel, frame dsb.
Pada tutorial kali ini kita akan mencoba menggunakan komponenkomponen seperti
Rectangle, Color, Graphics2D, JComponent dan JFrame untuk menggambar bendera negara
kita.
Membuat Objek Rectangle
Untuk menggambar bendera, kita membutuhkan objek dari kelas Rectangle yang mewakili
bentuk persegi panjang dari bendera tersebut. Sebuah objek Rectangle akan membentuk
area dalam ruang koordinat dimulai dari titik kiri teratas (x, y) dengan lebar dan tinggi
tertentu (definisi dari Java API kelas Rectangle).
Ketika kita ingin membuat objek Rectangle, kita dapat langsung memberikan spesifikasi
koordinat awal dimana Rectangle tersebut akan digambar sekaligus dengan nilai lebar dan
tingginya. Salah satu constructor dari kelas Rectangle adalah sbb (diambil dari Java API
kelas Rectangle):

Rectangle(int x, int y, int width, int height)


dimana x dan y adalah koordinat x, y awal Rectangle tersebut akan digambar, dan width
dan height masingmasing menyatakan lebar dan tinggi dari Rectangle tersebut.

Sebagai contoh bila kita ingin membuat sebuah objek Rectangle yang bernama
benderaMerah dengan koordinat awal penggambaran pada (10, 30) dan lebar serta tinggi
masingmasing bernilai 200 dan 60 piksel, kita dapat menuliskan kode sbb:

Rectangle benderaMerah = new Rectangle(10, 30, 200, 60);

Selanjutnya, bila kita ingin menggambarkan bagian bendera putih maka kita dapat membuat
objek Rectangle dengan lebar dan tinggi yang sama namun berbeda lokasi awal dari
benderaMerah sbb:

Rectangle benderaPutih = new Rectangle(10, 90, 200, 60);


Objek benderaPutih akan menggambarkan komponen berbentuk persegi dengan
koordinat awal (10, 90) dan lebar serta tinggi bernilai 200 dan 60 piksel.
Sampai tahap ini, kita sudah membuat dua objek Rectangle yang bila digambarkan akan
membentuk kotak masingmasing dimulai pada koordinat (10,30) dan (10,90) dengan lebar
dan tinggi bernilai 200 dan 60 piksel.
Membuat Objek Color
Selanjutnya kita akan membuat objek Color untuk memberikan warna merah dan putih
dalam bendera kita. Setiap warna dapat dibuat dengan mengombinasikan nilai dari
komponen warna merah (R), hijau (G) dan biru (B) dengan masingmasing nilai berkisar
antara 0 255. Sebagai contoh, warna hitam memiliki nilai komponen R = 0, G = 0, dan B = 0.
Sedangkan warna putih dapat dinyatakan dengan nilai komponen R = 255, G = 255, dan B =
255.
Untuk membuat objek Color, kita dapat menggunakan constructor kelas Color sbb (diambil
dari Java API kelas Color) :

Color(int r, int g, int b)

Sehingga bila kita ingin membuat objek Color warna merah (255, 0, 0) dan putih (255, 255,
255) kita dapat menuliskannya dalam kode seperti ini:
Color merah = new Color(255, 0, 0);
Color putih = new Color(255, 255, 255);

Menggambarkan Komponen Dengan Objek Graphics2D


Langkah selanjutnya adalah menggambarkan kedua objek persegi yang mewakili bentuk
bendera serta menerapkan warna terhadap masingmasing bagian bendera. Kita
memerlukan sebuah objek kelas Graphics2D untuk menggambarkan komponen
komponen tersebut. Objek kelas Graphics2D mempunyai method draw() untuk
menggambarkan komponen, setColor() untuk mengaktifkan warna yang akan digunakan,

dan fill() untuk mewarnai komponen dengan warna yang sedang aktif, dll (dapat dibaca
di Java API kelas Graphics2D).
Berikut ini adalah cara pembuatan sebuah objek Graphics2D dengan nama graph2:

Graphics2D graph2 = (Graphics2D) g;


dengan g adalah sebuah objek kelas Graphics. Pada umumnya, objek g ini diperoleh dari
argumen method paintComponent.

Kemudian kita dapat menggambarkan komponen bendera tadi dengan langkahlangkah
berurut sbb:

// menggambar kotak pertama
graph2.draw(benderaMerah);
// mengaktifkan warna merah
graph2.setColor(merah);
// mewarnai komponen dengan warna merah yang sedang aktif
graph2.fill(benderaMerah);
// menggambar kotak kedua
graph2.draw(benderaPutih);
// mengaktifkan warna putih
graph2.setColor(putih);
// mewarnai komponen dengan warna putih yang sedang aktif
graph2.fill(benderaPutih);

Menyimpan Komponen Bendera Dalam Kelas Yang Mengextends JComponent



Sampai tahap ini, kita sudah mengetahui urutan langkahlangkah untuk menggambarkan
dua buah kotak masingmasing dengan warna merah dan putih yang dapat kita anggap
sebagai sebuah komponen yang merepresentasikan bendera. Sebelum objekobjek tersebut
dapat digambarkan dalam sebuah frame, maka kita harus menuliskan langkahlangkah
tersebut dalam sebuah method bernama paintComponent dalam sebuah kelas yang meng
extends kelas JComponent. Jadi, kita akan membuat sebuah kelas baru yang
merepresentasikan objek bendera.

Di bawah ini adalah contoh kelas dimana kita dapat meletakkan kodekode pembuatan
komponen bendera tersebut. Kita boleh saja membuat kelas dengan nama yang berbeda.

import
import
import
import
import

javax.swing.JComponent;
java.awt.Graphics;
java.awt.Graphics2D;
java.awt.Rectangle;
java.awt.Color;

public class KomponenBendera extends JComponent {


public void paintComponent(Graphics g) {
// tuliskan kode pembuatan komponen-komponen bendera di sini


}
}


Kelas KomponenBendera tersebut mampu melakukan penggambaran bendera berwarna
merah putih. Karena kelas KomponenBendera adalah sebuah komponen, maka kita
memerlukan objek dari kelas JFrame untuk meletakkan komponen tersebut agar hasil
proses penggambaran bendera tersebut dapat dilihat secara visual melalui frame.

Membuat Objek JFrame

Objek dari kelas JFrame dapat menampung berbagai macam komponen hasil extends dari
kelas JComponent. Sebuah objek dari kelas JFrame akan ditampilkan sebagai sebuah
window yang dapat kita atur karakteristiknya di antaranya adalah ukuran frame (lebar dan
tinggi) serta judul pada frame dengan melakukan pemanggilan method setSize() dan
setTitle(). Agar window dapat ditutup dengan sukses maka kita perlu juga memanggil
method setDefaultCloseOperation(). Berikut adalah contoh pembuatan objek kelas
JFrame dengan ukuran 300x400 dan berjudul Bendera Merah Putih.

JFrame frameBendera = new JFrame();
frameBendera.setSize(300, 400);
frameBendera.setTitle(Bendera Merah Putih);
frameBendera.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


Membuat Objek Komponen Bendera dan Meletakkannya Pada Objek JFrame

Setelah objek JFrame bernama frameBendera dibuat maka kita dapat membuat objek dari
kelas KomponenBendera lalu menempatkannya pada objek frameBendera tersebut.

// membuat objek komponen
KomponenBendera bendera = new KomponenBendera();
// menambahkan objek komponen ke frame
frameBendera.add(bendera);
// membuat frame visible atau dapat dilihat
frameBendera.setVisible(true);


Method add() yang dijalankan oleh objek frameBendera akan menambahkan komponen
yang diberikan sebagai parameter ke dalam objek frame tersebut. Akhirnya, kita harus
memanggil method setVisible() yang dimiliki oleh objek frameBendera agar frame
dapat ditampilkan secara visual.

Menampilkan Frame dengan Komponen Bendera Merah Putih

Langkah terakhir untuk melihat sebuah frame yang menampilkan Bendera Merah Putih
adalah dengan menempatkan langkahlangkah pembuatan frame dan penambahan
komponen di atas dalam method main di suatu kelas baru yang harus kita buat. Kode berikut

menunjukkan pada bagian mana kita harus menuliskan kode pembuatan frame dan
penambahan komponen bendera tersebut. Nama kelas pada kode dapat diubah sesuai
dengan keinginan masingmasing selama masih memenuhi kaidah penamaan class.

Dengan merangkaikan seluruh langkahlangkah yang sudah dijelaskan sebelumnya dengan
baik dan benar, maka kita akan dapat melihat sebuah window yang menampilkan bentuk
bendera merah putih di dalamnya. Jangan lupa bahwa semua code harus dicompile terlebih
dahulu dan tidak boleh ada error! Selanjutnya jalankan perintah java pada class
BenderaMerahPutih. Selamat mencoba!

import javax.swing.JFrame;
public class BenderaMerahPutih {
public static void main(String[] args) {
// tuliskan kode pembuatan frame dan penambahan komponen di sini
...
}
}

Keluaran Program
Keluaran dari program kurang lebih sbb:


Rangkuman
Secara garis besar, proses pembuatan gambar Bendera Merah Putih dapat dituliskan dalam
pseudocode sbb:
1. buat sebuah kelas yang mengextends kelas JComponent
2. dalam method paintComponent di kelas tersebut, lakukan hal berikut

3.
4.

5.
6.

a. buat sebuah objek Rectangle bernama benderaMerah dengan koordinat dan


ukuran yang diinginkan
b. buat sebuah objek Rectangle bernama benderaPutih dengan koordinat dan
ukuran yang diinginkan
c. buat objek Color warna merah
d. buat objek Color warna putih
e. buat sebuah objek Graphics2D
f. gambarkan benderaMerah oleh objek Graphics2D dan berikan warna merah
g. gambarkan benderaPutih oleh objek Graphics2D dan berikan warna putih
buat sebuah kelas yang memiliki method main
dalam method main di kelas tersebut, lakukan hal berikut
a. buat sebuah objek JFrame dengan ukuran dan judul yang diinginkan
b. buat sebuah objek kelas komponen bendera tadi dan tambahkan objek
tersebut pada objek JFrame yang sudah dibuat
c. buat agar objek JFrame tersebut dapat ditampilkan secara visual
simpan dan compile kedua file
bila tidak ada error, jalankan program dari kelas yang memiliki method main

Tutorial Menggambar Lampu Lalu Lintas Pada Frame (Tambahan)


Setelah kita memahami proses pembuatan Bendera Merah Putih dari tutorial A, maka kita
juga dapat menerapkan cara yang kurang lebih sama untuk membuat lampu lalu lintas.
Pertamatama anda dapat membuat kelas Circle berikut ini. Kelas Circle ini memiliki padanan
seperti kelas Rectangle, dimana Circle akan menggambar bentuk lingkaran.

import java.awt.geom.Ellipse2D;
public class Circle extends Ellipse2D.Double {
public Circle(int x, int y, int width, int height) {
super((double) x, (double) y, (double) width, (double) height);
}
}


Sebagai gambaran, anda mungkin saja memerlukan 3 objek Rectangle, 3 objek Circle,
dan 4 objek Color (representasi warna merah, kuning, hijau, dan hitam).
Hasil akhir yang diharapkan dari program anda adalah sbb:

Selamat Mencoba!!!!


4. Tutorial Percabangan


Tujuan:
Mahasiswa memahami percabangan dan sifatsifat kondisi dalam program
Mahasiswa bisa menerapkan percabangan bersarang

Tutorial Membuat Percabangan Sederhana


Dalam sebuah tes penerimaan mahasiswa di sebuah universitas ternama, panitia seleksi
menetapkan sebuah nilai minimal kelulusan bagi calon mahasiswa yaitu sebesar 75. Peserta tes
yang nilainya lebih dari nilai minimal akan diterima dan yang dibawahnya akan ditolak.
Format Masukan
Masukan dibaca dari masukan standar. Masukan terdiri dari 2 yaitu kata A dan bilangan B. A
menyatakan nama dari calon mahasiswa, dan B menyatakan nilai tes calon mahasiswa tersebut.
Format Keluaran
Keluaran ditulis ke keluaran standar. Keluaran berupa informasi nama calon mahasiswa, nilai tes
calon mahasiswa tersebut, dan status kelulusannya.

Contoh Masukan
Iwan
80


Contoh Keluaran

NamaPeserta:Iwan
NilaiTes:80
Status:diterima

Berikut adalah langkahlangkah pembuatan program tersebut:
1. Buatlah sebuah class bernama Penerimaan dan simpan dalam berkas bernama
Penerimaan.java
2. Buatlah method main pada class tersebut.
3. Buatlah variabel nama dan status yang bertipe String, dan variabel nilai yang bertipe
double
4. Buatlah sebuah objek Scanner yang menerima masukan dari pengguna untuk variabel nama dan
nilai
5. Buatlah sebuah if statement yang membandingkan variabel nilai dengan 75. Jika nilai dibawah
75, maka isi variabel status dengan nilai gagal. Selain itu maka variabel status bernilai
diterima.
6. Cetak keluaran pertama program dengan perintah
System.out.println(NamaPeserta:+nama);
7. Diikuti dengan peritah untuk mencetak keluaran kedua
System.out.println(NilaiTes:+nilai);
8. Cetak keluaran ketiga dengan perintah
System.out.println(Status:+status);
9. Simpan program tersebut.
10. Compile dan perbaiki jika ada kesalahan.
11. Jalankan program tersebut untuk melihat hasilnya.

Tutorial Menentukan Nilai Mahasiswa (Tambahan)


Nilai UTS, UAS, dan tugas adalah 3 komponen utama dalam penilaian akhir kuliah. Ketiga nilai
tersebut akan dikombinasikan dengan pembobotan masingmasing untuk menentukan nilai akhir
seorang mahasiswa. Nilai UAS memiliki bobot 40% dari nilai akhir, nilai UTS memiliki bobot 35%,
sedangkan nilai tugas memiliki bobot 25%.
Dari nilai akhir yang didapatkan, dosen dapat menentukan huruf yang mewakili nilai seorang
mahasiswa, apakah A,B,C,D, atau E. Pembagian nilai tersebut dapat dilihat pada bagan berikut.
Nilai Akhir
> 80
70 80
60 70
40 60
< 40

Huruf
A
B
C
D
E

Buatlah program yang menerima nilai UTS, UAS, dan tugas dari pengguna dan menghitung nilai akhir
serta huruf yang mewakilinya.

Format Masukan
Masukan dibaca dari masukan standar. Masukan terdiri dari 3 bilangan, A, B dan C. A
menyatakan nilai UTS, B menyatakan nilai UAS, dan C menyatakan nilai tugas.
Format Keluaran
Keluaran ditulis ke keluaran standar. Keluaran berupa informasi nilai UTS, UAS, Tugas, nilai
akhir beserta huruf untuk mahasiswa tersebut
Contoh Masukan
908070

Contoh Keluaran
NilaiUTS:90
NilaiUAS:80
NiaiTugas:70
NilaiAkhir:81.5
Huruf:A

Berikut adalah langkahlangkah pembuatan program tersebut:
1. Buatlah sebuah class bernama NilaiMahasiswa dan simpan dalam berkas bernama
NilaiMahasiswa.java
2. Buatlah method main pada class tersebut.
3. Buatlah variabel uts, uas, tugas, dan nilaiAkhir yang bertipe double dan variabel huruf
yang bertipe char.
4. Buatlah sebuah objek Scanner yang menerima masukan dari pengguna untuk variabel uts, uas,
dan tugas.
5. Hitung nilai variabel nilaiAkhir dengan menggunakan perhitungan
nilaiAkhir=0.35*uts+0.4*uas+0.25*tugas;
Buatlah if, else if, dan else untuk menentukan nilai variabel huruf sesuai dengan petunjuk yang
ada di awal soal.
6. Cetak keluaran dengan menggunakan perintah
System.out.println(NilaiUTS:+uts);
System.out.println(NilaiUAS:+uas);
System.out.println(NilaiTugas:+tugas);
System.out.println(NilaiAkhir:+nilaiAkhir);
System.out.println(Huruf:+huruf);
7. Simpan program tersebut.
8. Compile dan perbaiki jika ada kesalahan.
9. Jalankan program tersebut untuk melihat hasilnya.

5. Tutorial Perulangan
Tujuan:
Mahasiswa memahami jenisjenis perulangan dan dapat menggunakannya dalam
program
Mahasiswa bisa menerapkan perulangan bersarang

Tutorial Mencari Faktor Prima Menggunakan Perulangan


Pada tutorial kali ini kita akan mempelajari cara mencari bilanganbilangan yang menjadi faktor
prima suatu bilangan bulat.
Sebuah bilangan bulat x disebut sebagai salah satu faktor prima dari bilangan bulat y bila x adalah
bilangan prima dan x habis membagi y.
Sebagai contoh, 2 adalah salah satu faktor prima dari 20 karena 2 habis membagi 20 dan 2 adalah
bilangan prima (faktor prima dari 20 yang lain adalah 5). Secara keseluruhan, semua faktorfaktor
prima dari 20 adalah 2, 2 dan 5.
Contoh lainnya sbb: 2, 3, 5 dan 5 adalah faktor prima dari 150.
Ide dari pencarian faktor prima dari suatu bilangan y adalah sbb:
1. Buat sebuah bilangan sementara, selanjutnya disebut temp, untuk menyimpan nilai y
2. Lakukan perulangan dari 2 hingga y
a. Bila temp habis dibagi dengan bilangan perulangan sekarang maka
i. Cetak nilai bilangan perulangan sekarang sebagai sebuah faktor prima dari y
ii. Ubah nilai temp dengan hasil bagi bilangan perulangan sekarang terhadap
temp
b. Bila temp tidak habis dibagi dengan bilangan perulangan sekarang maka tambahkan
bilangan perulangan sekarang dengan satu (lakukan operasi increment)
Keseluruhan dari langkah 1 dan 2 diatas hanya memerlukan 1 buah forloop dan 1 buah if/else.
Cobalah implementasikan langkahlangkah tersebut untuk mencetak semua faktor prima dari sebuah
bilangan yang diberikan oleh user ketika program anda berjalan.

Format Masukan
Masukan dibaca dari masukan standar berupa bilangan y yang akan dicari faktorfaktor primanya.

Format Keluaran
Keluaran ditulis ke keluaran standar. Keluaran berupa penulisan semua faktor prima dari bilangan y
tersebut.

Contoh Masukan
20

Contoh Keluaran
225

Contoh Masukan
150

Contoh Keluaran
2355


Langkahlangkah membuat program adalah sbb:
1. Buat sebuah class dengan nama FaktorPrima
2. Buat method main dalam class tersebut
3. Buat sebuah variabel integer bernama input dan sebuah variabel integer bernama temp.
4. Buat sebuah variabel objek kelas Scanner bernama reader. Objek reader ini akan
membaca masukan dari keyboard (masukan standar)
5. Mintalah sebuah bilangan bulat dari user dan simpan nilai tersebut ke dalam variabel input.
Simpan juga nilai dari variabel input tersebut ke dalam variabel temp.
6. Buat sebuah forloop dengan inisialisasi variabel integer bernama i dengan nilai 2. Buat
kondisi forloop tersebut berjalan selama nilai i kurang dari atau sama dengan nilai input.
7. Lakukan langkah berikut di dalam forloop tersebut:
a. Cek apakah nilai temp habis dibagi dengan nilai i saat ini. Bila ya, maka jalankan
langkah i) dan ii). Bila tidak, jalankan langkah b.
i. Cetak nilai i ke dalam keluaran standar
ii. Bagi temp dengan i dan simpan hasilnya dalam variabel temp
b. Tambahkan nilai i dengan 1
8. Simpan file tersebut
9. Compile dan jalankan untuk melihat hasilnya


Tutorial Memeriksa Apakah Sebuah Bilangan Adalah Bilangan Prima
(Tambahan)
Setelah mengerjakan Tutorial A di atas, anda seharusnya sudah tahu cara menggunakan forloop
dalam program. Anda juga seharusnya sudah mengerti kapankah sebuah bilangan bulat disebut
sebagai bilangan prima.
Sebagai ulasan, sebuah bilangan prima adalah bilangan yang hanya habis dibagi dengan 1 dan
bilangan itu sendiri.
Contoh: 4 bukan bilangan prima karena 4 selain habis dibagi 1 juga habis dibagi 2. Contoh lain adalah
13 yang merupakan bilangan prima karena 13 hanya habis dibagi 1 dan 13 itu sendiri.
Ide untuk menentukan apakah sebuah bilangan y itu prima sbb:
Lakukan perulangan dari 2 sampai y 1

Bila y habis dibagi dengan bilangan perulangan sekarang maka catat sebagai bukan bilangan
prima
Bila tidak, lanjutkan perulangan

Format Masukan
Masukan dibaca dari masukan standar berupa bilangan y yang akan ditentukan apakah bilangan
tersebut berupa bilangan prima.

Format Keluaran
Keluaran ditulis ke keluaran standar. Keluaran berupa informasi apakah bilangan y adalah sebuah
bilangan prima atau bukan.

Contoh Masukan
20

Contoh Keluaran
20bukanbilanganprima

Contoh Masukan
23

Contoh Keluaran
23bukanbilanganprima

Dalam tutorial ini anda tidak diberikan panduan untuk membuat programnya. Silakan anda membuat
program ini dengan cara anda sendiri.

6. Tutorial Array

Tujuan:
Mahasiswa mengenal tipe data array dan bisa menggunakannya dalam program
Mahasiswa memahami teknikteknik pengisian dan pencarian data pada suatu array
Mahasiswa mengerti penggunaan array dua dimensi

Tutorial Informasi Umur Teman Menggunakan Array


Nijar si Iseng ingin mendapatkan informasi berikut:
Umur teman tertua
Umur teman termuda
Umur ratarata temantemannya
Untuk mengetahui halhal tersebut, Nijar memiliki ide untuk membuat sebuah array yang
menyimpan umur semua temantemannya. Setelah semua umur temantemannya tersimpan,
barulah dicari umur tertua, umur termuda, serta umur ratarata dari temanteman Nijar. Karena Nijar
masih awam dan belum lancar mengoding, bantulah Nijar untuk membuat program sesuai
harapannya.

Format masukan
Masukan terdiri dari n+1 buah bilangan. Bilangan pertama berupa jumlah teman yang akan
dimasukkan umurnya (misal sejumlah n), sedangkan n buah bilangan berikutnya adalah umur setiap
teman Nijar.

Format keluaran
Keluaran terdiri dari tiga baris yang berisi informasi umur teman tertua, umur teman termuda, serta
umur ratarata temanteman Nijar. Untuk umur ratarata berupa bilangan desimal dengan dua angka
di belakang koma.

Contoh Masukan
7
55
26
14
44
33
17
20

Contoh Keluaran
Umurtemantertua:55
Umurtemantermuda:14

Umurtemanratarata:29.85


Langkahlangkah membuat program adalah sbb

Nama class dan variabelvariabel yang digunakan dalam tutorial ini terserah kepada kalian. Namun
nama yang digunakan harus merepresentasikan kegunaan dari class dan variabelvariabel tersebut.

1. Buatlah sebuah class yang memiliki method main.
2. Buatlah sebuah objek Scanner untuk membaca masukan dari pengguna.
3. Buatlah perintah untuk membaca bilangan pertama yang dimasukkan oleh pengguna. Simpan
bilangan ini ke dalam sebuah variabel. Bilangan ini menyatakan jumlah teman yang akan
disimpan data umurnya.
4. Buatlah sebuah array 1 dimensi yang dapat menyimpan bilangan bulat. Ukuran array ini
tergantung dari jumlah teman (diperoleh pada langkah sebelumnya).
Syntax untuk membuat array bertipe integer adalah sebagai berikut:

int[]nama_array=newint[ukuran_array];
5. Buatlah perintah untuk membaca setiap bilangan yang menyatakan umur teman Nijar. Umur
pertama disimpan ke dalam array indeks ke0, umur kedua disimpan ke dalam array indeks
ke1, dan seterusnya hingga semua umur teman Nijar tersimpan.
Syntax untuk menyimpan suatu nilai ke dalam array indeks kei adalah sebagai berikut:


nama_array[i]=bilangan_tertentu;

Gunakan iterasi (whileloop atau forloop) pada proses penyimpanan data umur.
6. Untuk mencari teman tertua, lakukan langkahlangkah berikut:
a. Buatlah sebuah variabel temporal untuk menyimpan umur tertua sementara (misal
dengan nama tertua) dan berikan nilai 1 pada variabel tersebut
b. Bandingkan nilai variabel tertua dengan bilangan pada indeks ke0.
c. Jika nilai variabel tertua lebih kecil, maka ubah nilai variabel tersebut menjadi
bilangan pada indeks ke0.
d. Jika nilai variabel tertua sama dengan atau lebih besar dari bilangan pada indeks ke
0, maka lanjutkan perbandingan ke indeks berikutnya
e. Lakukan langkah yang sama hingga bilangan pada indeks terakhir.
f. Setelah perbandingan selesai dilakukan, maka variabel tertua akan menyimpan
umur tertua dari temanteman Nijar.
7. Perhatikan bahwa kesalahan yang sering terjadi adalah mengakses array dengan indeks yang
melebihi indeks maksimal.
8. Untuk mencari teman termuda, lakukan langkah yang serupa dengan langkah untuk mencari
teman tertua.
9. Untuk mencari umur ratarata teman, lakukan langkah berikut:
a. Buatlah sebuah variabel untuk menyimpan jumlah umur (misal bernama
totalUmur) dan berikan nilai 0 pada variabel tersebut
b. Jumlahkan nilai totalUmur dengan bilangan pada indeks ke0.
c. Lakukan penjumlahan untuk semua bilangan pada array.
d. Setelah umur semua teman dijumlahkan, bagi nilai totalUmur dengan jumlah teman.
Simpan hasil bagi ke sebuah variabel. Gunakan langkah yang telah kalian pelajari
agar bilangan yang tersimpan berupa desimal dua angka di belakang koma.
10. Cetak nilainilai yang diperoleh sesuai format pada bagian Contoh Keluaran.

Tutorial Informasi Umur Teman Menggunakan Array (Tambahan)


Kali ini Nijar ingin melakukan survei umur ke beberapa RT (rukun tetangga) di daerah sekitarnya.
Dia ingin mencari siapa & di RT berapakah orang tertua dan termuda di daerah tersebut. Untuk
menyimpan umur setiap orang, Nijar akan menggunakan array 2 dimensi dengan ketentuan berikut:
1. Jika ada n buah RT yang disurvei, maka ada n buah baris array.
2. Jika ada m orang yang disurvei untuk tiap RT, maka ada m buah kolom array.
Untuk kondisi seperti Contoh Masukan di bawah, maka array 2 dimensi yang terbentuk adalah:

21
99
32
55

44
17
31
55

8
54
30
55

Lagilagi Nijar meminta bantuan Anda untuk membuat program. Nijar menyimpan catatan data nama
orangorang yang telah disurvei di berkas lain. Oleh karena itu, Anda hanya perlu menampilkan
nomor urut orang tertua/termuda (untuk lebih jelasnya lihat pada bagian Contoh Keluaran).

Contoh Masukan
(Tulisan berwarna biru hanya untuk kejelasan. Input sebenarnya berwarna hitam.)
JumlahRT:4
JumlahsampleditiapRT:3
Umurmasingmasing:
21448
991754
323130
555555

Contoh Keluaran
Tetanggatertuaadalahorangke1diRT2.
Tetanggatermudaadalahorangke3diRT1.

LangkahLangkah Pengerjaan

Silakan gunakan langkahlangkah yang terpikirkan oleh Anda


7. Tutorial Designing Class

Tujuan:
Mahasiswa mengerti teknik pembuatan kelas dan methodmethod
Mahasiswa bisa mengelompokkan kelaskelas dalam suatu package

Pendahuluan
Pada tutorial kali ini kita akan belajar membuat beberapa kelas yang selanjutnya kita kelompokkan
dalam beberapa package. Kelaskelas dalam package tersebut akan digunakan dalam sebuah main
class. Anda diminta untuk mengimplementasikan beberapa method yang masih kosong dalam kelas
kelas tersebut. Untuk memudahkan pekerjaan, anda dianjurkan menggunakan Netbeans IDE.
Kelas pertama yang akan kita buat adalah kelas Persegi. Kelas ini termasuk ke dalam package bentuk
bersama kelas Segitiga (yang akan dijelaskan setelah kita selesai membahas kelas Persegi). Berikut
ini adalah bagan kelas Persegi. Silakan implementasikan dibagian yang masih kosong. Kalian
diminta menambahkan juga sebuah method untuk menghitung luas persegi.
package bentuk;

/**
* Kelas yang merepresentasikan sebuah persegi. Kelas ini dapat menghitung
luas sebuah persegi.
*
* @author Nobita - 110617081945
*
*/
public class Persegi {
// variabel yang menyimpan nilai sisi sebuah persegi
private double sisi;
/**
* Constructor kelas <code>Persegi</code>. Pada constructor ini diatur
nilai
* dari variabel <code>sisi</code>.
*
* @param sisi adalah sisi persegi yang akan disimpan nilainya
*/
public Persegi(double sisi) {
// implementasikan kode anda di sini
}
/**
* Method untuk mengambil nilai <code>sisi</code> objek
<code>Persegi</code>
*
* @return nilai sisi persegi
*/
public double getSisi() {
// implementasikan kode anda di sini
}
/**
* Method untuk mengatur nilai <code>sisi</code> objek
<code>Persegi</code>
*
* @param sisi adalah sisi persegi yang akan disimpan nilainya
*
*/
public void setSisi(double sisi) {

// implementasikan kode anda di sini


}
// buat sebuah method untuk menghitung luas persegi di sini
}

Kelas kedua adalah kelas Segitiga. Kelas ini juga akan kita masukkan dalam package bentuk bersama
kelas Persegi di atas karena kedua kelas ini samasama merepresentasikan sebuah bentuk geometri.
Silakan implementasikan di bagian yang masih kosong. Kalian diminta menambahkan juga
sebuah method untuk menghitung luas segitiga.
package bentuk;
/**
* Kelas yang merepresentasikan sebuah segitiga. Kelas ini dapat menghitung
luas sebuah segitiga.
*
* @author Nobita 110617081945
*
*/
public class Segitiga {
// variabel yang menyimpan nilai alas sebuah segitiga
private double alas;
// variabel yang menyimpan nilai tinggi sebuah segitiga
private double tinggi;
/**
* Constructor kelas <code>Segitiga</code>. Pada constructor ini diatur
* nilai dari variabel <code>alas</code> dan <code>tinggi</code>.
*
* @param alas adalah alas segitiga yang akan disimpan nilainya
* @param tinggi adalah tinggi segitiga yang akan disimpan nilainya
*/
public Segitiga(double alas, double tinggi) {
// implementasikan kode anda di sini
}
/**
* Method untuk mengambil nilai <code>alas</code> objek
<code>Segitiga</code>
*
* @return nilai alas segitiga
*/
public double getAlas() {
// implementasikan kode anda di sini
}
/**
* Method untuk mengatur nilai <code>alas</code> objek
<code>Segitiga</code>
*
* @param alas adalah alas segitiga yang akan disimpan nilainya
*/
public void setAlas(double alas) {
// implementasikan kode anda di sini
}

/**
* Method untuk mengambil nilai <code>tinggi</code> objek
<code>Segitiga</code>
*
* @return nilai tinggi segitiga
*/
public double getTinggi() {
// implementasikan kode anda di sini
}
/**
* Method untuk mengatur nilai <code>tinggi</code> objek
<code>Segitiga</code>
*
* @param tinggi adalah tinggi segitiga yang akan disimpan nilainya
*/
public void setTinggi(double tinggi) {
// implementasikan kode anda di sini
}
// buat sebuah method untuk menghitung luas segitiga di sini
}

Sekarang kita akan membuat sebuah kelas bernama Matematika yang disimpan dalam package
matematika. Kelas ini berisi methodmethod static yang melakukan perhitungan matematika.
Silakan implementasikan di bagian yang masih kosong.
package matematika;

/**
* Kelas yang berisi fungsi-fungsi matematika sederhana
*
* @author Nobita - 110617081945
*
*/
public class Matematika {
/**
* Method untuk menghitung nilai maksimum dari dua buah bilangan bulat
*
* @param a bilangan pertama
* @param b bilangan kedua
* @return bilangan maksimum dari a dan b
*/
public static int maks(int a, int b) {
// implementasikan kode anda disini
}
/**
* Method untuk menghitung nilai maksimum dari dua buah bilangan
desimal
* @param a bilangan pertama
* @param b bilangan kedua
* @return bilangan maksimum dari a dan b

public static double maks(double a, double b) {


// implementasikan kode anda disini
}
/**
* Method untuk menghitung nilai absolut dari sebuah bilangan bulat
*
* @param a bilangan yang akan dicari nilai absolutnya
*
* @return bilangan absolut dari a
*/
public static int absolut(int a) {
// implementasikan kode anda disini
}
/**
* Method untuk menghitung nilai absolut dari sebuah bilangan desimal
*
* @param a bilangan yang akan dicari nilai absolutnya
*
* @return bilangan absolut dari a
*/
public static double absolut(double a) {
// implementasikan kode anda disini
}
/**
* Method untuk menghitung nilai pemangkatan a terhadap b
*
* @param a bilangan dasar yang akan dicari pangkatnya
* @param b bilangan yang menyatakan pangkat
*
* @return bilangan hasil pemangkatan a terhadap b
*/
public static int pangkat(int a, int b) {
// implementasikan kode anda disini
}
/**
* Method untuk mencari nilai faktorial a. Bilangan a ini tidak boleh
* bernilai negatif. Catatan: faktorial 0 atau 1 bernilai 1.
*
* @param a bilangan yang akan dicari faktorialnya
*
* @return hasil perhitungan factorial
*/
public static int faktorial(int a) {
// implementasikan kode anda disini
}
}

Menjalankan KelasKelas
Setelah membuat kelaskelas tersebut tentu saja kita tidak dapat menjalankannya secara langsung.
Untuk menjalankannya kita perlu membuat objek dari kelaskelas tersebut di sebuah kelas yang

memiliki method main.


Buatlah sebuah kelas bernama Tester dalam package test. Pada kelas Tester ini akan kita buat objek
objek kelas tadi dengan cara mengimport terlebih dahulu kelaskelas tersebut. Berikut ini adalah
contoh kelas Tester.
package test;
// lakukan import kelas-kelas tersebut di sini
public class Tester {
public static void main(String[] args) {
System.out.println("Memanggil static method dari kelas
Matematika");
System.out.println("absolut(-3.5) = " + Matematika.absolut(3.5));
System.out.println("absolut(-19) = " + Matematika.absolut(-19));
System.out.println("maks(-2.15, -2.14) = "
+ Matematika.maks(-2.15, -2.14));
System.out.println("maks(4, 10) = " + Matematika.maks(4, 10));
System.out.println("pangkat(2, 10) = " + Matematika.pangkat(2,
10));
System.out.println();
System.out.println("Memanggil method dari kelas Persegi dan
Segitiga");
Persegi p1 = new Persegi(15);
System.out.println("sisi persegi = " + p1.getSisi());
System.out.println("luas persegi = " + p1.getLuas());
System.out.println();
Segitiga s1 = new Segitiga(15, 10);
System.out.println("alas segitiga = " + s1.getAlas());
System.out.println("tinggi segitiga = " + s1.getTinggi());
System.out.println("luas segitiga = " + s1.getLuas());
}
}

Keluaran dari program Tester tersebut bila dijalankan seharusnya sbb:



MemanggilstaticmethoddarikelasMatematika
absolut(3.5)=3.5
absolut(19)=19
maks(2.15,2.14)=2.14
maks(4,10)=10
pangkat(2,10)=1024
faktorial(10)=3628800

MemanggilmethoddarikelasPersegidanSegitiga
sisipersegi=15.0

luaspersegi=225.0

alassegitiga=15.0
tinggisegitiga=10.0
luassegitiga=75.0

8. Tutorial Recursion

Tujuan:
Mahasiswa mengerti teknik rekursi dan kaitannya dengan iterasi
Mahasiswa bisa menerapkan pola pikir rekursi dalam menyelesaikan permasalahan

Tutorial Recursion : Palindrom


Pendahuluan
Sebuah proses rekursif adalah proses pemanggilan sebuah fungsi secara berulangulang terhadap
fungsi itu sendiri. Beberapa contoh proses rekursif dalam dunia matematika adalah pada fungsi
faktorial, Fibonacci, dan FPB (greatest common divisor).
Sebuah fungsi rekursif hanya memiliki dua sifat, yaitu
1. Kasus dasar (base case) yang bisa diselesaikan oleh fungsi tersebut, dan
2. Pemanggilan rekursif (recursion call) yang memecah masalah menjadi kasuskasus yang
lebih kecil
Untuk menyelesaikan persoalan, fungsi rekursif akan memecah persoalan sekarang menjadi
persoalan yang lebih kecil sifatnya sehingga pada akhirnya persoalan tersebut dapat diselesaikan
bila sudah mencapai base case.
Memeriksa apakah suatu kata merupakan palindrom
Sebuah kata disebut palindrom bila kata tersebut dapat dibaca dengan cara yang sama dari depan
ataupun belakang. Contoh kata palindrom adalah : radar, level, ada dll.
Untuk memeriksa suatu kata apakah bersifat palindrom kita perlu membaca setiap karakter kata
tersebut secara bersamaan dimulai dari karakter paling awal dan paling akhir. Bila karakter awal
dan akhir kata tersebut sama, kita memeriksa karakter selanjutnya dari awal dan akhir apakah juga
sama. Proses ini dilakukan terus menerus hingga ditemukan pasangan karakter yang tidak sama
(berarti kata tersebut bukan palindrom) atau kita sudah sampai pada pertengahan kata (maka kata
tersebut adalah palindrom). Ilustrasi pemeriksaan kepalindroman sebuah kata sbb:
radar

langkah 1

r.a.d.a.r

karakter pertama dan terakhir sama

langkah 2

r.a.d.a.r

karakter kedua dan keempat sama

langkah 3

r.a.d.a.r

sudah mencapai pertengahan kata

dari contoh di atas, kita menyimpulkan bahwa kata radar adalah palindrom.
Perhatikan ilustrasi di bawah ini. Panah dengan garis putusputus baru akan muncul ketika sudah
mencapai base case yaitu ketika mencari nilai palindrom(d).

palindrom(radar)

return true

palindrom(ada)

return true

palindrom(d)


Perhatikan contoh selanjutnya:
antenna

langkah 1

a.n.t.e.n.n.a

karakter pertama dan terakhir sama

langkah 2

a.n.t.e.n.n.a

karakter kedua dan keenam sama

langkah 3

a.n.t.e.n.n.a

karakter ketiga dan kelima tidak sama

pada contoh di atas, kita tidak melanjutkan pencarian ke langkah 4 karena kita sudah menemukan
pasangan karakter yang tidak sama pada langkah 3. Kita dapat menyimpulkan kata antenna
bukan sebuah palindrom.

palindrom(antenna)

return false

palindrom(ntenn)

return false

palindrom(ten)


Pada bahasa pemrograman Java, terdapat dua method dari kelas String yang bisa membantu kita
untuk mencari kepalindroman suatu kata. Method tersebut adalah:
1. chartAt(i) mengembalikan karakter pada posisi kei
2. substring(i, j) mengembalikan substring dimulai dari indeks kei sampai j1
Kita dapat menggunakan bantuan method charAt(i) ketika akan memeriksa kesamaan dua
karakter. Sedangkan method substring(i,j) dapat digunakan untuk memperoleh substring
(potongan kata) dari kata yang sedang diproses.
Pada kesempatan kali ini, kita akan berlatih membuat program yang memeriksa apakah suatu kata
bersifat palindrom.
Format Masukan
Masukan dibaca dari masukan standar. Masukan string kata yang akan diperiksa
kepalindromannya.
Format Keluaran
Keluaran ditulis ke keluaran standar. Keluaran berupa pernyataan true bila kata tersebut
palindrom, atau false bila kata tersebut bukan palindrom.

Contoh Masukan
antenna


Contoh Keluaran
false

Contoh Masukan

level


Contoh Keluaran
true


Catatan:
Karena kalian sudah mempelajari tentang package pada tutorial minggu lalu, maka kalian diminta
untuk terus menggunakan konsep package dalam tutorialtutorial selanjutnya (termasuk tutorial
ini).
Langkahlangkah membuat program adalah sbb:
1. Buat sebuah kelas dengan nama Palindrompada package ddp2011.tutorial
2. Buat sebuah method static bernama isPalindrome yang menerima satu parameter String s
sebagai string yang ingin dicari kepalindromannya. Method ini mengembalikan sebuah nilai
boolean.
3. Tentukan base case method tersebut. Perhatikan, penentuan base case amat sangat penting
pada sebuah method rekursif, karena pemanggilan method rekursif bisa tidak akan pernah
berhenti bila anda salah menentukan base casenya.
Pada operasi palindrom, base casenya sbb:
a) Bila panjang String s sama dengan 0 atau 1 (sudah berada di tengahtengah kata),
maka hasil palindrom sama dengan true
b) Bila karakter pertama dan terakhir String s tidak sama, maka hasil palindrom sama
dengan false.
4. Tentukan recursion call method tersebut. Pada operasi palindrom, recursion call dilakukan
dengan memeriksa kepalindroman substring (potongan kata) dari indeks selanjutnya sampai
indeks kata sebelum karakter terakhir. Recursion call ini hanya dilakukan bila karakter pada
indeks pertama sama nilainya dengan karakter pada indeks terakhir. Dengan kata lain,
recursion call tersebut menjadi : isPalindrome(s.subString(1,s.length()1))
5. Simpan file tersebut
6. Buatlah sebuah kelas bernama DemoRekursif pada package ddp2011.demo
7. Buat method main dalam class tersebut
8. Buat sebuah variabel String bernama kata. Buat juga sebuah variabel objek class Scanner
bernama input yang membaca masukan dari keyboard
9. Bacalah dari masukan standar sebuah kata yang nilainya disimpan pada Stringkata

10. Selanjutnya, panggillah method static isPalindrome milik kelas Palindrom dengan
memberikan argumenkata
11. Cetak hasil yang dikembalikan pemanggilan method isPalindrome sebagai keluaran
12. Simpan file tersebut.
13. Compile dan jalankan untuk melihat hasilnya.

Tutorial Recursion : Menghitung Pangkat


Mencari hasil perpangkatan ab
Bentuk ab disebut bentuk perpangkatan, dengan a adalah bilangan dasar dan b adalah pangkat.
Untuk b bernilai positif, operasi perpangkatan dinyatakan dengan mengalikan bilangan a sebanyak
b kali.
Salah satu cara mencari pangkat bilangan ab adalah dengan melakukan proses rekursif. Cara
lainnya adalah dengan melakukan proses iterasi. Untuk proses iterasi bisa dilakukan latihan secara
mandiri (sudah dibahas pada tutorial minggu sebelumnya).
Dengan cara rekursif, pemangkatan ab dengan b > 1 dinyatakan sebagai a*ab1, dimana a0 = 1.
pangkat(2, 4)
return 2 * 8

2 * pangkat(2, 3)

return 2 * 4

2 * pangkat(2, 2)

return 2 * 2

2 * pangkat(2, 1)

return 2 * 1

2 * pangkat(2, 0)

Perhatikan ilustrasi di atas. Panah dengan garis putusputus baru akan muncul ketika sudah
mencapai base case yaitu ketika memanggil pangkat(2,0). Hasil tersebut akan dikembalikan ke
proses yang memanggilnya begitu seterusnya.
Kali ini kita akan berlatih membuat operasi pemangkatan dua bilangan dengan cara rekursif.
Format Masukan
Masukan dibaca dari masukan standar. Masukan terdiri dari 2 bilangan, A dan B. A menyatakan
bilangan dasar, dan B menyatakan pangkat. Perhatikan, B harus berupa bilangan bulat positif.
Format Keluaran
Keluaran ditulis ke keluaran standar. Keluaran berupa sebuah bilangan yang menyatakan hasil
perpangkatan A terhadap B.

Contoh Masukan
210


Contoh Keluaran
1024


Langkahlangkah membuat program adalah sbb:
1. Buat sebuah kelas dengan nama Pangkatpada package ddp2011.tutorial
2. Buat sebuah method static bernama hitungPangkat yang menerima dua parameter: bilangan
bulat a sebagai bilangan dasar, dan bilangan bulat b sebagai pangkat. Method ini
mengembalikan sebuah bilangan bulat.
3. Tentukan base case method tersebut. Perhatikan, penentuan base case amat sangat penting
pada sebuah method rekursif, karena pemanggilan method rekursif bisa tidak akan pernah
berhenti bila anda salah menentukan base casenya.
Pada operasi pemangkatan, base casenya sbb:
Bila pangkat b sama dengan 0, maka hasil pemangkatan sama dengan 1
4. Tentukan recursion call method tersebut. Pada operasi pemangkatan, recursion call dilakukan
dengan mengalikan bilangan dasar a dengan bilangan dasar yang dipangkatkan dengan selisih
pangkat b dengan 1. Atau dengan notasi matematika, recursion call tersebut menjadi : a * a b1
5. Simpan file tersebut
6. Buatlah sebuah kelas bernama DemoPangkat pada package ddp2011.demo
7. Buat method main dalam kelas tersebut

8. Buat tiga variabel bilangan bulat dasar, pangkat dan hasil.


9. Bacalah dari masukan standar dua bilangan yang masingmasing disimpan pada variabel dasar
dan pangkat.
10. Selanjutnya, panggillah method static hitungPangkat milik kelas Pangkat dengan
memberikan argumen dasar dan pangkat, dan simpan hasilnya pada variabel hasil.
11. Cetak nilai variabel hasilsebagai keluaran
12. Simpan file tersebut.
13. Compile dan jalankan untuk melihat hasilnya.

Tutorial Recursion : Konversi Bilangan Basis 10


Pendahuluan
Sebuah bilangan dalam basis sepuluh dapat dinyatakan dengan angkaangka 0, 1, 2, 3, 4, 5, 6, 7, 8,
dan 9. Terdapat beberapa basis bilangan yang penting lainnya yaitu basis dua (biner), basis delapan
(octal) dan basis enam belas (hexa).
Untuk bilangan dalam basis dua hanya dapat dinyatakan oleh angka 0 dan 1. Sebagai contoh
bilangan 15 dalam basis sepuluh sama dengan 1111 pada basis 2.
Mengubah bilangan dari basis sepuluh ke basis lain
Salah satu algoritma mengubah bilangan dari basis sepuluh ke basis b adalah dengan membagi
secara terus menerus bilangan tersebut dengan b. Sisa yang didapat dari operasi pembagian akan
membentuk digit dalam basis yang dituju, yaitu basis b. Selanjutnya hasil bagi kembali dibagi
dengan b untuk diambil sisanya. Algoritma ini berhenti bila hasil bagi diperoleh sama dengan 0.
Bilangan dalam basis b dibentuk dari digitdigit sisa pembagian dalam urutan yang terbalik.
Perhatikan contoh berikut untuk mengubah bilangan 30 ke basis 4:

Hasil bagi

Sisa

30/4 =

7 / 4

1 / 4

Hasil konversi 30 ke basis 4 adalah bilangan 132, dengan kata lain 30 (basis 10) = 132 (basis 4).

Untuk memperjelas, di sini kita menggunakan dua operator yaitu / dan %. Operator /
digunakan untuk mencari hasil bagi x dengan b, sedangkan operator % digunakan untuk mencari
sisa pembagian x dengan b. Sebagai contoh, hasil 30/4 adalah 7, sedangkan 30%4 adalah 2.
Perhatikan secara umum proses pengkonversian bilangan x ke basis b secara rekursif sbb:
1. Bagi x dengan b. Sisa pembagian, atau x%b, menjadi digit paling kanan pada basis b
2. Dari hasil x/b pada langkah sebelumnya, lakukan pembagian lagi dengan b dan ambil sisa
pembagiannya sebagai digit selanjutnya pada basis b
3. Bila hasil x/b sudah mencapai 0 maka bilangan x%b menjadi digit terakhir (paling kiri) dalam
basis b
Pada kesempatan ini kita akan berlatih membuat program yang melakukan konversi bilangan basis
sepuluh ke basis lain
Format Masukan
Masukan dibaca dari masukan standar. Masukan terdiri dari 2 bilangan, A dan B. Bilangan A
menyatakan bilangan pada basis sepuluh, dan bilangan B menyatakan basis konversi yang
diinginkan. Bilangan B harus berada antara 2 dan 9.
Format Keluaran
Keluaran ditulis ke keluaran standar. Keluaran berupa sebuah bilangan yang menyatakan hasil
konversi bilangan A ke basis B.

Contoh Masukan
304


Contoh Keluaran
132


Langkahlangkah membuat program adalah sbb:
1. Buat sebuah kelas dengan nama Konversipada packageddp2011.tutorial
2. Buat sebuah method static bernama hitungKonversi yang menerima dua parameter: bilangan
bulat a sebagai bilangan dasar dalam basis 10, dan bilangan bulat b sebagai basis yang dituju.
Method ini mengembalikan sebuah String.
3. Buat dua variabel bilangan bulat hasilBagi dan sisa di dalam method konversi.
hasilBagi akan menyimpan nilai a/b, sedangkan sisa akan menyimpan nilai a%b.

4. Tentukan base case method tersebut. Perhatikan, penentuan base case amat sangat penting
pada sebuah method rekursif, karena pemanggilan method rekursif bisa tidak akan pernah
berhenti bila anda salah menentukan base casenya.
Pada operasi konversi, base casenya sbb:
Bila hasilBagi sama dengan 0, maka hasil konversi sama dengan bilangan sisa
5. Tentukan recursion call method tersebut. Pada operasi konversi, recursion call dilakukan
dengan menyambungkan String hasil konversi dari hasilBagi terhadap basis b dengan sisa
pembagian yang diperoleh saat ini. Dengan kata lain, recursion call tersebut menjadi :
hitungKonversi (hasilBagi,b)+sisa
6. Simpan file tersebut
7. Buat sebuah kelas bernama DemoKonversi pada package ddp2011.demo
8. Buat method main dalam kelas tersebut
9. Buat dua variabel bilangan bulat yaitu bilanganDasar dan basis. Buat juga sebuah variabel
String bernama hasilKonversi
10. Bacalah dari masukan standar dua bilangan yang masingmasing disimpan pada variabel
bilanganDasar danbasis.
11. Selanjutnya, panggillah method static hitungKonversi milik kelas Konversi dengan
memberikan argumen bilanganDasar dan basis, dan simpan hasilnya pada variabel
hasilKonversi
12. Cetak nilai variabel hasilKonversi sebagai keluaran
13. Simpan file tersebut.
14. Compile dan jalankan untuk melihat hasilnya.
Catatan: Anda bisa mengubah proses konversi di atas sehingga bisa memproses basis 16. Silakan
dicoba dengan cara yang terpikirkan oleh anda.


9. Tutorial Interface, Polimorfisme & Inheritance

Tujuan:
Mahasiswa dapat menggunakan interface
Mahasiswa memahami konsep polimorfisme

Tutorial Menghitung Luas & Keliling


Pada tutorial ini kalian diminta untuk membuat sebuah program yang menghitung keliling dan luas
dari sebuah bangun dengan menggunakan konsep interface dan inheritance Java. Jenis bangun
geometri yang akan dihitung keliling dan luasnya adalah segitiga sikusiku, segitiga sama sisi, persegi,
dan lingkaran.
Yang harus kalian pahami dalam tutorial kali ini adalah sebagai berikut:
1.
2.
3.
4.
5.

Pembuatan interface yang akan diimplementasikan oleh kelas lain


Pengimplementasian interface di kelas lain
Pembuatan kelas abstract yang akan diextends oleh kelas lain
Pembuatan kelaskelas yang mengextends kelas abstract tersebut
Pemanggilan constructor superclass dengan keyword super


Diagram di atas menunjukkan hirarki dari interface dan kelaskelas yang akan kalian buat. Garis
putusputus menunjukkan bahwa kelas tersebut mengimplements interface yang ditunjuknya. Garis
solid (tidak putusputus) menunjukkan bahwa kelas tersebut mengextends kelas yang ditunjuknya.
Keluaran yang diharapkan dari program yang kalian buat dapat dilihat pada Contoh Keluaran.


Contoh Keluaran
Segitiga:SiKumbang

Alassegitiga:3.0
Tinggisegitiga:4.0
Luassegitiga:6.00
Kelilingsegitiga:12.00

Segitiga:SamaSisiBaru
Sisisegitiga:8.0
Luassegitiga:27.71
Kelilingsegitiga:24.00

Persegi:PapanTulis
Sisipersegi:10.0
Luaspersegi:100.00
Kelilingpersegi:40.00

Lingkaran:LingLing
Jarijarilingkaran:8.0
Luaslingkaran:201.06
Kelilinglingkaran:50.27


Berikut ini adalah kelas untuk menghasilkan keluaran di atas. Kelas DemoInterface ini berada dalam
package ddp2011.demo. Kelas ini bisa langsung kalian gunakan.

package ddp2011.demo;
import
import
import
import

bentuk.Lingkaran;
bentuk.Persegi;
bentuk.SegitigaSamaSisi;
bentuk.SegitigaSikuSiku;

public class DemoInterface {


public static void main(String[] args) {
SegitigaSikuSiku segi3Siku = new SegitigaSikuSiku("SiKumbang", 3, 4);
SegitigaSamaSisi segi3Sisi = new SegitigaSamaSisi("SamaSisi Baru",
8);
Persegi persegi = new Persegi("Papan Tulis", 10);
Lingkaran lingkaran = new Lingkaran("LingLing", 8);
System.out.printf("%s%n", segi3Siku.getNamaBentuk());
System.out.printf("Alas segitiga : %.1f%n", segi3Siku.getAlas());
System.out.printf("Tinggi segitiga : %.1f%n", segi3Siku.getTinggi());
System.out.printf("Luas segitiga : %.2f%n", segi3Siku.getLuas());
System.out.printf("Keliling segitiga : %.2f%n%n",
segi3Siku.getKeliling());
System.out.printf("%s%n", segi3Sisi.getNamaBentuk());
System.out.printf("Sisi segitiga : %.1f%n", segi3Sisi.getSisi());
System.out.printf("Luas segitiga : %.2f%n", segi3Sisi.getLuas());
System.out.printf("Keliling segitiga : %.2f%n%n",
segi3Sisi.getKeliling());
System.out.printf("%s%n", persegi.getNamaBentuk());

System.out.printf("Sisi persegi : %.1f%n", persegi.getSisi());


System.out.printf("Luas persegi : %.2f%n", persegi.getLuas());
System.out.printf("Keliling persegi : %.2f%n%n",
persegi.getKeliling());
System.out.printf("%s%n", lingkaran.getNamaBentuk());
System.out.printf("Jari-jari lingkaran : %.1f%n",
lingkaran.getJariJari());
System.out.printf("Luas lingkaran : %.2f%n", lingkaran.getLuas());
System.out.printf("Keliling lingkaran : %.2f%n%n",
lingkaran.getKeliling());
}
}



Langkahlangkah membuat program adalah sbb:
1. Buatlah sebuah interface bernama Bentuk2D pada package ddp2011.tutorial.bentuk2D yang
akan diimplements oleh kelas lain. Kelas ini memiliki tiga method yang tidak terimplementasi:
a. Method bernama getNamaBentuk yang mengembalikan sebuah String
b. Method bernama getKeliling yang mereturn double. Method ini dipanggil untuk
menghitung luas dari sebuah turunan kelas Bentuk2D
c. Method bernama getLuas yang mereturn double. Method ini dipanggil untuk
menghitung luas dari sebuah turunan kelas Bentuk2D
2. Buatlah kelas bernama Persegi pada package ddp2011.tutorial.bentuk2D yang meng
implements kelas Bentuk2D. Pada kelas ini terdapat variabel namaBentuk bertipe String dan
variabel sisi dengan tipe double. Buatlah juga halhal sebagai berikut:
a. Constructor yang menerima dua parameter. Parameter pertama adalah sebuah String
untuk mengatur nilai namaBentuk. Parameter kedua adalah sebuah double untuk
mengatur nilai sisi.
b. Method setter & getter untuk variabel sisi
c. Method getNamaBentuk serta implementasinya sehingga dihasilkan informasi nama
bentuk seperti pada Contoh Keluaran
d. Method getKeliling beserta implementasinya
e. Method getLuas beserta implementasinya
3. Buatlah kelas bernama Lingkaran pada package ddp2011.tutorial.bentuk2D yang meng
implements kelas Bentuk2D. Pada kelas ini terdapat variabel namaBentuk bertipe String dan
variabel jariJari dengan tipe double. Buatlah juga halhal sebagai berikut:

a. Constructor yang menerima dua parameter. Parameter pertama adalah sebuah String
untuk mengatur nilai namaBentuk. Parameter kedua adalah sebuah double untuk
mengatur nilai jariJari.
b. Method setter & getter untuk variabel jariJari
c. Method getNamaBentuk serta implementasinya sehingga dihasilkan informasi nama
bentuk seperti pada Contoh Keluaran
d. Method getKeliling beserta implementasinya
e. Method getLuas beserta implementasinya
4. Buatlah kelas abstract bernama Segitiga pada package ddp2011.tutorial.bentuk2D yang
mengimplements kelas Bentuk2D. Pada kelas ini terdapat variabel namaBentuk bertipe
String. Buatlah juga halhal sebagai berikut:
a. Constructor yang menerima satu parameter yaitu sebuah String untuk mengatur nilai
namaBentuk.
b. Method getNamaBentuk serta implementasinya sehingga dihasilkan informasi nama
bentuk seperti pada Contoh Keluaran
5. Buatlah kelas bernama SegitigaSamaSisi pada package ddp2011.tutorial.bentuk2D yang
mengextends kelas Segitiga. Pada kelas ini terdapat variabel sisi dengan tipe double.
Buatlah juga halhal sebagai berikut:
a. Constructor yang menerima dua parameter. Parameter pertama adalah sebuah String
untuk mengatur nilai namaBentuk. Parameter kedua adalah sebuah double untuk
mengatur nilai sisi. Panggillah constructor kelas Segitiga dengan memberikan
argumen namaBentuk
b. Method setter & getter untuk variabel sisi
c. Method getKeliling beserta implementasinya
d. Method getLuas beserta implementasinya. Petunjuk: gunakan aturan sinus untuk
membantu menemukan tinggi segitiga.
6. Buatlah kelas bernama SegitigaSikuSiku pada package ddp2011.tutorial.bentuk2D yang
mengextends kelas Segitiga. Pada kelas ini terdapat variabel alas dan tinggi dengan tipe
double. Buatlah juga halhal sebagai berikut:
a. Constructor yang menerima tiga parameter. Parameter pertama adalah sebuah String
untuk mengatur nilai namaBentuk. Parameter kedua adalah sebuah double untuk
mengatur nilai alas dan parameter ketiga adalah sebuah double untuk mengatur nilai

tinggi. Panggillah constructor kelas Segitiga dengan memberikan argumen


namaBentuk
b. Method setter & getter untuk variabel alas
c. Method setter & getter untuk variabel tinggi
d. Method getKeliling beserta implementasinya. Petunjuk : hitung dahulu hipotenusa
dari segitiga sikusiku
e. Method getLuas beserta implementasinya.
7. Jalankan kelas DemoInterface seperti yang sudah diberikan di atas untuk melihat hasilnya.

10. Tutorial I/O & Penanganan Eksepsi


Tujuan:
Mahasiswa dapat membaca dan menulis berkas teks
Mahasiswa memahami dan dapat menangkap eksepsi yang dapat muncul pada
program

Tutorial I/O & Penanganan Eksepsi : Membaca dan Menulis File


Pendahuluan
Bahasa pemrograman Java memberikan dukungan untuk membaca dan menulis Input/Output.
Sebagai contoh, kita bisa membuat program untuk membaca masukan dari keyboard, menulis
keluaran ke command line, membaca sebuah file, dan menulis ke sebuah file.
Java juga mendukung penanganan eksepsi yang mungkin terjadi di dalam program. Bila eksepsi tidak
ditangani dalam program, ada dua kemungkinan yang akan terjadi:

program tidak bisa dicompile, atau


ketika program berjalan dan mengalami eksepsi, program akan berhenti tanpa diinginkan

Terdapat dua jenis eksepsi dalam bahasa pemrograman Java:

Checked exception eksepsi yang mungkin terjadi dan Java mengharuskan kita mencegah
terjadinya eksepsi tersebut
Unchecked exception eksepsi yang mungkin terjadi, namun Java tidak mengharuskan kita
menangani eksepsi tersebut

Misalnya kita ingin membuka sebuah file, ada kemungkinan terjadi eksepsi terkait proses membuka
file tersebut. Oleh karena itu, Java meminta kita untuk menanganinya dengan menangkap eksepsi
yang mungkin terjadi. Bila kita tidak menanganinya, maka program kita akan gagal dicompile. Ini

adalah salah satu contoh checked exception.


Di bagian lain, misalnya program sedang melakukan operasi pembagian dua bilangan. Karena
kesalahan, program mencoba membagi sebuah bilangan dengan 0. Bila ini terjadi, program akan
berhenti dan memberikan kesalahan berupa divide by zero. Java tidak mengharuskan kita
menangkap eksepsi seperti ini, sehingga kita bisa mengcompile dan menjalankan program ini. Ini
adalah salah satu contoh unchecked exception. Beberapa contoh lain adalah berusaha
membaca/menulis array pada indeks di luar indeks maksimum/minimum array tersebut dan
membaca karakter bukan bilangan sebagai bilangan.
Penanganan sebuah eksepsi dilakukan dengan meletakkan potongan program yang dapat
menyebabkan eksepsi ke dalam sebuah blok try/catch. Berikut ini adalah contoh penanganan
eksepsi yang mungkin terjadi ketika mencoba membuka file

try{
File inputFile = new File(inputFileName);
...
...
}
catch(FileNotFoundException e){
// disini dilakukan apa yang harus dilakukan bila terjadi eksepsi
// pada contoh ini program memberi kabar bahwa
// file yang ingin dibuka oleh program tidak bisa ditemukan
}

System.out.println("File " + inputFileName + " tidak ditemukan.");


Membaca file dan menulisk hasilnya ke file lain

Kali ini kalian akan berlatih membaca file, melakukan operasi terhadap isi file tersebut, dan
menuliskan hasil akhir ke sebuah file lain.

Terdapat sebuah file bernama NilaiMhs.txt yang berisi nama mahasiswa, jumlah SKS yang telah
diambilnya, dan total nilai yang sudah diperolehnya.
Contoh isi file tersebut:

Ani 27 83.7
Budi 21 28.35
Chandra 96 182.4


Program kalian harus menghitung IPK setiap mahasiswa dengan cara membagi total nilai dengan
jumlah SKS mahasiswa tersebut. Berdasarkan hasil IPK, program harus menulis ke sebuah file
Peringatan.txt untuk kasus sbb:

Bila IPK kurang dari 1.5 dan jumlah SKS kurang dari 30
Bila IPK kurang dari 1.75 dan jumlah SKS kurang dari 60
Bila IPK kurang dari 2.0 dan jumlah SKS lebih dari 60

Informasi yang ditulis program dalam file Peringatan.txt adalah nama mahasiswa, jumlah SKS, dan
IPK mahasiswa tersebut.

Format Masukan
Masukan dibaca dari file NilaiMhs.txt

Format Keluaran
Keluaran ditulis ke sebuah file Peringatan.txt bagi mahasiswa yang memenuhi syarat untuk diberi
peringatan.

Masukan (dari file NilaiMhs.txt)


Ani2783.7
Budi2128.35
Chandra96182.4
Donal75135.4
Erwin9818o.3
Fifi6496.73
Gober6090.0
Harry102217.26
Intan24Ao.8
Joko5486.4
Kiki83I7B.45
Lusi2943.79


Contoh Keluaran (pada file Peringatan.txt)
Budi211.35
Chandra961.90
Donal751.81
Fifi641.51
Gober601.50


Langkahlangkah membuat program adalah sbb:
1. Buat sebuah kelas dengan nama DemoBacaTulisFilepada package ddp2011.demo
2. Dalam method main pada kelas tersebut. Langkah 3 7 di bawah ini dilakukan dalam method
main.
3. Buat sebuah variabel bilangan bulat untuk menyimpan nilai SKS. Buat juga dua variabel bilangan
desimal untuk menyimpan total nilai mahasiswa dan IPK.
4. Bukalah file bernama NilaiMhs.txt menggunakan objek File

5. Buatlah sebuah objek Scanner yang menerima masukan dari objek File yang telah dibuat di
langkah 4
6. Buatlah sebuah objek kelas PrintWriter untuk menulis ke file Peringatan.txt
7. Operasi ini dilakukan selama isi file NilaiMhs.txt masih ada:
a. Baca satu baris isi file yang berisi nama mahasiswa, jumlah SKS, dan total nilainya dengan
menggunakan objek Scanner
b. Hitung IPK mahasiswa tersebut
c. Bila IPK mahasiswa termasuk ke dalam kasus yang harus diberi peringatan, tulis nama
mahasiswa tersebut, jumlah SKS, dan IPKnya ke file Peringatan.txt. Penulisan dilakukan
dengan menggunakan objek PrintWriter
8. Simpan program tersebut.
9. Compile dan jalankan untuk melihat hasilnya.

Halhal yang perlu diperhatikan


Pada langkahlangkah pengerjaan di atas bisa terjadi kemunculan eksepsi sbb:

Pada langkah 5 dan 6 bisa terjadi eksepsi FileNotFoundException. Eksepsi ini terjadi bila
program mencoba membuka file yang tidak bisa ditemukan. Eksepsi ini adalah checked
exception, anda harus menanganinya supaya program anda bisa dicompile

Pada langkah 7.a bisa terjadi eksepsi NumberFormatException. Eksepsi ini terjadi bila
program mencoba membaca karakterkarakter bukan bilangan sebagai sebuah bilangan.
Eksepsi ini adalah unchecked exception. Program tetap bisa dicompile dan dijalankan, namun
bila eksepsi ini muncul dan tidak ditangani, program akan berhenti secara tidak diinginkan

Tanganilah eksepsieksepsi tersebut sehingga program anda dapat berjalan sebagaimana mestinya.

11. Tutorial Pengurutan & Pencarian



Tujuan:
Mahasiswa mengenal dan memahami beberapa algoritma pengurutan dan pencarian
Mahasiswa dapat menerapkan algoritma pengurutan dan pencarian dalam program

Tutorial Sorting dan Searching Data Dengan Insertion Sort & Binary Search

Pada tutorial ini anda diminta untuk melakukan implementasi algoritma sorting dan searching.
Terdapat masukan berupa katakata dengan keadaan acak. Anda diminta untuk mengurutkan data
tersebut dan dan menampilkan ke layar. Metode yang digunakan untuk mengurutan katakata ini
adalah metode Insertion Sort. Selain itu program juga dapat melakukan pencarian terhadap katakata
yang ada dengan menggunakan Binary Search.


Pada saat program dijalankan, maka program akan meminta user untuk memasukkan katakata acak.
Selanjutnya program akan melakuan pengurutan dengan menggunakan Insertion Sort dan
menampilkan ke layar. Kemudian program akan meminta masukan dari user kata yang akan dicari
dalam data yang telah terurut. Bila kata tersebut ada dalam data maka akan menampilkan pesan
Angka zzz ada dalam data pada indeks x


Contoh running program 1
Masukkanurutanangkaacakyangakandiurutkan:
115413289034
281113345490
Masukkanangkayangakandicari:
2
Angka1adadalamdatapadaindeks1

Contoh running program 2


Masukkanurutanangkaacakyangakandiurutkan:
115413289034
281113345490
Masukkanangkayangakandicari:
15
Angka15tidakterdapatpadadata
zzzz=Masukanyangdimasukkanolehuser

Langkahlangkah membuat program adalah sbb:



1. Buatlah sebuah kelas dengan nama DemoInsertionSortpada package ddp2011.demo
2. Selanjutnya buatlah kedua method static dibawah ini :
a. Method bernama insertionSort yang menerima sebuah String array dan
mengembalikan String array yang sudah terurut. Dalam method ini, implementasikanlah
algoritma insertion sort yang bisa kalian pelajari di buku/slide kuliah. Gunakan method
compareTo dari objek String untuk membanding satu String dengan String yang lain
b. Method bernama binarySearch yang menerima sebuah String array dan sebuah String
yang akan dicari. Method ini akan mengembalikan indeks String yang dicari tersebut
berada. Bila String yang dicari tidak ditemukan, maka method akan mengembalikan nilai
1. Implementasikanlah method ini seperti yang kalian pelajari pada buku/slide kuliah.
Gunakan method compareTo dari objek String untuk membandingkan sebuah String
dengan String yang lain
3. Buatlah method main yang akan melakukan eksekusi terhadap masukan yang diberikan oleh
user
4. Baca masukan dari user yang berupa data acak dengan tipe data String menggunakan Scanner
5. Selanjutnya pecah masukan tersebut menjadi sebuah String array dengan menggunakan method
split()
6. Lakukan pengurutan array tersebut dengan memanggil method insertionSort
7. Tampilkan hasil pengurutan ke layar

8. Selanjutnya, baca masukan user yang mencari data dalam array yang telah terurut dengan
Scanner
9. Panggil method binarySearch untuk mencari dimana letak/indeks dari data yang dicari
10. Bila data yang dicari ada, tampilkan indeks dari data tersebut. Apabila tidak ada, munculkan pesan
bahwa data yang dicari tidak ditemukan.
11. Simpan program tersebut
12. Compile dan jalankan untuk melihat hasilnya

Tutorial Sorting dan Searching Data Dengan Selection Sort & Binary Search
(Tambahan)

Kali ini anda diminta menggunakan metode Selection Sort untuk mengurutkan katakata seperti pada
tutorial di atas. Keseluruhan dari program kurang lebih sama seperti pada tutorial di atas. Bedanya
adalah method yang diimplementasikan sekarang bernama selectionSort.

Contoh running program 1


Masukkanurutanangkaacakyangakandiurutkan:
115413289034
281113345490
Masukkanangkayangakandicari:
2
Angka1adadalamdatapadaindeks1

Contoh running program 2


Masukkanurutanangkaacakyangakandiurutkan:
115413289034
281113345490
Masukkanangkayangakandicari:
15
Angka15tidakterdapatpadadata
zzzz=Masukanyangdimasukkanolehuser

Langkahlangkah membuat program adalah sbb:


1. Buatlah sebuah kelas dengan nama DemoSelectionSortpada package ddp2011.demo
2. Selanjutnya buatlah kedua method static dibawah ini :
a. Method bernama selectionSort yang menerima sebuah String array dan
mengembalikan String array yang sudah terurut. Dalam method ini, implementasikanlah
algoritma selection sort yang bisa kalian pelajari di buku/slide kuliah. Gunakan method
compareTo dari objek String untuk membanding satu String dengan String yang lain
b. Method bernama binarySearch yang menerima sebuah String array dan sebuah String
yang akan dicari. Method ini akan mengembalikan indeks String yang dicari tersebut
berada. Bila String yang dicari tidak ditemukan, maka method akan mengembalikan nilai
1. Implementasikanlah method ini seperti yang kalian pelajari pada buku/slide kuliah.

3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

Gunakan method compareTo dari objek String untuk membandingkan sebuah String
dengan String yang lain
Buatlah method main yang akan melakukan eksekusi terhadap masukan yang diberikan oleh
user
Baca masukan dari user yang berupa data acak dengan tipe data String menggunakan Scanner
Selanjutnya pecah masukan tersebut menjadi sebuah String array dengan menggunakan method
split()
Lakukan pengurutan array tersebut dengan memanggil method selectionSort
Tampilkan hasil pengurutan ke layar
Selanjutnya, baca masukan user yang mencari data dalam array yang telah terurut dengan
Scanner
Panggil method binarySearch untuk mencari dimana letak/indeks dari data yang dicari
Bila data yang dicari ada, tampilkan indeks dari data tersebut. Apabila tidak ada, munculkan pesan
bahwa data yang dicari tidak ditemukan.
Simpan program tersebut
Compile dan jalankan untuk melihat hasilnya

12. Tutorial IOStream & Multithreading



Tujuan:
Mahasiswa mengenal dan memahami konsep IO stream
Mahasiswa dapat menggunakan konsep multithreading dalam program

Tutorial Enkripsi
Pada tutorial kali ini kalian diminta untuk menerapkan konsep multithreading terhadap proses
pengenkripsian/pendekripsian file gambar. Pembacaan dan penulisan file gambar dilakukan
menggunakan konsep Binary IO. Pengenkripsian dan pendekripsian menggunakan aturan Caesar
cipher seperti yang dijelaskan pada buku/slide namun bedanya pada tutorial kali ini proses
enkripsi/dekripsi tersebut menggunakan kunci yang berupa file gambar juga.
Untuk melihat efek multithreading pada tutorial ini kalian diberikan template GUI yang sudah
terimplementasi fungsifungsinya. Bila project yang bernama IOStream dibuka pada Netbeans,
kalian akan menemukan sebuah package yang bernama stream yang memiliki tiga buah file:
IOStream.java, IOStreamAboutBox.java, dan IOStreamView.java. Ketika kalian jalankan
program sebagaimana adanya (dengan merun kelas IOStream.java) dan melakukan proses
enkripsi gambar, ada dua hal yang bisa kalian perhatikan.
1. Kalian tidak bisa menekan tomboltombol lain selama proses enkripsi/dekripsi belum selesai
2. Pergerakan progress bar yang menunjukkan persentasi progress tidak terupdate dengan baik.
Penjelasan untuk poin 1 disebabkan karena proses enkripsi/dekripsi menggunakan thread utama
sehingga tidak ada proses lain yang bisa dilakukan selama thread utama tersebut belum selesai.
Terkait penjelasan untuk poin 2, hal tersebut disebabkan proses update progress bar tidak thread
safe sehingga hanya bisa berjalan dengan baik dalam lingkungan multithreading saja (penjelasan
lebih jauh terhadap poin 2 bisa didapatkan di kuliah lanjut).

Agar permasalahan pada poin 1 dan 2 di atas bisa diatasi, ubahlah implementasi proses
pengenkripsian
yang
ada
di
dalam
method
enkrip1ActionPerformed,
enkrip2ActionPerformed, dekrip1ActionPerformed dan dekrip2ActionPerformed pada
kelas IOStreamView.java. Proses tersebut harus diletakkan dalam sebuah objek Runnable yang
selanjutnya akan dijalankan melalui objek Thread.
Bila kalian berhasil melakukannya, ketika proses enkripsi/dekripsi berjalan kalian masih bisa
memilih file lain untuk di enkripsi/dekripsi dan progress bar akan memberikan update progress
dengan lancar. Selamat mencoba
NB: Yang diikut sertakan pada tutorial ini (dalam file Project&Gambar.zip):
1. Project Netbeans bernama IOStream
2. Dua buah file gambar bernama PIA03149.tif dan PIA00342.tif sebagai file contoh untuk
enkripsi dan dekripsi. File PIA00342.tif digunakan sebagai kunci untuk enkripsi dan dekripsi
disebabkan ukurannya lebih besar dari file PIA03149.tif. (Asumsi pada proses
enkripsi/dekripsi adalah file kunci berukuran lebih besar dari file yang akan di
enkrip/dekrip).

Bab IX Tata Tertib Perkuliahan

Kehadiran

Dosen akan berusaha tepat waktu, oleh karena itu Anda juga diminta untuk tepat waktu.
Anda bertanggung jawab sendiri terhadap kehadirannya di dalam kelas. Perhatikan bahwa UI
menetapkan aturan minimal 75% kehadiran untuk dapat diijinkan mengikuti ujian akhir
semester (UAS).

Keterlambatan
Keterlambatan hadir saat kuliah mengikuti aturan yang berlaku. Dosen berhak melarang
mahasiswa yang terlambat untuk masuk ke dalam kelas. Seluruh kuis, latihan dan tugas wajib
dikerjakan dan dikumpulkan pada waktunya. Tugas yang terlambat dikumpulkan tidak akan
diterima. Tidak ada ujian susulan kecuali dengan alasan yang sangat kuat. Evaluasi latihan,
kuis atau tugas diharapkan dapat diberikan kepada mahasiswa dalam waktu 2 pekan.

Kejujuran Akademis
Kecurangan tidak akan ditoleransi. Kecurangan baik dalam pengerjaan ujian maupun tugas
akan dihukum yakni mendapatkan nilai E untuk matakuliah ini.

Anda boleh berdiskusi mengenai PR/Tugas dalam kelompok, tetapi wajib menuliskan solusi
sendiri dan menuliskan nama semua kolaborator (teman yang diajak berdiskusi untuk
menyelesaikan soal), serta dilarang menyontek, menyalin pekerjaan orang lain,
memperlihatkan pekerjaan kepada orang lain, baik untuk disalin maupun tidak. Anda boleh
menggunakan referensi dari luar kelas, misalnya Internet, tetapi wajib menuliskan solusi
dalam katakata sendiri serta mencantumkan sumbernya.

Biasanya, tidak ada seorangpun yang memulai semester dengan niat curang. Mahasiswa
berbuat curang karena dia tertinggal dalam pelajaran atau terlambat dalam memulai
pengerjaan PR/Tugas, kemudian menjadi panik. Sebagian berbuat demikian karena segan
dan malu (termasuk malu mengakui bahwa ia tidak tahu) untuk bertanya dan berdiskusi
dengan dosen atau asisten matakuliah. Ketidakpahaman lebih baik diselesaikan di awal
daripada Anda harus menanggung akibatnya. Bahkan, apabila Anda memang bersalah karena
tertinggal dalam pelajaran, tetap jangan malu untuk datang bertanya dan meminta
pertolongan. Ingat, sangat mungkin teman Anda juga mengalami hal yang sama dengan
Anda. Jadi jangan ragu untuk bertanya. Dosen dan asisten dibayar untuk membantu Anda
memahami materi pengajaran.

You might also like