• Tidak ada hasil yang ditemukan

Modul Algoritma dan Struktur Data (1)

N/A
N/A
Protected

Academic year: 2018

Membagikan "Modul Algoritma dan Struktur Data (1)"

Copied!
78
0
0

Teks penuh

(1)

MODUL PRAKTIKUM

“ALGORITMA‏

DAN STRUKTUR DATA

LABORATORIUM KOMPUTER

FAKULTAS ILMU KOMPUTER

(2)

2/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Universitas Sriwijaya

Fakultas Ilmu Komputer Laboratorium

LEMBAR PENGESAHAN MODUL PRAKTIKUM

SISTEM MANAJEMEN MUTU

ISO 9001:2008

No. Dokumen ……. Tanggal 4 JUNI 2011

Revisi 0 Halaman 2 DARI 78

MODUL PRAKTIKUM

Mata Kuliah Praktikum

: Algoritma Dan Struktur Data

Kode Mata Kuliah Praktikum

: FSK27211

SKS

: 1

Program Studi

: Sistem Komputer

Semester

: 3 (Ganjil)

DIBUAT OLEH DISAHKAN OLEH DIKETAHUI OLEH

TIM LABORAN LABORATORIUM FASILKOM UNSRI

TIM DOSEN SISTEM KOMPUTER FASILKOM

UNSRI

(3)

3/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Daftar Isi

Halaman Depan ... 1

Lembar Pengesahan Modul Praktikum ... 2

Daftar Isi ... 3

Lembar Kerja Praktikum 1 : Pengenalan Lingkungan C dan C++ ... 4

Lembar Kerja Praktikum 2 : Pengkondisian dan Pengulangan ... 16

Lembar Kerja Praktikum 3 : Prosedur dan Fungsi... 26

Lembar Kerja Praktikum 4 : Array / Larik ... 32

Lembar Kerja Praktikum 5 : Searching ... 35

Lembar Kerja Praktikum 6 : Sorting ... 41

Lembar Kerja Praktikum 7 : Pointer dan ADT ... 45

Lembar Kerja Praktikum 8 : List ... 51

Lembar Kerja Praktikum 9 : Stack... 59

Lembar Kerja Praktikum 10 : Queue ... 64

Lembar Kerja Praktikum 11 : Binary Search Tree ... 69

Lembar Kerja Praktikum 12 : Rekursif ... 74

(4)

4/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 1 : Pengenalan Lingkungan C dan C++

I.

Tujuan

Setelah mengerjakan LKP 1 ini, anda diharapkan dapat:

1. mengenal lingkungan salah satu compiler bahasa pemrograman C yaitu Turbo C++ 4.5.

2. menggunakan compiler tersebut untuk menyelesaikan kasus sederhana.

3. mengenal berbagai tipe data, operator dan statement I/O pada bahasa C dan C++. 4. menggunakan variable, tipe data, operator dan statement I/O untuk menyelesaikan

berbagai kasus sederhana.

II.

Dasar Teori

Pengenalan Lingkungan Turbo C++ 4.5

Turbo C++ 4.5 adalah tool yang dipakai untuk membuat code program dalam bahasa C ataupun C++. Berikut adalah jendela utama Turbo C++ 4.5.

1 : Menu Utama 2 : Toolbar

3 : Jendela pengetikan kode program 4 : Jendela Message/Pesan kesalahan kode

1 2

3

(5)

5/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Create new, Open, Save, Save As File

Untuk memulai membuat kode program di Turbo C++ 4.5 langkah-langkahnya adalah sebagai berikut :

1. Buka Turbo C++ 4.5 dari menu program sehingga akan keluar jendela Turbo C++ berikut :

2. Kemudian pilih menu File > New maka akan tampil jendela baru (di dalam jendela utama Turbo C++) untuk menuliskan kode program.

(6)

6/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Untuk membuka file atau kode program yang sudah pernah dibuat maka langkah-langkahnya adalah seperti berikut :

1. Pilih menu File > Open maka akan tampil jendela seperti berikut :

2. Tentukan drive dan direktori lokasi tempat menyimpan file program kemudian klik OK.

Compile Program, Pendeteksian Error dan Warning, Run Program

Setelah menuliskan kode program, maka berikutnya adalah compile program dengan tujuan untuk mendeteksi kesalahan-kesalahan dalam penulisan kode program. Adapun langkah-langkahnya adalah sebagai berikut :

1. Pilih menu Project > Compile, atau kombinasi tombol ALT+F9, akan tampil jendela status compile seperti berikut :

(7)

7/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Dari status di atas dapat dilihat bahwa terdapat error pada program. Untuk melihat pesan error tersebut klik OK maka akan tampil jendela pesan error seperti berikut :

Jendela di bawah ini menunjukkan terdapat warning pada program.

Untuk melihat pesan warning tersebut, klik tombol OK.

2. Setelah kode program di-compile maka langkah berikutnya adalah menjalankannya, yaitu dengan memilih menu Debug > Run atau kombinasi tombol CTRL+F9.

Pengenalan C++

Setiap program C++ mempunyai bentuk seperti berikut ini yaitu:

Prepocessor Directive

Adalah salah satu pengarah prepocessor directive yang tersedia pada C++. Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi. Bentuk umumnya :

# include <nama_file>

# prepocessor directive void main()

