Anda di halaman 1dari 14

LAPORAN

PRAKTIKUM STRUKTUR DATA

MODUL 3
Abstract Data Type TabInt

Nama : Dimas Singgih


NIM : 3411201039

JURUSAN INFORMATIKA
FAKULTAS SAINS DAN INFORMATIKA
UNIVERSITAS JENDERAL ACHMAD YANI
2020
BAB I
PENDAHULUAN
1.1 Latar Belakang
Sebuah ADT Tabel integer adalah pembentukan Tabel (array) yang berisi sekumpulan data
bertipe integer. ADT tabel integer terdiri dari tempat penyimpanan obyek dalam array yang
terdefinisi dengan tipe integer, serta variable pencacah bagi obyek tersebut, sehingga proses akses
terhadap obyek dapat dilakukan dengan mudah. Variable pencacah dapat disebut juga sebagai
variable yang menyimpan jumlah data/ elemen yang ada pada tabel.
BAB II
TUGAS PRAKTIKUM
2.1 File I Boolean.h
a. Source Code
/* Program : boolean.h
Author : Dimas Singgih
Kelas : B
Deskripsi : Membuat tipe boolean
Tanggal : 06-04-2021
*/

#ifndef boolean_H
#define boolean_H
#define true 1
#define false 0
#define boolean unsigned char
#endif

b. Analisa
File I boolean.h merupakan file header dengan ekstensi .h yang berisi deklarasi
fungsi C dan definisi makro yang akan digunakan di sebuah program. File ini
membandingkan kondisi antara true atau false dalam sebuah program.

2.2 File II tabint.h


a. Source Code
/* Program : tabint.h
Author : 3411201039 Dimas Singgih
Kelas : B
Deskripsi : Header file dari prototype Tab Integer
Tanggal : 06-04-2021
*/

#ifndef _TABINT_H
#define _TABINT_H
#include "boolean.h"
#include <stdio.h>
#include <conio.h>
#define nMax 10
#define IdxUndef -999
#define ElType int

/** Definisi ABSTRACT DATA TYPE Tab Integer **/


typedef struct {
ElType T1[nMax]; // koleksi bilangan bertipe integer
int nEff; // jumlah data atau elemen pada tabel
}TabInt;
/* Prototype TabInt */

/* Konstruktor membentuk TabInt */


void CreateTabInt (TabInt *T);
/* I.S : T terdefinisi, tidak diketahui nilainya
F.S : membentuk sebuah TabInt dengan nEff = 0
*/

/* Selektor TabInt **/


int GetJumElmt(TabInt T);
// Mengirimkan banyaknya elemen tabel atau mengirimkan nol jika tabel
kosong
int GetFirstIdx (TabInt T);
// Mengirimkan elemen pertama dari tabel
int GetLastIdx (TabInt T);
// Mengirimkan elemen terakhir dari tabel
int GetElmt (TabInt T, int idx);
// Mengirimkan elemen pada index ke-idx dari tabel, dengan syarat
x<=nMax

/* Set nilai komponen */


void SetEl(TabInt *T,int i, int v );
/* I.S : T terdefinisi, sembarang
F.S : Elemen T yang ke i bernilai v:
Mengubah nilai elemen tabel yang ke—i sehingga bernilai v
*/

/* Destruktor/Dealokator: tidak perlu */

/** { KELOMPOK OPERASI Cek Elemen kosong atau penuh} **/


boolean IsEmpty(TabInt T);
// mengecek apakah jumlah data pada tabel kosong
// mengirimkan true jika tabel kosong atau mengirimkan false jika tidak
boolean IsFull(TabInt T);
// mengecek apakah jumlah data pada tabel penuh
// mengirimkan true jika tabel penuh, mengirimkan false jika tidak

/** { KELOMPOK Interaksi dengan I/O device, BACA/TULIS } **/


void BacaElmt (TabInt *T);
/* I.S : T terdefinisi, mungkin kosong
F.S : Mengisi komponen T dengan nilai elemen tabel dari yang dibaca
*/

void CetakTabInt(TabInt T);


