Translate

Selasa, 14 Maret 2017

soal2

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#define max 10

using namespace std;

struct queue
    {
        int head;
        int tail;
        int data[max];
        int kumpul;
    };

queue antri;

    void awal()
    {
     antri.head=-1;
     antri.tail=-1;
    }

int kosong()  //variable untuk memastikan bahwa data masih kosong atau tidak
    {
        if (antri.tail==-1)
        {
        antri.head=-1;
        return 1;
        }
    else
    return 0;
    }

int penuh() //variable untuk memastikan bahwa data data sudah penuh atau tidak
    {
        if (antri.tail==max-1)
        return 1;
        else
        return 0;
    }


void input(int data)  //untuk memasukkan data
    {
        if(kosong()==1)
        {
            antri.head=0;
            antri.tail++;
            antri.data[antri.tail]=data;
            cout<<"data telah dimasukkan";
        }
        else if(penuh()==0)
        {
            antri.head=0;
            antri.tail++;
            antri.data[antri.tail]=data;
            cout<<"data telah dimasukkan";
        }

        else
            cout<<"data telah penuh";
    }

void ambil()  //untuk mengambil data yang telah diinputkan
    {
        if(kosong()==0)
        {
            cout<<"data yang terambil "<<antri.data[antri.head];
            for (int a=antri.head;a<=antri.tail;a++)
            antri.data[a]=antri.data[a+1];
            antri.tail--;
        }
   else
        cout<<"Data telah kosong";
   }

void tampil() //untuk menampilkan data yang di inputkan berupa ascending
    {
        int b;
        for (int a=0;a<=antri.tail;a++)
   {
    antri.kumpul=antri.data[a];
    b=a-1;
    while(antri.data[b]>antri.kumpul && b>=0)
{
    antri.data[b+1]=antri.data[b];
    b--;
}
    antri.data[b+1]=antri.kumpul;
   }

   for(int a=0;a<=antri.tail;a++)
   {
    cout<<antri.data[a]<<"  ";
   }

        if(kosong()==0)
        {
            cout<<endl;
            for (int a=0;a<=antri.tail;a++)
            {
                cout<<"\nIndex ke "<<a<<"="<<antri.data[a];
            }

        }
        else
            cout<<"\nData telah kosong";
    }


void bersih() //untuk membersihkan atau menghapus data yang telah di inputkan
    {
        antri.head=antri.tail=-1;

        cout<<"\nData telah kosong!";
    }

int main(){
int pilihan,data;
awal();
do
{
    cout<<"\t\tPROGRAM QUEUE\nMenu :\n1. Input (Enqueue) \n2. Ambil Data (Dequeue) \n3. Tampil\n4. Bersihkan (CLEAR)\n5. Keluar\nMasukkan pilihan :";
    cin>>pilihan;

switch(pilihan)
{
    case 1:cout<<"\nMasukkan data  = ";cin>>data;
    input(data);
        break;
    case 2:ambil();
       break;
    case 3:tampil();
       break;
    case 4:bersih();
       break;
}
getch();
system("cls");     }
while(pilihan!=5);
}



soal3

#include <iostream>
#include <sstream>
#include <stack>
#include <limits>
#include <string>
#include <conio.h>


using namespace std;

int operasi(char a)
{
    int temp;
    if (a == '^')
        temp = 1;
    else if (a == '*' || a == '/')
        temp = 2;
    else if (a == '+' || a == '-')
        temp = 3;
    return temp;
}

int main()
{
    string infix;
    cout<<"\t\t\t\t\t\t\Infix Ke Postfix\n\n";
    cout<<"Masukkan nilai yang akan dikonversi\n";
    cout<<"contoh 1*2+3/4\n\n";
    cout << "Masukan Infix: ";
    getline(cin, infix);

    stack<char> opr_stack;

    stringstream postfix;

    for (unsigned a = 0; a < infix.length(); a++)
    {
        if (infix[a] == '+' || infix[a] == '-' || infix[a] == '*' || infix[a] == '/' || infix[a] == '^')
        {
            while (!opr_stack.empty() && operasi(opr_stack.top()) <= operasi(infix[a]))
            {
            postfix << opr_stack.top();
            opr_stack.pop();
            }
            opr_stack.push(infix[a]);
        }
        else if (infix[a] == '(')
        {
            opr_stack.push(infix[a]);
        }
        else if (infix[a] == ')')
        {
            while (opr_stack.top() != '(')
            {
                postfix << opr_stack.top();
                opr_stack.pop();
            }
            opr_stack.pop();
        }
        else
        {
            postfix << infix[a];
        }
    }

    while (!opr_stack.empty())
        {
            postfix << opr_stack.top();
            opr_stack.pop();
        }

    cout << "Hasil Postfix : " << postfix.str() << endl;

    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    return 0;
    getch();
}


