Oleh :
Nama : Popy Anisa
NPM : 207006018
LABORATORIUM INFORMATIKA
PROGRAM STUDI INFORMATIKA
FAKULTAS TEKNIK UNIVERSITAS SILIWANGI
TASIKMALAYA
2021
Modul V
ADT MATRIKS
5.1 Matriks
Merupakan sekumpulan informasi yang setiap individu elemennya
terdefinisi berdasarkan dua buah indeks (yang biasanya dikonotasikan
dengan baris dan kolom). setiap elemen matriks dapat diakses secara
langsung jika kedua indeks diketahui dan indeksnya harus bertype yang
mempuyai keterurutan (suksesor), misalnya integer.
Sering dikatakan bahwa matriks adalah tabel atau array 2 dimensi.
Tetapi patut diperhatikan, bahwa pengertian “2 dimensi”, “baris dan
kolom” adalah dalam pemikiran kita. Pengaturan letak matriks dalam
memori komputer selalu tetap sebagai deretan sel “linier”. Pengertian 2
dimensi ini hanya untuk mempermudah pemrogram dalam mendesain
programnya. Maka matriks adalah salah satu contoh struktur data “lojik”.
Ilustrasi di atas dapat kamu baca seperti ini: a11 dibaca baris ke-1 dan
kolom ke-1; a12 dibaca baris ke-1 dan kolom ke-2; atau amn yang berarti
baris ke-m dan kolom ke-n.
V-1
V-2
Contoh :
#include <stdio.h>
int main() {
int i, j, m, n;
int matriks[10][10];
int transpose[10][10];
Tugas !
/* NIM/Nama : 207006018/Popy Anisa
Nama file : P2070060181.h
Topik : Menambahkan function (penjumlahan,pengurangan
dan perkalian)
Tanggal : 04/05/2021
Deskripsi : Implementasi ADT Matriks */
/* Definisi type data boolean */
#ifndef BOOLEAN_H
#define BOOLEAN_H
#define boolean unsigned char
#define true 1
#define false 0
#endif
/* NIM/Nama : 207006018/Popy Anisa
Nama file : P207006018 1.h
Topik : Menambahkan function (penjumlahan,pengurangan
dan perkalian)
Tanggal : 04/05/2021
Deskripsi : Implementasi ADT Matriks */
#ifndef matriks_H
#define matriks_H
#include <stdio.h>
#include "P2070060181.h"
#include <math.h>
indeks GetIdxBrsMin();
/* Mengirimkan indeks baris minimum MATRIKS apapun */
indeks GetIdxKolMin();
/* Mengirimkan indeks kolom minimum MATRIKS apapun */
indeks GetIdxBrsMax();
/* Mengirimkan indeks baris maksimum MATRIKS apapun */
indeks GetIdxKolMax();
/* Mengirimkan indeks kolom maksimum MATRIKS apapun */
/* File : “P2070060181.c” */
#include "P207006018 1.h"
/* ********** DEFINISI PROTOTIPE PRIMITIF **********
*/
/*kamus lokal*/
/*algoritma*/
return((FirstIdxBrs(M)<=i)&&(i<=LastIdxBrs(M))&&
(FirstIdxKol(M)<=j)&&(j<=LastIdxKol(M)));
}
el_type GetElmt (MATRIKS M,indeks i,indeks j)
/* Mengirimkan elemen M dg nomor baris i dan nomor
kolom j */
{
/*kamus lokal*/
/*algoritma*/
return(M.Mem[i][j]);
}
el_type GetElmtDiagonal (MATRIKS M,indeks i)
/* Mengirimkan elemen M(i,i) */
/* *** Operasi mengubah nilai elemen MATRIKS: Set /
Assign *** */
{
/*kamus lokal*/
/*algoritma*/
return(GetElmt(M,i,i));
}
void SetBrsEff (MATRIKS *M,int NB)
/* I.S. M sudah terdefinisi */
/* F.S. Nilai M.BrsEff diisi dengan NB, */
{
/*kamus lokal*/
/*algoritma*/
(*M).NBrsEff= NB;
}
void SetKolEff (MATRIKS *M,int NK)
/* I.S. M sudah terdefinisi */
/* F.S. Nilai M.NKolEff diisi dengan NK */
{
/*kamus lokal*/
/*algoritma*/
(*M).NKolEff = NK;
}
void SetEl (MATRIKS *M,int i,int j,el_type X)
/* I.S. M sudah terdefinisi */
/* F.S. M(i,j) bernilai X */
/* Proses: Mengisi M(i,j) dengan X */
{
/*kamus lokal*/
/*algoritma*/
(*M).Mem[i][j] = X;
}
/* ********** Assignment MATRIKS ********** */
void CopyMATRIKS (MATRIKS MIn,MATRIKS *MHsl)
/* Melakukan assignment MHsl ↕ Min */
{
/*kamus lokal*/
V-11
indeks i,j;
/*algoritma*/
SetBrsEff(MHsl,GetNBrsEff(MIn));
SetKolEff(MHsl,GetNKolEff(MIn));
for(i=FirstIdxBrs(MIn);i<=LastIdxBrs(MIn);i++)
{
for(j=FirstIdxKol(MIn);j<=LastIdxKol(MIn);j++)
SetEl(MHsl,i,j,GetElmt(MIn,i,j));
}
}
/* ********** KELOMPOK BACA/TULIS ********** */
void BacaMATRIKS (MATRIKS *M,indeks NB,indeks NK)
/* I.S. IsIdxValid(NB,NK) */
/* F.S. M terdefinisi nilai elemen efektifnya, dan
berukuran NB x NK */
/* Melakukan MakeMATRIKS(M,NB,NK) dan mengisi nilai
efektifnya */
/* dari pembacaan dengan traversal per baris */
{
/*kamus lokal*/
indeks i,j;
el_type x;
/*algoritma*/
printf("\nmembaca inputan\n");
for(i=FirstIdxBrs(*M);i<=LastIdxBrs(*M);i++)
{
for(j=FirstIdxKol(*M);j<=LastIdxKol(*M);j++)
{
printf("masukkan M[%d][%d] : ",i,j);
scanf("%lf",&x);
SetEl(M,i,j,x);
}
}
}
void TulisMATRIKS (MATRIKS M)
/* I.S. M terdefinisi */
/* F.S. Sama dengan I.S, dan nilai M(i,j) ditulis ke
layar*/
/* Menulis nilai setiap indeks dan elemen M ke layar
dengan traversal per baris */
{
/*kamus lokal*/
indeks i,j;
/*algoritma*/
for(i=FirstIdxBrs(M);i<=LastIdxBrs(M);i++) {
for(j=FirstIdxKol(M);j<LastIdxKol(M);j++)
printf("%.2f, ",GetElmt(M,i,j));
printf("%.2f\n",GetElmt(M,i,LastIdxKol(M)));
}
}
/* ********** TUGAS !. Buat driver untuk operasi di
bawah ini! ********** */
V-12
for(i=FirstIdxBrs(M1);i<=LastIdxBrs(M1);i++)
{
for(j=FirstIdxKol(M2);j<=LastIdxKol(M2);j++)
{
sum = 0;
for(k=FirstIdxKol(M1);k<=LastIdxKol(M1);k++)
sum = sum +
GetElmt(M1,i,k)*GetElmt(M2,k,j);
SetEl(&M,i,j,sum);
}
}
return(M);
}
MATRIKS kalielemen (MATRIKS M,int X)
/* Mengirim hasil perkalian setiap elemen M dengan X
*/
{
/*kamus lokal*/
MATRIKS M1;
indeks i,j;
/*algoritma*/
MakeMATRIKS(GetNBrsEff(M),GetNKolEff(M),&M);
for(i=FirstIdxBrs(M);i<=LastIdxBrs(M);i++)
{
for(j=FirstIdxKol(M);j<LastIdxKol(M);j++)
{
SetEl(&M1,i,j,GetElmt(M,i,j)*X);
}
}
return(M1);
}
void kali (MATRIKS *M,int K)
/* Mengalikan setiap elemen M dengan K */
{
/*kamus lokal*/
indeks i,j;
/*algoritma*/
MakeMATRIKS(GetNBrsEff(*M),GetNKolEff(*M),M);
for(i=FirstIdxBrs(*M);i<=LastIdxBrs(*M);i++)
{
for(j=FirstIdxKol(*M);j<=LastIdxKol(*M);j++)
SetEl(M,i,j,GetElmt(*M,i,j)*K);
}
}
int NBElmt (MATRIKS M)
/* Mengirimkan banyaknya elemen M */
{
/*kamus lokal*/
/*algoritma*/
return(GetNBrsEff(M)*GetNKolEff(M));
}
/* ********** Operasi lain ********** */
V-14
/*algoritma*/
/*membaca inputan*/
// identitas
printf("Nama : %s \n", "Popy Anisa");
V-16
/*cetak output*/
printf("\nmencetak matriks\n");
TulisMATRIKS(M);
// operasi penjumlahan
printf("\n\n");
printf(" \n #Penjumlahan Matriks# ");
printf("\nMasukkan jumlah baris matriks: ");
scanf(" %d", &m);
printf(" Masukkan jumlah kolom matriks: ");
scanf(" %d", &n);
// operasi pengurangan
printf("\n\n");
printf(" \n #Pengurangan Matriks# ");
printf("\nMasukkan jumlah baris matriks: ");
scanf(" %d", &m);
printf(" Masukkan jumlah kolom matriks: ");
scanf(" %d", &n);
// operasi perkalian
printf("\n\n");
printf(" \n #Perkalian Matriks# ");
printf("\nMasukkan jumlah baris matriks
pertama: ");
scanf("%d", &m);
printf("Masukkan jumlah kolom matriks pertama: ");
scanf("%d", &n);
if (n != p) {
printf("Matriks tidak dapat dikalikan satu
sama lain.\n");
} else {
file : “P2070060181.c”
V-21
V-22
V-23
V-24
V-25
file : “P207006018m1.c”
V-26
V-27
Tampilan Outputnya :
V-28
Analisis :
Gambar diatas merupakan program dari ADT matriks.
ADT hanya terdapat 3 file modul yaitu Type dan prototype,
Realisasi (body) dan Main program untuk mentest beberapa fungsi
atau prosedur. Gambar ADT dengan nama matriks terdapat 4 file
yaitu : P2070060181.h, P207006018 1.h, P2070060181.c,
P207006018m1.c.
V-29