Jumat, 23 November 2012

LTM LOGIKA PERTEMUAN 12


1.       Jelaskan 5 manfaat penggunaan metode Greedy?
Jawaban:
1.       Mendapatkan solusi yang optimal dari permasalahan
2.       Optimal on tape storage problem
3.       Knapsack problem
4.       Minimum spanning tree problem
5.       Shortest path problem

2.       Terdapat  7 buah program (N=7) yang masing-masing mempunyai panjang program (L1=10, L2=3, L3=9, L4=12, L5=20, L6=7, L7=11), dengan metode Optimal  Storage Ontapes Problem. Tentukan order yang paling optimal?
Jawaban:
2314567 = 3 + (3+9) + (3+9+10) + (3+9+10+12) + (3+9+10+12+20) + (3+9+10+12+20+7) +
                     (3+9+10+12+20+7+11) = 258

3.       Terdapat sebuah truk dengan kapasitas 80 ton. Akan memuat 3 buah barang masing masing adalah gula pasir 50 ton dengan harga 100 juta, gula merah 60 ton dengan harga 80  juta dan gula batu 70 ton dengan harga 90 juta. Dengan metode Greedy tentukan barang apa saja yang dimuat truk dengan harga yang paling mahal?
Jawaban:
Kapasitas ransel = 80 ton
Banyak barang =  3
Berat (W)
W1, W2, W = 50, 60, 70
Profit (P)
P1, P2, P3 = 100, 80, 90
Tentukan  barang apa saja yang dimuat ditruk dengan harga yang paling mahal!
Jawab :
P= 100                (80-50)=30          X= 1                     (50.1) + (60.0) + (70.30/70) =      
p= 80                                   X3 = 0                       50   +     0    +         30        =  80  Pi Maximal
P= 90 (30/70)                   X= 30/70

W= 50 (80-50) =30         X1 = 1                    
W= 60 (30/60) = 1/2     X2 = 1/2                Wi Minimum
W= 70                                 X= 0

100/50 = 2 (80-50)=30                     X= 1
80/60 = 4/3 (30/60) = 1/2              X2 = 1/2                               Pi . Wi
90/70 = 1,29                                        X= 0

Pi.∑Xi
(100.1) + (80.0) + (90.30/70) = 100 + 0 + 38,5 = 138,5
(50.1) + (60.1/2) + (70.0) = 50 + 30 + 0 = 80
(100.1) + (80.1/2) + (90.0) = 100 + 40 + 0 = 140

4.      Dalam metode greedy jelaskan apa yang menjadi fungsi tujuan dan fungsi pembatas?
Jawaban:
          Fungsi tujuan       = fungsi yang menjadi penyelesaian permasalahan dengan mendapatkan solusi yang optimal.
                Fungsi pembatas = memberikan batas maksimal dari setiap obyek untuk dapat dimuat sehingga kapasitasnya tidak melebihi dari jumlah maksimal daya tampung.

LTM LOGIKA PERT 10


1.       Jelaskan pengertian Device and Conquer serta tujuannya?
Jawabannya:
Algoritma Divide and Conquer merupakan algoritma yang sangat popular di dunia Ilmu Komputer. Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah permasalahan yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah untuk diselesaikan.
Divide         :  membagi masalah menjadi beberapa masalah yang memiliki kemiripan dengan      
                    masalah semula namun berukuran lebih kecil (idealnya berukuran hampir sama),
Conquer    :  memecahkan (menyelesaikan) masing-masing masalah (secara  rekursif), dan
Combine    :  mengabungkan solusi masing-masing masalah sehingga membentuk solusi masalah   
                       semula. 

