Anda di halaman 1dari 26

LAPORAN AKHIR

PRAKTIKUM STRUKTUR DATA

MODUL 2
Abstract Data Type POINT Dan Abstract Data Type LINE

DISUSUN OLEH :
HIRA NUR AFIFAH [3411201036]

PROGRAM STUDI / JURUSAN INFORMATIKA


FAKULTAS SAINS DAN INFORMATIKA
UNIVERSITAS JENDERAL ACHMAD YANI
TAHUN 2020
BAB I
HASIL PRAKTIKUM

1. File 1 boolean.h
A. Source Code
/* Program : boolean.h
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Membuat tipe boolean
Tanggal : 04-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 true
atau false dalam sebuah program.
2. File II point.h
A. Source Code
/* Program : point.h
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Header file dari prototype point
Tanggal : 04-04-2021
*/
#ifndef _POINT_H
#define _POINT_H
#include "boolean.h"
#define true 1
#define false 0
#include<stdio.h>
#include<conio.h>
#define Absis(P) (P).X
#define Ordinat(P) (P).Y
#define PI 3.14159265
#define boolean unsigned char
/** Definisi ABSTRACT DATA TYPE POINT **/
typedef struct{
int X; //absis
int Y; //ordinat
}POINT;
/*Prototype POINT */
/*Konstruktor membentuk POINT */
void CreatePOINT(POINT *P);
/* I.S : P terdefinisi, tidak diketahui nilainya
F.S : membentuk sebuah POINT dari komponen-komponennya dengan P
diinisialisasi nilainya dengan X=0 dan Y=0
*/
void CreatePOINT2(POINT *P, int XBaru, int YBaru);
/* I.S : P terdefinisi, tidak diketahui nilainya
F.S : memebentuk sebuah POINT dari komponen-komponennya dengan P
diinisialisasi nilainya dengan X=XBaru dan Y=YBaru
*/
/* Selektor POINT **/
int GetAbsis(POINT P);
// Mengirimkan komponen Absis dari P
int GetOrdinat(POINT P);
// Mengirimkan komponen ordinat dari P POINT
/* Set nilai komponen */
void SetAbsis(POINT *P, int newX);
/* I.S : P terdefinisi, dengan nilainya sembarang
F.S : Mengubah nilai komponen absis dari P dengan X=newX
*/
void SetOrdinat(POINT *P, int newX);
/* I.S : P terdefinisi, dengan nilainya sembarang
F.S : Mengubah nilai komponen ordinat dari P dengan Y=newY
*/
/* Destruktor/Dealokator: tidak perlu */
/* {KELOMPOK Interaksi dengan I/O device, BACA/TULIS} **/
void BacaPOINT(POINT *P);
/* I.S : P terdefinisi, mungkin kosong
F.S : P terdefinisi, dengan membaca nilai X dan Y
*/
void CetakPOINT(POINT P);
/* I.S : P terdefinisi, mungkin kosong
F.S : Menampilkan nilia komponen P ke layar dengan format "(X , Y)"
*/
boolean EQ(POINT P1, POINT P2);
// Mengirimkan true jika P1=P2, dan false jika sebaliknya
boolean NEQ(POINT P1, POINT P2);
// Mengirimkan true jika P1 tidak sama dengan P2, dan false jika sebaliknya
boolean LT(POINT P1, POINT P2);
// Mengirimkan true jika P1<P2, dan false jika sebaliknya
// Definisi lebih kecil: posisi tit8ik lebih ke kiri atau ke bawah dalam
bidang kartesian
boolean MT(POINT P1, POINT P2);
// Mengirimkan true jika P1>P2, dan false jika sebaliknya
// Definisi lebih besar: posisi tit8ik lebih ke kanan atau ke atas dalam
bidang kartesian
/** (Kelompok menentukan di mana P berada **/
boolean IsOrigin(POINT P);
// Menghasilkan true jika P berada pada titik origin yaitu nilai X=0 dan
Y=0, dan false jika sebaliknya
boolean IsOnSbX(POINT P);
// Menghasilkan true jika P terletak pada sumbu X yaitu nilai Y=0, dan
false jika sebaliknya
boolean IsOnSbY(POINT P);
// Menghasilkan true jika P terletak pada sumbu Y yaitu nilai X=0, dan
false jika sebaliknya
int Kuadran(POINT P);
// Menghasilkan kuadran dari P: 1,2,3, atau 4
// Precondition : P bukan titik origin, dan P tidak terletak di salah
satu sumbu
/** KELOMPOK OPERASI LAIN TERHADAP TYPE **/
POINT MirrorOf(POINT P, boolean SbX, boolean SbY);
// Menghasilkan salinan P, yang dicerminkan tergantung nilai SbX dan SbY
// Jika SbX bernilai true, maka dicerminkan terhadap sumbu X
// Jika SbY bernilai true, maka dicerminkan terhadap sumbu Y
float Jarak(POINT P);
// Menghitung jarak P dari titik origin (0,0)
void GeserKeSbX(POINT *P);
/* I.S : P terdefinisi, mungkin kosong
F.S : P berada pada sumbu X, jika tidak berada pada sumbu X, jika
tidak berada pada sumbu X makan geser P ke Sumbu X.
Contoh : Jika koordinat semula (9,9) menjadi (9,0)
*/
void GeserKeSbY(POINT *P);
/* I.S : P terdefinisi, mungkin kosong
F.S : P berada pada sumbu Y, jika tidak berada pada sumbu Y, maka
geser P ke Sumbu Y.
Contoh : Jika koordinat semula (9,9) menjadi (9,0)
*/
#endif

