• Tidak ada hasil yang ditemukan

TENTANG MODUL PRAKTIKUM

N/A
N/A
Protected

Academic year: 2021

Membagikan "TENTANG MODUL PRAKTIKUM"

Copied!
51
0
0

Teks penuh

(1)
(2)

2

T

ENTANG

M

ODUL

P

RAKTIKUM

Modul Praktikum EL2208

Pemecahan Masalah dengan C

Edisi 2015 untuk digunakan pada Semester II Tahun Akademik 2014/2015 disusun oleh Bagus Hanindhito (13211007) / hanindhito@bagus.my.id dan Ardianto Satriawan (23213079) / satriawan@s.itb.ac.id disunting oleh Baharuddin Aziz (13211133) / mail@baha.web.id

Modul praktikum ini merupakan revisi dan pengembangan dari modul praktikum yang telah digunakan pada tahun sebelumnya dengan penyusun sebagai berikut. Ardianto Satriawan (Teknik Elektro 2007) Modul praktikum ini menggunakan MIKU (Manajemen Informasi Praktikum) versi 1.0 sebagai pendukung aktivitas praktikum.

Program Studi Teknik Elektro

Sekolah Teknik Elektro dan Informatika

Institut Teknologi Bandung

Gambar Sampul ©2012 Airbus Industrie

Gambar pada sampul merupakan gambar overhead panel dari pesawat terbang penumpang Airbus A380. Airbus A380 merupakan pesawat terbang penumpang terbesar di dunia dengan dua lantai berbadan lebar dan empat buah mesin jet. Airbus A380 mampu membawa 853 penumpang bila dikonfigurasi semua kursi ekonomi dengan jarak tempuh maksimum 15.700 km dan kecepatan jelajah 900 km/h. Airbus A380 terbang untuk pertama kali pada 27 April 2005 dan mulai melayani penerbangan komersial pada Oktober 2007. Terdapat 153 buah Airbus A380 yang telah diproduksi hingga Januari 2015. Airbus A380 memiliki arsitektur Integrated Modular Avionics yang pertama kali digunakan oleh pesawat militer seperti F-22 Raptor dan F-35 Lightning II. Komunikasi data menggunakan Avionics Full-Duplex Switched Ethernet (AVDX) 100baseTX Fast-Ethernet. Network Systems Server (NSS) merupakan komponen utama dari cockpit Airbus A380. NSS dibuat dengan reliabilitas tinggi untuk menggantikan buku manual dan diagram yang biasa dicetak di atas kertas. Selain itu terdapat 8 buah LCD yang terdiri atas Primary Flight Display, Navigation Display, Engine Parameter Display, System Display, dan Multifunction Display. Pembuatan program canggih dengan reliabilitas tinggi menjadi sangat penting dalam sistem penerbangan Airbus A380 ini.

(3)

3

P

RAKATA

Puji syukur kami panjatkan ke hadirat Allah swt. karena dengan petunjuk, rahmat, serta izin-Nya kami dapat menyelesaikan penyusunan Modul Praktikum EL2208 Pemecahan Masalah dengan C Edisi 2015 sebelum kegiatan praktikum dimulai. Modul Praktikum ini akan digunakan sebagai petunjuk pelaksanaan praktikum Pemecahan Masalah dengan C semester II tahun akademik 2014/2015.

Modul praktikum ini mengalami berbagai penyempurnaan baik dari sisi materi maupun layout. Sistem praktikum akan sedikit berbeda dengan tahun-tahun sebelumnya. Pada sistem praktikum yang baru, diperkenalkan sebuah server khusus yang menangani informasi praktikum bernama MIKU (Manajemen Informasi Praktikum). MIKU akan digunakan secara intensif dalam praktikum ini. MIKU dapat menangani pendistribusian soal, pengiriman jawaban dari praktikan, pengecekan jawaban dari praktikan, hingga menilai jawaban dari praktikan secara otomatis. Dari sisi materi, penulis menambahkan beberapa soal baru yang dapat dikerjakan untuk menambah pengalaman praktikan dalam membuat program. Dari sisi layout, penulis memperbaiki layout modul ini agar lebih menarik untuk dipelajari.

Penulis mengucapkan terima kasih kepada Bapak Ir. Yudi Satria Gondokaryono, M.Sc., Ph.D. yang telah memberi penulis masukkan dan inspirasi dalam melakukan penyusunan modul praktikum ini. Penulis juga mengucapkan terima kasih kepada para koordinator asisten yang telah menjalankan dengan baik praktikum Pemecahan Masalah dengan C ini di tahun sebelumnya. Penulis juga mengucapkan terima kasih kepada Baharuddin Aziz (13211133) yang telah membantu penulis dalam menyusun modul praktikum ini.

Penulis berharap modul praktikum ini dapat memberi penjalasan yang mudah dimengerti mengenai pelaksanaan praktikum Pemecahan Masalah dengan C. Lebih jauh lagi, penulis juga berharap modul praktikum ini dapat menumbuhkan ketertarikan praktikan dalam dunia pemrograman yang merupakan tools yang sangat penting untuk dikuasai sebagai insinyur elektroteknik.

Akhir kata, tidak ada gading yang tak retak, penulis menyadari bahwa modul praktikum ini masih jauh dari kata sempurna. Penulis menyambut dengan baik segala bentuk koreksi, saran, dan kritik terhadap modul praktikum ini.

Bandung, Februari 2015 Bagus Hanindhito

(4)

4

D

AFTAR

I

SI

Tentang Modul Praktikum ... 2

Prakata ... 3

Daftar Isi ... 4

Peraturan Umum Praktikum ... 5

Petunjuk Teknis Pelaksanaan Praktikum... 8

Petunjuk Penggunaan Server Miku ... 11

Petunjuk Kompilasi Program Bahasa C ... 16

Diagram Alir Pelaksanaan Praktikum ... 18

Daftar Asisten Praktikum ... 19

(5)

5

P

ERATURAN

U

MUM

P

RAKTIKUM

Berikut ini dijelaskan peraturan-peraturan umum yang berlaku selama pelaksanaan praktikum EL2208 Pemecahan Masalah dengan C. Peraturan umum ini wajib dipatuhi oleh semua praktikan yang akan melaksanakan praktikum. Pengabaian peraturan praktikum akan berakibat pada sanksi berupa pengurangan atau pengguguran nilai praktikum milik praktikan yang bersangkutan. Peraturan Sebelum Praktikum

Sebelum melakukan praktikum sesuai dengan jadwalnya, praktikan harus mempersiapkan diri dengan melakukan hal-hal sebagai berikut. Persiapan ini sangat berguna bagi praktikan untuk dapat mengerjakan soal yang diberikan saat praktikum dilakukan.

1. Praktikan membaca dan memahami materi praktikum.

Praktikan diharapkan telah membaca dan memahami materi praktikum sehingga praktikan memperoleh gambaran besar (overview) terhadap praktikum yang akan dilaksanakan. Praktikan juga dapat mempelajari bahan-bahan serta materi yang berkaitan dengan praktikum yang akan dilaksanakan dari buku teks atau dari internet.

2. Praktikan mengerjakan Tugas Pendahuluan.

Praktikan wajib mengerjakan tugas pendahuluan. Panduan mengerjakan tugas pendahuluan dapat dilihat pada bagian Petunjuk Teknis Pelaksanaan Praktikum. Pada umumnya, tugas pendahuluan digunakan untuk membantu praktikan dalam mengerjakan soal saat praktikum. Beberapa perangkat lunak yang dibutuhkan untuk pelaksanaan praktikum dapat diunduh dengan mudah (lihat Petunjuk Teknis Pelaksanaan Praktikum).

Peraturan saat Praktikum

1. Praktikan hadir tepat waktu sesuai jadwal yang ditentukan.

Praktikum Pemecahan Masalah dengan C terdiri atas dua sesi dalam satu hari.

 Untuk hari Senin, Selasa, dan Kamis:

o Sesi pagi dimulai pukul 08.00 WIB (GMT+7) dan diakhiri pukul 10.00 WIB (GMT+7).

o Sesi siang dimulai pukul 10.00 WIB (GMT+7) dan diakhiri pukul 12.00 WIB (GMT+7).

 Untuk hari Jumat:

o Sesi pagi dimulai pukul 07.00 WIB (GMT+7) dan diakhiri pukul 09.00 WIB (GMT+7).

o Sesi siang dimulai pukul 09.00 WIB (GMT+7) dan diakhiri pukul 11.00 WIB (GMT+7).

Keterlambatan menghadiri praktikum menyebabkan praktikan tidak dapat mengikuti praktikum pada hari itu dengan nilai praktikum sama dengan nol.

(6)

6

