Anda di halaman 1dari 11

Bab 9

MATRIKS

3.1 Tujuan
Tujuan modul ini, adalah:
 Praktikan bisa membuat program matriks sederhana berdasarkan algoritma
dengan memakai larik
 Praktikan dapat membiasakan diri untuk membuat program secara terstruktur.
 Praktikan memahami algoritma larik dan matriks

3.2 Matriks
Matriks adalah struktur penyimpanan data di dalam memori utama yang
individu elemennya diacu dengan menggunakan dua buah indeks (yang biasanya
dikonotasikan dengan baris dan kolom).
kolom

1 2 3 4
1 Elemen(2,3)
2
Baris 3
4
5

Gambar 3.1. Matriks yang terdiri atas 5 baris dan 4 kolom

Baris 1 Baris 2 Baris 3 Baris 4 Baris 5

1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Gambar 3.2. Representasi matriks 5x4 di dalam memori sebagai larik


Karena matriks sebenarnya adalah larik, maka konsep umum dari larik juga
berlaku untuk matriks, yaitu:

III-1
III-2

 Kumpulan elemen yang bertipe sama. Tipe elemen matriks dapat berupa
tipe dasar (integer, real, boolean, char dan string), atau tipe terstruktur
seperti record
 Setiap elemen data dapat diakses secara langsung jika indeksnya (baris dan
kolom) diketahui, yang dalam hal ini indeks menyatakan posisi relatif di
dalam kumpulannya
 Merupakan struktur data yang statik, artinya jumlah elemennya sudah
dideklarasi terlebih dahulu di dalam bagian kamus dan tidak bisa diubah
selama pelaksanaan program.

3.2.1 Pendeklarasian Matriks


Pendeklarasian matriks di dalam teks algoritma ditulis di dalam bagian
Deklarasi. Ada beberapa cara pendeklarasian matriks, yaitu:
1. Sebagai nama peubah
Deklarasi
M : array[1..5, 1..4] of integer
2. Sebagai tipe
Deklarasi
Type mat : array[1..5, 1..4] of integer
M : mat
3. Mendefinisikan ukuran maksimum matriks sebagai sebuah konstanta
Deklarasi
Const nbarismaks = 20
Const nkolommaks = 20
M : array[1..nbarismaks, 1..nkolommaks] of integer

3.2.2 Pemrosesan Matriks


Algoritma pemrosesan matriks pada umumnya adalah memanipulasi
elemen-elemen matriks. Pemrosesan matriks adalah proses beruntun (sekuensial).
Setiap elemen matriks “dikunjungi” lalu dilakukan aksi terhadap elemen tersebut.
Berikut adalah skema umum pemroses matriks (per baris per kolom).
III-3

Procedure Prosesmatriks(input M : Matriksint, input NBar, NKol : integer)


{pemroses elemen matriks m[1..NBar, 1..NKol] per baris per kolom}
{k.awal : matriks m sudah terdefinisi elemen-elemennya}
{k.akhir : setiap elemen matriks m telah diproses}
Deklarasi
I : integer {indeks baris}
J : integer {indeks kolom}
Deskripsi
For I 1 to NBar do
For J 1 to NKol do
Proses(N[I, J])
Endfor
Endfor

3.2.3 Inisialisasi Matriks


Menginisialisasi matriks artinya memberi nilai awal yang sama untuk
seluruh/ sebagian elemen matriks. Proses inisialisasi biasanya dilakukan sebelum
matriks digunakan untuk perhitungan.
Contoh Algoritma 1:
Procedure Inismatriks(input/output M : Matrikint, input NBar, NKol : integer)
{menginisialisasi seluruh elemen matriks M[1..NBar, 1..NKol] dengan 0}
{k.awal : NBar dan NKol sudah terdefinisi dengan banyaknya baris dan kolom
matriks}
{k.akhir : M[I,J]=0 untuk I=1..NBar, J=1..NKol}

Deklarasi
I, J : integer

Deskripsi
For I 1 to NBar do
For J 1 to NKol do
N[I, J]  0
Endfor
Endfor

Program Algoritma 1:
//inisialisasi matriks
#include "stdio.h"
III-4

#define NBarismaks 10
#define NKolommaks 10
typedef int Matriksint[NBarismaks+1][NKolommaks+1];

Matriksint M;
int I, J, NKol, NBar;

void Inismatriks(Matriksint *M, int NBar, int NKol);

main(){
NBar=5;
NKol=5;
Inismatriks(&M, NBar, NKol); }

void Inismatriks(Matriksint *M, int NBar, int NKol) {


for (I=1;I<=NBar;I++) {
for (J=1;J<=NKol;J++) {
*M[I][J]=0; }}
}

