Sabtu, 22 Oktober 2016

TUGAS 3 Deret dan Algoritma Shell Sort

TUGAS 3
Deret & Algotirma Shell Sort
Oleh
Rinaldi
FAKULTAS TEKNOLOGI & INFORMASI KOMPUTER
                                                  UNIVERSITAS PRIMA INDONESIA
1. Deret
Deret adalah jumlah dari elemen-elemen dalam suatu urutan Urutan dan deret finit(atau terhingga) mempunyai elemen pertama dan terakhir yang terdefinisi, sedangkan Urutan dan deret infinit (atau tak terhingga) berlangsung terus menerus tak terbatas.
Dalam matematika, jika ada suatu urutan bilangan infinite { an }, maka suatu deret secara informal adalah hasil dari penambahan semua elemen-elemen itu bersama-sama: a1 + a2 + a3 + · · ·. Ini dapat ditulis lebih singkat menggunakan simbol summation ∑. Contohnya adalah deret terkenal dari Paradoks Zeno dan representasi matematikanya:
Elemen-elemen dalam suatu deret sering diproduksi menurut kaidah tertentu, misalnya dengan suatu rumus, atau melalui suatualgoritme. Mengingat tidak terbatasnya jumlah elemen, hasilnya sering disebut deret tak terhingga (infinite series). Berbeda dengan finite summations, deret tak terhingga membutuhkan bantuan dari analisis matematika, dan secara khusus limit, untuk dapat dipahami dan dimanipulasi secara penuh. Selain jumlahnya yang banyak dalam matematika, deret tak terhingga juga sering digunakan dalam bidang-bidang kuantitatif lain seperti fisika, sains komputer, dan finansial.
Deret bilangan yaitu jumlah dari suku – suku dari suatu barisan .
Jika U1 , U2 , U3 , U4 , . . . .Disebut dengan barisan bilangan , maka bentuk deret bilangan adalah U1 + U2 + U3 +…
Contoh :
3 + 7 + 11 + 15 + . . .
Macam – macam deret bilangan yaitu :
  • Deret bilangan aritmatika
  • Deret bilangan geometri
B. Definisi Deret bilangan aritmatika dan deret bilangan geometri 
1. Deret Bilangan Aritmatika 
Deret aritmatika , yaitu suatu jumlah dari suku – suku barisan bilangan aritmatika .
Jika a , a+b , a+2b , a+3b , a+4b , . . . .a+(n-1)b adalah barisan bilangan aritmatika maka bentuk dari deret aritmatika adalah a+ (a+b) + ( a+2b) + (a+3b) + (a+4b) + . . . .
Rumus Jumlah deret aritmatika suku ke n  adalah :
Sn = 1/2  n ( a+ Un )  atau Sn = 1/2n [ 2a + ( n – 1 ) b ] 
Keterangan :
Sn = jumlah suku ke n
n = Banyaknya suku
b = rasio atau beda
Contoh soal :
  1. 4 + 9 + 14 + 19 + . . .