2. Praktikan mengenakan pakaian bebas, sopan, dan membawa kelengkapan praktikum.

Praktikan mengenakan pakaian yang rapi dan sopan (kemeja, celana panjang/rok) dan mengenakan sepatu. Praktikan yang tidak mengenakan pakaian yang tidak sesuai dengan peraturan ini tidak diperbolehkan mengikuti praktikum. Kelengkapan praktikum yang wajib dibawa antara lain modul praktikum, tugas pendahuluan, alat tulis, dan kartu nama (name tag) Laboratorium Dasar Teknik Elektro.

3. Praktikan mengumpulkan tugas pendahuluan, mengisi daftar hadir, dan menulis nama pada Berita Acara Praktikum.

Praktikan mengumpulkan tugas pendahuluan dengan mengunggah tugas tersebut ke server MIKU. Syarat ini mutlak untuk dapat mengikuti praktikum. Selain itu, praktikan harus mengisi daftar hadir dan menulis nama pada Berita Acara Praktikum yang akan diedarkan oleh asisten praktikum saat praktikum berlangsung.

4. Praktikan mengerjakan praktikum sesuai dengan tugas yang diberikan.

Praktikan memanfaatkan seluruh waktu praktikum dengan baik untuk mengerjakan tugas praktikum yang diberikan. Apabila terdapat pertanyaan, silakan diajukan dengan sopan pada asisten praktikum yang sedang bertugas.

5. Praktikan menggunakan komputer dengan baik.

Praktikan menggunakan komputer yang tersedia di laboratorium sesuai dengan tujuan praktikum. Dilarang membuka program-program yang tidak ada hubungannya dengan praktikum. Praktikan juga harus dapat menghargai privacy orang lain dalam menggunakan komputer yang tersedia di laboratorium. Berhati-hatilah dengan ancaman keamanan (virus,

malware, dsb.) yang dapat terjadi sewaktu-waktu. Apabila terjadi masalah dengan komputer yang digunakan, segera beritahu asisten praktikum yang sedang bertugas. Perhatikan bahwa komputer di laboratorium telah dipasang program DeepFreeze agar drive C: tetap dalam kondisi awal ketika komputer dihidupkan ulang. Apabila praktikan ingin menyimpan sementara data praktikum, praktikan dapat menggunakan drive D:.

Praktikan diperbolehkan membawa dan menggunakan laptop masing-masing untuk melakukan aktivitas praktikum di laboratorium. Perhatikan bahwa praktikan harus mempersiapkan laptop dengan memasang perangkat lunak yang diperlukan saat praktikum. Peraturan saat praktikum dilaksanakan tetap berlaku walaupun praktikan menggunakan laptop sendiri saat kegiatan praktikum berlangsung.

Peraturan setelah Praktikum

1. Praktikan merapikan kembali meja kerja yang digunakan saat praktikum.

Praktikan diwajibkan untuk merapikan kembali meja kerja yang digunakan saat praktikum. Praktikan harus tetap menjaga kebersihan ruang praktikum setelah digunakan.

2. Praktikan menghapus semua data praktikum dari komputer di laboratorium setelah selesai praktikum.

Praktikan diwajibkan untuk memindahkan semua data praktikum dari komputer di laboratorium ke perangkat penyimpanan portable sebelum menghapus data praktikum dari

(7)

7

komputer di laboratorium. Jangan lupa untuk mematikan komputer di laboratorium sebelum meninggalkan ruangan.

Pertukaran Jadwal Praktikum

Pertukaran jadwal praktikum dapat dilakukan per orang dengan modul yang sama. Pada dasarnya pertukaran jadwal praktikum cukup dilakukan antarpraktikan yang jadwal praktikumnya akan ditukar. Apabila kedua praktikan telah setuju untuk menukar jadwal praktikum, praktikan cukup memberitahu asisten praktikum yang menjadi penanggung jawab harian pada kedua jadwal yang ditukar.

Plagiarisme

Semua hasil praktikum termasuk tugas pendahuluan dan kode program akan diperiksa menggunakan perangkat lunak yang mampu mendeteksi adanya plagiarisme dengan mengecek kemiripan dokumen praktikum yang dikumpulkan seluruh praktikan. Perangkat lunak ini mampu mendeteksi kode program yang sama walaupun kedua kode program tersebut telah diganti nama variabel, susunan blok kode, dan sebagainya. Apabila ditemukan praktikan yang terbukti melakukan plagiarisme, yang bersangkutan akan diproses sesuai dengan norma akademik yang berlaku di Institut Teknologi Bandung.

(8)

8

P

ETUNJUK

T

EKNIS

P

ELAKSANAAN

P

RAKTIKUM

Server Informasi Materi Praktikum dan Pengumpulan Tugas

Untuk keperluan pelaksanaan praktikum EL2208, disediakan sebuah server untuk menyimpan materi praktikum sekaligus dapat dipergunakan untuk mengunggah dokumen tugas berupa source code. Perhatikan tata cara pengunggahan laporan praktikum agar data yang Anda unggah dapat diterima dan diproses dengan baik.

Server informasi praktikum dapat diakses melalui URL http://el2208.bagus.my.id. Server ini dapat diakses baik dari jaringan komputer di dalam kampus (menggunakan akun INA) maupun dari jaringan komputer di luar kampus. Pada server ini terdapat materi-materi praktikum seperti modul praktikum, kontak asisten, dan sebagainya. Tugas pendahuluan akan dipublikasikan di server ini. Untuk server distribusi tugas dan pengumpulan jawaban tugas dapat diakses melalui URL

http://praktikum.ee.itb.ac.id. Server ini merupakan server MIKU (Manajemen Informasi Praktikum) yang akan digunakan selama praktikum sebagai server utama. Server ini hanya dapat diakses dari jaringan komputer di dalam kampus. Untuk dapat mengakses server ini dari luar kampus diperlukan penggunaan OpenVPN untuk memakai fasilitas Virtual Private Network ITB. Modul pertama praktikum ini merupakan modul perkenalan pertama dengan server MIKU.

Komposisi Penilaian

Praktikum ini terdiri atas empat belas (14) modul praktikum. Perhitungan indeks akhir akan dilakukan berdasarkan jumlah nilai dari seluruh modul praktikum yang kemudian dibandingkan dengan statistik perolehan nilai seluruh peserta praktikum. Setiap modul memiliki komposisi penilaian sebagai berikut.

Komponen Bobot

Sebelum Praktikum Tugas Pendahuluan

Tugas pendahuluan untuk modul praktikum yang bersangkutan. Tugas pendahuluan

diunggah ke server MIKU setelah praktikan memasuki ruangan praktikum. 25 %

Saat Praktikum

Aktivitas Praktikum

Penilaian meliputi kelengkapan praktikum yang disiapkan oleh praktikan dan sikap serta

perilaku praktikan. 7,5%

Kode (Source Code)

Kode yang telah diserahkan dan diunggah melalui server MIKU akan secara otomatis diperiksa terhadap plagiarisme, dikompilasi, dan dijalankan menggunakan berbagai macam tes vektor. Kemudian, MIKU akan menentukan secara otomatis nilai dari source code tersebut. Praktikan dapat mengunggah kembali kode apabila hasil yang diberikan dinilai kurang tepat. Hanya kode yang dapat dikompilasi yang akan dinilai oleh MIKU.

60%

Setelah Praktikum Kode (Source Code)

Kode yang telah diunggah ke server MIKU akan diperiksa kembali oleh asisten

praktikum untuk menilai kerapihan dan kualitas pembacaan (readability). 7,5%

(9)

9

Struktur Folder Kerja

Praktikan disarankan membuat folder kerja yang baik untuk keperluan organisasi file kerja dengan baik. Tidak ada format khusus untuk praktikum ini karena semua pekerjaan yang diunggah ke server MIKU akan diorganisasikan secara otomatis. Ikuti langkah-langkah pengunggahan file tugas praktikum yang tersedia pada setiap modul praktikum.

Tugas Pendahuluan

Tugas pendahuluan harus dikerjakan sebelum praktikan memasuki ruang praktikum untuk menambah pemahaman praktikan mengenai materi praktikum yang akan dilakukan. Soal tugas pendahuluan akan dipublikasikan paling lambat H-2 sebelum praktikum dimulai. Tugas pendahuluan akan dipublikasikan di website http://el2208.bagus.my.id. Mohon dipastikan bahwa tugas pendahuluan telah lulus kompilasi dan memberikan hasil yang tepat. Tugas pendahuluan harus dikumpulkan setelah memasuki ruangan praktikum sebelum praktikum dimulai dengan mengunggah file tugas tersebut ke server MIKU.

