Tugas Alstrukdat ADT Point

ada 4 file yang dibutuhkan, yakni boolean.h, point.h, point.c, dan main.c untuk menjalankan program ADT point.h. Semoga tugas ini bermanfaat untuk semua…

BOOLEAN.h

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

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

POINT.h

/* file : point.h */

/* ADT point */


#ifndef POINT_h

#define POINT_h

#include “BOOLEAN.h”


/* definisi ADT point */

typedef struct

{

int x; /* absis */

int y; /* ordinat */

} point;


/* definisi prototipe primitif */

/*** konstruktor membentuk point ***/

point makepoint(int x,int y);

/* membentuk sebuah point dari komponen-komponennya */


/*** selektor point ***/

int getabsis (point p);

/* mengirimkan komponen absis dari p */


int getordinat(point p);

/* mengirimkan komponen ordinat dari p */


/*** destruktor/dealokator:tidak perlu ***/

/*** set nilai komponen point ***/

void setabsis(point *p,int newx);

/* men-set komponen absis dari p */


void setordinat(point *p,int newy);

/* men-set komponen ordinat dari p */


/* kelompok interaksi dengan I/O device, baca/tulis */

void bacapoint(point *p);

/* bacapoint(x,y,p) membentuk p dari x dan y yang dibaca */


void tulispoint(point p);

/* nilai p ditulis ke layar dg format (X,Y) */


/* kelompok operasi aritmatika terhadap byte */

point pluspoint(point p1,point p2);

/* menghasilkan salinan p yang berisi p1+p2 */

/* melakukan operasi penjumlahan vektor */


point minuspoint(point p1,point p2);

/* menghasilkan p1-p2 */


/*** kelompok operasi relasional terhadap point ***/

boolean EQ(point p1,point p2);

/* mengirimkan true jika p1=p2 */


boolean NEQ(point p1,point p2);

/* mengirimkan true jika p1 tidak sama dengan p2 */


boolean LT(point p1,point p2);

/* mengirimkan true jika p1<p2 */

/* definisi lebih kecil:lebih “kiri-bawah” dalam bidang kartesian */


boolean GT(point p1,point p2);

/* mengirimkan true jika p1>p2 */

/* definisi lebih besar:lebih “kanan-atas” dalam bidang kartesian */


/* kelompok menentukan dimana p berada */

boolean isorigin(point p);

/* menghasilkan true jika p adalah titik origin */


boolean isonsbx(point p);

/* menghasilkan true jika p terletak pada sumbu x */


boolean isonsby(point p);

/* menghasilkan true jika p terletak pada sumbu y */


int kuadran(point p);

/* menghasilkan kuadran dari p: 1,2,3,atau 4 */

/* precondition: p bukan titik origin dan p tdk terletak pd slh satu sumbu */


/* kelompok operasi lain terhadap type */

point nextx(point p);

/* mengirim salinan p dengan absis ditambah satu */


point nexty(point p);

/* mengirim salinan p dengan ordinat ditambah satu */


point plusdelta(point p,int deltax,int deltay);

/* mengirim salinan p yang absisnya = absis(p)+deltax dan */

/* ordinatnya = ordinat(p)+deltay */


point mirrorofpoint(point p,boolean sbx,boolean sby);

/* menghasilkan salinan p yang dicerminkan */

/* tergantung nilai sbx dan sby */

/* jika sbx bernilai true, maka dicerminkan terhadap sb x */

/* jika sby bernilai true, maka dicerminkan terhadap sb y */


float jarak0(point p);

/* menghitung jarak p ke (0,0) */


void geserpoint(point *p,int deltax,int deltay);

/*I.S : p terdefinisi */

/*F.S : p digeser sebesar deltax dan ordinatnya sebesar delta y*/


void geserpointkesbx(point *p);

/* I.S : p terdefinisi */

/* F.S : p di sumbu x dg absis = absis semula */

/* proses : tergeser ke sumbu x */

/* contoh : jika koordinat semula(9,9) menjadi (9,0)*/


void geserpointkesby(point *p);

/* I.S : p terdefinisi */

/* F.S : p di sumbu y dg absis = absis semula */

/* proses : tergeser ke sumbu y */

/* contoh : jika koordinat semula(9,9) menjadi (0,9)*/



void mirrorpoint(point *p,boolean sbx,boolean sby);

/* I.S : p terdefinisi */

/* F.S : p dicerminkan tergantung nilai sbx atau sby */

/* jika sbx true maka dicerminkan thd sumbu x */

/* jika sby true maka dicerminkan thd sumbu y */


void putarpoint(point *p,float sudut);

/* I.S : p terdefinisi */

/* F.S : p diputar sebesar sudut derajat */


#endif

POINT.c
#include <stdio.h>
#include <math.h>
#include “POINT.h”
#include “BOOLEAN.h”

point makepoint(int x,int y){
point temp; //buat varibel tipe bentukan point bernama temp.
temp.x=x;
temp.y=y;
return temp;
}
int getabsis (point p){
return p.x; //mendapatkan nilai absis x
}

int getordinat(point p){
return p.y; //mendapatkan nilai ordinat y
}

void setabsis(point *p,int newx){
(*p).x=newx; // menSet nilai x
}

void setordinat(point *p,int newy){
(*p).y=newy; // menSet nilai y
}

void bacapoint(point *p){
printf(“masukkan nilai x :\n”);
scanf(“%d”,&(*p).x); //membaca inputan x dari keyboard
printf(“masukkan nilai y :\n”);
scanf(“%d”,&(*p).y); //membaca inputan y dari keyboard
}

void tulispoint(point p){
printf(“x : %d \n”, p.x); //mencetak nilai x dan y ke layar
printf(“y : %d \n \n”, p.y);
}

point pluspoint(point p1,point p2){
point temp;
temp.x = p1.x + p2.x;
temp.y = p1.y + p2.y;
return temp;
}

point minuspoint(point p1,point p2){
point temp;
temp.x = p1.x – p2.x;
temp.y = p1.y – p2.y;
return temp;
}

boolean EQ(point p1,point p2){
if((p1.x==p2.x) && (p1.y==p2.y)){
return 1;
}
else{
return 0;
}
}

boolean NEQ(point p1,point p2){
if((p1.x != p2.x) && (p1.y != p2.y)){
return 1;
}
else{
return 0;
}
}

boolean LT(point p1,point p2){
if((p1.x < p2.x) && (p1.y < p2.y)){
return 1;
}
else{
return 0;
}
}

boolean GT(point p1,point p2){
if((p1.x > p2.x) && (p1.y > p2.y)){
return 1;
}
else{
return 0;
}
}

boolean isorigin(point p){
if((p.x == 0) && (p.y == 0)){
return 1;
}
else{
return 0;
}
}

boolean isonsbx(point p){
if(p.y == 0){
return 1;
}
else{
return 0;
}
}

boolean isonsby(point p){
if(p.x == 0){
return 1;
}
else{
return 0;
}
}

int kuadran(point p){
if (p.x>0 && p.y>0)          //syarat bila point p terletak di kuadran 1
return 1;               //mengembalikan nilai p terletak dikuadran 1
else if (p.x<0 && p.y>0)    //syarat bila point p terletak di kuadran 2
return 2;             //mengembalikan nilai p terletak dikuadran 2
else if (p.x<0 && p.y<0)    //syarat bila point p terletak di kuadran 3
return 3;             //mengembalikan nilai p terletak dikuadran 3
else if (p.x>0 && p.y<0)    //syarat bila point p terletak di kuadran 4
return 4;             //mengembalikan nilai p terletak dikuadran 4
}

point nextx(point p){
point temp;
temp.x=p.x + 1;
return temp;
}

point nexty(point p){
point temp;
temp.x=p.x;
temp.y=p.y + 1;
return temp;
}
point plusdelta(point p,int deltax,int deltay){
point temp;
temp.x=p.x + deltax;
temp.y=p.y + deltay;
return temp;
}
point mirrorofpoint(point p,boolean sbx,boolean sby){
point temp;         //membuat variabel bertipe point bernama temp
if(sbx){            //cek kondisi
temp.x=-1 * (p.x);         //dicermikan terhadap sumbu x
temp.y=p.y;
}
else if(sby){
temp.x=p.x;
temp.y=-1 * (p.y);     //dicermikan terhadap sumbu y
}
return temp;            //mengembalikan nilai po bertipe point,sebab ini adalah fungsi
}
float jarak0(point p){
float jarak;
jarak = sqrt((p.x*p.x)+(p.y*p.y));
return jarak;
}
void geserpoint(point *p,int deltax,int deltay){
(*p).x=(*p).x+deltax;//geser point sejauh deltax
(*p).y=(*p).y+deltay;//geser point sejauh deltay
}

void geserpointkesbx(point *p){
(*p).x=(*p).x;//nilai x tetap.
(*p).y=0;   //nilai y di set menjadi 0
}
void geserpointkesby(point *p){
(*p).y=(*p).y;  //nilai y tetap
(*p).x=0;//nilai x di set menjadi 0
}

void mirrorpoint(point *p,boolean sbx,boolean sby){
if(sbx){ //cek kondisi
(*p).y=-1*(*p).y;    //dicerminkan terhadap sumbu x.
(*p).x=(*p).x;
}
else{
(*p).x=-1*(*p).x;      //dicerminkan terhadap sumbu y.
(*p).y=(*p).y;
}
}

void putarpoint(point *p,float sudut){
double (d1);
double (d2);
(d1)=(*p).x*cos(sudut)-(*p).y*sin(sudut);
(d2)=(*p).x*sin(sudut)+(*p).y*cos(sudut);
printf(“nilai data13 setelah diputar sebesar 30 derajat : (%0.2f,%0.2f) \n”,d1,d2);
printf(” \n”);
printf(” \n”);
}

Main.c
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include”BOOLEAN.h”
#include”POINT.h”

int main(){
point p,q,r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,plus,cermin;
/* test membuat point*/
p=makepoint(10,10);
q=makepoint(20,30);
printf(“=====================TUGAS1 ADT POINT=========================\n”);
printf(” \n”);
printf(” \n”);
printf(” \n”);
printf(” \n”);
printf(“nilai X1 test: %d \n”,p.x);
printf(“nilai Y1 test: %d \n \n”,p.y);
printf(“nilai X2 test: %d \n”,q.x);
printf(“nilai Y2 test: %d \n \n”,q.y);
/* test set dan get point*/
setabsis(&q,20);
setordinat(&q,30);
printf(“nilai x yang baru setelah di set: %d \n”,getabsis(q));
printf(“nilai y yang baru setelah di set: %d \n \n” ,getordinat(q));
/* test baca point dari keyboard*/
bacapoint(&q);
tulispoint(q);
/* test tambah point*/
a=makepoint(15,20);
printf(“DATA PERCOBAAN : \n”);
printf(“Data1 : \n”);
printf(“nilai X1: %d \n”,a.x);
printf(“nilai Y1: %d \n”,a.y);
b=makepoint(20,30);
printf(“Data2 : \n”);
printf(“nilai X2: %d \n”,b.x);
printf(“nilai Y2: %d \n \n”,b.y);
r=pluspoint(a,b);
printf(“Hasil penjumlahan Data1 dan Data2 : ( %d , %d )\n”,r.x,r.y);
/*  test kurang point*/
r=minuspoint(a,b);
printf(“Hasil pengurangan Data1 dan Data2 : ( %d , %d )\n”,r.x,r.y);
/* test equivalen*/
if (EQ(a,b)){
printf(“nilai absis dan ordinat data percobaan sama(EQ) \n”);
}
else{
printf(“nilai absis dan ordinat data percobaan berbeda(NEQ) \n”);
}
/* test not equivalen*/
if (NEQ(a,b))
printf(“nilai absis dan ordinat data percobaan berbeda(NEQ) \n \n”);
else
printf(“nilai absis dan ordinat data percobaan sama(EQ) \n \n”);
/* test lebih kecil*/
if (LT(a,b))
printf(“data1 lebih kecil dari data2 \n \n”);
else
printf(“data1 tidak lebih kecil dari data2 \n \n”);
/* test lebih besar*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data3 : \n”);
c=makepoint(10,15);
printf(“nilai X3: %d \n”,c.x);
printf(“nilai Y3: %d \n”,c.y);
printf(“Data4 : \n”);
d=makepoint(5,9);
printf(“nilai X3: %d \n”,d.x);
printf(“nilai Y3: %d \n \n”,d.y);
if (GT(c,d))
printf(“data3 lebih besar dari data4 \n \n”);
else
printf(“data3 lebih kecil dari data4 \n \n”);
/* test point origin*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data5 : \n”);
e=makepoint(0,0);
printf(“nilai X5: %d \n”,e.x);
printf(“nilai Y5: %d \n \n”,e.y);
if(isorigin(e))
printf(“data5 merupakan titik origin \n \n”);
else
printf(“data5 bukan titik origin \n \n”);
/* test point disumbu x*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data6 : \n”);
f=makepoint(2,0);
printf(“nilai X6: %d \n”,f.x);
printf(“nilai Y6: %d \n \n”,f.y);
if(isonsbx(f))
printf(“data6 terletak di sumbu x \n \n”);
else
printf(“data6 tidak terletak di sumbu x \n \n”);
/* test sumbu y*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data7 : \n”);
g=makepoint(0,3);
printf(“nilai X7: %d \n”,g.x);
printf(“nilai Y7: %d \n \n”,g.y);
if(isonsby(g))
printf(“data7 terletak di sumbu y \n \n”);
else
printf(“data7 tidak terletak di sumbu y \n \n”);
/* test kuadran*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data8 : \n”);
h=makepoint(1,-2);
printf(“nilai X8: %d \n”,h.x);
printf(“nilai Y8: %d \n \n”,h.y);
if(kuadran(h)==1){
printf(“data8 berada di kuadran 1 \n \n”);
}
else if (kuadran(h)==2){
printf(“data8 berada di kuadran 2 \n \n”);
}
else if (kuadran(h)==3){
printf(“data8 berada di kuadran 3 \n \n”);
}
else if (kuadran(h)==4){
printf(“data8 berada di kuadran 4 \n \n”);
}

/* test next point x*/
i = nextx(h);
printf(“nilai data8 baru setelah absisnya(x) ditambah 1 : (%d,%d) \n \n”,i.x,i.y);

/* test next point y*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data9 : \n”);
j=makepoint(1,2);
printf(“nilai X9: %d \n”,j.x);
printf(“nilai Y9: %d \n \n”,j.y);
k = nexty(j);
printf(“nilai data9 baru setelah ordinatnya(y) ditambah 1 : (%d,%d) \n \n”,k.x,k.y);
/*test plusdelta*/
plus=plusdelta(j,10,20);
printf(“nilai data9 baru setelah x ditambah 10 dan y ditambah 20 : (%d,%d) \n \n”,plus.x,plus.y);
/*test mirror of point */
printf(“DATA PERCOBAAN : \n”);
printf(“Data10 : \n”);
l=makepoint(3,0);
printf(“nilai X10: %d \n”,l.x);
printf(“nilai Y10: %d \n \n”,l.y);
cermin=mirrorofpoint(l,isonsbx(l),isonsby(l));
printf(“nilai data10 baru setelah pencerminan : (%d,%d) \n \n”,cermin.x,cermin.y);

/*test jarak0*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data11 : \n”);
m=makepoint(3,0);
printf(“nilai X11: %d \n”,m.x);
printf(“nilai Y11: %d \n \n”,m.y);
float jarak = jarak0(m);
printf(“Jarak data11 ke titik (0,0) : %0.0f \n \n”,jarak);
/* test geser point absis sebesar delta x dan ordinat sebesar delta y*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data12 : \n”);
n=makepoint(20,30);
printf(“nilai X12: %d \n”,n.x);
printf(“nilai Y12: %d \n \n”,n.y);
geserpoint(&n,2,3);
printf(“nilai data12 setelah digeser sebesar deltax=2 dan deltay=3 : (%d,%d) \n \n”,n.x,n.y);
/* test geser smb x*/
geserpointkesbx(&n);
printf(“nilai data12 setelah digeser ke sumbux : (%d,%d) \n \n”,n.x,n.y);
/* test geser smb y*/
printf(“DATA PERCOBAAN : \n”);
printf(“Data13 : \n”);
o=makepoint(5,5);
printf(“nilai X13: %d \n”,o.x);
printf(“nilai Y13: %d \n \n”,o.y);
geserpointkesby(&o);
printf(“nilai data13 setelah digeser ke sumbuy : (%d,%d) \n \n”,o.x,o.y);
//    printf(“nilai X : %d,nilai y setelah digeser:%d \n”,o.x,o.y);

/* test putar point*/
putarpoint(&o,30);
printf(“===========================SELESAI=================================”);
getche();
}

Advertisement
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s