2.       Sebutkan algoritma metode sorting!
a.       Selection Sort
b.      Bubble Sort
c.       Merge Sort
d.      Quick Sort
e.      Insertion Sort
Jawabannya:
a.       #include<constrea.h>
#include<stdio.h>
void tampilkan_larik(int data[],int n)
{
int i;
for(i=0;i<n;i++)
cout<<data[i]<<" ";
cout<<endl<<endl;
}
void selection_sort(int data[],int n)
{
int posmin,posawal,j,tmp;
for(posawal=0;posawal<n-1;posawal++)
{
posmin=posawal;
for(j=posawal+1;j<n;j++)
if(data[posmin]>data[j])
posmin=j;

//tukarkan
tmp=data[posawal];
data[posawal]=data[posmin];
data [posmin]=tmp;
cout<<"\nHasil Ketika Posawal = "<<posawal<<":";
tampilkan_larik(data,n);
}
}

//global
int main()
{
int data[50],i,n;
cout<<"\n@Simulasi Selection Sort@\n\n\n";
cout<<"==================================\n";
cout<<"       Masukkan Banyak Data : ";cin>>n;
clrscr();
for(int a=0;a<n;a++)
{cout<<"\nMasukkan Data Ke "<<a<<":";cin>>data[a];}
selection_sort(data,n);

//hasil pengurutan
cout<<"\n\nHasil Pengurutan : \n\n";
cout<<" ";tampilkan_larik(data,n);
cout<<"\nSorting Selesai....";
getch();
}

b.      #include<constrea.h>
#include<stdio.h>
int data[10],data2[10];
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;j>=i;j--)
{
if(data[j]<data[j-i])tukar(j,j-i);
}
}
}
void main()
{
cout<<"===Program Bubble Sort==="<<endl;
//input data
cout<<"Masukkan Jumlah Data : ";cin>>n;
for(int i=1;i<n;i++)
{
cout<<"\nMasukkan Data Ke "<<i<<":";cin>>data[i];
data2[i]=data[i];
}
bubble_sort();
cout<<"\n\n";

//tampilkan data
cout<<"Data setelah di sort : ";
for(int i=1;i<=n;i++)
{
cout<<" "<<data[i];
}
cout<<"\nSorting Selesai....";
getch();
}

c.       #include<constrea.h>
//using namespace std
void merge(int low,int id,int up);
void mergeSort(int low,int up);
int a[50];
int main()
{
int jumlahBil,i;
cout<<"Masukkan Jumlah Elemen Array"<<endl;cin>>jumlahBil;
for(int i=0;i<jumlahBil;i++)
{
cout<<"Bilangan Ke - "<<i+1<<endl;cin>>a[i];
}
mergeSort(1,jumlahBil);
for(i=1;i<=jumlahBil;i++)
cout<<a[i]<<"   ";
cout<<endl;
getch();
}

void merge(int low,int mid,int up)
{
int h,i,j,k;
int b[50];
h=low;
i=low;
j=mid+1;
while((h<=mid)&&(j<=up))
{
if(a[h]<a[j])
{
b[i]=a[h];h++;
}
else
{
b[i]=a[j];
j++;
}
i++;
}
if(h>mid)
{
for(k=j;k<=up;k++)
{b[i]=a[k];i++;}
}
else
{for(k=h;k<=mid;k++)
{b[i]=a[k];i++;}
}
for(k=low;k<=up;k++)a[k]=b[k];
}

void mergeSort(int low,int up)
{
int mid;
if(low<up)
{
mid=(low+up)/2;
mergeSort(low,mid);
mergeSort(mid+1,up);
merge(low,mid,up);
}
}

d.      #include<constrea>
#define max 30

void quick_sort(int darr[max],int lb,int ub)
{
int a,up,down,temp;
if(lb>=ub)
return;
a=darr[lb];
up=ub;
down=lb;
while(down<up)
{
while(darr[down]<=a)
down++;
while(darr[up]>a)
up--;
if(down<up)
{
temp=darr[down];
darr[down]=darr[up];
darr[up]=temp;
}}
darr[lb]=darr[up];
darr[up]=a;
quick_sort(darr,lb,up-1);
quick_sort(darr,up+1,ub);
}
main()
{
int arr[max],i,n,lb,ub;
lb=0;
cout<<"masukkan banyak data yang ingin diurut = ";cin>>n;
ub=n;
cout<<"masukkan data-datanya :\n\n";
for(i=1;i<=n;i++)
{
cout<<"data ke-"<<i<<" : ";cin>>arr[i];
}
quick_sort(arr,lb,ub);
cout<<"\nhasil pengurutan data :";
for(i=1;i<=n;i++)
cout<<"  "<<arr[i];
getch();
}