Batas waktu pengumpulan tugas pendahuluan adalah pukul 10.30 (GMT+7.00) untuk hari Senin, Selasa, dan Kamis atau pukul 09.30 (GMT+7.00) untuk hari Jumat.Di luar jadwal ini, tugas pendahuluan tidak dapat diunggah sehingga praktikan mendapat nilai nol untuk tugas pendahuluan. Praktikan diharapkan telah memastikan bahwa tugas pendahuluan yang telah dibuat dapat berjalan dengan benar pada komputer masing-masing terlebih dahulu. Disarankan pengunggahan dilakukan apabila praktikan telah yakin bahwa tugas pendahuluan yang dibuat telah benar.

Tugas Praktikum

Tugas praktikum merupakan tugas yang dikerjakan pada saat praktikum di laboratorium. Tugas praktikum akan diberikan pada saat praktikum dimulai dengan mengunduh tugas tersebut dari server MIKU (praktikum.ee.itb.ac.id). Tugas praktikum dapat diunduh ketika praktikum dimulai yaitu pada pukul 08.00 (GMT+7) untuk hari Senin, Selasa, dan Kamis atau pukul 07.00 (GMT+7) untuk hari Jumat. Terdapat beberapa soal yang akan diberikan yang harus diselesaikan oleh masing-masing praktikan.

Durasi waktu pengerjaan tugas praktikum adalah dua jam selama di laboratorium. Selain itu, praktikan diberikan waktu tambahan untuk menyelesaikan tugas praktikum di luar laboratorium selama dua jam apabila pekerjaan tersebut belum dapat diselesaikan di laboratorium. Dengan demikian, tugas praktikum dapat diunggah hingga pukul 12.00 (GMT+7) untuk hari Senin, Selasa, dan Kamis atau pukul 11.00 (GMT+7) untuk hari Jumat. Di luar jadwal ini, tugas praktikum tidak dapat diunggah sehingga praktikan mendapat nilai nol untuk tugas praktikum. Praktikan diharapkan telah memastikan bahwa tugas praktikum yang telah dibuat dapat berjalan dengan benar pada komputer masing-masing terlebih dahulu. Disarankan pengunggahan dilakukan apabila praktikan telah yakin bahwa tugas yang dibuat telah benar.

(10)

10

Berikut ini adalah gambaran pelaksanaan praktikum dalam satu hari. Waktu dalam GMT+7 yang tertera adalah untuk hari Senin, Selasa, dan Kamis. Untuk hari Jumat, dimajukan selama satu jam.

Waktu Sesi Pagi (08.00-10.00) Sesi Siang (10.00-12.00)

08.00 Praktikan memasuki ruangan praktikum. Praktikan mengunggah tugas pendahuluan ke Server MIKU.

Praktikan dapat mengunggah tugas pendahuluan ke Server MIKU bila berada di jaringan komputer ITB. 08.15 Praktikan mengunduh tugas

praktikum dari Server MIKU dan memulai mengerjakan di laboratorium.

Praktikan dapat mengunduh tugas praktikum dari Server MIKU dan dapat memulai mengerjakan di luar laboratorium (tidak wajib).

10.00 Praktikum sesi pagi telah selesai. Praktikan dapat mengunggah file tugas praktikum apabila telah selesai.

Praktikan memasuki ruangan praktikum. Praktikan mengunggah tugas pendahuluan ke Server MIKU apabila belum diunggah.

10.15 Praktikan dapat keluar dari laboratorium dan dapat melanjutkan tugas praktikum apabila belum selesai.

Praktikan mengunduh tugas praktikum dari Server MIKU apabila belum mengunduh dan memulai atau melanjutkan mengerjakan di laboratorium.

10.30 Batas akhir pengumpulan tugas pendahuluan untuk kedua sesi. 12.00 Batas akhir pengumpulan tugas praktikum untuk kedua sesi.

Penulisan Kode (Source Code)

Setiap kode program harus diberi header dengan menyesuaikan modul, percobaan, tanggal, nama praktikan, NIM praktikan, nama file, dan deskripsi singkat program. Untuk kode dalam bahasa C,

header didefinisikan sebagai berikut.

// Praktikum EL2208 Pemecahan Masalah dengan C // Modul : 2

// Percobaan : 0

// Tanggal : 7 November 2013

// Nama (NIM) : Hatsune Miku (13213999) // Nama File : printbitbyte.h

// Deskripsi : Menampilkan informasi bit dan byte dalam memory

Dianjurkan untuk memberi nama variabel sesuai dengan maksud atau penggunaan variabel tersebut. Tambahkan komentar pada beberapa blok kode apabila dirasa perlu untuk membuat kode Anda lebih readable.

(11)

11

P

ETUNJUK

P

ENGGUNAAN

S

ERVER

M

IKU

Server MIKU (Manajemen Informasi Praktikum) merupakan server yang akan digunakan dalam praktikum ini. Server MIKU memiliki maskot berupa karakter Vocaloid bernama Hatsune Miku. Server MIKU dapat diakses melalui alamat praktikum.ee.itb.ac.id dari dalam jaringan komputer Institut Teknologi Bandung. Server MIKU tidak dapat diakses dari luar jaringan komputer Institut Teknologi Bandung kecuali menggunakan koneksi Virtual Private Network (VPN).

Saat membuka praktikum.ee.itb.ac.id, maka tampilan berikut dapat dilihat. Ini adalah portal menuju MIKU. Untuk masuk ke halaman login, klik Masuk ke MIKU. Bila suatu saat server MIKU mengalami masalah, silakan melaporkan masalah ini agar segera ditindaklanjuti dengan menekan tombol Laporkan Masalah.

Ketika halaman login telah terbuka, Anda dapat masuk menggunakan akun praktikum Anda. Secara

default, username praktikum Anda adalah e-mail mahasiswa Anda (@students.itb.ac.id). Sedangkan untuk password akan dikirimkan kepada masing-masing mahasiswa. Silakan cek inbox e-mail mahasiswa Anda. Disarankan untuk mengganti password default Anda untuk mengamankan akun Anda dari tangan yang tidak diinginkan. Apabila Anda lupa password, silakan menggunakan fitur Forget Password dan mengisi alamat e-mail mahasiswa Anda untuk mengeset ulang password Anda.

Tautan untuk mengeset ulang password akan dikirimkan ke e-mail mahasiswa Anda. Jangan lupa untuk

logout dari sistem setelah praktikum selesai. Apabila terdapat masalah dalam login silakan menghubungi koordinator asisten.

(12)

12

Menu Login ke MIKU

Menu Personalisasi Username

(13)

13

Setelah Anda berhasil login ke dalam MIKU, silakan pilih Course yang sesuai dengan enrolment Anda. Pada Course tersebut terdapat beberapa assignment yang digunakan untuk mengunggah tugas-tugas sesuai dengan jenis assignment yang diberikan. Assignment dikelompokkan berdasarkan modul praktikum. Setiap assignment memiliki durasi yang diperbolehkan untuk mengunggah assignment. Keterlambatan mengunggah

Menu Assignment yang Tersedia

Menu Pengunggahan Jawaban Assignment

Saat assignment dibuka, terdapat menu pengunggahan jawaban terhadap assignment tersebut. Perhatikan

deadline yang tertera di atas kotak submit. Untuk mengunggah file jawaban, gunakan tombol Submit File. Perhatikan tata cara penamaan dan pengiriman file jawaban Anda sesuai dengan masing-masing modul praktikum. Menu Download Handout digunakan untuk mengunduh template kode untuk dikerjakan di laboratorium. Menu View Hand-In History digunakan untuk melihat sejarah pengunggahan tugas yang telah Anda lakukan. Menu View Scoreboard digunakan untuk melihat nilai seluruh praktikan. View Writeup digunakan untuk mengunduh tugas praktikum (biasanya dalam bentuk PDF).

(14)

14

Menu Sejarah Pengunggahan Assignment

Setelah Anda mengunggah tugas Anda ke server MIKU, tugas Anda akan segera masuk ke dalam antrean sistem untuk diperiksa unsur plagiarisme, dikompilasi, dan diuji coba dengan serangkaian tes vektor. Diperlukan beberapa saat sebelum nilai Anda dapat muncul di halaman tersebut. Silakan refresh

halaman web untuk memperbarui nilai Anda. Apabila nilai telah keluar, Anda dapat melihat lebih jauh detail pengujian dengan meng-klik nilai Anda. Detail pengujian ini akan memberi Anda informasi apabila terdapat kesalahan dalam kompilasi atau pengujian.

(15)

15

Menu Scoreboard

(16)

16

P

ETUNJUK

K

OMPILASI

P

ROGRAM

B

AHASA

C