Dari deret bilangan diatas , tentukan S30 = . . ?
Penyelesaian :
Diketahui : a = 4 , b = 5
Un = a + ( n – 1 ) b
U30 = 4 + ( 30 -1 ) 5
= 4 + 29.5
= 4 + 145
= 149
maka , S30 adalah :
Sn = 1/2  n ( a+ Un )
S30 = 1/2 . 30 ( 4 + 149 )
= 15 x 153
= 2295
2. Tentukan nilai n dan sn dari deret aritmatika dibawah ini :
3 + 7 + 11 + 15 + . . .+ 199
Penyelesaian :
Diketahui : a = 3 , b = 4
Ditanya :
a.) n = . . .
b.) Sn = . . .
Jawab :
a.) Un = a + ( n -1 ) b
199 = 3 + ( n – 1 ) 4
199 = 3 + 4n -4
199 = -1 + 4n
200 = 4n
50 = n
b.) Sn = 1/2  n ( a+ Un )
S50 = 1/2 .50 ( 3 + 199 )
= 25 ( 202 )
= 5050
3. Tentukan Sn , dari deret aritmatika berikut :
1 + 5 + 9 + 13 + . . . + U10
Penyelesaian :
Diketahui :
a = 1 , b = 4 , n = 10
Ditanya : Sn = . . . ?
Jawab :
Sn = 1/2n [ 2a + ( n – 1 ) b ]
S10 = 1/2.10 [ 2.1 + ( 10 – 1 ) 4 ]
= 5 [ 2 + 9.4 ]
= 5 ( 2 + 36 )
= 190
2. Deret Bilangan Geometri 
Deret bilangan geometri , yaitu jumlah dari barisan bilangan geometri .
Jika bentuk barisan bilangan geometri adalah  a , a.r , a.r2 , a.r3 , a.r4 , a.r5  . . . . a.rn-1 maka bentuk dari deret bilangan geometri adalah  a + a.r + a.r2 + a.r3 + a.r4 + a.r5  . . . .a.rn-1
Jumlah n suku pertama dari deret geometri atau yang dilambangkan dengan Sn , adalah :
Sn = a + a.r + a.r2 + a.r3 + a.r4 + a.r5  . . . .a.rn-1
Apabila rumus di atas kita kalikan dengan r . maka akan menghasilkan rums sebagai berikut :
rSn =   a.r + a.r2 + a.r3 + a.r4 + a.r5  + a.r6. . . .a.rn-1  a.rn
Dari kedua persamaan diatas , kita kurangkan maka akan dihasilkan sebagai beriikut :
Sn = a + a.r + a.r2 + a.r3 + a.r4 + a.r5  . . . .a.rn-1
rSn =   a.r + a.r2 + a.r3 + a.r4 + a.r5  + a.r6. . . .a.rn-1  a.rn
                                                                                                                                    _
Sn – rSn = a –  a.rn
Sn ( 1 – r ) = a ( 1 – r)
Sn =  a – a r / 1 – r
Sn = a ( 1 – r) / ( 1 – r )
Jadi , dapat kita simpulkan bahwa , rumus jumlah n suku pertama dalam deret geometri adalah :
Sn = a – a r / 1 – r atau Sn = a ( 1 – rn) / 1 – r  , dengan r  ≠ 1
Untuk lebih jelasnya lagi , maka perhatikan contoh – contoh soal di bawah ini :
1. Diketahui sebuah deret geoetri , dimana U3 = 18 , dan U6 = 486 . Tentukan :
a.) a dan r
b.) S10
Penyelesaian :
a.) U6 = 486 –> a.r 5= 486
 U3      =     18  –>  a.r2  = 18
U6 / U3 = 486 / 18   —–>  a.r 5 /   a.r2  =  486 / 18
                                                     r= 27
                                                      r = 3
a.r2  = 18   
a.32  = 18
a.9 = 18
a = 2
b.) Sn = a ( 1 – rn ) / 1 – r
S10 = 2 ( 1 – 310 ) / ( 1 – 3 )
S10 = 2 ( -59048  ) / ( -2 )
S10 = 59048
2. Perhatikan deret bilangan geometri berikut:
2 + 6 + 18 + 54 + . . . . .+ 1458 , tentukan Sn !
Penyelesaian :
Diketahui : a = 2 dan r = 3
Jawab :
Langkah pertama mencari n terlebih dahulu , yaitu dengan cara :
Un = a.rn-1
1458  = 2 . 3n-1
1458 /2 = 3n-1
729 = 3n-1
3= 3n-1
n – 1 = 6
n = 7
Selanjutnya , tinggal masukkan ke dalam rumus :
Sn = a ( 1 – rn ) / 1 – r
S7 = 2 ( 1- 3) / 1- 3
S7 = 2 ( 1-2187 ) / -2
S7 = 2187