3.2.4 Membaca dan Menulis Elemen Matriks


Membaca elemen matriks artiknya mengisi elemen matriks dengan data
dari piranti masukan. Menulis matriks artinya mencetak elemen-elemen matriks
ke piranti keluaran dengan asumsi bahwa elemen matriks sudah terdefinisi
nilainya.
Contoh Algoritma 2:
Procedure Bacamatriks(input/output M : Matriksint, input NBar, NKol :
integer)
{mengisi elemen matriks M[1..NBar, 1..NKol] dari piranti masukan}
{k.awal : NBar dan NKol sudah terdefinisi dengan banyaknya baris dan kolom
matriks}
{k.akhir : seluruh elemen matriks sudah berisi nilai yang dibaca dari piranti
masukan}

Deklarasi
I, J : integer

Deskripsi
For I 1 to NBar do
For J 1 to NKol do
III-5

Write(’M[’, I, ’,’ ,J, ’] = ’)


Read(M[I,J])
Endfor
Endfor
Procedure Tulismatriks(input Mat : Matriksint, input NBar, NKol : integer)
{mencetak elemen matriks M[1..NBar, 1..NKol] dari piranti masukan}
{k.awal : elemen-elemen matriks sudah terdefinisi harganya}
{k.akhir : seluruh elemen matriks tertulis ke piranti keluaran}

Deklarasi
I, J : integer

Deskripsi
For I 1 to NBar do
For J 1 to NKol do
Write(’M[’, I, ’,’ ,J, ’] = ’)
write(M[I, J])
Endfor
Endfor

Program Algoritma 2:
//bacatulis matriks
#include "stdio.h"

#define NBarismaks 10
#define NKolommaks 10
typedef int Matriksint[NBarismaks+1][NKolommaks+1];

matriksint m;
int I, J, NKol, NBar;

void Bacamatriks(Matriksint *M, int NBar, int NKol);


void Tulismatriks(Matriksint *M, int NBar, int NKol);

main(){
printf("Masukan jumlah baris");scanf("%d", &NBar);
printf("Masukan jumlah baris");scanf("%d", &NKol);
Bacamatriks(&M, NBar, NKol);
Tulismatriks(&M, NBar, NKol);
}

void Bacamatriks(Matriksint *M, int NBar, int NKol) {


for (I=1;i<=NBar;I++) {
III-6

for (J=1;J<=NKol;J++) {
printf("M[%d,%d]= ", I, J);scanf("%d", &(*M[I][J])); }}
}

void Tulismatriks(Matriksint *M, int NBar, int NKol) {


for (I=1;I<=NBar;I++) {
for (J=1;J<=NKol;J++) {
printf("M[%d,%d]=%d\n", I, J,*M[I][J]); }}
}

Contoh Algoritma 3:
Procedure Jumlahduamatriks(input M : Matriksint, input A : Matriksint, output
C: Matriksint, input NBar, NKol : integer)
{menjumlahkan matriks M dan A, yaitu M+A = C}
{k.awal : matriks M dan A sudah terdefinisi elemen-elemennya}
{k.akhir : matriks C berisi hasil penjumlahan M dan A}

Deklarasi
I, J : integer

Deskripsi
For I 1 to NBar do
For J 1 to NKol do
C[I, J] = M[I, J] + A[I, J]
Endfor
Endfor

Program Algoritma 3
//jumlah dua matriks
#include "stdio.h"

#define NBarismaks 10
#define NKolommaks 10
typedef int Matriksint[NBarismaks+1][NKolommaks+1];

Matriksint M;
Matriksint A;
Matriksint C;
int I, J, NKol, NBar;

void Bacamatriks(Matriksint *M, Matriksint *A, int NBar, int NKol);


void Jumlahduamatriks(Matriksint *M,Matriksint *A, Matriksint *C,int NBar,
III-7

int NKol);
void Tulismatriks(Matriksint *M,int NBar, int NKol);

main(){
printf("Masukan jumlah baris");scanf("%d",&NBar);
printf("Masukan jumlah baris");scanf("%d",&NKol);
Bacamatriks(&M, &A, NBar, NKol);
Jumlahduamatriks(&M, &A, &C, NBar, NKol);
Tulismatriks(&C, NBar, NKol);
}
void Bacamatriks(Matriksint *M, Matriksint *A, int NBar, int NKol) {
for (I=1;I<=NBar;I++) {
for (J=1;J<=NKol;J++) {
printf("M[%d,%d]= ", I, J);scanf("%d",&(*M[I][J]));
printf("A[%d,%d]= ", I, J);scanf("%d",&(*A[I][J]));}
}
}