Pada praktikum ini, Anda dibebaskan untuk menggunakan berbagai macam IDE (Integrated Development Environment) untuk mengerjakan tugas praktikum asalkan compiler yang digunakan adalah GCC untuk menjaga kompabilitas kompilasi. Beberapa IDE yang tersedia antara lain adalah CodeBlocks, Dev-C++, Netbeans, dan Eclipse. Dalam bagian ini, akan diberikan petunjuk kompilasi dasar menggunakan command line tool untuk menjalankan GCC.

Berikut ini dijelaskan tata cara melakukan instalasi GCC pada komputer bersistem operasi Microsoft® Windows™ 7/8/8.1.

1. Unduh perangkat lunak CodeBlocks versi 13.12 (atau yang lebih baru) yang terintegrasi dengan MinGW. Biasanya nama file yang diberikan adalah codeblocks-13.12mingw-setup.exe. 2. Lakukanlah instalasi pada perangkat lunak CodeBlocks yang telah Anda unduh. Gunakan

default settings apabila langkah ini cukup membingungkan.

3. Periksa isi folder C:\Program Files (x86)\CodeBlocks\MinGW\bin(untuk Microsoft® Windows™ 64-bit) atau C:\Program Files\CodeBlocks\MinGW\bin(untuk Microsoft® Windows™ 32-bit). Pastikan terdapat file gcc.exe, mingw32-make.exe, dan objdump.exe. 4. Tambahkan environment variable pada kotak isian PATH. Isikan alamat lokasi file MinGW berada

.

5. Hidupkan ulang komputer Anda (restart). Setelah restart, seharusnya file-file sudah dapat diakses dengan normal melalui command prompt.

Untuk melakukan proses kompilasi menggunakan GCC, kita dapat menggunakan Command Prompt

pada Microsoft® Windows™. Perhatikan bahwa GCC harus terpasang dan terkonfigurasi dengan benar. Beberapa perintah untuk melakukan kompilasi antara lain sebagai berikut.

 Hanya melakukan proses preprocessing gcc -E Program.c

(17)

17

Eksekusi perintah tersebut akan menampilkan di layar Command Prompt kode Program.c setelah melalui proses preprocessing. Agar memperoleh output berupa file, dapat menggunakan tambahan perintah sebagai berikut.

gcc -E Program.c > Program.i

Eksekusi perintah tersebut akan menghasilkan file Program.i berisi kode Program.c yang telah melalui preprocessing pada folder yang sama dengan file Program.c. File ini dapat dibuka dengan teks editor contohnya Notepad++.

 Hanya melakukan proses preprocessing dan compiling gcc -S Program.c

Eksekusi perintah tersebut akan menghasilkan file Program.s yang berisi baris instruksi

assembly pada folder yang sama dengan Program.c. File ini dapat dibuka dengan teks editor contohnya Notepad++.

 Hanya melakukan proses preprocessing, compiling, dan assembly gcc -c Program.c

Eksekusi perintah tersebut akan menghasilkan file Program.o yang merupakan file biner. File ini dapat dibuka dengan program hex editor contohnya HexEdit.

 Melakukan seluruh proses kompilasi (preprocessing, compiling, assembly, dan linking)

gcc -o Program.exe Program.c

Eksekusi perintah tersebut akan menghasilkan Program.exe yang dapat langsung dieksekusi (dijalankan). Kita juga dapat melakukan kompilasi dua file bahasa C sekaligus.

(18)

18

D

IAGRAM

A

LIR

P

ELAKSANAAN

P

RAKTIKUM

Mulai

Praktikan mengerjakan tugas pendahuluan dan memastikan bahwa program telah berfungsi dengan benar.

Praktikan mengumpulkan tugas pendahuluan setelah masuk ruangan dengan mengunggah tugas pendahuluan ke server MIKU

Praktikan mengunduh tugas praktikum dari server MIKU.

Praktikan mengerjakan tugas praktikum dengan baik dan benar.

Praktikan mengunggah tugas praktikum setelah memastikan bahwa program telah berfungsi dengan benar.

Praktikan dapat melihat nilai rekapitulasi praktikum di server el2208.bagus.my.id

Selesai

Mulai

Asisten atau Koordinator Asisten mengunggah tugas pendahuluan ke web http://el2208.bagus.my.id dalam bentuk PDF.

Asisten mengawasi jalannya praktikum

Server memeriksa indikasi-indikasi terjadinya plagiarisme untuk source code (n-to-n compare)

Selesai

Koordinator asisten mengolah nilai praktikum

Praktikan

Asisten Praktikum

M ak si m um D -2 Pr ak ti ku m H P ra kt ik um M ak si m um D + 7 Pr ak ti ku m

(19)

19

D

AFTAR

A

SISTEN

P

RAKTIKUM

Nama Asisten NIM E-mail Keterangan

Bagus Hanindhito 13211007 hanindhito@bagus.my.id Koordinator

Wisnu Murti 13211070 wisnumurti28@gmail.com PJ Senin

Muhammad Luqman 13211015 luqman_31081993@yahoo.com Cindy Agustina 13211033 cindy.agustina13@yahoo.com Andini Noviana 13211118 andini.noviana@gmail.com

Clement Christopher 13211138 clement105.c@gmail.com PJ Selasa Novi Prihatiningrum 13212065 novi.math@gmail.com

Mahendra Drajat Adhinata 13212116 mahendra.drajat@outlook.com Fariz Maulana 13211034 farizmaulana1@gmail.com

Fiqih Tri Fathulah Rusfa 13211060 fiqihrusfa@gmail.com PJ Kamis Zuhditazmi 13212149 zuhdi_tazmi@yahoo.com

Muhammad Hariomurti 13212601 m_hariomurti@yahoo.co.id

Hariawan Christophorus 13211145 hariawan.christo@students.itb.ac.id

Antonius Perdana Renardy 13211143 antoniusperdana@students.itb.ac.id PJ Jumat Baharuddin Aziz 13211133 el2208@baha.web.id

Devi Oktama Putri Lim 13211124 devioktama@yahoo.com

Michael 13211028 michael_valkrie3@yahoo.com

EL2208

II / 2014-2015 HAPPY ASSISTANT

Praktikum PMC Bagus Hanindhito Wisnu Murti Muhammad Luqman Cindy Agustina Andini Noviana

Clement Christopher Novi Prihatiningrum Mahendra Drajat A. Fariz Maulana Fiqih Tri Fathulah Zuhditazmi

(20)

20

R

ENCANA

A

GENDA

P

RAKTIKUM

Modul 1

Topik : Introduction to MIKU, C Compilation, and Standard Input Output Waktu pelaksanaan : Senin, 23 Februari 2015 hingga Selasa, 24 Februari 2015

Modul 2

Topik : Basic Arithmetic Operation and Math Library

Waktu pelaksanaan : Kamis, 26 Februari 2015 hingga Jumat, 27 Februari 2015

Modul 3

Topik : Conditional Construct

Waktu pelaksanaan : Senin, 2 Maret 2015 hingga Selasa, 3 Maret 2015

Modul 4

Topik : Loop Construct

Waktu pelaksanaan : Kamis, 5 Maret 2015 hingga Jumat, 6 Maret 2015

Modul 5

Topik : Procedure, Function, and Recursive Algorithm Waktu pelaksanaan : Senin, 16 Maret 2015 hingga Selasa, 17 Maret 2015

Modul 6

Topik : Pointer and External File

Waktu pelaksanaan : Kamis, 19 Maret 2015 hingga Jumat, 20 Maret 2015

Modul 7

Topik : Static Array and Dynamic Array

Waktu pelaksanaan : Senin, 23 Maret 2015 hingga Selasa, 24 Maret 2015

Modul 8

Topik : Two Dimensional Array

Waktu pelaksanaan : Kamis, 26 Maret 2015 hingga Jumat, 27 Maret 2015

Modul 9

Topik : String

Waktu pelaksanaan : Senin, 6 April 2015 hingga Selasa, 7 April 2015

Modul 10

Topik : Struct

(21)

21

Modul 11

Topik : Linked List

Waktu pelaksanaan : Senin, 13 April 2015 hingga Selasa, 14 April 2015

Modul 12

Topik : Stack

Waktu pelaksanaan : Kamis, 16 April 2015 hingga Jumat, 17 April 2015

Modul 13

Topik : Queue

Waktu pelaksanaan : Senin, 20 April 2015 hingga Selasa, 21 April 2015

Modul 14

Topik : Library Files and Execution Arguments

(22)
(23)

22

T

UGAS

P

ENDAHULUAN

M

ODUL

11

P

ENGENALAN DAN

I

MPLEMENTASI

S

TRUKTUR

D

ATA

L

INKED

L

IST

