praktikum struktur data queue - E

advertisement
STRUKTUR DATA
STRUCT DAN POINTER
SULIDAR FITRI, M.Sc
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.
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;
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.
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);
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.
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;
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();
};
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;
}
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;
}
Struktur & Fungsi - Contoh
• Tampilan Output :
• Panjang
• Lebar
• Keliling
• Luas
: 10
:7
: 34
: 70
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.
Deklarasi
class tkotak
{
double panjang;
double lebar;
public:
void SetUkuran(double pj, double lb);
double Keliling();
double Luas();
};
tkotak kotak;
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;
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.
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; }
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;
}
Output
• Tampilan Output :
•
•
•
•
Panjang
Lebar
Keliling
Luas
: 10
:7
: 34
: 70
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;
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; }
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;
POINTER
Pengantar mengenai memori komputer
• Sebelum berbicara mengenai pointer, diperlukan pengetahuan
mengenai memori komputer
• Apakah fungsi memori komputer?
• Bagaimana hubungan program, variabel, dan memori?
Memori komputer
• RAM (Random access 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
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
Ilustrasi penggunaan RAM
Alamat memori
0x1000
0x00
Penyimpan variabel a
0x1001
0x02
Penyimpan variabel b
0x1002
0xA2
0x1003
0x33
0x1004
0x12
0x1005
0xF0
0x1006
0x01
Penyimpan instruksi
. . . .
0x2000
0x00
0x2001
0x10
Penyimpan variabel address_a
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’
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;
}
OUTPUT CONTOH 1
The value in x is 25
The address of x is 0x7e00
ILUSTRASI 1
x
25
ptr
0x7e00
Address of x: 0x7e00
30
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";
cout << x << "
}
" << *ptr << endl;
31
Program Output
Here is the value in x, printed twice:
25 25
Once again, here is the value in x:
100 100
32
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 << "
ptr = &x;
" << y << "
" << z << endl;
// 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";
cout << x << "
" << y << "
" << z << endl;
}
33
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:
50 100 150
34
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
Modifier unsigned:
• 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 0000... dan mencapai maksimum 9999..., dan
kembali ke 0000...
• 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 32.767
unsigned long 4 byte 0 s/d 2.147.438.647
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.
Contoh 1 penggunaan pointer
unsigned int a, *pointer_a;
a = 10;
pointer_a = &a;
cout << “nilai a : “ << a;
cout << “nilai *pointer_a” << *pointer_a;
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;
Source: Starting out with C++, 3rd edition
Erizal, S.Si, M.Kom/ Struktur dan Kelas
Download