Sabtu, 19 Juli 2025

Pemrograman C++ BAB VII

 CONTOH 1 : SORTING SEARCHING

#include <iostream>

#include <conio>



class bubble

{

       public:

       int* process(int *arr, int ukuran)

       {


while(ukuran>0)

             {

         for(int i=1;i<ukuran;i++)

                 {

              if(arr[i-1]>arr[i])

                    {

                        int temp=arr[i-1];

              arr[i-1]=arr[i];

                          arr[i]=temp;

 }

             }

        ukuran--;

         }

       return arr;

     }

};


class insertion

{

public:

  int* process(int *arr, int ukuran)

  {

   int max,j;

   int i=1;


     while(i<ukuran)

     {

    max=arr[i];

           for(j=i;j>0;j--)

           {

      if(max<arr[j-1])

                arr[j]=arr[j-1];

             else

            break;

            }

         arr[j]=max;

         i++;

   }

     return arr;

  }

};



class radix

    {

 public:

 int cekbit(int arr, int pos)

 {

    for(int i=1;i<pos;i++)

    {

  arr=arr/2;

    }


    return arr%2;

 }


 int* process(int *arr, int ukuran)

 {

int bit;

cout<<"masukkan jumlah bit yang diinginkan ";

       cin>>bit;

  int s;

       int *kembar;

       kembar=new int[ukuran];

       for(int i=1;i<bit;i++)

       {

         s=0;

           for(int k=0;k<=1;k++)

           {

               for(int j=0;j<ukuran;j++)

               {

          int x=cekbit(arr[j],i);

                    if(x==k)

                    {

                kembar[s]=arr[j];

                        s++;

                    }

               }

            }

               tukar(arr,kembar,ukuran);

               }

          return arr;

       }


       int* tukar(int *arr,int *kembar,int ukuran)

      {

         for(int i=0;i<ukuran;i++)

        {

    arr[i]=kembar[i];

     }

  return arr;

   }

};


class counting

{

   public:

   int* process(int *arr,int ukuran)

      {

      int i,j,k,min,max;

             int indeks=0;


         min=max=arr[0];

        for(i=1;i<ukuran;i++)

        {

          if(arr[i]<min)

          {

          min=arr[i];

          }


         if(arr[i]>max)

          {

            max=arr[i];

          }

        }


         k=max-min+1;

         /// membuat bucket

               int *B=new int[k];


         ///normalisasi nilai bucket

         for(i=0;i<k;i++)

          B[i]=0;


         for(i=0;i<ukuran;i++)

             B[arr[i]-min]++;


         for(i=min;i<=max;i++)

         {

          for(j=0;j<B[i-min];j++)

            arr[indeks++]=i;

         }

         return arr;

      }

};


class sequencsearch

{

   int found;

   public:

      int sequence(int *arr,int find,int ukuran)

      {

         int hasil=0;

         for(int i=0;i<ukuran;i++)

         {

          if(find==arr[i])

            {

               hasil=1;

               found=i;

               break;

            }

         }


         return hasil;

      }


      int getfound()

      {

      return found;

      }

};


class binarysearch

{

     int found;

     public:

     int binary(int *arr,int find,int ukuran)

     {

        int high=ukuran-1;

         int low=0;

         int hasil=0;

         while(low<=high)

         {

             int mid=(high+low)/2;


            if(find==arr[mid])

            {

                found=mid;

                hasil=1;

                break;

            }else if(find>arr[mid])

            low=mid+1;

            else

            high=mid-1;

         }

         return hasil;

     }


   int getfound()

   {

    return found;

   }

};




class utama

{

   public:

     void insert();

     void baca();

     void pengurutan();

     void pencarian(int cari);


   utama(int n)

   {

    ukuran=n;

    arr=new int[ukuran];

   }


   private:

      int *arr;

      int ukuran;

      bubble a;

      insertion b;

      radix c;

      counting d;

      sequencsearch e;

      binarysearch f;


};


void utama::insert()

{

  for(int i=0;i<ukuran;i++)

   {

    cout<<"Nilai ke "<<(i+1)<<":";

      cin>>arr[i];

   }

}


void utama::baca()

{

cout<<"baca isi array :"<<endl;

   for(int i=0;i<ukuran;i++)

   {

    cout<<"Isi Array ke "<<(i+1)<<": "<<arr[i]<<endl;

   }

   cout<<endl;

}


void utama::pengurutan()

{

   char n;

   cout<<"Silahkan Pilih Teknik Pengurutan yang diinginkan"<<endl;

   cout<<"1. Bubble sort"<<endl;

   cout<<"2. Insertion sort"<<endl;

   cout<<"3. radix sort"<<endl;

   cout<<"4. counting sort"<<endl;

   cout<<"Masukkan teknik pengurutan yang diinginkan :";

   cin>>n;


   switch(n)

   {

      case '1':

          arr=a.process(arr,ukuran);

          break;

      case '2':

          arr=b.process(arr,ukuran);

          break;

      case '3':

         arr=c.process(arr,ukuran);

         break;

      case '4':

         arr=d.process(arr,ukuran);

         break;

      default:

         cout<<"Pilihan anda salah"<<endl;

   }


}


void utama::pencarian(int cari)

{

    int n,hasil,found;

    cout<<"Masukkan algoritma pencarian yang anda inginkan :"<<endl;

    cout<<"1.Sequencial Search"<<endl;

    cout<<"2.Binary Search"<<endl;

    cout<<"Pencarian :";

    cin>>n;


    if(n==1)

    {

      hasil=e.sequence(arr,cari,ukuran);

  found=e.getfound();

    }else if(n==2)

    {

        hasil=f.binary(arr,cari,ukuran);

         found=f.getfound();

    }else

    {

    cout<<"angka yang anda masukkan salah "<<endl;

    }


    if(hasil==1)

    {

    cout<<"nilai "<<cari<<" ditemukan pada index ke "<<(found+1)<<endl;

    }else

    {

    cout<<"Angka tidak ditemukan"<<endl;

    }


    delete arr;


}


void main()

{

      int ukuran,nilai;

      cout<<"Program Pencarian dan Pengurutan :"<<endl;

      cout<<endl;

      cout<<"Masukkan jumlah array yang diinputkan :";

      cin>>ukuran;


      utama a(ukuran);    /// inisialisasi obyek a dari class utama

               a.insert();

           a.baca();

                   a.pengurutan();

                   a.baca();



      cout<<"apakah anda ingin melakukan pencarian "<<endl;

      cout<<"Jika iya masukkan angka, jika tidak tekan -88 :"<<endl;

      cin>>nilai;


      if(nilai!=-88)

      {

               a.pencarian(nilai);

      }else

      {

      cout<<"Thanks and bye-bye"<<endl;

      }

      getch();

}


Tidak ada komentar: