Anda di halaman 1dari 96

Pascal and C++

Muhammad Faishol Amirul Mukminin


(diadaptasi dari slide pemrograman dasar tlx.toki.id)
Outline
1. Overview
2. Variabel dan Tipe Data
3. Ekspresi dan Masukan/Keluaran
4. Percabangan
5. Perulangan
6. Array
7. Subprogram
8. Rekursif
Overview
Pemrograman dan Bahasa Pemrograman
● Pemrograman merupakan cara untuk
membuat program dengan menggunakan
bahasa pemrograman.
● Bahasa pemrograman terbagi atas dua
High Level
level, yakni low dan high level programming Language
language.
● Low level programming language mudah
dipahami mesin, sedangkan high level
mudah dipahami oleh manusia. Low Level
● High level language mudah dipahami Language
manusia karena syntaxnya merupakan
imitasi dari frasa sehari-hari.
Cara Mesin Menjalankan Program
● Mengingat high level language tidak dapat dipahami mesin, maka instruksi
yang ditulis tidak dapat dieksekusi oleh mesin.
● Maka, perlu adanya penerjemah dari high ke low level sehingga instruksi
dapat dipahami oleh mesin.
● Hal tersebut dilakukan oleh kompilator, interpreter, atau keduanya.

Source Kompilator Binary /


code atau executable file
Interpreter
Contoh Source Code
PASCAL C++
program {nama program (opsional)} // Linking Section
uses {nama library yang digunakan (opsional)} #include <iostream>
var {global variable declaration block} using namespace std;

function {function declarations, if any} // Definition Section


{ local variables, if any } #define msg "FACTORIAL\n"
begin typedef int k;
...
end; // Global Declaration Section
k num = 0, fact = 1, storeFactorial = 0;
procedure { procedure declarations, if any}
{ local variables, if any } // Function dan Procedure Section
begin int fungsi() {
... ...
end; }

begin { main program block starts} // main program


... int main() {
end. { the end of main program block } // local variables
...
return 0;
}
Variabel dan Tipe Data
Variabel
● Istilah dari bidang matematika yang mana memetakan sebuah nama ke
sebuah nilai.
● Namun, dalam pemrograman variabel memetakan sebuah nama ke sebuah
alamat di dalam memori yang berisi sebuah nilai.
Aturan Penamaan Variabel
● Hanya boleh terdiri dari huruf, angka, dan underscore(_).
● Tidak boleh dimulai dengan angka
● Tidak boleh merupakan reserved word (kata yang telah digunakan oleh
bahasa pemrograman dan tidak dapat didefinisikan ulang).
○ Contoh pada C++ : switch, if, new, for, while, char.
○ Contoh pada Pascal : begin, end, if, for, downto, var

Pascal : Nama variabel bersifat case insensitive.


C++ : Nama variabel bersifat case sensitive.

Aturan ini berlaku untuk semua identifier baik variabel maupun fungsi.
Tipe Data (Bilangan Bulat)

Pascal C++ Range Ukuran

shortint - -27 … 27 - 1 1 byte

byte - 0 … 28 - 1 1 byte

integer short -215 … 215 - 1 2 bytes

word unsigned short 0 … 216 - 1 2 bytes

longint int -231 … 231 - 1 4 bytes

longword unsigned int 0 … 232 - 1 4 bytes

int64 long long -263 … 263 - 1 8 bytes

qword unsigned long long 0 … 264 - 1 8 bytes


Tipe Data (Bilangan Riil)

Pascal C++ Range TIngkat Akurasi Ukuran

single float 1.5 × 10−45 … 3.4 × 1038 7 - 8 digit 4 bytes

double double 5.0 × 10−324 … 1.7 × 10308 15 - 16 digit 8 bytes

● Biasa disebut dengan floating point.


