Politeknik Tanah Laut Teknik Informatika Semester 2

Senin, 10 Juni 2019

Sorting Bubble & Quick

By Juni 10, 2019

Sorting Bubble & Quick

Sorting Buble
Algoritma Bubble Sort adalah algoritma sorting paling sederhana. Kelebihan dari algoritma ini adalah mudah dipahami dan yang paling simpel. Kekurangannya juga ada, salah satunya ialah proses akan berhenti jika tidak adanya pertukaran dalam satu iterasi. Sesuai dengan namanya, proses pengurutannya mirip seperti gelembung.

Proses Algoritma Bubble adalah:
  1. Pengecekan mulai dari data ke-1 sampai data ke-n
  2. Bandingkan data ke-n dengan data sebelumnya (n-1)
  3. Jika lebih kecil maka pindahkan bilangan tersebut dengan bilangan yg ada didepannya ( sebelumnya ) satu persatu (n-1,n-2,n-3,....dst)
  4. Jika lebih besar maka tidak terjadi pemindahan
  5. Ulangi langkah 2 dan 3 s/d sort optimal.

Contoh Program:
// C program for implementation of Bubble sort
#include <stdio.h>

void swap(int *xp, int *yp)
{
 int temp = *xp;
 *xp = *yp;
 *yp = temp;
}

// A function to implement bubble sort
void bubbleSort(int arr[], int n)
{
int i, j;
for (i = 0; i < n-1; i++)

 // Last i elements are already in place
 for (j = 0; j < n-i-1; j++)
  if (arr[j] > arr[j+1])
   swap(&arr[j], &arr[j+1]);
}

/* Function to print an array */
void printArray(int arr[], int size)
{
 int i;
 for (i=0; i < size; i++)
  printf("%d ", arr[i]);
 printf("");
}

// Driver program to test above functions
int main()
{
 int arr[] = {64, 34, 25, 12, 22, 11, 90};
 int n = sizeof(arr)/sizeof(arr[0]);
 bubbleSort(arr, n);
 printf("Sorted array: \n");
 printArray(arr, n);
 return 0;
}

Sorting Quick
Metode quick sort c++ mengurutkan dengan sangat cepat, namun algoritma ini sangat kompleks dan diproses secara rekursif. Dapat memungkinkan untuk menulis algoritma yang lebih cepat untuk beberapa kasus khusus. Tapi untuk kasus umum, sampai saat ini tidak ada yang lebih cepat dibandingkan algoritma metode Quick Sort c++.

Proses Algoritma Quick adalah:
  1. Pivot merupakan elemen pertama, elemen terakhir, atau elemen tengah dalam array. Cara ini bagus jika elemen tabel tersusun secara acak, tetapi sebaliknya atau tidak bagus jika elemen tabel semula sudah terurut.
  2. Pivot dipilih dengan cara acak dari salah satu elemen array. Cara ini baik tapi belum tentu maksimal, sebab diperlukan prosedur khusus untuk menentukan pivot secara acak.
  3. Pivot adalah elemen median tabel. Cara ini yaitu cara paling bagus, sebab pada hasil partisi menghasilkan dua bagian tabel yang berukuran seimbang. Juga cara ini memberikan kompleksitas waktu yang minimum. Masalahnya, mencari median dari elemen tabel yang belum terurut adalah persoalan tersendiri.
Contoh Program:
/* C implementation QuickSort */
#include<stdio.h>

// A utility function to swap two elements
void swap(int* a, int* b)
{
 int t = *a;
 *a = *b;
 *b = t;
}

/* This function takes last element as pivot, places
the pivot element at its correct position in sorted
 array, and places all smaller (smaller than pivot)
to left of pivot and all greater elements to right
of pivot */
int partition (int arr[], int low, int high)
{
 int pivot = arr[high]; // pivot
 int i = (low - 1); // Index of smaller element

 for (int j = low; j <= high- 1; j++)
 {
  // If current element is smaller than or
  // equal to pivot
  if (arr[j] <= pivot)
  {
   i++; // increment index of smaller element
   swap(&arr[i], &arr[j]);
  }
 }
 swap(&arr[i + 1], &arr[high]);
 return (i + 1);
}

/* The main function that implements QuickSort
arr[] --> Array to be sorted,
low --> Starting index,
high --> Ending index */
void quickSort(int arr[], int low, int high)
{
 if (low < high)
 {
  /* pi is partitioning index, arr[p] is now
  at right place */
  int pi = partition(arr, low, high);

  // Separately sort elements before
  // partition and after partition
  quickSort(arr, low, pi - 1);
  quickSort(arr, pi + 1, high);
 }
}

/* Function to print an array */
void printArray(int arr[], int size)
{
 int i;
 for (i=0; i < size; i++)
  printf("%d ", arr[i]);
 printf("| ");
}

// Driver program to test above functions
int main()
{
 int arr[] = {10, 7, 8, 9, 1, 5};
 int n = sizeof(arr)/sizeof(arr[0]);
 quickSort(arr, 0, n-1);
 printf("Sorted array: | ");
 printArray(arr, n);
 return 0;
}

Read More...

Graph & Tree

By Juni 10, 2019

Graph & Tree

Dalam istilah ilmu komputer, sebuah struktur data adalah cara penyimpanan, pengorganisasian dan pengaturan data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan secara efisien. Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) ataupun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna.


Graph

Graph merupakan struktur data yang paling umum. Jika struktur linear memungkinkan pendefinisian keterhubungan sekuensial antara entitas data, struktur data tree memungkinkan pendefinisian keterhubungan hierarkis, maka struktur graph memungkinkan pendefinisian keterhubungan tak terbatas antara entitas data.

Representasi data dengan struktur data linear ataupun hirarkis pada masalah ini masih bisa digunakan namun akan membutuhkan pencarian-pencarian yang kurang efisien. Struktur data graph secara eksplisit menyatakan keterhubungan ini sehingga pencariannya langsung (straight forward) dilakukan pada strukturnya sendiri.


Tree

Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut Root dan node lainnya. Tree juga adalah suatu graph yang acyclic, simple, connected yang tidak mengandung loop.

Struktur data bst sangat penting dalam struktur pencarian, misalkan dalam kasus pencarian dalam sebuah list, jika list sudah dalam keadaan terurut maka proses pencarian akan semakin cepat, jika kita menggunakan list contigue dan melakukan pencarian biner

Hubungan Graph & Tree dengan Pemograman
Dalam mendalami sebuah algoritma yang menjadi landasan untuk mengembangkan suatu program atau aplikasi, hal ini merupakan metode yang berguna untuk menyelesaikan dan memahami suatu masalah yang bersangkutan dengan seksama. Karena masalah bisa diseselsaikan secara efinisan dalam waktu yang singkat menggunakan algoritma-algoritma tersebut sehingga bisa menjadi mekanisme mengimplementasikan perancangan dan analisi suatu pemograman secara terstruktur dengan baik. Selain itu, mampu menganalisa suatu perancangan yang sulit jadi lebih mudah untuk banyak pengguna atau user.

Algortima Kruskal
Algoritma Kruskal adalah algoritma untuk mencari pohon merentang minimum secara langsung didasarkan pada algoritma MST (Minimum Spanning Tree) umum. Pada algoritma Kruskal sisi-sisi di dalam graf diurut terlebih dahulu berdasarkan bobotnya dari kecil ke besar. Sisi yang dimasukkan ke dalam himpunan T adalah sisi graf G sedemikian sehingga T adalah pohon. Pada keadaan awal, sisi-sisi sudah diurut berdasarkan bobot membentuk hutan (forest). Hutan tersebut dinamakan hutan merentang (spanning forest). Sisi dari graf G ditambahkan ke T jika tidak membentuk sirkuit di T.
Perbedaan prinsip antara algoritma Prim dan Kruskal adalah jika pada algoritma Prim sisi yang dimasukkan ke dalam T harus bersisian dengan sebuah simpul di T, maka pada algoritma Kruskal sisi yang dipilih tidak perlu bersisian dengan simpul di T asalkan penambahan sisi tersebut tidak membentuk sirkuit.

