RSS

Contoh soal dan pembahasan Olimpiade Komputer materi FUNGSI dalam Turbo Pascal

26 Jan

Mari berbagi pengetahuan …. ada sedikit soal dan pembahasan dalam Olimpiade Komputer:

Untuk soal 1 – 2
FUNCTION fak (x, y: integer) : Integer;
BEGIN
if y:= 0 then fak := 1
else
fak := x * fak (x, y-1);
END;
Writeln (fak(5, 3));

1. Apa hasil dari program di atas!
a. 125
b. 8
c. 81
d. 3
e. 15

Pembahasan :
Ini adalah contoh kasus fungsi dengan mempergunakan rekursi (fungsi yang mampu memangil dirinya sendiri)
Nilai x awal adalah 5, nilai  y awal adalah 3 maka
fak (5,3) —> 5 * fak (5, 3-1) = 5 * 25 = 125
fak (5,2) —> 5 * fak (5, 2-1) = 5 * 5 = 25
fak (5,1) —> 5 * fak (5,1-1) = 5 * 1 = 5
fak (5,0) (proses selesai karena y =0)
Jadi yang muncul adalah
125

2. Jika writeln (fak(5,3)) diganti menjadi writeln (fak(4,5)), hasil dimunculkan adalah…
a. 20
b. 9
c. 1024
d. 64
e. 5

Pembahasan:
Kasus ini sama seperti pada soal 1
Nilai x awal adalah 4, nilai  y awal adalah 5 maka
fak (4,5) —> 4 * fak (4, 5-1) dengan mempergunakan hasil fak ( 4,4) –>  4 * 256 = 1024
fak (4,4) —> 4 * fak (4, 4-1) dengan mempergunakan hasil fak ( 4,3) –>  4 * 64 = 256
fak (4,3) —> 4 * fak (4,3-1) dengan mempergunakan hasil fak ( 4,2) –>  4 * 16 = 64
fak (4,2) —> 4 * fak (4,2-1) dengan mempergunakan hasil fak ( 4,1) –>  4 * 4  = 16
fak (4,1) —> 4 * fak (4,1-1) = 4 * 1 = 4
fak (4,0) (proses selesai karena y =0)
Jadi yang muncul adalah
1024

3. Manakah yang salah dari deklarasi dibawah ini
a. function info(a:byte):real;
b. function info:byte;
c. function info(a,b:byte) : real;
d. function info(a: real; b:integer):real;
e. function info(a:real);

Pembahasan
Ingat bentuk dekelarasi dari suatu fungsi
FUNCTION nama_fungsi(daftar_fungsi):tipe;
– daftar parameter berisi sejumlah parameter
– tipe menyatakan tipe dari hasil fungsi
– Jika fungsi tidak memiliki parameter, tanda () tidak perlu disertakan.
jadi jawabannya adalah e.function info(a:real);

dengan harga mula-mula x = 70 dan y = 5, berapakah harga y setelah deretan keluar dari loop while?

A. 11
B. 15
C. 17
D. 21
E. 25

Jawab:

Perhatikan bahwa loop while memiliki syarat “x lebih besar dari y”. Sehingga selama syarat tersebut terpenuhi (syarat bernilai TRUE) maka looping akan terus dijalankan. Dan proses looping akan berhenti apabila syarat sudah tidak terpenuhi (bernilai FALSE) Perhatikan jalannya proses berikut ini:

01.x = 70, y = 5
02.Cek (x > y) -> (70 > 5) -> TRUE
03. x = x - 10 = 70 - 10 = 60
04. y = y + 2 = 5 + 2 = 7
05.Cek (x > y) -> (60 > 7) -> TRUE
06. x = x - 10 = 60 - 10 = 50
07. y = y + 2 = 7 + 2 = 9
08.Cek (x > y) -> (50 > 9) -> TRUE
09. x = x - 10 = 50 - 10 = 40
10. y = y + 2 = 9 + 2 = 11
11.Cek (x > y) -> (40 > 11) -> TRUE
12. x = x - 10 = 40 - 10 = 30
13. y = y + 2 = 11 + 2 = 13
14.Cek (x > y) -> (30 > 13) -> TRUE
15. x = x - 10 = 30 - 10 = 20
16. y = y + 2 = 13 + 2 = 15
17.Cek (x > y) -> (20 > 15) -> TRUE
18. x = x - 10 = 20 - 10 = 10
19. y = y + 2 = 15 + 2 = 17
20.Cek (x > y) -> (10 > 17) -> FALSE
21. STOP

Setelah proses looping while selesai, nilai y terakhir adalah 17 (Jawaban yang benar C).


Pertanyaan :

Untuk menukar isi dua variabel integer (keduanya bernama a dan b) tanpa bantuan variabel lain adalah…

A. a := b – a; b := b – a; a := b + a;
B. b := b – a; a := b + a; a := b – a;
C. a := b + a; a := b – a; b := b – a;
D. a := b – a; b := b – a; a := b – a;
E. a := b + a; b := b + a; a := b + a;

Jawab :

Untuk menjawab pertanyaan di atas, kita akan cek terlebih dahulu semua alternatif jawaban. Kita coba untuk pemisalan awal nilai a = 5 dan b = 3. Kita akan mencari jawaban sedemikian hingga hasil akhir dari proses perhitungan menghasilkan a = 3 dan b = 5.

Option A.

a = b – a = 3 – 5 = -2
b = b – a = 3 – (-2) = 5
a = b + a = 5 + (-2) = 3
Jadi a = 3 dan b = 5 (BENAR)

Option B.

b = b – a = 3 – 5 = -2
a = b + a = -2 + 5 = 3
a = b – a = -2 – 3 = -5
Jadi a = -5 dan b = -2 (SALAH)

Option C.

a = b + a = 3 + 5 = 8
a = b – a = 3 – 8 = -5
b = b – a = 3 – (-5) = 8
Jadi a = -5 dan b = 8 (SALAH)

Demikian seterusnya kita cek untuk option D dan E. Untuk option D dan E juga diperoleh hasil yang salah, sehingga jawaban yang benar adalah A.

Sumber: Rosihan Ari Blog, Impotes Blog

 

1 responses to “Contoh soal dan pembahasan Olimpiade Komputer materi FUNGSI dalam Turbo Pascal

  1. Zainal

    Oktober 8, 2011 at 9:25 am

    salm kenal bu yuli, thanks ya atas soa dan pembahasannya, mg bermanfaat bg kami. o ia bu, bagaimana sih mengerjakan bilangan yang berpangan ribuan itu? mksh atas jawabannya. kalau bisa dikirim jawabanya dan contoh soal dan pembahasan yang lain di email saya ya bu? zai_nal79@yahoo.co.id

     

Tinggalkan komentar