{

(8)

8/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu bentuk pernyataan, tetapi merupakan prepocessor directive. Baris tersebut menginstrusikan kepada kompiler yang menyisipkan file lain dalam hal ini file yang berakhiran .h(file header) yaitu file yang berisi sebagai deklarasi contohnya:

Preprocessor Directive Fungsi

#include <iostream.h> Diperlukan pada program yang melibatkan objek cout

#include <conio.h> Diperlukan bila melibatkan clscr(),yang perintah unrtuk membersihkan layar

#include <iomanip.h> Diperlukan bila melibatkan setw() yang bermanfaat untuk mengatur lebar dari suatu tampilan data

#include <math.h> Diperlukan pada program yang menngunakan operasi sqrt() yang bermanfaat untuk operasi matematika kuadrat

Fungsi Main ()

Fungsi ini menjadi awal dan akhir eksekusi program C++. main adalah nama judul fungsi. Melihat bentuk seperti itu dapat kita ambil kesimpulan bahwa batang tubuh program utama berada didalam fungsi main( ).

Kata void yang mendahului main() dipakai untuk menyatakan bahwa fungsi ini tidak memiliki nilai balik

Komentar

Komentar merupakan bagian yang penting dalam program.Kehadirannya sangat membantu pemrogram taupun orang lain dalm memahami program,karena berupa penjelasan mengenai

Void main() {

cout<<”Hallo dunia”<<endl;

}

Pernyataan

Tubuh Fungsi main () Fungsi yang akan dieksekusi pertama kali oleh c++

Menyatakan bahwa fungsi main tidak memiliki nilai balik Menyatakan bahwa fungsi tidak memiliki argumen

Batas atas program

(9)

9/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

program atau bagian-bagian dari program.Komentar tidak pernah dicompile oleh compiler. Dalam C++ terdapat 2 jenis komentar, yaitu :

Jenis 1 : /* Komentar anda diletakkan di dalam ini Bisa mengapit lebih dari satu baris */

Jenis 2 : // Komentar anda diletakkan disini ( hanya bisa perbaris ) Tanda Semikolon

Tanda semicolon “ ; ” digunakan untuk mengakhiri sebuah pernyataan. Setiap

pernyataan harus diakhiri dengan sebuah tanda semicolon. Cout (dibaca : C out)

Pernyataan cout merupakan sebuah objek di dalam C++, yang digunakan untuk mengarahkan data ke dalam standar output (cetak pada layar).

Variabel

Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai dari suatu variable bisa diubah-ubah sesuai kebutuhan.

Deklarasi

Deklarasi diperlukan bila kita akan menggunakan pengenal (identifier) dalam program. Identifier dapat berupa variable, konstanta dan fungsi.

Deklarasi Variabel Bentuk umumnya :

Contoh : int x; //x di sini sebagai variabel bertype integer

float luas; //luas adalah variabel bertype float

Deklarasi Konstanta

a. Menggunakan keyword const

Contoh : const float PI = 3.14152965;

Berbeda dengan variable, konstanta bernama tidak dapat diubah jika telah diinisialisasi b. Menggunakan #define

Contoh : #define PI 3.14152965

Keuntungan menggunakan #define apabila dibandingkan dengan const adalah kecepatan kompilasi, karena sebelum kompilasi dilaksanakan, kompiler pertama kali mencari

(10)

10/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

symbol #define (oleh sebab itu mengapa # dikatakan prepocessor directive) dan mengganti semua Phi dengan nilai 3.14152965.

Tipe Data

Tipe Data dapat dibedakan menjadi dua, yaitu tipe data dasar dan tipe data bentukan Tipe Data Dasar

Adalah tipe yang dapat langsung dipakai. Tipe Dasar Ukuran Memori

(byte)

Jangkauan Nilai Jumlah Digit Presisi

Char 1 -128 hingga +127 -

Integer 2 -32768 hingga +32767 -

Long integer 4 -2.147.438.648 hingga

2.147.438.647 -

Float 4 3,4E-38 hingga 3,4E38 6-7

Double 8 1.7E-308 hingga 1.7E308 15-16 long double 10 3.4E-4932 hingga 1.1E4932 19

Beberapa format yang dipakai untuk mencetak nilai numerik integer :

Kode Format Hasil yang dicetak

%i atau %d %u

%li %lu

Numerik integer bertanda

Numerik integer tak bertanda (unsigned integer) Numerik Long integer bertanda

Numerik Unsigned Long Integerl

%c Karakter ASCII

%x %o

Hexadecimal Integer Octal Integer

Tipe Bentukan

Tipe bentukan adalah type yang dibentuk dari type dasar atau dari type bentukan lain yang sudah didefinisikan, contohnya tipe struktur. Struktur terdiri dari data yang disebut field. Field–field tersebut digabungkan menjadi satu tujuan untuk kemudahan dalam operasi. Mengenai tipe data bentukan akan dibahas lebih lanjut pada mata kuliah Algoritma dan Pemrograman 2.

Operator dan Statement I/O

Operator adalah symbol yang biasa dilibatkan dalam program untuk melakukan sesuatu operasi atau manipulasi.

Operator Penugasan

(11)

11/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Operator Aritmatika

OPERATOR DESKRIPSI CONTOH

+ Penjumlahan(add) m + n

- Pengurangan(Substract) m - n

* Perkalian(Multiply) m * n

/ Pembagian(Divide) m / n

% Sisa Pembagian Integer(Modulus) m % n

- Negasi(Negate) -m

Operator Hubungan (Perbandingan)

OPERATOR ARTI CONTOH

== Sama Dengan(bukan assignment)

X==Y Apakah X sama dengan Y != Tidak sama dengan X!=Y Apakah X tidak sama dengan Y

> Lebih besar X>Y Apakah X lebih besar Y < Lebih kecil X<Y Apakah X lebih kecil Y >= Lebih besar atau

sama dengan

X>=Y Apakah X lebih dari sama dengan Y <= Lebih kecil atau sama

dengan

X<=Y Apakah X kurang dari sama dengan Y

Operator Naik dan Turun (Increment dan Decrement) Operator Increment  ++

Operator Decrement --

Operator pre-increment dan post-decrement mempunyai fungsi yang sama yaitu, untuk menambah atau mengurangi satu nilai.

Operator Bitwise

OPERATOR DESKRIPSI CONTOH

<< Geser n bit ke kiri M << N >> Geser n bit ke kanan M >> N

& Bitwise AND M & N

I Bitwise OR M I N

^ Bitwise XOR M ^ N

~ Bitwise NOT ~M

NB : Seluruh operator bitwise hanya bisa dikenakan pada operand bertipe data int atau chaR. Operator Logika

Operator logika digunakan untuk menghubungkan dua atau lebih ungkapan menjadi sebuah ungkapan berkondisi.

OPERATOR DESKRIPSI CONTOH

&& Logic AND m && n

(12)

12/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

III.

Prepraktikum

1. Instal program Turbo C++ pada computer atau laptop

2. Buatlah contoh deklarasi masing-masing tipe dasar dalam Bahasa C atau C++ ! 3. Isilah tabel berikut ini untuk melakukan penelusuran kebenaran penulisan nama

variabel-variabel ini.

Nama Variabel Benar/Salah Alasan Pembetulan Nama

Nama anda Nama_anda $Nama$Anda 80mahasiswa rata-rata NIM huruf5

4. Jelaskan aturan-aturan yang digunakan dalam penulisan nama variable.

IV.

Kegiatan Praktikum

1. Bukalah software Turbo C++

2. Program mengeluarkan tulisan ”Selamat Datang di Fakultas Ilmu Komputer” Algoritma

Deklarasi : - Algoritma :

write(“Selamat Datang di Fakultas Ilmu Komputer”)

Ketikkan kode program berikut berdasarkan algoritma yang diberikan diatas

3. Compile program dengan menekan Alt + F9 atau pilih menu Project  Compile 4. Jalankan program dengan menekan Ctrl + F9 atau pilih menu Debug  Run

! Logic NOT !m

1: #include <stdio.h> //header

2:

3: void main()//fungsi utama

4: {

5: printf(“Selamat Datang di Fakultas Ilmu Komputer”);//statement

(13)

13/77

Fakultas Ilmu Komputer – Universitas Sriwijaya 5. Simpan file dengan nama Praktikum1.cpp

6. Buka file baru dengan menekan File  New

7. Ketikkan kode program berdasarkan algoritma yang diberikan Algoritma

Deklarasi : - Algoritma :

write(“Selamat Datang di Fakultas Ilmu Komputer”) write(“Nama Anda”)

write(“Nim Anda”) write(“Jurusan Anda”) 8. Simpan file dengan nama Praktikum2.cpp 9. Jalankan program praktikum2.cpp

10.Buatlah sebuah program menghitung volume balok dengan panjang = 2,lebar = 2,dan tinggi = 1.type data tinggi,panjang, lebar dan volume adalah integer.

Algoritma

Deklarasi :

int panjang = 2 int lebar = 2 int tinggi = 1 volume : integer Algoritma :

Volume  panjang * lebar * tinggi write(“volume balok adalah ” + volume)

(14)

14/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

11.Jalankan program soal nomor 10 dan analisa hasilnya

12.Buat program menghitung volume bola dengan phi sebagai konstanta dan jari-jari sebagai masukan.

Algoritma

Deklarasi :

const Phi = 3.14 {konstanta} v,r : real

Algoritma : read(r)

v  1.33 * phi * r * r write (v)

13.Jalankan program nomor 12 dan analisa hasilnya

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

1 . . 13

1: #include <iostream.h>

2: void main () 3: {

4: Int volume,panjang,lebar,tinggi; 5: panjang = 2;

6: lebar=2; 7: tinggi =1;

8: volume =panjang*lebar*tinggi;

(15)

15/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

VI.

Kesimpulan

VII.

Evaluasi dan Pertanyaan

1. Buatlah sebuah program untuk menghitung rumus x !

c ab c b x

2 4 2 2  

 a,b,dan c sebagai masukan

(16)

16/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 2: Pengkondisian dan Pengulangan

I.

Tujuan

Setelah mengerjakan LKP 2 ini, anda diharapkan dapat:

1. memahami konsep pengkondisian dan pengulangan dalam pemrograman 2. mengenal berbagai bentuk pengkondisian dan pengulangan pada bahasa C.

3. menggunakan pengkondisian dan pengulangan untuk menyelesaikan berbagai kasus sederhana.

II.

Dasar Teori

Pengkondisian

Pada umumnya satu permasalahan yang komplek memerlukan suatu penyelesaian kondisi. Dengan menyeleksi suatu kondisi, maka selanjutnya dapat ditentukan tindakan apa yang harus dilakukan, tergantung pada hasil kondisi penyeleksian. Jadi suatu aksi hanya dikerjakan apabila persyaratan atau kondisi tertentu terpenuhi.

Penyeleksian Satu Kasus, dengan menggunakan struktur IF:

Pada penyeleksian satu kasus, kondisi akan diseleksi oleh statemen if. Bila kondisi bernilai benar (true), maka aksi sesudah kata then (dapat berupa satu atau lebih aksi) akan diproses. Bila kondisi bernilai salah (false), maka tidak ada aksi yang akan dikerjakan. Statemen endif

adalah untuk mempertegas bagian awal dan bagian akhir struktur IF.

Gambar 3.1 Diagram Alir Struktur Penyeleksian Satu Kasus (IF)

Gambar 3.2. Struktur Untuk Penyeleksian Satu Kasus (IF)

(17)

17/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Contoh Program :

Bentuk IF dengan operator Untuk operator logika AND :

Contoh Program :

Untuk operator logika OR :

Contoh Program :

Penyeleksian Dua Kasus, menggunakan struktur IF- ELSE:

Dalam struktur IF-ELSE, aksi1 akan dilaksanakan jika kondisi bernilai benar (true), dan jika if (kondisi1 && kondisi2)

Aksi;

1: #include <stdio.h> 2: void main()

3: {

4: int a = 10; 5:

6: if (a< 15 && a>9) 7: {

8: printf(“15 lebih besar dari %d lebih besar dari 9”,a); 9: }

10: }

if (kondisi1 || kondisi2) Aksi;

1: #include <stdio.h> 2: void main()

3: {

4: int a = 15; 5:

6: if (a%5==0 || a%2==0) 7: {

8: printf(“%d habis dibagi 5 atau 2”,a); 9: }

10: }

1: #include <stdio.h> 2: void main()

3: {

4: int a; 5:

6: a = 10; 7:

8: if (a%2==0) 9: {

10: printf(“%d adalah bilangan genap”,a); 11: }

(18)

18/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

kondisi bernilai salah (false) maka aksi2 yang akan dilaksanakan. Statemen else menyatakan ingkaran (negation) dari kondisi.

Gambar 3.3 Diagram Alir Struktur IF- ELSE

Gambar 3.4. Struktur Untuk Penyeleksian Dua Kasus (IF-ELSE)

Contoh Program :

Penyeleksian Tiga Kasus atau Lebih (Penyeleksian Tersarang)

Untuk penyeleksian tiga kasus atau lebih juga menggunakan struktur IF-ELSE sebagaimana halnya permasalahan dua kasus.

if (kondisi) aksi1; else aksi2;

1: #include <stdio.h> 2:

3: void main() 4: {

5: int a; 6:

7: printf(“Masukkan sebuah bilangan = ”); 8: scanf(“%d”,&a);

9:

10: if (a%2==0) 11: {

12: printf(“%d adalah Bilangan genap”,a); 13: }

14: else 15: {

16: printf(“%d adalah Bilangan ganjil”,a); 17: }

(19)

19/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Gambar 3.5 Diagram Alir dari Struktur Tiga Kasus IF- ELSE (tersarang)

Gambar 3.6 Struktur Untuk Penyeleksian Tiga Kasus IF-ELSE (tersarang)

Contoh Program :

if (kondisi1)

pernyataan1; else if (kondisi2)

pernyataan2; else if (kondisi3)

pernyataan3; else if (kondisiM)

pernyataanM;

else /*Opsional*/

pernyataanN; /*Opsional*/

1: #include <stdio.h> 2:

3: void main() 4: {

5: int T; 6:

7: printf(“Masukkan Nilai Suhu = ”); 8: scanf(“%d”,&T);

9:

10: if (T<=0) 11: {

12: printf(“Kondisi Beku”); 13: }

14: else if (T>0 && T<=100) 15: {

16: printf(“Kondisi Cair”); 17: }

18: else 19: {

20: printf(“Kondisi Uap”); 21: }

(20)

20/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Struktur CASE

Selain bentuk if, pengkondisian dalam bahasa C dapat pula menggunakan bentuk switch, sintaks penulisannya adalah sebagai berikut:

Contoh Program :

switch(ekspresi) {

case (kondisi1):

Pernyataan1; break;

case (kondisi2):

Pernyataan2;

break; : :

case (kondisiN): PernyataanN; break; default: Pernyatanlain; break; }

1: #include <stdio.h> 2:

3: void main() 4: {

5: int nilai;

6: printf(”Masukkan nilai : “); 7: scanf(“%d”,&nilai);

8:

9: switch(nilai) 10: {

11: case(1): 12: {

13: printf(“satu\n”); 14: }

15: break; 16: case(2): 17: {

19: printf(“dua\n”); 20: }

21: break; 22: case(3): 23; {

24: printf(“tiga\n”); 25: }

(21)

21/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Pengulangan

Struktur pengulangan terdiri atas dua bagian :

1. Kondisi pengulangan yaitu ekspresi Boolean yang harus dipenuhi untuk melaksanaakan pengulangan

2. Isi atau badan pengulangan yaitu satu atau lebih pernyataan(aksi) yang akan diulang.

Bentuk FOR

Perulangan dalam bahasa C dapat menggunakan bentuk FOR, sintaks penulisannya adalah sebagai berikut :

Contoh Program :

Bentuk WHILE

Perulangan dalam bahasa C dapat pula menggunakan bentuk WHILE, sintaks penulisannya adalah sebagai berikut :

Contoh Program :

27: default: 28: {

29: printf(“tidak ada nilai\n”); 30: }

31: break; 32: }

33: }

for (nilai awal; kondisi perulangan; operasi) {

Statement }

1: #include <stdio.h> 2: void main()

3: {

4: for(int i = 0; i < 9; i++) 5: {

6: printf(“%d ”,i); 7: }

8: }

while (kondisi) {

(22)

22/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Bentuk DO-WHILE

Perulangan dalam bahasa C dapat pula menggunakan bentuk DO-WHILE, sintaks penulisannya adalah sebagai berikut :

Contoh Program :

III.

Prepraktikum

Kerjakan tugas-tugas di bawah ini sebelum praktikum dimulai.

1. Jelaskan pada kondisi apa sebaiknya struktur seleksi if dan case digunakan! Apa perbedaan dari kedua struktur tersebut?

2. Jelaskan perbedaan antara struktur pengulangan FOR, WHILE dan DO-While dan bagaimana hasilnya untuk implementasi masing-masing!

IV.

Kegiatan Praktikum

1. Buat program untuk menentukan nilai dalam huruf dengan ketentukan mencari nilai akhir

1: #include <stdio.h> 2:

3: void main() 4: {

5: int i = 0; 6: while(i<10) 7: {

8: printf(“%d\n”,i);; 9: i++;

10: } 11: } do { Statement } while (kondisi);

1: #include <stdio.h> 2:

3: void main() 4: {

5: int i = 0; 6: do

7: {

8: printf(“%d\n”,i); 9: i++;

10: }

(23)

23/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Nilai akhir = (15% *laporan)+(15%*kuis)+(30%*mid)+(40%*uas) Ketentuannya : A  >85 s/d 100

B  >70 s/d 85 C  >55 s/d 70 D  >40 s/d 55 E  <40 Algoritma

Deklarasi :

laporan,kuis,mid,uas : integer NA : float

Algoritma :

read(laporan) read(kuis) read(mid) read(uas)

NA  (0.15*laporan) + (0.15*kuis) + (0.3*mid) + (0.4*uas) write(“Nilai akhir anda adalah” + NA)

if(NA >85 and NA<=100) write(”Nilai A”) elseif(NA >70 and NA<=85)

write(”Nilai B”) elseif(NA >55 and NA<=70)

write(”Nilai C”) elseif(NA >45 and NA<=55)

write(”Nilai D”) else

write(”Nilai E”) endif

2. Jalankan program dari soal nomor 1 dan analisa hasilnya

3. Ubahlah program pada soal nomor 1 dengan menggunakan pengkondisian bentuk SWITCH – CASE

(24)

24/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Algoritma

Deklarasi : i : integer Algoritma :

write(”Program Menampilkan Bilangan Habis dibagi 3 ”) for i0 to 10 do

if(i%3==0) write(i) endif

endfor

5. Jalankan program pada soal nomor 4 dan analisa hasilnya

6. Ubahlah program pada soal nomor 1 dengan menggunakan pengulangan bentuk WHILE dan DO-WHILE

7. Buatlah program berdasarkan algoritma berikut ini : Algoritma

Deklarasi :

i,j : integer Algoritma :

for i  1 to 5 do for j  5 to i do

write(“*”)

endfor

write(“\n”) endfor

8. Jalankan program pada soal nomor 7 dan analisa hasilnya

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

(25)

25/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

VI.

Kesimpulan

VII.

Evaluasi dan Pertanyaan

1. Buat sebuah program kalkulator sederhana dengan inputan berupa, bilangan pertama, operator, dan bilangan kedua.

2. Buatlah program untuk menghitung pangkat dengan bilangan dan pemangkatnya merupakan masukan dari user

3. Buatlah program untuk mengurutkan tiga buah bilangan bulat (dari yang terkecil ke yang terbesar) yang dimasukkan melalui piranti masukan! (Asumsi: ketiga bilangan yang dimasukkan adalah bilangan yang berbeda)

Contoh:

Masukkan bilangan pertama : 9 Masukkan bilangan kedua : 1 Masukkan bilangan ketiga : -7

Urutan bilangan: -7 1 9

4. Buat sebuah program yang dapat menampilkan keluaran sebagai berikut :

Dengan jumlah baris berupa suatu inputan oleh user 1

2 3 4 5 6

(26)

26/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 3: Prosedur dan Fungsi

I.

Tujuan

Setelah mengerjakan LKP 3 ini, anda diharapkan dapat:

1. memahami konsep fungsi dan prosedur dalam pemrograman

2. menggunakan fungsi dan prosedur untuk menyelesaikan berbagai kasus sederhana.

II.

Dasar Teori

Definisi dan Bentuk Umum Prosedur

Prosedur adalah suatu fungsi yang tidak mengembalikan nilai, karena itu tipe data untuk prosedur adalah void atau kosong. Sintaks penulisannya adalah sebagai berikut :

Cara memanggil prosedur: NAMA_PROSEDUR;

Ketika NAMA_PROSEDUR dipanggil, kendali program berpindah secara otomatis ke

prosedur tersebut. Instruksi di dalam badan prosedur dilaksanakan. Setelah semua instruksi

selesai dilaksanakan, kendali program berpindah secara otomatis ke instruksi sesudah

pemanggilan prosedur.

Contoh Program :

Prosedur dengan Parameter Masukan

Parameter masukan adalah parameter yang nilainya berlaku sebagai masukan untuk prosedur. Pada parameter masukan, nilai parameter aktual diisikan ke dalam parameter

void Nama_Prosedur() {

Statement }

1: #include <stdio.h> 2:

3: void garis(); 4:

5: void main() 6: {

7: garis();

8: printf(“Nama saya adalah ANI “); 9: garis();

10: printf(“Saya adalah mahasiswa TEKNIK INFORMATIKA “); 11: garis();

12: }

13: void garis() 14: {

(27)

27/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

formal yang bersesuaian. Nilai ini digunakan di dalam badan prosedur yang bersangkutan. Nilai yang dinyatakan oleh parameter masukan tidak dapat dikirim keluar prosedur. Itulah alasan mengapa parameter jenis ini diacu sebagai parameter masukan.

Cara memanggil prosedur: NAMA_PROSEDUR(variabel1,variabel2);

Contoh program :

Prosedur dengan Parameter Masukan / Keluaran

Parameter masukan/keluaran adalah parameter yang berfungsi sebagai masukan sekaligus

keluaran bagi prosedur tersebut.

Cara memanggil prosedur: NAMA_PROSEDUR (VariabelMasukan,

VariabelMasukanKeluaran );

Contoh Program :

void Nama_Prosedur( TipeData variable1, TipeData variabel2 ) {

Statement }

1: #include <stdio.h> 2:

3: void hitung(int a, int b) 4: {

5: int hasil; 6: hasil=a+b;

7: printf(“Hasilnya adalah %d”,&hasil); 8: }

9:

10: void main() 11: {

12: int a,b;

13: printf(“Masukkan nilai A : ”); 14: scanf(a);

15: printf(“Masukkan nilai B : ”); 16: scanf(b);

17: hitung(a,b); 18: }

void Nama_Prosedur( TipeData VariableMasukan, TipeData &VariabelMasukanKeluaran ) {

(28)

28/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Definisi dan Bentuk Umum Fungsi

Fungsi juga merupakan modul program yang mempunyai tujuan spesifik. Fungsi

memberikan/mengembalikan (return) sebuah nilai dan tipe tertentu (tipe dasar atau tipe

bentukan). Fungsi diakses dengan memanggil namanya.

Contoh Program :

1: #include <stdio.h> 2:

3: void hitung(int a, int b, int &hasil) 4: {

5: int hasil; 6: hasil=a+b; 7: }

8:

9: void main() 10: {

11: int a,b,hasil;

12: printf(“Masukkan nilai A : ”); 13: scanf(a);

14: printf(“Masukkan nilai B : ”); 15: scanf(b);

16: hitung(a,b,hasil);

17: printf(“Hasil nya adalah %d”,hasil); 18: }

TipeData Nama_Fungsi( TipeData variabel1, TipeData variabel2) {

Statement return variabel }

1: #include <stdio.h> 2:

3: int tambah(int a, int b); 4:

5: void main() 6: {

7: int a,b,hasil; 8:

9: printf(“Nilai a = “); 10: scanf(“%d”,&a);

11:

12: printf(“Nilai b = “); 13: scanf(“%d”,&b);

14:

15: hasil = tambah(a,b); 16:

17:

(29)

29/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Variabel Global dan Lokal

Variabel-variabel yang dideklarasikan di dalam bagian Deklarasi Prosedur ataupun Fungsi bersifat “lokal” dan hanya dapat digunakan di dalam Prosedur/Fungsi yang melingkupinya saja. Sedangkan variabel-variabel yang dideklarasikan di dalam program utama bersifat “global” dan dapat digunakan di bagian manapun di dalam program, baik di dalam program utama maupun di dalam Prosedur/Fungsi.

Contoh Program :

III.

Prepraktikum

Kerjakan tugas-tugas di bawah ini sebelum praktikum dimulai.

1. Prosedur dan Fungsi merupakan pemrograman modular. Apakah perbedaan antara keduanya? Kapankah suatu fungsi dibuat dan digunakan? Dan kapankah suatu prosedur digunakan? Bisakah suatu kasus diselesaikan menggunakan prosedur dan fungsi? Sertai alasannya

20:

21: int tambah(int a, int b) 22: {

23: int Hasil; 24: Hasil = a + b; 25: return Hasil; 26: }

1: #include <stdio.h> 2: int a,b,hasil; 3: int tambah(); 4:

5: void main() 6: {

7:

8: printf(“Nilai a = “); 10: scanf(“%d”,&a);

11:

12: printf(“Nilai b = “); 13: scanf(“%d”,&b);

14:

15: hasil = tambah(); 16:

17:

18: printf(“Hasil = %d\n”,hasil); 19: }

20:

21: int tambah() 22: {

(30)

30/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

IV.

Kegiatan Praktikum

1. Buatlah program menghitung luas lingkaran dengan menggunakan prosedur dan ada prosedur input, prosedur hitung, prosedur output.

Algoritma

Deklarasi : r: integer luas : float

procedur input(input/output r: integer) {input data jari jari} procedur hitung(input/output r: integer, input/output luas:float) {menghitung luas lingkaran}

procedur output(input r: integer, input luas:float) {menampilakan jari jari dan luas lingkaran}

Algoritma : input(r) hitung(r,luas) output(r,luas)

2. Jalankan program pada soal nomor 1 dan analisa hasilnya

3. Ubahlah program pada soal nomor 1 dengan menggunakan FUNGSI

4. Buatlah program menghitung factorial dengan menggunakan prosedur dimana bilangan factorial nya merupakan masukkan dari user

Algoritma

Deklarasi :

factorial, hasil: integer

procedur input(input/output factorial: integer) {input bilangan yang akan difaktorialkan}

procedur hitung_faktorial(input/output factorial: integer, input/output hasil:integer) {menghitung faktorial}

procedur output(input hasil:float) {menampilakan hasil factorial } Algoritma :

(31)

31/77

Fakultas Ilmu Komputer – Universitas Sriwijaya 5. Jalankan program pada soal nomor 4 dan analisa hasilnya

6. Ubahlah program pada soal nomor 4 dengan menggunakan FUNGSI

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

1 . . 6

VI.

Kesimpulan

VII.

Evaluasi dan Pertanyaan

1. Dengan menggunakan fungsi dan prosedur buatlah sebuah program untuk menghitung Kelipatan Persekutuan Terkecil dari dua bilangan yang diinputkan

2. Dengan menggunakan fungsi dan prosedur buatlah sebuah program untuk menghitung nilai sinus, cosinus, dan tangen dari sebuah sudut yang diinputkan

(32)

32/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 4: Array / Larik

I.

Tujuan

Setelah mengerjakan LKP 4 ini, anda diharapkan dapat: 1. memahami konsep array dalam pemrograman

2. menggunakan array untuk menyelesaikan berbagai kasus sederhana.

II.

Dasar Teori

Larik adalah tipe terstruktur yang terdiri dari sejumlah elemen-elemen yang bertipe sama.

Banyaknya elemen dalam suatu larik ditunjukkan oleh suatu indeks yang harus merupakan

tipe data yang menyatakan keterurutan, misalnya integer atau karakter (karena ia

menyatakan posisi data). Tiap-tiap elemen di larik dapat diakses langsung melalui indeksnya.

Suatu larik memiliki jumlah elemen yang jumlahnya tetap, sehingga jumlah elemen larik

tidak dapat diubah selama pelaksanaan program.

Array Satu Dimensi Bentuk umum :

Ilustrasi array satu dimensi

Array di atas mempunyai enam element. Contoh Program :

Array Multidimensi

Array multidimensi adalah array yang mempunyai lebih dari satu dimensi. Misal : A[3][5] artinya array tersebut mempunyai 3 baris 5 kolom.

tipe_array nama_array [jumlah data]

1: #include <stdio.h> 2:

3: void main() 4: {

5: int a[5] = {10,25,30,45,50}; 6: int i;

7:

8: for(i=0;i<5;i++) 9: {

10: printf(“%d = %d\n”,i,a[i]); 11: }

(33)

33/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Bentuk umum :

Ilustrasi array satu dimensi

Array di atas mempunyai delapan belas element.

III.

Prepraktikum

Kerjakan tugas-tugas di bawah ini sebelum praktikum dimulai.

1. Sebutkan dan jelaskan keuntungan-keuntungan penggunaan larik dan matriks! 2. Kapankan sebaiknya larik dan matriks digunakan? Jelaskan!

IV.

Kegiatan Praktikum

1. Buatlah program menjumlahkan 2 buah array. Array A ditambah Array B menghasilkan Array C

Algoritma

Deklarasi :

ArrayA: array [1..5] of real ArrayB: array [1..5] of real ArrayC: array [1..5] of real i : integer

Algoritma :

for i 1 to 5 do

tipe_array nama_array [jumlah data][jumlah data]

1: #include <stdio.h> 2:

3: void main() 4: {

5: int a[3][3] = {{10,20,30},{40,50,60},{70,80,90}}; 6: int i,j;

7:

8: for(i=0;i<3;i++) 9: {

10: for(j=0;j<3;j++) 11: {

12: printf(“%d ”,a[i][j]); 13: }

14: printf(“\n”); 15: }

(34)

34/77

Fakultas Ilmu Komputer – Universitas Sriwijaya read(ArrayA[i])

endfor

for i 1 to 5 do

read(ArrayB[i]) endfor

for i 1 to 5 do

ArrayC[i] = ArrayA[i] + ArrayB[i] endfor

for i 1 to 5 do

read(ArrayC[i]) endfor

2. Jalankan program nomor 1 dan analisa hasilnya

3. Ubahlah program pada soal nomor 1 menjadi bentuk prosedur atau fungsi

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

1 . . 3

VI.

Kesimpulan

VII.

Evaluasi dan Pertanyaan

1. Buat program dengan larik untuk menghitung rata-rata deret bilangan ganjil 1... 100 yang habis dibagi 5

2. Buatlah program mengubah matriks inputan , seperti contoh berikut ini : 1 2 2 3 2 2

(35)

35/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 5: Searching

I.

Tujuan

Setelah mengerjakan LKP 5 ini, anda diharapkan dapat:

1. memahami konsep-konsep pencarian yang telah dibakukan. 2. menerapkan Pencarian dalam berbagai kasus sederhana

II.

Dasar Teori

Fungsi pencarian itu sendiri adalah memvalidasi (mencocokan) data. Sebagai contoh, untuk menghapus atau mengubah sebuah data di dalam sekumpulan nilai, langkah pertama yang harus ditempuh adalah mencari data tersebut, lalu menghapus atau mengubahnya.

Ada sebuah kasus sederhana, misalkan terdapat 10 data yang bertpe integer, terangkum di dalam variabel larik L. Terdapat data X di dalam larik L tersebut. Bagaimana proses

pencarian data X tersebut ? Jika ketemu maka akan mengeluarkan pesan teks “ Data ditemukan ! “ atau jika tidak ditemukan akan mengeluarkan pesan teks “ Data tidak ditemukan “. Serta menampilkan di elemen ke beberapa elemen tersebut ditemukan, dan berapa jumlah data X di larik L.

Ada beberapa metode mencari data di dalam sekumpulan data yang bertipe sama yaitu : 1. Metode Pencarian Beruntun (Sequential Search)

2. Metode Pencarian Bagi Dua (Binary Search)

Metode Pencarian Beruntun

Konsep yang digunakan dalam metode ini adalah membandingkan data-data yang ada dalam kumpulan tersebut, mulai dari elemen pertama sampai elemen ditemukan, atau sampai elemen terakhir. Perhatikan alur di bawah ini :

20 15 22 14 12 10 24 19 18 16

Data yang akan dicari adalah X, misal X = 10, maka elemen yang diperiksa adalah elemen yang bernilai 10.

(36)

36/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Metode Pencarian Bagi Dua (Binary Search)

Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau menurun). Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang sudah terurut menjadi syarat mutlak untuk menggunakan metode ini.

Konsep dasar metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data yang berada pada elemen paling tengah bernilai sama, maka langsung data tengah dicari ditemukan. Jika data di elemen terurut naik, maka jika data yang berada di tengah kurang dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kanan, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan sebaliknya untuk nilai data yang berada di tengah lebih dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kiri, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan demikian

i

Jumlah data = ,k

Selesai

k = 0 Data tidak ditemukan k = k + 1 I = 0 s.d. 9

L[i] = X Data ditemukan di elemen i

Mulai

L[10] = {20,15,22,14,12,10,24,19,18,16}

X

(37)

37/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

sebaliknya untuk data yang terurut menurun. Dalam hal ini tentukan indeks paling awal dan indeks paling akhir, untuk membagi 2 elemen tersebut.

Indeks awal = i, dimana nilai i, pada awalnya bernilai 0;

Indeks akhir =j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen.

Langkah-langkah untuk metode pencarian bagi dua.

1. Asumsikan data terurut secara horizontal dari indeks 0 samapi n-1, untuk menggunkan istilah kanan dan kiri.

2. Misalkan kumpulan data yang berjumlah n adalah larik L, dan data yang akan dicari adalah X.

3. Tentukan nilai indeks awal i=0 dan indeks akhir j = n-1.

4. Tentukan apakah data terurut menurun atau meniak dengan menggunakan membandingkan apakah elemen paling kiri L[0] lebih dari atau kurang dari eleemn paling kanan L[n-1].

 Jika data di elemen paling kiri L[0] > data di elemen paling kanan L[n-1], maka data terurut menurun.

 Jika data elemen paling kiri L[0] < data di elemen paling kanan L[n-1], maka data terurut menaik.

5. Asumsikan bahwa data terurut menaik (tergantung hasil nomor 3).

6. Misalkan variabel k adalah indeks paling tengah, diperoleh dengan rumus : K = (I + j) div 2

7. Periksa, jika L[k] = x, maka data dicari langsung ketemu di elemen k.

8. Jika nomor 7 tidak terpenuhi, periksa jika L[k]<X, maka pencarian berikutnya dilakukan di sisi kanan indeks k, lakukan proses seperti pada nomor 6, dimana nilai indeks I sekarang sama dengan nilai indeks sebelumnya.

I=k K=(i+j)div2

Dan seterusnya sampai nilai X dicari ketemu atau tidak sama sekali.

9. Jika nomor 8 tidak terpenuhi, maka tidak pasti nilai Lk]>X, maka pencarian berikutnya dilakukan di sisi kiri indeks k, lakukan proses seperti pada nomor 6, dimana nilai indeks j sekarang sama dengan nilai indeks k sebelumnya.

(38)

38/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Dan seterusnya sampai nilai X dicari ketemu atu tidak sama sekali. 10. Jika data terurut menurun, maka tukar kondisi yang ada di nomor 8 dan 9. Contoh :

Diberikan 10 data terurut L[10] = {12,14,15,17,23,25,45,67,68,70}. Cari nilai X = 14 di elemen tersebut.

Solusi :

1. Menentukan apakah data terurut menaik atau menurun. L[0] = 12 L[9] = 70 Karena L[0] < L[9], maka data tersebut terurut menaik.

2. Misal indeks paling kiri adlah I = 0 dan indeks paling kanan adalah j = 9, maka indeks tengahnya adalah :

K = (i+j) div 2 = (0+9) div 2

= 4. Elemen tengah sekarang adalah 4 dengan L[4] = 23.

3. Karena data di indeks tengah lebih dari nilai data yang dicari (L[4] > X), maka pencarian berikutnya dilakukan pada sisi kiri indeks k, maka nilai j sekarang sama dengan k, lalu lakukan proses sama seperti nomor 2.

J=k = 4 K= (i+j) div 2 = (0 +4) div 2

= 2 Elemen tengah sekarang adalah 2 dengan L[2] = 15.

4. Karena data di indeks tengah lebih dari nilai data yang dicari (L[2] >X), maka pencarian berikutnya dilakukan pada sisi kiri indeks k, maka nilai j sekarang sama dengan k, lalu lakukan proses sama seperti nomor 2.

J=k = 2 K = (i+j) div 2

(39)

39/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Elemen tengah sekarang adlah 1 dengan L[1} = 14

5. Karena nilai data di elemen tengah sama dengan nilai data yang dicari X, maka pencarian berakhir. Data X ditemukan di iNdeks ke-1.

III.

Prepraktikum

Kerjakan tugas-tugas di bawah ini sebelum praktikum dimulai. 1. Jelaskan konsep pencarian Beruntun

2. Jelaskan konsep pencarian Bagidua

3. Sebutkan dan jelaskan keuntungan-keuntungan penggunaan pencarian beruntun dan bagi dua!

IV.

Kegiatan Praktikum

1. Buatlah program pencarian beruntun berdasarkan langkah langkah yang telah djelaskan diatas.

2. Buatlah program pencarian bagi dua berdasarkan langkah langkah yang telah dijekaskan diatas

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

1 2

VI.

Kesimpulan

VII.

Evaluasi dan Pertanyaan

(40)

40/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

(41)

41/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 6: Sorting

I.

Tujuan

Setelah mengerjakan LKP 6 ini, anda diharapkan dapat:

1. memahami dan menterjemahkan metode pencarian 2. menerapkan pengurutan dalam berbagai kasus sederhana

II.

Dasar Teori

Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut urutan atau susunan tertentu. Urutan tersebut dapat menaik (ascending) atau menurun (descending). Jika diberikan n buah elemen disimpan di dalam larik L, maka :

- pengurutan menaik adalah L[0] < L[1] < L[2] < … < L[n-1] - pengurutan menaik adalah L[0] > L[1] > L[2] > … > L[n-1]

Bermacam-macam metode yang dipakai untuk melakukan pengurutan, antara lain : - Bubble Sort

- Selection Sort - Insertion Sort - Heap Sort - Shell Sort - Quick Sort - Merge Sort - Radix Sort - Tree Sort

Pada bagian ini hanya akan dibahas mengenai tiga buah metode sederhana yang mendasar, yaitu :

1. Metode Pengurutan Gelembung (Bubble Sort) 2. Metode Pengurutan Pilih (Selection Sort) 3. Metode Quick Sort

4. Metode Merge Sort

Metode Pengurutan Gelembung

(42)

42/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

sabun selalu terapung di permukaan air. Prinsip pengapungan inilah yang diterapkan ke metode ini, dimana nilai yang paling rendah berada di posisi paling atas, melalui proses pertukaran.

Konsep dasar dari metode ini adalah setiap data yang ada di kumpulan, dibandingkan dengan data-data lainnya, artinya jika jumlah data sebanyak 5, maka akan terjadi perbandingan sebanyak (5-1)2 = 16 kali.

Atau secara umum dapat ditarik rumus, untuk jumlah data sebanyak n buah, maka : Jumlah iterasi pembandingan = (n-1)2

Jika data-data tersebut disimpan di dalam larik L, maka :

1. Untuk pengurutan menaik, pembandingnya sebagai berikut : L[n] < L{n-1]

2. Untuk pengurutan menurun, pembandingnya sebagai berikut : L[n] > L[n-1]

Jika kondisi diatas terpenuhi, maka nilai data yang ada di indeks n-1 akan ditukar dengan nilai data yang ada di indeks n.

Metode Pengurutan Pilih ( Selection Sort)

Metode ini memiliki konsep memilih data yang maksimum/minimum dari suatu kumpulan data larik L, lalu menempatkan data tersebut ke elemen paling akhir atau paling awal sesuai pengurutan yang diinginkan. Data maksimum/minimum yang diperoleh, diasingkan ke tempat lain, dan tidak diikutsertakan pada proses pencarian data maksimum/minimum berikutnya. Perhatikan ilustrasi berikut :

Misalkan ada sekumpulan data acak berjumlah n elemen yang disimpan di dalam larik L, akan diurut menaik, maka langkah-langkah yang harus dilakukan adalah :

1. Menentukan jumlah iterasi, yaitu pass = n-2 2. Untuk setiap pass ke-I = 0,1,2, … , pass, lakukan

a. Cari elemen terbesar (maks) dari elemen ke-i sampai ke-(n-1) b. Pertukaran maks dengan elemen ke-i

c. Kurangin n sayu (n = n -1) Rincian tiap-tiap pas adalah sebagai berikut :

- pass 0

(43)

43/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Pertukarkan elemen maksimum dengan elemen L[n-1] - pass 1

Cari elemen maksimum di dalam L[0 .. (n-2)]

Pertukarkan elemen maksimum dengan elemen L[n-2] - pass 2

Cari elemen maksimum di dalam L[0 .. (n-3)]

Pertukarkan elemen maksimum dengan elemen L[n-3] .

. .

- pass 3

Cari elemen maksimum di dalam L[0 .. 1]

Pertukarkan elemen maksimum dengan elemen L[1]

III.

Prepraktikum

Kerjakan tugas-tugas di bawah ini sebelum praktikum dimulai. 1. Jelaskan konsep pengurutan bubble sort, selection sort

2. Bandingkan masing masing metode pencarian yang ada, kemudian metode mana yang paling baik ? Mengapa ?

IV.

Kegiatan Praktikum

1. Buatlah program pengurutan gelembung berdasarkan langkah langkah yang terlah dijelaskan diatas.

2. Buatlah program pengurutan seleksi berdasarkan langkah langkah yang terlah dijelaskan diatas

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

(44)

44/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

VI.

Kesimpulan

VII.

Evaluasi dan Pertanyaan

(45)

45/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 7 : Pointer dan ADT

I.

Tujuan

Setelah mengerjakan LKP 7 ini, anda diharapkan dapat: 1. Memahami konsep pointer di dalam Bahasa C 2. Memahami konsep copy value dan copy address 3. Menggunakan pointer di dalam program lainnya

II.

Dasar Teori

Pointer

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Lokasi memori tersebut mungkin diwakili oleh sebuah variabel atau mungkin juga lokasi bebas dalam memori. Sedangkan pointer sendiri yang berupa nilai ditampung dalam sebuah variabel yang disebut variabel pointer. Jadi variable pointer atau pointer berisi suatu nilai yang menyatakan alamat suatu lokasi.

Suatu variable pointer didefinisikan dengan bentuk :

Contoh :

a *c b *d Var

2

*

3

*

Value

A * B * Address

Step :

1. d=&a  *d = 2 ; d = A 2. c=&b  *c = 3 ; c = B 3. b=*d  b = 2 ; &b = B 4. *d=*c  *d = 2 ; d = A

Dari contoh di atas terlihat bahwa addres pada variabel pointer dapat berubah – ubah, apabila addres suatu variabel pointer berubah maka valuenya akan berubah sesuai addres yang ditunjuk oleh pointer tersebut. Apabila pada address yang ditunjuk oleh pointer tersebut mengalami perubahan value, maka value pada pointer juga akan berubah.

(46)

46/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Contoh program :

Pemberian Memori Alokasi Pada Pointer

Sebuah pointer itu tidak memiliki alamat, sehingga pointer harus menumpang pada variabel lain. Namun sekarang kita memberikan alamat kepada variabel pointer sehingga pointer tidak lagi menumpang pada variabel lain.Untuk membuat alamat menggunakan malloc yang disesuaikan dengan panjang data.

Contoh Program :

Abstract Data Type (ADT)

ADT adalah definisi TYPE dan sekumpulan PRIMITIF (operasi dasar) terhadap TYPE 1: #include<iostream.h>

2: #include<conio.h>

3: void main() 4: {

5: int x; 6: float y; 7: long z; 8:

9: x = 3; 10: y = 3.7; 11: z = 1000; 12:

13: cout<<"isi variabel x = "<<x<<endl; 14: cout<<"isi variabel y = "<<y<<endl; 15: cout<<"isi variabel z = "<<z<<endl; 16:

17: cout<<endl; 18:

19: cout<<"alamat variabel x = "<<&x<<endl; 20: cout<<"alamat variabel y = "<<&y<<endl; 21: cout<<"alamat variabel z = "<<&z<<endl; 22:}

VariabelPointer = (TipeData *) malloc(sizeof(TipeData));

1: #include<iostream.h> 2: #include<conio.h> 3: #include<malloc.h> 4:

5: void main() 6: {

7: int *p; 8:

9: p =(int *)malloc(sizeof(int));//membuat alamat 10:

11: *p=5;//deklarasi nilai 12:

(47)

47/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

tersebut. Selain itu, dalam sebuah ADT yang lengkap, disertakan pula definisi invarian dari TYPE dan aksioma yang berlaku. ADT merupakan definisi statik. Definisi type dari sebuah ADT dapat mengandung sebuah definisi ADT lain.

Misalnya:

 ADT Waktu yang terdiri dari ADT JAM dan ADT DATE

 GARIS yang terdiri dari dua buah POINT

 SEGI4 yang terdiri dari pasangan dua buah POINT (Top, Left) dan (Bottom,Right)

Type diterjemahkan menjadi type terdefinisi dalam bahasa yang bersangkutan, misalnya menjadi record dalam bahasa Ada/Pascal atau struct dalam bahasa C. Primitif, dalam konteks prosedural, diterjemahkan menjadi fungsi atau prosedur.

Primitif dikelompokkan menjadi :

 Konstruktor/Kreator, pembentuk nilai type. Semua objek (variabel) bertype tsb harus melalui konstruktor. Biasanya namanya diawali Make.

 Selektor, untuk mengakses komponen type (biasanya namanya diawali dengan Get)

 Prosedur pengubah nilai komponen (biasanya namanya diawali Get)

 Validator komponen type, yang dipakai untuk mentest apakah dapat membentuk type sesuai dengan batasan

 Destruktor/Dealokator, yaitu untuk .menghancurkan. nilai objek (sekaligus memori penyimpannya)

 Baca/Tulis, untuk interface dengan input/output device

 Operator relational, terhadap type tsb untuk mendefinisikan lebih besar, lebih kecil, sama dengan, dsb

 Aritmatika terhadap type tsb, karena biasanya aritmatika dalam bahasa pemrograman hanya terdefinisi untuk bilangan numerik

 Konversi dari type tersebut ke type dasar dan sebaliknya

ADT biasanya diimplementasi menjadi dua buah modul, yaitu:

 Definisi/Spesifikasi Type dan primitif.

o Spesifikasi type sesuai dengan bahasa yang bersangkutan.

(48)

48/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

 Prosedur : Initial State, Final State dan Proses yang dilakukan

 Body/realisasi dari primitif, berupa kode program dalam bahasa yang bersangkutan. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan selektor dan konstruktor.

Sebuah contoh pendeklarasian struktur dapat dilihat dibawah ini : struct data_tanggal { int tahun; int bulan; int tanggal; };

Anggota struktur diakses dengan menggunakan bentuk : variabel_struktur.nama_anggota

III.

Prepraktikum

1. Apa yang dimaksud dengan struktur ?

2. Diketahui definisi struktur dibawah ini (soal 2-6 berdasarkan yang detahui) : struct S { int I; char *c; char c2[100]; float x; #include<iostream.h>

typedef struct lingkaran{

float r;

float keliling;

float luas; };

void kllluas(lingkaran &L);

void main() {

lingkaran L;

cout<<"masukkan jari-jari :"; cin>>L.r;

kllluas (L);

cout<<" keliling "<<L.keliling<<endl; cout<<" luas "<<L.luas;

}

void kllluas(lingkaran &L) {

(49)

49/77

Fakultas Ilmu Komputer – Universitas Sriwijaya long int l;

}

3. Berapakah struktur yang didefinisikan dari yang diketahui di atas ? 4. Berapakah anggota yang didefinisikan ?

5. Berapakah jumlah variabel struktur yang didefinisikan ? Jika ada, apa saja namanya ?

IV.

Kegiatan Praktikum

1. Terjemahkan prototipe/primitive kasus pointer di berikut ini ke dalam bahasa C dengan langkah-langkah :

a. d=&a b. c=a c. e=&b d. b=c e. *d=c

Prototipe dan Primitif / Algoritma

a b c

2

3

5

A B C

*d *e

*

*

* *

var

value

address Cetak nilai dan alamat variabel-variabel di atas.

2. Ubahlah program ADT pada contoh soal yang mana variable ADT merupakan variable pointer.

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

(50)

50/77

Fakultas Ilmu Komputer – Universitas Sriwijaya 2

VI.

Evaluasi dan Pertanyaan

1. Untuk kasus pointer, ketikkan code berikut ; &c = d;

Apa yang terjadi ? alasanya ?

2. Untuk kasus pointer, hapus code &c = d;, ganti dengan kode berikut : d = &c;

Apakah masih error ? alasannya ?

3. Untuk kasus array, bagaimana jika nilai n diubah menjadi n=3 ?

(51)

51/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 8 : List

I.

Tujuan

Setelah mengerjakan LKP 8 ini, anda diharapkan dapat:

1. Memahami konsep list dan mampu mengimplementasikannya ke bahasa C. 2. Mampu melakukan operasi insert dan delete pada list.

II.

Dasar Teori

List Linier

List linier adalah sekumpulan elemen bertype sama, yang mempunyai keterurutan tertentu, dan setiap elemennya terdiri dari dua bagian, yaitu informasi mengenai elemennya, dan informasi mengenai alamat elemen suksesornya :

dengan InfoType adalah sebuah type terdefinisi yang menyimpan informasi sebuah elemen list; Next adalah address ("alamat") dari elemen berikutnya (suksesor). Dengan demikian, jika didefinisikan First adalah alamat elemen pertama list, maka elemen berikutnya dapat diakses secara suksesif dari field Next elemen tersebut Alamat yang sudah didefinisikan disebut sudah di-alokasi. Didefinisikan suatu konstanta Nil, yang artinya alamat yang tidak terdefinisi. Alamat ini nantinya akan didefinisikan secara lebih konkret ketika list linier diimplementasi pada struktur data fisik

Jadi, sebuah list linier dikenali :

elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut : First alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen,yang dapat diakses melalui informasi NEXT. NEXT mungkin ada secaraeksplisit (seperti contoh di atas), atau secara implisit yaitu lewat kalkulasi atau fungsi suksesor. Setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu. Untuk mengacu sebuah elemen, alamat harus terdefinisi. Dengan alamat tersebut Informasi yang tersimpan

(52)

52/77

Fakultas Ilmu Komputer – Universitas Sriwijaya pada elemen list dapat diakses elemen terakhirnya. Ada berbagai cara untuk mengenali elemen akhir Jika L adalah list, dan P adalah address:

Alamat elemen pertama list L dapat diacu dengan notasi : First(L)

Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi Selektor : Info(P)

Next(P) Beberapa definisi :

o List L adalah list kosong, jika First(L) = Nil

o Elemen terakhir dikenali, misalnya jika Last adalah alamat element terakhir, maka Next(Last) =Nil

INSERT-First

(53)

53/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Menambahkan sebuah elemen yang diketahui nilainya sebagai elemen pertama list. Tahap pertama :

(54)

54/77

Fakultas Ilmu Komputer – Universitas Sriwijaya INSERT-After :

Menyisipkan sebuah elemen beralamat P setelah sebagai suksesor dari sebuah elemen list linier yang beralamat Prec

INSERT-Last

Menyisipkan sebuah elemen beralamat P setelah sebagai elemen terakhir sebuah list linier. Ada dua kemungkinan list kosong atau tidak kosong. Insert sebagai elemen terakhir list tidak kosong.

Insert sebagai elemen terakhir list tidak kosong

(55)

55/77

Fakultas Ilmu Komputer – Universitas Sriwijaya DELETE-After :

Penghapusan suksesor sebuah elemen :

DELETE-Last :

Menghapus elemen terakhir list dapat dilakukan jika alamat dari elemen sebelum

elemen terakhir diketahui. Persoalan selanjutnya menjadi persoalan DELETEAFTER, kalau Last bukan satu-satunya elemen list linier. Ada dua kasus, yaitu list menjadi kosong atau tidak. Kasus list menjadi kosong :

List tidak menjadi kosong (masih mengandung elemen) :

III.

Prepraktikum

1. Jelaskan struktur data linked list!

2. Jelaskan operasi-operasi pada linked list!

(56)

56/77

Fakultas Ilmu Komputer – Universitas Sriwijaya Prototipe dan Primitif /Algoritma

/*file : list1.h*/

/*contoh ADT list berkait dengan representasi fisik pointer*/ /*representasi address dengan pointer*/

/*infotype adalah integer*/ #ifndef list_H

#define list_H

#include "boolean.h" #define Nil NULL

#define info(P) (*P).info #define next(P) (P)->next #define First(L) ((L).First) #define infotype int

typedef struct tElmtlist *address; typedef struct tElmtlist

{

infotype info; address next; } Elmtlist;

/*Definisi list*/

/*List kosong : First(L) = Nil*/

/*Setiap elemen dengan address P dapat diacu info(P), Next (P)*/

/*Elemen terakhir list : jika addressnya Last, maka Next(Last) = Nil*/ typedef struct

{

address First; } List;

/*PROTOTYPE*/

/*test list kosong*/

boolean ListEmpty (List L); /*true jika list kosong*/ /*PEMBUATAN LIST KOSONG*/ void CreateList (List *L);

/*membentuk list kosong*/ /*MANAJEMEN MEMORI*/

address alokasi (infotype X);

/*mengirimkan address hasil alokasi sebuah elemen*/ /*jika alokasi berhasil, maka address tidak nil, dan */ /*bila menghasilkan P, maka info(P) = X, Next(P) = Nil*/ /*jika alokasi gagal, mengirimkan Nil*/

void dealokasi (address P); /*mengembalikan P ke sistem*/

(57)

57/77

Fakultas Ilmu Komputer – Universitas Sriwijaya /*PRIMITF BERDASARKAN ALAMAT*/

void InsertFirst(List *L, address P);

/*menambahkan elemen beraddress P sebagai elemen pertama*/ void InsertAfter(List *L, address P, address Prec);

/*Prec pastilah elemen list dan bukan elemen terakhir*/ void InsertLast(List *L, address P);

/*P ditambahkan sebagai elemen terakhir yang baru*/

/*PENGHAPUSAN SEBUAH ELEMEN*/

void DelFirst(List *L, address *P);

/*P adalah alamat elemen pertama list sebelum penghapusan*/

/*elemen list berkurang satu, firstelemen baru adalah suksesor elemen pertama yang lama*/

void DelP(List *L, infotype X);

/*jika ada elemen list beraddress P, dengan info(P) = X*/ /*maka P dihapus dari list dan didealokasi*/

/*jika tak ada, maka list tetap*/ void DelLast (List *L, address *P);

/*P adalah alamat elemen terakhir list sebelum penghapusan*/

/*Last Elemen yang baru adalah predesesor elemen pertama yang lama*/ void DelAfter(List *L, address *Pdel, address Prec);

/*Prec adalah anggota list*/ /*menghapus Next (Prec)*/ /*PROSES SEMUA ELEMEN LIST*/ void Printinfo(List L);

/*semua info yang disimpan pada elemen list diprint*/ /*jika list ksoong, hanya menuliskan "list kosong"*/ int NbElmt(List L);

/*mengirimkan banyaknya elemen list, 0 bila list kosong*/ infotype Max(List L);

/*mengirimkan nilai info(P) yang maksimum*/ infotype Min(List L);

/*mengirimkan nilai info(P) yang minimum*/ #endif

IV.

Kegiatan Praktikum

(58)

58/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

2. Ketik prototipe/primitif di atas dan simpan dengan nama list.h. 3. Buat file list.c yang berisi implementasi dari list.h.

4. Buat file main driver mlist.c.

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

1 . . 4

VI.

Evaluasi dan Pertanyaan

1. Tuliskan algoritma untuk nilai maksimum list dan minimum list ? 2. Tambahkan program untuk mencetak address max dan address min ?

(59)

59/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 9 : Stack

I.

Tujuan

Setelah mengerjakan LKP 9 ini, anda diharapkan dapat:

1. Memahami konsep stack dan mengimplemetasikannya ke bahasa C. 2. Mampu melakukan operasi pop dan push pada stack.

II.

Dasar Teori

Stack (Tumpukan) adalah list linier yang : 1. Dikenali elemen puncaknya (TOP)

2. Aturan penyisipan dan penghapusan elemennya tertentu :

- Penyisipan selalu dilakukan "di atas" TOP - Penghapusan selalu dilakukan pada TOP

Karena aturan penyisipan dan penghapusan semacam itu, TOP adalah satu-satunya alamat tempat terjadi operasi, elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus. Dikatakan bahwa elemen Stack akan tersusun secaraLIFO (Last In First Out).

Struktur data ini banyak dipakai dalam informatika, misalnya untuk merepresentasi : - pemanggilan prosedur

- perhitungan ekspresi artimatika - rekursifitas

- backtracking

- dan algoritma lanjut yang lain

Definisi Fungsional

(60)

60/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Definisi Selektor adalah Jika S adalah sebuah Stack, maka Top(S) adalah alamat elemen TOP, di mana operasi penyisipan/penghapusan dilakukan InfoTop(S) adalah informasi yang disimpan pada Top(S).

Definisi Stack kosong adalah Stack dengan Top(S)=Nil (tidak terdefinisi). Implementasi Stack dengan tabel :

Tabel dengan hanya representasi TOP adalah indeks elemen Top dari Stack. Jika Stack kosong, maka TOP=0.

Ilustrasi Stack tidak kosong, dengan 5 elemen :

III.

Preparktikum

1. Jelaskan struktur data stack!

2. Buatlah ilustrasi untuk masing-masing operasi pada stack! Prototipe dan Primitif /Algoritma

1. Stack Statis

(61)

61/77

Fakultas Ilmu Komputer – Universitas Sriwijaya /* deklarasi type dan prototype */

#ifndef stackt_H #define stackt_H #include "boolean.h" #define MaxEl 10 #define Nil 0

typedef int infotype; typedef int address;

typedef struct { infotype T[MaxEl+1]; address Top;

} Stackt; //Prototype

//Kreator

void CreateEmpty(Stackt *S); //Mengirim true jika stack kosong boolean IsEmpty(Stackt *S);

//mengirim true jika penampung sudah penuh boolean IsFull(Stackt *S);

//menambahkan elemen ke stack void Push(Stackt *S, infotype X); //menghapus sebuah elemen stack void Pop(Stackt *S);

#endif

2. Stack Dinamis

/* File: stack.h */ #ifndef stack_h #define stack_h #define true 1 #define false 0

#define boolean unsigned char

int infotype, address; typedef struct{

int top; int *T; int size; } stack;

/* ***** Konstruktor/Kreator ***** */

/* Membuat sebuah stack s yang kosong berkapasitas size */ void CreateEmpty(stack *s, int size);

(62)

62/77

Fakultas Ilmu Komputer – Universitas Sriwijaya void destruct(stack *s);

/* Mengirim true jika tabel penampung nilai elemen stack penuh */ boolean IsFull(stack s);

/* Mengirim true jika stack kosong */ boolean IsEmpty(stack s);

/* Menambahkan x sebagai elemen stack s */ void push(stack *s, int x);

/* Menghapus x dari stack s */ void pop(stack *s, int *x);

/* Menambahkan x sebagai elemen stack s, jika s mencapai nilai maksimum */

/* maka s akan melakukan grow, yaitu menambah kapasitas maksimum */ void pushgrow(stack *s, int x);

/* Menambah kapasitas penampung stack s */ void grow(stack *s);

/* Menghapus x dari stack s. Jika s mencapai nilai minimum */

/* maka s akan melakukan shrink, yaitu mengurangi kapasitas maksimum */

void popshrink(stack *s, int *x);

/* Mengurangi kapasitas maksimum penampung stack s */ void shrink(stack *s);

#endif

IV.

Kegiatan Praktikum

1. Buat file boolean.h

2. Ketik prototipe/primitif di atas dan simpan dengan nama stackt.h dan stack.h. 3. Buat file .c yang berisi implementasi dari file .h.

4. Buat file main driver-nya.

V.

Hasil LKP (ditulis tangan di kertas A4)

No Deskripsi Jawaban

1 . . 4

VI.

Evaluasi dan Pertanyaan

1. Tulis algoritma Push dan Pop pada stack statis dan dinamis ?

(63)

63/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

3. Tentukan apakah sebuah kalimat yang diinputkan dalam program (dengan menggunakan stack) adalah sebuah polindrom atau bukan. Polindrom adalah kalimat yang jika dibaca dari depan dan dari belakang, maka bunyinya sama.

Contoh :

Kalimat : sugus

Kalimat tersebut adalah polindrom

(64)

64/77

Fakultas Ilmu Komputer – Universitas Sriwijaya

Lembar Kerja Praktikum 10 : Queue

I.

Tujuan

Setelah mengerjakan LKP 10 ini, anda diharapkan dapat:

1. Memahami konsep Queue dan mengimplementasikannya ke bahasa C. 2. Mampu melakukan operasi add dan delete pada queue.

II.

Dasar Teori

Queue adalah list linier yang :

a. Dikenali

Gambar

Gambar 3.1 Diagram Alir Struktur Penyeleksian Satu Kasus (IF)
Gambar 3.3 Diagram Alir Struktur IF- ELSE
Gambar 3.5 Diagram Alir dari Struktur Tiga Kasus IF- ELSE (tersarang)
Tabel  dengan  hanya  representasi  TOP  adalah  indeks  elemen  Top  dari  Stack.  Jika
+2

Referensi

Dokumen terkait

Lalu ulangi langkah-langkah untuk mencari data, maka pada hasil pencarían akan ditampilkan data-data yang sesuai dengan semua kriteria pencarían yang diinput.. Untuk menghapus

H ash tables juga merupakan sebuah struktur data yang terdiri atas sebuah tabel dan fungsi yang bertujuan untuk memetakan nilai kunci yang unik untuk setiap record

menukar nilai variabel sehingga method fungsi tersebut dapat dipanggil oleh method main. Lalu pada menu kedua dilakukan hal yang sama, dengan membuat

 Baca code beserta panduan proses yang terjadi, pahami, lalu gambarkan ilustrasi proses terjadinya penghapusan di belakang.. Misalkan saja data pada Linked List

Misalnya untuk proses penghapusan data/record atau mengubah data/record tertentu di dalam suatu tabel atau file, langkah pertama yang harus dilakukan adalah

Program di atas terdiri dari beberapa fungsi atau subprogram yakni fungsi enqueue/tambah data (berfungsi untuk  memasukkan/menambahkan data ke dalam antrian), fungsi

Fibonacci Search adalah pencarian sebuah elemen dalam array satu dimensi dengan menggunakan angka fibonacci sebagai titik-titik (indeks) elemen array yang isinya dibandingkan

Sistem ini memungkinkan aktor untuk mengelola menu master mulai dari menambah, menyimpan, mencari, mengubah, menghapus dan membatalkan data..