Prepared by: Ardianto Satriawan (02-2015) Pengenalan

Pengertian Linked List

Pada Tugas Pendahuluan praktikum kali ini, anda tidak diminta untuk mengumpulkan program, melainkan mempersiapkan apa yang dibutuhkan dalam praktikum. Anda tidak diperkenankan ikut praktikum apabila tidak mengerjakan tugas pendahuluan ini. Asisten akan memeriksa pekerjaan Anda di awal praktikum.

Linked list adalah salah satu struktur data bentukan. Untuk mempermudah membayangkan, kita menggunakan analogi, kereta api. Sebuah rangkaian kereta api terdiri dari sebuah lokomotif dan beberapa gerbong (coach). Awal dari sebuah rangkaian kereta api pasti sebuah lokomotif, sedangkan akhirnya adalah sebuah gerbong. Semuanya dihubungkan dengan alat bernama coupler.

Gambar 1: Ilustrasi kereta api

Setiap gerbong yang ditarik oleh lokomotif tersebut mewakili satu buah data. Lokomotif sendiri adalah sebuah penanda dari awal rangkaian atau linked list. Pada strauktur linked list, “lokomotif”-nya adalah pointer penanda awal linked list, sedangkan “gerbong”-“lokomotif”-nya adalah data. Setiap data memiliki penunjuk ke data berikutnya, data terakhir tidak menunjuk ke mana pun. Data dan penunjuk ke data berikutnya disebut “node”

Gambar 2: ilustrasi linked list

Pada gambar 2, penanda awal list adalah sebuah pointer “start”. Node pertama berisi “4 dan 17” dan penunjuk ke data berikutnya, dan seterusnya hingga node terakhir yang berisi “8 dan 14”. Setiap node dapat juga dirancang untuk menampung lebih dari satu data. Pada praktikum ini, satu buah node berisi dua buah data.

(24)

23

Pada kereta api, untuk menambahkan gerbong, paling mudah dilakukan dengan menyambungkan gerbong ke akhir rangkaian. Demikian juga dengan linked list, cara paling mudah menambahkan data adalah di akhir dari linked list. Proses penambahan data ke akhir list disebut append.

Pada tugas pendahuluan ini, Anda diminta untuk mengimplementasikan tipe data bentukan untuk

linked list dan fungsi append(). Semuanya akan digunakan di dalam praktikum.

Tugas 1 : Implementasi Struktur Data Element Linked List

Definisi Masalah

Untuk mempermudah pekerjaan kita ke depan, kita harus membuat tipe bentukan untuk satu element dari list. Pada praktikum kali ini, satu node terdiri dari dua buah data dan satu penunjuk. Perhatikan ilustrasi berikut

Gambar 3: Contoh satu element (node) list

Tipe bentukan untuk satu element list ini, kita sebut sebagai node. Data di dalamnya diberi nama

index bertipe integer dan value bernilai double. Pointer ke node selanjutnya diberi nama next. Implementasikan tipe bentukan untuk node.

Diberikan kode bantu sebagai berikut: typedef struct node

{

/** Fill what is missing in this structure ... ... **/

} node;

Tugas 2 : Implementasi Struktur Data Stack

Definisi Masalah

Setelah kita mengimplementasikan tipe bentukan untuk satu element atau node dari list, maka selanjutnya Anda diminta untuk membuat tipe bentukan untuk list itu sendiri. Ilustrasi dapat dilihat pada gambar 2 di atas. Pointer yang menunjuk ke elemen paling atas dari stack diberi nama start.

Sekali lagi, diberikan kode bantuan sebagai berikut: typedef struct listtype

{

(25)

24

in this structure ... ... **/

} listtype;

Tugas 3 : Implementasi Fungsi Append

Definisi Masalah

Prototype dari fungsi append() yang akan dibuat adalah sebagai berikut:

void append(int index, double value, listtype *list);

Fungsi append akan menambahkan element ke akhir list. Misalkan sebelum fungsi dipanggil, kita memiliki list sebagai berikut:

Gambar 4: Sebelum append dijalankan

Kemudian apabila kita memanggil fungsi append dengan cara append(9, 15, &list), maka list yang kita punya akan menjadi:

Gambar 5: Sebelum append dijalankan

Tugas Anda adalah mengimplementasikan fungsi push() ini, hingga bekerja dengan baik.

Tugas 4 : Pengujian Fungsi Append

Definisi Masalah

Buatlah program utama untuk menguji fungsi append tersebut. Program menerima dua buah informasi yaitu nomor urut elemen dan nilai elemen. Program akan terus meminta pengguna memasukkan nomor urut elemen dan nilai elemen hingga pengguna memasukkan nomor urut elemen -1 sebagai akhir dari input. Kemudian program mencetak link list dengan nilai elemen secara berurutan. Asumsikan nomor urut yang dimasukkan pengguna selalu valid (>0) kecuali -1 sebagai perintah mengakhiri input.

(26)

25

Input ke STDIN 6 5.4 2 7.1 4 5.9 -1 Output ke STDOUT

Masukkan nomor urut elemen: Masukkan nilai elemen ke-6: Masukkan nomor urut elemen: Masukkan nilai elemen ke-2: Masukkan nomor urut elemen: Masukkan nilai elemen ke-4: Masukkan nomor urut elemen: Pengisian selesai.

Hasil link-list. 7.1 5.9 5.4

Petunjuk Penyerahan Tugas Pendahuluan Modul 11

Keempat tugas di atas disimpan dalam satu buah file .c, seharusnya file .c yang telah Anda buat kurang lebih seperti ini:

/* ... library, definition, etc */

typedef struct node

{

/** Fill what is missing in this structure ... **/

} node;

typedef struct listtype

{

/** Fill what is missing in this structure ... **/

} listtype;

/** function prototypes **/

void append(int index, double value, listtype *list);

int main(void) {

}

/** function implementations **/

(27)

26

/** append function implementation **/

}

Bawalah kode tersebut dan tunjukkan kepada asisten di awal praktikum.

(28)

28

T

UGAS

P

RAKTIKUM

M

ODUL

11

P

ENGGUNAAN DAN

A

PLIKASI

L

INKED

L

IST

Prepared by: Ardianto Satriawan (02-2015)

Sparse Vector

Penjelasan

Dalam matematika, sparse vector adalah vektor yang hampir semua elemennya adalah ‘0’. Yang dimaksud dengan vektor di sini adalah matriks yang hanya memiliki 1 buah baris. Sebagai contoh, perhatikan vektor A dengan 12 elemen berikut:

A = [ 0 0 0 0 17 0 0 23 14 0 0 0]

Apabila seorang yang terbiasa memrogram ingin mengimplementasikan sebuah vektor, maka jalan yang paling mudah adalah mengimplementasikannya dengan array. Namun untuk kasus sparse vector

ini, bayangkan bila Anda memiliki vektor dengan 100 elemen dan hanya 5 elemen yang bukan ‘0’. Maka Anda akan menyimpan 95 buah elemen ‘0’ di dalam memori! Ini adalah sebuah pemborosan.

Karena alasan tersebut, sparse vector tidak diimplementasikan dengan array, namun diimplemen-tasikan dengan struktur data bentukan linked list, dengan tujuan menghemat memori. Bila vektor A

di atas diimplementasikan dengan array, maka digambarkan seperti pada gambar 1.

Gambar 1: Implementasi array dari sparse vector A

Sedangkan pada implementasi linked list, kita cukup menyimpan index dan isi elemen yang bukan ‘0’. Untuk lebih jelasnya, dapat dilihat pada gambar 2.

Gambar 2: Implementasi linked list dari sparse vector A

Dengan demikian, kita tidak perlu menyimpan ‘0’ ke memori melainkan hanya yang diperlukan saja. Sehingga implementasi ini jauh lebih hemat memori.

Problem: Menghitung Hasil Dot Product dari 2 Sparse Vector

Definisi Masalah

Salah satu operasi mendasar dari dua buah vektor adalah dot product. Dot product dilakukan dengan cara mengalikan elemen-elemen yang bersesuaian, kemudian menjumlahkan hasil-hasilnya.

(29)

29

Secara matematis, dot product antara vektor A dan B dapat dituliskan sebagai:

𝐴 ∙ 𝐵 = ∑ 𝑎𝑖𝑏𝑖 𝑛

𝑖=0

= 𝑎1𝑏1+ 𝑎2𝑏2+ ⋯ + 𝑎𝑛𝑏𝑛

Sebagai contoh, bila kita ingin melakukan operasi dot product dari vektor A = [1 3 -5] dan vektor B =[4 -2 -1], maka dapat dihitung dengan cara:

[1 3 −5] ∙ [4 −2 −1] = 1 × 4 + 3 × (−2) + (−5) × (−1) = 3