● Dapat bernilai negatif maupun positif.
● Sangat dihindari karena kurang akurat.
Tipe Data (Karakter)
● Menyimpan sebuah karakter sesuai ASCII (American Standard Code for
Information Interchange).
● Pada ASCII, terdapat 128 karakter berbeda yang direpresentasikan dengan
kode 0 hingga 127.
● Implementasi
○ Pascal : char
○ C++ : char
Tipe Data (String)
● Menyimpan untaian dari karakter.
● String pada pascal mampu menyimpan 0 - 255 karakter. Apabila ingin lebih,
dapat menggunakan ansistring.
● String pada c++ mampu menyimpan sebanyak memori yang dimiliki oleh
mesin.
Tipe Data (Boolean)
● Hanya dapat menyimpan nilai TRUE atau FALSE.
● Manfaat tipe data ini akan lebih terasa apabila sudah mempelajari
percabangan dan array.
● Memiliki ukuran 1 byte.
● Implementasi
○ C++ : bool
○ Pascal : boolean
Mendeklarasikan Variabel (1/3)
● Sebuah variabel harus dideklarasikan terlebih dahulu untuk dapat digunakan
dalam program.
● Pendeklarasian dimaksudkan untuk menentukan jenis data yang dapat
disimpan dalam variabel tersebut.
● Pascal dan c++ memiliki syntax yang berbeda untuk mendeklarasikan
variabel.
Mendeklarasikan Variabel (2/3)
Pascal C++

● Variabel dideklarasikan di antara var ● Terdapat dua tempat untuk


dengan begin. mendeklarasikan variabel, yakni di dalam
● Tipe data dituliskan sesudah tanda titik atau di luar blok.
dua (:), setelah nama variabel dituliskan. ● Variabel yang dideklarasikan di luar blok
● Beberapa variabel juga bisa akan menjadi variabel global.
dideklarasikan secara bersamaan jika ● Variabel yang dideklarasikan di dalam blok
memiliki tipe data yang sama. akan menjadi variabel local.
● Tipe data dituliskan sebelum nama dan
dipisahkan spasi.
● Beberapa variabel dapat dideklarasikan
secara bersamaan apabila tipenya sama.
Mendeklarasikan Variabel (3/3)
PASCAL C++

var #include <iostream>


a, b: longint; using namespace std;
p1: double;
p2: double; int a, b;
huruf: char; double p1;
kalimat: string; double p2;
begin
// Do something here int main(){
end. char huruf;
string kalimat;

// Do something here
}
Ekspresi dan Masukan/Keluaran
Assignment
● Bertujuan untuk memberikan nilai ke sebuah variabel.
● Nilai yang dimaksud tidak harus sebuah nilai konstan, namun dapat berasal
dari hasil operasi beberapa variabel (disebut ekspresi).
● Implementasi
○ Pascal : <variabel penyimpan> := <nilai>
○ C++ : <variabel penyimpan> = <nilai>
Ekspresi
1+2
c/d*b
(a - (5 + e))

● Ekspresi melibatkan antara dua hal, yakni operator dan operand.


● Operator menyatakan bagaimana operand dieksekusi.
● Operand adalah nilai yang akan dioperasikan dapat berupa variabel, nilai
konstan, atau ekspresi.
Operasi Numerik (1/3)

Pascal C++

a + b Penjumlahan

a - b Pengurangan

a * b Perkalian

a / b Pembagian (apabila salah satu operand float, maka hasilnya float)

a div b - Pembagian integer (kedua operand harus integer, pembulatan ke bawah)

a mod b a % b Modulo (kedua operand harus integer)


Operasi Numerik (2/3)

Prioritas Operasi

1 Di dalam kurung

2 Perkalian, Pembagian, Modulo

3 Penjumlahan, Pengurangan

Apabila terdapat lebih dari satu operasi dengan tingkat prioritas yang sama, maka
pengoperasian diprioritaskan dari kiri.
Operasi Numerik (3/3)
PASCAL C++

var #include <iostream>


