Anda di halaman 1dari 51

1

TENTANG MODUL PRAKTIKUM

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.

2
PRAKATA

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

3
DAFTAR ISI

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

Rencana Agenda Praktikum ............................................................................................................................ 20

4
PERATURAN UMUM PRAKTIKUM

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.

5
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

6
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.

7
PETUNJUK TEKNIS PELAKSANAAN PRAKTIKUM

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 25 %
diunggah ke server MIKU setelah praktikan memasuki ruangan praktikum.
Saat Praktikum
Aktivitas Praktikum
Penilaian meliputi kelengkapan praktikum yang disiapkan oleh praktikan dan sikap serta 7,5%
perilaku praktikan.
Kode (Source Code)
Kode yang telah diserahkan dan diunggah melalui server MIKU akan secara otomatis
diperiksa terhadap plagiarisme, dikompilasi, dan dijalankan menggunakan berbagai
60%
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.
Setelah Praktikum
Kode (Source Code)
Kode yang telah diunggah ke server MIKU akan diperiksa kembali oleh asisten 7,5%
praktikum untuk menilai kerapihan dan kualitas pembacaan (readability).
Total Nilai 100%

8
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.

9
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 Praktikan dapat mengunggah tugas
praktikum. Praktikan mengunggah pendahuluan ke Server MIKU bila
tugas pendahuluan ke Server MIKU. berada di jaringan komputer ITB.
08.15 Praktikan mengunduh tugasPraktikan dapat mengunduh tugas
praktikum dari Server MIKU dan praktikum dari Server MIKU dan dapat
memulai mengerjakan dimemulai mengerjakan di luar
laboratorium. laboratorium (tidak wajib).
10.00 Praktikum sesi pagi telah selesai. Praktikan memasuki ruangan praktikum.
Praktikan dapat mengunggah file Praktikan mengunggah tugas
tugas praktikum apabila telah selesai.pendahuluan ke Server MIKU apabila
belum diunggah.
10.15 Praktikan dapat keluar dari Praktikan mengunduh tugas praktikum
laboratorium dan dapat melanjutkan dari Server MIKU apabila belum
tugas praktikum apabila belum mengunduh dan memulai atau
selesai. 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.

10
PETUNJUK PENGGUNAAN SERVER MIKU

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.

11
Menu Login ke MIKU

Menu Personalisasi Username

Menu Course yang Tersedia

12
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).

13
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.

Menu Detail Kompilasi dan Pengujian

14
Menu Scoreboard

15
PETUNJUK KOMPILASI PROGRAM BAHASA 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

16
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.
gcc -o Program.exe sub.c main.c

17
DIAGRAM ALIR PELAKSANAAN PRAKTIKUM

Praktikan Asisten Praktikum


Maksimum D-2 Praktikum

Mulai Mulai

Asisten atau Koordinator Asisten mengunggah tugas pendahuluan


ke web http://el2208.bagus.my.id dalam bentuk PDF.

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.


H Praktikum

Asisten mengawasi jalannya praktikum

Praktikan mengerjakan tugas praktikum dengan baik dan benar.

Praktikan mengunggah tugas praktikum setelah memastikan bahwa


program telah berfungsi dengan benar.

Server memeriksa indikasi-indikasi terjadinya plagiarisme untuk


source code (n-to-n compare)
Maksimum D+7 Praktikum

Koordinator asisten mengolah nilai praktikum

Praktikan dapat melihat nilai rekapitulasi praktikum di server


el2208.bagus.my.id

Selesai Selesai

18
DAFTAR ASISTEN PRAKTIKUM

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

M. Hariomurti Hariawan C. Antonius Perdana R. Baharuddin Aziz Devi Oktama Putri Michael

19
RENCANA AGENDA PRAKTIKUM

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
Waktu pelaksanaan : Kamis, 9 April 2015 hingga Jumat, 10 April 2015

20
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
Waktu pelaksanaan : Kamis, 23 April 2015 hingga Jumat, 24 April 2015

21
2
TUGAS PENDAHULUAN
MODUL 11
PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA LINKED LIST

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”-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.

22
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
{
/** Fill what is missing

23
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.

24
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 **/


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

25
/** append function implementation **/
}

Bawalah kode tersebut dan tunjukkan kepada asisten di awal praktikum.

Selesai

26
TUGAS PRAKTIKUM
MODUL 11
PENGGUNAAN DAN APLIKASI LINKED LIST

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.

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

𝐴 ∙ 𝐵 = ∑ 𝑎𝑖 𝑏𝑖 = 𝑎1 𝑏1 + 𝑎2 𝑏2 + ⋯ + 𝑎𝑛 𝑏𝑛
𝑖=0
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

Artinya kita memiliki vektor A dan B, direpresentasikan dengan linked list sebagai berikut:

29
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.

30
Selesai

31
TUGAS PENDAHULUAN
MODUL 12
PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA STACK

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
stack, fungsi push(), dan fungsi pop(). Ketiga-tiganya akan digunakan di dalam praktikum.

22
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
...
... **/
} node;

23
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.

Gambar 4: Sebelum dan setelah push(7.9, &stack) dieksekusi

24
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);

Tugas Anda adalah mengimplementasikan fungsi pop ini, hingga bekerja dengan baik.

25
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.

Selesai

26
TUGAS PRAKTIKUM
MODUL 12
PENGGUNAAN DAN APLIKASI STACK

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

28
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:
 13+4*2/
 42*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.

29
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.

30
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.

31
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

32
dimasukkan.

Selesai

33
TUGAS PENDAHULUAN
MODUL 11
PENGENALAN DAN IMPLEMENTASI STRUKTUR DATA QUEUE

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

22
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:

23
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:

24
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.

Selesai

25
TUGAS PRAKTIKUM
MODUL 13
PENGGUNAAN DAN APLIKASI QUEUE

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.

28
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.

29
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
Waktu yang diperlukan adalah 9 menit

30
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.

31
Selesai

32

Anda mungkin juga menyukai