Bila vektor diimplementasikan dengan array, maka operasi dot product dapat dengan mudah dilakukan dengan for loop. Namun, sparse vector diimplementasikan dengan linked list, sehingga diperlukan pendekatan lain untuk implementasinya.

Tugas Anda pada praktikum ini adalah mengimplementasikan dot product pada sparse vector yang diimplementasikan dengan linked list. Dua buah vektor yang dikalikan adalah sparse vector dengan panjang 100 (index hanya dari 0-99).

Input yang diberikan terdiri dari 4 baris.

 Baris pertama adalah jumlah elemen bukan ‘0’ pada vektor A.

 Baris kedua adalah index dan isi elemen bukan nol pada vektor A.

 Baris ketiga adalah jumlah elemen bukan ‘0’ pada vektor B.

 Baris keempat adalah index dan isi elemen bukan nol pada vektor B

Pada semua input yang diberikan, index sudah terurut dari kecil ke besar, sehingga Anda tidak perlu melakukan pengurutan. Gunakan fungsi append yang dibuat pada tugas pendahuluan untuk memasukkan input ke dalam linked list.

Contoh input adalah sebagai berikut. 6

5 1.3 9 2.4 15 7.8 25 9.3 36 -1.9 45 12.9 3

25 12.1 36 -3.4 95 6.7

(30)

30

Gambar 3: Representasi vektor A dan B

Contoh Input dan Output Contoh 1: Input ke STDIN 6 5 1.3 9 2.4 15 7.8 25 9.3 36 -1.9 45 12.9 3 25 12.1 36 -3.4 95 6.7 Output ke STDOUT

Hasil dot product: 118.99 Contoh 2: Input ke STDIN 3 1 1.6 7 3.6 87 21.0 4 7 1.4 87 1.5 90 2.7 94 3.9 Output ke STDOUT

Hasil dot product: 36.54

Deliverable

Simpan tugas problem ini dengan nama problem1.c. Jangan lupa memberikan identitas (header file) di awal file ini. Pastikan program dapat dikompilasi dan dijalankan dengan benar.

Petunjuk Penyerahan Tugas Praktikum Modul 13

Simpan file problem1.c dalam satu folder. Gunakan program 7-zip untuk mengkompresi menjadi arsip TAR (.tar). Penamaan file TAR bebas (disarankan menggunakan NIM). File TAR ini yang akan di-submit ke server MIKU saat pengumpulan tugas pendahuluan saat memasuki laboratorium. Hanya file kode saja yang dimasukkan ke dalam arsip TAR. File executable tidak perlu dimasukkan.

(31)

31

Selesai

(32)

22

T

UGAS

P

ENDAHULUAN

M

ODUL

12

P

ENGENALAN DAN

I

MPLEMENTASI

S

TRUKTUR

D

ATA

S

TACK

Prepared by: Ardianto Satriawan (02-2015)

Pengenalan

Pengertian Stack

Pada Tugas Pendahuluan praktikum kali ini, anda tidak diminta untuk mengumpulkan program, melainkan mempersiapkan apa yang dibutuhkan dalam praktikum. Anda tidak diperkenankan ikut praktikum apabila tidak mengerjakan tugas pendahuluan ini. Asisten akan memeriksa pekerjaan Anda di awal praktikum.

Stack adalah struktur data bentukan yang berbentuk tumpukan. Bayangkanlah data yang akan kita pakai diperlakukan seperti tumpukan piring.

Gambar 1: Ilustrasi stack dengan piring

Satu piring mewakili satu buah data. Karena piring-piring itu berada dalam tumpukan, piring yang dapat diambil hanyalah piring yang berada di paling atas. Demikian juga apabila kita ingin menambah piring baru, hanya bisa kita letakkan di atas tumpukan.

Sekarang kembali ke level abstraksi pemrograman, stack adalah tumpukan data. Menambahkan data hanya bisa dilakukan ke atas stack. Proses menambahkan data pada stack disebut push. Mengeluarkan data juga hanya bisa dilakukan untuk data yang berada di paling atas stack. Proses pengeluaran data disebut pop. Sebagai tambahan, data di dalam stack juga biasa disebut sebagai

element.

Pada tugas pendahuluan ini, Anda diminta untuk mengimplementasikan tipe data bentukan untuk

(33)

23

Tugas 1 : Implementasi Struktur Data Element Stack

Definisi Masalah

Pada praktikum yang akan dilaksanakan, struktur data stack diimplementasikan sebagai sebuah linked-list. Data yang akan kita gunakan sebagai “piring” dalam stack bertipe double.

Gambar 2: Ilustrasi stack berisi 3 element double diimplementasikan dengan linked-list

Untuk mempermudah pekerjaan kita ke depan, kita harus membuat tipe bentukan untuk satu element dari stack. Perhatikan ilustrasi berikut

Gambar 3: Satu element (node) stack

Tipe bentukan untuk satu element stack ini, kita sebut sebagai node. Data di dalamnya diberi nama elmt dan bertipe double. Pointer ke node selanjutnya diberi nama next. Implementasikan tipe bentukan untuk node.

Diberikan kode bantu sebagai berikut:

typedef struct node