a, b: longint; using namespace std;
c: double;
begin int a, b;
double c;
a := 10;
b := 3; int main(){
c := a - b; a = 10;
writeln(c); b = 3;
writeln(a / b); c = a - b;
writeln(a / c); cout << c << endl;
end. cout << a / b << endl;
cout << a / c << endl;
}
Operasi Relasional (1/3)

● Melibatkan dua operands. Pascal C++


● Menghasilkan nilai TRUE atau
< Kurang dari
FALSE (boolean).
> Lebih dari

= == Sama dengan

<= Kurang dari sama dengan

>= Lebih dari sama dengan

<> != Tidak sama


Operasi Relasional (2/3)

PASCAL C++

begin #include <iostream>


writeln(2 > 1); using namespace std;
writeln(2 < 1);
writeln(2 = 1); int main(){
writeln(2 >= 1); cout << (2 > 1) << endl;
writeln(2 <= 1); cout << (2 < 1) << endl;
writeln(1 = 1); cout << (2 == 1) << endl;
writeln(1 <> 1); cout << (2 >= 1) << endl;
writeln(1 <> 2); cout << (2 <= 1) << endl;
end. cout << (1 == 1) << endl;
cout << (1 != 1) << endl;
cout << (1 != 2) << endl;
}
Operasi Relasional (3/3)

PASCAL C++

begin #include <iostream>


writeln(’a’ > ’A’); using namespace std;
writeln(’a’ < ’A’);
writeln(’a’ >= ’A’); int main(){
cout << (‘a’ > ’A’) << endl;
writeln(’a’ = ’A’);
cout << (‘a’ < ‘A’) << endl;
cout << (‘a’ >= ‘A’) << endl;
writeln(’a’ < ’aa’); cout << (‘a’ == ‘A’) << endl;
writeln(’abcb’ > ’abca’);
writeln(’abc’ = ’abc’); cout << (“a” < “aa”) << endl;
writeln(’abc’ <= ’abc’); cout << (“abcb” > “abca”) << endl;
end. cout << (“abc” == “abc”) << endl;
cout << (“abc” <= “abc”) << endl;
}
Operasi Boolean (1/2)
● Prioritas pengerjaan adalah not, and, or, lalu xor.
● Disarankan menggunakan kurung untuk kejelasan operasi.

Pascal C++

not A !A Negasi (NOT)

A and B A && B Konjungsi (AND)

A or B A || B Disjungsi Inklusif (OR)

A xor B A ^ B Disjungsi Eksklusif (XOR)


Operasi Boolean (2/2)
PASCAL C++
begin #include <iostream>
writeln(2 > 1); using namespace std;
writeln(not (2 > 1));
writeln((2 > 1) and (3 > 1)); int main(){
writeln(((2 > 1) or (3 < 1)) and (1 = 1)); cout << (2 > 1) << endl;
writeln((1 <> 1) xor not (1 <> 1)); cout << !(2 > 1) << endl;
end. cout << ((2 > 1) && (3 > 1)) << endl;
cout << (((2 > 1) || (3 < 1)) && (1 == 1))
<< endl;
cout << ((1 != 1) ^ !(1 != 1)) << endl;
}
Masukan (1/2)
● Masukan sebuah program bisa berasal dari berbagai sumber, misalnya
standard input (e.g. keyboard) dan file.
● Bertujuan agar variabel memiliki nilai yang lebih variatif bergantung keinginan
user.

Pascal C++

read() cin

readln() getline()
Masukan (2/2)
PASCAL C++

begin int main(){


read(a, b, c); cin >> a >> b >> c;
readln(d); getline(cin, d);
read(e); cin >> e;
end. }

MASUKAN
iniA iniB
iniC
satu baris ini masuk D
iniE
Keluaran (1/2)
● Keluaran dapat disajikan dalam berbagai bentuk, seperti standard output (e.g.
layar) atau file.

Pascal C++

write() cout Keluaran tanpa diakhiri baris


baru

