• Tidak ada hasil yang ditemukan

KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari hasil analisis dari Penerapan Algoritma Maximum-Flow dalam optimasi volume air pada pipa S-1 Ilmu Komputer USU dengan algoritma yang telah dilakukan, dapat disimpulkan bahwa:

1. Untuk Penerapan algoritma Maximum-Flow, dalam pipa air S-1 ilmu Komputer USU.

2. Supaya hasil optimum mendekati kondisi nyata di lapangan, perlu ditambah dengan analisis mengenai bagaimana aliran air yang ada di S-1 ilmu Komputer USU.

Adapun saran yang dapat penulis berikan untuk mengembangkan penelitian ini adalah sebagai berikut:

Penentuan algoritma yang digunakan untuk permasalah maximum flow sangatlah bergantung pada graf yang diberikan dan permasalan spesifik dari graf yang diberikan. Algoritma yang dipakai bergantung pada jenis permasalahan pada penerapan algoritma maximum flow dalam optimasi volume air pada pipa air S-1 Ilmu Komputer USU.

DAFTAR PUSTAKA

Bagus S, 2010. Kaji Eksperimental Rugi Tekan (Head Losses) Dan Faktor

Gesekan Yang Terjadi Pada Pipa Lurus Dan Belokan, Undip, Semarang. Evi, S. 2010, Pengembangan Simulasi Aliran Air Pada Saluran Drainase

Kota Menggunakan Pemodelan Network Flow. Program Magister Bidang Keahlian Telematik Jurusan Teknik Elektro Fakultas Teknologi Industri Institut Teknologi Sepuluh November Surabaya.

Fakhri, 2008, Penerapan Algoritma Djikstra Dalam Pencarian Solusi Maximu-Flow, Jurusan Teknik Informatika Sekolah Tinggi Elektro Dan Informatika ITB, Bandung.

Fathima, T. 2013, Penyelesaian Masalah Aliran Maksimum Menggunakan Edmons

Karp Algorithm. Universitas Negeri Malang

Habibi, L. 2008 Pemodelan Network-Flow Analysis Sistem Distribusi Air Menggunakan Algoritma Genetika-Metode Newton. Tesis Magister. Institut Teknologi Bandung.

Hayati, Izza, Dkk. 2010. Penyelesaian Maximum-Flow Problem Pada Distribusi Semen Di Pt. Jawa Berkat Utama. Laporan. Universitas Negeri Malang. Email. Elizabeth Dan Wuntikatri. Inu 2007. Penerapan Graf Kompatibel Dan Maximum-Flow Dalam Teori Graf Pada Lintasan Kendaraan

Laporan.

Joesron, L. 1992 “Banjir Rencana Untuk Bangunan Air”. Departemen Pekerjaan Umum

Kevin, T. 2013, Analisis Kompleksitas Algoritma Untuk Menyelesaikan Oktaviana, S, S. 2007. Universitas Negri Medan. Aplikasi Teori Graf Dengan Menggunakan Pipa Pdam Daerah Sawojajar Blok H-1.

Putra, A, P. 2010, Eksplorasi Kerja Maximum Edmons Karb Dalam Meneyelesaikan Maximum Flow Problem. Skripsi Malang Universitas Negri Malang. Rossen, K.H. 2000. Discreate Mathematics And Its Aplications.: Mc Graw Hill, Inc Newyork

Rosyida. 2006 Penerapan Model Maximum-Flow Dalam Teori Graf Pada 1990 Willson. Graf An Introduction Approach Canada.

Sanjaya, D. 2014. Implementasi Mobile Tracking Menggunakan Metode Ant Colony Optimization dan Google Maps Api. Program Studi Ekstensi S1 Ilmu Komputer Fakultas Ilmu Komputer Dan Teknologi Informasi Universitas Sumatera Utara Medan.

Thesa, F. 2013, Pencarian Aliran Maksimum Dengan Algoritma Ford-Fulkerson (Studi Kasus Pada Jaringan Listrik Di Kota Tegal). Skripsi. Jurusan

Matematika Fakultas Matematika Dan Ilmu Pengetahuan Alam Universitas Negeri Semarang

LISTING PROGRAM

package app.maximumflow; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Color; import java.awt.Font; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.JPasswordField; import javax.swing.JButton;

import net.java.balloontip.BalloonTip; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.sql.Blob; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JScrollPane; import javax.swing.JTable; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.awt.Toolkit; import java.io.File; import java.io.FileInputStream;