Jumat, 10 Maret 2017

 Dengan mengembangkan code berikut, buatlah program STACK dengan ketentuan:
a. Memiliki fungsi PUSH (input data) 
b. Memiliki fungsi POP (ambil satu data)
c. Memiliki fungsi CLEAR (delete all data)
d. Memiliki fungsi PRINT (cetak data pada layar)
e. (opsional) jika user ingin menampilkan data yang diinputkan, maka data tersebut telah terurut secara ascending


#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define max_stak 15

struct stak{
    int top;
    string data[15];
}tumpuk;

void push(string d){
    tumpuk.top++;
    tumpuk.data[tumpuk.top]=d;
    cout<<"\tData berhasil dimasukkan \n";
    getch();
}

void pop(){

        cout<<"\tData "<<tumpuk.data[tumpuk.top]<<" terambil \n";
        tumpuk.top--;
        getch();
   
}

int isFull(){
    if(tumpuk.top==max_stak-1){
        return 1;
    }
    else{
        return 0;
    }
}

int isEmpty(){
    if(tumpuk.top==-1){
        return 1;
    }
    else{
        return 0;
    }
}

void clear(){
    tumpuk.top=-1;
    cout<<"\tSemua data terhapus. ";
}

void tukar(int a,int b)
{
    string t;
    t=tumpuk.data[b];
    tumpuk.data[b]=tumpuk.data[a];
    tumpuk.data[a]=t;
}

void print(){

    for(int i=0;i<=tumpuk.top;i++){
        for(int j=i+1;j<=tumpuk.top;j++){//mencari data terkecil
            if(tumpuk.data[i]<tumpuk.data[j]){
                tukar(i,j);
            }
        }
    }

        for (int i=tumpuk.top;i>=0;i--)
        cout<<"\t"<<tumpuk.data[i]<<endl;
    getch();
}

int main()
{
    int a;
    string input;
    tumpuk.top=-1;
    do{
        system("cls");
           
            cout<<"PRAKTIKUM 5"<<endl;
            cout<<"SOAL 1"<<endl;
            cout<<"+----------------------+"<<endl;
            cout<<"|Muh. Budi Dharmawan P |"<<endl;
            cout<<"|E1E1 15 034           |"<<endl;
            cout<<"+----------------------+\n"<<endl;
            cout<<"==============***================"<<endl;
            cout<<"\tMenu Stack \n\t1. Push \n\t2. Pop \n\t3. Clear \n\t4. Print \n\t5. Terminate \nMasukkan pilihan menu(1,2,3,4,5)  : ";
            cin>>a;
            fflush(stdin);
        switch(a)
        {
        case 1:
            if(isFull()==1){
                cout<<"Stack penuh. \n";
                getch();
            }
            else{
                cout<<"Masukkan data : ";
                //fflush(stdin);
                cin>>input;
                push(input);
            }
            break;
        case 2:
            if(isEmpty()==1){
                cout<<"Stack kosong.";
                getch();
            }
            else{
                pop();
            }
            break;
        case 3:
            clear();
            cout<<"Stack kosong. \n";
            getch();
            break;
        case 4:
            if(isEmpty()==1){
                cout<<"Stack kosong";
                getch();
            }
            else{
                print();
            }
        }
    }while(a!=5);

}


Jumat, 03 Maret 2017

Penjelasan, Perbedaan Dan Contoh Metode Metode Searching Aray

Bubble Sort -- Selection Sort -- Insertion Sort -- Exchange Sort

Salah satu bagian penting dari struktur data adalah sorting atau pengurutan data. Ada banyak sekali Algoritma pengurutan data di dunia komputer, yatu: bubble sort, selection sort, insertion sort, exchange sort, quick sort, merge sort, dll

