Minggu, 30 Maret 2014

KASUS ALPRO MINGGU KE 2

Kasus 2.1

Algoritma :
1. Analisis :
Menghitung jumlah dari 3 bilangan bulat


2. Identifikasi :
Input : a, b,c
Output : jumlah

3. Algoritmanya
Deklarasi
a,b,c ( dalam integer )
jumlah ( integer )
Deskripsinya :
jumlah = a+b+c

Flowchart :
C++ :

Kasus 2.2

Algoritma
1. Analisis :
Menghitung hasil kali dari 2 buah bilangan

2. Identifikasi :
Input : a, b
Output : jumlah 

3. Algoritmanya
Deklarasi :
a,b ( dalam integer )
jumlah ( integer )
Deskripsinya :
jumlah = a*b

Flowchart :
C++ :

Kasus 2.3

Algoritma
1. Analisis :
Menghitung konversi dari m ke cm dan inci

2. Identifikasi :
Input : m
Output :cm dan inci

3. Algoritmanya
Deklarasi :
m,cm, inci ( dalam real )
Deskripsinya :
cm = m*100
inci = m*100/2.54

Flowchart :
C++ :

5.5 Sorting By Diminishing Increment

soal
diberi satu set acak memerintahkan nomor n mengurutkan mereka ke dalam urutan non-menurun menggunakan kerang mengurangi metode penyisipan kenaikan.

deskripsi :
1. membangun array a [1 ... n] elemen n
2. mengatur ukuran kenaikan inch ke n
3. sedangkan ukuran kenaikan lebih besar dari satu melakukan
a) menurunkan inci dengan faktor 2
b) untuk semua rantai inci yang akan diurutkan pada kesenjangan inc lakukan
b.1 menentukan posisi k dari anggota kedua rantai saat ini
b.2 sementara ujung rantai saat ini belum mencapai, lakukan
2a. menggunakan mekanisme penyisipan untuk menempatkan x = a [k] di tempat
2.b bergerak ke atas rantai yang sekarang dengan meningkatkan k oleh inch

5.4 Sorting By insertion

Algoritma
1. membangun sebuah array [1 .. n] elemen n.
2. menemukan minimum dan meletakkannya di tempat untuk bertindak sebagaisentinel :
3. sementara masih ada unsur-unsur yang akan dimasukkan di bagian memerintahkan melakukan
a.Pilih x elemen berikutnya untuk dimasukkan
b.sementara x kurang dari sebelumnya unsur melakukan
c.insert x pada posisi saat ini

for i:=2 to n do
begin {search for x's position then insert it}
j:=1; x:=a[i];
while x>a[j] do j:=j+1
for k:= i down to j+1 do a[k]:= a[k-1];
a[j]:=x
end

C++ :

#include <iostream.h>
void main()
{
int data[100];
int a,b,c,d,x;
int temp;


cout<<"PROGRAM SORTING DATA "<<endl;
cout<<"---------------------------------------------"<<endl;
cout<<"Masukkan jumlah data : ? ";cin>>x;


for(d=1;d<=x;d++)
{
cout<<"Data ke-"<<d<<" = ";cin>>data[d];
}
cout<<"\nData Sebelum Diurutkan \n";
for(d=1;d<=x;d++){
cout<<"\t"<<data[d];
}
for(a=0;a<x;a++){
for(b=0;b<x;b++)
if(data[b]>= data[b+1])
{
temp=data[b];
data[b]=data[b+1];
data[b+1]=temp;
}
}
cout<<"\n\nData setelah diurutkan :\n";
for(c=0;c<x;c++)
cout<<"\t"<<data[c];
cout<<"\n\n---------------------------------------------"<<endl
}
system("PAUSE");
return EXIT_SUCCESS;
}

5.3 sorting by exchange

soal
diberikan urutan yang tidak beraturan dari kumpulan nilai n gunakan urutan dengan emnggunakan sorting by exchange

penyelesaian :
Bubble Sort (Gelembung) merupakan metode pertukaran yang alur logikanya mirip dengan gelembung yaitu dengan cara membandingkan indeks Array yang pertama dengan indeks Array berikutnya secara terus menerus dan bergantian. Namun cara ini kurang efektif karena meskipun data sudah terurut proses perulangan yang terjadi akan terus berlangsung sampai batas perulangan itu berakhir. Ini adalah contoh alur alogaritmanya dalam kode program.

for (c=0; c<7; c++)
{ for (x=0; x<7; x++)
{if (menu[x]menu[x+1])
{term=menu[x];
menu[x]=menu[x+1];
menu[x+1]=term;
}
else {
menu[x]=menu[x];
}}}


Selection Sort (Maksimum/Minimum) merupakan metode pertukaran yang mencari nilai Maksimum/Minimum sekelompok data array yang nantinya nilai yang paling ujung akan diisolasikan dan tidak disertakan pada proses selanjutnya. Perhatikan contoh code berikut ini.

for(y=0; y<9; y++)
{max=0;
for (x=1; x<=b; x++)
{ if (A[x]>A[max])
{
max=x;
} }
if (A[max]>A[b])
{ term=A[b];
A[b]=A[max];
A[max]=term;
b--;
} else
{
b--;
}}


Insertion Sort (Sisip) meripakan metode pengurutan dengan cara menyisipkan nilai pada array pada posisi yang tepat. Untuk lebih jelasnya silakan lihat code dibawah ini.

for (k=1; k<9; k++)
{
term=L[k];
j=k-1;
while (term<=L[j])
{
L[j+1]=L[j];
j--;
}
if ((term >= L[j]) || (j=1))
{
L[j+1]=term;
}
else
{
L[j+1]=L[j];
L[j]=term;
}
}


5.2 sorting by selection

algoritmanya{}
Selection Sort
Algoritma ini mudah diterjemahkan ke dalam program computer tetapi memiliki kekurangan yaitu sort dengan menggunakan metode Seleksi membutuhkan ruang di memori untuk meyimpan 2 daftar lengkap.
Jika memiliki satu daftar nama dan meletakkan dalam urutan berdasarkan huruf bisa menggunakan pemdekatan umum sebagai berikut :
1. Temukan atau cari nama yang pertama kali datang dalam urutan huruf dan tulis di sheet kedua
2. Tandai nama yang keluar dari daftar asli
3. Lanjutkan perputaran ini sampai semua nama di daftar semula telah di coret dan ditulis di daftar kedua dimana di bagian daftar yang kedua ini nama-nama sudah terurut berdasarkan huruf

C++ :

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

int data[100],data2[100];
int n;

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

void bubble_sort()
{
for(int i=1;i<n;i++)
{
for(int j=n-1;j>=i;j–)
{
if(data[j]<data[j-1]) tukar(j,j-1);
}
}
cout<<”bubble sort selesai!”<<endl;
}

void exchange_sort()
{
for (int i=0; i<n-1; i++)
{
for(int j = (i+1); j<n; j++)
{
if (data [i] > data[j]) tukar(i,j);
}
}
cout<<”exchange sort selesai!”<<endl;
}

void selection_sort()
{
int pos,i,j;
for(i=0;i<n-1;i++)
{
pos = i;
for(j = i+1;j<n;j++)
{
if(data[j] < data[pos]) pos = j;
}
if(pos != i) tukar(pos,i);
}
cout<<”selection sort selesai!”<<endl;
}

void insertion_sort()
{
int temp,i,j;
for(i=1;i<n;i++)
{
temp = data[i];
j = i -1;
while(data[j]>temp && j>=0)
{
data[j+1] = data[j];
j–;
}
data[j+1] = temp;
}
cout<<”insertion sort selesai!”<<endl;
}