/* I.S : T terdefinisi, mungkin kosong
F.S : menampilkan semua elemen tabel ke layar
*/
void AddElmt(TabInt *T, int X);
/* I.S : T terdefinisi, mungkin kosong
F.S : menambahkan nilai elemen baru pada tabel yang ditempatkan
diposisi akhir. Proses penambahan dilakukan selama jumlah elemen < nMax
*/

/** { KELOMPOK OPERASI ARITMATIKA TERHADAP TYPE } **/


TabInt KaliTab (TabInt T1, TabInt T2);
// Prekondisi T1 dan T2 harus berukuran sama dan tidak kosong,
// Mengirimkan Tabel baru baru dengan mengalikan setiap elemen T1 dan
T2 pada indeks yang sama
// Contoh : Nilai T1 (5, 2, 10) dan T2 (2, 3, 6)
// nilai Tabel baru = 10, 6, 60

TabInt KaliKons (TabInt T, int c);


// Prekondisi T tidak kosong,
// Mengirimkan Tabel baru dengan setiap elemen tabel dikalikan c
// Contoh : Nilai T1 (5, 2, 10) dan C = 2
// nilai Tabel baru = 10, 4, 20

/** Kelompok operasi relasional terhadap TabInt **/


boolean IsEQTab(TabInt T1, TabInt T2);
// Prekondisi T1 dan T2 harus berukuran sama dan tidak kosong
// mengirimkan true jika ukuran T1 = T2: semua elemennya sama,
// dan jika tidak mengirimkan false

/** KELOMPOK OPERASI LAIN TERHADAP TYPE **/


void CopyTab(TabInt Tin, TabInt *Tout);
/* I.S : Tin terdefinisi, tidak boleh kosong
F.S : Tout berisi salinan Tin, Assignment THsl <~ Tin yaitu:
Setiap elemen THsl digantikan dengan semua elemen Tin dan
nEff pada THsl = nEff pada Tin.
Sehingga elemen Tout sama dengan elemen Tin
*/
TabInt InverseTab(TabInt T);
// Menghasilkan tabel dengan urutan tempat yang terbalik, yaitu:
// elemen pertama rnenjadi terakhir,
// elemen kedua menjadi elemen sebelum terakhir, dst..
// Tabel kosong menghasilkan tabel kosong
// Contoh : Nilai T (5, 2, 10)
// nilai Tabel baru = 10, 2, 5

boolean isElemenAda(TabInt T, ElType X);


// Mengirimkan true jika nilai x berada pada T dan false jika x tidak
ada

int cariElemen(TabInt T, ElType X);


// Search apakah ada elemen tabel T yang bernilai X
// Jika ada, menghasilkan indeks i terkecil, dengan elemen ke—i=X
// Jika tidak ada atau tabel kosong, mengirimkan IdXUndef (bernilai -
999)
#endif

b. Analisa
File II tabint.h (file library) adalah file header baru dengan ekstensi .h yang berisi
deklarasi, tipe bentukan TabInt(ElType T1[nMax] : integer , nEff : integer) dan dalam file
ini berisi prototype type program yang nantinya akan di realisasikan serta tidak boleh ada
deklarasi variabel. Dalam file ini, memiliki 6 procedure dan 12 function.
2.3 File III tabint.c

a. Source Code
/* Program : tabint.c
Author : 3411201039 Dimas Singgih
Kelas : B
Deskripsi : Realisasi dari prototype Tab Integer
Tanggal : 06-04-2021
*/

#include "boolean.h"
#include "tabint.h"
#include <stdio.h>
#include <conio.h>

/* Prototype TabInt */

/* Konstruktor membentuk TabInt */


void CreateTabInt (TabInt *T){
/* I.S : T terdefinisi, tidak diketahui nilainya
F.S : membentuk sebuah TabInt dengan nEff = 0
*/
(*T).nEff=0;
}

/* Selektor TabInt **/


int GetJumElmt(TabInt T){
// Mengirimkan banyaknya elemen tabel atau mengirimkan nol jika tabel
kosong
int jum;

if(T.nEff > 0){


T.nEff;
}
else{
return 0;
}
}