Langkah-langkah dalam algoritma Kruskal adalah sebagai berikut:
1. Lakukan pengurutan terhadap setiap sisi di graf mulai dari sisi dengan bobot terkecil sampai terbesar.
2. Pilih sisi yang mempunyai bobot minimum yang tidak membentuk sirkuit di pohon. Tambahkan sisi tersebut ke dalam pohon.
3. Ulangi langkah 2 sampai pohon merentang minimum terbentuk, yaitu ketika sisi di dalam pohon merentang minimum berjumlah n-1 (n adalah jumlah simpul di graf).


Contoh kasus yang menggunakan algoritma Kruskal

Memecahkan sebuah konsep masalah pada Indomaret yaitu menggunakan Algoritma Kruskal dalam pendistribusian barang dan produk, dengan asumsi tiap Indomaret adalah sebuah simpul (node) dan jalan adalah garis (edge). Konsep tersebut diterapkan pada pohon merentang minimum dengan mencari jalur terpendek dari sebuah jalan sehingga diawali dengan mencari bobot yang kecil. Jaringan distribusi barang dan produk yang telah dikirim oleh Indomaret menggunakan metode Algoritma Kruskal. Hasil dari aplikasi jaringan distribusi barang dan produk dengan menggunakan metode Algoritma Kruskal dapat menganalisis jaringan Indomaret dengan meminimalisasi jarak antar Indomaret ke Indomaret. Selanjutnya sehingga lebih optimal dalam pengiriman barang dan produk sehingga jarak yang ditempuh lebih singkat.

Contoh Program:
#include <cstdlib>
#include <iostream>
#include <fstream>


using namespace std;

  class kruskal
   {
 private:
       int n ;
       int noe; 
       int graph_edge[100][4];
       int tree[10][10];

       int sets[100][10];
       int top[100];

       public:
       int read_graph();
       void initialize_span_t();
       void sort_edges();
       void algorithm();
       int find_node(int );
       void print_min_span_t();
   };

   int kruskal::read_graph()
   {
       cout << "----------------------------------------------------------------" <<endl;
       cout << "                           KELOMPOK 5                           " <<endl;
       cout << "   PROGRAM ALGORITMA KRUSKAL INDOMARET DI KABUPATEN TANAH LAUT   " <<endl;
       cout << "----------------------------------------------------------------" <<endl;
       cout<<endl;
       cout << " Banyak titik graph : "; cin >> n;
       noe=0;

       cout<<"\n Jarak antar tiap titik:\n";

       for(int i=1;i<=n;i++)
           {
               for(int j=i+1;j<=n;j++)
               {
               cout << " ("<<i<<" , "<<j<<") = ";
               float w;
               cin>>w;
                   if(w!=0)
                   {
                   noe++;

                   graph_edge[noe][1]=i;
                   graph_edge[noe][2]=j;
                   graph_edge[noe][3]=w;
                   }
               }
           }
   }

   void kruskal::sort_edges()
   {
       for(int i=1;i<=noe-1;i++)
       {
           for(int j=1;j<=noe-i;j++)
           {
               if(graph_edge[j][3]>graph_edge[j+1][3])
               {
                   int t=graph_edge[j][1];
                   graph_edge[j][1]=graph_edge[j+1][1];
                   graph_edge[j+1][1]=t;

                   t=graph_edge[j][2];
                   graph_edge[j][2]=graph_edge[j+1][2];
                   graph_edge[j+1][2]=t;

                   t=graph_edge[j][3];
                   graph_edge[j][3]=graph_edge[j+1][3];
                   graph_edge[j+1][3]=t;
               }
           }
       }

       cout<<"\n\n Setelah Jarak diurutkan adalah ::\n";

       for(int i=1;i<=noe;i++)
       cout << " (" << graph_edge[i][1] << " , "<<graph_edge[i][2] << " ) = " <<graph_edge[i][3]<<endl;
   }

   void kruskal::algorithm()
   {

       for(int i=1;i<=n;i++)
       {
       sets[i][1]=i;
                           top[i]=1;
                           }

                        cout<<"\n Rentang Yang di Pakai\n\n";

                           for(int i=1;i<=noe;i++)
                           {
                           int p1=find_node(graph_edge[i][1]);
                           int p2=find_node(graph_edge[i][2]);

                               if(p1!=p2)
                               {
                                   cout<<"Rentang yg masuk ke pohon ::"
                                   <<" < "<<graph_edge[i][1]<<" , "
                                   <<graph_edge[i][2]<<" > "<<endl<<endl;

                                   tree[graph_edge[i][1]][graph_edge[i][2]]=graph_edge[i][3];
                                   tree[graph_edge[i][2]][graph_edge[i][1]]=graph_edge[i][3];

                                   // Mix the two sets

                                   for(int j=1;j<=top[p2];j++)
                                   {
                                       top[p1]++;
                                       sets[p1][top[p1]]=sets[p2][j];
                                   }

                                   top[p2]=0;
                               }
                               else
                               {
                                   cout<<"Jika "
                                   <<" < "<<graph_edge[i][1]<<" , "
                                   <<graph_edge[i][2]<<" > "<<"di masukkan, maka terbentuk siklus. jadi di hapus\n\n";
                               }
                           }
                       }

                       int kruskal::find_node(int n)
                       {
                           for(int i=1;i<=noe;i++)
                           {
                               for(int j=1;j<=top[i];j++)
                               {
                               if(n==sets[i][j])
                                   return i;
                               }
                           }

                           return -1;
                       }


                       int main(int argc, char *argv[])
                       {
                           kruskal obj;
                           obj.read_graph();
                           obj.sort_edges();
                           obj.algorithm();

                           system("PAUSE");
                           return EXIT_SUCCESS;
                       } 
Algoritma Dijkstra
Algoritma Dijkstra, (penemunya adalah seorang ilmuwan komputer, Edsger Dijkstra), adalah sebuah algoritma yang dipakai dalam memecahkan permasalahan jarak terpendek untuk sebuah graph berarah dengan bobot-bobot sisi yang bernilai positif.

Tujan Algoritma Dijkstra
1. Tujuan Algoritma Dijkstra yaitu untuk menemukan jalur terpendek berdasarkan bobot terkecil dari satu titik ke titik lainnya.
2. Kelemahan algoritma ini adalah semakin banyak titik akan semakin memakan waktu proses.
3. Jumlah titik menentukan tingkat efektifitas dari algoritma djikstra.

Urutan Logika Algoritma Dijkstra
1. Beri nilai bobot (jarak) untuk setiap titik ke titik lainnya, lalu set nilai 0 pada node awal dan nilai tak hingga terhadap node lain (yang belum terisi).
2. Set semua node “Belum terjamah” dan set node awal sebagai “Node keberangkatan”.
3. Dari node keberangkatan, pertimbangkan node tetangga yang belum terjamah dan hitung jaraknya dari titik keberangkatan.
4. Setelah selesai mempertimbangkan setiap jarak terhadap node tetangga, tandai node yang telah terjamah sebagai “Node terjamah”. Node terjamah tidak akan pernah di cek kembali, jarak yang disimpan adalah jarak terakhir dan yang paling minimal bobotnya.
5. Set “Node belum terjamah” dengan jarak terkecil (dari node keberangkatan) sebagai “Node Keberangkatan” selanjutnya dan lanjutkan dengan kembali ke step 3.

Contoh Program:
#include <iostream>
#define INF 99999
using namespace std;

