Menyadari tulisan dan posting ini masih jauh dari kesempurnaan.Oleh karena itu,mohon saran dan kritik membangun sangat diharapakan.Terima kasih.
boolean.h
#ifndef BOOLEAN_h
#define BOOLEAN_h
#define G boolean
#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
/* 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.cpp
include
#include
#include
#include "boolean.h"
#include "POINT.h"
point makepoint(int x,int y){
point temp;//buat varibel tipe bentukan point bernama temp.
temp.x=x; // mengisikan nilai x dan y.
temp.y=y;
return temp; //mengembalikan nilai temp,sebab ini adalah fungsi.
}
void tulispoint(point p){
printf(" X :%d ,Y :%d \n",p.x,p.y); //mencetak nilai x dan y ke Layar.
}
int getabsis (point p){
return p.x; // mengembalikan nilai x,sebab ini adalah fungsi.
}
int getordinat(point p){
return p.y; // mengembalikan nilai y,sebab ini adalah fungsi.
}
void setabsis(point *p,int newx){
(*p).x=newx; // men-set nilai x=absis.
}
void setordinat(point *p,int newy){
(*p).y=newy; //men-set nilai y=ordinat.
}
void bacapoint(point *p){
printf("masukan nilai X =\n");scanf("%d",&(*p).x);//membaca nilai x dari keyboard.
printf("masukan nilai Y=\n");scanf("%d",&(*p).y);//membaca nilai y dari keyboard.
}
point pluspoint(point p1,point p2){
point pts;//buat variabel tipe bentukan bernama pts.
pts.x = p1.x+p2.x;//menjumlahkan nilai x1 dan x2.
pts.y = p1.y+p2.y;//menjumlahkan nilai y1 dan y2.
return pts;//mengembalikan nilai pts bertipe point,sebab ini adalah fungsi.
}
point minuspoint(point p1,point p2){
point ptm;//buat variabel tipe bentukan bernama ptm.
ptm.x=p1.x-p2.x;//mengurangi nilai x1 terhadap x2.
ptm.y=p1.y-p2.y;//mengurangi nilai y1 terhadap y2.
return ptm;//mengembalikan nilai ptm bertipe point,sebab ini adalah fungsi.
}
boolean EQ(point p1,point p2){
if((p1.x==p2.x)&&(p1.y==p2.y))// memeriksa apakah nilai x1 sama dengan x2 dan y1 sama dengan y2.
return true;//mengembalikan nilai true jika sama
else
return false;//sebaliknya mengembalikan false jika berbeda
}
boolean NEQ(point p1,point p2){
if((p1.x!=p2.x)&&(p1.y!=p2.y))//memeriksa apakah nilai x1 tidak sama dengan x2 dan y1 tidak sama dengan y2.
return true;//mengembalikan nilai true jika berbeda.
else
return false;//mengembalikan nilai false jika sama.
}
boolean LT(point p1,point p2){
if((p1.x < p2.x)&&(p1.y < p2.y))//memeriksa apakah x1 lebih kecil dari x2 dan y1 lebih kecil dari y2.
return true;//mengembalikan nilai true jika memenuhi kondisi.
else
return false;//mengembalikan nilai false jika tidak memenuhi kondisi.
}
boolean GT(point p1,point p2){
if((p1.x > p2.x)&&(p1.y > p2.y))//memeriksa apakah x1 lebih besar dari x2 dan y1 lebih besar dari y2.
return true;//mengembalikan nilai true jika memenuhi kondisi.
else
return false;//mengembalikan nilai false jika tidak memenuhi kondisi.
}
boolean isorigin(point p){
if((p.x==0)&& (p.y==0))//memeriksa apakah x dan y bernilai (0.0) atau titik pusat
return true;//mengembalikan nilai true jika memenuhi kondisi.
else
return false;//mengembalikan nilai false jika tidak memenuhi kondisi.
}
boolean isonsbx(point p){
if((p.x==0))//memeriksa apakah x=0.
return true;//mengembalikan nilai true jika memenuhi kondisi.
else
return false;//mengembalikan nilai false jika tidak memenuhi kondisi.
}
boolean isonsby(point p){
if((p.y==0))//memeriksa apakah y=0.
return true;//mengembalikan nilai true jika memenuhi kondisi.
else
return false;//mengembalikan nilai false jika tidak memenuhi kondisi.
}
int kuadran(point p){
if( (!isonsbx(p)) && (!isonsby(p)) && (!isorigin(p))){//cek syarat kuadran tidak berada pada salah satu sumbu
if ((p.x > 0)&&(p.y > 0))
return 1;//mengembalikan nilai 1 jika terdapat pada kuadran 1.
else {
if ((p.x < 0)&&(p.y > 0))
return 2;//mengembalikan nilai 2 jika terdapat pada kuadran 2.
else {
if ((p.x < 0)&&(p.y < 0))
return 3;//mengembalikan nilai 3 jika terdapat pada kuadran 3.
else {if ((p.x > 0)&&(p.y < 0))
return 4;//mengembalikan nilai 4 jika terdapat pada kuadran 4.
}
}
}
}
}
point nextx(point p){
point po;//membuat variabel bertipe point bernama po.
po.x=p.x+1;//menambah nilai x +1.
return po;//mengembalikan nilai po bertipe point,sebab ini adalah fungsi.
}
point nexty(point p){
point pi;//membuat variabel bertipe point bernama pi.
pi.y=p.y+1;//menambah nilai y +1.
return pi;//mengembalikan nilai pi bertipe point,sebab ini adalah fungsi.
}
point plusdelta(point p,int deltax,int deltay){
p.x=p.x+deltax;//menambah nilai x dengan deltax bertipe integer.
p.y=p.y+deltay;//menambah nilai y dengan deltay bertipe integer.
return p;//mengembalikan nilai p bertipe point,sebab ini adalah fungsi.
}
point mirrorofpoint(point p,boolean sbx,boolean sby){
point po;//membuat variabel bertipe point bernama po.
if(sbx)//cek kondisi
po.y=-1*p.y;//dicermikan terhadap sumbu x
else if(sby)
po.x=-1*p.x;//dicermikan terhadap sumbu y
return po;//mengembalikan nilai po bertipe point,sebab ini adalah fungsi.
}
float jarak0(point p){
float distance;
distance = sqrt((p.x*p.x)+(p.y*p.y));
return distance;
}
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 menjadi 0.
}
void geserpointkesby(point *p){
(*p).y=(*p).y; //nilai y tetap.
(*p).x=0;//nilai x menjadi 0.
}
void mirrorpoint(point *p,boolean sbx,boolean sby){
if(sbx){ //cek kondisi
(*p).y=-1*(*p).y;
(*p).x=(*p).x;
} //dicerminkan terhadap sumbu 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);//rumus x baru
(d2)=(*p).x*sin(sudut)+(*p).y*cos(sudut);//rumus y baru
//float x = 93.293;
//printf("\n %0.2f",x);
printf(" nilai X setelah diputar %0.2f \n",d1);
printf(" nilai Y setelah diputar%0.2f \n",d2);
//printf("nilai X setelah diputar %f ialah %0.2f \n",sudut,d1);
//printf("nilai Y setelah diputar %f ialah %0.2f \n",sudut,d2);
}
main.c
#include
#include
#include"boolean.h"
#include"POINT.h"
#include
point p,q,r,a,b,c,d,e,win;
/* test membuat point*/
p=makepoint(10,10);
q=makepoint(20,30);
printf("nilai X: %d, nilai y: %d \n",p.x,p.y);
/* test set dan get point*/
setabsis(&q,20);
setordinat(&q,30);
printf("nilai x yang baru %d\n",getabsis(q));
printf("nilai y yang baru %d\n",getordinat(q));
/* test baca point dari keyboard*/
bacapoint(&q);
tulispoint(q);
/* test tambah point*/
a=makepoint(15,20);
b=makepoint(20,30);
r=pluspoint(a,b);
printf("Hasil penjumlahan %d , %d \n",r.x,r.y);
/* test kurang point*/
r=minuspoint(a,b);
printf("Hasil pengurangan %d , %d \n",r.x,r.y);
/* test equivalen*/
if (EQ(p,q))
printf("sama \n");
else
printf("berbeda \n");
/* test not equivalen*/
if (NEQ(p,q))
printf("berbeda \n");
else
printf("sama \n");
/* test lebih kecil*/
if (LT(a,b))
printf("p lebih kecil dari q \n");
else
printf("p tidak lebih kecil dari q \n");
/* test lebih besar*/
c=makepoint(10,15);
d=makepoint(5,9);
if (GT(c,d))
printf("p lebih besar dari q \n");
else
printf("p tidak lebih besar dari q \n");
/* test point origin*/
e=makepoint(0,0);
if(isorigin(e))
printf("merupakan titik origin \n");
else
printf("bukan titik origin \n");
/* test point disumbu x*/
point f;
f=makepoint(0,2);
if(isonsbx(f))
printf("terletak di sumbu x \n");
else
printf("bukan di sumbu x \n");
/* test sumbu y*/
point h;
h=makepoint(3,0);
if(isonsby(h))
printf("terletak di sumbu y \n");
else
printf("bukan terleyak di sumbu y \n");
/* test kuadran*/
point i=
i=makepoint(1,-2);
if(kuadran(i)==1)
printf("berada di kuadran 1 \n");
else {if (kuadran(i)==2)
printf("berada di kuadran 2 \n");
else {if (kuadran(i)==3)
printf("berada di kuadran 3 \n");
else {if (kuadran(i)==4);
printf("berada di kuadran 4 \n");
}
}
}
/* test next point x*/
point j;
j = nextx(i);
printf("nilai X baru :%d,nilai Y:%d \n",j.x,j.y);
/* test next point y*/
point l,k;
l=makepoint(1,2);
k = nexty(l);
printf("nilai Y baru :%d,nilai X:%d \n",k.y,k.x);
/*test plusdelta*/
point plus;
plus=plusdelta(l,10,20);
printf("nilai X baru:%d nilai Y baru :%d\n",plus.x,plus.y);
/*test mirror of point */
point cer;
win=makepoint(3,0);
cer=mirrorofpoint(win,isonsbx(win),isonsby(win));
printf("nilai X setelah pencerminan %d,nilai Y setelah Penceminan %d \n",cer.x,cer.y);
/*test jarak0*/
point ttk;
ttk=makepoint(3,0);
float flo = jarak0(ttk);
printf("Jarak X dan Y:%0.0f \n",flo);
/* test geser point absis sebesar delta x dan ordinat sebesar delta y*/
point newp;
newp=makepoint(20,30);
geserpoint(&newp,2,3);
printf("nilai X setelah digeser: %d,nilai y setelah digeser: %d \n",newp.x,newp.y);
/* test geser smb x*/
geserpointkesbx(&newp);
printf("nilai X setelah digeser: %d,nilai y :%d \n",newp.x,newp.y);
/* test geser smb y*/
point pos;
pos=makepoint(5,5);
geserpointkesby(&pos);
printf("nilai X : %d,nilai y setelah digeser:%d \n",pos.x,pos.y);
/* test putar point*/
putarpoint(&pos,30);
system("PAUSE");
return 0;
}