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;
    }

Tugass Linkk list Algoritma dan Struktur Data


Pada hari pertma kuliah Algoritma dan struktur data kami diberikan beberapa point penting kesepakatan dan silabus mata kuliah,misal link list.Link list ialah kumpulan node(obyek) heterogen  dengan sifat setiap obyek(keculai obyek terakhir) mempunyai penerus dan setiap obyek(kecuali obyek pertama) mempunyai pendahulu.
Saat ini link list banyak diterapkan pada beberapa contoh kasus misal: 
1.
Contoh pertama: Misal  pada bangsal sebuah rumah sakit terdapat 12 tempat tidur.Sembilan diantaranya telah ditempati pasien.Oleh karena itu,perlu list pasien.Pada kasus ini nama pasien alfabetik atau terurut.Penunjuk atau penuding pada list tersebut ialah next dan variable awal ialah start.Start bertugas sebagai penunjuk node  awal yang berisi alamat node yang ditunjukinya.Pada kasus ini start menunjuk list nomor 5  yaitu adam.Kemudian adam menunjuk dean melalui pointer.Sebagai node terakhir yaitu Samuel sebab next berisi 0.


2.


Contoh kedua:Terdapat agen  penjualan mempunyai  4 orang broker.Setiap broker mempunyai list customer(pelanggan).Keempat list pelanggan tersebut dijadikan menjadi satu list yaitu list CUSTOMER berisis nama pelanggan dan larik LINK merupakan pointer .Nama Broker ditempatkan dalam larik BROKER beserta variable penuding POINT.


3
     Contoh ketiga: Pandang berkas personalia  dari sebuah perusahaan kecil, yang terdiri dari record 9 orang pegawai, dengan  field NAMA, SSN (Social Security Number), SEX dan Gaji per bulan(monthly salary). Gambar tersebut memperlihatkan bagaimana berkas diorganisir sebagai linked list yang terurut (alfabetik), dengan menempatkan informasi dalam empat buah larik sejajar NAMA, SSN, SEX, dan  SALARY, serta menggunakan pula larik LINK sebagai nextpointer, dan variabel START yang menuding record pertama. Di sana 0 digunakan  sebagai  penuding  nol.

Begitulah penjelasan mengenai link list.Sebteulnya masih terdapat jenis list lainnya  misal double link list dan sirkular.Oleh karena itu,sementara hanya informasi inilah   yang bisa saya sampaikan.Kirim comment atau kritik please sebagai perbaikan post TUGAS materi berikutnya.Terimakasih