Algoritme dan Pemrograman

dokumen-dokumen yang mirip
Penger6an struct. Algoritme dan Pemrograman. Cara membuat struct. Deklarasi struct. Pointer pada struct 12/10/14 ILKOM IPB 1

12/29/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Review Latihan Slide 10. Review Latihan Slide 10

Algoritme dan Pemrograman

12/26/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Sorting. Data untuk sorting. Contoh. Algoritme #1: BUBBLE SORT.

Algoritme dan Pemrograman

Gambar 13.1 Ilustrasi proses algoritma sorting

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

1. Kompetensi Mengenal dan memahami algoritma percabangan yang komplek.

Pencarian (Searching)

12/29/2011. Algoritme dan Pemrograman. Bit. Bitwise operator

Pert 3: Algoritma Pemrograman 1 (Alpro1) 4 sks. By. Rita Wiryasaputra, ST., M. Cs.

Modul 8 SORTING (PENGURUTAN)

Langkah Mudah Belajar Struktur Data Menggunakan C/C++

12/29/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Address and Pointers. Pointer

ANALISIS ALGORITMA BINARY SEARCH

Array ARRAY BERDIMENSI SATU. Representasi (Pemetaan) di memori. Lihat gambar dibawah ini, nilai data A (18) dismpan mulai dari alamat 1136 di memori.

Sorting. Pertemuan ke 14.

Algoritme dan Pemrograman

# TEN Sorting PENDAHULUAN

Algoritma Shell Sort Ascending Dan Binary Sequential Search Menggunakan C

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-8 Pengurutan (Sorting) 1

Algoritme dan Pemrograman

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

PENGURUTAN (SORTING) 1. Overview

a[0] a[1] a[2] a[3] a[4] a[5] x

Algoritma dan Pemrograman 1. By. Rita Wiryasaputra, ST., M. Cs.

A. TUJUAN PEMBELAJARAN

UJIAN AKHIR SEMESTER GANJIL 2008/2009 ALGORITME DAN PEMROGRAMAN Sabtu, 31 Januari 2009; Pukul 13:30 16:00; CATATAN TERTUTUP

Bab 9 Pointer. 9.1 Pendeklarasian pointer

Algoritma dan Struktur Data. Ramos Somya

SEQUENTIAL SEARCH 11/11/2010. Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut

Yaitu proses pengaturan sekumpulan objek menurut urutan atau susunan tertentu Acuan pengurutan dibedakan menjadi :

BAB VI Pengurutan (Sorting)

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

STRUKTUR DATA SORTING ARRAY

MODUL IV PENCARIAN DAN PENGURUTAN

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

Algoritme dan Pemrograman

1. Kompetensi Mengenal dan memahami notasi-notasi algoritma yang ada.

Kontrak Perkuliahan & Introduction

Modul Praktikum Algoritma dan Struktur Data

SORTING (Pengurutan)

ARRAY STATIS. Type namatype_array = array [1..maks_array] of tipedata. nama_var_array : namatype_array {indeks array dari 1 sampai maksimum array}

Algoritma dan Pemrograman Sorting (Pengurutan) IS1313. Oleh: Eddy Prasetyo N

ALGORITMA PENGURUTAN. Oleh : S. Thya Safitri, MT

BAB 2 SORTING (PENGURUTAN)

Tipe Data dan Operator

KU-1072 Pengenalan Teknologi Informasi - B. Materi: Array. Fakultas Ilmu dan Teknologi Kebumian

SORTING (PENGURUTAN DATA)

Algoritma dan Pemrograman Lanjut. Pertemuan Ke-7 Pencarian (Searching) 2

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

ALGORITMA PENGURUTAN & PENCARIAN

PRAKTIKUM 9 ARRAY. ARRAY BERDIMENSI SATU Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa :

A. TUJUAN PEMBELAJARAN

Algoritma dan Struktur Data. Searching dan Sorting

Algoritma dan Struktur Data. Algoritma Pengurutan (Sorting)