int GetFirstIdx (TabInt T){


// Mengirimkan elemen pertama dari tabel
return (T.T1[1]);
}

int GetLastIdx (TabInt T){


// Mengirimkan elemen terakhir dari tabel
return(T.T1[T.nEff]);
}

int GetElmt (TabInt T, int idx){


// Mengirimkan elemen pada index ke-idx dari tabel, dengan syarat
x<=nMax
if(T.nEff > 0)
return (T.T1[idx]);
else
return (-999);
}

/* Set nilai komponen */


void SetEl(TabInt *T,int i, int v ){
/* I.S : T terdefinisi, sembarang
F.S : Elemen T yang ke i bernilai v:
Mengubah nilai elemen tabel yang ke—i sehingga bernilai v
*/
if((*T).nEff > 0)
(*T).T1[i] = v;
else
printf("kosong");
}

/* Destruktor/Dealokator: tidak perlu */

/** { KELOMPOK OPERASI Cek Elemen kosong atau penuh} **/


boolean IsEmpty(TabInt T){
// mengecek apakah jumlah data pada tabel kosong
// mengirimkan true jika tabel kosong atau mengirimkan false jika tidak
if(T.nEff==0)
return(true);
else
return(false);
}
boolean IsFull(TabInt T){
// mengecek apakah jumlah data pada tabel penuh
// mengirimkan true jika tabel penuh, mengirimkan false jika tidak
if(T.nEff==nMax)
return(true);
else
return(false);
}

/** { KELOMPOK Interaksi dengan I/O device, BACA/TULIS } **/


void BacaElmt (TabInt *T){
/* I.S : T terdefinisi, mungkin kosong
F.S : Mengisi komponen T dengan nilai elemen tabel dari yang dibaca
*/
int i,x;

(*T).nEff = 0;
printf("Masukan Nilai : ");scanf("%d",&x);
while(x != IdxUndef){
(*T).nEff = (*T).nEff + 1;
(*T).T1[(*T).nEff] = x;
printf("Masukan Nilai : ");scanf("%d",&x);
}
}

void CetakTabInt(TabInt T){


/* I.S : T terdefinisi, mungkin kosong
F.S : menampilkan semua elemen tabel ke layar
*/
int i,X;
if(!IsEmpty(T)){
for(i=1;i<=T.nEff;i++){
printf("<%d>", T.T1[i]);
}
}
else{
printf("Tabel Kosong");
}
}
void AddElmt(TabInt *T, int X){
/* I.S : T terdefinisi, mungkin kosong
F.S : menambahkan nilai elemen baru pada tabel yang ditempatkan
diposisi akhir. Proses penambahan dilakukan selama jumlah elemen < nMax
*/
(*T).nEff = (*T).nEff + 1;
(*T).T1[(*T).nEff] = X;
}
/** { KELOMPOK OPERASI ARITMATIKA TERHADAP TYPE } **/
TabInt KaliTab (TabInt T1, TabInt T2){
// Prekondisi T1 dan T2 harus berukuran sama dan tidak kosong,
// Mengirimkan Tabel baru baru dengan mengalikan setiap elemen T1 dan
T2 pada indeks yang sama
// Contoh : Nilai T1 (5, 2, 10) dan T2 (2, 3, 6)
// nilai Tabel baru = 10, 6, 60
int i;
TabInt T3;

T3.nEff = T1.nEff;
if(T1.nEff == T2.nEff){
for(i = 1 ; i <= T1.nEff ;i++){
T3.T1[i] = T1.T1[i] * T2.T1[i];
}
}
else{
printf("\n Jumlah Elemen pada T1 tidak sama dengan T2");
for(i = 1 ; i <= T3.nEff ;i++){
T3.T1[i] = 0;
}
}
return T3;
}
TabInt KaliKons (TabInt T, int c){
// Prekondisi T tidak kosong,
// Mengirimkan Tabel baru dengan setiap elemen tabel dikalikan c
// Contoh : Nilai T1 (5, 2, 10) dan C = 2
// nilai Tabel baru = 10, 4, 20
int i;
TabInt T3;
for(i = 1 ; i <= T.nEff ;i++){
T3.T1[i] = T.T1[i] * c;
}
return T3;
}
/** Kelompok operasi relasional terhadap TabInt **/
boolean IsEQTab(TabInt T1, TabInt T2){
// Prekondisi T1 dan T2 harus berukuran sama dan tidak kosong
// mengirimkan true jika ukuran T1 = T2: semua elemennya sama,
// dan jika tidak mengirimkan false
int i;
boolean cek;

cek = true;
if(T1.nEff == T2.nEff){
for(i = 1 ; i <= T1.nEff ;i++){
if(T1.T1[i] != T2.T1[i]){
cek = false;
}
}
if(cek)
return true;
else
return false;
}
else
printf("jumlah elemen tabel tidak sama");
}

