• Tidak ada hasil yang ditemukan

PRA OLIMPIADE SAINS NASIONAL VII

N/A
N/A
Protected

Academic year: 2021

Membagikan "PRA OLIMPIADE SAINS NASIONAL VII"

Copied!
111
0
0

Teks penuh

(1)

MATERI PEMBINAAN

PRA OLIMPIADE SAINS NASIONAL VII

BIDANG INFORMATIKA

8-14 AGUSTUS 2008

MAKASSAR, SULAWESI SELATAN

(2)

DAFTAR ISI ...1 PSEUDOPASCAL...5 A. Pengantar...5 B. Terminologi dan Penjelasan Umum ...5 C. Elemen‐elemen Algoritma dengan Pseudopascal ...6 C.1. Variabel...7 C.2. Perintah...9 C.3. Assignment & Ekspresi ... 10 C.4. Ekspresi Aritmatis... 10 C.5. Ekspresi Lojik... 11 C.6. Struktur kendali aliran... 12 C.7. Algoritma Utama/Fungsi/prosedur ... 13 D. Aturan‐aturan Penulisan Struktur Kendali Aliran... 14 D.1. Struktur begin‐end... 15 D.2. Strktur if‐then... 15 D.3. if‐then‐else... 15 D.4. for‐do... 15 D.5. while‐do ... 16 D.6. repeat‐until... 16 D.7. case‐of‐end ... 16 E. Aturan‐aturan Penulisan Prosedur dan Fungsi... 17 E.1. Prosedur ... 17 E.2. Fungsi... 17 MATERI UJI OLIMPIADE SAINS BIDANG INFORMATIKA... 18 A. Pengantar... 18 1. Olimpiade Sains Nasional... 18 2. International Olympiad in Informatics ... 18 3. Metoda dan Proses Seleksi di OSN... 19 4. Metoda dan Proses Seleksi pra OSN... 19 5. Klasifikasi Soal‐soal Nonprogramming... 19 B. Materi Uji Aritmatika ... 20

1. Mampu  Membentuk  Model  Aritmatika/Matematika  serta  melakukan  deduksi/induksi Model... 20 2. Memahami Sifat‐sifat Bilangan... 20 3. Mengkaitkan dengan Konteks Masalah ... 21 4. Memahami Formula Rekursif... 21 5. Eksplorasi dalam Masalah Kombinatorik ... 21 6. Berpikir secara “Cerdas” ... 22 C. Materi Uji Analitika dan Logika... 23 D. Materi Uji Algoritmika... 25 E. Materi Uji Programming... 31 F. Penutup... 33 DESKRIPSI RINGKAS SITUS TOKI LEARNING CENTER... 34 Tujuan Bahan Ini ... 34 Batasan Aplikasi... 34

(3)

Tanya Jawab ... 36 Memilih Soal Pilihan Berganda ... 37 Menjawab Soal Pilihan Ganda... 37 Lembar Jawab Pilihan Ganda ... 38 Pilihan Ganda ... 38 Menu Deskripsi Soal (Untuk mengakses soal) ... 39 Soal Problem Solving (dengan membuat program)... 39 Rekapitulasi Submisi ... 40 Meminta Untuk Dinilai... 40 Forum Diskusi... 40 Ubah Password... 41 Logout ... 41 CONTOH SOAL DAN PEMBAHASAN ... 42 Soal Aritmatika, Analitika dan Logika... 42 Soal Algoritmika... 60 Soal Pemrograman ... 67 Faktorial ... 67 Ulang Tahun... 70 MATERI PJJ PRA OSN 2008... 73 Readln dan Writeln... 73 Contoh Masukan ... 74 Contoh Keluaran ... 74 While Loop ... 75 Contoh Masukan ... 75 Contoh Keluaran ... 75 While Loop + Counter... 76 Contoh Masukan ... 77 Contoh Keluaran ... 77 Menjumlah per Kolom... 78 Contoh Masukan ... 79 Contoh Keluaran ... 79 Menjumlah dalam Satu Baris ... 80 Contoh Masukan ... 81 Contoh Keluaran ... 81 If Then ... 82 Contoh Masukan 1... 82 Contoh Keluaran 1 ... 82 Contoh Masukan 2... 82 Contoh Keluaran 2 ... 82 Contoh Masukan 3... 83 Contoh Keluaran 3 ... 83 If Then, Multi Condition... 84 Contoh Masukan 1... 84 Contoh Keluaran 1 ... 85 Contoh Masukan 2... 85 Contoh Keluaran 2 ... 85 If Then Else... 86

(4)

Contoh Masukan 2... 87 Contoh Keluaran 2 ... 87 Contoh Masukan 3... 87 Contoh Keluaran 3 ... 87 Case ... 88 Contoh Masukan 1... 89 Contoh Keluaran 1 ... 89 Contoh Masukan 2... 89 Contoh Keluaran 2 ... 89 Procedure ... 90 Contoh Masukan ... 91 Contoh Keluaran ... 91 Function... 92 Contoh Masukan 1... 94 Contoh Keluaran 1 ... 94 Contoh Masukan 2... 94 Contoh Keluaran 2 ... 94 Var Parameter... 95 Contoh Masukan ... 97 Contoh Keluaran ... 97 Break, Continue, Exit... 98 Contoh Masukan 1... 99 Contoh Keluaran 1 ... 99 Contoh Masukan 2...100 Contoh Keluaran 2 ...100 Operasi String ...101 Contoh Masukan ...102 Contoh Keluaran ...102 Manhattan Distance ...105 Format Masukan...105 Format Keluaran...105 Contoh Masukan ...105 Contoh Keluaran ...105 Floor and Ceiling...106 Format Masukan...106 Format Keluaran...106 Contoh Masukan ...106 Contoh Keluaran ...106 Dua Pangkat...107 Format Masukan...107 Format Keluaran...107 Contoh Masukan 1...107 Contoh Keluaran 1 ...107 Contoh Masukan 2...107 Contoh Keluaran 2 ...107 POLA 1...108 Format Masukan...108

(5)

Contoh Keluaran ...108 POLA 2...109 Format Masukan...109 Format Keluaran...109 Contoh Masukan 1...109 Contoh Keluaran 1 ...109 Contoh Masukan 2...109 Contoh Keluaran 2 ...109 POLA 3...110 Format Masukan...110 Format Keluaran...110 Contoh Masukan 1...110 Contoh Keluaran 1 ...110 Contoh Masukan 2...110 Contoh Keluaran 2 ...110 Contoh Masukan 3...110 Contoh Keluaran 3 ...110  

(6)

PSEUDOPASCAL

 

Versi Olimpiade Sains Bidang Informatika/Komputer   

A.

Pengantar

 

Mengingat  dalam  seleksi  tertulis  Olimpiade  Informatika/Komputer  algoritma‐ algoritma  yang  terkait  dalam  soal‐soal  tersebut  dituliskan  dengan  Pseudocode  Pascal,  atau  selanjutnya  kita  singkat  dengan  Pseudopascal  saja,  maka  kami  merasa  perlu  untuk  mengeluarkan  dokumen  untuk  dijadikan  acuan  peserta  untuk  memahaminya.  Dokumen  ini  diharapkan  juga  menjadi  acuan  peserta  dalam mempersiapkan diri dalam seleksi tersebut maupun para pembina dalam  mengarahkan pelatihan siswa‐siswanya. 

 

Bagi  pembimbing  atau  peserta  seleksi  yang  cukup  menguasai  bahasa  pemrograman Pascal, sebagian besar aturan penulisan Pseudopascal merupakan  subset dari aturan Bahasa Pascal itu sendiri. Kecuali, ada beberapa hal yang di  dalam Bahasa Pascal boleh dilakukan, dalam pseudopascal tidak ada atau tidak  disarankan  untuk  dilakukan.  Hal  ini  untuk  memungkinkan  kompatibilitas  algoritma  dengan  bahasa  lain  seperti  bahasa  C  sehingga  peserta  yang  lebih  menguasai bahasa selain Pascal dapat cukup mudah untuk memahaminya juga.  Jadi  berkenaan  dengan  ini  anda  tinggal  menemukan  hal‐hal  yang  menjadi  “pantangan” tersebut. 

 

Mengingat  dokumen  ini  dituliskan  lebih  untuk  acuan  maka  anda  hanya  akan  menemukan  penulisan  substansi  yang  seringkas‐ringkasnya  tanpa  disertai  contoh‐contoh  yang  memadai.  Dalam  kesempatan  lain,  semoga  kami  dapat  menyediakan  materi  yang  lebih  sesuai  untuk  digunakan  langsung  dalam  pembinaan‐pembinaan peserta dalam pemrograman. 

 

B.

Terminologi

 

dan

 

Penjelasan

 

Umum

 

Untuk  memudahkan  anda  dalam  pemaham  dokumen  ini  beberapa  terminologi  terkait  akan  dijelaskan.  Jika  agak  berbeda  dari  yang  anda  sudah  ketahui  kami  harapkan  itu  tidak  terlalu  dipermasalahkan  karena  hal  tersebut  bukan  tujuan  utama dari dokumen ini. 

 

Berikut ini mengenai algoritma  

Algoritma  adalah  urutan  langkah‐langkah  sistematis  yang  terkait  pada  pemecahan suatu masalah; didalamnya bisa terdapat sejumlah variabelperintahekspresi  & assignmentstruktur  kendali  aliran  (control  flow) dari algoritma, serta definisi fungsi/prosedur.  

Pseudocode  adalah  suatu  cara  penulisan  algoritma  agar  ide  dan  logika  dari algoritma dapat disampaikan/diekspresikan.  

