Breaking News
Showing posts with label C. Show all posts
Showing posts with label C. Show all posts

Friday, May 19, 2017

Program Aplikasi Matriks C++

Matriks dengan C++

Dalam membuat matriks, kita ketahui bahwa di dalamnya ada baris dan kolom.
Agar mudah dalam membuat algoritmanya ,kita bisa membayangkan sedang membuat suatu matriks pada suatu kertas ,misalnya matriks 2x2.
Langkah pertama, kita tulis nilai matriks yang berada pada baris pertama kolom pertama.
Langkah kedua, kita tlis nilai matriks yang berada pada baris pertama kolom kedua.
Langkah ketiga, kita tulis nilai matriks yang berada pada baris kedua kolom pertama.
Langkah ke empat, kita tulis nilai matriks yang berbeda pada baris kedua kolom kedua.

Sourcecode rincian

Nah kalo sudah terbayang, kita buat variable apa saja yang terlibat , kita bisa membuatnya seperti ini:
Dimana variable a adalah suatu aray 2 dimensi yang didalamnya memuat nilai suatu matriks.











Lalu buat perintah untuk input baris dan kolomnya.




                                              




Lalu kita buat cara memasukan datanya dengan menggunakan pengulangan for.




                   



   
        

Lalu kita buat cara untuk menampilkan datanya,




                            

                                                                                                                                                    



 SourceCode


Dan kodenya menjadi seperti ini :

#include <iostream>
using namespace std;
int main()
{
cout<<"Program Matrik"<<endl<<"Ilham Anas"<<endl<<endl;
            int a [25] [25];
            int kolom, baris;
cout<<"Masukan jumlah baris :";
            cin>>baris;
cout<<"Masuka jumlah kolom :";
            cin>>kolom;
            for (int i=1;i<=baris;i++){
            for (int b=1;b<=kolom;b++){
cout<<"Masukan data baris ke "<<i<<" Kolom ke "<<b<<":";
            cin>>a[i][b];          
}
}
cout<<endl<<"Tampilkan"<<endl<<endl;
            for (int i=1;i<=baris;i++){
            for (int b=1;b<=baris;b++){
cout<<a[i][b];
}
cout<<endl;
}
return 0;
}



Hasil run
















Sumber :
http://www.kangghani.com/2016/10/matriks-c.html?m=1

Mungkin sekian dari blog saya tentang matriks c++ Terimakasih..
Read more ...

Friday, May 12, 2017

Tree Dalam Algoritma & Struktur Data

Pengertian 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.

Sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong, dan setiap nodenya harus memiliki identifier/value. Value pada semua node subpohon sebelah kiiri adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di sebelah kanan adalah sama atau lebih besar dari value pada root, masing-masing subpohon tersebut (kiri dan kanan) itu sendiri adalah juga binary search tree.

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,akan tetapi  jika kita ingin melakukan perubahan isi list (insert atau delete), menggunakan list contigue akan sangat lambat, karena prose insert dan delete dalam list contigue butuh memindahkan linked-list, yang untuk operasi insert atau delete tinggal mengatur- atur pointer,akan tetapi pada n-linked list, kita tidak bisa melakukan pointer sembarangan setiap saat, kecuali hanya satu kali dengan kata lain hanya secara squential.
dibawah akan diuraikan istilah-istilah dalam tree :

a) Prodecessor : node yang berada diatas node tertentu.b) Successor : node yang berada di bawah node tertentu.c) Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang         sama.d) Descendant : seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang       sama.e) Parent : predecssor satu level di atas suatu node.f) Child : successor satu level di bawah suatu node.g) Sibling : node-node yang memiliki parent yang sama dengan suatu node.h) Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki             semua karakteristik dari tree tersebut.i) Size : banyaknya node dalam suatu tree.j) Height : banyaknya tingkatan/level dalam suatu tree.k) Root : satu-satunya node khusus dalam tree yang tak punya predecssor.l) Leaf : node-node dalam tree yang tak memiliki seccessor.m) Degree : banyaknya child yang dimiliki suatu node.