Algoritma dan Struktur Data

PENGENALAN BAHASA C. A. Struktur Kode Program dalam Bahasa C Secara garis besar, suatu kode program dalam bahasa C memiliki struktur umum seperti ini:

1. Mempelajari konsep dasar array, array ganda, pengiriman array ke fungsi dan string 2. Membuat program menggunakan array, array ganda

BAB V SORT. Proses penukaran tidak dapat langsung dilakukan dengan cara : nilai[1] = nilai[2]; nilai[2] = nilai[1];

01. Review Array, Pointer dan Struktur

STRUKTUR DATA (3) sorting array. M.Cs

BAHASA PEMROGRAMAN 1 (PERTEMUAN 3)

nama array untuk menyimpan data jumlah data

Kisi- kisi UTS- P. Kisi- kisi UTS- T

BAB 8 SORTIR. Pengurutan data (sorting) adalah suatu proses untuk menyusun kembali himpunan obyek menggunakan aturan tertentu.

Alpro & Strukdat 1 C++ (Sorting) Dwiny Meidelfi, M.Cs

STRUKTUR DATA MENGGUNAKAN C++ Windha Mega PD, S.Kom

Achmad Solichin.

ALGORITMA & PEMROGRAMAN II ARRAY

Algoritme dan Pemrograman

Binary Search Tree (BST)

Sorting (Bubble Sort)

Praktikum 9. Pengurutan (Sorting) Quick Sort, Merge Sort

DIKTAT STRUKTUR DATA Oleh: Tim Struktur Data IF

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

STRUCTURE. Structure

REVIEW ARRAY. Institut Teknologi Sumatera

Modul Praktikum Algoritma dan Struktur Data

Algoritma Pemrograman. Fery Updi,M.Kom

ARRAY PENGANTAR PROGRAM STUDI. Institut Teknologi Sumatera

A. TUJUAN PEMBELAJARAN

Algoritme dan Pemrograman

KARAKTER DAN STRING, ARRAY, STRUCT DAN REVIEW PADA BAHASA C

Algoritma Bubble Sort dan Quick Sort

PENCARIAN (SEARCHING)

BAB 3 SEARCHING A. TUJUAN

12/29/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Char. Karakter dan bilangan

SORTING. Hartanto Tantriawan, S.Kom., M.Kom

Operator Precedence dan Associativity DASAR PEMROGRAMAN. JULIO ADISANTOSO Departemen Ilmu Komputer IPB. Pertemuan 2

Minggu ke-14 Typedef, Struct & Command Line Argument

BAB VI SORTIR ATAU PENGURUTAN

SORTING. Struktur Data S1 Sistem Informasi. Ld.Farida

Pengurutan (Sorting)

Kompleksitas Algoritma Pengurutan Selection Sort dan Insertion Sort

POINTER II. Oleh : Mike Yuliana PENS-ITS

Tipe data dasar merupakan tipe data yang disediakan oleh kompailer, sehingga dapat langsung dipakai Dalam algoritma dan pemrograman yang termasuk dala

12/29/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Fungsi. Fungsi. y = f (x) = x m = jumlah ( a, b ) = a + b

SORTING. Brigida Arie Minartiningtyas, M.Kom

Achmad Solichin.

Transkripsi:

Algoritme dan Pemrograman Searching (Pencarian) Sorting (Pengurutan) Tipe struct Searching (pencarian) Mencari data berdasarkan nilai tertentu, x. Beberapa contoh algoritme pencarian: Sequential search Sorted array search Hashing Recursive structures search Multidimensional search Yang dibahas pada mata kuliah ini adalah sequential search dan sorted array search Pencarian penting dalam struktur data ILKOM IPB 1