Pseudopascal  (alias  Pseudocode  Pascal)  adalah  pseudocode  yang  menggunakan  (mengadopsi)  beberapa  notasi  Bahasa  Pascal  berikut  struktur penulisan programnya.  

(7)

Berikut ini mengenai program komputer  

Program  komputer  atau  kita  singkat  dengan  kata program  (istilah  lainnya  code)  adalah  susunan  perintah‐perintah  dan  operasi‐operasi  yang  mengimplementasikan  algoritma  tertentu  disertai  yang  ditulis  dalam bahasa pemrograman tertentu.  

Bahasa pemrograman adalah bahasa yang di dalamnya terdapat aturan  penulisan program.  

Bahasa Pascal  adalah  salah  satu  bahasa  pemrograman,  dan  saat  ini  terdapat  sejumlah  versi  dari  bahasa  Pascal  diantaranya:  Ansi  Pascal,  Turbo Pascal, Free Pascal, dlsb.  

 

Algoritma  yang  ditulis  dalam  suatu  pseudocode  dibedakan  dari  programnya  yang ditulis dalam suatu bahasa pemrograman akibat adanya perbedaan tujuan  dari  kedua  hal  itu.  Algoritma  dengan  pseudocode  bertujuan  untuk  menyampaikan ide dari algoritma bagi pembaca (dalam hal ini peserta seleksi),  sementara  program  dalam  suatu  bahasa  pemrograman  untuk  dapat  dijalankan  nantinya  oleh  komputer.  Mengingat  komputer  “bodoh”  maka  dalam  penulisannya  suatu  program  harus  100%  taat  pada  aturan‐aturan  penulisan  programnya (istilahnya tidak ada kesalahan sintaks) sementara karena pembaca  algoritma  adalah  manusia  maka  demi  menyederhanakan  dan  memudahkan  pemahaman  maka  aturan‐aturan  penulisannya  digunakan  secara  fleksibel.  Terkadang pesudocode dituliskan nyaris sama dengan versi programnya sendiri  tetapi  kadang‐kadang  diringkaskan  menggunakan  kalimat‐kalimat  bahasa  manusia  (dalam  hal  seleksi  ini  adalah  bahasa  Indonesia)  bahkan  beberapa  bagian  sengaja  yang  bukan  fokusnya  dihilangkan.  Prinsip  dalam  penulisan  pseudocode  adalah  “tuliskan  seringkas‐ringkasnya  sejauh  tidak  mengurangi  pengertian dari algoritma yang menjadi fokus pembahasan tersebut.”  

 

Dalam  kaitannya  dengan  materi  seleksi,  pseudocode  yang  digunakan  adalah  pseudopascal  berdasarkan  kenyataan  bahwa  notasi‐notasi  Bahasa  Pascal  jauh  lebih  mudah  dipahami  daripada  notasi  bahasa  pemrograman  populer  lainnya  saat ini terutama bagi pemula (misalnya bahasa C). Selain itu setiap notasi yang  digunakan dijaga untuk selalu berpadanan dengan notasi yang ada dalam bahasa  lain tersebut sehingga peserta yang lebih menguasai bahasa selain Pascal tetap  dapat memahami ide dari algoritma terkait.  

 

Terakhir,  untuk  menghindari  polemik  akan  cara‐cara  penulisannya,  sekali  lagi  Pseuodopascal  yang  dimaksud  dalam  dokumen  ini  adalah  Pseudopascal  versi  Olimpiade Sains Bidang Informatika/Komputer & TOKI. 

 

C.

Elemen

elemen

 

Algoritma

 

dengan

 

Pseudopascal

  

Seperti  pada  terminologi  di  atas  terdapat  sejumlah  elemen  dasar  dalam  pseudopascal.  

• Variabel  

• Perintah  

• Assignment & Ekspresi  

(8)

• Fungsi/prosedur   • Komentar     Sebelum penjelasan masing‐masing komponen itu (di bagian C.1 s.d. C.7) berikut  ini suatu contoh algoritma dalam pseudopascal. Algoritma ini tidak berarti apa‐ apa karena hanya ditulis untuk membantu di bagian penjelasan masing‐masing  elemen algoritma tsb kemudian.     

function kubik(a: integer): integer; begin

kubik := a*a*a; end;

procedure sw(var a: real; var b: real); begin

menukarkan isi a dan b   end;

var

status: array[0..99] of boolean; { array 1 dimensi } Tbl: array[0..99,0..1] of integer; { array 2 dimensi } sum: record x,y: real end; { struktur komposit } begin

Proses mengisikan data ke dalam matriks Tbl dan array status   sum.x := 0;

sum.y := 0;

for I := 0 to 99 do begin

t0 := (Tbl[I,0] + Tbl[I,1])/2 - I*2;

status[I] := (Tbl[I,0] = Tb l[I,1]) or (sum.x <> sum.y); if (status[I] or status[99-I]) then begin

sum.x := sum.x + kubik(Tbl[I,1] - t0); sum.y := sum.y + kubik(Tbl[I,0] - t0); sw(sum.x, sum.y);

end; end;

Proses pencetakan harga­harga sum.x dan sum.y  ....  ....  end.    

C.1.

Variabel

 

Variabel  adalah  elemen  dari  algoritma  untuk  menyimpan  suatu  harga  tertentu  pada suatu saat dan pada saat lain harga dalam variable itu bisa diubah ke harga  lain sesuai kebutuhan.  

 

(9)

• Suatu  variabel  dituliskan  dengan  suatu  nama  secara  unik  dan  nama  variabel dapat terbentuk dengan karakter alfanumeris1 (hanya huruf dan  angka) kecuali karakter pertama adalah alfabet. Misalnya:  

o Variabel‐variabel dalam contoh di atas bernama sum, Tbl, status,  I dan t0.  

 

• Huruf  besar  dan  huruf  kecil  sama  saja  (case  insensitive2)  namun  penulisan variabel diharapkan selalu konsisten dalam penggunaan huruf  besar/kecilnya.  

 

• Suatu  variabel  tidak  diberikan  nama  dengan  kata  yang  akan  digunakan  secara  khusus  dalam  notasi  penulisan  algoritma  (lihat  daftar  kata  reserved  word)  dengan  tujuan  untuk  menghindari  kerancuan  arti.  Misalnya:  

o kata‐kata functionbeginendfordointegerrealvararray,  dan boolean  di  contoh  di  atas  memiliki  arti  khusus  (reserved 

word),    

• Variabel  bisa  berbentuk  tunggal,  komposit,  atau  bisa  juga  berbentuk  majemuk yang ditandai elemen‐elemennya dengan indeks.  

 

• Variabel berbentuk majemuk atau yang dikenal dengan nama array, harga  indeks‐indeks array berkisar dari 0 hingga bilangan positif tertentu3 dan  penulisan  indeksnya  setelah  nama  variabel  tersebut  di  dalam  sepasang  kurung siku. Nomor indeks dari array dapat digantikan oleh harga suatu  variabel lain dengan menuliskan nama variabel tersebut. Misalnya:  

o status[I]  menunjukan  elemen  array  status  ke I  dan  harga I  sendiri dalam algoritma dapat berubah‐ubah sehingga status[I]  mengacu pada berbagai elemen.  

 

• Array  bisa  berindeks  lebih  dari  satu  (disebut  berdimensi  lebih  dari  1)  misalnya  array  dua  dimensi  dan  di  dalam  tanda  kurung  siku  ada  dua  harga  indeks  yang  dipisahkan  oleh  tanda  koma4  dengan  alternatif  sepasang kurung siku tutup & buka5 (“][“). Misalnya:  

o status adalah array dengan indeks berkisar dari 0 s.d. 99.  

o Tbl  adalah  array  dua  dimensi  (dengan  2  indeks)  yang  masing‐ masing  indeks  memiliki  kisaran  dari  0  s.d.  99  dan  0  s.d.  1.  Penulisan  elemen  Tbl[i,0]  dapat  juga  diganti  dengan  Tbl[i][0].  

 

      

1  Dalam  bahasa  Pascal  selain  alfanumeris,  sejumlah  karakter  lain  dapat  pula  digunakan.  Disini  kita batasi saja hanya alfanumeris. 

2 Dalam bahasa C nama variabel case sensitive sementara bahasa Pascal case insensitive 

3  Indeks  dibatasi  demikian  untuk  menjaga  portabilitas  (kemudahan  untuk  diimplementasikan) 

dengan bahasa C walaupun dalam bahasa Pascal indeks ini bisa menggunakan banyak cara. 

4 Mengikuti aturan dalam bahasa Pascal  5 Mengikuti atuaran dalam bahasa C 

(10)

• Jika cukup jelas jenis dan penggunaanya maka suatu variabel tidak perlu  dideklarasikan6.  Jika  dideklarasikan  maka  penulisan  mengikuti  aturan  deklarasi variabel dalam bahasa Pascal yaitu dituliskan di awal program  atau di awal fungsi/prosedur. Misalnya:  

o Tbl, status dan sum dideklarasikan tetapi I dan t0 tidak.    