void Jumlahduamatriks(Matriksint *M, Matriksint *A, Matriksint *C, int NBar,


int NKol) {
for (I=1;I<=NBar;I++) {
for (J=1;J<=NKol;J++) {
*C[I][J]=*M[I][J] + *A[I][J]; }
}
}

void Tulismatriks(Matriksint *C, int NBar, int NKol) {


for (I=1;I<=NBar;i++) {
for (J=1;J<=NKol;J++) {
printf("C[%d,%d]=%d\n", I, J,*C[I][J]); }
}
}

Contoh Algoritma 4:
Matriks nol adalah matriks dengan semua elemen adalah 0.
1 2 3 4
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 0 0
III-8

Function Nol(input A : Matriksint, input NBar, NKol : integer)  boolean


{memeriksa apakah matriks A[1..NBar, 1..NKol] merupakan matriks nol;
mengembalikan nilai true jika A adalah matriks nol atau false jika bukan
matriks nol}

Deklarasi
I, J : integer
Zero : boolean

Deskripsi
I1
Zero  true
While (I  NBar) and (Zero) do
J1
While (I  NKol) and (Zero) do
If A[I,J]  0 then
Zero  false {bukan matriks nol. stop}
Else
J  J+1 {periksa kolom berikutnya}
Endif
Endwhile
{J > NKol or not Zero}
If zero then
I  I+1 {periksa baris berikutnya}
Endif
Endwhile
{I > NBar or not Zero}
Return Zero

Program Algoritma 4:
//jumlah dua matriks
#include "stdio.h"

#define NBarismaks 10
#define NKolommaks 10
typedef int Matriksint[NBarismaks+1][NKolommaks+1];

Matriksint M;
int I, J, NKol, NBar;

void Bacamatriks(Matriksint *M, int NBar, int NKol);


bool Nol(Matriksint *M, int NBar, int NKol);
III-9

main(){
printf("Masukan jumlah baris");scanf("%d",&NBar);
printf("Masukan jumlah baris");scanf("%d",&NKol);
Bacamatriks(&M, NBar, NKol);
if (Nol(&M, NBar, NKol)==true)
printf("matriks nol");
else
printf("bukan matriks nol");
}

void Bacamatriks(Matriksint *M, int NBar, int NKol) {


for (I=1;I<=NBar;I++) {
for (J=1;J<=NKol;J++) {
printf("M[%d,%d]= ", I, J);scanf("%d",&(*M[I][J])); }
}
}

bool Nol(Matriksint *M, int NBar, int NKol) {


bool Zero;
I=1;
Zero=true;
while ((I <= NBar) && (Zero)) {
J=1;
while ((J<=NKol) && (Zero)) {
if ((*M[I][J]) != 0)
Zero = false;
else
J=J+1;
}
if (Zero)
{I=I+1;}
}
return Zero; }

Contoh Algoritma 5:
1 2 3 4 5 6 7
1 ’a’ ’m’ ’p ’u’ ’h’

2 ’b’ ’a’ ’n ’d’ ’u’ ’n’ ’g’

3 ’a’ ’p’ ’i’
4 ’k’ ’u’ ’d ’a’
III-10


...
M ’l’ ’a’ ’l’ ’a’ ’t’

Procedure Cetakkata(input Word : Matrikskar, input M, N : integer)


{mencetak ’Kata’ di dalam matriks word}
{k.awal: matriks Word sudah terdefinisi elemen-elemennya}
{k.akhir : ‘Kata’ tercetak ke piranti keluaran}
Deklarasi
I, J : integer

Deskripsi
For I  1 to M do
J 1
{telusuri elemen matriks pada baris I sampai ketemu spasi}
While (J < N) and (Word[I, J]  ’ ’) do
Write(Word[I, J])
J  J+1
Endwhile
{J=N or Word[I, J] = ‘ ’}
{cetak karakter terakhir jika bukan spasi}
If M[I, J]  ’ ’ then
Write(M[I, J])
Endif
Endfor
Cobalah buat programnya dari algoritma berikut!

3.3 Latihan
Latihan A
1. Buatlah algoritma minimum dan maksimum dengan menggunakan larik
2. Buatlah algoritma mencari nilai x dalam suatu larik matriks
3. Buatlah algoritma untuk menghitung nilai indeks menggunakan larik dengan
ketentuan: Nilai ujian ≥ 80, maka indeks = A
70 ≤ Nilai ujian < 80, maka indeks = B
55 ≤ Nilai ujian < 70, maka indeks = C
45 ≤ Nilai ujian < 55, maka indeks = D
Nilai ujian < 45, maka indeks = E
4. Buatlah algoritma untuk menjumlahkan dua buah matriks dengan
menggunakan larik
III-11

Latihan B
Buatlah program untuk algoritma di atas.

Anda mungkin juga menyukai