Oleh :
NPM : 207006018
LABORATORIUM INFORMATIKA
PROGRAM STUDI INFORMATIKA
FAKULTAS TEKNIK UNIVERSITAS SILIWANGI
TASIKMALAYA
2021
MODUL IV
ADT ARRAY
4.1 Definisi
Array merupakan sejumlah element bertipe data sama yang
diletakkan di memori secara kontigu.
1. Bertipe data sama, setiap element memiliki ukuran yang sama
2. Kontigu memori dialokasi antara satu elemen dengan elemen yang
lainnya mempunyai address yang berurutan.
Elemennya diakses melalui indeks.
Dalam kebanyakan bahasa pemrogramman populer, index dimulai
dari 0.
Array juga disebut vektor, larik atau table.
Array
IV-1
IV-2
Tugas Analisis :
/* File: boolean.h */
/* Definisi type data boolean */
#ifndef BOOLEAN_H
#define BOOLEAN_H
#define boolean unsigned char
#define true 1
#define false 0
#endif
/nama file : mtabel1.c/
#include "tabel1.h"
int main()
{
/kamus/
int i,j,X;
TabInt T1,T2,T3;
/algoritma/
printf("data tabel pertama \n");
BacaIsi(&T1);
printf("\n");
TulisIsi(T1);
printf("\n");
TulisIsiTab(T1);
printf("\n");
printf("data tabel kedua : \n");
BacaIsi(&T2);
printf("\n");
TulisIsi(T2);
printf("\n");
TulisIsiTab(T2);
printf("\n");
/penjumlahan tabel/
printf("hasil T1 + T2 : ");
TulisIsiTab(PlusTab(T1,T2));
printf("\n");
printf("hasil T1 - T2 : ");
TulisIsiTab(MinusTab(T1,T2));
printf("\n");
printf("hasil T1 * 2 : ");
TulisIsiTab(KaliKons(T1,2));
printf("\n");
/menyalin tabel/
printf("salin T2 ke T3\n");
SetTab(T2,&T3);
printf("T3 : ");
TulisIsiTab(T3);
printf("\n");
IV-5
/algoritma searching/
printf("//Searching angka 2 di T3//\n");
printf("Tanpa boolean\n");
printf("%d\n",Search1(T3,2));
printf("Dengan boolean Found\n");
printf("%d\n",Search2(T3,2));
printf("Dengan boolean\n");
printf("%d\n",SearchB(T3,2));
printf("Dengan sentinel\n");
printf("%d\n",SearchSentinel(T3,2));
printf("\n");
/nilai ekstrim/
printf("//nilai ekstrim di T1//\n");
printf("nilai maksimum : %d\n",ValMax(T1));
printf("ada di indeks ke : %d\n",IdxMaxTab(T1));
printf("nilai minimum : %d\n",ValMin(T1));
printf("ada di indeks ke : %d\n",IdxMinTab(T1));
printf("\n");
/operasi lain/
printf("//operasi lain pada TabInt//\n");
SetTab(T3,&T1);
printf("nilai T1 yang berasal dari T3 lalu diinverse :
");
TulisIsiTab(InverseTab(T1));
if(IsSimetris(T1))
printf("T1 adalah tabel simetris\n");
else
printf("T1 bukan tabel simetris\n");
printf("\n");
TulisIsiTab(T2);
printf("\n");
/T3 terurut/
InsSortAsc(&T3);
printf("//T3 terurut//\n");
printf("mencari '4' pada T3\n");
printf("ada di indeks ke : %d\n",SearchUrut(T3,4));
printf("nilai max T3 : %d\n", Max(T3));
printf("nilai min T3 : %d\n", Min(T3));
printf("mengisi nilai '4' pada indeks ditemukan pertama
: \n");
Add1Urut(&T3,4);
TulisIsiTab(T3);
printf("menghapus nilai '4' pada indeks ditemukan
pertama : \n");
Del1Urut(&T3,4);
TulisIsiTab(T3);
return 0;
}
/nama file : tabel1.c/
/berisi semua algoritma pemrosesan tabel integer/
/penempatan elemen selalu input kiri/
/versi 1 : dengan banyaknya elemen didefenisikan secara
eksplisit, memori tabel statik/
#include "tabel1.h"
/KONSTRUKTOR/
void MakeEmpty(TabInt *T)
/I.S : sembarang/
/*F.S : terbentuk tabel T */
{
/kamus lokal/
/algoritma/
SetNeff(T,0);
}
/SELEKTOR/
int NbElmt (TabInt T)
/* Mengirimkan banyaknya elemen efektif tabel */
/* Mengirimkan nol jika tabel kosong */
{
/kamus lokal/
/algoritma/
return(T.Neff);
}
/algoritma/
return(IdxMax-IdxMin+1);
}
/selektor INDEKS/
IdxType GetFirstIdx(TabInt T)
/I.S : Tabel T tidak kosong/
IV-7
IdxType GetLastIdx(TabInt T)
/I.S : Tabel T tidak kosong/
/mengirimkan indeks elemen terakhir/
{
/kamus lokal/
/algoritma/
return(IdxMin+NbElmt(T)-1);
}
/algoritma/
return(T.TI[i]);
}
/algoritma/
(*T).TI[i] = v;
}
IV-8
/algoritma/
(*T).Neff = N;
}
/algoritma/
return((i >= GetFirstIdx(T))&&(i <= GetLastIdx(T)));
}
/algoritma/
return((i >= GetFirstIdx(T))&&(i <= GetLastIdx(T)));
}
/* ** TEST KOSONG/PENUH ** */
/algoritma/
return(NbElmt(T)==MaxNbEl(T));
}
/* ** BACA dan TULIS dengan INPUT/OUTPUT device ** */
/* * Mendefinisikan isi tabel dari pembacaan * */
void BacaIsi (TabInt *T)
/* I.S. sembarang */
/* F.S. tabel T terdefinisi */
/* Proses : membaca banyaknya elemen T dan mengisi nilainya
*/
{
/kamus lokal/
IdxType v,i;
/algoritma/
printf("masukkan Neff : ");
scanf("%d",&v);
SetNeff(T,v);
for(i=GetFirstIdx(*T);i<=GetLastIdx(*T);i++)
{
printf("%d. ",i);
scanf("%d",&(*T).TI[i]);
}
/* ** OPERATOR ARITMATIKA ** */
/* * Aritmatika tabel : Penjumlahan, pengurangan,
perkalian, ... * */
TabInt PlusTab (TabInt T1,TabInt T2)
/* Prekondisi : T1 dan T2 berukuran sama dan tidak kosong
*/
/* Mengirimkan T1 + T2 */
{
/kamus lokal/
TabInt T;
int i;
/algoritma/
for(i=GetFirstIdx(T1);i<=GetLastIdx(T1);i++)
{
T.TI[i] = GetElmt(T1,i) + GetElmt(T2,i);
}
T.Neff = T1.Neff;
return(T);
*/
/* Mengirimkan T1 * T2 dengan definisi setiap elemen dengan
indeks yang sama
dikalikan */
{
/kamus lokal/
TabInt T;
int i;
/algoritma/
for(i=GetFirstIdx(T1);i<=GetLastIdx(T1);i++)
{
T.TI[i] = GetElmt(T1,i) * GetElmt(T2,i);
}
T.Neff = T1.Neff;
return(T);
/* ** OPERATOR RELASIONAL ** */
{
i++;
}
ls = GetLastIdx(T1);
if((i==ls)&&(GetElmt(T1,ls) == GetElmt(T2,ls)))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/if-else/
if(i == GetFirstIdx(T)-1)
return(IdxUndef);
else
return(i);
}
/* ** NILAI EKSTREM ** */
/algoritma/
mn = T.TI[IdxMin];
for (i=IdxMin + 1;i<=GetLastIdx(T);i++)
{
if(mn > T.TI[i])
mn = T.TI[i];
}
return (mn);
}
/kamus lokal/
/algoritma/
SetNeff(T,NbElmt(*T)+1);
SetEl(T,GetLastIdx(*T),X);
}
void AddEli (TabInt *T,ElType X ,IdxType i)
/* Menambahkan X sebagai elemen ke-i tabel tanpa mengganggu
kontiguitas terhadap
elemen yang sudah ada */
/* I.S. Tabel tidak kosong dan tidak penuh */
/*i adalah indeks yang valid. */
/* F.S. X adalah elemen ke-i T yang baru */
/* Proses Geser elemen ke-i+1 s.d. terakhir */
/*Isi elemen ke-i dengan X */{
/kamus lokal/
int j;
/algoritma/
SetNeff(T,NbElmt(*T)+1);
if(i < GetLastIdx(*T)) {
/berarti bukan T[last] yang kosong/
for(j = GetLastIdx(*T); j > i; j--)
/menggeser elmt tabel, mengosongkan T[i]/
SetEl(T,j,GetElmt(*T,j-1));
SetEl(T,i,X);
} else { /T[last] yang kosong/
SetEl(T,i+1,GetElmt(*T,i));
SetEl(T,i,X);
}
}
/* ** MENGHAPUS ELEMEN ** */
void DelLastEl (TabInt *T,ElType *X)
/* Proses Menghapus elemen terakhir tabel */
/* I.S. Tabel tidak kosong */
/* F.S. X adalah nilai elemen terakhir T sebelum
penghapusan, */
/*Banyaknya elemen tabel berkurang satu */
/*Tabel T mungkin menjadi kosong */{
/algoritma/
*X = GetElmt(*T,GetLastIdx(*T));
SetNeff(T,NbElmt(*T)-1);
}
void DelEli(TabInt *T,IdxType i,ElType *X)
/* Proses Menghapus elemen ke-i tabel tanpa mengganggu
kontiguitas */
/* I.S. Tabel tidak kosong, i adalah indeks efektif yang
valid */
/* F.S. Elemen T berkurang satu */
/*Banyaknya elemen tabel berkurang satu */
/*Tabel T mungkin menjadi kosong */
/* Proses Geser elemen ke-i+1 s.d. elemen terakhir */
/*Kurangi elemen efektif tabel */{
/kamus lokal/
IdxType j;
/algoritma/
*X = GetElmt(*T,i);
/seleksi elemen terakhir/
if(i<GetLastIdx(*T)) {
/jika bukan di LastIdx, maka lakukan pergeseran nilai/
IV-19
for(j=i;j<=GetLastIdx(*T)-1;j++)
SetEl(T,j,GetElmt(*T,j+1));
} /jika ada di LastIdx, hanya perlu NbElmt-1/
SetNeff(T,NbElmt(*T)-1);
}
i++;
}
if(Found)
return(i-1);
else
return(IdxUndef);
}
else
return(IdxUndef);
}
ElType Max(TabInt T)
/* Prekondisi Tabel tidak kosong, elemen terurut membesar
*/
/* Mengirimkan nilai maksimum pada tabel*/
{
/kamus lokal/
ElType mx;
int i;
/algoritma/
mx = T.TI[IdxMin];
for (i=IdxMin + 1;i<=GetLastIdx(T);i++)
{
if (mx < GetElmt(T,i))
{
mx = GetElmt(T,i);
}
}
return (mx);
}
TT.E1 = Max(T);
TT.E2 = Min(T);
return(TT);
}
IdxType i = 1;
/algoritma/
while (i<GetLastIdx(T) && GetElmt(T,i)<X) i++;
return (X == GetElmt(T,i));
}
int SumTab (TabInt T) {
/* Prekondisi : Tabel T tidak kosong */
/* Mengirim hasil penjumlahan semua elemen dalam T */
/kamus lokal/
ElType sum = 0;
IdxType i;
/algoritma/
for(i=1;i<=GetLastIdx(T);i++) sum+=GetElmt(T,i);
return sum;
}
}
File ”praktikum3.c”
#include "tabel1.h"
int main() {
/kamus/
TabInt T;
IdxType i,nbm;
ElType x;
/algoritma/
printf("* PROGRAM UTAMA UNTUK ADT ARRAY DENGAN
ELEMEN TERURUT *\n\n");
printf("* Inisialisasi tabel *\n");
printf("Masukkan nilai efektif tabel = ");
scanf("%d",&nbm); SetNeff(&T,nbm);
for(i=1;i<=GetLastIdx(T);i++) {
printf("Masukkan nilai elemen ke-%d = ",i);
scanf("%d",&x);
SetEl(&T,i,x);
}
IV-24
}
Tampilan dilayar 1 :
“ boolean.h ”
IV-25
“ mtabel1.c “
IV-26
IV-27
“ tabel1.c “
IV-28
IV-29
IV-30
IV-31
IV-32
IV-33
IV-34
IV-35
IV-36
IV-37
IV-38
IV-39
“ praktikum3.c “
IV-40
Tampilan dilayar 2
Gambar 1
IV-41
Gambar 2
IV-42
Analisis :
Gambar diatas merupakan program dari ADT array. Terdapat 5 file
modul pada program diatas. Ketika semua modulnya dicompile dan run
program terjadi error, akan tetapi jika ADT hanya terdapat 3 file modul
yaitu Type dan prototype, Realisasi (body) dan Main program untuk
mentest beberapa fungsi atau prosedur, maka pada gambar 1 ADT
dengan nama Projrct2 yang dibuat terdapat 4 file modul yaitu
boolean.h, tabel1.h, tabel1.c dan mtabel1.c. Sedangkan untuk gambar
2 ADT dengan nama Project2 yang dibuat terdapat 4 file modul yaitu
boolean.h, tabel1.h, tabel1.c dan praktikum3.c.
IV-43