B. Analisis
Pada File II point.h ini adalah file header baru dengan ekstensi .h, yang berisi deklarasi, Jenis
bentukan (X: Integer Y: Integer), dan program tipe prototipe disertakan dalam file akan
diterapkan nanti, dan mungkin tidak ada deklarasi variabel. Di file ini
Ini memiliki 8 proses dan 12 fungsi yaitu Proses CreatePoint, Proses CreatePoint 2, Program
SetAbsis, Proses SetOrdinat, Langkah-langkah untuk membaca poin-poin utama Poin cetak
program, Program GeserKeSbX, Program GeserKeSbY dan Fungsi GetAbsis, Fungsi
GetOrdinat, Fungsi equalizer, Fungsi NEQ, Fungsi LT, Fungsi MT, Fungsi IsOrigin, Fungsi
IsOnSbX, Fungsi IsOnSbY, Fungsi kuadran, Fungsi mirrorof, Fungsi jarak.
3. File III line.h
A. Source Code
/*
Program : line.h
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Header file dari prototype line
Tanggal : 04-04-2021
*/
#ifndef _LINE_H
#define _LINE_H
#include "boolean.h"
#include "point.h"
#include <stdio.h>
#include <conio.h>
#define FirstPoint (L) (L).PAwal
#define EndPoint (L) (l).PAkhir
/** Definisi ABSTRACT DATA TYPE Line **/
typedef struct {
POINT PAwal; // Titik Awal
POINT PAkhir; // Titik Akhir
}Line;
/* Prototype Line */
/* Konstruktor membentuk Line */
void CreateLine (Line*L);
/* I.S : L terdefinisi, tidak diketahui nilainya
F.S : membentuk sebuah Line dari komponen - komponen nya dengan L
diinisialisasi nilainya dengan PAwal = First dan PAkhir = End
*/
void CreateLine2 (Line*L, POINT First, POINT End);
/* I.S : L terdefinisi, tidak diketahui nilainya
F.S : Membentuk sebuah Line dari komponen - komponennya dengan L
diinisialisasi nilainya dengan PAwal = First dan PAkhir = end
*/
/* Selektor Line */
POINT GetPAwal (Line L);
// Mengirimkan komponen Titik Awal dari L
POINT GetPAkhir (Line L);
// Mengirimkan komponen Titik Akhir dari L
/* Set nilai komponen */
void SetPAwal (Line*L, POINT newFirstP);
/* I.S : L terdefinisi, dengan nilainya sembarang
F.S : mengubah nilai komponen Titik Awal dari L dengan PAwal = newFirstP
*/
void SetPAkhir (Line*L, POINT newEndP);
/* I.S : L terdefinisi, dengan nilainya sembarang
F.S : Mengubah nilai komponen Titik Akhir dari L dengan PAkhir = newEndP
*/
/* Destruktor/Dealokator: tidak perlu */
/** {KELOMPOK Interaksi dengan I/O device, Baca/tulis} **/
void BacaLine (Line*L);
/* I.S : L terdefinsi, mungkin kosong
F.S : komonen nilai PAwal dan PAkhir dari yang dibaca
*/
void CetakLine (Line L);
/* I.S : L terdefinisi, mungkin kosong
F.S : Menampilkan nilai komponen L ke layar dengan format "(P1 (X1,Y1),
P2 (X2,Y2))
*/
/** Kelompok operasi relasional terhadap Line **/
boolean IsEQLine (Line L1, Line L2);
// Mengirimkan true jika L1 = L2, yaitu
// Jika titik awal dari L1 sama dengan titik awal dari L2 dan
// titik akhir L1 sama titik akhir dari L2.
boolean IsNEQLine (Line P1, Line P2);
// Mengirimkan true jika P1 tidak sama dengan P2, negasi dari EQline
/** Kelompok menentukan dimana L berada **/
boolean IsLOnSbx (Line L);
// Menghasilkan true jika L terletak pada sumbu X yaitu titik Awal dan
titik
Akhir dari L berada pada sumbu X dan false jika sebaliknya
boolean IsLOnSby (Line L);
// Menghasilkan true jika L terletak pada sumbu Y yaitu titik Awal dan
titik
Akhir dari L berada pada sumbu X, dan false jika sebaliknya
boolean IsTegakLurus (Line L1, Line L2);
// Menghasilkan true jika L1 saling tegak lurus terhadap L2, dan false jika
sebaliknya. hint : gunakan gradien Garis.
boolean IsSejajar (Line L1, Line L2);
// Menghasilkan true jika L1 saling "sejajar" terhadap L2, dan false jika
sebaliknya
/** KELOMPOK OPERASI LAIN TERHADAP TYPE **/
void GeserLine (Line*L, int deltaX, int deltayY);
/* I.S : L terdefinisi, mungkin kosong
F.S : L bergeser sebesar absisnya deltaX dan ordinatnya deltaY
*/
#endif