writeln() cout << endl Keluaran diakhiri baris baru


Keluaran (2/2)
PASCAL C++

begin #include <iostream>


write(‘baris1 ‘); using namespace std;
writeln(‘baris1_juga’);
writeln(‘baris2’); int main(){
write(‘baris3’, ‘lala’); cout << “baris1 “;
end. cout << “baris1_juga” << endl;
cout << “baris2” << endl;
cout << “baris3” << “ “ << “lala”;
}
cout << "a" << endl << "b";
Percabangan
Overview
● Kita ingin agar beberapa instruksi hanya dapat dikerjakan apabila telah
memenuhi suatu kondisi.
● Kita ingin agar instruksi yang dilakukan selanjutnya berdasarkan kondisi
tertentu.
● Maka, kita memerlukan percabangan atau conditional
● Sebagai contoh, program untuk menentukan input merupakan bilangan positif
atau negatif.
If Syntax
PASCAL C++

if <condition> then if (<condition>) {


begin <perintah 1>;
<perintah 1>; <perintah 2>;
<perintah 2>; ...
... }
end;
Blok Kode
PASCAL C++

if <condition> then if (<condition>)


<perintah 1>; <perintah 1>;
<perintah 2>; <perintah 2>;

Sebetulnya Sebetulnya

if <condition> then if (<condition>) {


begin <perintah 1>;
<perintah 1>; }
end;
<perintah 2>;
<perintah 2>
If-Else Syntax
PASCAL C++

if <condition> then if (<condition>) {


begin <perintah 1>;
<perintah 1>; <perintah 2>;
<perintah 2>; ….
... } else {
end else <perintah a>;
begin <perintah b>;
<perintah a>; ….
<perintah b>; }
...
end;
If-Else if Syntax
PASCAL C++
if <condition 1> then if (<condition 1>) {
begin <perintah 1.1>;
<perintah 1.1>; <perintah 1.2>;
<perintah 1.2>; ...
...
end else if <condition 2> then } else if (<condition 2>) {
begin <perintah 2.1>;
<perintah 2.1>; <perintah 2.2>;
<perintah 2.2>; ...
... } else if (<condition 3>) {
end else if <condition 3> then <perintah 3.1>;
begin <perintah 3.2>;
<perintah 3.1>; ...
<perintah 3.2>;
... }
end;
If-Else if Syntax (Flowchart)
If-Else if-Else Syntax
PASCAL C++
if <condition 1> then if (<condition 1>) {
begin <perintah 1.1>;
<perintah 1.1>; <perintah 1.2>;
<perintah 1.2>; ...
...
end else if <condition 2> then } else if (<condition 2>) {
begin <perintah 2.1>;
<perintah 2.1>; <perintah 2.2>;
<perintah 2.2>; ...
... } else {
end else <perintah a>;
begin <perintah b>;
<perintah a>; ...
<perintah b>;
... }
end;
If-Else if-Else Syntax (Flowchart)
read(x);
if x > 0 then
begin
writeln(x);
end;
writeln("selesai");

read(x);
if x < 0 then
begin
write('negatif')
end else
begin
write('positif')
end;
write('selesai');

bukan negatif, bukan positif -> netral