main()
{
int n=10,i,j,start;
//cout<<"Masukan Jumlah Vertex : ";
//cin>>n;

int G[n][n],tempGraf[n][n],jarak[n],visit[n],temp[n],count;

G[0][0]=0;     G[0][1]=4; G[0][2]=4;     G[0][3]=3;    G[0][4]=0;    G[0][5]=0;     G[0][6]=0;  G[0][7]=0;     G[0][8]=0;      G[0][9]=0;
G[1][0]=4; G[1][1]=0;     G[1][2]=1;  G[1][3]=0;    G[1][4]=0;    G[1][5]=2;     G[1][6]=5;      G[1][7]=0;     G[1][8]=0;      G[1][9]=0;
G[2][0]=4;  G[2][1]=1;  G[2][2]=0;     G[2][3]=1; G[2][4]=2;    G[2][5]=0;     G[2][6]=0;      G[2][7]=0;  G[2][8]=0;      G[2][9]=0;
G[3][0]=3;     G[3][1]=0;     G[3][2]=1;  G[3][3]=0;    G[3][4]=1; G[3][5]=0;     G[3][6]=0;   G[3][7]=0;     G[3][8]=0;      G[3][9]=0;
G[4][0]=0;     G[4][1]=0;     G[4][2]=2;     G[4][3]=1; G[4][4]=0;    G[4][5]=1;  G[4][6]=0;      G[4][7]=0;  G[4][8]=5;   G[4][9]=0;
G[5][0]=0;     G[5][1]=0;     G[5][2]=2;     G[5][3]=0;    G[5][4]=0; G[5][5]=0;     G[5][6]=2;  G[5][7]=4;     G[5][8]=0;   G[5][9]=0;
G[6][0]=0; G[6][1]=2;     G[6][2]=0;     G[6][3]=0;    G[6][4]=0;    G[6][5]=2; G[6][6]=0;      G[6][7]=1;     G[6][8]=0;      G[6][9]=4;
G[7][0]=0;     G[7][1]=0;     G[7][2]=0;  G[7][3]=0;    G[7][4]=0; G[7][5]=4;     G[7][6]=1;    G[7][7]=0;     G[7][8]=2;   G[7][9]=1;
G[8][0]=0;     G[8][1]=0;     G[8][2]=0;     G[8][3]=5;    G[8][4]=5; G[8][5]=0;  G[8][6]=0;      G[8][7]=2;  G[8][8]=2;      G[8][9]=1;
G[9][0]=0;     G[9][1]=0;     G[9][2]=0;     G[9][3]=0;    G[9][4]=0;    G[9][5]=0;     G[9][6]=4;  G[9][7]=1;     G[9][8]=2;  G[9][9]=0;

for(i = 0;i < n ;i++)
{
for (j=0;j<n;j++)
{
cout<<"Matriks "<<"["<<i<<"]"<<"["<<j<<"]"<<" : ";
cout<<G[i][j]<<endl;
}
}

/*cout<<"Masukan Matrix Graf : \n";
for(i = 0;i < n ;i++)
{
for (j=0;j<n;j++)
{
cout<<"Matriks "<<"["<<i<<"]"<<"["<<j<<"]"<<" : ";
cin>>G[i][j];
}
}*/
cout<<"Masukan Vertex Asal : ";
cin>>start;

for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
if (G[i][j] == 0)
{
tempGraf[i][j] = INF;
}
else{
tempGraf[i][j] = G[i][j];
}
}
}

for (i = 0;i<n;i++)
{
jarak[i] = tempGraf[start][i];
temp[i] = start;
visit[i] = 0;
}
jarak[start] = 0;
visit[start] = 1;

count =1; ///dimulai dari 1 karena kita tidak akan menghitung vertex asal lagi

///proses untuk menghitung vertex yang dikunjungi
int jarakmin,nextvertex;
while (count < n-1)
{
jarakmin = INF;
for (i=0;i<n;i++)
{
///jika jarak lebih kecil dari jarak minimum dan vertex belum dikunjungi
/// maka jarak minimum adalah jarak yang sudah dibandingkan sebelumnya dengan jarakmin
if(jarak[i] < jarakmin && visit[i]!=1)
{
jarakmin = jarak[i];
nextvertex = i; //untuk memberikan vertex pada jarak minimum
}
}

/// untuk mengecek vertex selanjutnya yang terhubung dengan vertex lain yang memiliki jarak minimum
visit[nextvertex] = 1;
for(i = 0;i<n;i++)
{
if(visit[i]!=1)
{
if(jarakmin+tempGraf[nextvertex][i]<jarak[i])
{
jarak[i] = jarakmin+tempGraf[nextvertex][i];
temp[i] = nextvertex;
}
}
}
count++;
}
///nenampilkan jalur dan jarak untuk setiap vertex
int a[n+1],k;
for (i = 0; i < n ;i++)
{
if(i!=start)
{
cout<<"\nHasil jarak untuk vertex ke-"<<i<<" adalah\n"<<jarak[i];
j=i;
cout<<"<-"<<i;
while(j!=start)
{
j=temp[j];
cout<<j;
if(j!=start)
{
cout<<"<-";
}

}

}
}
cout<<"\nTotal Jaraknya adalah "<<jarak[n-1];
return 0;
}

Read More...

Selasa, 23 April 2019

CodeBlocks C++ : Searching (Sequential)

By April 23, 2019
“Searching (Sequential)”
Yo sobat Mahasiswa, mari kita lanjutkan materi koding yaitu "Searching Sequential". Silahkan juga lihat Contoh Program Besar pada postingan sebelumnya.

  • Searching Sequential
Pencarian berurutan dalam C++ juga disebut pencarian linear. Teknik pencarian ini sangat sederhana, untuk melakukan teknik ini pengguna mulai loop dari indeks nol array ke indeks terakhir array. Dimulai dari indeks pertama dan membandingkan nilai yang diperlukan dengan nilai pertama. Jika nilai yang diperlukan ditemukan, maka akan menunjukkan hasil sebaliknya membandingkan nilai indeks berikutnya dan akan berlanjut sampai nilai yang diperlukan ditemukan atau loop selesai tanpa menemukan nilai apa pun.

Jika sobat mencari elemen yang berada di dekat bagian depan array, pencarian berurutan akan menemukannya dengan cepat. Semakin banyak data yang harus dicari, semakin lama waktu yang dibutuhkan untuk menemukan data yang cocok dengan kunci menggunakan proses ini, Oleh karena itu diperlukan suatu metode untuk mempersingkat hal tersebut.


Contoh:
i = 0;
    ulang:
        if (i != n)
        {
            if (nama[i] == x)
                cout << " Nama yang dicari ditemukan pada data " << i+1;
            else
            {
                i++;
                goto ulang;
            }
        }
        else
        {
            cout << " Data tidak ada\n";
        }
    return 0;
Penjelasan:
Dalam algoritma searching sequential diatas, i didefinisikan sebagai variabel yang mencarikan data yang sobat inputkan dan dicari. Lalu program memeriksa algoritma penyeleksian kondisi, dimana jika i tidak sama dengan n (n = jumlah data) maka kondisi 1 (if) akan dijalankan, jika tidak maka kondisi 2 (else) yang dijalankan.

Dalam kondisi 1 (if) ada algoritma penyeleksian kondisi lagi yang dimana dalam algoritma tersebut jika nama[i] sama dengan data/sesuai (nama[i] == x) maka program akan menjalankan kondisi 1 dengan perintah output "Nama yang dicari ditemukan pada data ....". Namun, jika tidak maka kondisi 2 yang dijalankan dimana i akan diproses (i++) sehingga i yang semula 0 menjadi 1 (0 = 0 + 1) karena i++ sama saja dengan i+1, lalu ada deklarasi goto ulang untuk perintah mengulang proses ke dimana ulang berada.

Jika dalam proses pencarian data sudah selesai, maka proses akan di return untuk mengakhiri program (mengembalikan nilai awal semua).

  • Contoh Program
#include <iostream>
#include <windows.h>
using namespace std;