Pengurutan arat terbagi dalam 2, yaitu pengurutan yang dimulai dari nilai terkecil ascending dan  yang kedua pengurutan yang dimulai dari nilai terbesar descending.  sedangkan metode metode dalam pengurutan data aray terbagi dalam 4 :
#. pengurutan berdasarkan perbandingan (bubble sort, exchange sort)
#. pengurutan berdasarkan prioritas (selection sort, heap sort)
#. pengurutan berdasarkan penyisipan dan penjagaan terurut (insertion sort, tree sort)
#. pengurutan berdasarkan pembagian dan penguasaan (quick sort, marge sort)
#. pengurutan berkurang menurun (shellsort)

kali ini hanya akan memberikan sedikit penjelasan lebih lanjut mengenai Bubble Sort -- Selection Sort -- Insertion Sort -- Exchange Sort. 

Bubble Sort 








Exchange Sort


 Selection Sort


Insertion Sort

Contoh 1:
menggunakan metode Bubble Sort.

#include<iostream>
#include<conio.h>
#include<stdio.h>

using namespace std;

int main()
{
    int data;
    cout<<"Masukkan banyak data : ";cin>>data;
       int A[data],i,j,tampung;
      
    cout<<endl;
    for(i=0;i<data;i++)
    {
        cout<<"Masukkan data : ";cin>>A[i];
       }

   cout<<"\nSebelum sorting :\n";
   for(i=0;i<data;i++)
       {
           cout<<A[i]<<" ";
       }
   
    cout<<endl;
    cout<<"\nproses sorting :";//awal logika yang digunakan
    for(int i=0;i<data;i++)
    {
        tampung=A[i];
        j=i-1;

        while(A[j]>tampung && j>=0)   
        {
            A[j+1]=A[j];

            j--;
        }   
        A[j+1]=tampung;
        getch ();   
           
            cout<<endl;
            for(int v=0;v<data;v++)//awal logika untuk menampilkan proses
            {
                cout<<A[v]<<" ";
            }
            //akhir lgika yang digunakan untuk menampilkan proses
       }//akhir logika yang digunakan
    getch ();
   
            cout<<endl;
            cout<<"\nsetelah sorting : ";
            for (i=0; i<5; i++)//menampilkan hasil sortiran yang digunakan
            {
                cout<<A[i]<<" ";
            }
   
    return 0;
    getch ();
}

Contoh 2:
menggunakan metode Exchange Sort

#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;

int main()
{
    int data;
       cout<<"Masukkan banyak data : ";cin>>data;
       int A[data],i,j,tampung;

    cout<<endl;
       for(int x=0;x<data;x++)
    {
        cout<<"Masukkan data : ";cin>>A[x];
       }
      
        cout<<endl;
           cout<<"Sebelum sorting:\n";
           for(i=0;i<data;i++)
        {
            cout<<A[i]<<" ";
           }
              
            cout<<endl;
            cout<<"\nproses sorting : \n";
               for (int i=0;i<data-1;i++)//awallogika pensortingan
            {
                  for(int j=i+1;j<data;j++)
                {
                    if(A[i]<A[j])
                    {
                        tampung=A[i];
                        A[i]=A[j];
                        A[j]=tampung;
                    }
                    getch();
                   
                        for(int v=0;v<data;v++)//untuk menampilkan proses sortingan
                        {
                            cout<<A[v]<<" ";
                        }
                       
                cout<<endl;
              }
            }//akhir logika pensortingan
            getch();
   
                    cout<<"\nsetelah sorting : ";
                    for (i=0; i<5; i++)
                    {
                        cout<<A[i]<<" ";
                    }   
    getch ();
    return 0;
}

Contoh 3:
menggunakan metode Selection Sort

#include<iostream>
#include<conio.h>
#include<stdio.h>

using namespace std;

int main()
{
    int data;
    cout<<"Masukkan banyak data : ";cin>>data;
    int A[data],i,j,tampung,pos;
   
    cout<<endl;
    for(int x=0;x<data;x++)
    {
        cout<<"Masukan data : ";cin>>A[x];
    }
   
        cout<<endl;
        cout<<"Sebelum sorting:\n";
        for(i=0;i<data;i++)
        {
            cout<<A[i]<<" ";
        }
       
        cout<<endl;
        cout<<"\nproses sorting : \n";
        for(int i=0; i<data-1; i++)//awal logika yang digunakan untuk mensorting
        {
            pos=i;
            for(int j=i+1; j<data; j++)
            {//mencari data terkecil
                if(A[j]<A[pos])
                {
                    pos=j;
                }
            }
       
                if (pos!=i)//jika data yang terkecil tidak sama dengan data yang pertama.
                {
                    tampung=A[pos];
                    A[pos]=A[i];
                    A[i]=tampung;
                }
                getch ();
   
                    for(int v=0;v<data;v++)//untuk menampilkan proses sortingan
                    {
                        cout<<A[v]<<" ";
                    }
               
            cout<<endl;  
        }//akhir logika yang digunakan
        getch();
   
                cout<<"\nsetelah sorting : ";
                for (i=0; i<data; i++)
                {
                    cout<<A[i]<<" ";
                }
       
    getch ();
    return 0;
}