private JPanel contentPane; private JLabel lblBackgrond; private JPanel panel;

private JLabel label_1; private JLabel lblVari1; private JButton btnUpdate; private JButton btnKeluar; private JTextField txtVar1; private BalloonTip tooltip; private JTextField txtVar2; private JLabel lblVariabel; private JTextField txtVar3; private JLabel lblVariabel_1; private JLabel lblHasil;

private JTextField txtNilaiTerkecil; private JScrollPane scrTabel; private JTable table;

DefaultTableModel tabelModel;

String data[] = { "U", "V","W","X","Y", "Nilai.Min" }; private JButton btnHit;

private JLabel lblNilaiMax; private JTextField txtNilaiMax; private JButton btnUpdateV; private JButton btnUpdateW;

private JButton btnHitung; private JTextField txtVar4; private JLabel lblX;

private JButton btnUpdateX; private JTextField txtVar5; private JLabel lblY;

private JButton btnUpdateY; private JLabel label;

private JLabel label_2;

private JFileChooser fc = new JFileChooser(); Blob blob;

BufferedImage img; /**

* Launch the application. */

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() { public void run() {

try {

MaxFlow frame = new MaxFlow(); frame.setVisible(true);

} catch (Exception e) { e.printStackTrace(); }

} }); }

/**

* Create the frame. */ public MaxFlow() { setIconImage(Toolkit.getDefaultToolkit().getImage(MaxFlow.class.getRes ource("/img/sl.png"))); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 417, 470);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane);

contentPane.setLayout(null); setLocationRelativeTo(null);

JPanel panel_1 = new JPanel();

panel_1.setBackground(Color.BLACK); panel_1.setBounds(0, 434, 571, 10); contentPane.add(panel_1);

txtVar1 = new JTextField();

txtVar1.addKeyListener(new KeyAdapter() { @Override

public void keyTyped(KeyEvent e) {

btnHit.setEnabled(false); btnHitung.setEnabled(true); } }); txtVar1.requestFocus(); txtVar1.addFocusListener(new FocusAdapter() { @Override

public void focusGained(FocusEvent e) {

tooltip = new BalloonTip(txtVar1, "Masukan kapasitas");

}

@Override

public void focusLost(FocusEvent e) { tooltip.closeBalloon();

} });

txtVar1.setBackground(Color.BLACK); txtVar1.setBounds(50, 101, 46, 25); contentPane.add(txtVar1);

txtVar1.setColumns(10);

JLabel lblUsername = new JLabel("Proses langkah setiap iterasi pada maximum-flow :");

lblUsername.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

lblUsername.setForeground(Color.WHITE); lblUsername.setBounds(25, 248, 302, 25); contentPane.add(lblUsername);

lblVari1 = new JLabel("U :");

lblVari1.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); lblVari1.setForeground(Color.WHITE);

lblVari1.setBounds(25, 101, 69, 25); contentPane.add(lblVari1);

btnUpdate = new JButton("Update"); btnUpdate.setEnabled(false);

btnUpdate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) {

//mengambil nilai string txt1 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

a = Integer.parseInt(txtVar1.getText());

//mengambil nilai string txt1 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

b = Integer.parseInt(txtNilaiTerkecil.getText()); //menjumlahkan variabel a dan b kemudian menampungnya di variabel c

c = a-b;

//mengubah data integer ke string di variabel hasil String hasil = String.valueOf(c);

//menampilkan string hasil di label Hasil txtVar1.setText(hasil);

btnHit.setEnabled(true); btnHitung.setEnabled(false); }

});

btnUpdate.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); btnUpdate.setForeground(new Color(255, 255, 255));

btnUpdate.setBackground(new Color(0, 0, 0)); btnUpdate.setBounds(108, 101, 86, 25);

contentPane.add(btnUpdate);

btnUpdateV.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

int a,b,c;

//mengambil nilai string txt2 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

a = Integer.parseInt(txtVar2.getText());

//mengambil nilai string txt2 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

b = Integer.parseInt(txtNilaiTerkecil.getText()); //menjumlahkan variabel a dan b kemudian menampungnya di variabel c

c = a-b;

//mengubah data integer ke string di variabel hasil String hasil = String.valueOf(c);

//menampilkan string hasil di label Hasil txtVar2.setText(hasil);

} });

btnUpdateV.setEnabled(false);

btnUpdateV.setForeground(Color.WHITE);

btnUpdateV.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

btnUpdateV.setBackground(Color.BLACK); btnUpdateV.setBounds(108, 138, 86, 25);