main()
{
    int n, i = 0;
    string nama[10], x;

    cout << " Masukan banyak data : "; cin >> n;
    for (i = 0; i < n; i++)
    {
        cout << " Orang " << i+1 << " = "; cin >> nama[i];
    }

    system("cls");
    cout << " Masukan nama yang dicari : "; cin >> x;

    i = 0;
    ulang:
        if (i != n)
        {
            if (nama[i] == x)
                cout << " Nama yang dicari ditemukan pada data " << i+1;
            else
            {
                i++;
                goto ulang;
            }
        }
        else
        {
            cout << " Data tidak ada\n";
        }
    return 0;
}


Sobat bisa mencoba kodingan diatas dan memahaminya. Contoh programnya sendiri memiliki banyak variasi tergantung dari kreativitas oleh penulis program.


Sekian dari postingan blog kali ini. Semoga artikel ini dapat bermanfaat bagi sobat baik untuk mengerjakan tugas, menambah ilmu, maupun untuk sekedar menambah wawasan untuk media pembelajaran koding.
Read More...

CodeBlocks C++ : Searching (Binary)

By April 23, 2019
“Searching (Binary)”
Yo sobat Mahasiswa, mari kita lanjutkan materi koding yaitu "Searching Binary". Silahkan juga lihat Contoh Seaching Sequential pada postingan sebelumnya.

  • Searching Binary
Pencarian biner adalah algoritma pencarian yang digunakan secara luas yang membutuhkan array untuk diurutkan sebelum pencarian diterapkan. Ide utama di balik algoritma ini adalah untuk tetap membagi array menjadi dua (membagi dan mengatasi) sampai elemen ditemukan, atau semua elemen sampai habis. Biner bekerja dengan membandingkan item tengah array dengan target data, jika cocok, itu mengembalikan true (boolean benar/salah), jika jangka menengah lebih besar dari target, pencarian dilakukan di sub-array kiri. Jika jangka menengah kurang dari target, pencarian dilakukan dalam sub-array yang tepat.

Contoh:
awal = 0; akhir = 7; bflag = 0;
    while (b_flag == 0 && awal <= akhir)
    {
        tengah = (awal + akhir) / 2;
        if (data[tengah] == cari)
        {
            b_flag = 1;
            break;
        }
        else if (data[tengah] < cari)
            awal = tengah + 1;
        else
            akhir = tengah - 1;
    }
    if (b_flag == 1)
        cout << "\nData ditemukan pada posisi ke-" << tengah+1 << endl;
    else
        cout << "\nData tidak ditemukan\n";
Penjelasan:
Dalam algoritma searching biner diatas, dideklarasikan variabel awal, akhir, tengah, dan b_flag dimana awal diidentifikasikan nilainya adalah 0, akhir nilainya 7, tengah nilainya adalah awal + akhir / 2, dan b_flag nilainya 0. Lalu program akan melakukan perulagan while dimana akan dilakukan apabila kondisi terpenuhi, yaitu apabila b_flag nilainya adalah 0 (b_flag == 0) dan awal kurang lebih sama dengan akhir (awal <= akhir). Dalam algoritma perulangan while terdapat rumus perhitungan tengah, dan algoritma penyeleksian kondisi.

Untuk perhitungan, nilai tengah merupakan penggerak dari array data, dimana rumus tengah akan dibandingkan dengan variabel cari dan akan terus dijalankan hingga nilai yang ditambahan/dikurangkan ke awal/akhir sama, dan perulangan berhenti. 

Dalam algoritma penyeleksian kondisi, jika data[tengah] sama dengan cari (data[tengah] == cari), maka kondisi 1 akan dijalankan, apabila data[tengah] kurang dari cari (data[tengah] < cari), maka kondisi 2 akan dijalankan, namun apabila kedua kondisi tidak terpenuhi maka kondisi 3 yang dijalankan.

Setelah perulangan, maka untuk mengeluarkan hasil dari proses diatas maka diperlukan sebuah algoritma penyeleksian kondisi dimana jika b_flag sama dengan 1 (b_flag == 1) maka kondisi 1 akan dijalankan, dengan perintah "Data ditemukan pada posisi ke-....", apabila kondisi 1 tidak terpenhi maka kondisi 2 akan dijalankan, dengan perintah "Data tidak ditemukan".

  • Contoh Program
#include <iostream>
#include <windows.h>
using namespace std;

main()
{
    int n, i = 0;
    string nama[10], x;

    cout << " Masukan banyak data : "; cin >> n;
    for (i = 0; i < n; i++)
    {
        cout << " Orang " << i+1 << " = "; cin >> nama[i];
    }

    system("cls");
    cout << " Masukan nama yang dicari : "; cin >> x;

    i = 0;
    ulang:
        if (i != n)
        {
            if (nama[i] == x)
                cout << " Nama yang dicari ditemukan pada data " << i+1;
            else
            {
                i++;
                goto ulang;
            }
        }
        else
        {
            cout << " Data tidak ada\n";
        }
    return 0;
}


Sobat bisa mencoba kodingan diatas dan memahaminya. Contoh programnya sendiri memiliki banyak variasi tergantung dari kreativitas oleh penulis program.


Sekian dari postingan blog kali ini. Semoga artikel ini dapat bermanfaat bagi sobat baik untuk mengerjakan tugas, menambah ilmu, maupun untuk sekedar menambah wawasan untuk media pembelajaran koding.
Read More...

Senin, 11 Maret 2019

CodeBlocks C++ : Contoh Program Besar

By Maret 11, 2019
“Contoh Program Tugas Besar”
Dalam pembuatan program, adakalanya kita ingin membuat sesuai yang berguna dalam kehidupan sehari-hari, misalnya membuat program dari toko yang kita punyai atau program yang bisa mempermudah kita dalam mengerjakan tugas. dari beberapa contoh diatas maka kita perlu belajar yang namanya "Proyek/Program Besar".

Dalam hal ini tetu kita pasti kesulitan untuk membuat program tersebut, pasalnya karena banyaknya baris yang telah dibuat, lupa untuk mendeklarasikan, banyak yang harus diatur, dan lain-lain. oleh karena itu sobat perlu belajar dengan namanya "Rancangan Fungsi", nah rancangan ini akan membantu dalam membuat program yang diinginkan sobat beserta kemudahan dalam mengatur apa yang dibuat/dibangun sobat ke program yang sobat buat. 
  • Contoh Program
Dalam program ini, terdapat berbagai macam souce code yang dibuat dengan tujuan membangun program yang terorganisir, seperti:
  • Penyeleksian kondisi
  • Perulangan
  • Array
  • Manipulasi String
  • Fungsi
  • Akses File
  • Struktur/Struct Array
  • Pointer
Pada alur program ini, dimulai dari:
  1. Menginputkan jumlah client.
  2. Memasukan nama lengkap.
  3. Menginputkan jumlah penumpang.
  4. Memilih pesawat.
  5. Memilih tujuan keberangkatan.
  6. Memilih jenis/kelas pesawat yang ditumpangi.
  7. Hasil dari inputan yang telah dilakukan.
  8. Memunculkan tabel pembayaran.
  9. Menginputkan bayaran.
  10. Melakukan akses file dari program yang telah di-running.

#include <iostream> //header input output
#include <conio.h> //header getch
#include <windows.h> //header system cls
#include <fstream> //header membuka dan menutup file
#include <string.h> //header operasi string
#include <string> //header fungsi string
#include <iomanip> //header pemerataan io set flags
/*      Nama  : Muhammad Ausha Nuryan
        Kelas : 1C
        Kelompok : 4 (Tiket Pesawat)
        Anggota  : Muhammad Suriyadi
                   Cucu Sulaiman
                   Agung Laksana
                   Muhammad Ausha Nuryan*/

using namespace std; //pengganti std::

int a, b, c, d, jml, jum;
int byr, kembalian;
int totPem = 0;