Contoh 4:
menggunakan metode Insertion Sort

#include<iostream>
#include<conio.h>
#include<stdio.h>

using namespace std;

int main()
{
    int data;
    cout<<"Masukkan banyak aray : ";cin>>data;
    int A[data],i,j,tampung;
   
    cout<<endl;
    for (i=0; i<data; i++)
    {
        cout<<"Masukkan data : ";cin>>A[i];
    }
   
    cout<<endl;
    cout<<"Sebelum sorting :\n";
    for(i=0; i<data; i++)
    {
        cout<<A[i]<<" ";       
    }
   
    cout<<endl;
    cout<<"\nProses sorting : \n";
    for(int i=1; i<data; i++)
    {
        for(int j=data-1; j>=1; j--)
        {
            if(A[j]<A[j-1])
            {
                tampung=A[j];
                A[j]=A[j-1];
                A[j-1]=tampung;
            }
        }
        getch ();
       
            for(int v=0; v<data; v++)
            {
                cout<<A[v]<<" ";
            }
        cout<<endl;
    }
    getch();
   
    cout<<endl;
    cout<<"Setelah sorting : ";
    for (i=0; i<data; i++)
    {
        cout<<A[i]<<" ";
    }

getch ();
return 0;
}

untuk mengetahui bagaimana hasil dari logika ini silahkan copy codingan diatas dan runing menggunakan compailer apapun yang mendukung bahasa C++.
Jika ada yang tidak dimengerti silahkan bertanya di kolom komentar
 

METODE binary search dan Interpolationsearch. Pemrograman C++

Contoh Kasus:
1. Problem: Buat program untuk mencari data yang diiputkan oleh user . Data tersebut harus dapat diinputkan secara dinamis oleh user , jika data ditemukan, berikan konfirmasi
“Data ditemukan”
beserta letak indeks data dan jumlah data yang ditemukan tersebut.
2. Metode pencarian yang kedua adalah
binary search , pada metode pencarian ini, data harus diurutkan terlebih dahulu. Pada metode pencarian ini, data dibagi menjadi dua bagian (secara logika), untuk setiap tahap pencarian. Algoritma binary searc h : 1. Data diambil dari posisi 1 sampai posisi akhir N 2. Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2 3. Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar? 4. Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1 5. Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1 6. Jika data sama, pencarian dihentikan, data ditemukan.  7. Jika sudah melewati semua posisi, data tidak ditemukan, pencarian dihentikan.
3. I n t e r p o l a t i o n s e a r c h
merupakan salah satu metode pencarian yang dapat
digunakan. Seperti pada
binary search, data yang harus diurutkan terlebih dahulu, sebelum dapat dilakukan pencarian dengan metode ini. Pada metode pencarian ini, kita mencoba menebak letak data yang kita cari, dengan perhitungan 
• Jika data[posisi] > data yg dicari, high = pos – 1 • Jika data[posisi] < data yg dicari, low = pos + 1


 SOLUSI_1
#include<iostream>
#include<conio.h>
#include<stdio.h>