contentPane.add(btnUpdateV);

btnUpdateW = new JButton("Update");

btnUpdateW.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

int a,b,c;

//mengambil nilai string txt3 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

a = Integer.parseInt(txtVar3.getText());

//mengambil nilai string txt3 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

b = Integer.parseInt(txtNilaiTerkecil.getText()); //menjumlahkan variabel a dan b kemudian menampungnya di variabel c

c = a-b;

//mengubah data integer ke string di variabel hasil String hasil = String.valueOf(c);

//menampilkan string hasil di label Hasil txtVar3.setText(hasil);

} });

btnUpdateW.setEnabled(false);

btnUpdateW.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

btnUpdateW.setBackground(Color.BLACK); btnUpdateW.setBounds(287, 101, 77, 25); contentPane.add(btnUpdateW);

lblVariabel = new JLabel("V :");

lblVariabel.setForeground(Color.WHITE);

lblVariabel.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

lblVariabel.setBounds(25, 139, 18, 25); contentPane.add(lblVariabel);

txtVar2 = new JTextField();

txtVar2.addFocusListener(new FocusAdapter() { @Override

public void focusGained(FocusEvent e) {

tooltip = new BalloonTip(txtVar2, "Masukan kapasitas");

}

@Override

public void focusLost(FocusEvent e) { tooltip.closeBalloon();

}); txtVar2.setForeground(Color.WHITE); txtVar2.setColumns(10); txtVar2.setBackground(Color.BLACK); txtVar2.setBounds(50, 139, 46, 25); contentPane.add(txtVar2);

lblVariabel_1 = new JLabel("W :");

lblVariabel_1.setForeground(Color.WHITE);

lblVariabel_1.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

lblVariabel_1.setBounds(206, 101, 27, 25); contentPane.add(lblVariabel_1);

txtVar3 = new JTextField();

txtVar3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {

} });

txtVar3.addFocusListener(new FocusAdapter() { @Override

tooltip = new BalloonTip(txtVar3, "Masukan kapasitas");

}

@Override

public void focusLost(FocusEvent e) { tooltip.closeBalloon(); } }); txtVar3.setForeground(Color.WHITE); txtVar3.setColumns(10); txtVar3.setBackground(Color.BLACK); txtVar3.setBounds(229, 101, 46, 25); contentPane.add(txtVar3);

lblHasil = new JLabel("Mencari Nilai Mininum :"); lblHasil.setForeground(Color.WHITE);

lblHasil.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); lblHasil.setBounds(25, 213, 147, 25);

contentPane.add(lblHasil);

txtNilaiTerkecil = new JTextField(); txtNilaiTerkecil.setEnabled(false);

txtNilaiTerkecil.setForeground(Color.WHITE); txtNilaiTerkecil.setColumns(10);

txtNilaiTerkecil.setBackground(Color.BLACK); txtNilaiTerkecil.setBounds(175, 213, 69, 25); contentPane.add(txtNilaiTerkecil);

btnHit = new JButton("Iterasi[n]"); btnHit.setEnabled(false);

btnHit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

Vector<Object> baris=new Vector<Object>(6); baris.add(txtVar1.getText()); baris.add(txtVar2.getText()); baris.add(txtVar3.getText()); baris.add(txtVar4.getText()); baris.add(txtVar5.getText()); baris.add(txtNilaiTerkecil.getText()); tabelModel.addRow(baris); // NoIterasi(); hitMax(); bersihkan(); } }); btnHit.setForeground(Color.WHITE);

btnHit.setBackground(Color.BLACK); btnHit.setBounds(259, 213, 105, 25); contentPane.add(btnHit);

lblNilaiMax = new JLabel("Nilai Maximum :"); lblNilaiMax.setForeground(Color.WHITE);

lblNilaiMax.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

lblNilaiMax.setBounds(28, 394, 100, 25); contentPane.add(lblNilaiMax);

txtNilaiMax = new JTextField(); txtNilaiMax.setEnabled(false); txtNilaiMax.setForeground(Color.WHITE); txtNilaiMax.setColumns(10); txtNilaiMax.setBackground(Color.BLACK); txtNilaiMax.setBounds(133, 394, 125, 25); contentPane.add(txtNilaiMax);

btnHitung = new JButton("Hitung");