struct client
{
  string nama[30];
  string *org;
}cl;

struct atasNama
{
    string nama[30][30];
    int umur[10][10];
}an;

struct pesawat
{
    int tiket[10];
    float diskon[10];
    string tujuan[15][15], kelas, kPenerbangan;
    char pswt[10], pil[10][10], pil2[10][10];
}t;

void tampilanAwal () //membuat garis tabel awal tampilan
{
    cout << "========================================================================================================================" << endl;
    cout << "                                          TIKET ONLINE PENERBANGAN BANJARMASIN                                          " << endl;
    cout << "========================================================================================================================" << endl;
}

void tampilanPesawat () //tabel pesawat yang tersedia
{
    cout << endl;
    cout << "=================================================================" << endl;
    cout << "| No.|       Pesawat                     Harga Tiket             " << endl;
    cout << "=================================================================" << endl;
    cout << "| 1. |   Sulaiman Indonesia             Rp. 1.600.000,-          " << endl;
    cout << "| 2. |   Yadi Airlines                  Rp. 1.700.000,-          " << endl;
    cout << "| 3. |   Sriwijaya Agung                Rp. 1.400.000,-          " << endl;
    cout << "| 4. |   Lion Ausha                     Rp. 1.500.000,-          " << endl;
    cout << "=================================================================" << endl;
}

void orang () //pemasukan nama pembeli tiket
{
    cin.ignore();
    cout << "\n   Client " << a << endl;
    cout << "   Nama Lengkap     : "; getline(cin, cl.nama[a]);
    cl.org = &cl.nama[a];
    cout << "   Alamat dari nama client : " << cl.org << endl;
    cout << "   Jumlah Penumpang : "; cin >> jum;
    if (jum > 1)
    {
        for (d = 1; d < jum; d++)
        {
            cin.ignore();
            cout << "   Nama Lengkap     : "; getline(cin, an.nama[a][d]);
            cout << "   Umur" << endl;
            cout << " 1. Dewasa (Lebih dari 14 Tahun)" << endl;
            cout << " 2. Anak-Remaja   (7 Tahun sampai 14 Tahun)" << endl;
            cout << " 3. Balita (Kurang dari 7 Tahun)" << endl;
            cout << "   Pilihan Umur : "; cin >> an.umur[a][d];
        }
    }
}

void pilihanTujuan () //menampilkan list Tujuan tujuan
{
    cout << "   Tujuan Keberangkatan:\n";
    cout << " 1. BANJARMASIN-JAKARTA\n";
    cout << " 2. BANJARMASIN-MAKAASAR\n";
    cout << " 3. BANJARMASIN-BALI\n";
    cout << " 4. BANJARMASIN-SURABAYA\n";
    cout << " 5. BANJARMASIN-PONTIANAK\n";
}

string Tujuan () //untuk pengeluan output hasil dari pemilihan tujuan
{
    if (t.pil[a][b] == '1')
    {
        t.tujuan[a][b] = "BANJARMASIN-JAKARTA";
    }
    else if (t.pil[a][b] == '2')
    {
        t.tujuan[a][b] = "BANJARMASIN-MAKAASAR";
    }
    else if (t.pil[a][b] == '3')
    {
        t.tujuan[a][b] = "BANJARMASIN-BALI";
    }
    else if (t.pil[a][b] == '4')
    {
        t.tujuan[a][b] = "BANJARMASIN-SURABAYA";
    }
    else if (t.pil[a][b] == '5')
    {
        t.tujuan[a][b] = "BANJARMASIN-PONTIANAK";
    }

    return t.tujuan[a][b];
}

string kode () //kode penerbangan saat diprint out di teks
{
    if (t.pswt[a] == '1')
    {
        if (t.pil[a][b] == '1')
        {
            t.kPenerbangan = "SI-BJ";
        }
        else if (t.pil[a][b] == '2')
        {
            t.kPenerbangan = "SI-BM";
        }
        else if (t.pil[a][b] == '3')
        {
            t.kPenerbangan = "SI-BB";
        }
        else if (t.pil[a][b] == '4')
        {
            t.kPenerbangan = "SI-BS";
        }
        else if (t.pil[a][b] == '5')
        {
            t.kPenerbangan = "SI-BP";
        }
    }
    else if (t.pswt[a] == '2')
    {
        if (t.pil[a][b] == '1')
        {
            t.kPenerbangan = "YA-BJ";
        }
        else if (t.pil[a][b] == '2')
        {
            t.kPenerbangan = "YA-BM";
        }
        else if (t.pil[a][b] == '3')
        {
            t.kPenerbangan = "YA-BB";
        }
        else if (t.pil[a][b] == '4')
        {
            t.kPenerbangan = "YA-BS";
        }
        else if (t.pil[a][b] == '5')
        {
            t.kPenerbangan = "YA-BP";
        }
    }
    else if (t.pswt[a] == '3')
    {
        if (t.pil[a][b] == '1')
        {
            t.kPenerbangan = "SA-BJ";
        }
        else if (t.pil[a][b] == '2')
        {
            t.kPenerbangan = "SA-BM";
        }
        else if (t.pil[a][b] == '3')
        {
            t.kPenerbangan = "SA-BB";
        }
        else if (t.pil[a][b] == '4')
        {
            t.kPenerbangan = "SA-BS";
        }
        else if (t.pil[a][b] == '5')
        {
            t.kPenerbangan = "SA-BP";
        }
    }
    else if (t.pswt[a] == '4')
    {
        if (t.pil[a][b] == '1')
        {
            t.kPenerbangan = "LA-BJ";
        }
        else if (t.pil[a][b] == '2')
        {
            t.kPenerbangan = "LA-BM";
        }
        else if (t.pil[a][b] == '3')
        {
            t.kPenerbangan = "LA-BB";
        }
        else if (t.pil[a][b] == '4')
        {
            t.kPenerbangan = "LA-BS";
        }
        else if (t.pil[a][b] == '5')
        {
            t.kPenerbangan = "LA-BP";
        }
    }
    return t.kPenerbangan;
}

string tipe () //kelas pesawat
{
    if (t.pil2[a][b] == '1')
    {
        t.kelas = "Ekonomi";
    }
    else if (t.pil2[a][b] == '2')
    {
        t.kelas = "Bisnis";
    }
    return t.kelas;
}

void pilihanKelas () //tabel pilihan kelas pesawat ekonomi atau ekslusif
{
    cout << endl;
    cout << "   Kelas Pesawat\n 1. Ekonomi\n 2. Bisnis\n";
}

void dataTiket () // pemasukan data pilihan tujuan penerbangan
{
    ulang:
    cout << "   Pilihan : "; cin >> t.pil2[a][b];
    if (t.pil2[a][b] == '1')
        {
            cout << "   Tiket Regular, tidak ada tambahan biaya" << endl;
        }
    else if (t.pil2[a][b] == '2')
        {
            cout << "   Tambahan biaya Rp. 500.000,-" << endl;
        }
    else
        {
            cout << "   Salah Input\n";
            goto ulang;
        }
}

int hargaTiket () //harga tiket
{
    if (t.pswt[a] == '1')
    {
        if (t.pil2[a][b] == '1')
        {
            t.tiket[a] = 1600000 * jum;
        }
        else if (t.pil2[a][b] == '2')
        {
            t.tiket[a] = 1600000 * jum + 500000;
        }
    }
    if (t.pswt[a] == '2')
    {
        if (t.pil2[a][b] == '1')
        {
            t.tiket[a] = 1700000 * jum;
        }
        else if (t.pil2[a][b] == '2')
        {
            t.tiket[a] = 1700000 * jum + 500000;
        }
    }
    if (t.pswt[a] == '3')
    {
        if (t.pil2[a][b] == '1')
        {
            t.tiket[a] = 1400000 * jum;
        }
        else if (t.pil2[a][b] == '2')
        {
            t.tiket[a] = 1400000 * jum + 500000;
        }
    }
    if (t.pswt[a] == '4')
    {
        if (t.pil2[a][b] == '1')
        {
            t.tiket[a] = 1500000 * jum;
        }
        else if (t.pil2[a][b] == '2')
        {
            t.tiket[a] = 1500000 * jum + 500000;
        }
    }
    return t.tiket[a];
}