2. Algoritma Shell Sort
Metode ini disebut juga dengan metode pertambahan menurun (diminishing increment). Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959, sehingga sering disebut dengan Metode Shell Sort. Metode ini mengurutkan data dengan cara membandingkan suatu data dengan data lain yang memiliki jarak tertentu, kemudian dilakukan penukaran bila diperlukan. Proses pengurutan dengan metode Shell dapat dijelaskan sebagai berikut : 
Pertama-tama adalah menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu N / 2. Data pertama dibandingkan dengan data dengan jarak N / 2. Apabila data pertama lebih besar dari data ke N / 2 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu N / 2. Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-j selalu lebih kecil daripada data ke-(j + N / 2).


Pada proses berikutnya, digunakan jarak (N / 2) / 2 atau N / 4. Data pertama dibandingkan dengan data dengan jarak N / 4. Apabila data pertama lebih besar dari data ke N / 4 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu N / 4. Demikianlah seterusnya hingga seluruh data dibandingkan sehingga semua data ke-j lebih kecil daripada data ke-(j + N / 4).

Pada proses berikutnya, digunakan jarak (N / 4) / 2 atau N / 8. Demikian seterusnya sampai jarak yang digunakan adalah 1.

Step-by-step visualisation of Shellsort

Algoritma metode Shell dapat dituliskan sebagai berikut :

1. Jarak = N
2. Selama (Jarak > 1) kerjakan baris 3 sampai dengan 9
3. Jarak = Jarak / 2. Sudah = false
4. Kerjakan baris 4 sampai dengan 8 selama Sudah = false
5. Sudah = true
6. j = 0
7. Selama (j < N – Jarak) kerjakan baris 8 dan 9
8. Jika (Data[j] > Data[j + Jarak] maka tukar Data[j],
   Data[j + Jarak].
   Sudah = true
9. j = j + 1

Berikut coding dalam C++

#include <stdio.h>
#include <conio.h>

void printarray(int arr[100], int n);
void shellsort(int arr[100], int n);

int main()
{
int arr[100],n;
printf(" SHELL SORT \n");
shellsort(arr,n);
getch();
}

void printarray(int arr[100], int n)
{
int i;
printf("\nArray : [ ");
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
printf("]\n");
}
void shellsort(int arr[100], int n)
{
int i,j,k,temp;
printf(" Masukkan Banyak Elemen : "); scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("\nMasukkan elemen ke-%d : ",i+1);
scanf("%d",&arr[i]);
}
printf("\nArray sebelum terurut : [ ");
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
printf("]\n");
for(i=n/2; i>0; i=i/2)
{
for(j=i; j<n; j++)
{
for(k=j-i; k>=0; k=k-i)
{
if(arr[k+i]>=arr[k])
{
break;
}
else
{
temp=arr[k];
arr[k]=arr[k+i];
arr[k+i]=temp;
}
printarray(arr,n);
}
}
}
printf("\nArray setelelah terurut : \n");
for(i=0;i<n;i++)
{
printf("%d\t",arr[i]);
}

}

-Waktu terbaik dalam algoritma shellsort yaitu N/2
-Waktu terburuk dalam algoritma shellsort yaitu N/n
N = banyaknya angka yang ingin di sort
n  = N/2




Sabtu, 15 Oktober 2016

TUGAS 2: Kompleksitas Algoritma

TUGAS 2
Kompleksitas Algoritma
Oleh
Rinaldi
FAKULTAS TEKNOLOGI & INFORMASI KOMPUTER
                                                  UNIVERSITAS PRIMA INDONESIA
Soal: 
 
Hitung kompleksitas waktu algoritma berikut berdasarkan jumlah operasi kali. 
Procedure MinMaks1 (input A : TabelInt, n : integer, output min, maks : integer)
( Mencari nilai minimum dan maksimum di dalam tabel A yang berukuran n elemen, secara brute force.
Masukan : tabel A yang sudah terdefinisi elemen-elemennya
Keluaran: nilai maksimum dan nilai minimum tabel)