btnHitung.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {

int n2= (Integer.parseInt(txtVar2.getText())); int n3= (Integer.parseInt(txtVar3.getText())); // int n4= (Integer.parseInt(txtVar4.getText())); //int n5= (Integer.parseInt(txtVar5.getText())); int[] nilai = {n1,n2,n3}; int min=1000;

for (int a = 0; a < nilai.length;a++){ //System.out.println("1."+a); if (nilai[a] < min){ //System.out.println("2."+a); min=nilai[a]; //System.out.println("3."+a); } } txtNilaiTerkecil.setText("" + min); aktifkan(); } }); btnHitung.setForeground(Color.WHITE);

btnHitung.setBackground(Color.BLACK); btnHitung.setBounds(224, 175, 140, 25); contentPane.add(btnHitung);

scrTabel = new JScrollPane();

scrTabel.setBackground(new Color(60, 179, 113)); scrTabel.setBounds(25, 275, 340, 107);

contentPane.add(scrTabel);

tabelModel = new DefaultTableModel(null, data); table = new JTable();

table.setBackground(Color.WHITE);

table.addMouseListener(new MouseAdapter() { @Override

public void mouseClicked(MouseEvent me) { int pilih = table.getSelectedRow(); if (pilih < 0) {

return; }

String var1 = (String) tabelModel.getValueAt(pilih, 0);

String var2 = (String) tabelModel.getValueAt(pilih, 1);

txtVar2.setText(var2);

String var3 = (String) tabelModel.getValueAt(pilih, 2);

txtVar3.setText(var3);

String var4 = (String) tabelModel.getValueAt(pilih, 3);

txtVar4.setText(var4);

String var5 = (String) tabelModel.getValueAt(pilih, 4);

txtVar5.setText(var5);

String hasil = (String) tabelModel.getValueAt(pilih, 5); txtNilaiTerkecil.setText(hasil); } }); table.setModel(tabelModel); scrTabel.setViewportView(table);

btnKeluar = new JButton("Keluar"); btnKeluar.setBounds(278, 394, 86, 25); contentPane.add(btnKeluar);

btnKeluar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {

Keluar();

} });

btnKeluar.setForeground(Color.WHITE);

btnKeluar.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); btnKeluar.setBackground(Color.BLACK);

lblX = new JLabel("X :");

lblX.setForeground(Color.WHITE);

lblX.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); lblX.setBounds(206, 138, 27, 25);

contentPane.add(lblX);

txtVar4 = new JTextField();

txtVar4.addFocusListener(new FocusAdapter() { @Override

public void focusGained(FocusEvent e) {

tooltip = new BalloonTip(txtVar4, "Masukan kapasitas");

}

public void focusLost(FocusEvent e) { tooltip.closeBalloon(); } }); txtVar4.setForeground(Color.WHITE); txtVar4.setColumns(10); txtVar4.setBackground(Color.BLACK); txtVar4.setBounds(229, 138, 46, 25); contentPane.add(txtVar4);

btnUpdateX = new JButton("Update");

btnUpdateX.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

int a,b,c;

//mengambil nilai string txt4 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

a = Integer.parseInt(txtVar4.getText());

//mengambil nilai string txt4 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

b = Integer.parseInt(txtNilaiTerkecil.getText()); //menjumlahkan variabel a dan b kemudian menampungnya di variabel c

c = a-b;

String hasil = String.valueOf(c);

//menampilkan string hasil di label Hasil txtVar4.setText(hasil);

} });

btnUpdateX.setForeground(Color.WHITE);

btnUpdateX.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

btnUpdateX.setEnabled(false);

btnUpdateX.setBackground(Color.BLACK); btnUpdateX.setBounds(287, 138, 77, 25); contentPane.add(btnUpdateX);

lblY = new JLabel("Y :");

lblY.setForeground(Color.WHITE);

lblY.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); lblY.setBounds(25, 176, 27, 25);

contentPane.add(lblY);

txtVar5 = new JTextField();

txtVar5.addFocusListener(new FocusAdapter() { @Override

tooltip = new BalloonTip(txtVar5, "Masukan kapasitas");

}

@Override

public void focusLost(FocusEvent e) { tooltip.closeBalloon(); } }); txtVar5.setForeground(Color.WHITE); txtVar5.setColumns(10); txtVar5.setBackground(Color.BLACK); txtVar5.setBounds(50, 176, 46, 25); contentPane.add(txtVar5);

btnUpdateY = new JButton("Update");

