RSS

Matriks-3

Mengacu pada salah satu soal lomba tentang penerapan array :

Finding The True Stars
Setelah berhasil keluar dari penjara, Destro mengancam akan memusnahkan bumi. Karena Destro suka dengan permainan, maka ia menantang manusia di bumi untuk menemukan bintang super. Jika tidak dapat menemukan bintang super yang dimaksudkan oleh Destro maka dia akan langsung memusnahkan bumi.
Bintang super dapat ditemukan demgan mencari bintang yang dikelilingi oleh batu super yang jumlahkan genap.
Batu super luar angkasa dimasukkan oleh user dan disimbolkan dengan tanda hashtag (#). Bintang super adalah bintang yang dikelilingi oleh batu super sejumlah bilangan genap (2,4,6, ...)

Format Masukkan :
Input pertama berupa banyak percobaan
Input kedua berupa besar matriks (x,y)
Input ketiga berupa jumlah batu super (z)
Input keempat merupakan letak batu-batu super.

Format Keluaran :
Jumlah bintang super yang ada. Dengan ketentuan disekelilingnya ada batu super sebanyak bilangan genap.

Coba Anda lihat bagaimana alur program mendeteksi bilangan matriks di postingan ini. Dari alur program tersebut bisa Anda kembangkan menjadi mendeteksi jumlah batu super seperti soal diatas.

Program berikut ini merupakan jawaban untuk soal diatas untuk 1x percobaan :

program bintang_super;
uses crt;
var matrik: array[1..50,1..50] of char;
    posx,posy: byte;
    x,y,z,i,j,total,bintang: byte;

procedure hitung(var b,k:byte);
var m,n:byte;
begin
    total:=0;
    for m:= (b-1) to (b+1) do
        for n:= (k-1) to (k+1) do begin
            if ((m>0) and (n>0)) and (matrik[m,n]='#') then inc(total);
        end;
end;

begin
    clrscr;
    readln(x,y);
    readln(z);

    {mengisi matrik dengan bintang dan batu super}
    for i:= 1 to z do begin
        readln(posx, posy);
        matrik[posx,posy]:='#';
    end;
    for i:= 1 to x do
        for j:= 1 to y do if matrik[i,j]<>'#' then matrik[i,j]:='*';


    {hitung bintang super}
    bintang:=0;
    for i:= 1 to x do begin
        for j:= 1 to y do begin
            if matrik[i,j]='*' then begin
               hitung(i,j);
               if ((total>0) and ((total mod 2) = 0)) then inc(bintang);
            end;
        end;
    end;

    writeln(bintang);

    readkey;
end.

Program diatas tentunya masih dapat disederhanakan lagi, silahkan beri masukan yang membangun dan positif agar pembelajaran bisa lebih berkembang.

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

0 komentar:

Posting Komentar

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