65
Algoritma dan Struktur Data Pointer Pada Struct

Algoritma dan Struktur Data

  • Upload
    sirius

  • View
    50

  • Download
    0

Embed Size (px)

DESCRIPTION

Algoritma dan Struktur Data. Pointer Pada Struct. REVIEW POINTER. Memori Komputer. Komputer menyimpan variabel program di satu atau beberapa slot pada memori Tiap slot memori memiliki nomor atau alamat tertentu. Tambahkan & sebelum variabel x. - PowerPoint PPT Presentation

Citation preview

Page 1: Algoritma dan Struktur Data

Algoritma dan Struktur Data

Pointer Pada Struct

Page 2: Algoritma dan Struktur Data

REVIEW POINTER

Page 3: Algoritma dan Struktur Data

Memori Komputer

• Komputer menyimpan variabel program di satu atau beberapa slot pada memori

• Tiap slot memori memiliki nomor atau alamat tertentu

Page 4: Algoritma dan Struktur Data

Di slot memori nomer berapa sebuah variabel disimpan ?

#include <stdio.h>#include <conio.h>

void main(){

int x;

x = 10; printf("x berada di slot memori nomor : %d", &x); getch();}

Tambahkan &

sebelum variabel x

Page 5: Algoritma dan Struktur Data

Eksekusi program

Page 6: Algoritma dan Struktur Data

Pointer

• Nomor atau alamat slot memori di mana variabel disimpan dapat disimpan pada variabel lain

• Variabel tersebut dinamakan pointer

• Pointer tidak menyimpan isi variabel, tetapi menyimpan alamat / nomor slot di mana isi variabel berada

Page 7: Algoritma dan Struktur Data

Pointer

• Pointer adalah variabel yang menyimpan alamat dari variabel yang lainnya.

• Deklarasi pointer : <type> *ptr_name;• Dua operator yang sering digunakan pada

pointer : * (content of) dan & (address of). • Contoh

Inisialisasi sebuah integer pointer ke data variable: int i, *ptr;ptr = &i;

Untuk merubah isi/nilai yg ditunjuk oleh pointer: *ptr = 5; /* sama artinya dgn i=5 */

Page 8: Algoritma dan Struktur Data

8

Page 9: Algoritma dan Struktur Data

Contoh

#include <stdio.h>#include <conio.h>

void main(){

int x; int *px;

x = 10; px = &x;

printf("x berada di slot memori nomor : %d", px); getch();}

Page 10: Algoritma dan Struktur Data

Eksekusi program

Page 11: Algoritma dan Struktur Data

Mengakses nilai variabel

• Nilai sebuah variabel bisa diakses melalui dua caraCara 1 : LangsungCara 2 : Menggunakan pointer

Page 12: Algoritma dan Struktur Data

Contoh

#include <stdio.h>#include <conio.h>

void main(){

int x; int *px;

x = 10; px = &x;

printf("nilai x diakses secara langsung : %d\n", x); printf("nilai x diakses melalui pointer : %d", *px); getch();}

Page 13: Algoritma dan Struktur Data

Eksekusi program

Page 14: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

Page 15: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr; /* declare a pointer-to-integer variable */

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable

Page 16: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr; /* declare a pointer-to-pointer-to-integer variable */

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable

pptr int ** integer pointer pointer variable

Double Indirection

Page 17: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i; /* store address-of i to ptr */

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable

*ptr int de-reference of ptr 5

Page 18: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr; /* store address-of ptr to pptr */

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 5

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

*pptr int * de-reference of pptr value of ptr

(address of i)

Page 19: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 3

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

*ptr int de-reference of ptr 3

Page 20: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 7

j int integer variable 10

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

**pptr int de-reference of de-reference of pptr

7

Page 21: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 7

j int integer variable 10

ptr int * integer pointer variable address of j

pptr int ** integer pointer pointer variable address of ptr

*ptr int de-reference of ptr 10

Page 22: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable 7

j int integer variable 9

ptr int * integer pointer variable address of j

