Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
STRUKTUR DATA STRUCT DAN POINTER
SULIDAR FITRI, M.Sc
2
STRUCT Dalam C++, tipe data struktur yang dideklarasikan dengan kata kunci struct, dapat memiliki komponen dengan sembarang tipe data, baik tipe data dasar maupun tipe data turunan, termasuk fungsi. Sehingga, tipe data struktur menjadi sangat berdaya guna.
3
Contoh Misal : kita ingin membentuk tipe data struktur yang namanya kotak. Maka dapat dideklarasikan sebagai berikut : struct tkotak { double panjang; double lebar; }; tkotak kotak; Untuk memberi nilai ukuran kotak tersebut, kita dapat menggunakan perintah : kotak.panjang = 10; kotak.lebar = 7;
4
Struktur & Fungsi (1) Cara lain untuk memberi nilai panjang dan lebar adalah dengan membentuk suatu fungsi. Karena fungsi ini hanya digunakan untuk memberi nilai data panjang dan lebar suatu kotak, tentunya fungsi ini khusus milik objek kotak, sehingga harus dianggap sebagai anggota struktur kotak. C++ sebagai bahasa pemrograman dapat mendefinisikan anggota tipe struktur yang berupa fungsi.
5
Struktur & Fungsi (2) Dengan menambah fungsi tersebut, maka struktur kotak menjadi lebih jelas bentuknya, seperti berikut : struct tkotak { double panjang; double lebar; void SetUkuran(double pj, double lb) panjang = pj; lebar = lb; }; tkotak kotak; Dengan tipe struktur kotak seperti itu, untuk memberi nilai panjang dan lebar hanya dengan memanggil fungsi SetUkuran() : kotak.SetUkuran(10,7);
6
Struktur & Fungsi (3) Selain punya ukuran panjang dan lebar, kotak juga mempunyai keliling dan luas. Dengan demikian, kita dapat memasukkan fungsi untuk menghitung keliling dan luas ke dalam struktur kotak. Definisi fungsi yang menjadi anggota struktur dapat ditempatkan di luar tubuh struktur.
7
Struktur & Fungsi (4) Dengan cara ini maka deklarasi struktur kotak menjadi seperti berikut : struct tkotak { double panjang; double lebar; void SetUkuran(double pj, double lb); double Keliling(); double Luas(); }; tkotak kotak;
8
Struktur & Fungsi - Contoh
Contoh penerapan struktur kotak dapat dilihat dalam program berikut : #include<iostream.h> #include<conio.h> struct tkotak { double panjang; double lebar; void SetUkuran(double pj, double lb); double Keliling(); double Luas(); };
9
Struktur & Fungsi - Contoh
int main() { tkotak kotak; kotak.SetUkuran(10,7); cout<<"Panjang : "<<kotak.panjang<<endl; cout<<"Lebar : "<<kotak.lebar<<endl; cout<<"Keliling : "<<kotak.Keliling()<<endl; cout<<"Luas : "<<kotak.Luas()<<endl; getch(); return 0; }
10
Struktur & Fungsi - Contoh
void tkotak::SetUkuran(double pj, double lb) { panjang = pj; lebar = lb; } double tkotak::Keliling() return 2*(panjang+lebar); double tkotak::Luas() return panjang*lebar;
11
Struktur & Fungsi - Contoh
Tampilan Output : Panjang : 10 Lebar : 7 Keliling : 34 Luas : 70
12
Struct & Class Bentuk program di atas, adalah contoh gaya pemrograman berorientasi prosedur (terstruktur). Dalam pemrograman berorientasi objek, jika kita telah menentukan suatu objek tertentu, maka objek tersebut kita definisikan dalam bentuk tipe baru yang namanya kelas. Tipe data kelas didefinisikan dengan kata kunci (keyword) class, yang merupakan generalisasi dari pernyataan struct. Pernyataan struct secara umum digantikan dengan pernyataan class. Jika objek kotak dideklarasikan dalam bentuk kelas, maka deklarasinya mirip dengan struktur.
13
Deklarasi class tkotak { double panjang; double lebar; public:
void SetUkuran(double pj, double lb); double Keliling(); double Luas(); }; tkotak kotak;
14
Deklarasi Dalam deklarasi kelas tersebut, muncul kata public. Data atau fungsi yang dideklarasikan di bawah kata kunci public mempunyai sifat dapat diakses dari luar kelas secara langsung. Dalam deklarasi tersebut, variabel panjang dan lebar tidak bersifat public, sehingga tidak dapat diakses secara langsung dari luar kelas. Perintah-perintah di bawah ini tidak dapat dijalankan : kotak.panjang = 10; kotak.lebar = 7; cout<<”Panjang : ”<<kotak.panjang<<endl; cout<<”Lebar : “<<kotak.lebar<<endl;
15
Perbedaan Struktur & Kelas
Dalam kelas, masing-masing data dan fungsi anggota diberi sifat tertentu. Jika semua anggota kelas bersifat public, maka kelas sama dengan struktur. Untuk dapat mengakses data panjang dan lebar pada kelas tkotak harus dilakukan oleh fungsi yang menjadi anggota kelas dan bersifat public. Pada deklarasi kelas tkotak, satu-satunya jalan untuk memberi nilai panjang dan lebar adalah dengan menggunakan fungsi SetUkuran(). Untuk mengambil nilai panjang dan lebar juga harus dilakukan oleh fungsi yang menjadi anggota kelas. Misalnya, kita definisikan fungsi GetPanjang() dan GetLebar() untuk mengambil nilai panjang dan lebar.
16
Contoh : //program class #include<iostream.h>
#include<conio.h> class tkotak { double panjang; double lebar; public: void SetUkuran(double pj, double lb); double Keliling(); double Luas(); double GetPanjang(); double GetLebar(); }; int main() tkotak kotak; kotak.SetUkuran(10,7); cout<<"Panjang : "<<kotak.GetPanjang()<<endl; cout<<"Lebar : "<<kotak.GetLebar()<<endl; cout<<"Keliling : "<<kotak.Keliling()<<endl; cout<<"Luas : "<<kotak.Luas()<<endl; getch(); return 0; }
17
Contoh void tkotak::SetUkuran(double pj, double lb) { panjang = pj;
lebar = lb; } double tkotak::Keliling() return 2*(panjang+lebar); double tkotak::Luas() return panjang*lebar; double tkotak::GetPanjang() return panjang; double tkotak::GetLebar() return lebar; Contoh
18
Output Tampilan Output : Panjang : 10 Lebar : 7 Keliling : 34
Luas : 70
19
Definisi Kelas Dapat dilihat dari contoh program, bentuk pendefinisian kelas adalah sebagai berikut : Tipe Nama_Kelas::NamaFungsi() { IsiFungsi } Untuk mendefinisikan variabel kelas, digunakan deklarasi : Nama_Kelas Nama_Variabel; Contoh : Tkotak kotak;
20
typedef Struktur yang didefinisikan dapat menjadi suatu tipe data baru menggunakan perintah “typedef”. Contoh: //penggunaan typedef typedef struct Mahasiswa { string nim; string nama; float nilai_uts; float nilai_uas; } MHS; int main() { MHS mhs; mhs.nama="Andi"; cout<<mhs.nama; return 0; }
21
Typedef Pada Array Pendeklarasian sebuah array bertipe int dapat dilakukan seperti yang terlihat berikut ini. int x[100] Alias dari array bertipe int berukuran 100 di atas dapat dilakukan menggunakan typedef sebagai berikut: Langkah 1: Ganti variabel x dengan nama alias, misalnya Larik sehingga menjadi: int Larik[100]; Langkah 2: Tambahkan statemen typedef sehingga menjadi typedef int Larik[100]; Langkah 3: Deklarasi variabel dengan tipe Larik ukuran 100 adalah: Larik a, b, c;
22
POINTER
23
Pengantar mengenai memori komputer
Sebelum berbicara mengenai pointer, diperlukan pengetahuan mengenai memori komputer Apakah fungsi memori komputer? Bagaimana hubungan program, variabel, dan memori?
24
Memori komputer RAM (Random access memory) ROM (Read Only Memory)
Istilah untuk memory yang bersifat volatile (isi memori akan hilang jika catu daya dicabut) RAM bisa dibaca dan ditulisi data secara cepat Contoh: DDRAM, SDRAM, cache memory ROM (Read Only Memory) Bersifat non volatile (data masih eksis di memori walaupun cata daya dicabut) ROM bisa dibaca secara cepat, tapi untuk menulisi ROM butuh sekuens/urutan tertentu Contoh: ROM BIOS Pada mata kuliah ini, memori yang akan dibahas adalah RAM
25
RAM Fungsi RAM: Menyimpan instruksi-instruksi hasil kompilasi program Menyimpan data-data variabel Ketika suatu program di-compile, beberapa byte memori dari RAM akan dialokasikan untuk menyimpan instruksi dan menyimpan data variabel Alamat memori yang dialokasikan ditentukan secara otomatis oleh compiler
26
Ilustrasi penggunaan RAM
Alamat memori 0x1000 0x00 Penyimpan variabel a 0x1001 0x02 Penyimpan variabel b 0x1002 0xA2 0x1003 0x33 0x1004 0x12 Penyimpan instruksi 0x1005 0xF0 0x1006 0x01 0x2000 0x00 Penyimpan variabel address_a 0x2001 0x10
27
Reference Operator (&)
Alamat memori tempat suatu variabel disimpan disebut reference dari variabel tersebut Reference suatu variabel diakses melalui suatu reference operator (&) Secara bahasa, operator ‘&’ bisa diartikan menjadi ‘alamat dari’
28
CONTOH PROGRAM 1 // This program stores the address of a variable in a pointer. #include <iostream.h> void main(void) { int x = 25; int *ptr; ptr = &x; // Store the address of x in ptr cout << "The value in x is " << x << endl; cout << "The address of x is " << ptr << endl; }
29
OUTPUT CONTOH 1 The value in x is 25 The address of x is 0x7e00
30
ILUSTRASI 1 0x7e00 25 ptr x Address of x: 0x7e00
31
Program 2 // This program demonstrates the use of the indirection operator. #include <iostream.h> void main(void) { int x = 25; int *ptr; ptr = &x; // Store the address of x in ptr cout << "Here is the value in x, printed twice:\n"; cout << x << " " << *ptr << endl; *ptr = 100; cout << "Once again, here is the value in x:\n"; }
32
Program Output Here is the value in x, printed twice: 25 25
25 25 Once again, here is the value in x:
33
Program 3 #include <iostream> void main(void) {
int x = 25, y = 50, z = 75; int *ptr; cout << "Here are the values of x, y, and z:\n"; cout << x << " " << y << " " << z << endl; ptr = &x; // Store the address of x in ptr *ptr *= 2; // Multiply value in x by 2 ptr = &y; // Store the address of y in ptr *ptr *= 2; // Multiply value in y by 2 ptr = &z; // Store the address of z in ptr *ptr *= 2; // Multiply value in z by 2 cout << "Once again, here are the values of x, y, and z:\n"; }
34
Program Output Here are the values of x, y, and z: 25 50 75
Once again, here are the values of x, y , and z:
35
Deklarasi tipe data pointer
Contoh : unsigned int *my_pointer; Deklarasi di atas menyatakan deklarasi variabel my_pointer yang bertipe pointer untuk variabel tipe unsigned int (pointer to unsigned int) Variable my_pointer digunakan untuk menyimpan suatu alamat memori suatu variabel bertipe unsigned int Deklarasi suatu pointer diawali dengan tanda ‘*’ sebelum nama variabelnya
36
Modifier unsigned: Tipe data Ukuran memori Jangkauan nilai
dapat diterapkan pada char, int, short, long adalah void dan pointer range nilai yang bisa dijangkau mempresentasikan bilangan seperti pada angka yang ditunjukkan oleh jumlah kilometer yang telah ditempuh pada mobil atau sepeda motor Angka tersebut dimulai dari dan mencapai maksimum , dan kembali ke Jadi dalam unsigned, yang ditampilkan hanyalah bilangan positif keseluruhan dalam range nol sampai ke bilangan maksimum yang dapat diprepresentasikannya. Tipe data Ukuran memori Jangkauan nilai unsigned char 1 byte 0 s/d 255 unsigned int 2 byte 0 s/d 32767 unsigned short 2 byte 0 s/d unsigned long 4 byte 0 s/d
37
Dereference operator Selain untuk deklarasi pointer, tanda ‘*’ juga berfungsi untuk dereference operator Dereference adalah kebalikan reference Reference operasi melihat alamat suatu variabel Dereference operasi untuk melihat isi dari suatu alamat memori Contoh : a = *my_pointer; Artinya: my_pointer berisi suatu alamat memori, dan variabel a akan berisi data yg tersimpan di alamat memori tsb.
38
Contoh 1 penggunaan pointer
unsigned int a, *pointer_a; a = 10; pointer_a = &a; cout << “nilai a : “ << a; cout << “nilai *pointer_a” << *pointer_a; a = 10; //variabel a diisi nilai 10 pointer_a = &a; //pointer_a berisi alamat memori dari a //setelah perintah di atas, nilai *pointer_a akan berisi //sama dengan a cout << “nilai a : “ << a; cout << “nilai *pointer_a” << *pointer_a;
39
Mengubah nilai variabel
Mengubah nilai variabel secara langsung: a = 250; Mengubah nilai variabel by-reference (tidak langsung) unsigned int a,*pointer_a; pointer_a=&a; *pointer_a=250; unsigned int a,*pointer_a; pointer_a=&a; //variabel pointer_a berisi alamat a *pointer_a=250; //alamat yang ditunjuk pointer_a berisi 250 //dengan kata lain,a akan berisi 250
40
Any Queries ? Source: Starting out with C++, 3rd edition
Erizal, S.Si, M.Kom/ Struktur dan Kelas
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.