using namespace std;
int main()
{
    cout<<"latihan praktikum"<<endl;
    cout<<"+----------------------+"<<endl;
    cout<<"|Muh. Budi Dharmawan P |"<<endl;
    cout<<"|E1E1 15 034           |"<<endl;
    cout<<"+----------------------+\n"<<endl;
   
    ulang://untuk kembali melakukan penghapusan
    cout<<"==============***================\n"<<endl; //ini merupakan identitas saya, kmu bisa ganti sesuai nama kamu tapi ingat, sesuaikan ukurannya
   
     int data[10];
     int i,cari;
     int flag=0;
     int counter=0;
     int batas;
    
    cout<<"masukkan batasan memory (batas<11) : "; cin>>batas;
    if(batas<=10)
        {
            cout<<endl;
             cout<<"masukkan data memory: " <<endl;
             for(i=0; i<batas; i++)
                {
                cout<<"data ke-"<<i+1<<" : "; cin>>data[i];
                 }
            cout<<endl;
            cout<<"\tData pada masing masing ruang memory anda : "<<endl;
            
            for(i=0; i<batas; i++)
                {
                cout<<"data ke-"<<i+1<<" : "<<data[i]<<endl;
                 }
             cout<<"\nMasukkan data yang dicari : ";
             cin>>cari;
            
             for(i=0; i<batas; i++)
                 {
                       if (data[i]==cari)
                           {
                           flag=1;
                           counter++;
                           }
           
                 }
       
            if (flag==1)
                {
                    for(i=0; i<batas; i++)
                        {
                           if (data[i]==cari)
                               {
                                    cout<<"data pada memory ke :"<<i+1<<endl;
                               }
                        }
                        cout<<"data ditemukkan sebanyak : "<<counter<<endl;
                }
            else
                cout<<"\ndata tidak ditemukkan \n"<<endl;
        goto ulang;   
        }
    else
        {
            cout<<"\nbatas tidak boleh lebih dari 10\nmasukkan ulang\n";
            goto ulang;
        }
   
    

}


SOLUSI_2
#include <iostream>
#include <stdio.h>

using namespace std;

int main()

{
       cout<<"latihan praktikum"<<endl;
    cout<<"+----------------------+"<<endl;
    cout<<"|Muh. Budi Dharmawan P |"<<endl;
    cout<<"|E1E1 15 034           |"<<endl;
    cout<<"+----------------------+\n"<<endl;
   
    ulang://untuk kembali melakukan penghapusan
    cout<<"==============***================\n"<<endl; //ini merupakan identitas saya, kmu bisa ganti sesuai nama kamu tapi ingat, sesuaikan ukurannya
  
   int data[10]={0,2,5,7,11,14,12,22,26,31};
   int awal,tengah,akhir,cari,flag=0,i;
   awal=0;
   akhir=9;
    cout<<endl;
    cout<<"data anda : "<<endl;
 for(i=0; i<10; i++){
    cout<<data[i]<<"  ";
 }
    cout<<endl;
   cout<<"data yang di cari : ";cin>>cari;
   while(awal<=akhir && flag==0)
   {
       tengah=(awal+akhir)/2;
       cout<<"data tengah "<<tengah<<" data ke- "<<data[tengah]<<endl;
       if(data[tengah]==cari)
       {
           flag=1;
       }
       else if (data[tengah]<cari)
       {
           awal=tengah+1;
           cout<<"cari dibagian kanan \n";
       }
           else
            {
            akhir=tengah-1;
            cout<<"cari dibagian kiri \n";
            }
   }
   if (flag==1){
    cout<<"data ditemukan ! \n";
    for(i=0; i<10; i++)
    {
   if (data[i]==cari)
   {
       cout<<"data pada indeks ke :"<<i<<endl;
   }
   }
   }
   else cout<<"data tidak ditemukan ! \n";
}

SOLUSI_3
#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
    cout<<"latihan praktikum"<<endl;
    cout<<"+----------------------+"<<endl;
    cout<<"|Muh. Budi Dharmawan P |"<<endl;
    cout<<"|E1E1 15 034           |"<<endl;
    cout<<"+----------------------+\n"<<endl;
   
    ulang://untuk kembali melakukan penghapusan
    cout<<"==============***================\n"<<endl; //ini merupakan identitas saya, kmu bisa ganti sesuai nama kamu tapi ingat, sesuaikan ukurannya
         
          int data[9]={3,9,11,12,15,17,23,31,35};
          int low, high, find ;
          int flag=0,i;
          float pos1;
          int pos;
          low=0;
          high=8;
         
          cout<<"data yang anda cari : ";cin>>find;
              do
              {
                    pos1=(float) ((find-data[low])/(data[high]-data[low]))*(high-low)+low;
                    pos=floor(pos1);
                    if (data[pos]==find)
                    {
                        flag=1;
                        break;
                    }
                    if(data[pos]>find) high=pos-1;
                    else if (data[pos]<find) low=pos+1;
              }
            while(find>=data[low] && find<=data[high]);
       
              if (flag==0)
       
                {
                cout<<"data tidak ditemukan ! ";
                  }
                 
            else if (flag==1)
                {
                    for(i=0; i<9; i++)
                    {
                       if (data[i]==find)
                           {
                               cout<<"data pada indeks ke :"<<i+1<<endl;
                           }
                    }
               cout<<"data di temukan ! ";
               }
            else
                cout<<"";
}