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
Like this:
Be the first to like this post.