Variasi masalah Ada atau tidak ada? Keluaran: TRUE/FALSE Indeks kemunculan pertama? Keluaran: suatu nilai antara 0 dan n-1 jika ada atau suatu nilai khusus (mis. -1) jika tidak ada Frekuensi kemunculan x? Keluaran: antara 0 hingga n Indeks seluruh kemunculan jika ada Indeks kemunculan terakhir atau ke-i Dapat divariasikan juga dengan Pencarian nilai yang lebih kecil atau lebih besar dari x Pencarian nilai tertentu untuk fungsi dari x (mis. nilai yang selisihnya dengan x kurang dari suatu nilai ambang) Penggunaan dua nilai x dan y untuk mencari data yang nilainya di antara keduanya Sequential search Setiap elemen dalam array dibandingkan satu per satu dari awal (kiri) hingga x ditemukan atau semua elemen telah diperiksa. Mudah diimplementasikan. Waktu proses relatif lambat untuk ukuran data sangat besar. Jika suatu array memiliki n buah elemen, sebanyak-banyaknya berapa perbandingan yang harus dilakukan untuk mencari? O(n) ILKOM IPB 2

Sequential search (ada/tidak?) // Keluaran: 1 jika ada // atau -1 jika tidak ada int sequentialsearch(int t[], int n, int val) { int i; for(i=0; i<n; i++) if(val==t[i]) return 1; /* ditemukan */ return -1; /* tidak ditemukan */ Sequential search (kemunculan pertama) // Keluaran: indeks kemunculan pertama jika ada // atau bernilai -1 jika tidak ada int sequentialsearch(int t[], int n, int val) { int i; for(i=0; i<n; i++) if(val==t[i]) return i; /* ditemukan */ return -1; /* tidak ditemukan */ Ubah fungsi sequentialsearch untuk melakukan variasi pencarian berikut: 1. Indeks kemunculan terakhir 2. Indeks seluruh kemunculan 3. Frekuensi kemunculan x 4. Frekuensi nilai yang lebih kecil dari x ILKOM IPB 3

Latihan Ubah fungsi sequentialsearch untuk melakukan variasi pencarian berikut: Frekuensi kemunculan x Indeks seluruh kemunculan Indeks kemunculan terakhir Frekuensi nilai yang lebih kecil dari x Sequential sorted array search Data harus terurut Setiap elemen dalam array ditelusuri satu per satu dari awal (kiri) hingga ketemu atau nilai yang dibaca lebih besar dari nilai yang dicari atau semua elemen telah dibandingkan. Asumsi: terurut ascending Jika terurut descending, sesuaikan algoritme Mudah diimplementasikan. Waktu proses relatif cepat untuk kasus data yang dicari terletak di bagian depan. Masih masuk lingkup O(n) ILKOM IPB 4

Sequential sorted array search // Keluaran: indeks kemunculan pertama jika ada // atau bernilai -1 jika tidak ada // Asumsi: array t terurut secara ascending (menaik) int sortedsearch(int t[], int n, int val) { int i=0, hsl=-1; while ((t[i]<=val) && (i<n) && (-1==hsl)) { if(t[i] ==val) hsl=i; i++; return hsl; /* tidak ditemukan */ Binary search Data harus terurut Pencarian dimulai dengan memeriksa elemen yang terletak di indeks tengah-tengah (mis. mid) Jika nilai yang di tengah lebih besar dari x, pencarian diarahkan ke data yang ada di kiri mid. Sebaliknya, diarahkan ke sebelah kanan. Asumsi: terurut ascending Jika terurut descending, sesuaikan algoritme Periksa elemen yang di tengah bagian tersebut Ulangi hingga x ditemukan atau data sudah habis Efisien: O(log n) ILKOM IPB 5