e.      #include<constrea.h>

int data[10],data2[10];
int n;
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;
}
}

void main()
{
cout<<"===Program Insertion Sort==="<<endl;
//input data
cout<<"Masukkan jumlah data : ";cin>>n;
for(int i=1;i<n;i++)
{
cout<<"Masukkan data ke "<<i<<":";cin>>data[i];
data2[i]=data[i];
}

insertion_sort();
cout<<"\n\n";
//tampilkan data
cout<<"\nData setelah di sort : ";
{
for(int i=1;i<=n;i++)
cout<<" "<<data[i];
}
cout<<"\n\nsorting selesai";
getch();
}

3.       Terdapat deret angka : 99, 34, 11, 50, 23, 89, 65, 2, 6, 37, 74, 44.
Urutkan dengan seluruh teknik sorting yang ada!
Jawaban:
a.       Selection sort
b.      Bubble Sort

c. Merge Sort

a.  Quick Sort

b. Insertion sort

4.      Terdapat deret angka : 12, 45, 10, 55, 32, 81, 59, 21, 16, 71, 40, 90
Urutkan dengan seluruh teknik sorting yang ada!
Jawaban:
a.       Selection Sort

b.      Bubble Sort

c.       Merge Sort

d.      Quick Sort

e.      Insertion Sort

Senin, 19 November 2012

LTM LOGIKA PERTEMUAN 5


1. Jelaskan pengertian Statemen dibawah ini :

a. WHILE . . .
            Suatu Perulangan akan terus dilaksanakan selama syarat tersebut terpenuhi.
b. Do . . . . While
            Suatu Perulangan akan dilaksanakan terlebih dahulu dan pengujian  perulangan dilakukan belakangan.
c. FOR seperti statemen FOR Positif, Negatif, dan FOR bersarang
            For positif Merupakan program untuk mencetak bilangan dari 1 hingga 10 secara menaik dan menampilkan bilangan ganjil.
            For Negatif Merupakan program untuk mencetak bilangan dari 1 hingga 10 secara menurun dan menampilkan bilangan ganjil.
            For Bersarang Merupakan suatu perulangan for didalam perulangan for yang lainnya.

2. Dari soal No.1 Buat masing-masing satu contoh algoritma dan flowchartnya
a. While

Contoh algoritma:
1. Tentukan nilai awal
2. Lakukan proses pengulangan selama i>0
3. Cetak bilangan
4. Ulangi langkah 2 sampai batas akhir

Contoh Flowchart:
/* ------------------- */
/* Program while */
/* ------------------- */
#include <stdio.h>
#include <conio.h>
main( )
{
int bil=1;
clrscr( );
while(bil<=10)
{
printf(" %d ",bil);
++bil;
}
getch( );
}

Output yang akan dihasilkan 1 2 3 4 5 6 7 8  9 10




b. Do...While

Contoh Algoritma:
1. Tentukan nilai awal perhitungan = 0
2. Lakukan pengulangan
3. Cetak tulisan
4. Nilai perhitungan bertambah 2
5. Ulangi langkah 3 sampai nilai perhitungan <5

Contoh Flowchart:
/* ------------------ */
/* Program do - while */
/* ------------------ */
#include <stdio.h>
#include <conio.h>
main( )
{
int bil=2;
clrscr( );
do
{
printf(" %d ",bil);
bil+=2;
}
while(bil<=10);
getch( );
}
Output yang akan dihasilkan 2 4 6 8 10

c. (For positif)

