RSS

COMPFEST

COMFEST

Compfest merupakan ajang lomba pemrograman komputer untuk tingkat sma/smk dan mahasiswa. Berikut kumpulan soal-soal compfest tingkat sma dan listing programnya. Tapi tentu saja saya tidak memperhatikan tingkat kompleksitasnya lo... karena blog ini saya gunakan untuk mengajar saja. Yang penting disini siswa memahami soal dan bagaimana pemecahannya. Monggo disederhanakan sendiri dan dicari cara lain untuk mendapatkan total kompleksitas minimal ya...



Compfest 2013 Penyisihan SMA
Soal 1 :
SALURAN TELEVISI
Pak Chanek ingin mengetahui CTV ada di saluran berapa dengan menggunakan Next dan Prev. Jika di Next muncul saluran 3 maka CTV ada di saluran 2. Jika di Prev muncul saluran 4 maka CTV ada disaluran 5.
Contoh masukan :
3
Next
3
Next
18
Prev
91

Contoh keluaran :
2
17
92

Soalnya mudah sekali :

program saluranctv;
uses crt;
var uji, saluran, i : integer;
    tombol : string;
    ctv : array[1..100] of integer;
    hasil : array[1..100] of string;
begin
  clrscr;
  write('test case : '); readln(uji);
  for i:=1 to uji do begin
    readln(tombol,saluran);
    if (tombol='next') or (tombol='Next') then ctv[i] := saluran-1
    else if (tombol='prev') or (tombol='Prev') then ctv[i] := saluran+1
    else hasil[i]:='masukan salah';
  end;
  writeln;
  for i:= 1 to uji do writeln(ctv[i]);

  readkey;
end.

Soal 2 :
KELERENG
Ini saya ndak mudeng sama bahasanya, tapi setelah diuraikan oleh murid saya, saya langsung bisa membuat programnya. Kemampuan bahasa saya memang kurang... :P ... atau memang soalnya dibuat dengan bahasa yang rumit ya?
Oke, soal kelereng ini intinya Anda punya kelereng di tangan, di kotak dan ada barisan yang akan dibentuk. Jika jumlah kelereng dalam barisan lebih sedikit atau sama dengan jumlah kelereng di tangan, maka barisan yang dibentuk hanya berasal dari kelereng di tangan. Tapi kalau kelereng di tangan lebih sedikit dari jumlah kelereng dalam barisan yang dibentuk, maka digunakan kelereng di dalam kotak.
Kita diminta membuat program yang menghitung berapa banyak barisan yang dapat dibentuk.
Intinya sih... saya menggunakan faktorial dan permutasi.
Jadi program yang saya buat :

program kelereng;

uses crt;
var uji, tangan, kotak, baris, i, total : integer;
    jumlah : array [1..100] of real;

function faktorial(x:integer):integer;
var a, hasil: integer;
begin
  hasil := 1;
  for a:=1 to x do hasil := hasil * a;
  faktorial := hasil;
end;

function permutasi(x,y:integer):real;
var a,h1,h2 : integer;
begin
  h1 := 1;
  for a:=1 to x do h1:=h1*a;
  h2 := 1;
  for a:=i to (x-y) do h2:=h2*a;
  permutasi := h1/h2;
end;

begin
  clrscr;
  write('masukan jumlah kasus : '); readln(uji);
  for i:= 1 to uji do begin readln(tangan,kotak,baris);

  if tangan>baris then jumlah[i] := permutasi(tangan,baris);
  if tangan=baris then jumlah[i] := faktorial(tangan);
  if tangan<baris then begin
     total:=tangan+kotak;
     if total>baris then jumlah[i] := permutasi(total,baris);
     if total=baris then jumlah[i] := faktorial(total);
     if total<baris then jumlah[i] := 0;
  end;
  end;

  for i:= 1 to uji do writeln(jumlah[i]:0:0);
  readkey;
end.

****************************
PROGRAM REKURSIF    : klik disini :
****************************

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 komentar:

Posting Komentar

Catatan: Hanya anggota dari blog ini yang dapat mengirim komentar.