Anda di halaman 1dari 18

LAPORAN AKHIR

PRAKTIKUM STRUKTUR DATA

MODUL 3
ADT Tabint ( Tabel Integer )

DISUSUN OLEH :
HIRA NUR AFIFAH [3411201036]

PROGRAM STUDI / JURUSAN INFORMATIKA


FAKULTAS SAINS DAN INFORMATIKA
UNIVERSITAS JENDERAL ACHMAD YANI
TAHUN 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.

1.2. Rumusan Masalah


1. Bagaimana pembuatan ADT dengan tipe data array
2. Apa kasus yang digunakan dalam ADT tabel integer

1.3. Tujuan
1. Memahami pembuatan ADT dengan tipe data array.
2. Kasus yang digunakan adalah ADT Tabel Integer, yaitu sebuah koleksi obyek
dengan tipe data yang sama berupa integer.
BAB II

TUGAS PRAKTIKUM

1. File I boolean.h
A. Source Code
/* Program : boolean.h
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Membuat tipe boolean
Tanggal : 10-04-2021
*/
#ifndef boolean_H
#define boolean_H
#define true 1
#define false 0
#define boolean unsigned char
#endif

B. Analisis
Pada File 1 boolean.h ini adalah file header dengan ekstensi .h, yang berisi
deklarasi fungsi C Dan definisi makro yang akan digunakan dalam program ini.
Membandingkan antara trueatau false dalam sebuah program.

2. File II Tabint.h
A. Source Code
/* Program : tabint.h
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Header file dari prototype Tab Integer
Tanggal : 10-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. Analisis
Pada 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 program tipe prototipe yang akan
diimplementasikan dan seharusnya tidak ada Deklarasi variabel. Dalam file ini, ini
memiliki 6 proses dan 12 fungsi.
3. File III Tabint.c
A. Source Code
/* Program : tabint.c
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Realisasi dari prototype Tab Integer
Tanggal : 10-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. Analisis
Pada File tabint.c III adalah bagian utama dari program Tabel. File
tersebut bernama Sebagai file implementasi dari prototipe yang didefinisikan di
tabint.h, dan mengadopsi bentuk kode Program bahasa C dengan deklarasi
variabel. Dalam file ini, memiliki 6 Program dan 12 fungsi.

4. File IV mtabint.c
A. Source Code
/* Program : mtabint.c
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : main driver dari Tab Integer
Tanggal : 10-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. Analisis
File IV mtabint.c digunakan untuk menguji ADT dan Sebagai jawaban
atas pertanyaan yang diberikan. Jalankan program di file ini.

Hasil Screenshot
BAB III

KESIMPULAN

Pada modul 3 kali ini dapat disimpulkan bahwa Dalam program ini,
diperlukan file header yang berisi boolean.h, yang berisi Deklarasi panggilan
fungsi benar atau salah dan tabint.h yang berisi deklarasi, type Formasi dan
prototipe. Selain itu, ada file teks yang disimpan sebagai tabint.c, yang berisi
Realisasi prototipe dan konten program TabInt. Dan ada main Driver disimpan
dalam file mtabint.c, yang merupakan induk dari program ADT TabInt. ADT
TabInt memiliki 6 proses dan 12 fungsi.

Anda mungkin juga menyukai