pptr int ** integer pointer pointer variable address of ptr

**pptr int de-reference of de-reference of pptr

9

Page 23: Algoritma dan Struktur Data

An Illustration

int i = 5, j = 10;

int *ptr;

int **pptr;

ptr = &i;

pptr = &ptr;

*ptr = 3;

**pptr = 7;

ptr = &j;

**pptr = 9;

*pptr = &i;

*ptr = -2;

Data Table

Name Type Description Value

i int integer variable -2

j int integer variable 9

ptr int * integer pointer variable address of i

pptr int ** integer pointer pointer variable address of ptr

*ptr int de-reference of ptr -2

Page 24: Algoritma dan Struktur Data

• Pointer to pointer adalah variabel yang menyimpan alamat dari pointer yang lainnya.

• Deklarasi pointer : <type> **ptr_ptr ;

• Contoh int i, *ptr, **ptr_ptr ;ptr = &i;ptr_ptr = &ptr;

Untuk merubah nilai variabel i bisa melalui sbb: *ptr = 5; // sama artinya dgn i=5 ;**ptr_ptr = 9; //sama artinya dgn i=9; atau *ptr=9;

24

Page 25: Algoritma dan Struktur Data

25

Page 26: Algoritma dan Struktur Data

Operasi pada pointer

• Apa arti ptr + 1? Alamat slot sesudahnya!

• Apa arti ptr - 1? Alamat slot sebelumnya!

• Apa arti ptr * 2 and ptr / 2?Invalid operations!!!

Page 27: Algoritma dan Struktur Data

Operasi pada pointer

• Apa arti *ptr + 1 ?

• Apa arti *ptr - 1 ?

• Apa arti *ptr * 2 and ptr / 2?

Page 28: Algoritma dan Struktur Data

REVIEW

Pass by Value & Pass by Reference

Page 29: Algoritma dan Struktur Data

Program tanpa fungsi1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <stdio.h>

#include <conio.h>

void main(){

float panjang, lebar, luas;

panjang = 10;

lebar = 20

luas = panjang * lebar;

printf ("Luas persegi = %f\n", luas );

getch();

}

Page 30: Algoritma dan Struktur Data

Perhitungan luas diletakkan di bagian terpisah

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <stdio.h>

#include <conio.h>

void main(){

float panjang, lebar, luas;

panjang = 10;

lebar = 20

luas = hitungluas(panjang, lebar);

printf ("Luas persegi Anda = %f\n", luas );

getch();

}

Page 31: Algoritma dan Struktur Data

Fungsi untuk menghitung luas

1

2

3

4

5

6

float hitungluas(float p, l){

float l;

l = p * l;

return(l);

}

Page 32: Algoritma dan Struktur Data

Program menggunakan fungsi

1

2

3

4

5

6

7

8

9

10

11

12

13

void main(){

float panjang, lebar, luas;

…..

luas = hitungluas(panjang, lebar);

….

}

float hitungluas(float p, float l){

float lu;

lu = p * l;

return(l);

}

Page 33: Algoritma dan Struktur Data

Latihan

• Variabel atau data untuk main dan hitungluas terletak di bagian memori berbeda

• Keduanya tidak berhubungan

• Gambarkan keadaan memori untuk main dan hitungluas!

Page 34: Algoritma dan Struktur Data

Pass by Value

• Jika kita mengubah nilai variabel p di hitungluas, apakah variabel panjang di main nilainya berubah?

Page 35: Algoritma dan Struktur Data

Pass by Value

1

2

3

4

5

6

7

float hitungluas(float p, l){

float lu;

lu = p * l;

p = p * 2;

return(lu);

}

Page 36: Algoritma dan Struktur Data

Pass by Value• Pada saat main memanggil fungsi hitungluas, isi variabel panjang dan lebar dicopy kemudian

dikirim ke hitungluas• Di fungsi hitungluas, nilai tersebut dimasukkan ke variabel p dan l• Merubah nilai p dan l tidak berakibat apa-apa pada variabel panjang dan luas• Ingat, variabel main dan hitungluas terletak di bagian memori yang berbeda!

