Dokumen tersebut berisi petunjuk pengerjaan soal untuk ujian dasar pemrograman Pascal. Memberikan instruksi umum seperti membaca soal dengan teliti, mengerjakan soal mudah terlebih dahulu, hanya ada satu jawaban benar untuk setiap soal, dan menjelaskan beberapa istilah yang muncul dalam soal seperti runtime error dan ekspresi.
1. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
Petunjuk Pengerjaan Soal
1. Baca dan kerjakan setiap soal dengan hati-hati dan seteliti mungkin.
2. Setiap soal memiliki bobot yang sama—sebab itu jangan terpaku pada satu soal yang Anda rasa sulit. Kerjakan soal yang
Anda rasa paling mudah dahulu.
3. Setiap soal hanya memiliki satu jawab yang paling benar. Pada beberapa soal Anda mungkin menjumpai beberapa pilihan
yang menurut Anda sama-sama benar. Anda harus memikirkan baik-baik, jawaban manakah yang paling tepat.
4. Beberapa soal mengacu pada baris tertentu dalam program. Baris yang dimaksud akan ditunjukkan oleh komentar
program, seperti: {baris-16}. Gunakan pemandu ini untuk mengacu pada baris yang dimaksud dalam soal.
5. Jangan risau dengan soal yang salah—soal yang salah akan dianulir (dihapuskan). Bila Anda menemukan kesalahan,
laporkan hal tersebut pada akhir sesi, bukan pada saat mengerjakan soal. Walaupun demikian, pengetikan soal ini sudah
diusahakan seteliti mungkin, jadi jangan terburu-buru menganggap setiap keanehan sebagai kesalahan soal!!
6. Berikut ini adalah set karakter yang digunakan dalam semua listing program. Gunakan daftar ini untuk menghilangkan
keragu-raguan untuk huruf yang mirip:
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6
7 8 9 : ; < = > ? @ A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d
e f g h i j k l m n o p q r s t u v w x y z {
| } ~
7. Berikut ini adalah beberapa istilah yang akan muncul dalam soal-soal:
• Runtime error: kesalahan (error) yang terjadi pada saat program dijalankan. Bila runtime error terjadi, akan tampil
pesan seperti “Runtime error 100 at 0000:03D5” dan program tersebut segera dihentikan.
• Compile error: kesalahan yang terjadi dalam penerjemahan program Pascal (sebelum program tersebut bisa
dijalankan).
• Ekspresi: bagian dari sebuah perintah Pascal, yang menghasilkan nilai tertentu. Misalnya, di dalam perintah
Writeln(I * 2 + 5), maka I * 2 + 5 adalah ekspresi. Bila Anda tidak pernah mendengar istilah ekspresi
sebelumnya, pandanglah ekspresi sebagai “rumus” yang ditulis dalam bahasa Pascal.
• Parameter (di dalam fungsi/prosedur): ekspresi yang disertakan di dalam tanda kurung di dalam pemanggilan fungsi
atau prosedur tersebut. Misalnya, dalam perintah Writeln('Jumlah = ', J); ekspresi 'Jumlah = ' dan J
adalah parameter dari prosedur Writeln.
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 1/13
2. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
1. Manakah yang boleh digunakan sebagai nama
variabel?
a. Baris_25
b. 25Baris
c. Tgl.Lahir
d. Rata-Rata
e. Tempat&Tanggal
2. Cara yang benar untuk mendeklarasikan string
adalah
a. var a: string of Char;
b. var a: string[1..255];
c. var a: string[0..255];
d. var a: string[255];
e. var a: string[255] of Char;
3. Perintah manakah yang mendeklarasikan sebuah
tipe enumerasi:
a. type a = Integer;
b. type a = 1..540;
c. type a = (Buruk, Sedang, Bagus);
d. type a = set of (Buruk, Sedang, Bagus);
e. type a = [Buruk, Sedang, Bagus];
4. Bagaimana cara mendefinisikan sebuah record?
a. type a = record of
s: String;
d: Integer;
b: Boolean;
end;
b. type a: record
s: String;
d: Integer;
b: Boolean;
end;
c. record a = (s: String; d: Integer;
b: Boolean);
d. type a = record
s: String;
d: Integer;
b: Boolean;
end;
e. type a = record of (s: String; d: Integer;
b: Boolean);
5. Tipe data apa yang tidak boleh menjadi anggota
(field) dari sebuah record?
a. pointer
b. array
c. pointer dari record yang bertipe sama dengan record
tersebut
d. record yang bertipe lain dari record tersebut
e. salah semua
6. Bagaimana cara mendefinisikan pointer yang
menunjuk data bertipe Integer?
a. pointer of Integer
b. @Integer
c. ^Integer
d. Integer^
e. *Integer
7. Deklarasi prosedur manakah yang tidak dibenarkan:
a. procedure Hapus;
b. procedure Hapus(Nama: String);
c. procedure Hapus(var Nama: String);
d. procedure Hapus(Ukuran: Integer; var
Data);
e. procedure Hapus(Ukuran: Integer): Boolean;
8. Deklarasi fungsi manakah yang salah?
a. function Density(X: Real): Real;
b. function Density(X: Real): var;
c. function Density(X: Real): Pointer;
d. function Density(X: Real): Strij ng;
e. function Density(var X): Boolean;
9. Manakah yang mendeklarasikan A sebagai
konstanta bertipe (typed constant) dengan tepat?
a. const A = 350;
b. const B = 35;
A = B * 10;
c. const A: Real = 350;
d. const A = Integer(350);
e. const B: Integer = 35;
A = B * 10;
10. Bagaimana cara mendefinisikan konstanta yang
berupa array berukuran 3×3?
a. const A[3,3] = ((1,2,3), (2,3,4),
(3,4,5));
b. const A: array[3, 3] =
(1,2,3, 2,3,4, 3,4,5);
c. const A: array[1..3, 1..3] of Byte =
((1,2,3), (2,3,4), (3,4,5));
d. const A: array[1..3, 1..3] of Byte =
(1, 2, 3,
2, 3, 4,
3, 4, 5);
e. const array[3,3] A = (1,2,3, 2,3,4,
3,4,5);
11. Dengan bantuan deklarasi berikut:
type P = (Magenta, Kuning, Sian);
R = array[1..3] of Byte;
S = set of Char;
Tentukan manakah yang tidak benar:
a. type A = array[True..False] of String;
b. type B = array[P] of String;
c. type C = array[Magenta..Sian] of
String[7];
d. type D = array[-6..6] of R;
e. type E = array[1..20] of S;
12. Deklarasi manakah yang tidak benar?
a. type T = record A, B, C: Integer end;
var V: T;
b. type T = record A, B, C: Integer end;
P = ^T;
var V: ^P;
c. type T = record A, B, C: Integer end;
P = ^T;
A = array[1..32] of P;
var V: A;
d. type T = record A, B, C: Integer end;
A = array[1..32] of T;
var ^V: ^A;
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 2/13
3. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
e. type T = record A, B, C: ^Integer end;
A = array[1..32] of T;
var V: A;
13. Misalkan Menu adalah sebuah variabel bertipe record
dengan anggota (field) sebagai berikut:
- Nama bertipe string
- Harga bertipe Real
- PPN bertipe Boolean
Perintah manakah yang tidak dibenarkan?
a. with Menu do Nama := 'Opor ayam';
b. Menu.Harga := Menu.Harga * 1.20;
c. Menu.PPN := Menu.Harga > 15000;
d. with Menu do if PPN then
Harga := Harga * 1.15;
e. if Menu.PPN then
Menu.Harga := Harga * 1.15;
14. Daftar kata manakah yang hanya berisi operator
dalam bahasa Pascal?
a. mod, div, or, in
b. not, and, mod, for
c. Read, EOF, Write, Writeln
d. array, record, set, object
e. Char, Integer, Pointer, Real
15. Deklarasi manakah yang tidak benar?
a. var E: set of Char;
b. var E: set of (Sapi, Kelinci, Domba,
Ayam);
c. var E: set of Byte;
d. var E: set of String;
e. var E: set of 1..15;
16. Dengan deklarasi sebagai berikut,
type Warna = (Merah, Kuning, Hijau, Biru);
var W: Warna;
perintah manakah yang tidak benar?
a. if W in [Warna] then Writeln('Ada');
b. W := Merah;
W := W + Kuning;
c. W := [Merah];
d. W := Hijau;
Dec(W);
e. W := "Merah";
17. Program manakah yang ditulis dengan benar?
a. uses Crt;
program Sederhana;
var I, J: Integer;
begin
for I := 1 to 3 do
for J := I+1 to 4 do
Writeln(I, J);
end.
b. program Matematika;
var R: Real;
begin
R := 0;
while (R <= 1) do
begin
Writeln(R, ' ', Sqrt(R));
R := R + 0.1;
end;
end.
c. uses Crt;
var A: String;
program Utama;
begin
Readln(A);
Writeln('Halo, ', A);
end.
d. var B: Byte;
begin
B := 3;
repeat
Writeln(B);
B := B + 10;
while B < 100;
end.
e. var A: Integer;
B, C: Real;
begin
B := 0;
for A := 1 to 15 do
Readln(C);
B := B + C;
end;
Writeln(B / 15);
end.
Gunakan deklarasi variabel berikut untuk menjawab soal-
soal di bawah ini:
type Nilai = 0..10;
var I: Integer;
P: Pointer;
A: ^I;
B: ^Integer;
C: ^Nilai;
D: ^String;
E: ^Pointer;
18. Deklarasi variabel manakah yang salah?
a. A
b. B
c. C
d. D
e. E
19. Perintah manakah yang benar?
a. P := @B;
b. @I := B;
c. E := ^nil;
d. B := ^I;
e. @C := nil;
20. Perintah mana yang menunjukkan cara
mengalokasikan memori dengan tepat?
a. B^ := 100;
b. New(P);
c. New(B);
d. New(B^);
e. GetMem(B);
21. Bagaimana cara mengakhiri penggunaan variabel
dinamis dengan benar (mendealokasikan memori yang
ditempati oleh variabel dinamis)?
a. Dispose(E);
b. E := nil;
c. FreeMem(E);
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 3/13
4. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
d. E^ := nil;
e. @E := nil;
22. Bagaimana cara memberi nilai pada variabel
dinamis?
a. New(B) := 100;
b. ^B := 100;
c. B^ := 100;
d. New(B);
e. GetMem(B);
23. Dengan tetap menggunakan deklarasi variabel di
atas, perhatikan potongan program berikut ini:
I := 31;
B := @I;
B^ := I * 10 + B^;
berapakah nilai akhir I setelah tiga baris program tersebut
dijalankan?
a. 310
b. 341
c. 620
d. 31
e. semua jawaban salah
24. Dengan deklarasi sebagai berikut,
var S: String;
I, J: Integer;
C: Char;
maka penggunaan perintah case yang benar adalah:
a. case Upcase(C) of
'L': S := 'Large'; I := 40;
'M': S := 'Medium'; I := 38;
'S': S := 'Small'; I := 36;
end;
b. case C of
'L', 'l': S := 'Large';
'M', 'm': S := 'Medium';
'S', 's': S := 'Small';
end;
c. case I of
< 100: S := 'Too small';
100..300: S := 'Normal';
> 300: S := 'Too large';
end;
d. case J / I of
2: S := 'Double';
3: S := 'Triple';
4: S := 'Quadruple';
end;
e. case S of
'Open': I := 1;
'Save': I := 2;
'Quit': I := 3;
end;
25. Bagaimana cara menuliskan konstanta bertipe
record?
a. Turbo Pascal tidak mengizinkan konstanta yang bertipe
record.
b. type Rec = record
A: String; B: Integer;
end;
const R: Rec = (A: 'Kata'; B: 135);
c. type Rec = record
A: String; B: Integer;
end;
const R: Rec = (R.A: 'Kata'; R.B: 135);
d. type Rec = record
A: String; B: Integer;
end;
const R: Rec = ('Kata', 135);
e. type Rec = record
A: String; B: Integer;
end;
const Rec R = (.A = 'Kata', .B = 135);
Gunakan deklarasi berikut untuk soal-soal di bawah ini:
var C: Char;
S: String;
I: Integer;
R: Real;
L: LongInt;
W: Word;
begin
C := 'a';
S := 'Kata ';
I := 5;
R := 2.50;
L := 25;
end.
26. Perintah manakah yang diizinkan dalam bahasa
Pascal?
a. S := S + C;
b. S := 'Jumlahnya ' + I + S;
c. S := I;
d. I := I + R;
e. C := C + #1;
27. Perintah mana yang tidak diizinkan dalam bahasa
Pascal?
a. S := C + S;
b. I := Ord(C);
c. Inc(R);
d. I := I * 3 + L * 2;
e. R := I * 3 + 4;
28. Pada bagian awal program di atas, setiap variabel
diberi nilai awal (misalnya, I diisi 5, R diisi 2.50). Dengan
nilai-nilai awal tersebut, berapakah hasil dari ekspresi
I + L / R * I
a. 60
b. 55
c. 75
d. 7
e. 2.4
29. Bila ekspresi pada soal sebelumnya diganti menjadi
I + (L / R) * I
berapakah hasil dari ekspresi ini?
a. 60
b. 55
c. 75
d. 7
e. 2.4
30. Perintah mana yang tidak valid dalam bahasa
Pascal?
a. R := Ord(C);
b. L := Ord(C);
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 4/13
5. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
c. I := Ord(S[1]);
d. I := Ord(S);
e. C := S[1];
31. Perintah mana yang tidak valid dalam bahasa
Pascal?
a. R := 10;
b. I := 42000;
c. S := #130;
d. L := 65536;
e. S := #13; S := S + #10;
32. Ekspresi atau perintah mana yang tidak
diperbolehkan?
a. Dec(L, I);
b. Pred(S[0]);
c. Inc(C);
d. Succ(R);
e. Ord(I);
33. Ekspresi mana yang diperbolehkan dalam bahasa
Pascal, tetapi selalu bernilai False?
a. W > 0
b. C = ''
c. S <> ''
d. S[0] < 0
e. S[0] = #0
34. Ekspresi manakah yang tidak diizinkan dalam
Pascal?
a. if I = R then Writeln(R);
b. if R = I then Writeln(R);
c. if I = Round(R) then Writeln(R);
d. if I = 3 and R = 4.5 then Writeln(R);
e. if R = Round(I / 3) then Writeln(R);
35. Ekspresi manakah yang tidak dapat dipakai sebagai
syarat (kondisi) dalam perintah if?
a. R = I and 5
b. not (I = 5)
c. L or I and 3
d. (R = I) and (L and 5 = 4)
e. semua ekspresi bisa dipakai
Perhatikan program berikut:
var I, J, K: Integer;
L: Byte;
begin
I := 3;
J := 4; {baris-5}
K := 32;
L := 0;
{ if-1: }
if I + J and K = 0 then
Writeln('Betul')
else
Writeln('Salah');
{ if-2: }
if (I = 2) and (J < I) or (K > I) then
Writeln('Betul')
else
Writeln('Salah');
{ if-3: }
if not L in [1..120] then
Writeln('Betul')
else
Writeln('Salah');
end.
Program ini berisi tiga perintah if-then-else yang tidak
saling berkaitan, yang masing-masing kita namai if-1, if-
2, dan if-3. Jawablah tiga pertanyaan berikut
menggunakan program di atas.
36. Perintah if manakah yang penulisannya tidak
benar?
a. if-1
b. if-2
c. if-3
d. if-1 dan if-3
e. tidak ada perintah if yang salah
37. Perintah if mana sajakah yang akan menghasilkan
output berupa tulisan “Betul”?
a. if-1
b. if-2
c. if-3
d. if-1 dan if-2
e. if-2 dan if-3
38. Masih sehubungan dengan tiga “if” di atas,
pernyataan manakah yang benar? Asumsikan bahwa nilai-
nilai variabel I, J, K, dan L masih sama seperti program di
atas.
a. Ekspresi not L in [1..120] ekuivalen dengan
L in [0, 121..255]
b. Ekspresi I + J and K = 0 dalam if-1 ekuivalen
dengan (I + J <> 0) and (K = 0)
c. Tulisan yang dicetak oleh perintah if-1 akan berbeda
dari semula bila kondisi if-1 diubah menjadi
(I + J) and K = 0
d. Tulisan yang dicetak oleh perintah if-2 akan berbeda
dari semula bila kondisi if-2 diubah menjadi
((I = 2) and (J < 1)) or (K > I)
e. Semua pernyataan salah
39. Dengan deklarasi sebagai berikut, maka pernyataan
manakah yang benar?
type Drink = (Coke, Tea, Coffee, Juice);
var D1, D2: set of Drink;
begin
D1 := [Coke, Tea];
D2 := [Tea, Coffee];
end.
a. Ekspresi D1 * D2 menghasilkan set yang berisi
[Coke, Tea, Coffee]
b. Ekspresi D1 + D2 menghasilkan set yang berisi
[Coke, Tea, Tea, Coffee], dengan dua elemen
bernilai Tea.
c. Ekspresi D1 - D2 menghasilkan set yang berisi
[Coke, Coffee]
d. Ekspresi D1 - D2 + [Coke..Juice] menghasilkan
[] (set kosong)
e. Ekspresi (D1 - D2) + (D2 - D1) menghasilkan set
yang berisi [Coke, Coffee]
40. Bila fungsi ABC didefinisikan sebagai:
function ABC(I: Integer): Integer;
var J: Integer;
begin
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 5/13
6. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
J := 0;
while I > 0 do
begin
Dec(I);
J := J + I mod 5; {baris-8}
I := I shr 1;
end;
ABC := J;
end;
berapakah hasil dari ABC(25)?
a. 10
b. 0
c. 7
d. 40
e. Salah semua
41. Berapa nilai ABC(25) pada soal di atas, bila baris 8
pada fungsi ABC diubah menjadi:
J := J + I mod 5 shl 1;
a. 10
b. 5
c. 20
d. 14
e. 0
42. Apakah tampilan program berikut:
var A, B: Integer;
begin
A := 100;
B := 3;
Dec(A, Pred(B)); {baris-5}
Writeln(A, ' ', B);
end.
a. 96 3
b. 98 2
c. 98 3
d. 102 3
e. 14 3
43. Lihat kembali soal sebelumnya. Bagaimana output
program bila baris 5 dan 6 diubah menjadi:
Dec(A, Pred(A));
Writeln(A);
a. 0
b. -1
c. 1
d. 99
e. 101
44. Apakah output dari program berikut?
var S: string[12];
begin
S := 'setia';
Writeln('#', S, '#');
S := S + ' sampai akhir';
Writeln('#', S, '#');
end.
a. #setia#
(Kemudian terjadi runtime error)
b. #setia #
#setia sampai#
c. #setia#
#setia sampai akhir#
d. #setia#
#setia sampai#
e. #setia#
#sampai akhir#
45. Fungsi manakah yang bisa menghasilkan nilai
bertipe Integer ataupun Real?
a. Sqrt
b. Int
c. Frac
d. Sqr
e. Salah semua
46. Pernyataan manakah yang salah?
a. Ord(True) bernilai –1.
b. Ord(False) bernilai 0.
c. Bila C bertipe Char, maka Ord(C) bisa bernilai dari 0
sampai dengan 255.
d. Ord(Succ(False)) adalah 1.
e. Tidak ada pernyataan yang salah.
47. Pernyataan manakah yang benar?
a. Bila W adalah variabel bertipe Word, maka Abs(W) selalu
bernilai sama dengan W.
b. Bila I adalah variabel bertipe Integer, maka Abs(I)
selalu bernilai sama dengan I.
c. Bila R adalah variabel bertipe Real, maka Abs(R) selalu
bernilai sama dengan R.
d. Bila R adalah variabel bertipe Real, maka Round(R)
selalu bernilai sama dengan Int(R).
e. Pernyataan di atas benar semua.
48. Bila R adalah variabel bertipe Real, maka nilai yang
mungkin untuk Round(Frac(R) * 10) adalah:
a. bilangan bulat dari 1 sampai dengan 10
b. bilangan bulat dari 0 sampai dengan 10
c. bilangan bulat dari 0 sampai dengan 9
d. sembarang bilangan real dari 0 sampai dengan 9
e. sembarang bilangan real dari 0 sampai dengan 10
49. Dengan bantuandeklarasi berikut,
var S: String;
K, L: String;
begin
S := 'Go TOKI 99 for Gold!';
K := 'Go';
L := 'go';
end.
tentukan pernyataan manakah yang benar.
a. ekspresi Pos(K, S) bernilai 1
b. ekspresi Pos(L, S) bernilai 1
c. ekspresi
Copy(S, 3, Length(S)-3) + Copy(S, 1, 2)
menghasilkan string
'TOKI 99 for Gold! Go'
d. perintah Insert('toki', S, 4) menyebabkan S
bernilai 'Go toki 99 for Gold!'
e. perintah Insert(' Medal', S, Pos('Gold', S))
menyebabkan S bernilai
'Go TOKI 99 for Gold Medal!'
50. Ekspresi manakah yang bernilai False dalam
Turbo Pascal? Gunakan deklarasi berikut ini bila diperlukan:
type PInteger = ^Integer;
var P: PInteger;
a. SizeOf(String) = 255
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 6/13
7. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
b. SizeOf(PInteger) = 4
c. SizeOf(P^) = 2
d. SizeOf(Char) = SizeOf(Byte)
e. SizeOf(Integer) > SizeOf(Byte)
51. Apakah output program di bawah ini?
uses Crt;
var I, J: Integer;
begin
I := 0;
while I < 5 do
for J := 1 to 8 do
I := I + J;
Writeln(I, '-', J);
end.
a. 5-3
b. 5-8
c. 6-3
d. 3-3
e. 36-8
52. Bagaimana keluaran program berikut ini?
var I: Integer;
begin
I := 2;
case I of
1, 3, 5, 7, 9: Writeln('Ganjil');
2: Writeln('Prima genap');
0..10: Writeln('Normal');
else Writeln('Tidak normal');
end;
end;
a. Prima genap
b. Normal
c. Prima genap
Normal
d. Normal
Prima genap
e. Prima genap
Tidak normal
Gunakan program berikut untuk menjawab dua soal di
bawah ini:
uses Crt;
var I, J: Integer;
A: array[1..3, 1..3] of Integer;
begin
for I := 1 to 3 do for J := 1 to 3 do
A[I, J] := 0;
for I := 1 to 3 do
begin
for J := 1 to 3 do A[J, I] := I * J;
if I > 1 then
for J := 1 to 3 do
Inc(A[J, I - 1], A[J, I]); {baris-
12}
end;
for I := 1 to 3 do
begin
for J := 1 to 3 do
Write(A[I, J], ' ');
Writeln;
end;
end.
53. Bagaimana keluaran dari program tersebut?
a. 1 2 3
2 4 6
3 6 9
b. 3 5 3
6 10 6
9 15 9
c. 3 6 9
5 10 15
3 6 9
d. 1 3 6
2 6 12
3 9 18
e. 1 2 3
3 6 9
6 12 18
54. Bagaimana keluaran program di atas bila perintah
pada baris 12 diubah menjadi:
Inc(A[I - 1, J], A[J, I]);
a. 3 6 3
5 10 15
3 6 9
b. 3 6 9
5 10 15
3 6 9
c. 3 5 3
6 10 6
9 15 9
d. 3 5 3
6 10 6
3 15 9
e. Salah semua
Perhatikan contoh program berikut:
var I, J, K: Integer;
begin
I := 0;
J := I - 1;
K := 3;
repeat {baris-6}
I := J - 1;
repeat
Dec(K);
Write('*');
until K = I;
J := J + 1;
K := J;
Write('#');
until I = 0; {baris-15}
end.
55. Apakah keluaran program di atas?
a. ******#*#*#
b. *****#*#*#
c. ###
d. *****#****#***#
e. Tidak ada output sama sekali
56. Bila “repeat…until I = 0;” pada baris 6 dan
15 pada program di atas diganti menjadi “while I <> 0
do begin…end;”, bagaimana keluaran program sekarang?
a. ******#*#*#
b. *****#*#*#
c. ###
d. *****#****#***#
e. Tidak ada output sama sekali
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 7/13
8. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
Gunakan program berikut ini untuk menjawab beberapa
pertanyaan selanjutnya:
uses Crt;
const Z1: set of Char =
['A','E','I','O','U'];
const Z2: set of Char =
['a','e','i','o','u'];
var UV, LV, UC, LC, OC: Integer;
S: String;
i: Integer;
begin
UV := 0; LV := 0;
UC := 0; LC := 0;
OC := 0;
S := 'Tim Olimpiade Komputer
Indonesia.';
for i := 1 to Length(S) do
begin
if S[i] in ['A'..'Z', 'a'..'z'] then
if Upcase(S[i]) = S[i] then
if S[i] in Z1 then
Inc(UV) {baris-19}
else
Inc(UC) {baris-21}
else
if S[i] in Z2 then
Inc(LV) {baris-24}
else
Inc(LC) {baris-26}
else
Inc(OC); {baris-28}
end;
Writeln(UV, ' ', UC, ' ',
LV, ' ', LC, ' ', OC);
end.
57. Apakah output dari program di atas?
a. 12 13 2 2 4
b. 2 2 12 13 4
c. 2 2 13 12 4
d. 13 12 2 2 4
e. Salah semua
58. Pernyataan mana yang salah sehubungan dengan
program di atas?
a. Perintah pada baris 19 dikerjakan ketika S[i] bernilai
'I'
b. Perintah pada baris 28 tidak dikerjakan ketika S[i]
bernilai 'u'
c. Perintah pada baris 21 dikerjakan ketika S[i] bernilai
'r'
d. Perintah pada baris 24 tidak dikerjakan ketika S[i]
bernilai 'T'
e. Perintah pada baris 28 dikerjakan ketika S[i] bernilai
'.'
59. Apakah output dari program berikut ini:
var I, J, K: Integer;
begin
J := 3;
K := 1;
repeat
Dec(J);
for I := 1 to J do K := I + 5 * K;
Dec(J);
until J < 0;
Writeln(K);
end.
a. 32
b. 42
c. 161
d. 1
e. Salah semua
60. Berapakah output dari program berikut ini:
var I, J, K: Integer;
begin
K := 0;
for I := 3 downto 1 do
begin
for J := 0 to I-1 do K := K + I;
K := K - J;
end;
Writeln(K);
end.
a. 1
b. 11
c. 8
d. 10
e. Salah semua
Perhatikan program berikut ini:
var Z: array[0..19] of Char;
C: Integer;
I: Integer;
S1, S2: String;
procedure ZP(E: Char);
begin
if C < 20 then
begin
Z[C] := E;
Inc(C);
end;
end;
function ZG: Char;
begin
if C > 0 then
begin
Dec(C);
ZG := Z[C];
end;
end;
begin
C := 0;
S1 := 'PERGI';
S2 := 'LIBUR';
for I := 1 to Length(S1) do
begin
ZP(S1[I]);
ZP(S2[I]);
end;
S1 := '';
S2 := '';
while C > 0 do S1 := S1 + ZG; {baris-
32}
Writeln(S1+S2);
end.
61. Bagaimanakah output dari program di atas?
a. PERGILIBUR
b. LIBURPERGI
c. RIUGBRIELP
d. RUBILIGREP
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 8/13
9. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
e. PLEIRBGUIR
62. Tetap menggunakan program di atas,
bagaimanakah outputnya bila perintah pada baris 32 di atas
diganti dengan baris-baris sebagai berikut:
while C > 0 do
begin
S1 := S1 + ZG;
S2 := ZG + S2;
end;
a. LIBURPERGI
b. RUBILIGREP
c. IGREPRUBIL
d. PERGILIBUR
e. RUBILPERGI
Gunakan program di bawah ini untuk menjawab dua soal
berikutnya:
type DatRec = record
Nama: String[15];
Lanjut: Integer;
end;
var Data: array[1..4] of DatRec;
procedure Tukar(P1, P2: Integer);
var T: DatRec;
begin
T := Data[P1];
Data[P1] := Data[P2];
Data[P2] := T;
end;
procedure Tampil;
var I: Integer;
begin
I := 1;
repeat
Write(Data[I].Nama, ' ');
I := Data[I].Lanjut;
until I = 0;
Writeln;
end;
begin
Data[1].Nama := 'Andi';
Data[1].Lanjut := 3;
Data[2].Nama := 'Budi';
Data[2].Lanjut := 0;
Data[3].Nama := 'Rahmat';
Data[3].Lanjut := 4;
Data[4].Nama := 'Gunadi';
Data[4].Lanjut := 2;
Tampil; {baris-32}
end.
63. Bagaimana keluaran program di atas?
a. Andi Budi Rahmat Gunadi
b. Gunadi Rahmat Budi Andi
c. Andi Rahmat Gunadi Budi
d. Andi Budi
e. Gunadi Andi Rahmat Budi
64. Kita selipkan perintah
Tukar(2, 3)
sebelum baris 32 pada program di atas. Bagaimana keluaran
program sekarang?
a. Andi Rahmat Gunadi Budi
b. Andi Budi
c. Andi Gunadi Rahmat Budi
d. Andi Budi Gunadi Rahmat
e. Andi Rahmat
Program berikut digunakan untuk beberapa soal di bawah
ini:
program Testing;
uses Crt; {baris-2}
var Kata: String;
Bil: Integer;
procedure Cek(var S: String;
var I: Integer);
var J: Integer;
begin
J := I;
while (J < Length(S)) and
(S[J] = ' ') do Inc(J);
Delete(S, I, J - I);
I := J - I;
end;
begin
Kata := 'saya terpisah'; {baris-16}
Bil := 5;
Cek(Kata, Bil);
Writeln('#', Kata, '#');
end.
65. Apa keluaran program di atas?
a. #saya terpisah#
b. #saya terpisah#
c. #sayaterpisah#
d. #saya#
e. #terpisah#
66. Berapakah nilai Bil pada akhir eksekusi program?
a. 5
b. 1
c. 2
d. 0
e. 12
67. Bila baris 16 dan 17 (lihat program di atas) diubah
menjadi
Kata := ' TOKI 1999 ';
Bil := 12;
maka keluaran program menjadi:
a. #TOKI 1999#
b. # TOKI 1999#
c. # TOKI 1999 #
d. # TOKI 1999 #
e. #TOKI1999#
68. Apa keluaran program tersebut bila deklarasi
prosedur di atas diubah menjadi
procedure Cek(S: String; I: Integer);
a. #saya terpisah#
b. #saya terpisah#
c. #sayaterpisah#
d. #saya#
e. #terpisah#
69. Apa yang terjadi bila klausa “uses Crt;” pada
baris kedua di atas dihilangkan, kemudian program
dijalankan?
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 9/13
10. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
a. tidak ada keluaran apa pun yang dihasilkan
b. program tetap berjalan seperti biasanya, dan tidak ada
perubahan apa-apa
c. semua output program tidak keluar di layar, tetapi di
printer
d. terjadi compile error
e. terjadi runtime error
Gunakan program berikut untuk menjawab pertanyaan-
pertanyaan di bawah ini:
uses Crt;
var I, J: Integer;
function Jumlah(N: Integer): Integer;
var J, K: Integer; {baris-4}
begin
J := 0;
for K := 1 to N do J := J + K;
Jumlah := K;
end;
begin
J := 12;
for I := 1 to 3 do J := J + Jumlah(I);
Writeln(J);
end.
70. Apakah keluaran dari program tersebut?
a. 9
b. 18
c. 12
d. 6
e. 3
71. Bila baris keempat program tersebut diganti menjadi
var K: Integer;
bagaimanakah keluaran program itu sekarang?
a. 9
b. 18
c. 12
d. 6
e. 3
Perhatikan program ini untuk menjawab tiga pertanyaan
berikutnya:
var A: array[1..10] of Integer;
J: Integer;
function Sigma(I: Integer): Integer;
begin
if I <= 0 then
Sigma := 0
else if Odd(I) then
Sigma := Sigma(I-1) - A[I] {baris-
8}
else
Sigma := Sigma(I-1) + A[I]; {baris-
10}
end;
begin
for J := 1 to 10 do Read(A[J]);
Writeln(Sigma(10));
end.
72. Bagaimana keluaran program tersebut bila data
yang diinputkan adalah:
1 2 3 4 5 6 7 8 9 10
a. 5
b. 55
c. 11
d. -5
e. Salah semua
73. Fungsi manakah yang 100% ekuivalen dengan fungsi
Sigma(I) di atas?
a. function Sigma(I: Integer): Integer;
var K: Integer;
begin
K := 0;
while I > 0 do
begin
K := K + A[I];
if Odd(I) then K := K - A[I];
Dec(I);
end;
Sigma := K;
end;
b. function Sigma(I: Integer): Integer;
var K: Integer;
B: Boolean;
begin
K := 0;
while I > 0 do
begin
K := K + A[I];
if Odd(I) then K := -K;
Dec(I);
end;
Sigma := K;
end;
c. function Sigma(I: Integer): Integer;
var K: Integer;
B: Boolean;
begin
K := 0;
B := True;
while I > 0 do
begin
if B then K := K - A[I]
else K := K + A[I];
B := not B;
Dec(I);
end;
Sigma := K;
end;
d. function Sigma(I: Integer): Integer;
var K: Integer;
begin
K := 0;
repeat
if Odd(I) then Dec(K, A[I])
else Inc(K, A[I]);
Dec(I);
until I = 0;
Sigma := K;
end;
e. function Sigma(I: Integer): Integer;
var K: Integer;
begin
K := 0;
while I > 0 do
begin
if Odd(I) then Dec(K, A[I])
else Inc(K, A[I]);
Dec(I);
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 10/13
11. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
end;
Sigma := K;
end;
74. Kita ubah baris 8 dan 10 dari program di atas
menjadi
Sigma := A[I] - Sigma(I-1) {baris-8}
dan
Sigma := A[I] + Sigma(I-1); {baris-10}
Bagaimanakah keluaran program bila data yang diinputkan
masih sama seperti sebelumnya (1 2 3 4 5 6 7 8 9
10)?
a. -5
b. 55
c. 5
d. 11
e. Salah semua
Gunakan program berikut ini untuk menjawab dua soal di
bawah ini:
program Uji;
var T: Text;
i, j, k: Integer;
begin
Assign(T, 'INPUT.TXT');
Reset(T);
Readln(T, i, j, k);
Writeln(i, ' ', j, ' ', k);
Readln(T, i);
Readln(T, j);
Writeln(i, ' ', j);
Close(T);
end.
75. Misalkan file INPUT.TXT berisi baris-baris sebagai
berikut:
3 1 4 9
5 2 6
8 7
0
Bagaimanakah output dari program tersebut?
a. 3 1 4 9
5 2 6
8 7
b. 3 1 4
9 5
c. 3 1 4
5 2
d. 3 1 4
5 8
e. Terjadi runtime error karena isi file INPUT.TXT tidak
sesuai untuk program ini.
76. Bila isi file INPUT.TXT adalah sebagai berikut,
1
3
2
4
5
6
bagaimana output program ini?
a. 2 3 1
4 5
b. 1 0 0
3 2
c. 1 3 2
4 5
d. 1 3 2
5 6
e. Terjadi runtime error karena isi file INPUT.TXT tidak
sesuai untuk program ini.
Baris pertama dari sebuah file teks berisi tulisan sebagai
berikut:
Surabaya 35 195 232
Baris tersebut berisi empat data yang berbeda jenisnya. Data
pertama berupa string yang boleh terdiri dari sembarang
karakter kecuali spasi. Panjang string ini minimum 1 dan
maksimum 20 karakter. Tiga data selanjutnya adalah bilang-
an bulat yang masing-masing boleh bernilai 0 sampai dengan
1000. Di antara dua data yang berurutan diberikan pemisah
berupa satu karakter spasi, dan tidak ada spasi di kiri data
pertama maupun di kanan data terakhir. Gunakan definisi
teks ini untuk menjawab tiga soal berikut ini:
77. Pilihlah tipe data terkecil yang dapat menampung
data pertama dengan tepat!
a. type Kata = string;
b. type Kata = string[];
c. type Kata = string[19];
d. type Kata = string[20];
e. type Kata = string[21];
78. Pilihlah tipe data terkecil yang dapat menampung
data kedua, ketiga, atau keempat dengan tepat!
a. type Bil = Integer;
b. type Bil = ShortInt;
c. type Bil = LongInt;
d. type Bil = Byte;
e. type Bil = Real;
79. Potongan program manakah yang benar dan paling
efisien untuk membaca data dengan spesifikasi di atas?
Asumsikan deklarasi berikut bila diperlukan:
var D1: Kata;
D2, D3, D4: Bil;
F: Text;
H: Char;
I: Integer;
Asumsikan juga bahwa file teks F sudah dibuka.
a. Readln(F, D1, D2, D3, D4);
b. Readln(F, D1);
Readln(F, D2);
Readln(F, D3);
Readln(F, D4);
c. Read(F, D1);
Readln(F, D2, D3, D4);
d. D1 := '';
repeat
Read(F, H);
if H <> ' ' then D1 := D1 + H;
until H = ' ';
Readln(F, D2, D3, D4);
e. D1 := '';
for I := 1 to 20 do
begin
Read(F, H);
if H <> ' ' then D1 := D1 + H;
end;
Readln(F, D2, D3, D4);
80. Bagaimana baris pertama dari output program ini?
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 11/13
12. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
var I, J, K: Integer;
begin
J := 115;
K := 2;
Writeln('ABC->' :1, J:5, '<-');
for I := 1 to 3 do
begin
Inc(J, 10);
Inc(K);
Writeln('->', J:K, '<-');
end;
end.
a. ABC-> 115<-
b. A-> 115<-
c. ABC->115 <-
d. ABC-> 115 115 115 115 115<-
e. ABC->23<-
81. Lihat kembali program dalam soal sebelumnya.
Bagaimana baris selanjutnya dari output program tersebut?
a. ->125<-
->135 <-
->145 <-
b. ->12<-
->135<-
-> 145<-
c. ->125<-
-> 135<-
-> 145<-
d. ->125125125<-
-> 135 135 135 135<-
-> 145 145 145 145 145<-
e. ->41<-
->33<-
->29<-
82. Untuk mengimplementasikan matriks dalam bahasa
Pascal, kita pasti akan menggunakan data bertipe:
a. record
b. object
c. pointer
d. array
e. set
Gunakan program berikut ini untuk menjawab beberapa soal
selanjutnya:
uses Crt;
var J: array['A'..'Z'] of Byte;
c: Char;
Kal: String;
procedure HH(S: String);
var i: Integer; {baris-
6}
m: Char;
begin
for i := 1 to Length(S) do
begin
m := S[i]; {baris-
11}
if m in ['A'..'Z'] then {baris-
12}
Inc(J[i]); {baris-
13}
end;
end;
begin
for c := 'A' to 'Z' do J[c] := 0;
Kal := 'PASAR';
HH(Kal); {baris-
19}
for c := 'A' to 'Z' do
if J[c] > 0 then Write(c, J[c], ' ');
Writeln;
Kal := 'RAYA';
HH(Kal);
for c := 'Z' downto 'A' do
if J[c] > 0 then Write(c, J[c], ' ');
Writeln;
end.
83. Bila terdapat kesalahan yang menyebabkan program
sama sekali tidak dapat dijalankan, sebutkan pada baris
berapa, dan bagaimana perbaikannya!
a. Kesalahan semacam itu tidak ada
b. Baris 12, seharusnya ditulis:
if [m] in ['A'..'Z'] then
c. Baris 6, seharusnya ditulis:
var i: Char;
d. Baris 13, seharusnya ditulis:
Inc(J[m]);
e. Indeks array hanya boleh berupa angka. Jadi deklarasi
variabel seharusnya ditulis:
const A = 1; Z = 26;
var J: array[A..Z] of Byte;
c: Byte;
Kal: String;
dan semua konstanta karakter dalam perintah for harus
diganti, misalnya:
for c := A to Z do
dan seterusnya.
84. Dengan perbaikan seperti nomor sebelumnya (kalau
ada), maka program bisa dijalankan. Apakah hasil dari
program tersebut?
a. A2 P1 R1 S1
A4 P1 R2 S1 Y1
c. A2 P1 R1 S1
Y1 R1 A2
c. A2 P1 R1 S1
Y1 R2 A4
d. P1 A2 S1 R1
Y1 A4 R2
e. A2 P1 R1 S1
Y1 S1 R2 P1 A4
85. Tindakan apakah yang dilakukan oleh subrutin HH
ketika dipanggil oleh baris 19 program di atas, dengan string
S berisi kata 'PASAR'?
a. menghitung frekuensi kemunculan huruf-huruf alfabet
dan menyimpannya dalam array J.
b. mengumpulkan huruf-huruf alfabet yang muncul lebih
dari satu kali ke dalam array J.
c. mencatat letak setiap huruf alfabet ke dalam array J.
d. menentukan huruf yang paling sering dan paling jarang
muncul dan menyimpannya dalam array J.
e. mengurutkan huruf-huruf menurut urutan alfabet, dari
yang terkecil sampai yang terbesar.
86. Perintah manakah yang bisa menggantikan baris 12
dari program di atas tanpa mengubah arti program sama
sekali?
a. if UpCase(m) in ['A'..'Z'] then
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 12/13
13. Tim Olimpiade Komputer Indonesia 1999 NUS: 99___________
b. if (m > 'A') and (m < 'Z') then
c. if (m >= 'A') and (m <= 'Z') then
d. if (m > 'A') or (m < 'Z') then
e. if (m >= 'A') or (m <= 'Z') then
87. Perbaikan apa yang perlu ditambahkan lagi agar
huruf kecil juga diperhitungkan?
a. Baris 12 diubah menjadi
if UpCase(m) in ['A'..'Z'] then
b. Baris 12 diubah menjadi
if m in ['A'..'z'] then
c. Baris 12 diubah menjadi
if m in ['A'..'Z', 'a'..'z'] then
d. Baris 11 diubah menjadi
m := UpCase(S[i]);
e. Baris 13 diubah menjadi
Inc(J[Upcase(m)]);
88. Deklarasi manakah yang tidak diizinkan oleh
compiler Turbo Pascal?
a. type X = string[1];
b. type X = array[1..50000] of Char;
c. type X = array[-1000..1000] of LongInt;
d. type X = array[0..30000] of LongInt;
e. type X = array[-20000..-10000] of LongInt;
89. Misalkan A dan B bertipe Integer dan masing-
masing bernilai 10 dan 4. Ekspresi mana yang menghasilkan
nilai 5?
a. A div 7 * B
b. B div 7 * A
c. A * B div 7
d. A * B / 7
e. semua benar
90. I dan J masing-masing adalah Integer yang
masing-masing bernilai 13000 dan 5, dan L adalah variabel
bertipe LongInt. Ekspresi manakah yang bisa menghasilkan
nilai 65000 dengan tepat dalam bahasa Pascal?
a. L := I * J;
b. L := LongInt(I * J);
c. L := LongInt(J * I);
d. L := LongInt(I) * J;
e. semua sama benarnya
~ Selamat Mengerjakan ~
Seleksi Prakualifikasi TOKI 1999—Ujian Dasar Pemrograman Pascal Halaman 13/13