/** KELOMPOK OPERASI LAIN TERHADAP TYPE **/


void CopyTab(TabInt Tin, TabInt *Tout){
/* I.S : Tin terdefinisi, tidak boleh kosong
F.S : Tout berisi salinan Tin, Assignment THsl <~ Tin yaitu:
Setiap elemen THsl digantikan dengan semua elemen Tin dan
nEff pada THsl = nEff pada Tin.
Sehingga elemen Tout sama dengan elemen Tin
*/
int i;

if(Tin.nEff != 0){
for(i = 1 ; i <= Tin.nEff ;i++ ){
(*Tout).T1[i] = Tin.T1[i];
}
}
else
printf("Tin kosong");
}
TabInt InverseTab(TabInt T){
// Menghasilkan tabel dengan urutan tempat yang terbalik, yaitu:
// elemen pertama rnenjadi terakhir,
// elemen kedua menjadi elemen sebelum terakhir, dst..
// Tabel kosong menghasilkan tabel kosong
// Contoh : Nilai T (5, 2, 10)
// nilai Tabel baru = 10, 2, 5
int i,j;
TabInt T2;

if(T.nEff > 0){


j = T.nEff;
for(i = 1; i <= T.nEff ;i ++){
T2.T1[i] = T.T1[j];
j = j - 1;
}
return T2;
}
else
printf("tabint kosong");
}

boolean isElemenAda(TabInt T, ElType X){


// Mengirimkan true jika nilai x berada pada T dan false jika x tidak
ada
int i;
boolean cek;

for(i = 1 ; i <= T.nEff ;i++){


if(T.T1[i] == X){
cek = true;
}
}
if(cek)
return true;
else
return false;
}
int cariElemen(TabInt T, ElType X){
// Search apakah ada elemen tabel T yang bernilai X
// Jika ada, menghasilkan indeks i terkecil, dengan elemen ke—i=X
// Jika tidak ada atau tabel kosong, mengirimkan IdXUndef (bernilai -
999)
int i,cek;

cek = 999;
for(i = 1 ; i <= T.nEff ;i++){
if(T.T1[i] == X){
cek = i;
}
}
if(cek != 999)
return cek;
else
return -999;
}

b. Analisa
File III tabint.c adalah bagian body dari sebuah program Tabel. File ini disebut
sebagai file realisasi dari prototype yang didefinisikan pada tabint.h dan berupa kode
program dalam bahasa C yang memiliki deklarasi variabel. Dalam file ini, memiliki 6
procedure dan 12 function.
2.4 File IV mtabint.c
a. Source Code
/* Program : mtabint.c
Author : 3411201039 Dimas Singgih
Kelas : B
Deskripsi : main driver dari Tab Integer
Tanggal : 06-04-2021
*/

#include "boolean.h"
#include "tabint.h"
#include <stdio.h>
#include <conio.h>