B. Analisis
Pada file III line.h ini adalah file header baru dengan ekstensi .h, yang berisi deklarasi,
Jenis formulir adalah Line (Awal: POINT dan End: POINT), dan tipe prototipe disertakan
dalam file ini Program akan diimplementasikan nanti, dan mungkin tidak ada deklarasi
variabel. Di file ini Ada 7 program dan 8 fungsi yaitu Proses CreateLine, Proses CreateLine2,
Program SetPA awal, Program SetPA terakhir, Program BacaLine, Langkah-langkah garis
pencetakan, Garis slip program dan Fungsi GetPAwal, Fungsi GetPA terakhir, Fungsi
IsEQLine, Fungsi IsNEQLine, Fungsi IsLOnSbX, Fungsi IsLOnSbY, Berfungsi lurus, Fungsi
IsSejajar
4. File IV point.c
A. Source Code
/* Program : point.c
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Membuat realisasi dari point.h / realisasi prototype
Tanggal : 04-04-2021
*/
#include "point.h"
#include<stdio.h>
#include<conio.h>
#include <math.h>
/*Realisasi dari Prototype POINT */
/*Konstruktor membentuk POINT */
void CreatePOINT(POINT *P){
/* I.S : P terdefinisi, tidak diketahui nilainya
F.S : membentuk sebuah POINT dari komponen-komponennya dengan P
diinisialisasi nilainya dengan X=0 dan Y=0
*/
(*P).X=0;
(*P).Y=0;
}
void CreatePOINT2(POINT *P, int XBaru, int YBaru){
/* I.S : P terdefinisi, tidak diketahui nilainya
F.S : memebentuk sebuah POINT dari komponen-komponennya dengan P
diinisialisasi nilainya dengan X=XBaru dan Y=YBaru
*/
(*P).X=XBaru;
(*P).Y=YBaru;
}
/* Selektor POINT **/
int GetAbsis(POINT P){
// Mengirimkan komponen Absis dari P
return (P.X);
}
int GetOrdinat(POINT P){
// Mengirimkan komponen ordinat dari P POINT
return (P.Y);
}
/* Set nilai komponen */
void SetAbsis(POINT *P, int newX){
/* I.S : P terdefinisi, dengan nilainya sembarang
F.S : Mengubah nilai komponen absis dari P dengan X=newX
*/
(*P).X=newX;
}
void SetOrdinat(POINT *P, int newY){
/* I.S : P terdefinisi, dengan nilainya sembarang
F.S : Mengubah nilai komponen ordinat dari P dengan Y=newY
*/
(*P).Y=newY;
}
/* Destruktor/Dealokator: tidak perlu */
/* {KELOMPOK Interaksi dengan I/O device, BACA/TULIS} **/
void BacaPOINT(POINT *P){
/* I.S : P terdefinisi, mungkin kosong
F.S : P terdefinisi, dengan membaca nilai X dan Y
*/
printf("Masukan nilai x= "); scanf("%d", &(*P).X);
printf("Masukan nilai y= "); scanf("%d", &(*P).Y);
}
void CetakPOINT(POINT P){
/* I.S : P terdefinisi, mungkin kosong
F.S : Menampilkan nilia komponen P ke layar dengan format "(X , Y)"
*/
printf("(""%d"",""%d"")", P.X, P.Y);
}
boolean EQ(POINT P1, POINT P2){
// Mengirimkan true jika P1=P2, dan false jika sebaliknya
if(P1.X==P2.X && P1.Y==P2.Y)
return (true);
else
return (false);
}
boolean NEQ(POINT P1, POINT P2){
// Mengirimkan true jika P1 tidak sama dengan P2, dan false jika sebaliknya
if(P1.X != P2.X && P1.Y != P2.Y)
return (true);
else
return (false);
}
boolean LT(POINT P1, POINT P2){
// Mengirimkan true jika P1<P2, dan false jika sebaliknya
// Definisi lebih kecil: posisi tit8ik lebih ke kiri atau ke bawah dalam
bidang kartesian
if(P1.X<P2.X && P1.Y<P2.Y)
return (true);
else
return (false);
}
boolean MT(POINT P1, POINT P2){
// Mengirimkan true jika P1>P2, dan false jika sebaliknya
// Definisi lebih besar: posisi tit8ik lebih ke kanan atau ke atas dalam
bidang kartesian
if(P1.X>P2.X && P1.Y>P2.Y)
return (true);
else
return (false);
}
/** (Kelompok menentukan di mana P berada **/
boolean IsOrigin(POINT P){
// Menghasilkan true jika P berada pada titik origin yaitu nilai X=0 dan
Y=0, dan false jika sebaliknya
if(P.X==0 && P.Y==0)
return (true);
else
return (false);
}
boolean IsOnSbX(POINT P){
// Menghasilkan true jika P terletak pada sumbu X yaitu nilai Y=0, dan
false jika sebaliknya
if(P.Y==0)
return (true);
else
return (false);
}
boolean IsOnSbY(POINT P){
// Menghasilkan true jika P terletak pada sumbu Y yaitu nilai X=0, dan
false jika sebaliknya
if(P.X==0)
return (true);
else
return (false);
}
int Kuadran(POINT P){
// Menghasilkan kuadran dari P: 1,2,3, atau 4
// Precondition : P bukan titik origin, dan P tidak terletak di salah
satu sumbu
if (P.X >0 && P.Y > 0)
return (1);
else if (P.X<0 && P.Y > 0)
return (2);
else if (P.X<0 && P.Y <0)
return (3);
else if (P.X>0 && P.Y<0)
return (4);
}
/** KELOMPOK OPERASI LAIN TERHADAP TYPE **/
POINT MirrorOf(POINT P, boolean SbX, boolean SbY){
// Menghasilkan salinan P, yang dicerminkan tergantung nilai SbX dan SbY
// Jika SbX bernilai true, maka dicerminkan terhadap sumbu X
// Jika SbY bernilai true, maka dicerminkan terhadap sumbu Y
POINT temp;
if(SbX){
temp.X=-1*(P.X);
temp.Y=P.Y;
}
else if (SbY){
temp.X=P.X;
temp.Y=-1*(P.Y);
}
return (temp);
}
float Jarak(POINT P){
// Menghitung jarak P dari titik origin (0,0)
float Jarak;
Jarak=sqrt((P.X*P.X)+(P.Y*P.Y));
return (Jarak);
}
void GeserKeSbX(POINT *P){
/* I.S : P terdefinisi, mungkin kosong
F.S : P berada pada sumbu X, jika tidak berada pada sumbu X, jika
tidak berada pada sumbu X makan geser P ke Sumbu X.
Contoh : Jika koordinat semula (9,9) menjadi (9,0)
*/
(*P).X=(*P).X;
(*P).Y=0;
}
void GeserKeSbY(POINT *P){
/* I.S : P terdefinisi, mungkin kosong
F.S : P berada pada sumbu Y, jika tidak berada pada sumbu Y, maka
geser P ke Sumbu Y.
Contoh : Jika koordinat semula (9,9) menjadi (9,0)
*/
(*P).Y=(*P).Y;
(*P).X=0;
}