if x mod 3 = 0 then
begin
write('hahah');
end else if x mod 2 = 0 then
begin
write('hihih');
end else if x mod 5 = 0 then
begin
write('hohoh');
end;
write('selesai');
Percabangan Bersarang
PASCAL C++
if <condition 1> then if (<condition 1>) {
begin if (<condition 2>) {
if <condition 2> then <perintah 1>;
begin } else {
<perintah 1>;
<perintah 2>;
end else
begin }
<perintah 2>; <perintah 3>;
end } else if (<condition 3>) {
<perintah 3>; ...
end else if <condition 3> then
begin
...
Percabangan Bersarang - Flowchart (1/2)
Percabangan Bersarang - Flowchart (2/2)
Case-Of/Switch-Case Syntax
PASCAL C++
case <ekspresi> of switch (<ekspresi) {
<nilai 1>: case <nilai 1>:
begin <perintah 1>;
<perintah 1>; break;
end; case <nilai 2>:
<nilai 2>: <perintah 2>;
begin break;
<perintah 2>; case <nilai 3>:
end; <perintah 3>;
<nilai 3>: break;
begin …
<perintah 3>; default:
end; <perintah n>;
... break;
end; }
Perulangan
Motivasi
● Misalkan kita ingin mengeluarkan tulisan “Hello world” sebanyak N
bergantung input user.
● Solusi ”if (N = 1) , else if (N = 2) , ...” tidak mungkin digunakan, karena N bisa
jadi sangat besar.
● Kita membutuhkan suatu struktur yang memungkinkan untuk mengulangi
serangkaian pekerjaan!
While loop
PASCAL C++

while <condition> do while (<condition>) {


begin <perintah 1>;
<perintah 1>; <perintah 2>;
<perintah 2>; ...
... }
end;
For Loop (1/2)
PASCAL C++ C++
for <pencacah> := <awal> to <akhir> do for (<kondisi awal>; <kondisi ulang>; <perubahan>) {
<perintah 1>;
begin <perintah 2>;
<perintah 1>; ...
<perintah 2>; }
...
end; ● <kondisi awal> dapat diisi dengan
inisialisasi variabel untuk perulangan.
for <pencacah> := <awal> downto <akhir> do
● <kondisi ulang> biasanya berupa
begin
<perintah 1>; ekspresi yang menghasilkan boolean,
<perintah 2>; untuk menandakan apakah perulangan
... sudah patut diberhentikan.
end; ● <perubahan> merupakan bagian yang
dieksekusi pada akhir setiap siklus
perulangan.
For Loop - Flowchart
For Loop (2/2)
PASCAL C++ C++
for <pencacah> := <awal> to <akhir> do for (<pencacah> = <awal>; <pencacah> <=
begin
<perintah 1>;
<akhir>; <pencacah> += 1) {
<perintah 2>; <perintah 1>;
... <perintah 2>;
end; ...
}
for <pencacah> := <awal> downto <akhir> do
begin for (<pencacah> = <awal>; <pencacah> >=
<perintah 1>; <akhir>; <pencacah> -= 1) {
<perintah 2>;
... <perintah 1>;
end; <perintah 2>;
...
}
Repeat-Until/Do-While Loop
PASCAL C++

repeat do {
<perintah 1>; <perintah 1>;
<perintah 2>; <perintah 2>;
... ...
until <kondisi>; } while (<kondisi>);
Array
Pengertian
● Array merupakan sebuah variabel dengan satu nama, namun memiliki
banyak nilai.
● Akses nilai-nilainya dapat dilakukan dengan indeks.
● Array dapat dianalogikan sebagai lemari yang dapat menyimpan satu buah
jenis barang.
Contoh Array
Perhatikan contoh berikut!
indeks 1 2 3 4 5 6 7 8 9 10 11

A 34 10 21 0 7 82 53 70 82 5 1

● Dari contoh di atas, kita dapatkan A[1] = 34, A[3] = 21, A[8] = 70.
● Selain itu, artinya kita juga memiliki variabel dengan nama A yang memiliki 11
nilai.
● Untuk mengakses nilai elemen ke-x dari variabel A dapat digunakan A[x]
● Lebih lanjut lagi, A[x] dapat dianggap sebagai sebuah variabel yang berdiri
sendiri
Deklarasi (Pascal)
● Pada bahasa pemrograman pascal, array dideklarasikan dengan format
sebagai berikut.
<nama>: array[<nilai awal>..<nilai akhir>] of <tipe>;

● Dimana:
○ <nama> merupakan nama dari array (aturan penamaan sama dengan variabel biasanya)
○ <nilai awal> dan <nilai akhir> adalah rentang indeks array yang didefinisikan (boleh negatif).
○ <tipe> adalah tipe data dari array
● Tipe data yang digunakan dapat berupa longint, double, string, boolean, atau
suatu record.
Contoh Deklarasi (Pascal)

var
status: array[0..100] of boolean;
kamus: array[-1000..1000] of string;

● Untuk contoh array status, hanya terdefinisi status[0], status[1], …, dan


status[100].
● Sedangkan untuk contoh array kamus, hanya terdefinisi kamus[-1000],
kamus[-999], …, kamus[999], hingga kamus[1000].
● Mengakses nilai dari status[-1], status[-2], atau status[999] dapat
menyebabkan runtime error. Sementara itu, mengakses nilai kamus[-1000]
atau kamus[-1] tidak akan menyebabkan error.
Deklarasi (C++)
● Pada bahasa pemrograman c++, array dideklarasikan dengan cara yang lebih
simple.
● Format deklarasi array sebagai berikut.
<tipe> <nama>[<ukuran>];

● Dimana:
○ <nama> merupakan nama dari array (aturan penamaan sama dengan variabel biasanya)
○ <ukuran> adalah ukuran dari array. Indeks yang terdefinisi adalah indeks 0 sampai dengan
<ukuran> - 1
○ <tipe> adalah tipe data dari array
Contoh Deklarasi (C++)

bool status[101];
string kamus[1000];

● Untuk contoh array status, hanya terdefinisi status[0], status[1], …, dan


status[100].
● Sedangkan untuk contoh array kamus, hanya terdefinisi kamus[0], kamus[1],
…, hingga kamus[999].
● Mengakses nilai dari status[-1], status[-2], atau status[999] dapat
menyebabkan runtime error.
● Saat deklarasi, rentang indeks perlu ditentukan sesuai kebutuhan karena akan
memengaruhi cara akses serta besar memori yang diperlukan program.
Array dan Variabel
● Perhatikan bahwa, suatu elemen dari array dapat dianggap variabel.
● Maka dari itu, segala macam hal (perintah dan operasi) yang dapat dilakukan
oleh variabel juga dapat dilakukan oleh elemen dari array.
● Sebagai contoh, apabila kita telah mendeklarasikan array angka dengan
indeks yang terdefinisi adalah 0 hingga 99.
● Kita dapat melakukan perintah membaca input sebagai berikut.

readln(angka[5]);

cin >> angka[5];


Catatan
● Pada saat array dideklarasikan, nilai yang terdapat di dalam array tidak pasti
0.
● Maka dari itu, pastikan Anda melakukan inisialisasi elemen array dengan
tepat.
● Namun untuk KSN-K atau KSN-P Anda dapat mengasumsikan bahwa isi
elemen array adalah 0 apabila tidak dilakukan insialisasi elemen.
Array Multidimensi
● Array tidak hanya dapat didefinisikan dalam satu atau dua dimensi saja.
● Namun juga dapat dideklarasikan sebagai tiga dimensi, empat dimensi, atau
bahkan lebih dari itu.
● Sebagai contoh apabila kita ingin mendeklarasikan array dalam tiga dimensi.
data: array[0..2, 0..5, 0..10] of longint;

int data[3][6][11];

● Pada kode di atas, kita memiliki variabel data[i][j][k] untuk 0 ≤ i ≤ 2, 0 ≤ j ≤ 5,


dan 0 ≤ k ≤ 10.
Subprogram
Definisi
● Subprogram adalah bagian dari program
● Subprogram dapat dipanggil di bagian manapun di sebuah program
● Subprogram juga dapat dipanggil berulang kali
● Idealnya, subprogram dibentuk untuk mengurangi instruksi yang dipanggil
berkali-kali
● Sebuah subprogram juga biasanya dibuat untuk sebuah tujuan yang spesifik
Jenis Subprogram
Secara general, ada dua jenis suprogram yakni:

1. Prosedur

Subprogram yang tidak mengembalikan nilai.

2. Fungsi

Subprogram yang mengembalikan nilai ke tempat dimana ia dipanggil.


Implementasi Prosedur
Pascal C++

procedure <nama>(<parameter>); void <nama>(<parameter...>) {


var <instruksi...>
<deklarasi…> }
begin
<instruksi…>
end;
Implementasi Fungsi
Pascal C++

function <nama>(<parameter…>): <tipe>; <tipe> <nama>(<parameter…>) {


var <instruksi…>
<deklarasi…> return <nilai kembalian>
begin }
<instruksi…>
<nama> := <nilai kembalian>
end;

Assignment nilai kembalian tidak harus Instruksi return tidak harus di akhir program,
dilakukan di akhir, bisa dimanapun selama namun apabila dieksekusi, semua instruksi di
masih di antara begin dan end; bawahnya tidak akan dijalankan.
int apa() {
int a = 4;
int b = 3;
return a + b;
a = b + 3;
return a;
}
Parameter
● Parameter adalah tempat untuk memberi masukan bagi subprogram.
● Parameter dituliskan seperti pada deklarasi variabel.

Pascal
procedure nama(<var1>,<var2>:<tipe1>, <var3>:<tipe2>, <var4>:<tipe1>);

C++

void nama(<tipe1> <var1>, <tipe1> <var2>, ...)


Passing Parameter
● Passing parameter merupakan aktivitas menyalurkan nilai pada parameter
saat memanggil subprogram.
● Secara umum, terdapat dua jenis yakni by value dan by reference
● Passing by value akan mengirimkan nilai dari setiap parameter yang
diberikan. Jadi apabila terjadi perubahan nilai, tidak akan berpengaruh ke
variabel asli.
● Passing by reference mengirimkan alamat dari setiap parameter, sehingga
akan terjadi perubahan nilai variabel asli.
Implementasi Passing By Reference
Pascal C++

procedure <nama>(var <var1>:<tipe>); void <nama>(<tipe> &<var1>) {


begin
<instruksi…> <instruksi…>
end;
}
Lingkup Variabel
● Lingkup variabel dapat disebut sebagai “masa hidup” sebuah variabel.
● Dengan mengetahui lingkup sebuah variabel, kita tahu dimana saja variabel
tersebut dapat digunakan.
● Variabel global memiliki lingkup pada seluruh program
● Variabel lokal memiliki lingkup pada suatu scope saja.
○ Pascal: Satu scope adalah satu fungsi
○ C/C++: Satu scope adalah satu pasang kurung kurawal
int kode(){
return 10;
}

void lol(){
cout << kode() << endl;
}

1). Jika dilakukan pemanggilan lol(); outputnya adalah...

