Saturday, 29 March 2014

Binary Tree Search

=> algoritmanya :
1. menetapkan kunci pencarian dan pointer ke akar pohon
2. mengatur negara tidak ditemukan dan membuat arus titik simpul pointer ke akar dan simpul pointer sebelumnya nihil
3. sementara kunci pencarian tidak ditemukan dan tiga masih jalan yang valid untuk mengikuti pohon lakukan
4. menetapkan apakah atau tidak mencari berhasil ditemukan kunci
5. kembali pointer ke node sebelumnya, node saat ini, dan variabel yang menunjukkan apakah atau tidak pencarian berhasil

jika diaplikasikan kedalam c++

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // dibutuhkan untuk system("cls");

struct tree_node
{
tree_node* left;
tree_node* right;
int data;

};

tree_node* root;

bool isEmpty()
{return root==NULL;}

void insert(int d)
{
tree_node* t = new tree_node;
tree_node* parent;
t->data = d;
t->left = NULL;
t->right = NULL;
parent = NULL;
if(isEmpty())root = t;
else
{
tree_node* curr;
curr = root;

while(curr!=NULL)
{
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 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 print_inorder()
{
inorder(root);
}

int count(tree_node* p)
{
if(p==NULL)return 0;
return count(p->left) + count(p->right) + 1;
}

int height(tree_node* p)
{
if(p==NULL)return 0;
int u = height(p->left),v = height(p->right);
if(u > v)
return u+1;
else
return v+1;
}

void cari_terbesar(tree_node* p)
{
if(p==NULL)
return;
else
if(p->right==NULL)
{
cout<<" "<<p->data<<" ";
return;
}
else
{
cari_terbesar(p->right);
return;
}
}

int main()
{
root=NULL;
int ch,tmp;


while(1)
{
system("cls"); // Saya mengganti scrclr() karena dicompiler sy tidak ada fungsi tersebut
cout<<endl;
cout<<"Menu Utama Operasi Pohon Biner"<<endl;
cout<<"--------------------"<<endl;
cout<<"1. Insert/Tambah Data"<<endl;
cout<<"2. Kunjungan In-Order"<<endl;
//cout<<"3. Kunjungan Pre-Order"<<endl;
//cout<<"4. Kunjungan Post-Order"<<endl;
//cout<<"5. Hapus Data"<<endl;
cout<<"6. Menghitung Jumlah Node"<<endl;
cout<<"7. Menghitung Tinggi Pohon"<<endl;
//cout<<"8. Mencari Data Terkecil"<<endl;
cout<<"9. Mencari Data Terbesar"<<endl;
cout<<"10. Exit"<<endl;
cout<<"Pilihan Anda : ";
cin>>ch;
cout<<endl;
switch(ch)
{
case 1 : cout<<"Masukan Data : ";
cin>>tmp;
insert(tmp);
break;
case 2 : cout<<endl;
cout<<"Kunjungan In-Order"<<endl;
cout<<"---------------"<<endl;
print_inorder();getch();
break;
case 6 : cout<<"Menghitung Jumlah Node"<<endl;
cout<<"------------------"<<endl;
cout<<"Jumlah Node = "<<count(root);
getch();
break;
case 7 : cout<<"Menghitung Tinggi Pohon"<<endl;
cout<<"------------------"<<endl;
cout<<"Tinggi Pohon = "<<height(root);
getch();
break;
case 9 : cout<<"Mecari Data Terbesar"<<endl;
cout<<"------------------"<<endl;
cout<<"Data Terbesar Adalah = "<<endl;
cari_terbesar(root);
getch();
break;
case 10 : return 0;
break;
default: cout<<"Pilihan yang Anda Masukkan salah!"<<endl;
getch();
break;
}
}
}

Linked List Iinsertion And Deletion

algoritma

1. menetapkan nama yang akan dimasukkan dan pointer ke kepala daftar

2. menginisialisasi simpul sebelumnya nihil dan arus simpul pointer ke kepala daftar

3. daftar pencarian untuk posisi penyisipan nama yang akan dimasukkan dan pointer retrun untuk logis predeccessor dan penggantinya node mereka

4. membuat node baru

5. menyimpan nama yang akan dimasukkan ke dalam simpul baru

6. menyesuaikan pointer yang dimasukkan node sehingga pointer sehingga menunjuk ke penerus logis

7. jika tidak memasukkan nama baru di depan daftar kemudian

8. kembali daftar diperbarui dan listhead

=> program nya :

#include <cstdlib>
#include <iostream>


using namespace std;


class stak
{
public:
stak();
void push();
void pop();
void cetak();
private:
int top;
char stack[6]; // asumsi max stack 100
char x;
};


stak::stak()
{
top=-1;
}
void stak::push()
{
if(top==5) cout<<"stack penuh";
else {
cout << "Masukkan satu karakter ";
cin >> x;
top++;
stack[top] = x;
}}


void stak::pop()
{
if(top < 0)
{
cout << "Stack kosong" << endl;
return;
}
x = stack[top];
top--;


cout << "Karakter yang di 'POP' adalah : " << x << endl;
}


void stak::cetak()
{
if(top < 0)
{
cout << "Stack kosong" << endl;
return;
}

int i = 0;
for(i = top; i >= 0; i--)
cout << stack[i] << endl;
}

int main(int argc, char** argv) {

int input;
stak a;
cout << "MASUKKAN PILIHAN : " << endl;
cout << "\tpush = 1" << endl;
cout << "\tpop = 2" << endl;
cout << "\tcetak = 3" << endl;
cout << "\tquit = 4" << endl;


while(true)
{
cout << "\nMasukkan pilihan: ";


cin>>input;


if(input==1)
{
a.push();
}
else if(input == 2)
{
a.pop();
}
else if(input == 3)
{
a.cetak();
}
else if(input == 4)
{
break;
}
else
{
cout << "Perintah '" << input << "' tidak dikenal" <<endl;
}
}
return 0;
}

Linked List Search

Dalam hal ini tentukan indeks paling awal dan indeks paling akhir, untuk membagi 2 elemen tersebut.
Indeks awal = i, dimana nilai i, pada awalnya bernilai 0;
Indeks akhir = j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen.

jika diaplikasikan kedalam program c++

#include <iostream>
#include <stdlib>

int main(int argc , char* argv[])
{
int x,i,k;
int l[10]={20,15,22,30,60,28,17,18,21,22};
printf(“Data yang dicari = “); scanf(“%d”,&x);
k=0;
for(i=0;i<9;i++)
{
if(l[i]==x)
{
printf("Data ditemukan di elemen %d\n",i);
k++;
}
}
if(k==0)
{
printf("Data tidak ditemukan\n");
}
printf("Jumlah data yang ditemukan = %d",k);
getch();
return 0;
}

Queue Addition And Deletion

Pada queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu
dilakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang
sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan
elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling
awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO.

jika di aplikasikan kedalam program c++

#include
#include
void main()
{
int cek=0, data[20], x, hapus;
char pil;
do {
clrscr();
printf("1. Tambah Antrian\n");
printf("2. Hapus Antrian\n");
printf("3. Lihat Antrian\n");
printf("4. Keluar\n");
printf("Silahkan masukkan pilihan anda... ");
pil=getche();
if(pil!='1' && pil !='2' && pil !='3' && pil!='4' )
printf("\n\nAnda salah mengetikkan inputan...\n");
else
{
if(pil=='1') //PUSH
{
if(cek==20)
printf("\nAntrian Penuh\n\n");
else
{
printf("\nMasukkan nilai--> ");scanf("%i",&x);
data[cek]=x;
cek++;
}
}else
{
if(pil=='2') //POP
{
if(cek==0)
printf("\nAntrian kosong\n\n");
else
{
hapus=data[0];
for(int v=0;v
data[v]=data[v+1];
data[cek-1]=NULL;
cek--;
printf("\nData dgn nilai=%i terhapus.",hapus);
}getch();
}
else
{
if(pil=='3') //CEK DATA
{
if(cek==0)
printf("\nAntrian Kosong.\n\n");
else
{
printf("\n");
for(int z=0;z
{
printf(" | ");
printf("%i",data[z]);
printf(" | ");
}
}getch();
}}
}}
}while(pil!='4');
}

refleksi pertemuan 7

Text Lline Editing

Algoritma

1.establish baris teks, pola pencarian, dan pola penggantian dan panjang terkait dalam karakter
2. menetapkan nilai awal untuk posisi dalam teks teks lama, pola teks dan pencarian baru
3.while semua posisi pola dalam teks belum diperiksa apakah
4. salin karakter sisa di baris teks asli Garis
5.return diedit teks


jika diaplikasikan kedalam program c++

Pada text edit anda dapat memasukan perintah-perintah yang sudah ada dan mengkombinasikannya dengan output yang anda butuhkan/inginkan.
Berikut adalah contoh sederhana/dasar dari penggunaan C++


#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main()
{
clrscr();
printf("\t\tHalo Apa Kabar?\n");
cout<<"\tSelamat Belajar C++"<<endl;
printf("\n\tSelamat Mencoba");
getch();
}

refleksi pertemuan 6


1. apa yang anda peroleh?

belajar tentang perulangan loop dengan subrpogram rekursif,
two half=> merupakan titik tengah, berhenti saat nilai kanan dan kiri sama
latihan membuat sigma pangkat dati 5-10

10 kasus rekursif untuk UTS :)) tulis tinta biru, tidak melebihi 1 lembar bolak-balik,
1 lembar catatan sudah pernah di kerjakan sebelumnya :)
polanya menjadi variabel yang belajalan dalam sigma,

2. apa yang tidak dipahami?

menganalisa masalah dan logika dalam pembuatan rapor

3. usaha yang dilakukan untuk mengatasi masalah no 2!!

berlatih berulang-ulang,,