B. Analisis
Pada file IV POINT.c ini adalah bagian dari bagian utama program POINT. File tersebut
bernama File realisasi prototipe didefinisikan dalam point.h, dan dalam bentuk kode program
bahasa C dengan deklarasi variabel. Dalam file ini, ini memiliki 8 proses dan 12 fungsi yaitu
1) Procedure CreatePoint digunakan untuk membentuk sebuah point Inisialisasi nilai
dengan X = 0 dan Y = 0
2) Procedure CreatePoint2, digunakan untuk membentuk point dengan Inisialisasi nilai
dengan X = New X dan Y = YNew
3) Procedure SetAbsis, digunakan untuk merubah nilai absis komponen P saat X = newX
4) Procedure SetOrdinate digunakan untuk mengubah nilai komponen ordinat dari P
menjadi Y = baru Y
5) Procedure BacaPOINT, berfungsi untuk membaca nilai X dan Y.
6) Procedure Cetak POINT, digunakan untuk menampilkan nilai P pada layar dengan
format sebagai berikut "(X, Y)"
7) Procedure GeserKeSbX, digunakan untuk memindahkan titik (bila tidak pada sumbu
X)
8) Procedure GeserKeSbY, digunakan untuk memindahkan titik (jika tidak pada sumbu
Y)
Function
1) Fungsi GetAbsis, yang mengirimkan nilai absis P dalam bentuk integer
2) Fungsi GetOrdinat, yang mengirimkan nilai koordinat dari P dalam bentuk integer
3) Fungsi EQ, dinyatakan dalam bentuk Boolean, jika P1 = P2 dan kirim, maka fungsi
tersebut mengirimkan true Jika tidak salah
4) Fungsi NEQ ada dalam bentuk nilai Boolean, jika P1 tidak, fungsi mengirimkan true
Sama dengan P2, jika tidak salah
5) Fungsi LT, dinyatakan dalam bentuk boolean, jika P1 <P2 dan Jika tidak salah
6) Fungsi MT, dinyatakan dalam bentuk Boolean, jika P1> P2 dan Jika tidak salah
7) Fungsi IsOrigin, bentuknya adalah nilai Boolean, jika X = 0 dan Y = 0, jika tidak
mengembalikan salah
8) Fungsi IsOnSbX, bentuknya adalah nilai Boolean, jika P, fungsi mengembalikan nilai
true Terletak pada sumbu X, yaitu nilai Y = 0, jika tidak salah
9) Fungsi IsOnSbY, bentuknya adalah nilai Boolean, jika P, fungsi mengembalikan nilai
true Terletak pada sumbu Y, yaitu nilai X = 0, jika tidak salah
10) Fungsi kuadran, berupa bilangan bulat untuk menghasilkan kuadran P
11) Fungsi mirrorof, bentuknya POINT, perannya menghasilkan copy P, copynya Sesuai
dengan nilai SbX dan SbY
12) Fungsi jarak, berupa bilangan floating point yang digunakan untuk menghitung jarak
5. File V line.c
A. Source Code
/* Program : line.c
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : Realisasi dari prototype Line
Tanggal : 04-04-2021
*/
#include "line.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
//realisasi dari prottotYpe ADT line
/* PrototYpe Line */
/* Konstruktor membentuk Line */
void CreateLine (Line *L){
/* I.S : L terdefinisi, tidak diketahui nilainYa
F.S : membentuk sebuah Line dari komponen - komponen nYa dengan L
diinisialisasi nilainYa dengan PAwal = (0,0) dan PAkhir = (0,0)
*/
(*L).PAwal.X = 0;
(*L).PAwal.Y = 0;
(*L).PAkhir.X = 0;
(*L).PAkhir.Y = 0;
}
void CreateLine2 (Line *L, POINT First, POINT End){
/* I.S : L terdefinisi, tidak diketahui nilainYa
F.S : Membentuk sebuah Line dari komponen - komponennYa dengan L
diinisialisasi nilainYa dengan PAwal = First dan PAkhir = end
*/
(*L).PAwal.X = First.X;
(*L).PAwal.Y = First.Y;
(*L).PAkhir.X = End.X;
(*L).PAkhir.Y = End.Y;
}
/* Selektor Line */
POINT GetPAwal (Line L){
// Mengirimkan komponen Titik Awal dari L
return L.PAwal;
}
POINT GetPAkhir (Line L){
// Mengirimkan komponen Titik Akhir dari L
return L.PAkhir;
}
/* Set nilai komponen */
void SetPAwal (Line *L, POINT newFirstP){
/* I.S : L terdefinisi, dengan nilainYa sembarang
F.S : mengubah nilai komponen Titik Awal dari L dengan PAwal =
newFirstP
*/
(*L).PAwal.X = newFirstP.X;
(*L).PAwal.Y = newFirstP.Y;
}
void SetPAkhir (Line *L, POINT newEndP){
/* I.S : L terdefinisi, dengan nilainYa sembarang
F.S : Mengubah nilai komponen Titik Akhir dari L dengan PAkhir =
newEndP
*/
(*L).PAkhir.X = newEndP.X;
(*L).PAkhir.Y = newEndP.Y;
}
/* Destruktor/Dealokator: tidak perlu */
/** {KELOMPOK Interaksi dengan I/O device, Baca/tulis} **/
void BacaLine (Line *L){
/* I.S : L terdefinsi, mungkin kosong
F.S : komonen nilai PAwal dan PAkhir dari Yang dibaca
*/
int X1,X2,Y1,Y2;
printf("\nMasukan PAwal X : ");scanf("%d",&X1);
printf("\nMasukan PAwal Y : ");scanf("%d",&Y1);
printf("\nMasukan PAkhir X : ");scanf("%d",&X2);
printf("\nMasukan PAkhir Y : ");scanf("%d",&Y2);
(*L).PAwal.X = X1;
(*L).PAwal.Y = Y1;
(*L).PAkhir.X = X2;
(*L).PAkhir.Y = Y2;
}
void CetakLine (Line L){
/* I.S : L terdefinisi, mungkin kosong
F.S : Menampilkan nilai komponen L ke laYar dengan format "(P1
(X1,Y1), P2 (X2,Y2))
*/
printf("\nLine : (P1(%d,%d),
P2(%d,%d))",L.PAwal.X,L.PAwal.Y,L.PAkhir.X,L.PAkhir.Y);
}
/** Kelompok operasi relasional terhadap Line **/
boolean IsEQLine (Line L1, Line L2){
// Mengirimkan true jika L1 = L2, Yaitu
// Jika titik awal dari L1 sama dengan titik awal dari L2 dan
// titik akhir L1 sama titik akhir dari L2.
if(L1.PAwal.X == L2.PAwal.X && L1.PAwal.Y == L2.PAwal.Y && L1.PAkhir.X
== L2.PAkhir.X && L1.PAkhir.Y == L2.PAkhir.Y)
return true;
else
return false;
}
boolean IsNEQLine (Line P1, Line P2){
// Mengirimkan true jika P1 tidak sama dengan P2, negasi dari EQline
if(P1.PAwal.X != P1.PAwal.X || P1.PAwal.Y != P1.PAwal.Y || P1.PAkhir.X
!= P1.PAkhir.X || P1.PAkhir.Y != P1.PAkhir.Y)
return true;
else
return false;
}
/** Kelompok menentukan dimana L berada **/
boolean IsLOnSbX (Line L){
// Menghasilkan true jika L terletak pada sumbu X Yaitu titik Awal dan
titik
Akhir dari L berada pada sumbu X dan false jika sebaliknYa
if(L.PAwal.Y == 0 && L.PAkhir.Y == 0)
return true;
else
return false;
}
boolean IsLOnSbY (Line L){
// Menghasilkan true jika L terletak pada sumbu Y Yaitu titik Awal dan
titik
Akhir dari L berada pada sumbu X, dan false jika sebaliknYa
if(L.PAwal.X == 0 && L.PAkhir.X == 0)
return true;
else
return false;
}
boolean IsTegakLurus (Line L1, Line L2){
// Menghasilkan true jika L1 saling tegak lurus terhadap L2, dan false jika
sebaliknYa. hint : gunakan gradien Garis.
float m1,m2;
int i,a,b,c,e,z;
//Algoritma
//gradien L1
a = L1.PAwal.X;
b = L1.PAwal.Y;
c = L1.PAkhir.X;
e = L1.PAkhir.Y;
z = (e-b)/(c-a);
m1 = z;
if(c - a == 0)
m1 = 1;
//gradien L2
a = L2.PAwal.X;
b = L2.PAwal.Y;
c = L2.PAkhir.X;
e = L2.PAkhir.Y;
z = (e-b)/(c-a);
m2 = z;
if(c - a == 0)
m2 = 1;
if(m1 * m2 == -1){
return true;
}
else{
return false;
}
}
boolean IsSejajar (Line L1, Line L2){
// Menghasilkan true jika L1 saling "sejajar" terhadap L2, dan false jika
sebaliknya
float m1,m2;
int i,a,b,c,e,z;
//Algoritma
//gradien L1
a = L1.PAwal.X;
b = L1.PAwal.Y;
c = L1.PAkhir.X;
e = L1.PAkhir.Y;
z = (e-b)/(c-a);
m1 = z;
if(c - a == 0)
m1 = 1;
//gradien L2
a = L2.PAwal.X;
b = L2.PAwal.Y;
c = L2.PAkhir.X;
e = L2.PAkhir.Y;
z = (e-b)/(c-a);
m2 = z;
if(c - a == 0)
m2 = 1;
if(m1==m2){
return true;
}
else{
return false;
}
}
/** KELOMPOK OPERASI LAIN TERHADAP TYPE **/
void GeserLine (Line *L, int deltaX, int deltaY){
/* I.S : L terdefinisi, mungkin kosong
F.S : L bergeser sebesar absisnYa deltaX dan ordinatnYa deltaY
*/
(*L).PAwal.X = (*L).PAwal.X + deltaX;
(*L).PAwal.Y = (*L).PAwal.Y + deltaY;
(*L).PAkhir.X = (*L).PAkhir.X + deltaX;
(*L).PAkhir.Y = (*L).PAkhir.Y + deltaY;
}