Page 37: Algoritma dan Struktur Data

Pass by Reference

• Bagaimana cara mengubah nilai variabel panjang pada main dari fungsi hitungluas?

• Pada saat memanggil hitungluas, jangan mengirim nilai panjang• Kirim alamat variabel panjang ke hitung luas• Hitungluas dapat mengakses & mengubah isi variabel panjang

milik main secara indirect

Page 38: Algoritma dan Struktur Data

Program menggunakan fungsi1

2

3

4

5

6

7

8

9

10

11

12

13

void main(){

float panjang, lebar, luas;

…..

luas = hitungluas(&panjang, lebar);

….

}

float hitungluas(float *p, float l){

float lu;

lu = (*p) * l;

*p = (*p) * 2;

return(l);

}

Page 39: Algoritma dan Struktur Data

Pass by Reference• Variabel v ada di fungsi F• F memanggil fungsi G• G perlu mengubah nilai v di F

• Jangan mengirim nilai v ke G• Kirim alamat v• G dapat mengakses v di F secara indirect• G dapat mengubah nilai v di F

Page 40: Algoritma dan Struktur Data

Latihan

• Buatlah fungsi untuk menukar isi dua variabel bertipe float!

Page 41: Algoritma dan Struktur Data

Solusi1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include <stdio.h>

#include <conio.h>

void tukar(float *x, float *y);

void main(){

float bil1, bil2;

bil1 = 10;

bil2 = 15;

printf ("Bilangan 1 = %f , bilangan 2 = %f\n", bil1, bil2 );

tukar(&bil1, &bil2);

printf ("Bilangan 1 = %f , bilangan 2 = %f\n", bil1, bil2 );

getch();

}

void tukar(float *x, float *y){

float temp;

temp = *x;

*x = *y;

*y = temp;

}

Page 42: Algoritma dan Struktur Data

Using a Pass by Value • Is like giving someone the

key to your home

• The key can be used by the other person to change the contents of your home!

Page 43: Algoritma dan Struktur Data

Additional Terms

• Pass-by-reference is also called . . . – pass-by-address, or– pass-by-location

Can you explain why?

Page 44: Algoritma dan Struktur Data

• Contoh : Pengiriman parameter by location

44

#include <stdio.h>void Hitung (int X, int Y, int *P, int *Q) { *P = X + Y; *Q = X * Y; x=0; y=1; printf(“Dalam Fungsi Hitung nilai X: %d ,\n Nilai Y: %d”, X,Y);}

void main() { int X, Y, PA, QA; /*local variabel*/ printf(“ X=”); scanf(“%d”,&X); printf(“ Y=”); scanf(“%d”,&Y); Hitung(X,Y,&PA,&QA); printf(“Dalam Fungsi Main nilai X: %d ,\n Nilai Y: %d”, X,Y); printf(”Nilai PA= %d\n”, PA); printf(”Nilai QA= %d\n”, QA);}

Page 45: Algoritma dan Struktur Data
Page 46: Algoritma dan Struktur Data

User defined data type Berisi beberapa variabel yang bisa berbeda

tipenya masing-masing disebut elemen yang dikelompokkan menjadi satu dengan sebuah nama baru

Mirip representasi sebuah object beserta properties-nya.

Contoh: struct MHS setidaknya punya elemen untuk NPM, Nama dan Alamat.

46

Page 47: Algoritma dan Struktur Data

Syntax:

struct nama_struct {

tipe_data_1 nama_var_1;

tipe_data_2 nama_var_2;

tipe_data_3 nama_var_3;

……

};

47

Page 48: Algoritma dan Struktur Data

struct

• Penting untuk implementasi ADT / membuat tipe data baru

• E.g., struct motor {float volts; //voltage of the motor

float amps; //amperage of the motor

int phases; //# of phases of the motor

float rpm; //rotational speed of motor

};

typedef struct motor motor;

Page 49: Algoritma dan Struktur Data

struct