Deklarasi:
i : integer

Algoritma:
min ← Ai  ( inisialisasi nilai minimum )
maks ← Ai  (inisialisasi nilai maksimum )
for i ←2 to n do

  if Ai  < min then
   min ← Ai
  endif

  if Ai  > maks then
   maks ← Ai
  endif

endfor
 
Hitung Kompleksitas Waktu Asimptotik. T(n) dari algorithma tersebut diatas
 
Jawaban:
-Kondisi yang diketahui bahwa n > 2
Contoh 
Jika n = 100 maka akan dilakukan sistem bruteforce untuk mencari bilangan terkecil dan tebesar antara 2 sampai 100.
maka codingnya:
Menggunakan pascal:

program MinMax;
uses crt;

var A : array[2..100] of integer;
var n  : integer;
var min, maks : integer;
var i : integer;

begin
<clrscr>;

maks :- A[1];

write<'masukkan jumlah :'>;readIn<n>;
for i :-2 to n do
begin
A[i]:=random<10>;
write<A[i],' '>;
<readln<x[i]>;>
end;

begin
if A[i] < min then
min:=A[i];
end;

begin
min :- a[2];
if A[i] > maks then
maks:-A[i];
end;

writeln;
writeln<'max =',maks>;
writeln<'min =',min>;

end.

Hasil :

Masukkan Jumlah : 4 (misal)
9 10 12 15
max = 15
min = 9
maka bilangan Ai Maks adalah 15 dan Ai Min adalah 9
 Kompleksitas Waktu Asimptotik 
T(n) = (n – 1) + (n – 1) = 2n – 2  = O(n)

 


Kamis, 06 Oktober 2016

OOP VS Modular

OOP VS MODULAR
Oleh
Rinaldi
FAKULTAS TEKNOLOGI & INFORMASI KOMPUTER
                                                  UNIVERSITAS PRIMA INDONESIA

AI. Pengertian OOP (Object Oriented Programming) 
OOP (Object Oriented Programming) adalah suatu metode pemrograman yang berorientasi kepada objek. Tujuan dari OOP diciptakan adalah untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada di kehidupan sehari-hari. Jadi setiap bagian dari suatu permasalahan adalah objek, nah objek itu sendiri merupakan gabungan dari beberapa objek yang lebih kecil lagi. Saya ambil contoh Pesawat, Pesawat adalah sebuah objek. Pesawat itu sendiri terbentuk dari beberapa objek yang lebih kecil lagi seperti mesin, roda, baling-baling, kursi, dll. Pesawat sebagai objek yang terbentuk dari objek-objek yang lebih kecil saling berhubungan, berinteraksi, berkomunikasi dan saling mengirim pesan kepada objek-objek yang lainnya. Begitu juga dengan program, sebuah objek yang besar dibentuk dari beberapa objek yang lebih kecil, objek-objek itu saling berkomunikasi, dan saling berkirim pesan kepada objek yang lain.
BI. Konsep OOP (Object Oriented Programming) 
1. Kelas Abstrak (Class Abstraksi)
2. Enkapsulasi (encapsulation)
3. Pewarisan (Inheritance)
4. Polimorfisme (polymorphism)
1. Kelas Abstrak (Class Abstraksi)
    • Kelas merupakan deskripsi abstrak informasi dan tingkah laku dari sekumpulan data.
    • Kelas dapat diilustrasikan sebagai suatu cetak biru(blueprint) atau prototipe yang digunakan untuk menciptakan objek.
    • Kelas merupakan tipe data bagi objek yang mengenkapsulasi data dan operasi pada data dalam suatu unit tunggal.
    • Kelas mendefinisikan suatu struktur yang terdiri atas data kelas (data field), prosedur atau fungsi (method), dan sifat kelas (property).