Contoh Algoritma:
Sebagai contoh program untuk mencetak bilangan dari 1 hingga 10 secara menaik  sebagai berikut:
-Tentukan nilai aawal
-Lakukan proses pengulangan selama a>0
-Cetak bilangan
-ulangi langkah selanjutnya sampai batas akhir

Contoh flowchart:
/* --------------------------- */
/* Program for - bilangan naik */
/* --------------------------- */
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int a;
clrscr( );
for(a = 1; a <= 10; ++a)
cout>>a;
getch( );
}

Output yang akan dihasilkan 1 2 3 4 5 6 7 8 9 10

(For Negatif)

Contoh Algoritma:
Sebagai contoh program untuk mencetak bilangan dari 10 hingga 1 secara menurun sebagai  berikut:
-Tentukan nilai awal
-Lakukan proses pengulangan selama a<10
-Cetak bilangan
-ulangi langkah selanjutnya sampai batas akhir

Contoh Flowchart:
/* ---------------------------- */
/* Program for - bilangan turun */
/* ---------------------------- */
# include <stdio.h>
# include <conio.h>
#include<iostream.h>
main( )
{
int a;
clrscr( );
for(a = 10; a >= 1; --a)
cout<<a;
getch( );
}

Output yang akan dihasilkan 10 9 8 7 6 5 4 3 2 1

(For bersarang)
Contoh Algoritma:
-Tentukan nilai awal perhitungan = 0
-Lakukan pengulangan
-Cetak hasil
-Lakukan pengulangan kembali
-Cetak hasil
-Nilai perhitungan bertambah 1
-Ulangi langkah selanjutnya sampai perhitungan<5

Contoh Flowchart:
/* ------------------------- */
/* Program for - Nested for */
/* ------------------------- */
#include<stdio.h>
#include<conio.h>
main( )
{
int a, b;
clrscr( );
for(a = 1; a <= 5; a++)
{
printf("\n");
for(b = a; b <= 5; b++)
printf(" %d ",a);
}
getch();
}
Output yang akan dihasilkan:
1 1 1 1 1
2 2 2 2
3 3 3
4 4
5

3. Dengan menggunakan perintah Do… While. Buatlah contoh algoritma dan Flowchart nested  loopnya !!

Contoh Algoritma:
-TenTukan nilai awal batas akhir dan bertambah nilai
-Lakukan pengulangan sesuai dengan langkah 1
-Jika dalam pengulangan bilangan yang ditampilkan sama dengan 4, maka pengulangan berhenti dan dilanjutkan ke bilangan selanjutnya
-Cetak bilangan
-Jika dalam pengulangan bilangan yang akan ditampilkan sama dengan 6, maka pengulangan di hentikan

     
Contoh Flowchart:
/* ------------------------------- */
/* Program do - while dengan break */
/* ------------------------------- */
#include <stdio.h>
#include <conio.h>
main( )
{
int bil = 1;
clrscr( );
do
{
if (bil >= 6)
break;
printf(" %d ",bil);
}
while(bil++);
getch( );
}

Output yang akan dihasilkan 1 2 3 4 5

4. Dengan Perintah For …,, buatlah algoritma dan Flowchart Nested Loop!!

Contoh Algoritma:
-TenTukan nilai awal batas akhir dan bertambah nilai
-Lakukan pengulangan sesuai dengan langkah 1
-Jika dalam pengulangan bilangan yang ditampilkan sama dengan 4, maka pengulangan berhenti dan dilanjutkan ke bilangan selanjutnya
-Cetak bilangan
-Jika dalam pengulangan bilangan yang akan ditampilkan sama dengan 6, maka pengulangan di hentikan

Contoh Flowchart:
#include <stdio.h>
#include <conio.h>
main ()
{int i;
      for (i=0; i<10; ++i)
      { if (i==4) continue ;
        Printf (“bilangan :%d\n”,i);
        If (i==6)break;
      }getch ();
}
Output program;
Bilangan : 0
Bilangan : 1
Bilangan : 2
Bilangan : 3
Bilangan ; 5
Bilangan : 6