• E.g., struct motor {float volts;float amps;int phases;float rpm;

};

typedef struct motor motor;

Name of the type

Page 50: Algoritma dan Struktur Data

struct

• E.g., struct motor {float volts;float amps;int phases;float rpm;

};

typedef struct motor motor;

Members of the struct

Page 51: Algoritma dan Struktur Data

struct

• Mendefinisikan tipe data baru• E.g.,

struct motor {float volts;float amps;int phases;float rpm;

};typedef struct motor motor;

Agar pada saat deklarasi

variabel cukup dengan

memanggil motor saja

Page 52: Algoritma dan Struktur Data

Menggunakan tipe data baru

motor p, q, r;• Mendefinisikan tiga variable – p, q, dan r – masing

masing bertipe data motor

motor M[25];• Mendeklarasikan array M berisi 25 data bertipe

motor

motor *m;• Mendeklarasikan variabel pointer yang menyimpan

alamat slot memori yang berisi data bertipe motor

Page 53: Algoritma dan Struktur Data

Mengakses anggota struct

• Deklarasi motor p;motor q[10];

• Makap.volts — is the voltagep.amps — is the amperagep.phases — is the number of phasesp.rpm — is the rotational speed

q[i].volts — is the voltage of the ith motorq[i].rpm — is the speed of the ith motor

Syntax:nama_var_struct . nama_var_elemen;

Page 54: Algoritma dan Struktur Data

• Sebuah kondisi dimana di dalam sebuah struct terdapat tipe data berupa struct lagi.

54

Page 55: Algoritma dan Struktur Data

• Contoh:

55

Page 56: Algoritma dan Struktur Data

• Sebuah struct yang di dalamnya terdapat variable/ elemen yang bertipe array.

56

Contoh:struct data {

char kode [10];char nama [20];char alamat [30];………

}

Page 57: Algoritma dan Struktur Data

• Sebuah array yang setiap data elemennya bertipe struct. Umumnya dipakai untuk menyimpan object data yang terstruktur, misal: data mahasiswa, karyawan, buku, barang, dsb.

57

Page 58: Algoritma dan Struktur Data

58

Page 59: Algoritma dan Struktur Data

Mengakses elemen struct menggunakan pointer

• Deklarasimotor *p;

• Maka(*p).volts — is the voltage of the motor pointed

to by p

(*p).phases — is the number of phases of the

motor pointed to by p

Mengapa memakai () ?

Page 60: Algoritma dan Struktur Data

Mengakses elemen struct menggunakan pointer

• Notasi (*p).member kurang nyaman dipakai

• Cara yang lebih singkat– p->member, di mana p merupakan variabel

pointer

Page 61: Algoritma dan Struktur Data

Contoh sebelumnya menjadi …

• Deklarasimotor *p;

• Makap -> volts — is the voltage of the motor pointed

to by p

p -> phases — is the number of phases of the

motor pointed to by p

Page 62: Algoritma dan Struktur Data

contohstruct motor {

float volts;

float amps;

};

typedef struct motor motor;

void main()

{

motor m1;

motor *pm1;

m1.volts = 100;

m1.amps = 110;

pm1 = &m1;

printf("voltase motor m1 : %f\n", m1.volts);

printf("amps motor m1 : %f\n", m1.amps);

printf("voltase motor m1 : %f\n", pm1->volts);

printf("amps motor m1 : %f", pm1->amps);

getch();

}

Page 63: Algoritma dan Struktur Data

Hasil eksekusi program

Page 64: Algoritma dan Struktur Data

Operasi pada struct

• Copy/assignstruct motor p, q;p = q;

• Get addressstruct motor p;struct motor *ss = &p;

• Access membersp.volts;s -> amps;

Page 65: Algoritma dan Struktur Data

Example

struct item {char *s;struct item *next;

}• Sebuah item dapat berisi alamat item lain…• … yang dapat menunjuk item lain• … yang juga dapat menunjuk item yang lain lagi• … etc.

Dengan demikian membentuk rangkaian item!!!

Yes! This is

legal!