IOT Komputer
IOT Komputer
KOMPUTER – PAKET 1
IOT 2018
KOMPUTER – PAKET 1
ELEMEN PSEUDOPASCAL
Pascal adalah bahasa pemrograman yang dirancang oleh Niklaus Wirth, seorang ilmuwan
komputer asal Swiss. Bahasa ini awalnya digunakan sebagai alat bantu untuk mengajarkan
konsep pemrograman komputer kepada mahasiswanya. Bahasa Pascal merupakan bahasa
yang digunakan dalam IOI dan OSN. Bahasa Pascal direncanakan akan dihapus dari IOI.
Meski begitu, hingga saat ini Pascal masih digunakan di OSK, OSP dan OSN maupun sebagai
bahasa dalam materi pembelajaran pemrograman kompetitif. Bahasa lain yang populer
digunakan adalah bahasa C++.
Pada pelatihan ini, kita akan fokus pada Pseudopascal. Pseudopascal mengadopsi sebagian
notasi bahasa Pascal dengan beberapa 'kelonggaran'. Pseudopascal bertujuan untuk
menyampaikan ide dari algoritma bagi pembaca. Sehingga kode programnya mungkin tidak
selengkap bahasa Pascal, asal intinya tersampaikan. Selain itu dimungkinkan dalam
Pseudocode terdapat bahasa sehari-hari. Hal ini akan dijelaskan di dalam materi.
Contoh Program
Sebuah program terdiri dari beberapa perintah yang dijalankan secara terurut dari atas ke
bawah. Hal ini disebut prosedural.
Berikut adalah contoh perbandingan program Pascal yang lengkap dan Pseudopascal :
Pada kedua program di atas, a nilai 5 dan b bernilai 6. Jika a lebih besar dari b maka yang
akan ditulis adalah a, sebaliknya jika b yang lebih besar (atau sama dengan) a, maka yang
ditulis adalah b. Program diatas akan menuliskan (atau mengoutpukan) nilai terbesar
diantara a dan b. Perhatikan bahwa pada Pseudopascal, di bandingkan program Pascal
lengkap, ada bagian yang dihilangkan.
IOT 2018
KOMPUTER – PAKET 1
Program Utama
Pada program pascal, program utama diapit dengan begin-end.
begin
end.
Pada Pseudocode pascal, terkadang tidak dituliskan.
Program utama berisi perintah-perintah yang akan dijalankan. Setiap perintah pada program
Pascal selalu diakhiri dengan titik koma (;).
Variabel memiliki tipe data. Berikut ini adalah beberapa tipe data standar :
Nama Tipe Data Tipe Data Sejenis Keterangan Contoh
integer byte, longint, int64 Bilangan Bulat 123
real double Bilangan Pecahan 3.14
boolean - Nilai Kebenaran (true/false) True
char - Karakter 's'
string ansistring Barisan karakter / Kalimat 'saya'
Masing-masing tipe data memiliki jangkauan nilai tersendiri. Namun tidak dijelaskan di
materi ini karena pada Pseudopascal hal ini tidak terlalu diperhatikan.
Assignment
Assignment adalah operator khusus untuk perintah mengisi nilai. Notasinya adalah :
variabel := nilai;
Misalnya pada contoh program Pascal di awal, variabel a diisi 5 dan variabel b diisi 6.
Variabel kemudian dapat diacu untuk operasi lain :
c := a + b + 2;
Sehingga nilai c diisi dengan 13.
IOT 2018
KOMPUTER – PAKET 1
Terdapat beberapa perintah khusus untuk menambahakn atau mengurangkan nilai suatu
variabel. Perintah-perintah ini termasuk ke dalam jenis prosedur.
Perintah Setara Dengan Keterangan
inc(a); a := a + 1; Menambahkan (increase) nilai a sebesar 1
inc(a, b); a := a + b; Menambahkan (increase) nilai a sebesar b
dec(a); a := a – 1; Mengurangkan (decrease) nilai a sebesar 1
dec(a, b); a := a – b; Mengurangkan (decrease) nilai a sebesar b
Input
Perintah untuk input adalah read/readln. Notasi input adalah :
readln(variabel);
Perintah tersebut akan membaca masukan (input) dan menyimpannya ke dalam variabel.
Perintah readln juga dapat dilakukan untuk banyak variabel sekaligus.
readln(variabel1, variabel2, variabel3);
Pada read, pembacaan selanjutnya dijalankan di baris yang sama, sedangkan pada readln
pembacaan selanjutnya dijalankan di baris baru.
Output
Perintah untuk output adalah write/writeln. Notasi output adalah :
writeln(variabel);
writeln(nilai);
Perintah tersebut akan menulis keluaran (output) dari variabel/nilai.
Pada write, penulisan selanjutnya dijalankan di baris yang sama, sedangkan pada writeln
penulisan selanjutnya dijalankan di baris baru. Dengan kata lain writeln adalah write diikuti
dengan penulisan enter.
IOT 2018
KOMPUTER – PAKET 1
Operator Bilangan
Digunakan untuk mengoperasikan bilangan untuk menghasilkan bilangan.
Operator Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian pecahan
div Pembagian bulat
mod Sisa bagi
Contoh :
x := 10;
y := 3 Output :
writeln(x+y); 13
writeln(x-y); 7
writeln(x*y); 30
writeln(x/y); 3.33333333
writeln(x div y); 3
writeln(x mod y); 1
Terdapat beberapa perintah khusus untuk bilangan pecahan. Perintah-perintah ini termasuk
ke dalam jenis fungsi.
Perintah Keterangan
sqr(a); Kuadrat (square) dari bilangan
sqrt(a); Akar kuadrat (square root) dari bilangan
round(a); Pembulatan bilangan ke bilangan bulat terdekat
trunc(a); Bagian bulat dari bilangan
frac(a); Bagian pecahan (fraction) dari bilangan
Contoh :
x := 9;
y := 7.81;
z := 3.14; Output :
writeln(sqr(x)); 81
writeln(sqrt(x)); 3
writeln(round(y)); 8
writeln(trunc(z)); 3
writeln(frac(z)); 0.14
IOT 2018
KOMPUTER – PAKET 1
Contoh :
s1 := 'Indonesia';
s2 := 'Pusaka'; Output
writeln(s1 + s2); IndonesiaPusaka
writeln(s1 + ' ' + s2); Indonesia Pusaka
Setiap karakter memiliki kode yang disebut sebagai kode ASCII. Selengkapnya dapat dilihat
di http://wiki.freepascal.org/ASCII . Misalnya : kode dari 'A' (A kapital) adalah 65, kode dari
'B' adalah 66, kode dari '#' adalah 35.
Terdapat beberapa perintah khusus untuk char berkaitan dengan kode ASCII :
Perintah Keterangan
ord(c); Kode ASCII dari karakter c
chr(a); Huruf dari kode ASCII a
Contoh : Output :
writeln(ord('C')); 68
writeln(chr(38)); &
writeln(chr(ord('A') + 1)); B
Contoh :
S1 := 'ONE';
S2 := 'INDONESIA';
x := 2;
y := 3; Output :
writeln(length(S2)); 9
writeln(pos(S1, S2)); 4
writeln(copy(S2, 1, 4)); INDO
Contoh :
S := 'BANDUNG';
W := 'WA'
writeln(S); Output :
delete(S, 3, 3); BANDUNG
writeln(S); BANG
insert(W, S, 3); BAWANG
writeln(S);
Contoh :
A := 123;
S := '45';
Output :
str(A, B); 12345
writeln(B + S); 168
val(S, D, e);
writeln(D + A);
lengh, pos dan copy adalah fungsi sedangkan delete, insert, str dan val adalah prosedur.
IOT 2018
KOMPUTER – PAKET 1
Operator Perbandingan
Operator ini digunakan untuk membandingkan 2 nilai dan menghasilkan nilai kebenaran
(boolean).
Operator Keterangan
A = B Menghasilkan apakah A sama dengan B
A <> B Menghasilkan apakah A tidak sama dengan B
A > B Menghasilkan apakah A lebih besar dari B
A >= B Menghasilkan apakah A lebih besar atau sama dengan B
A < B Menghasilkan apakah A lebih kecil dari B
A <= B Menghasilkan apakah A lebih kecil atau sama dengan B
Operator Boolean
Operator ini digunakan untuk mengoperasikan boolean dan menghasilkan nilai boolean.
Perintah Keterangan
not A Mengubah nilai boolean A. true menjadi false, false menjadi true
A and B Menghasilkan true jika keduanya true. Selain itu false.
A or B Menghasilkan true jika minimal salah satunya ada yang true. Selain itu,
hasilnya false.
A xor B Menghasilkan true jika tepat salah satu diantaranya true dan satu lagi false.
Selain itu, hasilnya false.
Contoh :
a := 2;
b := 3;
writeln( (a>0) and not(b<0) );
writeln( (a mod 3 = 0) or (a mod 5 = 0) );
writeln( (a = 3) xor (b >= 3));
Output :
true
false
true
Pada contoh pertama, menghasilkan apakah a positif dan b tidak negatif.
Pada contoh kedua, menghasilkan apakah a habis dibagi 3 atau habis dibagi 5.
Pada contoh ketiga, a=3 bernilai false, dan b>=3 bernilai true. Hasilnya adalah true.
IOT 2018
KOMPUTER – PAKET 1
Operator Bit
Operator bit adalah operator yang bekerja pada bit-bit suatu bilangan bulat. Sebelum
menjelaskan mengenai operator tersebut, kita perlu mengenal sistem bilangan biner.
Bilangan yang digunakan sehari-hari adalah bilangan desimal (basis 10). Bilangan desimal
terdiri dari digit-digit 0 hingga 9.
Sedangkan sistem biner menggunakan basis 2. Bilangan biner hanya terdiri dari 0 dan 1.
Untuk mengubah dari bilangan biner ke desimal cukup mudah (seperti dijelaskan di atas) :
Kalikan setiap digit dengan dua pangkat urutan digitnya dari belakang.
Contoh :
102 -> 0
51 -> 1
25 -> 1
12 -> 0
6 -> 0
3 -> 1
1 -> 1
Hasil biner = 1100110
IOT 2018
KOMPUTER – PAKET 1
Operator and, or, dan xor jika dioperasikan terhadap bilangan bulat, maka operasi boolean
akan dilakukan pada setiap digit yang bersesuaian. (1=true, 0=false).
Contoh :
5 and 9 = 9 5 or 9 = 13 5 xor 9 = 12
5 = 0101 5 = 0101 5 = 0101
9 = 1001 9 = 1001 9 = 1001
-------- and --------- or -------- xor
0001 = 1 1101 = 13 1100 = 12
Terdapat 2 operator lain yang mengoperasikan bit suatu bilangan, shl dan shr :
Komentar
Komentar adalah bagian di dalam program yang tidak dianggap sebagai perintah. Komentar
digunakan untuk meulis catatan di dalam program.
Komentar dengan banyak baris di dalam pascal diapit dengan kurung kurawal ( {} )
{ a dan b berupa bilangan bulat
Begitu pula dengan c }
a := 5;
b := 7;
IOT 2018
KOMPUTER – PAKET 1
c := a+b;
IOT 2018
KOMPUTER – PAKET 1
Percabangan
Dengan struktur percabangan, kita dapat membuat program mengerjakan perintah
tergantung dari suatu kondisi. Perhatikan contoh berikut :
if n>0 then
writeln('Positif')
else if n<0 then
writeln('Negatif')
else
writeln('Nol');
Perintah yang panjang tersebut merupakan satu kesatuan. Ia akan mengecek nilai n, jika
lebih dari 0 maka akan mencetak 'Positif', jika kurang dari 0 maka akan mencetak 'Negatif',
selain itu akan mencetak 'Nol'.
Single-If
Notasi dari Single-If adalah :
if kondisi then
begin
perintah;
end;
atau jika hanya 1 perintah, begin-end tidak perlu ditulis :
if kondisi then
perintah;
jika kondisi benar (true) maka aksi akan dijalankan. Jika salah, maka aksi tidak dijalankan.
If-Else
Notasi dari If-Else adalah :
if kondisi then
perintah;
else
perintah_lain;
atau jika lebih dari 1 perintah :
if kondisi then
begin
perintah;
end else
begin
perintah_lain;
IOT 2018
KOMPUTER – PAKET 1
end;
If-Else akan mengecek kondisi, jika benar (true) maka blok perintah setelah if akan
dijalankan. Jika salah, maka blok perintah pada setelah else akan dijalankan.
Multi-If
Multi-If dapat memuat banyak kondisi. Misalnya seperti contoh awal di atas.
if kondisi1 then
begin
perintah1;
end else if kondisi2 then
begin
perintah2;
end else if kondisi3 then
begin
perintah2;
end.
. . . dst
Pada Multi-If juga dapat ditambahkan bagian else di akhir yang akan dikerjakan jika tidak
ada satupun kondisi yang benar (true);
Pengecekan kondisi dilakukan mulai dari kondisi paling atas hingga ke bawah. Jika suatu
kondisi di atas sudah benar, tidak akan dilakukan pengecekan untuk kondisi di bawahnya.
Untuk memperjelas, perhatikan contoh berikut ini :
readln(n);
if n mod 2 = 0 then
writeln('habis dibagi 2')
else if n mod 3 = 0 then
writeln('habis dibagi 3')
else if n mod 5 = 0 then
writeln('habis dibagi 5')
else
writeln('tidak habis dibagi 2, 3 maupun 5');
Input 1
60 Input 2
1
Output 1
habis dibagi 2 Output 2
IOT 2018
KOMPUTER – PAKET 1
Program di atas akan menuliskan nilai terbesar di antara a, b, dan c. Mula mula bandingkan
a dengan b. Jika a lebih besar maka terbesar saat ini adalah a, lalu bandingkan dengan c.
Sebaliknya jika b lebih besar maka b dibandingkan dengan c untuk mendapatkan yang
terbesar diantara ketiganya.
Kondisi di dalam if dapat berupa ekspresi apapun yang menghasilkan nilai kebenaran
(boolean)
IOT 2018
KOMPUTER – PAKET 1
Perulangan
Dengan struktur perulangan, kita dapat membuat perintah diulang-ulang sebanyak
beberapa kali atau hingga suatu kondisi tercapai.
For
For digunakan untuk melakukan perulangan sebanyak beberapa kali, dimana banyaknya
perulangan kita tentukan. Notasi dari for adalah
for variabel := nilai_awal to nilai_akhir do
begin
perintah;
end;
Nilai variabel akan naik satu persatu mulai dari nilai_awal hingga nilai_akhir. Perintah dalam
for akan dilakukan untuk setiap nilai variabel. Sama seperti blok perintah dalam if, jika hanya
terdapat 1 perintah dalam for maka begin-end tidak perlu dituliskan.
Contoh 1 : Output 1 :
for i := 1 to 5 do 1 Hello World!
begin 2 Hello World!
writeln(i, ' Hello World!'); 3 Hello World!
end; 4 Hello World!
5 Hello World!
Contoh 2 : Output 2 :
sum := 0; 15
for i := 1 to 5 do
begin
sum := sum + i;
end;
Perhatikan pada contoh 1, nilai i akan berubah setiap perulangan (mulai dari 1 hingga 5)
Pada contoh 2, nilai sum adalah jumlahan dari setiap nilai i dari 1 hingga 5.
Pada for naik, nilai awal harus lebih kecil atau sama dengan dari nilai akhir. Jika tidak maka
for tidak menjalankan perintah.
IOT 2018
KOMPUTER – PAKET 1
For Turun
For turun mirip dengan for naik, tetapi nilai variabelnya turun. Notasi dari for adalah :
for variabel := nilai_awal downto nilai_akhir do
begin
perintah;
end;
Nilai variabel akan turun satu persatu mulai dari nilai_awal hingga nilai_akhir. Perintah
dalam for akan dilakukan untuk setiap nilai variabel.
Pada for turun, nilai awal harus lebih besar atau sama dengan dari nilai akhir. Jika tidak
maka for tidak menjalankan perintah.
While
While digunakan untuk perulangan yang tidak dapat kita tentukan berapa banyaknya. Tetapi
perulangan dijalankan terus menerus selama kondisi benar. Notasi dari while adalah :
while kondisi_jalan do
begin
perintah;
end;
Mula mula dilakukan pengecekan kondisi_jalan, jika benar maka perintah dalam while
dijalankan, jika salah maka perulangan berhenti. Ulangi lagi ke atas untuk
pengecetakan_kondisi jalan, dst.
Contoh : Output :
n := 96; 3
while (n mod 2 = 0) do
n := n div 2;
writeln(n);
Pada contoh di atas, selama n genap, n akan terus menerus dibagi 2. Akhirnya n akan
bernilai 3.
Repeat
Repeat juga digunakan untuk perulangan yang tidak dapat kita tentukan berapa banyaknya.
Tetapi perulangan dijalankan terus menerus sampai kondisi benar. Notasi dari while adalah :
repeat
perintah;
until kondisi_berhenti;
IOT 2018
KOMPUTER – PAKET 1
Contoh : Output :
n := 13; 104
repeat
n := n * 2;
until (n >= 100);
writeln(n);
Pada contoh di atas, selama n kurang dari 100, n akan terus menerus dikali 2.
Contoh :
i := 0;
n := 40;
x := 0;
while i < n do
begin
inc(i);
if i*i > n do
break;
if i mod 3 = 0 then
continue;
inc(x);
end;
Perulangan akan melakukan penambahan i satu per satu. Meski kondisi_jalan adalah i<n
tetapi saai i*i>n alias i>sqrt(n) program akan dihentikan oleh break. Saat i habis dibagi 3,
perulangan akan melewati (skip) perintah inc(x).
Berikut adalah ilustrasinya :
Saat i=0 (masuk while) → i=1 → 1*1>40 (false) → 1 mod 3 = 0 (false) → x=1
Saat i=1 (masuk while) → i=2 → 2*2>40 (false) → 2 mod 3 = 0 (false) → x=2
Saat i=2 (masuk while) → i=3 → 3*3>40 (false) → 3 mod 3 = 0 (true)
Saat i=3 (masuk while) → i=4 → 4*4>40 (false) → 4 mod 3 = 0 (false) → x=3
Saat i=4 (masuk while) → i=5 → 5*5>40 (false) → 5 mod 3 = 0 (false) → x=4
IOT 2018
KOMPUTER – PAKET 1
SOAL
1. Apakah output dari program berikut?
bil1 := 12;
bil2 := 24;
bil3 := 32;
bil1 := bil1 + bil2 - 1;
bil3 := bil1 div bil3;
bil2 := bil1 – bil3 + 3;
bil1 := bil3*bil2;
bil2 := bil1 + bil2 + bil3;
bil3 := bil2 + 7;
writeln(bil3 – bil2);
A. 12
B. 1
C. 7
D. 8
E. 10
4. Jika pada program di bawah diberikan input 12 dan 7, berapakah output dari program?
readln(a, b);
a := a xor b;
b := a xor b;
a := a xor b;
writeln(b, ' ', a);
A. 7 12
B. 12 7
C. 12 12
D. 77
E. 11 11
7. Suatu tahun disebut kabisat jika ia habis dibagi 4 tetapi tidak habis dibagi 100, atau ia
habis dibagi 400. Ekspresi manakah yang tepat untuk mengecek tahun n adalah kabisat?
(2012 → kabisat, 2013 → bukan kabisat, 2100 → bukan kabisat, 2000 → kabisat)
A. if ((n mod 4 = 0) and not(n mod 100 = 0)) and (n mod 400 = 0)
B. if ((n mod 4 = 0) and (n mod 100 > 0)) and (n mod 400 = 0)
C. if (n mod 4 = 0) and (not(n mod 100 = 0) or (n mod 400 = 0))
D. if (n mod 4 = 0) or (not(n mod 100 = 0) and (n mod 400 = 0))
E. if ((n mod 4 = 0) and (n mod 100 > 0)) or (n mod 400 = 0)
D. SatuDuaTiga
E. DuaTiga
11. Jika nilai a, b dan c adalah bilangan bulat positif berbeda kurang dari 15, berapa nilai
terbesar d?
A. 60
B. 59
C. 58
D. 57
E. 56
12. Jika bil1=3, bil2=7, bi3=8, bil4=2, bil5=6, berapakah output program di bawah?
terbesar := bil1;
if (terbesar > bil2) then terbesar := bil2;
if (terbesar > bil3) then terbesar := bil3;
if (terbesar > bil4) then terbesar := bil4;
if (terbesar > bil5) then terbesar := bil5;
writeln(terbesar);
A. 3
B. 7
C. 8
D. 2
E. 6
IOT 2018
KOMPUTER – PAKET 1
14. Jika program tidak mengeluarkan output apa-apa, ada berapa kombinasi (a, b, c,d) yang
dapat menghasilkan output tersebut?
A. 0
B. 1
C. 2
D. 3
E. 4
15. Jika diberikan a, b, c ketiganya adaah 1, maka jika nilai n adalah 20, nilai satuan dari d
pada akhir algoritma adalah
for i := 1 to n do
begin
d := a + b + c;
a := b;
IOT 2018
KOMPUTER – PAKET 1
b := c;
c := d;
end;
A. 9
B. 1
C. 8
D. 2
E. 6
a:=a+10;
until a>aa;
A. 100
B. 90
C. 110
D. 10
E. Tidak dapat ditentukan karena terjadi infinite loop
22. Jika tot di akhir program bernilai > 100, berapakah nilai minimal N yang mungkin?
tot := 0;
for i := 0 to N do
begin
inc(tot, i+1);
end;
A. 12
B. 13
C. 14
D. 15
E. 16
inc(B, 2);
end;
A. 9 ≤ N < 11
B. 9 ≤ N ≤ 11
C. 9 < N < 11
D. 9 < N ≤ 11
E. Tidak ada N yang memenuhi
24. Apakah perintah yang benar pada posisi di bagian komentar agar program
mengeluarkan pola 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, ?
x := 1;
y := 1;
repeat
write(x, ', ');
// perintah
inc(y);
until x > 100;
A. x := x + y;
B. x := x*x;
C. x := 2*x + y + 1;
D. x := 2*(x + y);
E. x := x + 2*y + 1;
25. Apabila diketahui p=3 dan nilai b setelah program dijalankan adalah 350, maka berapa
nilai q pada saat inisialisasi?
a:=2;
b:=3;
for i := p to q do
begin
b := i*(a+b);
end;
A. 3
B. 4
C. 5
D. 6
E. 7
IOT 2018
KOMPUTER – PAKET 1
Pada hari pertama, saya berhasil menyelesaikan semua soal dan masih memiliki 1 jam untuk
mengecek. Mengetahui hasil saya di hari pertama, saya memilih untuk main aman dan men
set target yaitu 3 soal perfect score dibandingkan mencoba keempat soal yang ada pada
hari kedua. Dan memang, pada saat pengumuman, saya sangat senang saat teman teman
saya berkata “Fil, lu absol”. Saya langsung berdiri dari kursi saya dan teriak sangking
bahagia. Pengalaman bahagia ini telah meyakinkan saya bahwa bila kita berpikir kita bisa,
maka hasilnya akan baik.
Pengalaman Moscow
Setelah hasil luar biasa pada OSN, saya dihubungi oleh orang dinas DKI Jakarta
untuk diundang untuk mewakili Jakarta untuk mengikuti perlombaan International
Olympiad of Metropolises di Moscow pada September 2017. Berita bahagia ini tiba tiba
menyadarkan saya akan level materi soal yang jauh diatas OSN. Namun, saya tetaplah yakin
untuk melakukan yang terbaik dan saya beruntung lagi untuk mendapat medali Bronze pada
ajang perlombaan ini. Akan tetapi, bagi saya pengalaman yang didapat di Moscow jauh lebih
berharga dibandingkan medali yang didapat. Disana saya mendapat teman teman baru dari
berbagai negara dan kebudayaan yang berbeda. Saya juga cukup tersanjung saat
mengetahui mereka mengetahui tentang dimana Indonesia berada. Semua pengalaman
mengasikan ini memiliki warna tersendiri dibandingkan kerutinan sehari hari saya di Jakarta.
Sayangnya, sudah saatnya kami untuk pulang dan sesampai Jakarta, saya semakin percaya
bila kita percaya, maka hal tersebut akan terwujud.
IOT 2018
KOMPUTER – PAKET 1
“You must be the person you have never had the courage to be. Gradually, you will discover that you are
that person, but until you can see this clearly, you must pretend and invent.”- M. ullrich