Binary search int binarysearch(int t[], int n, int val) { int left, right, mid; left = 0; right = n-1; //indeks paling kiri dan kanan while(left<=right) { mid = (left+right)/2; if (val<t[mid]) //sisi kanan tidak perlu dicek right = mid-1; else if (val>t[mid]) //sisi kiri tidak perlu dicek left = mid + 1; else return mid; /* ditemukan */ return -1; /* tidak ditemukan */ Sorting (Pengurutan) Mengurutkan data berdasarkan kunci tertentu. Jenis sorting: Ascending (menaik) Descending (menurun) Manfaat: mempercepat dan memudahkan akses data Banyak algoritme sorting dikembangkan untuk: Mempercepat proses Mengefisienkan penggunaan sumberdaya Ingat syarat terurut pada binary search ILKOM IPB 6

Contoh Masukan: 5 2 4 6 1 3 Keluaran: 1 2 3 4 5 6 (ascending) 6 5 4 3 2 1 (descending) Data untuk sorting Anggaplah kita mempunyai suatu array integer Akan dilakukan sorting secara ascending Sorting secara descending dapat dilakukan dengan penyesuaian pada algoritme ILKOM IPB 7

Fungsi pendukung Mempertukarkan nilai t1 dan t2: void tukar(int *t1, int *t2) { int t = *t1; *t1 = *t2; *t2 = t; Menampilkan n buah data void printlist(int t[], int n) { int i; for (i=0; i<n; i++) printf("%d ", t[i]); printf( \n"); BUBBLE SORT Ide: nilai yang besar seperti gelembung yang akan naik Keuntungan: Sederhana dan mudah diimplementasikan Cepat jika data masukan sudah terurut Kelemahan: Secara umum membutuhkan waktu proses lebih lama Biasa dijadikan contoh algoritme pengurutan yang tidak efisien (O(n 2 )) ILKOM IPB 8

Cara kerja Baca elemen array dari kiri ke kanan, bandingkan nilai key yang bersebelahan. Jika dua nilai posisinya tidak sesuai, tukar tempatnya. Ulangi prosedur ini sampai semua elemen terurut. Pada putaran ke-i, nilai ke-i terbesar akan berada di posisi yang benar Putaran pertama akan menempatkan nilai paling besar di akhir array Dimanfaatkan untuk optimasi inner loop agar tidak lagi memeriksa nilai yang telah benar posisinya BUBBLE SORT void bubblesort(int x[], int n) { int i,j; for(i=0;i<n-1;i++){ for(j=0;j<n-(i+1);j++){ if (x[j] > x[j+1]) tukar(&x[j],&x[j+1]); printf("%d %d ", i, j); printlist(x, n); Bagian yang ditebalkan adalah optimasi inner loop Bagian berwarna biru hanya untuk tracing ILKOM IPB 9

Algoritme sorting lainnya Insertion sort Selection sort Quicksort Mergesort Review Untuk menampung data nama dan usia, dibuat dua variabel array: char nama[size][50]; int usia[size]; Bisakah disimpan dalam satu variabel array biasa? TIDAK BISA, karena berbeda tipe. Beberapa variabel dapat dikemas dalam satu paket dengan struct. ILKOM IPB 10

Pengertian struct struct adalah kumpulan variabel (masingmasing dapat berbeda tipe) yang dikelompokkan dan dikemas ke dalam satu nama variabel. Untuk mendefinisikan suatu record. Termasuk tipe data turunan (derived data type). Cara membuat struct Contoh: struct datamhs { char *nama; int usia; ; Tipe struct ini diberi nama datamhs Terdiri atas dua variabel: nama dan usia Pernyataan tersebut hanya membuat tipe data struct baru, TIDAK mendeklarasikan variabel apapun Belum ada alokasi memori ILKOM IPB 11

Deklarasi struct Contoh deklarasi variabel menggunakan tipe struct: struct datamhs mhs; struct datamhs arrmhs[100]; Dapat juga dilakukan langsung (definisi dan deklarasi): struct datamhs { char *nama; int usia; mhs, arrmhs[100]; Contoh program :: Merekam data nama dan usia mhs. #include <stdio.h> struct datamhs { char *nama; int usia; mhs1; Elok Nian 20 Indah Sekali 19 int main() { struct datamhs mhs2={"indah Sekali", 19; mhs1.nama = "Elok Nian"; mhs1.usia = 20; printf("%s %d\n", mhs1.nama, mhs1.usia); printf("%s %d\n", mhs2.nama, mhs2.usia); return 0; ILKOM IPB 12

Pointer pada struct #include <stdio.h> struct datamhs { char *nama; int usia; ; Indah Sekali 19 Indah Sekali 19 int main() { struct datamhs mhs={"indah Sekali", 19; struct datamhs *p; p = &mhs; printf("%s %d\n", mhs.nama, mhs.usia); printf("%s %d\n", p->nama, p->usia); return 0; Akses anggota struct Menggunakan salah satu dari dua operator: operator titik (.) operator panah (->) tergantung tipe variabel yang dideklarasikan. Akses variabel biasa (selain pointer) menggunakan operator titik, sedangkan akses variabel pointer menggunakan operator panah. ILKOM IPB 13

Typedef Typedef merupakan mekanisme untuk membuat sinonim atau alias dari tipe data yang telah didefinisikan sebelumnya. Contoh: typedef struct datamhs MHS; berarti mendefinisikan tipe data baru bernama MHS sebagai sinonim untuk struct datamhs. Dengan demikian, pernyataan struct datamhs untuk selanjutnya dapat diganti dengan MHS saja. Contoh :: Menggunakan typedef #include <stdio.h> struct datamhs { Indah Sekali 19 char *nama; Indah Sekali 19 int usia; ; typedef struct datamhs MHS; int main() { MHS mhs={"indah Sekali", 19; MHS *p; p = &mhs; printf("%s %d\n", mhs.nama, mhs.usia); printf("%s %d\n", p->nama, p->usia); return 0; ILKOM IPB 14

Array of struct #include <stdio.h> #define SIZE 100 struct nilaimhs { char nim[9]; int uts, uas; float rataan; ; typedef struct nilaimhs NILAI; void substring (char *dest, const char *source, int a, int n) { int i=a; for (; i<a+n; i++) dest[i-a]=source[i]; dest[i-a]='\0'; Array of struct int main() { int n, i; NILAI list[size]; char brs[256], st[4]; scanf("%d\n", &n); for (i = 0; i<n; i++) { gets(brs); // baca per baris data substring(list[i].nim, brs, 0, 9); 3 G64010234 60 80 G64010235 50 45 G64010236 90 76 substring(st, brs, 10, 2); list[i].uts = atoi(st); substring(st, brs, 13, 2); list[i].uas = atoi(st); for (i = 0; i<n; i++) // hitung rataan tiap mhs list[i].rataan = (float) (list[i].uts+list[i].uas)/2.0; for (i = 0; i<n; i++) { printf("%s %.2f\n", list[i].nim, list[i].rataan); return 0; ILKOM IPB 15

Latihan #1 Titik 2D Suatu titik dalam bidang 2D diwakili oleh dua nilai yang masing-masingnya menunjukkan nilai untuk masingmasing dimensi dan dicetak dengan notasi (x, y) dengan x dan y adalah bilangan riil Buat program untuk membaca dua buah titik dan menampilkan jarak Euclid keduanya dengan dua angka di belakang titik desimal. Gunakan tipe data struct Contoh masukan: 2.5 2 2 d p, q ( px qx) ( py qy) 5 2 Contoh keluaran: 2.50 2 Latihan #2 Waktu Buat fungsi untuk menentukan selisih (dalam satuan menit) antara dua waktu time1 dan time2 dalam satuan detik. Masing-masing waktu terdiri atas tiga komponen nilai, yaitu hour (jam), minute (menit), dan second (detik). Contoh penggunaan fungsi: int main() { TIME time1 = {10, 30, 0.0; TIME time2 = {11, 31, 30.0; float beda; beda = selisih(time1, time2); printf(".2f\n", beda); // output: 61.50 return 0; ILKOM IPB 16

Latihan #3 Diketahui suatu struct mhs untuk data mahasiswa: struct mhs { char nim[10]; char nama[30]; float nilai; ; Buat suatu program untuk menerima n buah data mahasiswa dan menampilkan daftar mahasiswa yang terurut berdasarkan nilai secara descending ILKOM IPB 17