Senin, 30 Agustus 2010

Tugas ADT point

Inilah Hasil Koding ADT point.ADT ini tediri dari beberapa bagian yaitu boolean.h,POINT.h,point.cpp,dan main.cpp
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;
    }

Tidak ada komentar:

Posting Komentar