float diskon()
{
    if (hargaTiket() > 15000000)
    {
        t.diskon[a] = hargaTiket() * 0.4;
    }
    else if (hargaTiket() > 7500000 && hargaTiket() <= 15000000)
    {
        t.diskon[a] = hargaTiket() * 0.25;
    }
    else if (hargaTiket() > 5000000 && hargaTiket() <= 7500000)
    {
        t.diskon[a] = hargaTiket() * 0.15;
    }
    else
    {
        t.diskon[a] = 0;
    }
    return t.diskon[a];
}

int hTiket() //rumus total harga tiket
{
    totPem = hargaTiket() - diskon();
    return totPem;
}

void tampilanAkhir () //menampilkan hasil dari proses
{
    for (a = 1; a <= jml; a++)
    {
        for (b = 1; b <= 1; b++)
        {
            cout << "   Client " << cl.nama[a] <<  " Membeli tiket " << Tujuan() << " dengan pesawat " << kode();
            cout << " kelas " << tipe() <<  "\n   seharga Rp. " << hTiket() << ",-" << endl;
        }
    }
}

void printTabel () //print hasil proses
{
    ofstream file ("Retail.txt");
    cout << endl;
    if (!file.is_open()){
        cout << "TIdak bisa membuka file";
    }
    else {
            cout << endl;
            cout << "================================================================================================================================" << endl;
            file << "================================================================================================================================" << endl;
            cout << " No. |          Nama Client           |        Tujuan       |      Pesawat      |     Kelas     |             Harga            |" << endl;
            file << " No. |          Nama Client           |        Tujuan       |      Pesawat      |     Kelas     |             Harga            |" << endl;
            cout << endl;

            for (a = 1; a <= jml; a++)
            {
                cout << endl;
                cout << setiosflags(ios::right) << setw(2) << a << setiosflags(ios::right) << setw(26) << cl.nama[a];
                file << setiosflags(ios::right) << setw(2) << a << setiosflags(ios::right) << setw(26) << cl.nama[a];
                for (b = 1; b <= 1; b++)
                {
                    totPem = totPem + hTiket();
                    cout << setiosflags(ios::left) << setw(31) << Tujuan() << setiosflags(ios::left) << setw(13) << kode();
                    file << setiosflags(ios::left) << setw(31) << Tujuan() << setiosflags(ios::left) << setw(13) << kode();
                    cout << setiosflags(ios::left) << setw(20) << tipe() << setiosflags(ios::left) << setw(16) << "Rp. " << hTiket() << ",-" << setiosflags(ios::left) << setw(11) << "|" << endl;
                    file << setiosflags(ios::left) << setw(20) << tipe() << setiosflags(ios::left) << setw(16) << "Rp. " << hTiket() << ",-" << setiosflags(ios::left) << setw(11) << "|" << endl;
                }
                cout << "================================================================================================================================" << endl;
                file << "================================================================================================================================" << endl;
                cout << setiosflags(ios::right) << setw(102) << "Total" << setiosflags(ios::left) << setw(6) << "Rp. " << totPem << ",-" << endl;
                file << setiosflags(ios::right) << setw(102) << "Total" << setiosflags(ios::left) << setw(6) << "Rp. " << totPem << ",-" << endl;
                cout << setiosflags(ios::right) << setw(102) << "Bayar" << setiosflags(ios::left) << setw(6) << "Rp. "; cin >> byr;
                file << setiosflags(ios::right) << setw(102) << "Bayar" << setiosflags(ios::left) << setw(6) << "Rp. " << byr << ",-" << endl;
                kembalian = byr - totPem;
                cout << setiosflags(ios::right) << setw(102) << "Kembalian" << setiosflags(ios::left) << setw(6) << "Rp. " << kembalian << ",-" << endl;
                file << setiosflags(ios::right) << setw(102) << "Kembalian" << setiosflags(ios::left) << setw(6) << "Rp. " << kembalian << ",-" << endl;
            }
            file.close();
            cout << endl << "   Rekap data sudah ditulis dan dikirim ke pusat. Terima kasih telah memakai jasa kami" << endl;
    }
}

void printTiket ()
{
    ofstream file ("Tiket.txt");
    cout << endl;
    if (!file.is_open()) {
            cout << "TIdak bisa membuka file";
    }
    else {
        for (a = 1; a <= jml; a++)
        {
            for (b = 1; b <= 1; b++)
            {
                file << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  " << endl << endl;
                file << "   Kelas " << tipe() << endl << endl;
                file << "   Nama" << endl;
                file << "   " << cl.nama[a] << endl << endl;
                file << "   Penerbangan          Kelas" << endl;
                file << "      " << kode() << setiosflags(ios::right) << setw(19) << tipe() << endl << endl;
                file << "            Dari  -   Ke" << endl;
                file << "          " << Tujuan() << endl;
                file << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  " << endl;

                if (jum > 1)
                {
                    for (d = 1; d < jum; d++)
                    {
                        file << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  " << endl << endl;
                        file << "   Kelas " << tipe() << endl << endl;
                        file << "   Nama" << endl;
                        file << "   " << an.nama[a][d] << endl << endl;
                        file << "   Penerbangan          Kelas" << endl;
                        file << "      " << kode() << setiosflags(ios::right) << setw(19) << tipe() << endl << endl;
                        file << "            Dari  -   Ke" << endl;
                        file << "          " << Tujuan() << endl;
                        file << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  " << endl;
                    }
                }
            }
            cout << endl;
        }
    }
}