{

/** Fill what is missing in this structure ... ... **/

(34)

24

Tugas 2 : Implementasi Struktur Data Stack

Definisi Masalah

Setelah kita mengimplementasikan tipe bentukan untuk satu element atau node dari stack, maka selanjutnya Anda diminta untuk membuat tipe bentukan untuk stack itu sendiri. Ilustrasi dapat dilihat pada gambar 2 di atas. Pointer yang menunjuk ke elemen paling atas dari stack diberi nama

top.

Sekali lagi, diberikan kode bantuan sebagai berikut:

typedef struct stacktype

{

/** Fill what is missing in this structure ... ... **/

} stacktype;

Tugas 3 : Implementasi Fungsi Push

Definisi Masalah

Prototype dari fungsi push() yang akan dibuat adalah sebagai berikut:

void push(double elmt, stacktype *stack);

Fungsi push akan menambahkan element ke atas stack. Misalkan fungsi ini dipanggil dengan

push(7.9, &stack) saat kondisi stack seperti gambar 2, maka setelah fungsi selesai dijalankan, isi dari stack adalah sebagai berikut.

(35)

25

Tugas Anda adalah mengimplementasikan fungsi push() ini, hingga bekerja dengan baik.

Tugas 4 : Implementasi Fungsi Pop

Definisi Masalah

Fungsi pop adalah kebalikan dari fungsi push, berguna untuk menghilangkan elemen teratas dari stack.

Gambar 5: Sebelum dan setelah pop(&stack) dieksekusi

Namun, terdapat sedikit perbedaan antara push dengan pop. Bila pada push, kita tidak perlu mengembalikan (return) suatu nilai. Pada pop, dilakukan pengembalian nilai untuk data yang kita ambil. Pada ilustrasi di gambar 5, fungsi pop akan mengembalikan nilai 7.9.

Prototype fungsi push adalah:

double pop(stacktype *stack);

(36)

26

Petunjuk Penyerahan Tugas Pendahuluan Modul 12

Keempat tugas di atas disimpan dalam satu buah file .c, seharusnya file .c yang telah Anda buat kurang lebih seperti ini:

/* ... library, definition, etc */

typedef struct node

{

/** Fill what is missing in this structure ... **/

} node;

typedef struct stacktype

{

/** Fill what is missing in this structure ... **/

} stacktype;

/** function prototypes **/

void push(double elmt, stacktype *stack);

double pop(stacktype *stack);

int main(void)

{

/** will be filled during lab session **/

}

/** function implementations **/

void push(double elmt, stacktype *stack)

{

/** push function implementation **/

}

double pop(stacktype *stack) {

/** pop function implementation **/

}

Bawalah kode tersebut dan tunjukkan kepada asisten di awal praktikum.

(37)

28

T

UGAS

P

RAKTIKUM

M

ODUL

12

P

ENGGUNAAN DAN

A

PLIKASI

S

TACK

Prepared by: Ardianto Satriawan (02-2015)

Notasi Infix dan Postfix pada Operasi Aritmatika

Penjelasan

Sebagai seorang mahasiswa di bidang engineering, Anda tentu memiliki kalkulator scientific. Pernahkah Anda berpikir bagaimana kalkulator melakukan operasi secara berurutan sesuai kaidah yang kita pelajari sewaktu sekolah dasar dahulu, operasi dalam kurung – perkalian – pembagian – penjumlahan – pengurangan.

Gambar 1: Ilustrasi kalkulator Contoh:

 4 * (1 + 3) / 2

 3 - 4 * 2 + 1

Notasi yang kita kenal sehari-hari ini dikenal dengan notasi infix (sisipan), karena operator disisipkan di antara operand. Contohnya adalah “3 + 4”. Dalam operasi tersebut, 3 dan 4 adalah operand, sedangkan ‘+’ disisipkan ditengahnya.

Kekurangan dari notasi infix ini adalah operasi tidak dilakukan secara urut, melainkan berdasarkan prioritas tertentu. Pada contoh di gambar 1, operasi yang pertama dilakukan adalah perkalian di tengah, lalu pengurangan di kiri, dan terakhir baru dilakukan penjumlahan. Kekurangan yang lain adalah diperlukannya tanda kurung untuk menandakan prioritas.

Kekurangan-kekurangan tersebut membuat notasi ini susah dijalankan di dalam program. Untuk mengatasi hal ini, dibuatlah sebuah notasi baru, dengan aturan yang lebih rigid. Salah satu notasi tersebut adalah notasi postfix (akhiran). Dengan notasi ini, operator selalu berada di belakang

(38)

29

operand. Contohnya adalah “3 4 +”. Selain itu, aturan ini juga memiliki aturan bahwa operasi harus dilakukan dari kiri ke kanan, sehingga tidak perlu notasi kurung.

Untuk contoh yang diberikan sebelumnya, apabila dituliskan dengan notasi postfix:

 1 3 + 4 * 2 /

 4 2 * 3 – 1 +

Pada saat anda memberikan input string (disebut token), “3 - 4 * 2 + 1” kepada kalkulator, mesin kalkulator Anda akan mengubah token Anda menjadi notasi postfix sebelum dilakukan penghitungan. Dengan demikian, kalkulator akan lebih mudah melakukan penghitungan yang Anda masukkan.

Tetapi tenang saja, pada praktikum ini, Anda tidak akan diminta untuk mengubah notasi infix ke postfix. Bila Anda tertarik untuk mempelajari lebih lanjut, Anda dapat mengambil kuliah tentang desain kompiler.

Problem: Menghitung Hasil Operasi Notasi Postfix

Definisi Masalah

Pada kalkulator Anda, memori yang dimiliki olehnya berbentuk stack. Untuk memudahkan ilustrasi, kita langsung menggunakan contoh.

Misalkan kita mempunyai operasi “4 2 * 3 – 1 +” maka yang pertama kali dilakukan adalah membaca data dari kiri hingga ke kanan.

1. Data yang terbaca pertama adalah operand, bila bertemu dengan operand, masukkan operand ke dalam memori.

Gambar 2: Langkah pertama

2. Data yang terbaca selanjutnya, kembali adalah operand. Maka yang dilakukan adalah kembali menambahkan operand ke dalam memori.

(39)

30

Gambar 3: Langkah kedua

3. Data yang terbaca selanjutnya adalah operator, yaitu perkalian. Kita tidak menginput operator ke dalam stack memori, tetapi melakukan operasi tersebut (perkalian) terhadap dua data teratas dari stack dan memasukkan hasilnya ke dalam memori.

Gambar 4: langkah ketiga

4. Data yang terbaca selanjutnya adalah operand. Aksi yang dilakukan adalah memasukkannya ke dalam stack.

Gambar 5: Langkah keempat

5. Data yang selanjutnya terbaca adalah operator, yaitu pengurangan. Berarti kita melakukan operasi pengurangan terhadap 2 elemen teratas dari stack. 3 – 8 = -5.

(40)

31

Gambar 6: Langkah kelima

6. Data yang selanjutnya terbaca adalah operand. Maka tinggal memasukkan data ke dalam stack memori.

Gambar 7: Langkah keenam

7. Data yang terakhir adalah operator. Maka, kita melakukan operasi terhadap kedua elemen teratas dalam stack. Dalam hal ini 1 + -5 = -4

Gambar 8: Langkah ketujuh

Data yang ada di dalam stack adalah -4, sehingga hasil yang diperoleh adalah -4. Sesuai dengan hasil yang kita inginkan.

(41)

32

Tugas Anda dalam praktikum ini adalah mengimplementasikan program untuk menghitung operasi aritmatika dalam notasi postfix di main program. Gunakanlah tipe bentukan stack, fungsi pop, dan fungsi push yang telah Anda buat pada Tugas Pendahuluan.

Untuk test case praktikum ini, Anda selalu mendapatkan input dengan panjang 7 (operator dan operand) dan selalu valid. Anda bisa mengasumsikan dengan aman bahwa operand yang diberikan tidak akan lebih dari 1 digit (hanya 0-9) dan operator yang diberikan hanya 4 operator dasar (+, -, *, dan /).

Printlah dua angka di belakang koma.

Contoh Input dan Output Contoh 1: Input ke STDIN 4 2 * 3 – 1 + Output ke STDOUT Hasil operasi: -4.00 Contoh 2: Input ke STDIN 1 3 + 4 * 2 / Output ke STDOUT Hasil operasi: 0.13 Contoh 3: Input ke STDIN 1 2 3 + + 4 / Output ke STDOUT Hasil operasi: 1.50 Deliverable

Simpan tugas problem ini dengan nama problem1.c. Jangan lupa memberikan identitas (header file) di awal file ini. Pastikan program dapat dikompilasi dan dijalankan dengan benar.

Petunjuk Penyerahan Tugas Praktikum Modul 12

Simpan file problem1.c dalam satu folder. Gunakan program 7-zip untuk mengkompresi menjadi arsip TAR (.tar). Penamaan file TAR bebas (disarankan menggunakan NIM). File TAR ini yang akan di-submit ke server MIKU saat pengumpulan tugas pendahuluan saat memasuki laboratorium. Hanya file kode saja yang dimasukkan ke dalam arsip TAR. File executable tidak perlu

(42)

33

dimasukkan.

(43)

22

T

UGAS

P

ENDAHULUAN

M

ODUL

11

P

ENGENALAN DAN

I

MPLEMENTASI

S

TRUKTUR

D

ATA

Q

UEUE

Prepared by: Ardianto Satriawan (02-2015) Pengenalan

Pengertian Linked List

Pada Tugas Pendahuluan praktikum kali ini, anda tidak diminta untuk mengumpulkan program, melainkan mempersiapkan apa yang dibutuhkan dalam praktikum. Anda tidak diperkenankan ikut praktikum apabila tidak mengerjakan tugas pendahuluan ini. Asisten akan memeriksa pekerjaan Anda di awal praktikum.

Queue adalah salah satu struktur data bentukan yang memodelkan sebuah antrian. Ujung antrian (paling depan) disebut dengan head of queue sedangkan pangkal antrian (paling belakang) disebut tail of queue. Queue dimodelkan dengan linked list, namun dengan sedikit perbedaan pada pointernya.

Untuk lebih jelasnya, model queue dengan linked list dapat dilihat pada gambar berikut:

Gambar 1: Implementasi queue dengan linked list

Pada queue, fungsi untuk menambahkan elemen ke dalam antrial disebut tail(), sedangkan untuk mengambil elemen paling depan disebut head().

Pada tugas pendahuluan ini, Anda diminta untuk mengimplementasikan tipe data bentukan untuk

queue dan juga implementasi fungsi head() dan tail(). Semuanya akan digunakan di dalam praktikum.

Tugas 1 : Implementasi Struktur Data Element Linked List

Definisi Masalah

Untuk mempermudah pekerjaan kita ke depan, kita harus membuat tipe bentukan untuk satu element dari queue. Pada praktikum kali ini, satu node terdiri dari dua buah data dan satu penunjuk. Perhatikan ilustrasi berikut

(44)

23

Gambar 2: Contoh satu element (node) queue

Tipe bentukan untuk satu element queue ini, kita sebut sebagai node. Data di dalamnya diberi nama elmt dan pointer ke node selanjutnya diberi nama next. Implementasikan tipe bentukan untuk

node.

Diberikan kode bantu sebagai berikut: typedef struct node

{

/** Fill what is missing in this structure ... ... **/

} node;

Tugas 2 : Implementasi Struktur Data Queue

Definisi Masalah

Setelah kita mengimplementasikan tipe bentukan untuk satu element atau node dari queue, maka selanjutnya Anda diminta untuk membuat tipe bentukan untuk queue itu sendiri. Ilustrasi dapat dilihat pada gambar 2 di atas. Pointer yang menunjuk ke elemen paling depan dari queue diberi nama

qhead sedangkan yang menunjuk elemen paling belakang diberi nama qtail.

Sekali lagi, diberikan kode bantuan sebagai berikut: typedef struct queuetype

{

/** Fill what is missing in this structure ... ... **/

} queuetype;

Tugas 3 : Implementasi Fungsi Tail

Definisi Masalah

Prototype dari fungsi tail() yang akan dibuat adalah sebagai berikut:

void tail(int elmt, queuetype *queue);

Fungsi tail akan menambahkan element ke akhir queue. Misalkan sebelum fungsi dipanggil, kita memiliki queue sebagai berikut:

(45)

24

Gambar 3: Sebelum tail dijalankan

Kemudian apabila kita memanggil fungsi tail dengan cara tail(5, &queue), maka queue yang kita punya akan menjadi:

Gambar 5: Setelah tail dijalankan

Tugas Anda adalah mengimplementasikan fungsi tail() ini, hingga bekerja dengan baik.

Tugas 4 : Implementasi Fungsi Head

Definisi Masalah

Prototype dari fungsi head() yang akan dibuat adalah sebagai berikut:

int head(queuetype *queue);

Fungsi head akan mengambil elemen pertama dari queue dan menjadikan nilainya sebagai return fungsi. Misalkan sebelum fungsi dipanggil, kita memiliki list sebagai berikut:

Gambar 4: Sebelum head dijalankan

Kemudian apabila kita memanggil fungsi head dengan cara head(&queue), maka queue yang kita punya akan menjadi:

(46)

25

Gambar 5: Setelah head dijalankan

Selain mengubah queue, fungsi ini juga mengembalikan (return) nilai 1 pada contoh di atas. Tugas Anda adalah mengimplementasikan fungsi head() ini, hingga bekerja dengan baik.

Petunjuk Penyerahan Tugas Pendahuluan Modul 11

Keempat tugas di atas disimpan dalam satu buah file .c, seharusnya file .c yang telah Anda buat kurang lebih seperti ini:

/* ... library, definition, etc */

typedef struct node

{

/** Fill what is missing in this structure ... **/

} node;

typedef struct queuetype

{

/** Fill what is missing in this structure ... **/

} queuetype;

/** function prototypes **/

void tail(int elmt, queuetype *queue);

int head(queuetype *queue);

int main(void) {

/** will be filled during lab session **/

}

/** function implementations **/

void tail(int elmt, queuetype *queue) {

/** tail function implementation **/

}

int head(queuetype *queue) {

/** head function implementation **/

}

Bawalah kode tersebut dan tunjukkan kepada asisten di awal praktikum.

(47)

28

T

UGAS

P

RAKTIKUM

M

ODUL

13

P

ENGGUNAAN DAN

A

PLIKASI

Q

UEUE

Prepared by: Ardianto Satriawan (02-2015)

Antrian Pada Bank

Penjelasan

Bank Pasar Turi (BPT) sedang mengadakan riset mengenai lamanya nasabah di bank mereka dilayani. Sistem antrian di Bank Pasar Turi ini seperti antrian pada umumnya bank:

 Nasabah mengambil nomor antrian,

 Teller memanggil nasabah dengan nomor urut terkecil,

 Nasabah dilayani di teller,

 Setelah teller selesai melayani nasabah, teller memanggil nasabah berikutnya.

Salah satu penelitian yang dilakukan adalah di BPT cabang sebuah universitas terkemuka di Bandung, Universitas Negeri Bandung (UNB). Teller yang dimiliki BPT-UNB ini ada 3 orang, sehingga dalam satu waktu 3 nasabah dapat dilayani.

Problem: Menghitung Total Waktu Pelayanan Antrian

Definisi Masalah

Cara dilakukannya penelitian ini adalah, ketika mengambil nomor antrian nasabah diminta untuk menuliskan berapa lama mereka bertransaksi dalam satuan menit. Angka yang dituliskan nasabah dianggap akurat. Data ini kemudian dientrikan kepada sistem.

Suatu hari, data yang didapat oleh peneliti adalah sebagai berikut: 7

2 4 5 3 5 3 2

Baris pertama menunjukkan jumlah nasabah di hari itu, yaitu 5 orang. Sedangkan baris berikutnya, adalah data yang mereka tuliskan ketika mengambil nomor antrian. Pengantri pertama memerlukan waktu 2 menit, pengantri kedua memerlukan waktu 4 menit, dan seterusnya.

Tiga teller BPT-UNB bernama Anisa, Bunga, dan Candra melayani para nasabah tersebut. Para peneliti menggunakan cara seperti yang dijelaskan berikut untuk mengukur lamanya kelima nasabah tersebut dilayani.

Mula-mula ketiganya dapat melayani tiga nasabah bersamaan, Anisa melayani nasabah pertama, Bunga melayani nasabah kedua, dan Candra melayani nasabah ketiga, masing-masing 2 menit, 4 menit, dan 5 menit.

(48)

29

Setelah 2 menit, Anisa dapat melayani nasabah keempat yang memerlukan waktu 3 menit.

Setelah empat menit, Bunga telah selesai melayani nasabah, sehingga dapat melayani nasabah kelima, yang memerlukan waktu 5 menit.

Setelah lima menit Anisa dan Candra dapat melayani nasabah, namun kebijakan Bank Pasar Turi adalah, teller memanggil nasabah dengan urutan nama. Sehingga Anisa terlebih dahulu memanggil nasabah keenam.

(49)

30

Selang beberapa detik – tidak perlu dihitung, Candra dapat melayani pelanggan terakhir, nasabah ketujuh.

Total waktu yang diperlukan adalah waktu yang terlama dari Anisa, Bunga, dan Candra melayani pelanggan. Sehingga untuk kasus di atas diperlukan 9 menit.

Tugas Anda pada praktikum ini adalah:

1. Mengantrikan pelanggan dalam struktur data bentukan queue yang telah Anda buat dalam tugas pendahuluan. Gunakan fungsi tail() untuk memasukkan pelanggan ke dalam antrian. 2. Mengimplementasikan program untuk menghitung waktu pelayanan di BTP-UNB dengan

cara seperti di atas. Gunakan fungsi head() untuk mensimulasikan pelanggan yang dilayani.

Contoh Input dan Output Contoh 1:

Input ke STDIN

7

2 4 5 3 5 3 2

Output ke STDOUT

(50)

31

Contoh 2: Input ke STDIN 5 2 4 5 3 7 Output ke STDOUT

Waktu yang diperlukan adalah 11 menit

Deliverable

Simpan tugas problem ini dengan nama problem1.c. Jangan lupa memberikan identitas (header file) di awal file ini. Pastikan program dapat dikompilasi dan dijalankan dengan benar.

Petunjuk Penyerahan Tugas Praktikum Modul 13

Simpan file problem1.c dalam satu folder. Gunakan program 7-zip untuk mengkompresi menjadi arsip TAR (.tar). Penamaan file TAR bebas (disarankan menggunakan NIM). File TAR ini yang akan di-submit ke server MIKU saat pengumpulan tugas pendahuluan saat memasuki laboratorium. Hanya file kode saja yang dimasukkan ke dalam arsip TAR. File executable tidak perlu dimasukkan.

(51)

32

Gambar

Gambar Sampul ©2012 Airbus Industrie
Gambar 2: ilustrasi linked list
Gambar 2: Implementasi linked list dari sparse vector A
Gambar 3: Representasi vektor A dan B
+7

Referensi

Dokumen terkait

Menurut Sunarno (2006) dalam memberikan pelayanan kepada masyarakat, ada beberapa faktor yang sering ditemui serta berpengaruh dalam upaya mewujudkan kualitas pelayanan

Pengendalian penyakit HDB pada tanaman padi yang disebabkan oleh Xoo masih cukup sulit dilakukan, mengingat patogen ini mempunyai daerah pencar yang luas dan mempunyai kemampuan

Memasarkan produk sudah barang tentu sangat penting sebab bila barang yang diproduksi tidak laku, maka proses produksi barang akan berhenti, artinya, proses kerja

Stigma separatis bekerja dengan sangat baik dalam menjauhkan masyarakat umum dari suara-suara kritis rakyat Papua, serta melegitimasi kekerasan yang terjadi pada mereka!. Bagaimana

Seorang Muslim shalaat witir setelah shalat tahajjud, jika hawatir tidak bangun, maka shalat witir sebelum tidur, berdasarkan sabda nabi : "Barangsiapa yang hawatir tidak bangun

Kepercayaan oleh pemilik industri rumah tangga kepada para pekerja semakin kuat karena adanya terdapat keluarga dari si pemilik industri rumah tangga dalam hal

Model numeris yang dikembangkan dengan persamaan momentum tersebut dapat mensimulasikan wave set down pada perairan dalam, wave setup pada perairan dangkal, dispersi dan

Workshop Penyusunan Karya Tulis Ilmiah bagi Guru Pendidikan Agama Islam Tahun 2015 Pada kantor Kementerian Agama Tuban.. No Nama Peserta Asal Sekolah