int apa(int a, int b){


if (a < 5) return b * b;
else return a * a;
}

2). Jika dilakukan pemanggilan apa(3, 4), maka fungsi akan mengembalikan nilai?

int j;
int apa(int a, int b) {
if (a < 5) return a + b;
else return a - b;
}

int main() {
j = apa(3, 4);
j = apa(j, 3);
j = apa (3, j);
cout << j << endl;
}

3). Apakah output dari program di atas?


void lol(string x){
cout << "Hai " << x << endl;
}
void kok(int y) {
y = y + 10;
cout << y << endl;
}
void mom(string a, int b){
int h;
h = a.length() + b;
if (b < 10) kok(h);
if (a != "lol") lol(a);
}

4). Apabila dilakukan pemanggilan mom("lol", 3), maka keluaran dari program adalah...

5). Pemanggilan prosedur mom yang mengeluarkan:


14
Hai sobat!
adalah...
Recursion
Definisi
● Rekursif adalah proses dimana sebuah fungsi memanggil dirinya sendiri baik
secara langsung maupun tidak.
● Rekursif dan strategi iteratif (misal dengan looping) sama-sama
menggunakan perulangan untuk menyelesaikan masalah.
● Seluruh iteratif dapat dibentuk menjadi rekursif.
● Rekursif dan iteratif memiliki keuntungan masing-masing.
Komponen (1/2)
Beberapa hal yang perlu diperhatikan saat akan membuat rekursif yakni:

1. Base case

Biasanya berupa kasus paling sederhana dari permasalahan. Digunakan


untuk membatasi pemanggilan fungsi rekursif agar tidak menghabiskan
memory komputer.

2. Recursion relation

Keterhubungan antara sebuah persoalan dengan persoalan yang lebih kecil.


Komponen (2/2)
Sebagai contoh, apabila kita ingin membuat sebuah program untuk menghitung
nilai faktorial menggunakan rekursif, didapatkan:

1. Base case

Saat n ≤ 1, maka nilai kembalian fungsi = 1.

2. Recursion relation

Untuk n > 1, kita dapatkan bahwa faktorial(n) = n * faktorial(n-1)


Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl;
else {
cout << n << endl;
rekursif(n-1);
}
cout << -n << endl;
}

● Kemudian di program utama dilakukan rekursif(3)


pemanggilan rekursif(3)
program utama
Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl; 2
else {
cout << n << endl;
rekursif(n-1);
}
cout << -n << endl;
}
rekursif(2)

● Lalu rekursif(3) memanggil rekursif(2) rekursif(3)

program utama
Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl; 2
else { 1
cout << n << endl;
rekursif(n-1); rekursif(1)
}
cout << -n << endl;
}
rekursif(2)

● Kemudian rekursif(1) dipanggil oleh rekursif(3)