• Struktur  komposit  (variabel  yang di  dalamnya  terdiri  atas  subvariabel7 sedapat  mungkin  akan  dihindari.  Seandainya  diperlukan  maka  akan  mengikuti aturan penulisan Record dalam bahasa Pascal dan penggunaan  komponennya  menggunakan  aturan  dalam  bahasa  Pascal  yaitu  nama  variabel dan nama subvariabel dituliskan dengan dipisahkan tanda titik.  

o Misalnya  variabel sum  memiliki  dua  subvariabel  yaitu x  dan y.  Masing0masing  bisa  dianggap  sebagai  variabel  tersendiri  dengan  nama sum.x, dan sum.y.  

 

C.2.

Perintah

  

Perintah adalah satuan operasional dari suatu algoritma maupun algoritma.  

• Perbedaannya, perintah‐perintah dalam algoritma bisa dinyatakan dalam  kalimat‐kalimat  bahasa  sehari‐hari  sementara  untuk  program  perintah‐ perintah  harus  bisa  “dipahami”  dan  dijalankan  oleh  komputer  sehingga  karena keterbatasan komputer harus mengikuti aturan‐aturan penulisan  yang rinci. Misalnya:  

o Algoritma  contoh  di  atas  berisikan  perintah‐perintah  yang  menggunakan  kalimat  bahasa  Indonesia  biasa  dan  perintah‐ perintah mengikuti aturan penulisan program bahasa Pascal.    

• Perintah  dalam  bahasa  sehari‐hari  dibedakan  dalam  font  penulisannya  dari perintah yang mirip perintah program. Misaalnya:  

o dalam algoritma contoh dituliskan dengan huruf miring sementara  perintah dengan aturan bahasa pemrograman dengan huruf biasa  dan  diakhiri  tanda  “;”  (sebagai  kebiasaan  saja,  keduanya  menggunakan  huruf courier  untuk  dibedakan  dari  bagian  teks  yang lain).  

 

• Kadang‐kadang  perintah  dalam  bahasa  sehari‐hari  digunakan  untuk  mewakili  sejumlah  baris  perintah  dalam  bahasa  pemrograman  sehingga  diharapkan  penulisan  algoritma  tidak  terlalu  bertele‐tele  namun  tetap  atau bahkan dapat lebih mudah untuk dipahami.  

o Misalnya:  “Proses  mengisikan  data  ke  dalam  …..  (dst)”  menggantikan  sederetan  operasi  mengenai  pengisian  Tbl  dan  ”Proses  pencetakan  ….”  yang  menggantikan  perintah‐perintah  untuk mencetak harga variabel tsb.  

 

      

6  Deklarasi  variabel  dilakukan  dalam  sebagian  besar  bahasa  pemrograman  untuk  menyatakan 

jenis  kemungkinan  harga  yang  dapat  diisikan  padanya,  ukuran/dimensi  (khusus  untuk  array),  dan scope (bagian‐bagian mana) dari program ia bisa digunakan. 

(11)

• Sederetan  perintah  yang  tidak  menjadi  fokus  untuk  ditampilkan  dalam  algoritma kadang‐kadang diganti dengan sejumlah baris yang berisi titik‐ titik (“.…”). Misalnya pada contoh di atas pada baris terakhir.  

   

• Notasi‐notasi penulisan perintah mengikuti notasi yang digunakan dalam  bahasa Pascal yaitu ada yang bersifat assignment yang diikuti oleh suatu  ekspresi atau hanya satu pemanggilan prosedur tertentu.  

 

C.3.

Assignment

 

&

 

Ekspresi

  

Assignment adalah pemberian nilai pada suatu variable yang bisa berupa harga  literal8, harga dari variable lain, atau harga yang dihasilkan dari suatu ekspresi.  Sementara  ekspresi  adalah  operasi  yang  akan  menghasilkan  harga  untuk  diberikan  pada  variabel  tersebut  yang  bisa  merupakan  ekspresi  aritmatis  maupun atau ekspresi lojik (Lihat Dalam bahasa C, harus diikuti notasi “break;”  karena tanpa itu maka alirannya jadi sangat berbeda. C.4 Ekspresi Aritmatis &  C.5 Ekspresi Lojik  di  bagian  berikutnya).  Aturan  dalam  penulisan  assignment  adalah sebagai berikut.  

• Aturan  penulisannya  adalah:  nama  variabel  penerima  diikuti  tanda  assignment “:=”9 selanjutnya nilai atau ekspresi yang menghasilkan nilai.  Misalnya: 

o “sum.x:=0” artinya variabel sum.x diberi nilai literal 0 

o “t0:=(Tbl[I,0]+Tbl[I,1])/2–I*2;” artinya variabel t0 diberi  harga  hasil  ekspresi  yang  aritmatis  di  ruas  kanan  setelah  tanda  assignment.    

C.4.

Ekspresi

 

Aritmatis

  

Suatu ekspresi aritmatis berisikan sederetan operasi aritmatis dan jika yang jika  dijalankan akan menghasilkan suatu bilangan (integer atau real). Suatu operasi  aritmatis terjadi antara dua harga yang akan dioperasikan (disebut operand) dan  sebuah  operator  kecuali  untuk  operasi  unary  yang  hanya  memerlukan  satu  operand.  

• Notasi‐notasi  operator  arimatis:  perkalian  (*),  pembagian  (/),  penambahan  (+),  pengurangan  (‐),  sisa  pembagian  (mod),  pembagian  dengan pembulatan ke bawah (div).  

• Jika ekspresi berisi beberapa operasi maka operasi dengan orde tertinggi  yang akan dilakukan terlebih dahulu.  

• Urutan  orde  untuk  operasi  aritmatis  mulai  dari  yang  tertinggi  hingga  terendah  adalah:  perkalian/pembagian/modulo/divisi,  kemudian  penambahan/pengurangan (tanda / menyatakan berorde sama).  

• Untuk yang berorde sama, urutan operasinya dilakukan dari kiri ke kanan  dalam  penulisan  ekspresi  namun  jika  berpotensi  membingungkan  kadangkadang urutan bisa dipertegas dengan bantuan tanda kurung dan        

8  Harga  literal  adalah  harga‐harga  yang  pasti  misalnya  integer  0,  100, ‐33;  bilangan  real 

29.13, 21.41; string “Indonesia Raya”, “Olimpiade sains”. 

9 Dalam bahasa C assignment hanya dengan tanda “=” tetapi dalam  pascal tanda “=” digunakan 

(12)

penggunaan  tanda  kurung  memungkinkan  bagian  operasi  yang  ada  di  dalam tanda kurung dilakukan terlebih dahulu. Misalnya:  

o ”(Tbl[I,0]+Tbl[I,1])/2–I*2“  akan  dilakukan  penjumlahan  Tbl[I,0] + Tbl[I,1] terlebih dahulu kemudian hasilnya akan  dibagi 2 dan dikurangi oleh hasil perkalian antara I and 2.  

• Operand‐operand bisa variabel, literal, atau hasil dari pemanggilan fungsi.  Misalnya:  

o dalam  “sum.x+kubik(Tbl[I,1]–t0)”  yang  terlibat  dalam  operasi  adalah  sum.x,  dan  hasil  dari  pemanggilan  fungsi  kubik(Tbl[I,1]–t0)  (Penjelasan  pemanggilan  fungsi  ada  di  bagian fungsi).  

• Operasi unary adalah operasi yang hanya berlaku sebagai operasi terkiri  dalam  ekspresi  dengan  operator  minus  (sama  dengan  pengurangan)  dengan  cara  penulisan:  operator mendahului  operand. Efek  dari  operasi  ini  adalah  memperhalikan  harga  operand  di  sampingnya  itu  dengan ‐1.  Jika  operand  berharga  positif  akan  menjadi  negatif  dan  sebaliknya  jika  berharga negatif menjadi positif.  

• Operasi  tidak  mengubah  isi  variabel‐variabel  yang  menjadi  operand  tersebut kecuali jika ia adalah variabel yang akan menerima hasil operasi  tersebut di dalam operasi assignment hasil dari ekspresi (lihat bagian C.3  Assignment & Ekspresi sebelumnya).  

C.5.

Ekspresi

 

Lojik

  

Suatu  ekspresi  lojik  bisa  merupakan  salah  satu  dari  berikut  ini:  (1)  satu  harga  literal lojik, (2) suatu variabel lojik, (3) suatu ekspresi pembandingan harga, (4)  operasi lojik dari dua ekspresi lojik atau (5) negasi suatu ekspresi lojik. Keempat  dan kelima memungkinkan ekspresi kombinasi yang kompleks.  

• Ekspresi pembandingan terdiri atas dua antitas yang akan dibandingkan  dan  kriteria  pembandingannya;  penulisan  berurutan  entitas  kiri  kriteria  pembandingan dan entitas kanan.  

• Kriteria pembanding yang dikenali adalah “=” (sama10), “<” (lebih kecil),  “>”  (lebih  besar),  “<=”  (lebih  kecil  atau  sama  dengan),  “>=”  (lebih  besar  atau sama dengan), “<>” (tidak sama11).  

• Entitas yang akan dibandingkan bisa berupa variabel biasa atau ekspresi  aritmatis  (ekspresi  aritmatis  harus  dituliskan  di  dalam  tanda  kurung!)  atau suatu harga literal asalkan kedua entitas yang dibandingkan berjenis  harga sama.  

• Operasi  lojik  terjadi  antara  dua  variabel  lojik  dan  atau  harga  lojik  (bisa  dari hasil ekspresi pembandingan atau ekspresi lojik lain) dengan suatu  operator kecuali jika operasi negasi dianggap sebagai operasi lojik maka  ia hanya menggunakan satu operand.  

• Operator‐operator  lojik  yang  memerlukan  dua  operand  adalah: andor,  dan xor sementara operator negasi adalah not.  

      

10  Dalam  bahasa  C  tanda  pembandingan  kesamaan  ini  dituliskan  ganda  (“==”)  untuk 

membedakannya dengan assignment. 

(13)

• Operator‐operator tsb dijalankan dengan urutan sesuai dengan ordenya:  dari yaang tertinggi ke yang terendah, jika sama dari kiri ke kanan dalam  ekspresi.  

• Urutan orde dari operator‐operator tersebut (dari tertinggi ke terendah):  not, and, or/xor (tanda / menyatakan berorde sama).  

• Seperti  halnya  dalam  ekspresi  aritmatis,  tanda  kurung  dapat  digunakan  untuk  mengatur  urutan  operasinya.  Untuk  menambah  kejelasan  algoritma kadang‐kadang tanda kurung disertakan.  

• Hasil  ekspresi  bisa  diassign  ke  suatu  variabel  boolean  atau  bisa  juga  digunakan  dalam  perintah  kendali  aliran  (Dibahas  di  C.6  Struktur  kendali aliran).  

o Misalnya: dalam “status[I] := (Tbl[I,0] = Tb l[I,1]) or (sum.x <> sum.y)”  di  ruas  kanan  terdapat  operasi  lojik  “or”  antara  dua  hasil  pembandingan.  Pembadingan  pertama  adalah  memeriksa  kesamaan  dan  pembandingan  kedua  adalah  memeriksa  ketidaksamaan.  Hasil  ekspresi  ini  diberikan  ke  dalam  variabel status[I] (pada posisi berindeks I dari array status).    

C.6.

Struktur

 

kendali

 

aliran

  

Struktur  kendali  aliran  adalah  suatu  bentuk/struktur  yang  memiliki  peranan  khusus untuk mengatur aliran urutan pengerjaan operasi atau beberapa operasi  tertentu.  Terdapat  sejumlah  bentuk  kendali  aliran  (atau  dikenal  juga  dengan  istilah  struktur)  sebagai  berikut  (penjelasannya  masing‐masing  tedapat  pada  bagian D.1 s.d. D.7):  

begin­end 

o struktur  untuk  menjadikan  sejumlah  perintah  atau  elemen  lain  sebagai satu kesatuan  

if­then  

o struktur untuk menjalankan perintah (atau perintah‐perintah jika  disatukan  dalam  struktur begin­end)  setelah  notasi  “then”  jika  ekspresi  yang  diperiksa  (antara  notasi  “if”  dan  notasi  “then”)  berharga boolean “true”.  

if­then­else  

o struktur untuk menjalankan perintah (atau perintah‐perintah jika  disatukan  dalam  struktur begin­end)  setelah  notasi  “then”  jika  ekspresi  yang  diperiksa  (antara  notasi  “if”  dan  notasi  “then”)  berharga  boolean  “true”  dan  sebaliknya  jika  “false”  menjalankan  perintah  (atau  perintahperintah  jika  disatukan  dalam  struktur  begin­end) setelah notasi “false”.  

for­do  

o pengulangan  perintah  (atau  perintah‐perintah  jika  disatukan  dalam  struktur  begin­end)  setelah  notasi  “do”  dengan  jumlah  pengulangan  sejalan  dengan  perubahan  harga  iterator  yang  dinyatakan di antara notasi “for” dan notasi “do”.  

while­do  

o pengulangan  (iterasi)  perintah  (atau  perintah‐perintah  jika  disatukan  dalam  struktur begin­end)  setelah  notasi  “do”  selama 

(14)

ekspresi  yang  diperiksa  (antara  notasi  “while”  dan  notasi  “do”)  berharga  boolean  “true”.  Jika  pertama  kali  diperiksa  langsung  berharga “false” maka iterasi sama sekali tidak dilakukan  

repeat­until  

o pengulangan  (interasi)  perintah  atau  perintah‐perintah  antara 

notasi  “repeat”  dan  notasi  ”until”  hingga  ekspresi  yang  diperiksa  (setelah notasi “until”) berharga boolean “true”. Jadi minimal satu  kali dijalankan.  

case­of­end  

o jika  if‐then‐else  adalah  pencabangan  aliran  dengan  dua  cabang  maka struktur ini bisa memiliki pencabangan yang sangat banyak.    

• Bentuk‐bentuk  kendali  tersebut  bisa  bersarang  yaitu  suatu  bentuk  di  dalam bentuk yang lain.  

o Misalnya:  di  dalam for  I  :=  0  to  99 do  ada begin­end;  di  dalam 

begin‐end  tsb  ada if­then  dan  kemudian  di  dalamnya  ada  lagi  begin­end dst.  

• Untuk  if‐then,  if‐then‐else,  while‐do,  repeat‐until,  kriteria  pengendalian  aliran adalah suatu ekspresi.  

o Misalnya  dalam  “if  (status[I]  or  status[99‐I])  then  ...”  sebagai  ekspresi yang diperiksa adalah hasil operasi lojik antara status[I]  dengan status[99‐I] dengan operator lojik “or”.12  

 

C.7.

Algoritma

 

Utama/Fungsi/prosedur

  

• Algoritma  utama  adalah  badan  utama  dari  algoritma  sebagai  analogi  program  utama  dalam  program.  Namun  berbeda  dengan  program,  algoritma bisa jadi hanya merupakan bagian tertentu dari suatu program  bahkan bagian dari suatu fungsi/prosedur dari program tsb.  

• Fungsi/prosedur  adalah  sederetan  perintah/operasi  seperti  halnya  algoritma  itu  sendiri  yang  dipisahkan  dari  algoritma  utamanya  guna  menjadikannya sebagai subfokus dalam algoritma. Dalam suatu algoritma  jika apa yang dikerjakan dalam fungsi/prosedur itu dapat dianggap jelas  maka  fungsi/prosedur  tersebut  tidak  dituliskan  atau  digantikan  dengan  kalimat bahasa sehari‐hari.  

• Pascal  menyediakan  sejumlah  fungsi/prosedur  yang  siap  pakai  (tanpa  pemrogram menuliskan lagi fungsi/prosedur itu), dalam Pseudopascal ini  beberapa  fungsi/prosedur  Pascal  tertentu  yang  sangat  umum  juga  digunakan.  

o Misalnya  read  (untuk  membaca  masukan),  readln  (membaca  masukan termasuk karakter “end of line”), write (untuk mencetak  keluaran), writeln (mencetak keluaran dan suatu “end of line”), eof  (untuk  memeriksan  apakah  masukan  sudah  mencapai  “end  of  file”).  

      

12  Dalam  Pascal  ekspresi  tidak  harus  dibatasi  tanda  kurung  sementara  dalam  C  harus.  Dalam 

contoh  ini  ekspresi  tsb  dibatasi  dengan  tanda  kurung.  Walaupun  dalam  Pseudopascal  tidak  diharuskan,  untuk  situasi  tertentu  disarankan  adanya  tanda  kurun  tsb  untuk  membantu  memperjelas penulisan algoritma. 

(15)

• Mengikuti  definisi  Pascal,  fungsi  dibedakan  dari  prosedur  dari  adanya  harga  yang  dihasilkan  oleh  fungsi  sebagai  akibat  dari  pemanggilan/penggunaan fungsi tersebut.  

• Suatu  fungsi/prosedur  bisa  didefinisikan  dengan  sejumlah  argumen  (istilah  lain:  parameter).  Pada  saat  pemanggilan  fungsi/prosedur  yang  bersangkutan,  argumen  ini  jika  ada  dituliskan  di  dalam  tanda  kurung  setelah nama fungsi/prosedur itu.  

• Ada  dua  jenis  argumen:  argumen  bersifat  “call  by  value”  dan  argumen  “call  by  reference”.  Untuk  “call  by  value”  dalam  pemanggilannya  yang  dikirimkan  ke  fungsi/prosedur  adalah  harganya  sementara  “call  by  reference” yang dikirimkan adalah variabel itu sendiri. Perbedaan kedua  argumen  ini  dinyatakan  di  daftar  argumen  di  bagian  definisi  fungsi  dengan mengawali nama variabel ybs dengan notasi “var”.  

o Misalnya: fungsi kubik di atas memerlukan satu argumen ‘call by  value”  dan  prosedur  sw  memerlukan  dua  argumen  “call  by  reference”.  

• Untuk “call by value” selain suatu harga literal, harga suatu variabel, bisa  juga hasil dari suatu operasi aritmatis atau ekspresi lojik.  

o Misalnya  “kubik(Tbl[I,1] – t0)”  memanggil  fungsi  kubik  dengan  argumen  adalah  harga  yang  dihasilkan  dari  operasi  “Tbl[I,1] – t0”.  

• Khususnya  pada  pemanggilan  fungsi  yang  akan  menghasilkan  harga  setelah  pemanggilan  itu  dilaksanakan,  harga  hasilnya  itu  kemudian  menggantikannya di dalam operasi/ekspresi yang bersangkutan.  

o Misalnya: dalam “sum.x := sum.x + kubik(Tbl[I,1] – t0)”  setelah  pemanggilan  “kubik(Tbl[I,1] – t0)”,  harga  yang  dihasilkannya  beserta  harga  dalam  sum.x  dijumlahkan  dan  hasilnya diassign kembali ke sum.x  

• Untuk  “call  by  reference”  argumen  di  bagian  yang  melakukan  pemanggilan  hanya  dapat  berupa  variabel  saja  dan  ke  variabel  itu  di  bagian  fungsi/prosedur  jika  mengalami  perubahan  isi  (walau  dengan  nama variabel yang lain), saat kembali ke pemanggil perubahan itu tetap  berlaku. 

o Misalnya: dalam pemanggilan “sw(sum.x, sum.y)” variabel sw.x  dan sw.y saat berada di prosedur sw dengan nama baru a dan b  akan  dipertukarkan,  sehingga  saat  kembali  isi  sw.x  dan  sw.y  sudah tertukar.  

   

D.

Aturan

aturan

 

Penulisan

 

Struktur

 

Kendali

 

Aliran

  

Secara  umum  aturan‐aturan  penulisan  struktur  kendali  aliran  ini  mengikuti  aturan  bahasa  Pascal.  Seperti  hanya  Pascal  (dan  bahasa‐bahasa  lain,  penulisan  notas‐notasi,  perintah‐perintah  atau  ekspresi‐ekspresi  tidak  harus  dibaris  tersendiri/tertentu; bisa saja beberapa elemen imi dituliskan bergabung dengan  baris yang sama. Namun, demi kejelasan dalam pembacaan algoritma beberapa  kebiasaan dilakukan (tapi tidak harus).  

(16)

• Perintah yang ditulis dalam bahasa sehari‐hari dituliskan tidak dicampur  dalam satu baris dengan elemen algoritma yang lain.  

• Indentasi yang sama untuk blok struktur yang sama sangat disarankan..    

D.1.

Struktur

 

begin

end

  

• Perintah‐perintah  dalam  satu  deret  yang  menjadi  satu  kesatuan  struktural  (satu  blok)  dituliskan  di  antara  notasi begin  dan  notasi end.  Perintah yang ditulis dalam notasi bahasa Pascal dituliskan dengan tanda  separator  “;”  di  akhir  setiap  perintah  sementara  perintah  dalam  bahasa  sehari‐hari dituliskan tanpa tanda separator tsb.  

• Jika  terdapat  struktur  lain  di  antara  satu begin­end,  maka  struktur  itu  diperlakukan  sebagaimana  perintah  yang  ditulis  dalam  bahasa  pascal  (diakhiri separator “;”).  

 

D.2.

Strktur

 

if

then

  

• Kondisi yang akan diperiksa dalam struktur ini adalah ekspresi lojik yang  diletakan  di  antara  notasi if  dan  notasi then.  Perintah  (atau  perintah‐ perintah)  yang  akan  dilakukan  jika  ekspresi  lojik  itu  berharga  boolean  true diletakkan setelah notasi then.  

• Jika  lebih  dari  satu  perintah  maka  perintah‐perintah  itu  dijadikan  satu  kesatuan struktur dengan tambahan notasi begin­end yang mengapitnya.    

D.3.

if

then

else

  

• Seperti  pada if­then,  kondisi  yang  akan  diperiksa  dalam  struktur  ini  adalah  ekspresi  lojik  yang  diletakan  di  antara  notasi if  dan  notasi then.  Perintah (atau perintah‐perintah) yang akan dilakukan jika ekspresi lojik  itu  berharga  boolean true  diletakkan  setelah  notasi  then  dan  perintah  (atau  perintah‐perintah)  yang  akan  dijalankan  jika  berharga  false  diletakkan setelah notasi else.  

• Baik  untuk then  maupun  untuk else,  jika  lebih  dari  satu  perintah  maka  masingmasing  perintah‐perintah  itu  dijadikan  kesatuan‐kesatuan  struktur dengan tambahan notasi begin­end yang mengapitnya (masing‐ masing).  

 

D.4.

for

do

  

• Di  antara  notasi  for  dan  notasi  do  ekspresi  iteratif  (ekspresi  yang  menyatakan bagaimana iterasi itu harus terjadi) dituliskan. 

o Penulisan ekspresi iteratif berisi 

o nama  variabel  iterator  (variabel  integer  yang  harganya  akan  berubah‐ubah sejalan dengan iterasi yang terjadi), 

o setelah tanda assignment dituliskan harga awal iterator (yang bisa  merupakan suatu harga literal atau ekspresi aritmatis),  

o notasi  to  atau  downto  yang  menyatakan  arah  harga  iterator 

(17)

dilakukan  (yang  bisa  merupakan  suatu  harga  literal  atau  suatu  ekspresi aritmatis), dan  

o jika kenaikan/penurunan bukan bilangan 1, harga perubahan yang  terjadi pada iterator setiap satu iterasi dilalui dinyatakan dengan  notasi step dan diikuti harga perubahannya (misalnya “step 2”).  

• Setelah notasi do perintah (atau perintah‐perintah) yang akan dilakukan  pada  setiap  kali  iterasi  dituliskan.  Jika  lebih  dari  satu  perintah  maka  perintah‐perintah itu dijadikan satu kesatuan struktur dengan tambahan  notasi begin­end yang mengapitnya.  

 

D.5.

while

do

  

• Kondisi yang akan diperiksa adalah ekspresi lojik yang diltakan di antara  notasi while dan notasi do. Perintah (atau perintah‐perintah) yang akan  dilakukan  secara  berulang‐ulang  selama  ekspresi  lojik  itu  berharga  boolean true diletakkan setelah notasi do.  

• Jika  lebih  dari  satu  perintah  maka  perintah‐perintah  itu  dijadikan  satu  kesatuan struktur dengan tambahan notasi begin‐end yang mengapitnya.    

D.6.

repeat

until

  

• Kondisi  yang  akan  diperiksa  adalah  ekspresi  lojik  yang  diltakan  setelah  notasi  until.  Perintah  (atau  perintah‐perintah)  yang  akan  dilakukan  dan  kemudian diulang‐ulang selama ekspresi lojik itu berharga boolean false  diletakkan antara notasi repeat dan notasi until.  

 

D.7.

case

of

end

  

• Hal  yang  akan  diperiksa  adalah  variabel  atau  ekspresi  arinmatis  yang  memiliki  harga‐harga  tertentu.  Variabel  atau  ekspresi  aritmatis  itu  diletakkan di antara notasi case dan notasi of.  

• Di  antara  notasi  of  dan  notasi  end  terdaftar  sejumlah  kemungkinan  harga/kasus dan perintah (atau perintah‐perintah) yang akan dijalankan  untuk kemungkinan harga tersebut.  

• Satu  harga  literal13  yang  mungkin14  diletakkan  di  sebelah  kiri,  diikuti  notasi  “:”  (titik  dua)  lalu  diikuti  oleh  perintah  yang  akan  dijalankan  selanjutnya sebuah “;” (titik koma)15.   • Jika ada beberapa perintah yang akan dijalankan maka perintah‐perintah  itu dijadikan satu kesatuan struktur dengan tambahan notasi begin­end  yang mengapitnya.            13 Dalam Bahasa C, sebelum harga literal tsb, ada notasi “case” mendahuluinya. 

14  Dalam  Pascal  harga  yang  mungkin  ini  bisa  dinyatakan  sebagai  range  harga  yang  mungkin 

misalnya bilangan‐bilangan antara 1 sampai dengan 10 dengan menulisnya sebagai “1..10” atau  beberapa  kemungkinan  harga  dengan  dipisahkan  koma  misalnya  “2,  5,  9”.  Hal  ini  tidak  ada  di  bahasa C sehingga dalam Pseudopascal ini hal itu dihindari. 

15  Dalam  bahasa  C,  harus  diikuti  notasi  “break;”  karena  tanpa  itu  maka  alirannya  jadi  sangat 

(18)

E.

Aturan

aturan

 

Penulisan

 

Prosedur

 

dan

 

Fungsi

  

Secara  umum  aturan  kerangka  penulisannya  mengikuti  aturan  dalam  bahasa  Pascal  kecuali  beberapa  hal  termasuk  bahwa  badan  algoritma  di  dalam  fungsi  atau  prosedur  sesuai  dengan  pembahasan  algoritma  di  atas  (memungkinkan  baris  perintah  dalam  bahasa  sehari‐hari,  perintah‐perintah  rinci  yang  bukan  fokus diperlihatkan sebagai baris “….”. Seperti halnya nama variabel nama‐nama  prosedur  maupun  function  bersifat  case  insentitive  namun  demi  untuk  memberikan kejelasan dalam pembacaan, penamaan prosedur/function maupun  variabel direkomendasikan untuk konsisten di setiap bagian algoritma.  

 

Dalam  bahasa  Pascal,  suatu  prosedur/function  dapat  memiliki  prosedur/function  lokalnya  sendiri.  Dalam  pseudocode  ini  demi  kompatibilitas  dengan bahasa lain, hal itu ditiadakan.  

 

E.1.

Prosedur

 

Mengawali  suatu  prosedur  notasi  procedure  dituliskan  dan  diikuti  nama  prosedur.  Jika  ada  argumen,  mana  argumen‐argumen  didaftarkan  di  dalam  tanda  kurung  dan  setiap  argumen  tersebut  dituliskan  dengan  dipisahkan  dengan  tanda  koma  (“,”).  Dalam  bahasa  Pascal  jenis  variabel  harus  dispesifikasikan,  namun  dalam  Pseudopascal  ini  seandainya  cukup  jelas  maka  demi mempersingkat, jenis variabel bisa dihilangkan. Untuk menunjukkan suatu  argumen bersifat pass‐by‐reference maka di depan nama argumen itu dituliskan  notasi var (seperti pada bahasa Pascal).  

 

Berikutnya  jika  ada  variabel  lokal  yang  perlu  ditonjolkan  didaftarkan  (beserta  jenis variabel tersebut) setelah notasi var. Badan algoritma prosedur dituliskan  di antara begin dan end dan diikuti tanda “;” (titik koma).  

 

E.2.

Fungsi

  

Mirip  seperti  pada  prosedur  kecuali  tiga  hal  berikut  ini.  Pertama,  yang  mengawali fungsi adalah notasi function. Kedua, setelah nama (serta argumen‐ argumennya yang dituliskan di dalam tanda kurung), suatu notasi “:” (titik dua)  dan  jenis  harga  yang  akan  dihasilkan  fungsi  dituliskan.  Ketiga  dalam  badan  algoritma  nama  fungsi  digunakan  seolah  suatu  variabel  penerima  assignment  yang apabila algoritma dalam fungsi selesai dijalankan maka harga terakhir yang  diberikan padanya adalah harga yang akan dikembalikan ke algoritma pemanggil  fungsi ini. Jika nama fungsi berada sebagai operand dari suatu operasi maka yang  terjadi adalah pemanggilan fungsi terhadap disinya sendiri yang dikenal dengan  istilah rekursif.  

(19)

MATERI

 

UJI

 

OLIMPIADE

 

SAINS

 

BIDANG

 

INFORMATIKA

 

Contoh‐contoh dan Pembahasan 

 

A.

Pengantar

 

1.

Olimpiade

 

Sains

 

Nasional

 

Dalam  beberapa  tahun  terakhir  Departemen  Pendidikan  Nasional  telah  meyelenggarakan  Olimpiade  Sains  Nasional  (OSN)  yang  di  antaranya  terdapat  bidang  Informatika.  Pemilihan  peserta  yang  akan  bertanding  di  OSN  dilakukan  melalui seleksi bejenjang dan serentak di seluruh Indonesia, yaitu:  ¾ tingkat kabupaten/kota, kemudian  ¾ tingkat provinsi.  Tahun 2006, untuk bidang informatika di tingkat provinsi tercatat diikuti 1480  siswa peserta seleksi sementara di tingkat kabupaten/kota tentunya sekian kali  lebih banyak lagi (estimasi kasar ada di atas 8 ribuan siswa1). Hasil dari seleksi  tingkat propinsi menentukan siapa yang akan menjadi salah seorang dari ke 90  siswa peserta OSN.    

Selain  sebagai  ajang  prestasi  tingkat  nasional,  OSN  bertujuan  juga  untuk  mendapatkan  calon  peserta  pembinaan  dan  seleksi  lebih  lanjut  hingga  dipilih  empat  siswa  terbaik  alias  anggota  TOKI  (Tim  Olimpiade  Komputer  Indonesia).  Mereka  itulah  yang  akan  mewakili  negara  dan  bangsa  untuk  bertanding  di  tingkat dunia yaitu International Olympiad in Informatics (IOI).  

2.

International

 

Olympiad

 

in

 

Informatics

 

IOI  sendiri  adalah  lomba  yang  menguji  kemampuan  peserta  dalam  problem  solving dengan pemrograman komputer2. Setiap peserta dalam waktu yang amat  terbatas  harus  mengerjakan  sejumlah  masalah  yang  diberikan,  mulai  dari  memahami  masalahnya,  merancang  solusinya,  dan  memindahkan  solusinya  dengan  menuliskannya  sebagai  suatu  program  komputer.  Pemecahan  masalahnya  harus  komprehensif  (meliputi  berbagai  kasus)  yang  harus  diidentifikasi  sendiri  oleh  setiap  peserta,  programnya  harus  efisien  saat  dijalankan  (dalam  waktu  yang  singkat  untuk  setiap  kasus),  dan  tentunya  menghasilkan keluaran yang sesuai dengan yang diharapkan.  

 

Kemampuan  dalam  coding  (menulis  program)  hanyalah  salah  satu  aspek  saja,  yang  sulit  adalah  dalam  melakukan  problem  solving  itu  sendiri  termasuk  memilih  metodologi  yang  tepat.  Pemilihan  metodologi  akan  menentukan  efisiensi dari program yang dibuat saat dijalankan. 

      

1  Ini  hanya  dugaan  saja  karena  di  tingkat  kabupaten/kota,  penyelenggaraan  beserta  proses 

seleksi diserahkan ke masing‐masing kabupaten/kota yang bersangkutan sehingga data peserta  tidak tercatat dengan lengkap. Sementara, di tingkat propinsi, proses seleksi di lakukan di pusat  sehingga bisa diketahui jumlah keseluruhan peserta. 

2  Harap  bagian  yang  digarisbawahi  tersebut  dipahami  secara  lengkap;  bukan  HANYA  menguji 

kemampuan  membuat  program  komputer,  bukan  pula  HANYA  menguji  kemampuan  memecahkan masalah, tetapi KEDUANYA!!! 

(20)

3.

Metoda

 

dan

 

Proses

 

Seleksi

 

di

 

OSN

 

Proses  seleksinya  idealnya  adalah  mengacu  ke  IOI.  Namun  berbeda  dengan  bidang  OSN  lain  seperti  Fisika,  Matematika,  Kimia  dan  Biologi,    bidang  informatika khususnya pemrograman belum menjadi pelajaran resmi. Kalaupun  ada, hanya di sekolah‐sekolah tertentu saja dan itupun belum tentu mengajarkan  pemrograman.  Oleh  sebab  itu,  materi  uji  disesuaikan  agar  peserta  potensial  secara  akademis/skolastik    tinggi  masih  dapat  terjaring  untuk  diberikan  pembinaan yang intensif. Penyesuaiannya adalah mengurangi aspek yang sangat  bergantung  pada  ketrampilan  peserta  dalam  pemrograman  dan  sebagai  gantinya, digunakan materi yang biasanya disebut sebagai materi uji “analisa dan  logika”.  Pada  dasarnya  materi  ini  menguji  potensi  akademis/skolastik  peserta  yang menjadi bagian terpenting dalam kemampuan problem solving peserta.  

4.

Metoda

 

dan

 

Proses

 

Seleksi

 

pra

 

OSN

 

Di  tingkat  kabupaten/kota  serta  propinsi  komponen  uji  pemrograman  tidak  mungkin  untuk  diadakan  mengingat  sejumlah  alasan  tertentu  sehingga  uji  pemrograman  disubstitusi  dengan  materi  uji  kemampuan  algoritmika.3  Selain  itu, metoda pengujiannya pun tidak bisa dihindari bersifat test obyektif (pilihan  ganda).  Metoda  ini  memang  banyak  sekali  kelemahannya  yaitu  memungkinkan  jawaban  asal  tapi  benar,  namun,  memungkinkan  pemeriksaan  yang  segera.  Dampak  negatif  tersebut  bisa  dikurangi  dengan  pembuatan  soal  dan  pilihan  jawaban yang dirancang dengan matang.  

 

5.

Klasifikasi

 

Soal

soal

 

Nonprogramming

 

Secara  umum  materi  uji  tertulis  terbagi  atas  tiga  komponen  utama:  materi  uji  analitika dan logika, materi uji aritmatika, dan materi uji algoritmika.  

¾ Materi  analitika  dan  logika  bertujuan  untuk  menguji  potensi  akademis  (skolastik)  peserta  namun  sedapat  mungkin  memiliki  relevansi  yang  tinggi  dengan  problem  solving  dan  elemen  penting  dalam  menguasai  pemrograman  komputer.  Kemampuan  ini  merupakan  faktor  penting  dalam  memahami  persoalan  yang  diberikan  dan  merancang  algoritma  pemecahan masalahnya. 

¾ Materi  arimatika  sebenarnya  sejalan  dengan  analitika  dan  logika  di  atas  karena soal aritmatika disini bukan sekedar menguji ketrampilan dalam  hitung‐menghitung, tetapi lebih pada cara berpikir yang logis dan analitis  namun dengan soal bertemakan aritmatika 

¾ Materi  algoritmika  bertujuan  untuk  menguji  kemampuan  peserta  dalam  memahami  dan  menyusun  suatu  algoritma.  Aspek‐aspek  yang  terkait  dengan  pengetahuan  dan  bahasa  pemrograman  direduksi  seminimal  mungkin ke tingkat pseudocode.  

 

      

3 Uji pemrograman di tingkat provinsi, apalagi di tingkat kabupaten/kota, masih perlu beberapa 

(21)

B.

Materi

 

Uji

 

Aritmatika

 

Sekali  lagi,  walaupun  mengambil  topik  mengenai  aritmatika,  aspek  terpenting  dari  materi  ini  bukan  pada  hitung  menghitungnya  tetapi  pada  uji  kemampuan  analitisnya.  Aspek‐aspek  analitis  dalam  persoalan  aritmatika  dijelaskan  pada  bagian berikut ini. 

1.

Mampu

 

Membentuk

 

Model

 

Aritmatika/Matematika

 

serta

 

melakukan

 

deduksi/induksi

 

Model

 

Dalam problem solving, seringkali diperlukan tahapan pemodelan masalah yang  sebagian  menggunakan  model  matematika/aritmatika  dan  menyederhana‐ kannya sehingga menjadi model yang lebih sederhana dan siap dikomputasikan  dalam bentuk algoritma. Model yang tidak tepat berakibat pada kegagalan dalam  pemecahan masalah. 

 

Contoh:  

Uang  Amir  lebih  banyak  dari  uang  Ali.  Jika  dijumlahkan  uang  keduanya  lebih  dari  50  ribu  rupiah,  sementara  selisih  uang  Amir  dengan  uang  Ali  lebih dari 30 ribu rupiah. Berapakah kemungkinan uang Amir yang paling  tepat?   Model permasalahan: Uang Amir = x, Uang Ali = y, dan dari deskripsi di  atas  ¾ Pers‐I: x > y  ¾ Pers‐II: x+y > 50000  ¾ Pers‐III: |x‐y| > 30000  Dari Pers‐I dan Pers‐III: menghasilkan Pers‐IV:  x‐y > 30000  Dari Pers‐II dan Pers‐IV: jika dijumlahkan menghasilkan 2x>80000.  Maka, x > 40000 

2.

Memahami

 

Sifat

sifat

 

Bilangan

 

Untuk sejumlah masalah, sifat‐sifat dari bilangan harus dipahami secara logis   

Contoh:  

Jika n dan p adalah dua bilangan bulat, dan n + p berharga ganjil, manakah  dari berikut ini bil ganjil?   (A) n – p + 1    (B) np    (C) np– 1    (D) 3+ 5n    (E) (p – n)(– p)      

A  bukan,  karena  (n+p)  adalah  ganjil  maka  dari n  dan p  salah  satu  ganjil  dan  yang  lain  genap.  Selisih  antara  n  dan  p  pasti  ganjil  sehingga  jika  ditambah 1 menjadi genap.  

B  bulan  karena  perkalian  antara  suatu  bilangan  genap  dengan  bilangan  apapun akan menjadi genap.  

C  bukan  karena  pangkat  bulat  positif  berapapun  dari  bilangan  genap,  tetap genap, dan ganjil tetap ganjil, kemudian ganjil ditambah genap dan  dikurang ganjil menjadi genap.  

(22)

D bukan karena pangkat bulat positif berapapun dari bilangan ganjil tetap  bilangan ganjil, dan jumlah dua bilangan ganjil menjadi genap. 

E  benar,  karena  perkalian  antara  dua  bilangan  ganjil  menghasilkan  bilangan ganjil. 

3.

Mengkaitkan

 

dengan

 

Konteks

 

Masalah

 

Konteks dari soal perlu diperhatikan dan konteks tersebut kadang‐kadang hanya  tersirat saja.  Yang dimaksud dengan konteks di sini adalah pemahaman umum  akan sesuatu yang sewajarnya diketahui pula.     Contoh:   jika lonceng berdentang setiap 1 detik, dalam jumlah dentang yang sesuai  waktu yang ditunjukkan, maka tepat pada pukul berapa dentang terakhir  yang menunjukkan jam 6? Apakah pukul 6:00:06?   Salah, seharusnya pukul 6:00:05 karena dentang‐dentang tsb pada pukul  6:00:00, pukul 6:00:01, pukul 6:00:02, pukul 6:00:03, pukul 6:00:04 dan  pukul 6:00:05!! Konteks disini adalah dentang pertama terjadi pada tepat  pukul 6, dan penomoran detik/menit dimulai dari 0, 1, ... dst.  

4.

Memahami

 

Formula

 

Rekursif

 

Banyak  masalah  pemodelan  dengan  tingkat  kesulitan  yang  tinggi  atau  pemrogramannya  sendiri  memerlukan  pemecahan  dengan  algoritma  rekursif.  Pemahaman  fungsi  rekursif  membantu  dalam  pemahaman  memahami  bagaimana bekerjanya algoritma rekursif.  

 

Contoh:  

Jika  didefinisikan f(n)  = n f(n–1)  untuk  setiap n  >  0  dan f(0)  =  1,  maka  berapakah f(10)/(f (7) x f(6))? 

Pahami perilaku fungsi rekursif tsb, sbb,  

f(n)  = n.f(n–1)  = n.(n–1).f(n–2)  = n.(n–1).(n–2).f(n–3)  =  ...    = n(n–1)(n– 2)(n–3)....2.1 = n!  

Sehingga, f(10) = 10! dan f(7) = 7! serta f(6) = 6!.  10!/7!  = (10.9.8.7.6.5.4.3.2.1)/(7.6.5.4.3.2.1)  = 10.9.8  Dan (10.9.8) /(6.5.4.3.2.1) = 1 

 

5.

Eksplorasi

 

dalam

 

Masalah

 

Kombinatorik

 

Dalam problem solving seringkali masalah yang diberikan bersifat kombinatorik  (mendapatkan  setiap  kemungkinan  kombinasi/permutasi  jawaban).  Untuk  memecahkannya  terkadang  seluruh  kemungkinan  tersebut  harus  diperiksa  untuk mendapatkan pemecahan yang umum. 

Contoh:  

Jika  diketahui  dalam  perkalian  matriks  A  (mxn)  dengan  B  (nxp)  diperlukan  biaya  mnp.  Sementara  untuk  perkalian  tiga  matriks  A.B.C  dengan  A(mxn),  B(nxp)  dan  C(pxq)  ternyata  terdapat  dua  kemungkinan  biaya yang bergantung pada urutannya:  

‐ Urutan (A.B).C (yaitu A dikali B dahulu kemudian dikali C), dan   ‐ urutan A.(B.C) (yaitu B dikali C dahulu kemudian dikali A).  

(23)

Urutan  (A.B).C  memerlukan  harga mnp  + mpq  sementara  urutan  A.(B.C)  memerlukan harga npq + mnq. Kedua harga bisa berbeda sesuai dengan  harga‐harga mnpq tsb. Pertanyaannya, untuk perkalian empat matriks  A.B.C.D dengan A(10x4), B(4x15), C(15x2), dan D(2x20) manakah urutan  dengan biaya minimum?   

Kemungkinan‐kemungkinan  urutan  adalah  (diperoleh  dengan  permutasi  ketiga tanda perkalian “.”):  - urutan (((A.B).C).D), biaya 10x4x15+10x15x2+10x2x20 = 1300  - urutan ((A.B).(C.D)), biaya10x4x15+15x2x20+10x15x20 = 4200  - urutan ((A.(B.C)).D), biaya 4x15x2+10x5x2+10x2x20 = 600  - urutan (A.((B.C).D)), biaya 4x15x2+4x2x20+10x4x20 = 1080  - urutan ((A.B).(C.D)), biaya 15x2x20+10x4x15+10x15x20 = 4200  - urutan (A.(B.(C.D))), biaya 15x2x20 + 4x15x20+10x4x20 = 4200   

6.

Berpikir

 

secara

 

“Cerdas”

 

Jika  menghadapi  suatu  masalah  komputasi  yang  kelihatannya  tidak  mungkin,  pasti  ada  sesuatu  di  balik  itu!!  Dapatkanlah  dengan  bantuan  pemahaman  akan  sifat‐sifat  operasi  aritmatika  untuk  mendapatkan  model  matematis  yang  lebih  sederhana. 

 

Contoh 1:  

Berapa  digit  terakhir  dari  22003?    Apakah  anda  ingin  menghitungnya  sendiri  (secara  manual)?  Tentu  tidak,  pasti  ada  penyederhanaannya.  Dengan mengubah n=1, 2, 3, …, dst, perhitungan 2n menghasilkan deret 1,  2,  4,  8,  16,  32,  64,  128,  256,  512,  1024,  2048,  4096,  dst.  Amati  angka  terakhir dari setiap bilangan, kita mendapatkan  perulangan dari 6 – 2 – 4  – 8 pada n mod 4 = 0, 1, 2, 3. Jadi jika n=2003, diperoleh 2003 mod 4 = 3,  yaitu memiliki digit terakhir 8.     Contoh 2:  

Ketiga  digit  awal  dari  hasil  perkalian  22002  x  52005  jika  dijumlahkan  adalah?  Ini  juga  tidak  mungkin  dihitung  manual.  Perhatikan  bilangan  dasarnya  2  dan  5  yang  jika  dikalikan  menjadi  10.  Karena  setiap  pasang  faktor  2  dan  5  menghasilkan  10  berarti  hanya  menambah  0  di  digit  terkanan. Ada 2002 pasang faktor‐faktor tsb sehingga 22002 x 52005 = 53 x  102002= 125 102002. Penjumlahan tiga digit awal 1+2+5=8    Contoh 3:   Hitunglah (80! x 38!) /(77! x 40!).   Menggunakan sifat sbb untuk a dan b bulat positif, a > b, maka a!/b! = a.(a  – 1).(a – 2)…(b + 1). Maka   (80! x 38!) /(77! x 40!) = (80!/77!) / (40!/38!)             = (80x79x78) / (40x39)          = (80/40) x (78/39) x 79          = 2 x 2 x 79 = 316   yang dapat dihitung tanpa kalkulator.   

(24)

C.

Materi

 

Uji

 

Analitika

 

dan

 

Logika

 

Dalam pemodelan masalah pemrograman selain dengan model aritmatika, juga  keterhubungan  antara  entitas/aspek  dalam  masalah  perlu  dipahami  secara  relational untuk mendapatkan model algoritmis yang lebih akurat. Kemampuan  analitis  tsb  diperlukan  dalam  menghasilkan  model  keterhubungan/relasional  tsb.  

 

Sayangnya  tidak  ada  metodologi  yang  sistematik  karena  pada  dasarnya  sangat  bergantung  pada  kreatifitas  peserta  uji.  Namun,  ada  kesamaan  umum  dalam  pemecahan masalahnya, yaitu  

¾ penggunaan  model  diagram  sangat  membantu  untuk  menggambarkan  keterhubungannya secara menyeluruh berdasarkan keterhubungan yang  fragmental  (dari  pernyataan‐pernyataan  terpisah  atau  asumsi‐asumsi  yang dibuat),  

¾ keterhubungan  itu  sendiri  seringkali  bersifat  implisit  sehingga  perlu  pemahaman  yang  hati‐hati  dan  perlu  pemahaman  akan  gaya  bahasa  “penceritaannya”,  

¾ khususnya untuk asumsi yang dibuat segera dieliminasi jika kontradiksi  dengan model diagram, dan  

¾ model  diagram  yang  telah  dibentuk  perlu  diverifikasi  (dikaji  ulang)  dengan  pernyatan‐pernyataan  yang  diberikan  agar  terjaga  konsistensi,  dan 

¾ Selalu berpikir adanya kemungkinan yang tertinggal atau tersamar yang  belum dikaji ke dalam model 

 

Contoh 1: 

Terdapat  7  bilangan  bulat  A,  B,  C,  D,  E,  F,  dan  G  yang  jika  diurutkan  membentuk  deret  bilangan  cacah  berurutan  (misalnya  4,5,6,…)  dengan  pernyataan‐pernyataan berikut:  (1) D berharga 3 kurangnya dari A   (2) B adalah angka di tengah jika semua diurutkan   (3) Kurangnya F dari B = kurangnya D dari C  (4) G lebih besar dari F   Jika diurutkan, urutannya adalah?    Untuk memudahkan urutan tsb misalnya [x1–x2–x3–x4–x5–x6–x7]  Dari perny. (2) diketahui x4=B, maka menjadi [x1–x2–x3–B–x5–x6–x7]  Dari perny. (3) F berada di ruas sebelah kiri B (bisa x1, x2 atau x2).  Jika F=x1 maka   D adalah x2 dan C adalah x5 ([F–D–x3–B–C–x6–x7]), atau   D adalah x3 dan C adalah x6 ([F–x2–D–B–x5–C–x7]).  

Akan  tetapi  dari  perny.  (1)  membatalkan  kedua  kemungk.  asumsi  ini  karena A harus berada 3 posisi di kanan D yang sudah ditempati C.     Jika F=x2 maka   D adalah x1 dan C adalah x3 ([D–F–C–B–x5–x6–x7]), atau   D adalah x3 dan C adalah x5 ([x1–F–D–B–C–x6–x7]), atau   D adalah x5 dan C adalah x7 ([x1–F–x3–B–D–x6–C]). 

(25)

Akan tetapi dari perny. (1) hanya yang kedua yang mungkin karena yang  pertama  posisi  A  =  posisi  B  atau  yang  ketiga  posisi  A  berada  di  luar  (setelah x7). Untuk sementara [x1–F–D–B–C–A–x7] dicatat sebagai salah  satu solusi.    Jika F=x3 maka   D adalah x1 dan C adalah x2 ([D–C–F–B–x5–x6–x7]), atau   D adalah x5 dan C adalah x6 ([x1–x2–F–B–D–C–x7]), atau   D adalah x6 dan C adalah x7 ([x1–x2–F–B–x5–D–C]). 

tetapi  dari  (1)  semua  tidak  mungkin  (yang  pertama  posisi  A  =  posisi  B,  kedua yang lain posisi A ada di luar). 

Jadi ternyata hanya tinggal satu kemungkinan yaitu [x1–F–D–B–C–A–x7].  Dari  perny.  (4)  diperoleh  G=x7,  sehingga  diperoleh  juga  E=x1.  Hasilnya  diketahui urutannya adalah E, F, D, B, C, A, G 

 

Contoh 2: 

Delegasi‐delegasi dari negara W dan negara R duduk berhadap‐hadapan  pada  meja  perundingan.  Masing‐masing  delegasi  terdiri  atas  seorang  ketua,  dua  atase  militer  dan  dua  wakil  kamar  dagang  negara  masing‐ masing.  Delegasi  W  beranggotakan  A,  B,  C,  D,  dan  E.  Delegasi  R  beranggotakan F, G, H, I, dan J. Masing‐masing delegasi berada pada sisi‐ sisi  memanjang  berlainan  (satu  negara  pada  sisi  yang  sama  dan  ketua  duduk  di  tengah  delegasinya).    Batasan  dalam  mengatur  urutan  duduk  mereka:   (1) Delegasi W menempatkan A dan B di kedua ujung barisannya.   (2) Kuping kanan G tuli shg ia harus paling kanan dari delegasi R.   (3) Baik D maupun F bukan ketua.   (4) Para atase militer W, salah seorangnya B, didudukkan berdampingan,  dan tidak ada satupun yang berseberangan dengan atase militer R   (5) G bukan atase militer.   (6) C wakil dari kamar dagang, duduk berseberangan dengan H.     Manakah yang paling mungkin mengenai F berikut?  (A) Wakil kamar dagang yang duduk di sebelah I   (B) Wakil kamar dagang yang duduk di sebelah H   (C) Wakil kamar dagang yang duduk berseberangan dengan B   (D) Atase militer yang duduk di sebelah I   (E) Atase militer yang duduk di sebelah J     Seperti pada contoh sebelumnya, dibuat diagram sbb  x1–x2–x3–x4–x5  negara W  y1–y2–y3–y4–y5 negara R  Dari (1) kemungkinan {x1,x5} adalah {A,B} atau {B,A}  Dari (2) maka y5=G yang karena pernyataan (4) dan (5) (G bukan a.m dan  B adalah a.m) menyebabkan x5=B, sehingga (atase militer dengan bold)  A –x2–x3–x4– B    y1–y2–y3–y4–G     Dari pernyataan (6) dan (4) diperoleh C = x2 dan y2 = H, sehingga 

(26)

A –C –x3–x4– B   y1–H –y3–y4–G   Dari pernyataan (3) dan diagram di atas D = x4 dan F = y1 atau y4  A –C –E –D –B    y1–H –y3–y4– G   Jadi tinggal 2 kemungkinan F=y1 (atase militer), atau F=y4 (wakil kamar  dagang).    Jika  atase  militer  maka  (D)  dan  (E)  salah  karena  sebelah  y1  adalah  H.  Jika  wakil  kamar  dagang  maka  (B)  salah  karena  H  atase  militerdan (C) salah karena B ada di depan G. Jadi tinggal pilihan (A) yang  paling  mungkin.  (Note:  ini  bukan  satu‐satunya  kemungkinan.  Kemungkinan lainnya masih ada tapi tidak ada di kelima pilihan itu).   

D.

Materi

 

Uji

 

Algoritmika

 

Sebagaimana  dalam  penjelasan  awal,  materi  uji  algoritmika  adalah  selain  menguji  kemampuan  dalam  memahami  suatu  algoritma  yang  diberikan,  juga  menguji  kemampuan  merancang  suatu  algoritma  pemecahan  masalah  yang  diberikan.  Namun,  untuk  tingkat  OSK/OSP  pada  saat  ini  belum  memungkinkan  untuk  dilakukan  terutama  terkendala  masalah  teknis  pemeriksaan  kebenaran  jawabannya.  Kemampuan  dalam  perancangan  tersebut  baru  akan  diujikan  kemudian di tingkat OSN.  

 

Karena  pada  tingkat  OSK/OSN  ini  peserta  harus  dapat  memahami  algoritma  yang  diberikan  maka  hal  yang  penting  untuk  dikuasai  adalah  penulisan  notasi  algoritma  yang  digunakan  oleh  soal‐soal.  Penulisan  algoritma  mungkin  menggunakan  suatu  cerita  (bahasa  sehari‐hari)  atau  mengikuti  notasi/tatacara  yang  didefinisikan  sebagai  pseudopascal4.  Proses  dari  algoritma  umumnya  bersifat prosedural/imperatif saja5

 

Aspek‐aspek yang biasanya diujikan adalah: 

1. penggunaan  variabel  (berarti  sifat‐sifatnya  juga)  dalam  kaitannya  dengan  proses  algoritma  tetapi  tidak  berkaitan  dengan sifat  variabel  yang spesifik pada bahasa pemrograman tertentu6.  

      

4 Lebih tepatnya, “TOKI Pseudopascal” dengan dokumen yang diposting di webite dengan URL di 

http://www.toki.or.id/toki2006/pseudopascal.pdf  

5  Hingga  IOI  2006  soal‐soal  yang  diujikan  masih  mementingkan  efisiensi  dalam  problem 

solvingnya sehingga rancangan yang object‐oriented ataupun deklaratif belum perlu (atau malah  tidak disarankan demi efisiensi solusi) untuk digunakan. Bahasa pemrograman yang populer di  IOI  adalah  FreePascal,  C  dan  C++.  Khususnya  C++  digunakan  terutama  untuk  memudahkan  sejumlah codingnya saja, bukan karena aspek object‐orientednya. 

6 Dalam bahasa C terdapat kerumitan definisi mengenai array yang tidak terjadi dalam 

bahasa Pascal. Dalam bahasa Java character yang digunakan dalam String adalah unicode (16 

bit) sementara dalam bahasa C atau Pascal adalah byte (8 bit). Dalam bahasa Pascal terdapat 

variabel tipe string standard pascal yang byte ke‐0 berisi panjang logical string di dalamnya 

sementara dalam C variabel String adalah array character dengan indeks dari 0. Dalam 

bahasa Pascal array bisa berindeks suatu range bilangan bulat apa saja termasuk bulat 

Gambar

Tabel penyelenggaraan lomba per tahun: 

Referensi

Dokumen terkait

Hasil analisis MDA pada hati dan ginjal tikus dari kelima kelompok perlakuan disajikan pada gambar 8 dan lampiran 1 serta 2, menunjukkan rata-rata kadar MDA hati dan ginjal

Tujuan dari penelitian ini adalah untuk menganalisa perubahan lahan dan perubahan iklim yang terjadi di Kecamatan Jumantono serta ada tidaknya korelasi alih fungsi lahan

4b Jika anda pernah , apakah hal tersebut mempengaruhi anda dalam mengambil keputusan memilih jurusan.. Tidak berakibat dan tidak

Berdasarkan hasil penelitian diketahui bahwa untuk data center tingkat 1 dan 2 tidak direkomendasikan menggunakan cold aisle containtment system karena dapat mencapai suhu

Kesesuaian terapi antiviral yang diberikan oleh dokter untuk pasien mengacu pada Persatuan Peneliti Hati Indonesia (PPHI) yang merekomendasikan pemberian antiviral untuk

Untuk mengetahui hasil dari sistem optimasi kebutuhan bahan baku dengan menggunakan algoritma Wagner-Whitin, maka diperlukan data-data untuk melakukan uji yang da- pat dilihat

Untuk mengetahui tipe habitat nyamuk Anopheles vagus di Desa Labuhan dan Desa Sumur, maka dilakukan pengambilan larva nyamuk dengan cara sebagai berikut :

Ini berarti bahwa stimulus tidak efektif dalam mempengaruhi organisme, maka tidak ada perhatian (attention). Jika stimulus itu diterima oleh organisme berarti