Algoritma dan Struktur Data
description
Transcript of Algoritma dan Struktur Data
Algoritma dan Struktur Data
Pass by Value & Pass by Reference
Review
• Nilai sebuah variabel bisa diakses melalui dua caraCara 1 : LangsungCara 2 : Menggunakan pointer
Review
1234567891011121314151617181920
using namespace std;#include <iostream>int main(){
// Bagian deklarasi variableint x;int *px;
// Bagian badan programpx=&x;x=10;
cout << "Nilai variable x diakses secara langsung:"<< x;
cout << "\nVariable x berada dialamat:"<< px;cout << "\nNilai variable x diakses melalui pointer:"<< *px;return 0;
}
Program tanpa fungsi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <conio.h>
Int main(){
float panjang, lebar, luas;
panjang = 10;
lebar = 20
luas = panjang * lebar;
cout << "Luas persegi = “ << luas ;
getch();
}
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);
cout << "Luas persegi = “ << luas ;
getch();
}
Fungsi untuk menghitung luas
1
2
3
4
5
6
float hitungluas(float p, l){
float l;
l = p * l;
return(l);
}
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);
}
Latihan
• Variabel atau data untuk main dan hitungluas terletak di bagian memori berbeda
• Keduanya tidak berhubungan• Gambarkan keadaan memori untuk main dan
hitungluas!
Pass by Value
• Jika kita mengubah nilai variabel p di hitungluas, apakah variabel panjang di main nilainya berubah?
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);
}
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!
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
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;
*p = (*p) * 2;
return(l);
}
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
Latihan
• Buatlah fungsi untuk menukar isi dua variabel bertipe float!
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
26
#include <stdio.h>
#include <conio.h>
void tukar(float *x, float *y);
int main(){
float bil1, bil2;
bil1 = 10;
bil2 = 15;
cout << “Bilangan 1 =“ << bil1 << “, bilangan 2 =“ << bil2 ;
tukar(&bil1, &bil2);
cout << “\nBilangan 1 =“ << bil1 << “, bilangan 2 =“ << bil2 ;
getch();
return (0);
}
void tukar(float *x, float *y){
float temp;
temp = *x;
*x = *y;
*y = temp;
}
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!
Additional Terms
• Pass-by-reference is also called . . . – pass-by-address, or– pass-by-location
Can you explain why?