main ()
{
    system("cls");
    tampilanAwal();
    tampilanPesawat();
    cout << endl;
    cout << "   Jumlah Client : "; cin >> jml; //untuk perulangan jumlah client yang membeli tiket pesawat

    for (a = 1; a <= jml; a++) //perulangan jumlah client
    {
        orang();
        ulang1:
        cout << "   Pesawat : "; cin >> t.pswt[a]; //inputan pilihan pesawat

        for (b = 1; b <= 1; b++) //perulangan data pesawat client
        {
            switch (t.pswt[a]) //penyeleksian kondisi pemilihan pesawat
            {
            case '1':
                {
                    cout << endl;
                    pilihanTujuan();
                    kembali1:
                    cout << "   Tujuan Pilihan : "; cin >> t.pil[a][b];

                    switch (t.pil[a][b])
                    {
                        case '1':
                        {

                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '2':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '3':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '4':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '5':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        default:
                        {
                            cout << "   Salah Inputan\n";
                            cout << "   Tekan ENTER untuk kembali\n";
                            getch();
                            goto kembali1;
                            break;
                        }
                    }
                    break;
                }
            case '2':
                {
                    cout << endl;
                    pilihanTujuan();
                    kembali2:
                    cout << "   Tujuan Pilihan : "; cin >> t.pil[a][b];

                    switch (t.pil[a][b])
                    {
                        case '1':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '2':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '3':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '4':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '5':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        default:
                        {
                            cout << "   Salah Inputan\n";
                            cout << "   Tekan ENTER untuk kembali\n";
                            getch();
                            goto kembali2;
                            break;
                        }
                    }
                    break;
                }
            case '3':
                {
                    cout << endl;
                    pilihanTujuan();
                    kembali3:
                    cout << "   Tujuan Pilihan : "; cin >> t.pil[a][b];

                    switch (t.pil[a][b])
                    {
                        case '1':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '2':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '3':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '4':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '5':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        default:
                        {
                            cout << "   Salah Inputan\n";
                            cout << "   Tekan ENTER untuk kembali\n";
                            getch();
                            goto kembali3;
                            break;
                        }
                    }
                    break;
                }
            case '4':
                {
                    cout << endl;
                    pilihanTujuan();
                    kembali4:
                    cout << "   Tujuan Pilihan : "; cin >> t.pil[a][b];

                    switch (t.pil[a][b])
                    {
                        case '1':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '2':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '3':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '4':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        case '5':
                        {
                            cout << endl << "   Tujuan : " << Tujuan () << endl;
                            pilihanKelas();
                            dataTiket();
                            break;
                        }
                        default:
                        {
                            cout << "   Salah Inputan\n";
                            cout << "   Tekan ENTER untuk kembali\n";
                            getch();
                            goto kembali4;
                            break;
                        }
                    }
                    break;
                }
            default: //jika penginputan salah, maka akan langsung mengarah ke default untuk menyatakan kondisi salah
                {
                    cout << "Salah memasukan pilihan\n";
                    goto ulang1;
                    break;
                }
            }
        }
        cout << endl;

    }
    tampilanAkhir(); //menampilkan hasil dari proses dalam main
    cout << endl;
    getch();
    system("cls"); //menghapus tampilan program
    printTabel(); //menampilkan tabel rekap data pelanggan yang membeli tiket
    printTiket (); //menampilkan boarding pass
    cout << endl;

    return 0; //mengembalikan seluruhnya
}
  • Hasil Running



Sobat bisa mencoba kodingan diatas dan memahaminya. Contoh programnya sendiri memiliki banyak variasi tergantung dari kreativitas oleh penulis program.


Sekian dari postingan blog kali ini. Semoga artikel ini dapat bermanfaat bagi sobat baik untuk mengerjakan tugas, menambah ilmu, maupun untuk sekedar menambah wawasan untuk media pembelajaran koding.
Read More...

CodeBlocks C++ : Queue

By Maret 11, 2019
“Queue”
Yo sobat Mahasiswa, mari kita lanjutkan materi koding yaitu "Queue". Silahkan juga lihat Stacks pada postingan sebelumnya.

  • Queue
Antrian adalah struktur data yang dirancang untuk beroperasi dalam konteks FIFO (First in First out). Elemen antrian dimasukkan dari ujung belakang dan dikeluarkan dari ujung depan. Kelas antrian adalah wadah aktif. Wadah adalah objek yang menyimpan data dari jenis yang sama. Antrian dapat dibuat dari wadah urutan yang berbeda. Wadah aktif tidak mendukung iterator karena itu kita tidak dapat menggunakannya untuk manipulasi data. Namun mereka mendukung fungsi anggota push () dan pop () untuk memasukkan dan menghapus data masing-masing.
  • Operasional Queue
Fungsi yang terkait dengan antrian adalah:
  1. Clear() - Mengembalikan antrian menjadi kosong Contoh:
    void Clear()
    {
        antrian.head = antrian.tail = -1;
        printf("Data Clear");
    }
  2. Tampil() - Menampilkan antrian Contoh:
    void Tampil()
    {
        if (IsEmpty()==0)
        {
            for (int i=antrian.head;i<=antrian.tail; i++)
            {
                printf("%d ",antrian.data[i]);
            }
        }
        else
        {
            printf("Data Kosong\n");
        }
    }
  3. Enqueue() - Menambahkan elemen Contoh:
    void Enqueue(int data)//menginput sebah dta
    {
        if(IsEmpty() == 1)
        {
            antrian.head = antrian.tail = 0;
            antrian.data[antrian.tail] = data;
            printf("%d Data Telah Masuk !", antrian.data[antrian.tail]);
        }
        else if(IsFull() == 0)
        {
            antrian.tail = antrian.tail + 1;
            antrian.data[antrian.tail] = data;
            printf("%d masuk !", antrian.data[antrian.tail]);
        }
    }
  4. Dequeue() - Menghapus elemen terakhir dari antrian Contoh:
    int Dequeue()
    {
        int i;
        int e = antrian.data[antrian.head];
    
        for(i=antrian.head;i<=antrian.tail-1;i++)
        {
            antrian.data[i] = antrian.data[i+1];
        }
        antrian.tail--;
        return e;
    }
  • Contoh Program
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 5
#include <iostream>

using namespace std;

typedef struct
{
    int data [MAX];
    int head;
    int tail;
}Queue;

Queue antrian;

void Create()
{
    antrian.head = antrian.tail = -1;
}

int IsEmpty()
{
    if(antrian.tail == -1)
        return 1;
    else
        return 0;
}

int IsFull()
{
    if(antrian.tail == MAX-1)
        return 1;
    else
        return 0;
}

void Enqueue(int data)//menginput sebah dta
{
    if(IsEmpty() == 1)
    {
        antrian.head = antrian.tail = 0;
        antrian.data[antrian.tail] = data;
        printf("%d Data Telah Masuk !", antrian.data[antrian.tail]);
    }
    else if(IsFull() == 0)
    {
        antrian.tail = antrian.tail + 1;
        antrian.data[antrian.tail] = data;
        printf("%d masuk !", antrian.data[antrian.tail]);
    }
}

int Dequeue()
{
    int i;
    int e = antrian.data[antrian.head];

    for(i=antrian.head;i<=antrian.tail-1;i++)
    {
        antrian.data[i] = antrian.data[i+1];
    }
    antrian.tail--;
    return e;
}

void Clear()
{
    antrian.head = antrian.tail = -1;
    printf("Data Clear");
}

void Tampil()
{
    if (IsEmpty()==0)
    {
        for (int i=antrian.head;i<=antrian.tail; i++)
        {
            printf("%d ",antrian.data[i]);
        }
    }
    else
    {
        printf("Data Kosong\n");
    }
}

int main()
{
    int pil;
    int data;
    Create();

    do
    {
        system("cls");
        printf ("\n MENU PILIHAN PROGRAM QUEUE\n");
        printf ("1. Enqueue\n");
        printf ("2. Dequeue\n");
        printf ("3. Tampil\n");
        printf ("4. Clear\n");
        printf ("5. Keluar\n");
        printf ("Masukkan Pilihan Anda : ");
        scanf("%d",&pil);

    switch(pil)
    {
        case 1:
            printf("Data : ");
            scanf("%d",&data);
            Enqueue(data);
            break;

        case 2:
            printf("Elemen yang keluar : %d", Dequeue());
            break;

        case 3:
            Tampil();
            break;

        case 4:
            Clear();
            break;
        case 5:
            return 0;
            break;
    }
    getch();
    } while(pil!=5);
}


Sobat bisa mencoba kodingan diatas dan memahaminya. Contoh programnya sendiri memiliki banyak variasi tergantung dari kreativitas oleh penulis program.


Sekian dari postingan blog kali ini. Semoga artikel ini dapat bermanfaat bagi sobat baik untuk mengerjakan tugas, menambah ilmu, maupun untuk sekedar menambah wawasan untuk media pembelajaran koding.
Read More...

CodeBlocks C++ : Stacks

By Maret 11, 2019
“Stacks”
Yo sobat Mahasiswa, mari kita lanjutkan materi koding yaitu "Stacks". Silahkan juga lihat Pointer pada postingan sebelumnya.

  • Stacks
Tumpukan adalah jenis wadah yang dirancang khusus untuk beroperasi dalam konteks LIFO (last-in first-out), di mana elemen baru ditambahkan di satu ujung dan (atas) elemen dihapus dari ujung itu saja.
tumpukan diimplementasikan sebagai interaksi wadah, yang merupakan kelas dimana digunakan objek yang diletakkan dari kelas kosong tertentu sebagai wadah yang mendasarinya, menyediakan serangkaian fungsi anggota khusus untuk mengakses elemen-elemennya. Elemen didorong/muncul dari "belakang" wadah tertentu, yang dikenal sebagai bagian atas tumpukan.
  • Operasional Stack
Fungsi yang terkait dengan tumpukan adalah:
  1. bersih() - Mengembalikan tumpukan menjadi kosong Contoh:
    void bersih()
    {
        if (s.top == -1)
        {
            cout << "\nTumpukan masih kosong!\n";
            getch();
        }
        else
        {
            s.top = -1;
            cout << "\nTumpukan berhasil dibersihkan!\n";
            getch();
        }
    }
  2. tampil() - Menampilkan tumpukan yang ada Contoh:
    void tampil()
    {
        if (s.top == -1)
        {
            cout << "\nTidak ada tumpukan!\n";
            getch();
        }
        else
        {
            for (int a = s.top; a >= 0; a--)
            {
                cout << "\nTumpukan ke " << a+1 << " " << "= " << s.bot[a];
            }
            getch();
        }
    }
  3. nambah() - Menambahkan elemen Contoh:
    void nambah(int x)
    {
        if (s.top == max)
        {
            cout << "\nTumpukan penuh!\n";
            getch();
        }
        else
        {
            s.top++;
            s.bot[s.top] = x;
            cout << "\nTumpukan berhasil diisi!\n";
            getch();
        }
    }
  4. kurang() - Menghapus elemen paling atas tumpukan Contoh:
    void kurang()
    {
        if (s.top == -1)
        {
            cout << "\nTumpukan kosong!\n";
            getch();
        }
        else
        {
            s.top-1;
            cout << "\nTumpukan berhasil dihapus!\n";
            getch();
        }
    }
  • Contoh Program
#include <iostream>
#include <conio.h>
#include <windows.h>
#define max 4 // 0 -> 4 = 5 buah tempat stack

using namespace std;

struct numpuk
{
    int top;
    int bot[max];
}s;

void start()
{
    s.top = -1;
}

void nambah(int x)
{
    if (s.top == max)
    {
        cout << "\nTumpukan penuh!\n";
        getch();
    }
    else
    {
        s.top++;
        s.bot[s.top] = x;
        cout << "\nTumpukan berhasil diisi!\n";
        getch();
    }
}

void kurang()
{
    if (s.top == -1)
    {
        cout << "\nTumpukan kosong!\n";
        getch();
    }
    else
    {
        s.top-1;
        cout << "\nTumpukan berhasil dihapus!\n";
        getch();
    }
}

void tampil()
{
    if (s.top == -1)
    {
        cout << "\nTidak ada tumpukan!\n";
        getch();
    }
    else
    {
        for (int a = s.top; a >= 0; a--)
        {
            cout << "\nTumpukan ke " << a+1 << " " << "= " << s.bot[a];
        }
        getch();
    }
}

void bersih()
{
    if (s.top == -1)
    {
        cout << "\nTumpukan masih kosong!\n";
        getch();
    }
    else
    {
        s.top = -1;
        cout << "\nTumpukan berhasil dibersihkan!\n";
        getch();
    }
}

main ()
{
    int x;
    char pil;

    start();
    ulang:
    system("cls");
    cout << "1. Tambah\n2. Kurang\n3. Tampil\n4. Format\n5. Keluar\nPilihan : ";
    cin >> pil;

    switch (pil)
    {
    case '1':
        cout << "\nMasukan Value : ";
        cin >> x;
        nambah(x);
        break;
    case '2':
        kurang();
        break;
    case '3':
        tampil();
        break;
    case '4':
        bersih();
        break;
    case '5':
        return 0;
        break;
    default:
        cout << "\nSalah input!\n";
        getch();
        goto ulang;
        break;
    }
}

Sobat bisa mencoba kodingan diatas dan memahaminya. Contoh programnya sendiri memiliki banyak variasi tergantung dari kreativitas oleh penulis program.


Sekian dari postingan blog kali ini. Semoga artikel ini dapat bermanfaat bagi sobat baik untuk mengerjakan tugas, menambah ilmu, maupun untuk sekedar menambah wawasan untuk media pembelajaran koding.
Read More...

Minggu, 03 Maret 2019

CodeBlocks C++ : Pointer

By Maret 03, 2019
“Pointer”
Yo sobat Mahasiswa, mari kita lanjutkan materi koding yaitu "Pointer". Silahkan juga lihat Struct/Stuktur Data Array pada postingan sebelumnya.

  • Pointer
Pointer adalah fitur yang ada dari C++, yang membedakannya dari bahasa pemrograman lain seperti Java dan Python. Pointer digunakan dalam program C++ untuk mengakses memori dan memanipulasi alamat.

Untuk memahami pointer, sobat harus terlebih dahulu tahu bagaimana data disimpan di komputer. Setiap variabel yang sobat buat dalam program sobat diberikan lokasi dalam memori komputer. Nilai awal variabel sebenarnya disimpan di lokasi yang ditetapkan.

Contoh:

#include <iostream>
using namespace std;


int main()

int var1 = 3;
int var2 = 24;
int var3 = 17;


cout << &var1 << endl;
cout << &var2 << endl;
cout << &var3 << endl;
}
Dari contoh program diatas, sobat bisa melihat outputnya:
0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4
0x di awal mewakili alamat dalam bentuk heksadesimal. Perhatikan bahwa alamat pertama berbeda dari yang kedua dengan 4-byte dan alamat kedua berbeda dari yang ketiga dengan 4-byte. Ini karena ukuran integer (variabel tipe int) adalah 4 byte dalam sistem 64-bit.

  • Variabel Pointer