btnUpdateY.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {

int a,b,c;

//mengambil nilai string txt5 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

a = Integer.parseInt(txtVar5.getText());

//mengambil nilai string txt5 dan mengubahnya menjadi tipe integer kemudian menampungnya di variabel a

//menjumlahkan variabel a dan b kemudian menampungnya di variabel c

c = a-b;

//mengubah data integer ke string di variabel hasil String hasil = String.valueOf(c);

//menampilkan string hasil di label Hasil txtVar5.setText(hasil);

} });

btnUpdateY.setForeground(Color.WHITE);

btnUpdateY.setFont(new Font("Comic Sans MS", Font.BOLD, 12));

btnUpdateY.setEnabled(false);

btnUpdateY.setBackground(Color.BLACK); btnUpdateY.setBounds(108, 175, 86, 25); contentPane.add(btnUpdateY);

lblBackgrond = new JLabel(""); lblBackgrond.setIcon(new

ImageIcon(Main.class.getResource("/img/wallpaper-blankonaseli212.png"))); lblBackgrond.setBounds(0, 86, 415, 346);

contentPane.add(lblBackgrond);

panel.setBackground(Color.BLACK); panel.setBounds(0, 0, 571, 89);

contentPane.add(panel); panel.setLayout(null);

label_1 = new JLabel(""); label_1.setIcon(new

ImageIcon(Main.class.getResource("/img/usu.png"))); label_1.setBounds(12, 0, 81, 91);

panel.add(label_1);

label = new JLabel("SIMULASI PIPA AIR MENGGUNAKAN \n");

label.setForeground(Color.WHITE);

label.setFont(new Font("Comic Sans MS", Font.BOLD, 14)); label.setBounds(105, 12, 288, 37);

panel.add(label);

label_2 = new JLabel("ALGORITMA MAXIMUM-FLOW"); label_2.setForeground(Color.WHITE);

label_2.setFont(new Font("Comic Sans MS", Font.BOLD, 14)); label_2.setBounds(105, 40, 255, 37);

}

void Keluar(){ try {

int reply = JOptionPane.showConfirmDialog (this, "Yakin Mau Logout?", "Sistem - Keluar",

JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (reply == JOptionPane.YES_OPTION) {

setVisible (false); //Menyembunyikan Frame.

dispose(); //Membersihkan Resource dari system memori

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Membebaskan aplikasi dari memori

//System.exit (0); //Keluar dari Aplikasi. }

}

catch (Exception ex) {

System.out.println(ex); }

void hitMax(){

int jumlahBaris = tabelModel.getRowCount(); int x = 0;

int y;

for (int i=0; i<jumlahBaris; i++){

y = Integer.parseInt(tabelModel.getValueAt(i, 5).toString()); x = x + y; } txtNilaiMax.setText(String.valueOf(x)); } void bersihkan(){ txtVar1.setText(""); txtVar2.setText(""); txtVar3.setText(""); txtVar4.setText(""); txtVar5.setText(""); txtNilaiTerkecil.setText(""); txtVar1.requestFocus(); } void NoIterasi(){ int brs = tabelModel.getRowCount();

for(int i=0;i<brs;i++){

String no = String.valueOf(i+1); tabelModel.setValueAt(no+".",i,0); }

}

public static Object neighbors(int x, int[][] capacities) { // TODO Auto-generated method stub

return null; } void aktifkan(){ btnUpdate.setEnabled(true); btnUpdateV.setEnabled(true); btnUpdateW.setEnabled(true); btnUpdateX.setEnabled(true); btnUpdateY.setEnabled(true); btnHitung.setEnabled(false); } }

CURRICULUM VITAE

Nama : NURUL HIKMAH NASUTION

Alamat Sekarang : Jalan Perjuangan No 18 C, Kec. Setia Budi Kota Medan

Alamat Orang Tua : Jalan Printis Kemerdekaan Kec.Lima Puluh Kel.Empat Negri Dusun VII No 12. Kab.Batu Bara

Telp/ HP : 087868761654

Email : nurulhikmahnst@gmail.com

Riwayat Pendidikan:

1998 – 2004 MADRASAH IBTIDAIYAH NEGRI(MIN) KUALA GUNUNG 2004 – 2007 MADRASAH TSANAWIYAH(MTS) CIPTA SIMPANG DOLOK 2007 – 2010 MADRASAH ALIYAH NEGRI(MAN) LIMA PULUH

Keahlian/kursus yang diikuti: Keahlian Bahasa Pemrograman: - Berbasis Dekstop: Java, Matlab, - Database: MySQL

- Design : Photoshop, Kursus:

Dokumen terkait