Posted by : Me Sabtu, 23 Mei 2015

Kembali lagi, kali ini saya akan membahas mengenai submatriks lagi. Tidak seperti program sebelumnya, program kali ini dibuat untuk mencari apakah suatu matriks B yang di-input oleh pengguna merupakan submatriks dari matriks A yang juga di-input oleh pengguna. Idenya adalah bagaimana cara membuat program memeriksa semua elemen matriks A dan matriks B dengan mencari nilai-nilai yang sama, namun sesuai dengan urutan tiap-tiap elemen. Contohnya saat di-input-kan dua buah matriks seperti di bawah ini,
maka program akan memeriksa kesamaan elemen aij dengan bkl apakah terdapat empat elemen yang sama yang berurutan. Jika iya, program akan menampilkan bahwa matriks B adalah submatriks dari matriks A.

Berikut ini source code program yang saya modifikasi berdasarkan program yang ditulis dalam bahasa Java yang saya dapatkan di Stackoverflow, program ini dibuat dengan array konstan, atau tidak meminta input dari pengguna, jika ingin diubah bisa saja.:

Program cekSubMat;

uses crt;

const
     ROWA = 3;
     COLA = 3;
     ROWB = 2;
     COLB = 1;
     A: Array[0..ROWA, 0..COLA] of Integer = ((2, 3, 5, 7), (5, 8, 3, 2), (7, 6, 2, 7), (3, 8, 5, 3));
     B: Array[0..ROWB, 0..COLB] of Integer = ((3, 5), (8, 3), (6, 2));
var
     i, j, k, l, counter, bar, kol: integer;
     submatrix, nemu: Boolean;

begin
    writeln('TAMPILAN MATRIKS YANG DIINPUT');
    for i := 0 To ROWA do begin
        for j := 0 to COLA do begin
             write(A[i, j], ' ');
        end;
        writeln(' ');
    end;
    writeln(' ');
    writeln('CONTOH SUBMATRIKS');
    for i := 0 To ROWB do begin
        for j := 0 to COLB do begin
            write(B[i, j], ' ');
        end;
        writeln(' ');
    end;
    writeln(' ');
    for i := 0 to ROWA-ROWB do begin           //Pengurangan (ROWA-ROWB) dan (COLA-COLB)dilakukan
        for j := 0 to COLA-COLB do begin       //agar tidak terjadi "out of bound" error
            counter := 0;
            for k := 0 to ROWB do begin
                for l := 0 to COLB do begin
                    if (A[i+k, j+l] = B[k, l]) then begin  // Memulai pencarian submatriks
                        counter := counter + 1;            // jika ditemukan counter bertambah 1
                    end else begin
                        counter := 0;                      // jika setelahnya tidak ditemukan kesamaan
                    end;                                   // counter kembali 0
                end;
            end;
            if (counter = (ROWB+1)*(COLB+1)) then begin    // Jika ditemukan sesuai
                nemu := TRUE;                              // dengan kondisi maka
                bar := i;                                  // submatriks ditemukan
                kol := j;
            end;
        end;
    end;
    writeln(' ');
    writeln('HASIL');
    if (nemu) then
        writeln('Submatriks ditemukan pada elemen (a',bar+1,kol+1,') sampai (a',bar+k+1,kol+l+1,').')
    else
        writeln('Sayangnya, submatriks yang Anda input-kan tidak ditemukan.');
     readln;
end.
Hasilnya akan seperti:


Jika masih bingung, silakan ditanyakan atau dicoba pahami terlebih dahulu ^_^. Ciao

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Welcome to My Blog

Labels

Popular Post

- Copyright © Dunia [masih] bersinar -Robotic Notes- Powered by Blogger - Designed by Johanes Djogan -