2. Enkapsulasi (encapsulation)
    • Istilah enkapsulasi sebenarnya adalah kombinasi data dan fungsionalitas dalam sebuah unit tunggal sebagai bentuk untuk menyembunyikan detail informasi.
    • Proses enkapsulasi memudahkan kita untuk menggunakan sebuah objek dari suatu kelas karena kita tidak perlu mengetahui segala hal secara rinci.
    • Enkapsulasi menekankan pada antarmuka suatu kelas, atau dengan kata lain bagaimana menggunakan objek kelas tertentu.
    • Contoh: kelas mobil menyediakan antarmuka fungsi untuk menjalankan mobil tersebut, tanpa kita perlu tahu komposisi bahan bakar, udara dan kalor yang diperlukan untuk proses tersebut.
3. Pewarisan (Inheritance)
    • Kita dapat mendefinisikan suatu kelas baru dengan mewarisi sifat dari kelas lain yang sudah ada.
    • Penurunan sifat ini bisa dilakukan secara bertingkattingkat, sehingga semakin ke bawah kelas tersebut menjadi semakin spesifik.
    • Sub kelas memungkinkan kita untuk melakukan spesifikasi detail dan perilaku khusus dari kelas supernya.
    • Dengan konsep pewarisan, seorang programmer dapat menggunakan kode yang telah ditulisnya pada kelas super berulang kali pada kelas-kelas turunannya tanpa harus menulis ulang semua kodekode itu.
4. Polimorfisme (polymorphism)
    • Polimorfisme merupakan kemampuan objekobjek yang berbeda kelas namun terkait dalam pewarisan untuk merespon secara berbeda terhadap suatu pesan yang sama.
    • Polimorfisme juga dapat dikatakan kemampuan sebuah objek untuk memutuskan method mana yang akan diterapkan padanya, tergantung letak objek tersebut pada jenjang pewarisan.
    • Method overriding.
    • Method name overloading.
CI. Karakteristik OOP (Object Oriented Programming) 
  • Semua adalah objek.
  • Komputasi dilakukan dengan komunikasi antar objek. Setiap objek berkomunikasi dengan objek yang lain melalui pengiriman dan penerimaan pesan.
  • Sebuah pesan merupakan permintaan atas sekumpulan aksi dengan semua argumen yang diperlukan untuk menyelesaikan suatu tugas tertentu.
  • Setiap objek memiliki memori sendiri, yang dapat terdiri dari objek-objek lainnya.
  • Setiap objek adalah wakil atau representasi dari suatu kelas. Sebuah kelas dapat mewakili sekelompok objek yang sama.
  • Kelas merupakan kumpulan tingkah laku yang berkaitan dengan suatu objek. Jadi, semua objek yang merupakan wakil dari kelas yang sama dapat melakukan aksi yang sama pula.
  • Kelas-kelas diorganisasikan ke dalam struktur pohon yang berakar tunggal, yang dinamakan dengan jenjang pewarisan (inheritance hierarchy).
  • Setiap objek pada umumnya memiliki tiga sifat, yaitu keadaan, operasi dan identitas objek.
  • Operasi merupakan tindakan yang dapat dilakukan oleh sebuah objek.
  • Keadaan objek merupakan koleksi dari seluruh informasi yang dimiliki oleh objek pada suatu saat.
  • Informasi yang terkandung pada objek tersebut pada akhirnya memberikan identitas khusus yang membedakan suatu objek dengan objek lainnya.
BII.Pengertian Modular

Modular (atau Prosedural) pemrograman adalah metode pengkodean yang memerlukan penggunaan rutinitas, sub rutin dan fungsi untuk mengatur dan melaksanakan set instruksi khusus yang berkaitan dengan tugas yang diberikan harus dilakukan. Aturan utama praktis dalam teknik ini adalah bahwa jika satu set instruksi, yang melakukan tugas atau perhitungan tertentu, akan dipanggil beberapa kali, itu harus dipindahkan ke sub rutin (jika tidak mengembalikan nilai) atau fungsi ( jika mengembalikan nilai) dan dipanggil dari bagian lain yang diperlukan program.