Beberapa jenis tree yang memiliki sifat khusus :

1) Binary Tree
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua child.

2) Binary Search Tree


Binary Tree dengan sifat bahwa semua left child harus lebih kecil daripada right child dan parentnya. Juga semua right child harus lebih besar dari left child serta parentnya. Binary seach tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan dalam searching / pencarian node tertentu dalam binary tree.

Contoh program Tree :


#include <iostream>
#include <cstdlib>
using namespace std;

class BinaryTree
{
    private:
        struct tree_node
        {
           tree_node* left;
           tree_node* right;
           int data;
        };
        tree_node* root;
    
    public:
        BinaryTree()
        {
           root = NULL;
        }
       
        bool isEmpty() const { return root==NULL; }
        void print_inorder();
        void inorder(tree_node*);
        void print_preorder();
        void preorder(tree_node*);
        void print_postorder();
        void postorder(tree_node*);
        void insert(int);
        void remove(int);
};

// element yang lebih kecil ke kiri
// element yang lebih besar ke kanan
void BinaryTree::insert(int d)
{
    tree_node* t = new tree_node;
    tree_node* parent;
    t->data = d;
    t->left = NULL;
    t->right = NULL;
    parent = NULL;
    
    // merupakan pohon baru (new tree)
    if(isEmpty()) root = t;
    else
    {
        //Catatan: Semua yang dimasukkan adalah sebagai cabang pohon node
        tree_node* curr;
        curr = root;
        // Mencari induknya node
        while(curr)
        {
            parent = curr;
            if(t->data > curr->data) curr = curr->right;
            else curr = curr->left;
        }

        if(t->data < parent->data)
           parent->left = t;
        else
           parent->right = t;
    }
}

void BinaryTree::remove(int d)
{
    //Tempat element
    bool found = false;
    if(isEmpty())
    {
        cout<<" This Tree is empty! "<<endl;
        return;
    }
    
    tree_node* curr;
    tree_node* parent;
    curr = root;
    
    while(curr != NULL)
    {
         if(curr->data == d)
         {
            found = true;
            break;
         }
         else
         {
             parent = curr;
             if(d>curr->data) curr = curr->right;
             else curr = curr->left;
         }
    }
    if(!found)
         {
        cout<<" Data not found! "<<endl;
        return;
    }


         // 3 pilihan :
    // 1. Kita bisa menghapus cabang node (leaf node)
    // 2. Kita bisa menghapus sebuah node dengan satu anaknya 
    // 3. Kita bisa menghilangkan sebuah node dengan dua anaknya 

    // Node dengan satu anaknya (cabang dari induknya)
    if((curr->left == NULL && curr->right != NULL)|| (curr->left != NULL
&& curr->right == NULL))
    {
       if(curr->left == NULL && curr->right != NULL)
       {
           if(parent->left == curr)
           {
             parent->left = curr->right;
             delete curr;
           }
           else
           {
             parent->right = curr->right;
             delete curr;
           }
       }
       else // untuk cabang bagian kiri, bukan untuk cabang bagian kanan
       {
          if(parent->left == curr)
           {
             parent->left = curr->left;
             delete curr;
           }
           else
           {
             parent->right = curr->left;
             delete curr;
           }
       }
     return;
    }

         //Kita bisa melihat pada pohon node (leaf node)
         if( curr->left == NULL && curr->right == NULL)
    {
        if(parent->left == curr) parent->left = NULL;
        else parent->right = NULL;
                  delete curr;
                  return;
    }


    //Node dengan dua anaknya (cabang dari induknya)
    // mengganti atau menempatkan lagi dengan nilai terkecil pada anak pohon bagian kanan 
    if (curr->left != NULL && curr->right != NULL)
    {
        tree_node* chkr;
        chkr = curr->right;
        if((chkr->left == NULL) && (chkr->right == NULL))
        {
            curr = chkr;
            delete chkr;
            curr->right = NULL;
        }
        else // anak bagian kanan merupakan anak-anak dari induknnya (children)
        {
            //jika anak kanan node merupakan anak bagian kiri
            //memindahkan semua bagian bawah cabang ke tempat element terkecil

            if((curr->right)->left != NULL)
            {
                tree_node* lcurr;
                tree_node* lcurrp;
                lcurrp = curr->right;
                lcurr = (curr->right)->left;
                while(lcurr->left != NULL)
                {
                   lcurrp = lcurr;
                   lcurr = lcurr->left;
                }
        curr->data = lcurr->data;
                delete lcurr;
                lcurrp->left = NULL;
           }
           else
           {
               tree_node* tmp;
               tmp = curr->right;
               curr->data = tmp->data;
           curr->right = tmp->right;
               delete tmp;
           }

        }
         return;
    }

}