void QuickSort(int L, int R)
{
int i, j;
int mid;

i = L;
j = R;
mid = data[(L+R) / 2];

do
{
while (data[i] < mid) i++;
while (data[j] > mid) j–;

if (i <= j)
{
tukar(i,j);
i++;
j–;
};
} while (i < j);

if (L < j) QuickSort(L, j);
if (i < R) QuickSort(i, R);
}

void Input()
{
cout<<”Masukkan jumlah data = “; cin>>n;
for(int i=0;i<n;i++)
{
cout<<”Masukkan data ke-”<<(i+1)<<” = “; cin>>data[i];
data2[i] = data[i];
}
}

void Tampil()
{
cout<<”Data : “<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<” “;
}
cout<<endl;
}

void AcakLagi()
{
for(int i=0;i<n;i++)
{
data[i] = data2[i];
}
cout<<”Data sudah teracak!”<<endl;
}

void main()
{
int pil;
clrscr();
do
{
clrscr();
cout<<”Program Sorting Komplit!!!”<<endl;
cout<<”*********************************************”<<endl;
cout<<” 1. Input Data”<<endl;
cout<<” 2. Bubble Sort”<<endl;
cout<<” 3. Exchange Sort”<<endl;
cout<<” 4. Selection Sort”<<endl;
cout<<” 5. Insertion Sort”<<endl;
cout<<” 6. Quick Sort”<<endl;
cout<<” 7. Tampilkan Data”<<endl;
cout<<” 8. Acak Data”<<endl;
cout<<” 9. Exit”<<endl;
cout<<” Pilihan Anda = “; cin>>pil;
switch(pil)
{
case 1:Input(); break;
case 2:bubble_sort(); break;
case 3:exchange_sort(); break;
case 4:selection_sort(); break;
case 5:insertion_sort(); break;
case 6:QuickSort(0,n-1);
cout<<”quick sort selesai!”<<endl;
break;
case 7:Tampil(); break;
case 8:AcakLagi(); break;
}
getch();
}while(pil!=9);
}


5.1 the two way merge

algoritma {
}
if a[m]<b[n] then a[m+1]:=b[n+1]:=a[m];
i:=1;
j:=1;
nm:= n+m;
for k:= 1 to nm dobegin {merge next element }
if a[i]<b[j] thenbeginc[k]:=a[i];
i:=i+1end elsebeginc[k]:=b[j];
j:=j+1end
end

C++ :

#include <iostream>

int data[100];

void mergeSort(int awal, int mid, int akhir)
{
cout<<endl;
int temp[100], tempAwal = awal, tempMid = mid, i = 0;
while(tempAwal < mid && tempMid < akhir)
{
if(data[tempAwal] < data[tempMid])
temp[i] = data[tempAwal],tempAwal++;
else
temp[i] = data[tempMid],tempMid++;
i++;
}
while(tempAwal < mid)
temp[i] = data[tempAwal],tempAwal++,i++;
while(tempMid < akhir)
temp[i] = data[tempMid],tempMid++,i++;
for(int j=0,k=awal;j<i,k<akhir;j++,k++);
cout<<data[k]<<' '<<temp[j]<<endl, data[k] = temp[j];
}


void merge(int awal, int akhir)
if(akhir-awal != 1)
{
int mid = (awal+akhir)/2;
merge(awal, mid);
merge(mid, akhir);
mergeSort(awal, mid, akhir);
}}

int main()
{
int n;
cout<<"Masukan banya data = ";cin>>n;
cout<<"Masukan data yang akan di susun = ";
for(int i=0;i<n;i++)
cin>>data[i];
merge(0,n);
for(int i=0;i<n;i++)
cout<<data[i]<<' ';
return 0;
}

TUGAS Ebook ALPRO MINGGU 4

4.1 array order reversal
soal
mengatur ulang elemen dalam array sehingga muncul urutan terbaik