B. Analisis
Pada file ini adalah Bagian utama dari program Line. File tersebut dinamakan file
Realisasi prototipe didefinisikan di line.h dan berupa kode program dalam bahasa C.
Ini memiliki deklarasi variabel. Dalam file ini, ini memiliki 7 proses dan 8 fungsi yaitu :
1) Proses CreateLine digunakan untuk membentuk Line yang diinisialisasi dengan L
Nilainya sama dengan PAwal = (0.0) dan End = (0.0).
2) Proses CreateLine2, digunakan untuk membentuk garis yang diinisialisasi dengan L
PAwal = Pertama, PAkhir = Nilai akhir.
3) ProcedureSetPwal, digunakan untuk mengubah nilai komponen awal L dengan
perintah berikut PAwal = newFirstP.
4) Final ProcedureSetPA, digunakan untuk mengubah nilai komponen akhir L melalui
perintah berikut PAkhir = newEndP.
5) BacaLine, komponen L fungsional, memiliki nilai awal dan nilai akhir PA baca.
6) Program PrintLine, digunakan untuk menampilkan nilai L di layar.
7) Proses ShiftLine, digunakan untuk membuat nilai L sama dengan deltax absis dan
Ordinat delta.
Function
1) Fungsi GetPAwal, yaitu fungsi yang digunakan untuk mengirimkan titik awal L
Punctate.
2) Last GetPA function, yaitu fungsi yang digunakan untuk mengirim komponen
endpoint L Punctate.
3) Fungsi IsEQLine ada dalam bentuk nilai Boolean. Jika kondisi berikut terpenuhi,
fungsi akan mengirimkan true L1 = L2.
4) Fungsi IsNEQLine, yang muncul berupa nilai boolean, jika kondisi berikut ini maka
fungsi akan mengirimkan true L1 berbeda dengan L2.
5) Fungsi IsLOnSbX, bentuknya adalah nilai Boolean, jika L, fungsi mengembalikan
nilai true Pada sumbu X, jika tidak salah.
6) Fungsi IsLOnSbY memiliki bentuk Boolean, dan mengembalikan nilai true jika L
Pada sumbu Y, jika tidak salah.
7) Fungsi IsTegakLurus, mengembalikan dalam bentuk nilai boolean, jika terpenuhi,
mengembalikan nilai true Dengan menghitung kemiringan setiap garis, L1 = L2
berbentuk vertikal.
8) Fungsi IsSejajar, yang memiliki bentuk Boolean, mengembalikan nilai true jika
terpenuhi Dengan menghitung kemiringan setiap garis, L1 = L2 berbentuk vertikal.
6. File VI mpointline.c
A. Source Code
/* Program : mpointline.c
Author : Hira Nur Afifah, 3411201036
Kelas : B
Deskripsi : main driver point dan line
Tanggal : 04-04-2021
*/
#include "point.h"
#include "line.h"
#include <stdio.h>
#include <conio.h>
main(){
int choice;
//kamus ADT POINT
int newX,newY,abs,ord,kuadran,jarak;
POINT p1,p2;
//kamus ADT LINE
Line L1,L2;
POINT new1,new2;
POINT ABS,ORD;
int deltax,deltay;
printf("\n =================================================");
printf("\n ======== Praktikum ADT POINT ,ADT LINE =======");
printf("\n =================================================");
printf("\n 1. ADT POINT");
printf("\n 2. ADT LINE");
printf("\n enter input 1/2 :");scanf("%d",&choice);
if(choice == 1){
system("cls");
printf("\n================== ADT POINT ===================");
//konstruktor
printf("\n-------------= KONSTRUKTOR POINT =--------------");
CreatePOINT(&p1);
CetakPOINT(p1);
printf("\nMasukan X baru : ");scanf("%d",&newX);
printf("\nMasukan Y baru : ");scanf("%d",&newY);
CreatePOINT2(&p1,newX,newY);
printf("\n");CetakPOINT(p1);
printf("\n-------------= SELEKTOR POINT =--------------");
abs = GetAbsis(p1);printf("\nAbsis P : %d",abs);
ord = GetOrdinat(p1);printf("\nOrdinat P : %d",ord);
printf("\n-------------= SET NILAI POINT =--------------");
printf("\nMasukan absis baru : ");scanf("%d",&abs);
SetAbsis(&p1,abs);
printf("\nMasukan ordinat baru : ");scanf("%d",&ord);
SetOrdinat(&p1,ord);
CetakPOINT(p1);
printf("\n-------------= READ/WRITE =--------------\n");
BacaPOINT(&p2);
CetakPOINT(p2);
printf("\n-------------= OPERASI RASIONAL POINT =--------------\n");
CetakPOINT(p1);
CetakPOINT(p2);
if (EQ(p1,p2)){
printf("\nnilai P1 sama dengan nilai P2\n");
}
else{
printf("\nnilai p1 tidak sama dengan nilai p2\n");}
if (NEQ(p1,p2)){
printf("\nnilai P1 tidak sama dengan nilai P2\n");
}
else{
printf("\nnilai p1 sama dengan nilai p2\n");}
if (LT(p1,p2)){
printf("\nnilai P1 lebih kecil dengan nilai P2\n");
}
else {
printf("\nnilai p1 lebih besar dengan nilai p2\n");}
if (MT(p1,p2)){
printf("\nnilai P1 lebih besar dengan nilai P2\n");
}
else {
printf("\nnilai p1 lebih kecil dengan nilai p2\n");}
printf("\n-------------= MENENTUKAN DIMANA POINT =--------------");
if (IsOrigin(p1)){
printf("\nnilai P berada pada titik origin");
}
else {
printf("\nnilai P tidak pada titik origin");}
if (IsOnSbX(p1)){
printf("\nnilai P berada pada sumbu X");
}
else {
printf("\nnilai P tidak pada sumbu X");}
if (IsOnSbY(p1)){
printf("\nnilai P berada pada sumbu Y");
}
else{
printf("\nnilai P tidak berada pada sumbu Y");}
kuadran = Kuadran(p1);
printf("\nkuadran P ada di kuadran : %d",kuadran);
printf("\n-------------=OPERASI LAIN TERHADAP POINT =--------------");
printf("\n\n----Point---- ");CetakPOINT(p1);
p1 = MirrorOf(p1,IsOnSbX(p1),IsOnSbY(p1));
printf("\n\n----mirror P---- : ");CetakPOINT(p1);
jarak = Jarak(p1);
printf("\n\n----jarak P : %d",jarak);
printf("\n\n----geser sumbu x----- :");
GeserKeSbX(&p1);
CetakPOINT(p1);
printf("\n\n----geser sumbu y----");
GeserKeSbY(&p1);
CetakPOINT(p1);
}
else{
system("cls");
printf("\n================== ADT LINE ===================");
//konstruktor
printf("\n-------------= KONSTRUKTOR LINE =--------------");
CreateLine(&L1);
CetakLine(L1);
printf("\nMasukan X1 baru : ");scanf("%d",&new1.X);
printf("\nMasukan Y1 baru : ");scanf("%d",&new1.Y);
printf("\nMasukan X2 baru : ");scanf("%d",&new2.X);
printf("\nMasukan Y2 baru : ");scanf("%d",&new2.Y);
CreateLine2(&L1,new1,new2);
printf("\n");CetakLine(L1);
printf("\n-------------= SELEKTOR LINE =--------------");
ABS = GetPAwal(L1);printf("\nPawal x : %d y : %d",ABS.X,ABS.Y);
ORD = GetPAkhir(L1);printf("\nPakhir x : %d y : %d",ORD.X,ORD.Y);
printf("\n-------------= SET NILAI LINE =--------------");
printf("\nMasukan absis awal : ");scanf("%d",&ABS.X);
printf("\nMasukan ordinat awal : ");scanf("%d",&ABS.Y);
SetPAwal(&L1,ABS);
printf("\nMasukan absis akhir : ");scanf("%d",&ORD.X);
printf("\nMasukan ordinat akhir : ");scanf("%d",&ORD.Y);
SetPAkhir(&L1,ORD);
CetakLine(L1);
printf("\n-------------= READ/WRITE =--------------");
BacaLine(&L2);
CetakLine(L2);
printf("\n-------------= OPERASI RASIONAL LINE =--------------");
CetakLine(L1);
CetakLine(L2);
if (IsEQLine(L1,L2)){
printf("\nnilai L1 sama dengan nilai L2\n");
}
else{
printf("\nnilai L1 tidak sama dengan nilai L2\n");}
if (IsNEQLine(L1,L2)){
printf("\nnilai L1 tidak sama dengan nilai L2\n");
}
else{
printf("\nnilai L1 sama dengan nilai L2\n");}
if (IsLOnSbX(L1)){
printf("\nnilai L1 berada pada sumbu x\n");
}
else {
printf("\nnilai L1 tidak berada pada sumbu x\n");}
if (IsLOnSbY(L1)){
printf("\nnilai L1 berada pada sumbu y \n");
}
else {
printf("\nnilai L1 tidak berada pada sumbu y\n");}
printf("\n-------------= MEMBANDINGKAN LINE =--------------\n");
if (IsTegakLurus(L1,L2)){
printf("\nL1 tegak lurus dengan L2");
}
else {
printf("\nL1 tidak tegak lurus dengan L2");}
if (IsSejajar(L1,L2)){
printf("\nL1 sejajar dengan L2");
}
else {
printf("\nL1 tidak sejajar dengan L2");}
printf("\n-------------= GESER LINE TERHADAP DELTAX DAN DELTA Y =-----
-----------\n");
CetakLine(L1);
printf("\nmasukan nilai deltax");scanf("%d",&deltax);
printf("\nmasukan nilai deltay");scanf("%d",&deltay);
GeserLine(&L1,deltax,deltay);
CetakLine(L1);
}
}

B. Analisis
Pada File VI mpointline.c digunakan untuk menguji ADT dan Sebagai jawaban atas
pertanyaan yang diberikan.
 Hasil Screenshot
 Hasil Screenshot ADT POINT
 Hasil Screenshot ADT LINE
BAB III
KESIMPULAN

Pada modul 2 ini mempelajari tentang Abstract Data Type POINT dan Abstract Data
Type Line yang dimana memerlukan spesifikasi type primitif yang berhubungan dengan
POINT dan Line. ADT Line Ini dirancang untuk menghitung panjang baris dari data ke 1
berdasarkan data yang ingin kita masukkan untuk terus menghitung panjang baris agar tidak
menambahkan lebih banyak data. Indikatornya adalah 999 untuk berhenti menghitung
panjang baris baris. Dalam program ini, diperlukan file header yang berisi boolean.h, yang
berisi
Pernyataan yang berisi pemanggilan fungsi benar atau salah dan point.h dan line.h yang berisi
pernyataan, Jenis formasi dan prototipe. Selain itu, ada file teks, disimpan sebagai point.c dan
line.c. Ini berisi realisasi dari prototipe dan merupakan isi dari program POINT and Line.
Dan driver utama disimpan di file mpointline.c, yang merupakan file induk. ADT POINT dan
prosedur ADT Line.

Anda mungkin juga menyukai