STRUKTUR DATA (1)
PENGANTAR • Bagaimana cara mengatasi masalah implementasi program dengan komputer?
• Pemahaman masalah secara menyeluruh dan persiapan data • Keputusan operasi-operasi yang dilakukan terhadap data • Penyimpanan data-data pada memori sehingga tersimpan dan terstruktur secara logis, operasinya efisien • Pengambilan keputusan terhadap bahasa pemrograman mana yang paling cocok untuk jenis data yang ada
Perbedaan Tipe Data, Obyek Data & Struktur Data (1) • Tipe data adalah jenis data yang mampu ditangani oleh suatu bahasa pemrograman pada komputer. • Tiap-tiap bahasa pemrograman memiliki tipe data yang memungkinkan: • Deklarasi terhadap variabel tipe data tersebut • Menyediakan kumpulan operasi yang mungkin terhadap variabel bertipe data tersebut • Jenis obyek data yang mungkin • Contoh tipe data di C? Java? Pascal? .NET?
Perbedaan Tipe Data, Obyek Data & Struktur Data (2) • Obyek Data adalah kumpulan elemen yang mungkin untuk suatu tipe data tertentu. • Mis: integer mengacu pada obyek data -32768 s/d 32767, byte 0 s/d 255, string adalah kumpulan karakter maks 255 huruf
• Struktur Data adalah cara penyimpanan dan pengorganisasian data-data pada memori komputer maupun file secara efektif sehingga dapat digunakan secara efisien, termasuk operasi-operasi di dalamnya.
Aktivitas Struktur Data • Di dalam struktur data kita berhubungan dengan 2 aktivitas: • Mendeskripsikan kumpulan obyek data yang sah sesuai dengan tipe data yang ada • Menunjukkan mekanisme kerja operasi-operasinya • Contoh: integer (-32768 s/d 32767) dan jenis operasi yang diperbolehkan adalah +, -, *, /, mod, ceil, floor, <, >, != dsb.
• Struktur data = obyek data + [operasi manipulasi data]
Hubungan SD dan Algoritma • Dengan pemilihan struktur data yang baik, maka problem yang kompleks dapat diselesaikan sehingga algoritma dapat digunakan secara efisien, operasioperasi penting dapat dieksekusi dengan sumber daya yang lebih kecil, memori lebih kecil, dan waktu eksekusi yang lebih cepat. • Tidak semua struktur data baik dan sesuai. Contoh untuk problem data bank: pengupdate-an harus cepat, sedangkan penambahan/penghapusan data boleh lebih lambat.
Ciri Algoritma • Ciri algoritma yang baik menurut Donald E.Knuth: • • • •
Input: ada minimal 0 input atau lebih Ouput: ada minimal 1 output atau lebih Definite: ada kejelasan apa yang dilakukan Efective: langkah yang dikerjakan harus efektif • Terminate: langkah harus dapat berhenti (stop) secara jelas
ADT (Abstract Data Type) atau Tipe Data Bentukan • Bahasa pemrograman bisa memiliki tipe data:
• Built-in : sudah tersedia oleh bahasa pemrograman tersebut • Tidak berorientasi pada persoalan yang dihadapi.
• UDT : User Defined Type, dibuat oleh pemrogram.
• Mendekati penyelesaian persoalan yang dihadapi • Contoh: record pada Pascal, struct pada C, class pada Java
• ADT : Abstract Data Type
• memperluas konsep UDT dengan menambahkan pengkapsulan atau enkapsulasi, berisi sifat-sifat dan operasioperasi yang bisa dilakukan terhadap kelas tersebut. • Contoh: class pada Java
ADT (2) • Bahasa C memiliki tipe data numerik dan karakter (seperti int, float, char dan lainlain). Disamping itu juga memiliki tipe data enumerasi dan structure. Bagaimana jika kita ingin membuat tipe data baru? • Untuk pembuatan tipe data baru digunakan keyword typedef • Bentuk umum: typedef
Program • •
• • • • • • • • • • • • • • • • • • • •
Contoh: #include <stdio.h>
#include typedef int angka; typedef float pecahan; typedef char huruf; void main(){ clrscr(); angka umur; pecahan pecah; huruf h;
}
huruf nama[10]; printf("masukkan umur anda : ");scanf("%d",&umur); printf("Umur anda adalah %d",umur); printf("\nmasukkan bilangan pecahan : ");scanf("%f",&pecah); printf("Bilangan pecahan %f",pecah); printf("\nmasukkan huruf : ");h=getche(); printf("\nHuruf anda %c",h); printf("\nmasukkan nama : ");scanf("%s",nama); printf("Nama anda %s",nama); getch();
Hasil Program
Array b
Pendahuluan d h l Selama S l i i kita ini kit menggunakan k satu t variabel i b l untuk menyimpan 1 buah nilai dengan tipe data te te tu tertentu.
int a1, a2, a3, a4, a5; Deklarasi variabel diatas digunakan untuk menyimpan 5 data integer dimana masing-masing masing masing variabel diberi nama a1, a2, a3, a4, dan a5. Jika kita memiliki 10 data, 100 data integer bahkan mungkin data yang ingin kita proses tidak kita ketahui atau bersifat dinamis? Kita tidak mungkin menggunakan variabel seperti diatas. B Bagaimana i jik jika kita kit iingin i menghitung hit ttotal t l dari d i variabel biasa? total = x1 + x2 + x3 + x4 + x5 + … + xn;
Without array: int scores0 scores0, scores1 scores1, scores2 scores2, scores3, scores3 scores4, scores5, scores6, scores7, scores8, scores9; scanf(“%d %d %d %d %d %d %d %d %d %d”, &scores0, &scores1, &scores2, &scores3, &scores4, &scores5, &scores6, &scores7, &scores8, &scores9); printf( %d %d %d %d %d %d %d %d %d printf(“%d %d”, scores0, scores1, scores2, scores3, scores4, scores5, scores6, scores7, scores8, scores9);
Ten Variables
Process 10 variables 4
Array
Array digunakan untuk:
Menyimpan data-data yang diinputkan masingmasing kedalam memory komputer Contoh kasus yang membutuhkan array: • • •
List of employees in organization Test scores of a class of students List of customers and their telephone numbers
Array
Di dalam d l C dan d pemrograman yang lain, l i terdapat t d t suatu t fasilitas untuk menyimpan data-data yang bertipe data sama dengan suatu nama tertentu = ARRAY/LARIK A Array adalah d l h suatu tipe i data d terstuktur k yang berupa b sejumlah data sejenis (bertipe data sama) yang jumlahnya tetap dan diberi suatu nama tertentu. Elemen-elemen array tersusun secara sekuensial di dalam memori sehingga memiliki alamat yang berdekatan/bersebelahan. Array dapat berupa array 1 dimensi, 2 dimensi, bahkan ndimensi. Elemen-elemen array y bertipe p data sama tapi p bisa bernilai sama atau berbeda-beda.
Bentukk Array A dalam d l Memory (int)) 0
1
2
3
4
index
1
4
6
3
7
value
245F:21EC
245F:21EE
245F:21F0
245F:21F2
245F:21F4
address
A Array (2))
Elemen-elemen El l array dapat d t diakses di k oleh l h program menggunakan suatu indeks tertentu Pengaksesan elemen array dapat dilakukan berurutan atau random d b d berdasarkan k indeks i d k tertentu secara langsung. Pengisian dan pengambilan nilai pada indeks tertentu dapat dilakukan dengan mengeset nilai atau menampilkan nilai pada indeks yang dimaksud. Dalam C,, tidak terdapat p error handling g terhadap p batasan nilai indeks, apakah indeks tersebut berada di dalam indeks array yang sudah didefinisikan atau belum.
Hal ini merupakan p tanggung gg g jjawab p programmer. g Sehingga gg jika programmer mengakses indeks yang salah, maka nilai yang dihasilkan akan berbeda atau rusak karena mengakses alamat memori yang tidak sesuai.
Deklarasi kl
-Tipe data sejenis -Ada indeks yang teratur dan berurutan -Bersifat Bersifat statis, statis harus diketahui ukurannya terlebih dahulu
C Contoh h ddan A Arti
char huruf[9] berarti akan memesan tempat di memori komputer sebanyak 9 tempat dengan indeks dari 0-8, 0-8 dimana semua elemennya bertipe data karakter semuanya. Kalau satu karakter berukuran 1 byte, berarti membutuhkan memori sebesar 9 byte. int umur[10]: berarti akan memesan tempat di memori komputer sebanyak 10 tempat dengan indeks dari 0-9, dimana semua elemennya bertipe data integer semuanya. Kalau satu integer berukuran 4 bytes, berarti membutuhkan memori sebesar 4 x 10 = 20 bytes.
C Contoh h ddan A Arti (2))
int kondisi[2] berarti akan memesan tempat di memori komputer sebanyak 2 tempat dengan indeks 0-1, dimana semua elemennya bertipe data integer semuanya. Dan pada contoh di atas isi elemen elemennya yang sebanyak 2 buah diisi sekaligus elemen-elemennya (diinisialisasi) yaitu pada elemen kondisi[0] bernilai 0, dan elemen kondisi[1] bernilai 1. int arr_dinamis[] berarti mendeklarasikan array dengan ukuran maksimum array tidak diketahui, namun ukuran tersebut diketahui berdasarkan inisialisasi yaitu sebanyak 3 elemen, yang isinya 1,2, dan 3. Kita tidak dapat mendeklarasikan array dinamis tanpa inisialisasi.
Penjelasan l Lebih b h Lanjut
Tanda [] disebut juga “elemen yang ke- „. Misalnya “kondisi[0]“ berarti elemen yang ke nol. A Array yang sudah d h dipesan, di misalnya i l 10 tempat t t tidak harus diisi semuanya, bisa saja hanya diisi 5 elemen saja, saja baik secara berurutan maupun tidak. Namun pada kondisi yang tidak sepenuhnya terisi tersebut, tempat pemesanan di memori tetap sebanyak 10 tempat, jadi tempat yang tidak terisi tetap akan terpesan dan dibiarkan kosong.
• the h subscript b i value l in i square brackets. •This is known as indexing
An Array of Scores 13
Declaration and definition tell the compiler the name of the array the type of each element, array, element and the number of elements(size) in the array.
Declaring and Defining Arrays 14
CONTOH PROSES
Array / Larik
ALGORITMA For Indeks Å 0 to N-1 PROSES LARIK Endfor 9Mengisi g
elemen larik dengan g 0 (inisialisasi) 9Mengisi e gs
elemen e e e larik a da dari keyboard eyboa d
9Mencetak
elemen larik ke layar
do
INISIALISASI
Array / Larik
ALGORITMA For Indeks Å 0 to 7 A[Indeks] = 0 Endfor
0 0
0 1
0 2
0 3
0 4
do
0 5
0 6
0 7
INPUT ELEMEN
Array / Larik
ALGORITMA For Indeks Å 0 to 7 Input A[Indeks] Endfor
do
?1 ?3 ?5
1 0
3 1
5 2
7 3
2 4
9 5
4 6
7 7
CETAK ELEMEN
Array / Larik
ALGORITMA For Indeks Å 0 to 7 do Print A[Indeks] Endfor
2 7 4 9 5 3 1
1 0
3 1
5 2
7 3
2 4
9 5
4 6
7 7
C Contoh h ddalam l C
C Contoh h (2))
Terlihat bahwa alamat array berurutan dengan jarak antar alamat adalah 4 bytes (integer berukuran 4 bytes)
C Contoh h (3))
C Contoh h (4))
C Contoh h (5))
C Contoh h (6))
Pengiriman Parameter fungsi berupa array dimensi 1
Pengiriman parameter berupa array dimensi 1 bersifat by reference
Karena yang dikirimkan adalah alamat dari elemen pertama array, bukan seluruh nilai elemen-elemen l l array. Alamat pertama array ditujukkan oleh nama arraynya tidak perlu dituliskan indeksnya. arraynya, indeksnya Bentuk ini akan terlihat pada argumen di parameter aktual. aktual
C Contoh h
Jika diganti: antonius rachmat chrismanto
C Contoh h (2))
Penghapusan h A Array Elemen array tidak dapat dihapus saat runtime Untuk penghapusan gunakan trik:
Buat array y baru yang y g tidak berisi elemen yg dihapus Timpa elemen array yang dihapus dengan data elemen belakangnya
Jadi seolah-olah elemen-elemen datanya maju satu persatu kedepan Index i = index i+1
Struct • Struct adalah tipe data bentukan yang berisi kumpulan variabel-variabel yang bernaung dalam satu nama yang sama dan memiliki kaitan satu sama lain. • Berbeda dengan array hanya berupa kumpulan variabel yang bertipe data sama, struct bisa memiliki variabelvariabel yang bertipe data sama atau berbeda, bahkan bisa menyimpan variabel yang bertipe data array atau struct itu sendiri. • Variabel-variabel yang menjadi anggota struct disebut dengan elemen struct.
Bentuk Umum • Bentuk umum:
• typedef struct { • tipe_data ; • tipe_data ; • .... • }
Pendeklarasian dan penggunaan Struct (1) (menggunakan typedef) • typedef struct Mahasiswa { • char NIM[8]; • char nama[50]; • float ipk; • }; • untuk menggunakan struct Mahasiswa dengan membuat variabel mhs dan mhs2 • Mahasiswa mhs,mhs2; • untuk menggunakan struct Mahasiswa dengan membuat variabel array m; • Mahasiswa m[100];
Pendeklarasian dan penggunaan Struct (2) (tanpa menggunakan typedef)
• struct { • char NIM[8]; • char nama[50]; • float ipk; • } mhs;
• Berarti kita sudah mempunyai variabel mhs yang bertipe data struct seperti diatas.
Cara penggunaan struct dan pengaksesan elemen-elemennya • Penggunaan/pemakaian tipe data struct dilakukan dengan membuat suatu variabel yang bertipe data struct tersebut • Pengaksesan elemen struct dilakukan secara individual dengan menyebutkan nama variabel struct diikuti dengan operator titik (.) • Misalnya dengan struct mahasiswa seperti contoh di atas, kita akan akses elemenelemennya seperti contoh berikut:
Program •
• • • • • • • • • • • • • • • • • • • • • •
Contoh 1
#include <stdio.h> #include //Pendeklarasian tipe data baru struct Mahasiswa typedef struct Mahasiswa{ char NIM[9]; char nama[30]; float ipk; }; void main(){ //Buat variabel mhs bertipe data Mahasiswa Mahasiswa mhs; clrscr(); printf("NIM = ");scanf("%s",mhs.NIM); printf("Nama = ");scanf("%s",mhs.nama); printf("IPK = ");scanf("%f",&mhs.ipk);
}
printf("Data Anda : \n"); printf("NIM : %s\n",mhs.NIM); printf("Nama : %s\n",mhs.nama); printf("IPK : %f\n",mhs.ipk); getch();
Hasil
Program • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
#include <stdio.h> #include #define phi 3.14 //langsung dianggap variabel 'lingkaran' struct { float jari2; float keliling; float luas; } lingkaran; //fungsi void untuk menghitung luas ingkaran void luasLingkaran(){ //langsung menggunakan luas lingkaran asli lingkaran.luas = lingkaran.jari2 * lingkaran.jari2 * phi; printf("\nLuas lingkaran = %f",lingkaran.luas); } //fungsi yang mengembalikan nilai float untuk menghitung keliling lingkaran float kelLingkaran(float j){ return 2*phi*lingkaran.jari2; } int main(){ clrscr(); printf("Jari-jari = ");scanf("%f",&lingkaran.jari2); //panggil fungsi luasLingkaran luasLingkaran(); //panggil fungsi keliling, nilai kembaliannya dikirim ke keliling lingkaran asli lingkaran.keliling = kelLingkaran(lingkaran.jari2); //tampilkan keliling lingkaran asli printf("\nKeliling lingkaran = %f",lingkaran.keliling); getch(); }
Hasil
Struct yang berisi struct lain • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
#include <stdio.h> #include typedef struct Date{ int dd; int mm; int yyyy; }; typedef struct Time{ int h; int m; int s; }; typedef struct Login{ int ID; Date tglLogin; Time waktuLogin; }; int main(){ Login user1; printf("USER 1\n"); printf("ID : ");scanf("%d",&user1.ID); printf("Tanggal Login\n"); printf("Hari : ");scanf("%d",&user1.tglLogin.dd); printf("Bulan : ");scanf("%d",&user1.tglLogin.mm); printf("Tahun : ");scanf("%d",&user1.tglLogin.yyyy); printf("Waktu Login\n"); printf("Jam : ");scanf("%d",&user1.waktuLogin.h); printf("Menit : ");scanf("%d",&user1.waktuLogin.m); printf("Detik : ");scanf("%d",&user1.waktuLogin.s); printf("Terimakasih\n"); printf("Data printf("ID : printf("Date printf("ID : }
getch();
Anda :\n"); %d\n",user1.ID); : %d - %d - %d\n",user1.tglLogin.dd,user1.tglLogin.mm,user1.tglLogin.yyyy); %d:%d:%d\n",user1.waktuLogin.h,user1.waktuLogin.m,user1.waktuLogin.s);
Hasil
Array of Struct • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
#include <stdio.h> #include typedef struct Date{ int dd; int mm; int yyyy; }; typedef struct Time{ int h; int m; int s; }; typedef struct Login{ int ID; Date tglLogin; Time waktuLogin; }; int main(){ Login user[3]; //3 user for(int i=0;i<3;i++){ printf("\nUSER ke-%d\n",i+1); printf("ID : ");scanf("%d",&user[i].ID); printf("Tanggal Login\n"); printf("Hari : ");scanf("%d",&user[i].tglLogin.dd); printf("Bulan : ");scanf("%d",&user[i].tglLogin.mm); printf("Tahun : ");scanf("%d",&user[i].tglLogin.yyyy); printf("Waktu Login\n"); printf("Jam : ");scanf("%d",&user[i].waktuLogin.h); printf("Menit : ");scanf("%d",&user[i].waktuLogin.m); printf("Detik : ");scanf("%d",&user[i].waktuLogin.s); printf("Terimakasih Atas Pengisiannya\n");
} }
printf("\nData User ke-%d:\n",i+1); printf("Login ID : %d\n",user[i].ID); printf("Login Date : %d - %d - %d\n",user[i].tglLogin.dd,user[i].tglLogin.mm,user[i].tglLogin.yyyy); printf("Login Time : %d:%d:%d\n",user[i].waktuLogin.h,user[i].waktuLogin.m,user[i].waktuLogin.s);
getch();
Hasil