deskripsi :
1. membangun sebuah array a[a....n] dari n elemen yang akan dilindungi
2. menghitung r jumlah pertukaran yang diperlukan untuk memesan array
3. sementara masih ada pasang elemen array untuk ditukar
(a) menukar elemen i dengan elemen [n-i + 1]
4. mengembalikan array dilindungi undang-undang

4.2 array counting or histogramming

soal
diberi satu set sebuah tanda ujian siswa (dalam kisaran 0 hingga 100) membuat hitungan jumlah siswa yang mungkin diperoleh masing-masing tanda

deskripsi :
1. meminta dan membaca jumlah n tanda untuk diproses
2. memberi inisial semua elemen yang akan di hitung array [0...100]
3. sementara masih ada yang akan di peroses, untuk melakukan perulangan
(a) membaca tanda berikutnya m
(b) menambahkan 1 perhitungan di lokasi m didalam array
4. tuliskan output nilai frekuensi perhitungan


4.3 finding the maximum number in a set

soal
menemukan nilai maksimun a dari nilai n

deskripsi :
1. membangun sebuah array a[1....n] dimana elemen n>=1
2. berikan nilai maksimum sementara max untuk elemen pertama array
3. sementara kurang dari n elemen array telah di anggap
(a) jika elemen selanjutnya elemen maksimum max maka itu nilai maksimun
4. menuliskan nilai maksimum dari n elemen array

4.4 removal of duplicates from an ordered array

soal
menghapus semua duplikat dari perintah array

deskripsi :
1. membangun array a[1 ... n] dari elemen n
2. mengatur indeks pengulangan i=2 untuk memungkinkan terminasi yang benar
3. membandingkan pasangan berurutan dari elemen sehingga duplikat ditemui kemudian menetapkan elemen tertinggi penhitungan j
4. sementara semua pasangan belum diperiksa lakukan
(a) jika pasangan selanjutnya tidak duplikasi lakukan
(a.1) tambahkan 1 perhitungan element tertinggi j
(a.2) kemudian pindahkan elemen dari pasangan ke posisi array tentukan dari elemen perhitungan array tertinggi.

4.5 partitioning an array

soal
diberikan perintah array dalam bentuk acak dari n elemen. mambagi elemen menjadi
dua bagian sedemikian rupa sehingga elemen <= x berada di salah satu bagian dalam
elemen >x berada di bagian.

deskripsi:
1. membangun array a[1 ... n] dan nilai pembagi dari x.
2. pindahkan 2 pembagi terhadap satu sama lain sampai sepasang salah ditempatkan elemen dalam perhitungan memungkinkan untuk kasus-kasus khusus x berada di luar kisaran nilai array
3. sedangkan jika dua perhitungan belum pernah bertemu atau menyeberang melakukan
(a) bertukar pasangan yang salah perhitungan dan memperpanjang kedua perhitungan ke dalam oleh salah satu elemen
(b) memperpanjang partisi kiri sementara elemen kurang dari atau sama dengan x
(c) memperpanjang partisi yang benar sementara elemen lebih besar dari x
4. tampilkan perhitungan indeks p and perhitungan array

4.7 longest monotone subsequence

soal
{given a set of n distinct numbers find the length of the longest monotoneincreasing subsequence}
diberi satu set n nomor yang berbeda menemukan panjang monoton terpanjang meningkatkan subsequence

desskripsi :
1. membangun array a[1 ... n] dari elemen n
2. mengatur kondisi awal untuk subsequence mengakhiri di posisi pertama
3. untuk sisa (n-1) posisi array lakukan
(a) jika elemen saat ini kurang maksimal di set terpanjang sebelumnya kemudian
(a.1) mencari posisi dan nilai maksimum antara pendahulu
(a.2) memperbarui posisi dan panjang maksimum jika diperlukan jika tidak
Update posisi panjang lain dari maksimum dan panjang maksimum terjauh
4. tampilkan panjang tetap terpanjangdari subsequen