int main(){

TabInt T1,T2,T3,T4;
int N,First,JUM,Last,Elm,indeks,j,w, set,Empty,cari;

printf("\n|==================================================|\n
");
printf("\n| |\n");
printf("\n|==================ADT
TabInt======================|\n");
printf("\n| |\n");
printf("\n|==================================================|\n
");
printf("\n");
CreateTabInt(&T4);
printf("\n====================Konstruktor=====================\n
");
CreateTabInt(&T1);
printf("\nTabel T1 : ");
CetakTabInt(T1);
CreateTabInt(&T2);
printf("\nTabel T2 : ");
CetakTabInt(T2);

printf("\n================Mengisi Elemen
Tabel===============\n");
printf("\n IdxUndef -999\n");
BacaElmt(&T1);
CetakTabInt(T1);

printf("\n=====================Selektor======================\n"
);
JUM=GetJumElmt(T1);
printf("\nJumlah Elemen= %d", JUM);
First=GetFirstIdx(T1);
printf("\nNilai Elemen pertama= %d", First);
Last=GetLastIdx(T1);
printf("\nNilai Elemen terakhir= %d", Last);
Elm=GetElmt(T1,2);
printf("\nNilai Elemen ke-2= %d", Elm);
printf("\n===============Operator Nilai
TabInt===============\n");

printf("\n=======Perkalian Tabel===========\n");
printf("\n IdxUndef -999\n");
BacaElmt(&T2);
printf("\nnilai T1 : ");
CetakTabInt(T1);
printf("\nnilai T2 : ");
CetakTabInt(T2);
T3 = KaliTab(T1,T2);
printf("\nHasil Perkalian T1 dan T2 : ");
CetakTabInt(T3);

printf("\n=============Kali Konstanta==========");
printf("\n Masukan nilai pengali : ");scanf("%d",&N);
T4 = KaliKons(T1,N);
T4.nEff = T1.nEff;
printf("Hasil perkalian dengan Konstanta %d : ",
N);CetakTabInt(T4);

printf("\n Perbandingan Tabel 1 dan Tabel 2, bahwa ");


if(IsEQTab(T1,T2)){
printf(" Maka T1 tidak sama dengan T2");
}
else{
printf("T1 sama dengan T2");
}

printf("\n===========Nilai Copy T========= ");


printf("\nnilai T1 : ");CetakTabInt(T1);
printf("\nnilai T2 : ");CetakTabInt(T2);
CopyTab(T1,&T2);
printf("\nnilai Copy Tabel : ");CetakTabInt(T2);

printf("\ncari elemen T");


printf("\nnilai T1 : ");CetakTabInt(T1);
T3 = InverseTab(T1);
printf("\nnilai T1 : ");CetakTabInt(T3);

printf("\nmasukan data yang ingin di cari : ");scanf("%d",&N);


if(isElemenAda(T1,N))
printf("ada");
else
printf("tidak ada");

printf("\ncari index elemen");


printf("\nmasukan nilai yang ingin di cari: ");scanf("%d",&N);
T3 = KaliKons(T1,N);
T3 = KaliKons(T1,N);
printf("\nnilai T1 : ");CetakTabInt(T1);
cari = cariElemen(T1,N);
if(cari != IdxUndef)
printf("\n elemen ada di index %d", cari);
else
printf("\nelemen tidak ada di dalam tab");
}

b. Analisa
File IV mtabint.c merupakan main driver yang digunakan untuk menguji ADT dan
sebagai jawaban atas persoalan yang diberikan. Pada file ini program dijalankan.
2.5 Hasil Screenshoot
BAB III
KESIMPULAN

Pada Modul 3 membahas mengenai Abstract Data Type TabInt yang dimana memerlukan
spesifikasi type primitif yang berhubungan dengan TabInt. Type dalam bahasa C misalnya menjadi
struct, dalam ADT TabInt ini terdapat type struct yang berbentuk TabInt yang terdiri dari
T1[nMax] yang berbentuk Eltype dan nEff untuk menunjakan indeks di elemen terakhir yang
berbentuk integer.

Dalam program ini, memerlukan header file yang terdiri dari boolean.h yang berisi
deklarasi untuk pemanggilan fungsi true atau false dan tabint.h yang berisi deklarasi, tipe
bentukan, dan prototype. Selain itu terdapat body file yang tersimpan sebagai tabint.c yang berisi
realisasi sebuah prototype dan merupakan isi dari sebuah program TabInt. Serta terdapat main
driver yang tersimpan dalam file mtabint.c yang merupakan induk dari program ADT TabInt. ADT
TabInt memiliki 6 procedure dan 12 function.

Anda mungkin juga menyukai