rekursif(2)
program utama
Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl; rekursif(0) 2
else { 1
cout << n << endl;
rekursif(n-1); rekursif(1) 0
} 0
cout << -n << endl;
}
rekursif(2)

● Barulah kemudian rekursif(0) dipanggil dan rekursif(3)


tidak ada pemanggilan fungsi rekursif lagi
● Setelah rekursif(0) selesai, program keluar program utama
dari fungsi dan melanjutkan fungsi
sebelumnya
Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl; 2
else { 1
cout << n << endl;
rekursif(n-1); rekursif(1) 0
} 0
cout << -n << endl; -1
}
rekursif(2)

● Melanjutkan fungsi rekursif(1) rekursif(3)

program utama
Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl; 2
else { 1
cout << n << endl;
rekursif(n-1);
0
} 0
cout << -n << endl; -1
rekursif(2)
} -2

● Melanjutkan fungsi rekursif(2) rekursif(3)

program utama
Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl; 2
else { 1
cout << n << endl;
rekursif(n-1);
0
} 0
cout << -n << endl; -1
} -2
-3
● Melanjutkan fungsi rekursif(3) rekursif(3)

program utama
Visualisasi
● Misalkan kita memiliki sebuah fungsi
rekursif sebagai berikut: Keluaran
void rekursif(int n) { 3
if (n == 0) cout << 0 << endl; 2
else { 1
cout << n << endl;
rekursif(n-1);
0
} 0
cout << -n << endl; -1
} -2
-3
● Melanjutkan program utama

program utama
SOALLLL
Soal #1
Perhatikan potongan program berikut:

x := x xor y;

x := y xor x;

x := x xor y;

1. Jika nilai awal x dan y adalah 3 dan 4, maka setelah kode di atas dijalankan
nilainya adalah…
2. Jika nilai awal x dan y adalah 1 dan 0, maka setelah kode di atas dijalankan
nilainya adalah...
Soal #2
Soal #3
Keluaran dari program berikut adalah...
Soal #4
Keluaran dari program berikut adalah...
Soal #5
Assume array a (Pascal: a[0..n-1], C: a[n]) consists of distinct positive integers and
max(i,j) returns the maximum value between a[i] to a[j] inclusive. Complete the
program such that it finds the second maximum value of array a.

Anda mungkin juga menyukai