void BinaryTree::print_inorder()
{
  inorder(root);
}

void BinaryTree::inorder(tree_node* p)
{
    if(p != NULL)
    {
        if(p->left) inorder(p->left);
        cout<<" "<<p->data<<" ";
        if(p->right) inorder(p->right);
    }
    else return;
}

void BinaryTree::print_preorder()
{
    preorder(root);
}

void BinaryTree::preorder(tree_node* p)
{
    if(p != NULL)
    {
        cout<<" "<<p->data<<" ";
        if(p->left) preorder(p->left);
        if(p->right) preorder(p->right);
    }
    else return;
}

void BinaryTree::print_postorder()
{
    postorder(root);
}

void BinaryTree::postorder(tree_node* p)
{
    if(p != NULL)
    {
        if(p->left) postorder(p->left);
        if(p->right) postorder(p->right);
        cout<<" "<<p->data<<" ";
    }
    else return;
}

int main()
{
    BinaryTree b;
    int ch,tmp,tmp1;
    while(1)
    {
      cout<<"\n\t\a\a1---Masukan Node Di Sepasang Pohon (Binary Tree)\a\a";
      cout<<"\n\t\a\a2---In-Order Traversal                          \a\a";
      cout<<"\n\t\a\a3---Pre-Order Traversal                         \a\a";
      cout<<"\n\t\a\a4---Post-Order Traversal                        \a\a";
      cout<<"\n\t\a\a5---Delete                                      \a\a";
      cout<<"\n\t\a\a6---Exit                                        \a\a";
      cout<<"\n";
      cout<<"\n";
      cout<<"        Masukkan pilihanmu : ";
      cin>>ch;
      switch(ch)
       {
           case 1 : cout<<" Masukkan Node Di Sepasang Pohon (Binary Tree) : ";
                    cin>>tmp;
                    b.insert(tmp);
                    break;
           case 2 : cout<<endl;
                    cout<<" In-Order Traversal "<<endl;
                    cout<<" -------------------"<<endl;
                    b.print_inorder();
                    break;
           case 3 : cout<<endl;
                    cout<<" Pre-Order Traversal "<<endl;
                    cout<<" -------------------"<<endl;
                    b.print_preorder();
                    break;
           case 4 : cout<<endl;
                    cout<<" Post-Order Traversal "<<endl;
                    cout<<" --------------------"<<endl;
                    b.print_postorder();
                    break;
           case 5 : cout<<" Masukkan data yang dihapus : ";
                    cin>>tmp1;
                    b.remove(tmp1);
                    break;
           case 6 : 
                    return 0;
                    
       }
    }
}




Sumber :
http://new-funday.blogspot.co.id/2012/12/struktur-data-tree-dan-penjelasaanya.html
http://firmanatduhri.blogspot.co.id/2015/03/pengertian-tree-dalam-bahasa-pemrograman.html

Read more ...
Designed By