C ++ memberi sobat untuk memanipulasi data dalam memori komputer secara langsung. Sobat dapat menetapkan dan membatalkan penetapan ruang di memori sesuai keinginan. Ini dilakukan dengan menggunakan variabel Pointer. Variabel pointer adalah variabel yang menunjuk ke alamat tertentu dalam memori yang ditunjukkan oleh variabel lain.

Contoh:

int *p;
  atau  
int* p;
Pernyataan di atas mendefinisikan variabel pointer p, itu memegang alamat memori. Tanda bintang adalah operator dereferensi yang berarti penunjuk ke. Di sini, pointer p adalah pointer ke int, misal, menunjuk ke nilai integer di alamat memori.


  • Operator Pointer
Operator referensi (&) seperti yang dibahas di atas memberikan alamat variabel. Untuk mendapatkan nilai yang tersimpan di alamat memori, kami menggunakan operator dereference (*). Misalnya: Jika variabel angka disimpan dalam alamat memori 0x123, dan itu berisi nilai 5. Operator referensi (&) memberikan nilai 0x123, sedangkan operator dereferensi (*) memberikan nilai 5.
  • Contoh Program
Buatlah program untuk mengetahui suatu nilai dan alamat deklarasi yang digunakan oleh program menggunakan pointer dan array sebagai tambahan!


//header
#include <iostream>
using namespace std; //pengganti std::
//main program yang berjalan
main()
{
    //deklarasi
    int a[10]= {6, 5, 4, 3, 2};
    cout << "nilai angka " << a[0] << endl;

    //buat pointer
    int *aptr
    aptr = a;
    cout <<"nilai alamat " << &aptr << endl;
    cout << "\nmasuk perulangan" << endl;

    //perulangan
    for (int i = 0; i < 5; i++)
    {
    //keluaran hasil pointer    cout << "nilai " << i+1 << " adalah " << *(aptr+i) << endl;
    cout << "alamat " << i+1 << " adalah " << &aptr+i << endl;
    cout << endl;
    }

    return 0;

}
Sobat bisa mencoba kodingan diatas dan memahaminya. Contoh programnya sendiri memiliki banyak variasi tergantung dari kreativitas oleh penulis program.


Sekian dari postingan blog kali ini. Semoga artikel ini dapat bermanfaat bagi sobat baik untuk mengerjakan tugas, menambah ilmu, maupun untuk sekedar menambah wawasan untuk media pembelajaran koding.
Read More...