Biasanya, untuk membuat pendekatan terstruktur modular sukses untuk memecahkan masalah, Anda harus mendefinisikan masalah dalam hal apa tindakan atau perhitungan program perlu dilakukan dalam rangka untuk melakukan tugas yang ditetapkan dalam masalah. Anda juga perlu melihat apakah ada hubungan khusus antara prosedur dan fungsi untuk membangun perintah eksekusi bagi mereka. Konsep lain di sini adalah bahwa jika subrutin atau fungsi cukup besar, hal ini mungkin karena untuk refactoring menjadi dua atau lebih sub rutin. Ini pada dasarnya adalah bagaimana pemrograman modular mengelola kompleksitas program dengan memecahnya menjadi lebih kecil, sederhana, bagian yang lebih mudah dikelola kode.

Selama bertahun-tahun, pemrograman terstruktur telah diberikan lebih dari satu gaya coding dan dengan demikian memberikan dasar yang baik untuk beradaptasi metode pemrograman sesuai minding seseorang. Maksud saya bahwa tergantung pada latar belakang pengembang dia mungkin ingin mengatur modul mereka, prosedur dan fungsi berdasarkan kelompok fungsional (semua fungsi manipulasi string pergi dalam satu modul, semua tipe data masuk modul lain, semua konstanta di belum modul lain , ini sering jenis organisasi saya ingin mengikuti juga. orang lain mungkin lebih memilih untuk mengatur pendekatan modular mereka berdasarkan struktur entitas (agak dekat dengan OOP). sebagai contoh, semua tipe data, prosedur dan fungsi yang mempengaruhi informasi karyawan pergi dalam satu modul, semua tipe data persediaan dan fungsi berjalan di modul lain. ini adalah salah satu keuntungan besar untuk pendekatan pemrograman modular dalam yang memungkinkan untuk mengatur kode dengan cara yang sesuai dengan cara pengembang berpikir. Ketika Anda berpikir tentang hal itu , itu bisa menjadi titik yang sangat kuat karena semua orang berpikir dengan cara yang sangat berbeda tapi semua orang harus mampu mendefinisikan masalah mereka dan membawa solusi berdasarkan bagaimana mereka akan menyelesaikannya secara manual.

Perbedaan antara Object-oriented Programming dan Structural Programming

Object – oriented programming (OOP)
Structural Programming
Biasa digunakan untuk program untuk line lebih dari 100 / rumit
Biasa digunakan untuk program yang simpel/sederhana.
Bersifat modular (pengkelompokan kode dengan data yang mana setiap objek berfungsi secara independen sehingga untuk setiap perubahan kode tidak tergantung pada kode yang lainnya, atau lebih).
Pemecahan masalah dari besar menjadi maslah yang lebih kecil.
Data-centric
Task-centric
Terdapat kelas dan objek
tidak terdapat kelas dan objek

Kesimpulan Perbedaan antara prosedural dan OOP

• Prosedural : Fokus pada bagaimana cara komputer menangani masalah
• OOP : Fokus pada masalah yang ditangani dengan menggunakan komputer.

              Dengan OOP, kita dapat mengimplementasikan objekt data yang tidak hanya memiliki ciri khas (attribut), melainkan juga memiliki metode untuk memanipulasi attribut tersebut. Singkatnya, OOP memiliki keunggulan dari konsep pemrograman terstruktur, selain itu juga memiliki kemampuan untuk mengimplementasikan objek dalam kehidupan nyata.

Sumber:
http://enhalblaze.blogspot.co.id/2011/05/oop-vs-modular.html
http://petesqbsite.com/sections/express/issue17/modularversusoop.html
https://lehaqueenzy.wordpress.com/about/
https://diakbar.wordpress.com/2010/09/23/perbedaan-object-oriented-programming-dan-structural-programming/