LOGIKA ALGORITMA
Disusun Oleh:
Feri Prasetyo H.
i
Page
i
Kata Pengantar
Puji Syukur kehadirat Tuhan Yang Maha Esa karena atas limpahan rahmat-Nya
sehingga kami dapat menyelesaikan modul Logika Algoritma Untuk Masiswa
semester 1 matakuliah Logika dan Algoritma. Saat ini banyak berkembang
berkembang bahasa-bahasa pemrograman tingkat tinggi yang pemakaiannya sudah
sangat mudah, namu sebagai seorang yang memehami bahasa pemrograman harus
mengikuti kedah bahasa pemrograman agar dapat memahami konsep pregram
dengan baik dan benar. Modul Logika Dan Algoritma ini sangat penting bagi
mahasiswa program studi Manajemen Informatika khususnya, karena menjadi
dasar bagi mahasiswa untuk mempelajari bahasa pemrograman. Pada modul ini
diberikan contoh-contoh kasus untuk mempermudah memahami konsep.
Kami menyadari masih banyak kekurangan dalam penyusunan modul ini.
Oleh karena itu, kami sangat mengharapkan kritik dan saran demi perbaikan dan
kesempurnaan modul ini.
Kami mengucapkan terima kasih kepada berbagai pihak yang telah
membantu proses penyelesain modul ini, Semoga modul ini dapat bermanfaat bagi
kita semua, khususnya para peserta didik.
Penulis
Feri Prasetyo H.
ii
Daftar Isi
Bab 1 ................................................................................................................................... 1
Logika .................................................................................................................................... 1
Algoritma ............................................................................................................................... 1
Bab 2 ....................................................................................................................................... 8
Variabel .................................................................................................................................. 13
Operator .................................................................................................................................. 15
Bab 3 ....................................................................................................................................... 19
Bab 4 ........................................................................................................................................ 22
Page
iii
Percabagngan if ...................................................................................................................... 22
Nested if ................................................................................................................................ 23
If majemuk ........................................................................................................................... 24
BAB 5 ...................................................................................................................................... 25
While ................................................................................................................................... 28
Break .................................................................................................................................... 29
Bab 6 .................................................................................................................................... 30
Rekursift .............................................................................................................................. 31
Bab 7 ..................................................................................................................................... 35
Array ...................................................................................................................................... 35
Bab 8 ..................................................................................................................................... 50
Bab 9 ..................................................................................................................................... 54
iv
Algoritma Devide And Conquer Dengan Searching ................................................................ 54
Bab 10 ...................................................................................................................................... 57
Referensi .................................................................................................................................... 64
v
Page
v
1|P ag e
BAB I
Logika Algoritma
A. LogikA
Logika berasal dari kata Yunani kuno (logos) Merupakan Cabang Dari Ilmu filsafat ilmu
logika (ilmu pengetahuan) yang mempelajari kecakapan untuk berpikir secara lurus, tepat, dan
teratur
Dikenalkan pertama kali Oleh Aristoteles Aristoteles, adalah seorang filsuf Yunani, murid dari
Plato dan guru dari Alexander yang Agung. Ia menulis tentang berbagai subyek yang berbeda,
termasuk fisika, metafisika, puisi, logika, retorika, politik, pemerintahan, etnis, biologi dan
zoologi
Definisi Logika
Diperkenalkan Oleh Ahli Matematika : Abu Ja’far Muhammad Ibnu Musa Al Khawarizmi Seorang
ilmuan Persia yang menulis kitab al jabr w’al muqabala (rules of restoration and reduction)
sekitar tahun 825 M dalam ilmuan barat di kenal dengan algorism. Kemudian dalam bahasa
Indonesia konsep ini menjadi algoritma, suatu metode, tahapan untuk mencari pemecahan sustu
permasalahan. Algoritma membantu membuat kerangka berfikir secara logis dan sistematis
dengan membuat beberapa konsep perencanaan, untuk menyelesaikan beberapa masalah yang
di hadapi
Definisi Algoritma
1. Langkah - langkah yang dilakukan agar solusi masalah dapat diperoleh.
2. Suatu prosedur yang merupakan urutan langkahlangkah yg berintegrasi.
3. Suatu metode khusus yang digunakan untuk menyelesaikan suatu masalah yang nyata
#include <stdio.h>
# include <conio.h>
#include <iostream.h>
Main()
{
int P, L, Luas;
clrscr;
cout<<"Program"<< endl;
cout<<"*menghitung L.persegi.P*"<<end1;
cout<<"\n nilai Panjang=";cin>>P;
cout<<"\n nilai Lebar=";cin>>L;
L=P*L;
cout<<"\n nilai Luas="<<L;
<getch();
}
Efektif → algoritma menghasilkan solusi yang sesuai dengan masalah yang diselesaikan
(tepat guna).
Efisiensi → jika waktu proses algoritma relatif lebih singkat dan penggunaan memori
komputernya lebih sedikit
3. Jumlah Langkahnya Berhingga : Pada hal ini Barisan instruksi yang dibuat harus dalam
suatu urutan tertentu atau harus berhingga berhingga dapat dikatakan bahawa jika
terjadi suatu kendalan atau kondisi yang berbedaakan melakukan kegitan baru arau
mengikuti kegiatan yang ada, agar masalah yang dihadapi dapat diselesaikan dengan
tidak memerlukan waktu relatif lama.
4. Berakhir : semua Proses penyelesaian masalah harus berhenti dan berakhir dengan hasil
akhir yang merupakan solusinya atau berupa informasi yang tidak diketemukan solusinya.
SEMI ALGORITMA, yaitu suatu prosedur yang hanya akan berhenti jika mempunyai atau
menghasilkan solusi, sedangkan jika tidak menghasilkan solusi, maka prosedur tersebut
akan berjalan tanpa henti.
Contoh :
Analisis Algoritma
Analisis algoritma merupakan prosedur dari beberapa kriteria yang berlaku pada lagoritma
itu sendiri yaitu berupa beberapa tahapan antara lain:
a. Merencanakan algoritma:
Merencanakan algoritma dengan cara Menentukan beberapa model atau desain sebagai
penyelesaian dari suatu masalah untuk mendapat sebuah solusi yan mungkin. Dengan
demikian, akan banyak terdapat variasi desain atau model yang dapat diambil yang terbaik.
4|P ag e
1. Banyaknya langkah: Makin banyak langkah atau instruksi yang digunakan, maka makin
lama waktu tempuh yang dibutuhkan dalam proses tersebut.
2. Besar dan jenis input data: Jika jenis data adalah tingkat ketelitian tunggal (Single
precision), maka waktu tempuh akan menjadi relatif lebih cepat dibandingkan dengan
tingkat ketelitian ganda(double precesion).
3. Jenis Operasi: Sebagai contoh, operasi perkalian atau pembagian akan memakan waktu
lebih lama dibandingkan operasi penjumlahan atau pengurangan.
4. Komputer dan kompilator: hal terakhir yang mempengaruhi waktu tempuh suatu proses
algoritma adalah komputer dan kompilatornya, walaupun sebenarnya faktor ini diluar
tahap rancangan atau tahap pembuatan algoritma yang efisien. Algoritma dibuat untuk
mencapai waktu tempuh yang seefektif dan seefisien mungkin, tetapi kesemuanya itu
akan sangat bergantung pada kemampuan komputer yang tentunya harus sesuai dengan
jumlah program atau langkah yang diperlukan oleh algoritma, begitu juga dengan
kompilator tersebut
Jumlah Memori Yang digunakan: banyaknya langkah yang digunakan dan jenis variabel data
yang dipakai dalam suatu algoritma akan sangat mempengaruhi penggunaan memori. Dalm
hal ini, diharapkan dapat memperkirakan seberapa banyak kebutuhan memori yang
diperlukan selama proses berlangsung hingga proses selesai dikerjakan. Dengan demikian,
dapat disiapkan storage yang memadai agar proses suatu algoritma berjalan tanpa ada
hambatan atau kekurangan memori
d. Menguji program dari suatu algoritma: Yaitu dengan cara menyajikannya dalam salah satu
bahasa pemrogramana, misalnya BASIC, PASCAL, FORTRAN, dBase, C++ atau yang lainnya.
Dalam proses, uji program oleh komputer akan melalui beberapa tahap yaitu:
1. Fase Debugging, yaitu fase dari suatu proses program eksekusi yang akan melakukan
koreksi terhadap kesalahan program. Yang dimaksud disni adalah error atau salah dalam
penulisan program baik logika maupun sintaksnya.
5|P ag e
2. Fase Profilling, yaitu fase yang akan bekerja jika program tersebut sudah benar atau telah
melalui proses pada fase debugging. Fase ini bekerja untuk melihat dan mengukur waktu
tempuh atau running time yang diperlukan serta jumlah memori/storage yang digunakan
dalam menyelesaikan suatu algoritma
e. Menyatakan algoritma
1. Menyatakan Algoritma dengan Bahasa sehari hari
Contoh : untuk menghitung luas persegi panjang:
a. Tentukan nilai panjang
b. Tentukan nilai Lebar
c. Hitung Luas persegi panjang dengan rumus = Panjang x Lebar
d. Cetak luas Persegi panjang
Mulai
Input Panjang
Input Lebar
Cetak Luas
Hitung Ya
lagi?
Tidak
Selesai
6|P ag e
#include <stdio.h>
# include <conio.h>
#include <iostream.h>
Main()
{
int P, L, Luas;
clrscr;
cout<<"Program"<< endl;
cout<<"*menghitung L.persegi.P*"<<end1;
cout<<"\n nilai Panjang=";cin>>P;
cout<<"\n nilai Lebar=";cin>>L;
L=P*L;
cout<<"\n nilai Luas="<<L;
<getch();
}
Sifat-Sifat Algoritma
1. Banyaknya langkah instruksi harus berhingga: pelaksanaan sebuah algoritma yang
terprogram haruslah dapat diakhiri atau diselesaikan melalui sejumlah langkah operasional
yang berhingga. Jika tidak demikian, kita tidak akan dapat mengharapkan bahwa pelaksaan
algoritma tersebut dapat menghasilkan suatu solusi yang baik.
2. Langkah atau instruksi harus jelas: artinya bahwa penulisa setiap langkah yang terdapat
didalam sebuah algoritma harus memiliki arti yang khusus atau spesifik sehingga dapat
dibedakan antara penulisan langkah untuk komputer(program/pemrograman) dengan
penulisan langkah bagi manusia(pesudocode). Manusia akan lebih mudah memahami
algoritma yang terdiri atas simbol-simbol(Contoh: pembuatan algoritma dengan diagram
alur/flowchart) sedangkan komputer hanya membutuhkan sebuah penulisan algoritma
dengan kode-kode yang dituangkan dalam bahasa yang dimengerti oleh komputer itu
sendiri(bahasa pemrograman).
3. Proses harus jelas dan mempunyai batasan: rangkaian suatu proses yang berisi langkah-
langkah instruksi dari suatu algoritma yang akan dilaksanakn harus ditetapkan dengna jelas,
baik dan pasti sebab sebuah algoritma harus memiliki instruksi dasar tertentu dimana setiap
instruksi harus memiliki unsur pelaksana yang berfungsi sebagai pemroses data yang akan
dimasukkan dalam sebuah komputer. Dengan demikian, sebuah algoritma harus ditulis
dengan jelas tentang batasa-batasan proses yang akan dilaksanakan oleh komputer.
4. Input dan Output harus mempunyai batasan: input merupakan data yang dimasukkan ke
dalam algoritma yang untuk kemudian akan dilaksanakan oleh komputer. Dengan begitu,
input yang diberikan harus sesuai dengan jenis dari bahasa pemrograman yang digunakan,
sedangkan ouput merupakan hasil yang diperoleh dari pekerjaan yang dilaksanakan
komputer untuk kepentingan user yang merupakan pihak diluar komputer. Algoritma harus
7|P ag e
menghasilkan output karena merupaka solusi yang diharapkan dari suatu masalah yang
timbul.
5. Efektifitas: instruksi yang diberikan pada komputer agar hanya menjalankan atau
melaksanakan proses yang mampu dilaksanakannya. Yang dimaksud mampu adalah bahwa
suatu algoritma atau instruksi-instruksi dalam sebuah program hanya akan dapat
dilaksanakan jika informasi yang diberikan oleh instruksi-instruksi tersebut lengkap, benar
dan jelas.
6. Adanya Batasan Ruang Lingkup: Suatu Algoritma yang baik adalah algoritma yang hanya
ditujukan bagi suatu masalah tertentu saja untuk mrnyelesaikan hingga berakhir.
Latihan :
2. Buatlah algoritma pertukaran untuk mempertukarkan 2 jenis benda dan jelaskan dengan
sebuah contoh?...
8|P ag e
BAB 2
Struktur Data
A. Struktur Data
Struktur data merupakan suatu bentuk pengelolaan mengenai data agar data dapat dipergunakan
dan diolah secara lebih efisien dan efektif. Dalam beberapa bahasa pemrograman, istilah struktur
data seringkali ditampilkan secaa fisik dalam bentuk tabel (biasanya pada bahasa
pemrograman/pengelolaan database berbasis visual), namun pada beberapa bahasa pemrograman
yang tidak berbasis visual, strutkur data lebih berupa pengelolaan data dengan aturan-aturan
tertentu
B. Tipe Data
Tipe data adalah jenis data yang mempunyai batasan tempat dan karakteristik sesuai dengan
interprestasi data dan dapat diolah oleh komputer untuk memenuhi kebutuhan dalam pemrograman
komputer.
Dalam setiap Bahasa pemrogaman mempunyai sekumpulan tipe data primitive atau disebut tipe data
yang menjadi bawaan Bahasa tersebut (built in) dan ada juga yang menyediakan beberapa fasilitas
untuk programmer agar dapat mendefinisikan tipe data baru.
Setiap Bahasa pemrogaman memiliki tipe data elementernya seperti integer, bolean, char dan
enumerasi (terbilang). Sedangkan objek data yang merupakan kumpulan dari objek objek data yang
lain disebut objek data terstruktur atau struktur data. Strutur data juga dapat di definisikan suatu
kumpulan objek objek data yang memiliki aturan kemudian digolongkan berdasarkan operasi untuk
memanipulasikanya. Komponenya dapat berupa objek data elementer atau objek data terstruktur
seperti array, record, list, stack, queue, tree, file berkas, set himpunan.
9|P ag e
E. Pembagian data
1. Tipe data sederhana: adalah tipe data yang sudah ada dan dijadikan standar dalam bahasa
pemrograman tertentu. Isi dari tipe data sederhana ini adalah data-data tunggal berikut
contoh tipedata sederhana dalam pemrogaman C++
Char : Digunakan untuk menampung data sebuah karakter. untuk menuliskan tipe char,
karakter perlu ditulis didalam tanda petik tunggal ( ‘ )
Contoh :
Integer : Tipe Integer (int) adalah tipe data yang nilainya tidak mempunyai
Float : Tipe Float adalah bilangan yang mengandung pecahan desimal, misalnya: 3.65,
2.60240000E-6, dan lain-lain. Notasi E artinya perpangkatan sepuluh.2.60240000E-6 artinya
2.60240000E X 10-6
Tipe Data Tambahan, yang dimiliki oleh Borland C++, adalah : Unsigned digunakan bila data
yang digunakan hanya data yang positif saja.
10 | P a g e
Ada juga tipedata yang disebut dengan bolean atau bool, Merupakan jenis Data yang hanya
memiliki 2nilai, yakni benar (true) dan salah (false) yang juga diwujudkan sebagai 1 dan 0.
Jenis Data tersebut terutama sekali dipakai untuk menunjukkan Kondisi yang memerlukan
keputusan untuk kelanjutan proses. Tipe Data tersebut dapat dimanfaatkan untuk mewakili
suatu obyek yang memiliki nilai binary. Penerapannya dengan menggunakan operator and,
or, dan not.
Implementasi tipe data bool dengan operator AND, OR atau NOT. 0 = False; 1 = True
Penggunaan AND
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
float a, b, c, d, e, f, g, h;
clrscr( );
cout<<"Masukan Nilai A = "; cin>>a;
cout<<"Masukan Nilai B = "; cin>>b;
cout<<"Masukan Nilai C = "; cin>>c;
// Proses
d = a + 4 < 10;
e = b > a + 5;
f = c - 3 >= 4;
g = d && e && f;
cout<<endl<<endl;
cout<<"Program Ekspresi AND"<<endl<<endl;
cout<<"Hasil dari d = a + 4 < 10 adalah " <<d<<endl;
cout<<"Hasil dari e = b > a + 5 adalah " <<e<<endl;
cout<<"Hasil dari f = c - 3 >= 4 adalah " <<f;
cout<<endl<<endl;
cout<<"Hasil dari g = d && e && f adalah " <<g;
cout<<endl;
getch( );
}
11 | P a g e
Penggunaan NOT
#include <stdio.h>
#include <conio.h>
#include<iostream.h>
main( )
{
int a, b, c;
clrscr( );
cout<<"Masukan Nilai A = ";
cin>>a;
/* Proses */
b = (a + 4 < 10);
c = !(b);
cout<<endl<<"Program Ekspresi NOT "<<endl;
cout<<"Nilai A = "<<a<<endl;
cout<<"Nilai b = (a + 4 < 10) = "<<b<<endl;
cout<<"Nilai c = !(b) = "<<c;
getch( );
}
Penggunaan OR
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main()
{
float a, b, c, d, e, f, g, h;
clrscr( );
cout<<"Masukan Nilai A = "; cin>>a;
cout<<"Masukan Nilai B = "; cin>>b;
cout<<"Masukan Nilai C = "; cin>>c;
d = a + 5 > 10;
e=b>5+a;
f = c - 4 <= 7;
g = d || e || f;
cout<<endl<<endl;
cout<<"Program Ekspresi OR"<<endl<<endl;
cout<<"Hasil dari d = a + 5 > 10 adalah " <<d<<endl;
cout<<"Hasil dari e = b > 5 + a adalah " <<e<<endl;
cout<<"Hasil dari f = c - 4 <= 7 adalah " <<f;
cout<<endl<<endl;
cout<<"Hasil dari g = d || e || f adalah " <<g;
cout<<endl;
getch( );
}
12 | P a g e
a. Array
Array atau sering disebut sebagai larik, adalah tipe data yang sudah terstruktur dengan baik,
meskipun masih sederhana. Array mampu menyimpan sejumlah data dengan tipe yang sama
(homogen) dalam sebuah variabel. Sebagai ilustrasi, array mampu menampung banyak data
namun dengan satu tipe data yang sama, misalnya integer saja. Setiap lokasi data array diberi
nomor indeks yang berfungsi sebagai alamat dari data tersebut.
Contoh
Sebuah larik A dengan delapan buah elemen, notasi penulisannya :
A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8]
Angka didalam tanda kurung siku menyatakan indeks larik.
Contoh :
struct data_pegawai
{ int nip;
char nama[25];
char alamat[40]; }
c. Image
Image, atau gambar, atau citra, merupakan tipe data grafik. Misalnya grafik perkembangan
jumlah siswa SMK, foto keluarga kita, video perjalanan, dan lain-lain. Pada bahasa-bahasa
pemrograman modern terutama yang berbasis visual, tipe data ini telah didukung dengan
sangat baik.
d. Date Time
Nilai data untuk tanggal (date) dan waktu (time) secara internal disimpan dalam format yang
spesifik. Variabel atau konstanta yang dideklarasikan dengan tipe data Date dapat digunakan
untuk menyimpan, baik tanggal maupun jam. Tipe data ini masuk dalam kelompok tipe data
composite, karena merupakan bentukan dari beberapa tipe data.
13 | P a g e
e. Object
Tipe data object digunakan untuk menyimpan nilai yang berhubungan dengan obyek-obyek
yang disediakan oleh Visual Basic, Delphi, dan bahasa pemrograman lain yang berbasis GUI.
Sebagai contoh, apabila mempunyai form yang memiliki control Command button, yang kita
beri nama Command1.
f. Subrange
Tipe data subrange merupakan tipe data bilangan yang mempunyai jangkauan nilai tertentu
sesuai dengan yang ditetapkan programmer. Biasanya, tipe data ini mempunyai nilai batas
minimum dan nilai batas maksimum. Tipe data ini didukung dengan sangat baik dalam
Delphi.
g. Enumerasi
Tipe data ini merupakan tipe data yang mempunyai elemen-elemen yang harus disebut satu
persatu, dan bernilai konstanta integer sesuai dengan urutannya. Nilai konstanta integer
elemen ini diwakili oleh suatu nama variable yang ditulis di dalam kurung. Tipe data ini juga
dijumpai pada Delphi, dan bahasa pemrograman deklaratif seperti SQL.
F. Variabel
Fungsi Variabel :
• Untuk menyimpan suatu nilai, dan nilai yang ada padanya dapat diubah selama eksekusi
berlangsung.
• Penamaan variabel bersifat case sensitive (huruf besar & huruf kecil dianggap berbeda).
• Harus dideklarasikan dahulu sebelum digunakan
b. Variabel Text
1. Character ( Karakter Tunggal )
2. String ( Untuk Rangkaian Karakter )
Deklarasi Variabel
Adalah proses memperkenalkan variabel kepada Borland C++ dan pendeklarasian tersebut
bersifat mutlak karena jikatidak diperkenalkan terlebih dahulu maka Borland C++ tidak menerima
variabel tersebut.
Deklarasi Variabel ini meliputi tipe variabel, seperti integer atau character dan nama variabel itu
sendiri. Setiap kali pendeklarasian variabel harus diakhiri oleh tanda titik koma ( ;).
Merupakan variabel
char nama_mahasiswa[20];
Merupakan variabel
G. Konstanta
Konstanta : Sebuah variabel dengan tipe data tertentu dan memiliki nilai data yang akan selalu tetap
di dalam program.
Secara garis besar konstanta dapat dibagi menjadi dua bagian, yaitu:
1. Konstanta Bilangan
konstanta bilangan dibagi menjadi tiga kelompok, antara lain:
a. Konstanta Bilangan Bulat (Integer). Adalah bilangan yang tidak mengandung nilai
desimal. Ini merupakan nilai default pada konstanta bilangan. Contoh : 1, 2, 3, 100
b. Konstanta Desimal Berpresisi Tunggal ( Floating Point) Konstanta Floating Point,
mempunyai bentuk penulisan, yaitu :
- Bentuk Desimal ( contoh : 5.57 )
- Bentuk Eksponensial / Bilangan Berpangkat ( contoh : 4.22e3 4.22 x 103)s
15 | P a g e
2. Konstanta Teks
Konstanta Teks dibagi menjadi dua kelompok, antara lain;
a. Data Karakter (Character). Data karakter hanya terdiri dari sebuah karakter saja yang
diapit oleh tanda kutip tunggal ( ‘ ). Data karakter dapat berbentuk abjad ( huruf
besar atau kecil ), angka, notasi atau simbol. Contoh : ‘Y’ ‘y’ ‘9’ ‘&’ dan lain-lain.
b. Data Teks (String). Data String merupakan rangkaian dari beberapa karakter yang
diapit oleh tanda kutip ganda ( “ ). Contoh : “Virusland”, “Jakarta”, “AMIK BSI”, “Y” dan
lain-lain.
H. Operator
Operator merupakan simbol atau karakter yang biasa dilibatkan dalam program, yang digunakan
untuk melakukan sesuatu operasi atau manipulasi, seperti penjumlahan, pengurangan dan lain-lain.
Operator Aritmatika : Operator untuk operasi aritmatika yang tergolong sebagai operator binary
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
main( )
{
int a, b;
clrscr( );
a = 8 + 2 * 3 / 6;
b = (8 + 2) * 3 / 6;
cout<<" A = 8 + 2 * 3 / 6"<<endl;
cout<<" B = (8 + 2) * 3 /6"<<endl;
cout<<endl;
cout<<" Hasil dari A = "<<a<<endl;
printf(" Hasil dari B = %i ",b);
getch( );
}
Keterangan :
1. Penambahan: menambahkan 1 ke nilai variable, prefix (++A)atau postfix (A ++)
2. Pengurangan: mengurangkan 1 ke nilai variabel, prefix (--A) atau postfix (A --)
Hasilnya:
NIlai A = 10
Nilai ++A = 11
Nilai B = 5
Nilai –B = 4
Hasilnya:
NIlai A = 10
Nilai ++A = 11
NIlai A = 11
Nilai B = 5
Nilai - -B = 5
Nilai B = 4
Operator relasi
18 | P a g e
Operator Relasi digunakan untuk membandingkan dua buah nilai. Hasil perbandingan operator
ini menghasilkan nilai numerik 1 (True) atau 0 (False).
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
main( )
{
float a, b, c, d, e, f, x, y;
clrscr( );
cout<<"Masukan Nilai X = "; cin>>x;
cout<<"Masukan Nilai Y = "; cin>>y;
a = x = = y;
b = x != y;
c = x > y;
d = x < y;
e = x >= y;
f = x <= y;
cout<<endl;
cout<<"Hasil dari "<<x<<" == "<<y<<" = "<<a<<endl;
cout<<"Hasil dari "<<x<<" != "<<y<<" = "<<b<<endl;
cout<<"Hasil dari "<<x<<" > "<<y<<" = "<<c<<endl;
cout<<"Hasil dari "<<x<<" < "<<y<<" = "<<d<<endl;
cout<<"Hasil dari "<<x<<" >= "<<y<<" = "<<e<<endl;
cout<<"Hasil dari "<<x<<" <= "<<y<<" = "<<f<<endl;
getch( );
}
Operator Bitwise
Operator ini digunakan untuk memanipulasi data dalam bentuk bit. Borland C++ menyediakan
enam buah operator bitwise.
19 | P a g e
BAB 3
Diagram Alur
Diagram alur atau flowchart merupakan pengambaran dari algoritma yang berupa bentuk sisbol
symbol yang mererasikan dari setiap langkah langkah. Dalam penggambaran diagram alur terdapat
symbol symbol yang memiliki kegunaan masing masing. Flowchart diawali dengan penerimaan
input, pemrosesan input, dan diakhiri dengan penampilan output.
Diagram Alur untuk Program Komputer Pada dasarnya suatu program computer umumnya terdiri
atas :
1. Pembacaan / pemasukan data ke dalam computer
2. Melakukan komputasi/perhitungan terhadap data tersebut
3. Mengeluarkan / mencetak/ menampilkan hasilnya.
1. Flowchart digambarkan dari halaman atas ke bawah dan dari kiri ke kanan.
2. Aktivitas yang digambarkan harus didefinisikan secara hati-hati dan definisi ini harus dapat
dimengerti oleh pembacanya.
3. Kapan aktivitas dimulai dan berakhir harus ditentukan secara jelas.
4. Setiap langkah dari aktivitas harus diuraikan dengan menggunakan deskripsi kata kerja
misalkan
5. Setiap langkah dari aktivitas harus berada pada urutan yang benar.
6. Lingkup dan range dari aktifitas yang sedang digambarkan harus ditelusuri dengan hati-hati.
Percabangan-percabangan yang memotong aktivitas yang sedang digambarkan tidak perlu
digambarkan pada flowchart yang sama. Simbol konektor harus digunakan dan
percabangannya diletakan pada halaman yang terpisah atau hilangkan seluruhnya bila
percabangannya tidak berkaitan dengan sistem.
7. Gunakan simbol-simbol flowchart yang standar
System Flowchart
System flowchart dapat didefinisikan sebagai bagan yang menunjukkan arus pekerjaan secara
keseluruhan dari sistem. Bagan ini menjelaskan urut-urutan dari prosedur-prosedur yang ada di
dalam sistem. Bagan alir sistem menunjukkan apa yang dikerjakan di sistem.
Document Flowchart
Bagan alir dokumen (document flowchart) atau disebut juga bagan alir formulir (form flowchart)
atau paperwork flowchart merupakan bagan alir yang menunjukkan arus dari laporan dan formulir
termasuk tembusan-tembusannya.
Schematic Flowchart
21 | P a g e
Bagan alir skematik (schematic flowchart) merupakan bagan alir yang mirip dengan bagan alir sistem,
yaitu untuk menggambarkan prosedur di dalam sistem. Perbedaannya adalah, bagan alir skematik
selain menggunakan simbol-simbol bagan alir sistem, juga menggunakan gambar-gambar komputer
dan peralatan lainnya yang digunakan. Maksud penggunaan gambar-gambar ini adalah untuk
memudahkan komunikasi kepada orang yang kurang paham dengan simbol-simbol bagan alir.
Penggunaan gambar-gambar ini memudahkan untuk dipahami, tetapi sulit dan lama
menggambarnya.
Program Flowchart
Bagan alir program (program flowchart) merupakan bagan yang menjelaskan secara rinci langkah-
langkah dari proses program. Bagan alir program dibuat dari derivikasi bagan alir sistem.
Bagan alir program dapat terdiri dari dua macam, yaitu bagan alir logika program (program logic
flowchart) dan bagan alir program komputer terinci (detailed computer program flowchart). Bagan
alir logika program digunakan untuk menggambarkan tiap-tiap langkah di dalam program komputer
secara logika. Bagan alat- logika program ini dipersiapkan oleh analis sistem. Gambar berikut
menunjukkan bagan alir logika program. Bagan alir program komputer terinci (detailed computer
program flow-chart) digunakan untuk menggambarkan instruksi-instruksi program komputer secara
terinci. Bagan alir ini dipersiapkan oleh pemrogram.
Process Flowchart
Bagan alir proses (process flowchart) merupakan bagan alir yang banyak digunakan di teknik
industri. Bagan alir ini juga berguna bagi analis sistem untuk menggambarkan proses dalam suatu
prosedur.
Struktur Flowchart
1. Sederhana
Struktur sederhana merupakan Diagram yang alurnya mengalir secara berurutan dari atas ke
bawah atau dengan kata lain tidak adanya percabangan atau pengulangan.
Missal menghitung luas persegi panjang
22 | P a g e
BAB 4
Percabangan
Percabangan
Struktur percabangan merupakan struktur Diagram flowchart yang alurnya terjadi/terdapat
alih kontrol berupa percabangan. Flowchart dengan stuktur percabangan digunakan untuk
meyeleksi kondisi dan menentukan pilihan proses selanjutnya.
Percabangan if
Percabangan if juga digunakan untuk memecahkan masalah untuk pengambilan keputusan di
antara banyaknya pernyataan yang ada, bentuk dari struktur percabangan if yaitu pernyataan
if, if-else, nested if dan if-else majemuk
a. Percabangan if
Bentuk penulisan :
if (kondisi)
{
...pernyataan;
}
23 | P a g e
b. Percabangan if - else
Pergertian dari pernyataan if-else adalah jika kondisi bernilai benar maka pernyataan-
1 akan dikerjakan dan jika kondisi bernilai salah maka pernyataan-2 akan dikerjakan.
Bentuk penulisan :
if (kondisi)
{
...pernyataan-1;
}
else
{
...pernyataan-2;
}
c. Nested if
Pergertian dari pernyataan nested if adalah pernyataan if berada di dalam
pernyataan if yang lainnya.
Bentuk penulisan :
if (syarat)
{
24 | P a g e
if (syarat)
...perintah;
else
...perintah
}
else
{
if (syarat)
...perintah;
else
...perintah;
}
If majemuk
Pernyataan if-else majemuk sebenarnya serupa dengan nested if hanya saja penulisannya yang lebih
sederhana.
Bentuk penulisan :
if (syarat)
{
...perintah;
...perintah;
}
else if (syarat)
{
...perintah;
...perintah;
}
else
{
...perintah;
...perintah;
}
switch - case
Bentuk dari switch - case merupakan pernyataan yang dirancangan khusus untuk menangani
pengambilan keputusan yang melibatkan sejumlah atau banyak alternatif penyelesaian.
Pernyataan switch - caseini memiliki kegunaan sama seperti if – else bertingkat, tetapi
penggunaannya untuk memeriksa data yang bertipe karakteratau integer. Bentuk penulisan
perintah ini sebagai berikut:
…… Perintah ;
…… Perintah ;
Break;
Case Konstanta -2:
…… Perintah ;
…… Perintah ;
Break;
Default:
…… Perintah ;
…… Perintah ;
}
Setiap pilihan akan dijalankan jika syarat nilai konstanta tersebut dipenuhi dan defaultakan
dijalankan jika semua cabang diatasnya tidak terpenuhi. Pernyataan break menunjukan bahwa
perintah siap keluar dari switch. Jika pernyataan ini tidak ada, maka program akan diteruskan
ke pilihan-pilihan yang lainnya
BAB 5
Perulangan (Looping)
Perulangan adala suatu kegiatan melakukan kegiatan yang serupa secara ber ulang ulang sebanyak
beberapakali sesuai dengan perin tah yang harus di kerjakan.
Secara umum terdiri dari dua bagian, yaitu:
1. Kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk melaksanakan
pengulangan.
2. Badan (body) pengulangan, yaitu bagian algoritma yang diulang. Dua bagian yang ada pada
struktur pengulangan, adalah:
- Inisialisasi, yaitu aksi yang dilakukan sebelum pengulangan dilakukan pertama kali.
- Terminasi, yaitu aksi yang dilakukan setelah pengulangan selesai dilaksanakan.
Missal: mesin foto copy akan melakukan pencetakan sebanyak li buah maka mesin tersebut tidak
akan berhenti sebelum mencetak lima lembar
Pendeklarasian for :
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int a;
clrscr( );
for(a = 1; a <= 10; ++a)
cout<<a;
getch( );
}
output
For menurun
Seperti dijelaskan diatas for menurun berarti for yang nilainya berumah menjadi nilai terkecil
sesuai dengan kondisi perintah yang dilakukan.
Pendeklarasian for menurun :
27 | P a g e
output
Nested for
Nested for merupakan for didalam for biasa disebut dengan istilah for bersarang.
Pendeklarasianya sebagai berikut:
for( inisialisasi; syarat pengulangan; pengubah nilaipencacah )
{
pernyataan / perintah;
}
#include<stdio.h>
28 | P a g e
#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
C. while
Bentuk perulangan while dikendalikan oleh syarat tertentu, yaitu perulangan akan terus
dilaksanakan selama syarat tersebut terpenuhi.
while ( syarat )
{
Pernyataan / perintah ;
Pernyataan / perintah ;
}
Satu hal kunci yang membedakan struktur WHILE dengan FOR, adalah di dalam perulangan FOR
kondisi akhir perulangan harus sudah diketahui pada awal program. Namun dalam perulangan
WHILE, kita bisa membuat perulangan yang nilai akhir atau kondisinya belum diketahui pada saat
perulangan dimulai
#include <stdio.h>
#include <conio.h>
main( )
{
int bil=2;
clrscr( );
29 | P a g e
while(bil<=10)
{
printf(" %d ",bil);
bil+=2;
}
getch( );
}
Do while
Pernyataan perulangan do - while merupakan bentuk perulangan yang melaksanakan perulangan
terlebih dahulu dan pengujian perulangan dilakukan dibelakang
do
{
Pernyataan / perintah ;
Pernyataan / perintah ;
}
while ( syarat );
contoh program
#include <stdio.h>
#include <conio.h>
main( )
{
int bil=2;
clrscr( );
do
{
printf(" %d ",bil);
bil+=2;
}
while(bil<=10);
getch( );
}
D. Break
30 | P a g e
Pernyataan break telah dibahas pada pernyataan pengambilan keputusan switch. Pernyataan
break ini berfungsi untuk keluar dari struktur switch. Selain itu pernyataan breakberfungsi keluar
dari perulangan ( for, while dan do-while). Jika pernyataan break dikerjakan, maka eksekusi akan
dilanjutkan ke pern yataan yang terletak sesudah akhir dari badan perulangan ( loop )
#include <stdio.h>
#include <conio.h>
main( )
{
int bil = 1;
clrscr( );
do
{
if (bil >= 6)
break;
printf(" %d ",bil);
}
while(bil++);
getch( );
}
BAB 6
Rekursif
A. Deret fibonancy
Penemu bilangan Fibonacci adalah Leonardo da Pisa atau Leonardo Pisano (1175-1250). Beliau adalah
seorang matematikawan Italia, yang juga dikenal sebagai Fibonacci yang juga memiliki peran dalam
mengenalkan sistem penulisan dan perhitungan bilangan Arab ke dunia Eropa. Leonardo adalah
orang yang memperkenalkan deret. Setelah meninggal, ia sering disebut sebagai Fibonacci (dari kata
filius Bonacci, anak dari Bonacci). Ayahnya bernama William atau dikenal sebagai Bonacci. Untuk itu
Leonardo memiliki julukan Fibonacci yang berasal dari kata Filius Bonacci yang artinya anak dari
Bonacci
Deret Fibonaccy adalah deret dimana nilai suku ke n merupakan jumlah nilai suku ke n-1 dan suku ke
n-2. Untuk suku n > 2, Suku pertama (n=1) nilainya adalah 1, dan suku ke dua (n=2) nilainya = 1
#include <iostream.h>
int suku, a, b, c;
int main()
{
cout<<"Membuat Deret Fibonacci\n";
cout<<"Masukkan nilai suku ke-: ";cin>>suku;
cout<<"Bilangannya adalah: \n";
a=0;b=1;
cout<<a<<endl<<b<<endl;
for(int i=3; i<=suku; i++)
{
c = a + b;
a = b;
b = c;
cout<<c<<endl;
}
return 0;
}
B. Menara Hanoi
32 | P a g e
0 A (asal) B (Bantu) C
(Tujuan)
1 A (asal) B (Bantu) C
(Tujuan)
2 A (asal) B (Bantu) C
(Tujuan)
3 A (asal) B (Bantu) C
(Tujuan)
4 A (asal) B (Bantu) C
(Tujuan)
33 | P a g e
5 A (asal) B (Bantu) C
(Tujuan)
Dari contoh diatas dapat diambil kesimpulan , untuk memindahkan N piringan dari tonggak asal (A)
ke tonggak tujuan (C) maka piringan ke N harus berada di tonggak tujuan (C) , sedangkan piringan ke
1 sampai (N - 1) harus berada di tonggak bantu (B). Setelah piringan ke 1 sampai (N-1) berada pada
tonggak bantu (B) , kemudian pindahkan piringan ke 1 sampai (n-1) tersebut dari tonggak bantu (B)
ke tonggak tujuan (C) Nah bagaimana caranya membawa piringan ke 1 sampai (N-1) dari tonggak asal
ke tonggak bantu (B) , caranya sama saja yaitu dengan memindahkan piringan ke (n-1) dari tonggak
asal (A) ke tonggak tujuan yang pada saat ini berada pada tonggak (B) sedangkan piringan dari 1
sampai ke (N-2) dipindahkan ke tonggak bantu yang saat ini berada di tonggak (C) , Setelah piringan
ke 1 sampai (N-2) berada pada tonggak bantu (C) , kemudian pindahkan piringan ke 1 sampai (N-2) ke
tonggak tujuan (B) dan seterusnya.Metode penyelesaian permainan Hanoi diatas sering disebut
sebagai metode back tracking , jadi solusi dicari dengan cara mundur ke belakang dahulu , baru
kemudian solusi bisa di temukan .
1. Berapa langkah minimal yang diperlukan untuk memindahkan 2, 3, 4, 5 atau 6 cakram dari tiang
awal ke tiang lainnya ? ( cakram yang kecil selalu berada di atas )
2. Dengan menentukan pola permasalahan di atas, tentukan rumus untuk menentukan banyak
langkah minimal untuk menyusun n lempengan.
Tabel hasil:
34 | P a g e
Banyak
Banyak cakram
perpindahan Dugaan pola
(n)
minimal(L)
1 L1=1 2-1= 2 1 -1
2 L2=3 4-1= 2 2 -1
3 L3=7 8-1= 2 3 -1
4 L4=15 16-1= 2 4 -1
5 L5=31 32-1= 2 5 -1
. . .
. . .
. . .
n 2 n -1
Catatan:
Tidak boleh meletakan piringan yang lebih kecil di bawah piringan yang lebih besar
#include <stdio.h>
#include <conio.h>
void main()
{
int piringan;
printf("Berapa banyak piringan ? ");scanf("%d", &piringan);
printf("\n");
hanoi(piringan, 'A', 'B', 'C');
getch();
35 | P a g e
BAB 7
ARRAY
Array
Array atau larik dalam bahasa indonesia ada juga yang menyebut matriks merupakan sekumpulan
variable yang memiliki nama sama tapi nama tersebut dibedakan oleh suatu indeks. bukanlah tipe
data dasar seperti integer atau boolen, Menggunakan array akan memudahkan dalam membuat
kelompok data, serta menghemat penulisan dan penggunaan variabel.
Merupakan alokasi memori statis. mengalokasikan memori untuk tipe data yang sama secara
berurutan. berisi beberapa nilai jenis yang sama. Hal ini juga menyimpan nilai-nilai dalam memori
pada ukuran tetap.
Array juga merupakan struktur data yang statis yang mempunyai 1 nama tetapi memiliki banyak
tempat. Setiap tempat harus dibedakan, untuk membedakannya dibutuhkan penunjuk, pentunjuk
dapat berupa karakter(char) atau integer. Sekali disimpan dalam penunjuk yang sama(berbentuk
indeks), maka isinya tidak akan hilang kecuali indeksnya diisi oleh nilai yang lain, dengan kata lain kita
dapat menempatkan 5 nilai yang bertype int tanpa harus mendeklarasikan 5 variabel yang berbeda
36 | P a g e
untuk masing-masing nilai. Sebagai gantinya kita dapat menggunakan array untuk menyimpan kelima
nilai tersebut
Karaktersitik Array :
1. mempunyai batasan dari pemesanan alokasi memory (bersifat statis)
2. mempunyai type data sama (homogen)
3. dapat di akses secara acak.
4. berurutan (terstruktur)
Array dideklarasikan dengan tanda [ ] (bracket), baik dalam bahasa C++ dan Java. Tanda [ ] disebut
juga “elemen yang ke- ...“. Misalnya kondisi[0] berarti array kondisi elemen yang ke nol. Bentuk
umum dari tipe data array adalah:
Contoh:
tipe_data nama_array[jumlah_elemen]
untuk mengisi elemen array misal A[1]:=1;.Sifat Array Array merupakan struktur data yang statis,
yaitu jumlah elemen yang ada harus ditentukan terlebih dahulu dan tak bisa di ubah saat program
berjalan Untuk memasukkan data ke dalam array, sintak yang digunakan adalah :
a[nomor_elemen] = data;
a[0] = 5;
37 | P a g e
a[1] = 6;
a[2] = 7;
dan seterusnya.
Pada C/C++, array merupakan pointer Yang mempunyai alokasi memori tetap (pointer
constant).
Akses elemen suatu berarti: array bersifat random, artinya dapat dimulai dari mana saja dan
tidak harus dari elemen pertamanya. Elemen-elemen array tersusun secara berderet dan dapat
diakses secara random di dalam memori
Keuntungan
1. penggunaan array sebagai tipe data dibandingkan dengan penggunaan tipe data yang lain
adalah kemampuannya yang dapat mengumpulkan beberapa data yang bertipe sama dalam
satu variabel, sehingga dalam pembuatan program yang terdiri dari beberapa tipe yang sama,
tidak membutuhkan banyak variabel.
Untuk memasukan nilai kedalam elemen array, dengan cara menyebutkan index untuk elemen array
tersebut. Index dimulai dari index ke 0, bukan dari index ke 1.
A[nomor_elemen] = data;
#include <iostream.h>
#include <conio.h>
void main()
{
clrscr ();
int A[5];
int i;
Pada araay 1 dimensi untuk mengakses aray harus terdefinisi terlebih dahulu sebelum aksi
pengaksesan dilaksanakan. Elemen array yang tersusun secara berurutan mulai dari elemen pertama
hingga elemen terakhir.
Missal ada sebuah aray A dengan indek = [55,10,12,8,0,9,124,25,70,30] untuk mengakase aray
tersebut dengan sistem linear search mencari mulai dari data awal hingga data akhir, missal yang di
cari adalah angka 9 maka di a akan mencari mulai dari data pertama hingga data berikutnya sehingga
di padat kan bahwa data 9 berada pada array ke 5
#include <iostream.h>
#include <conio.h>
int linear_search(int [], int, int);
main()
{
clrscr();
const int array_size=10;
int array[array_size]={55,10,12,8,0,9,124,25,70,30};
cout<<"============== Linear Search ==========================="<<endl;
cout<<"========================================================"<<endl;
gotoxy(1,24);
cout<<"========================================================";
gotoxy(1,5);
cout<<" Isi dari array adalah : "<<endl;
cout<<"\n Array : "<<"\t\t Data : "<<endl;
for(int count=0; count < array_size; count++)
{
cout<<"\t"<<" array ["<<count<<"]"<<"\t\t";
cout<<array[count]<<endl; }
int searching_element=0;
int flag=0;
cout<<"\n\n Masukan data yang Anda cari : ";
cin>>searching_element;
flag=linear_search(array,array_size,searching_element);
39 | P a g e
if (flag != -1)
cout<<"\n Data tersebut ditemukan pada posisi : array ["<<flag<<"]";
else
cout<<"\n Data tersebut tidak ditemukan ";
getch();
return 0;
}
/********** Definisi Fungsi ******************/
int linear_search(int array[], int array_size, int element)
{
int flag=1;
for (int count=0; count<array_size; count++)
{
if (element == array[count])
{
flag=count; break; }
}
return flag;
}
/* ---------------------------------- */
/* Inisialisasi Array Dimensi 1 */
/* ---------------------------------- */
#include <conio.h>
#include <iostream.h>
main( )
{
char hari[7][10] =
40 | P a g e
{"Minggu","Senin","Selasa","Rabu","Kamis","jum'at","Sabtu"};
clrscr( );
cout<<"Nama-nama hari:"<<endl;
cout<<hari[0]<<endl<<hari[1]<<endl<<hari[2]<<endl<<hari[3]
<<endl<<hari[4]<<endl;
getch();
}
Penerapan dari array berdimensi satu dapat digunakan untuk mencari bilangan dari
sejumlah data yang ada. Pencarian bilangan disini akan menggunakan teknik linear search
Data sudah ditentukan terlebih dahulu untuk memudahkan model pencarian beserta
lokasi indeks dari data yang dicari, Apabila data ditemukan akan menginformasikan letak
indeksnya.
#include <iostream>
int a[10],jumlah=10;
41 | P a g e
}
void main() {
int data;
for(int i=0; i<jumlah; i++){
cout << "a[" << i << "] = ";
cin >> data;
input(data,i);
}
tampil(jumlah);
int cariData = 12;
if (cari(cariData,jumlah)==false)
cout << "Data " << cariData
<< " tidak ditemukan " << endl;
else
cout << "Data " << cariData
<< " ditemukan" << endl;
hapus(89,jumlah);
jumlah--;
hapus(0,jumlah);
jumlah--;
tampil(jumlah);
}
/* ---------------------------- */
/* Program Array Satu Dimensi */
/* ---------------------------- */
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>
main( )
43 | P a g e
{
int i;
char nama[5][20];
float nilai1[5];
float nilai2[5];
float hasil[5];
clrscr( );
for(i=1;i<=2;i++)
{
cout<<"Data Ke - "<<i<<endl;
cout<<"Nama Siswa : "; gets(nama[i]);
cout<<"Nilai MidTest : "; cin>>nilai1[i];
cout<<"Nilai Final : "; cin>>nilai2[i];
hasil[i] = (nilai1[i] * 0.40)+ (nilai2[i] * 0.60);
cout<<endl;
}
cout<<"------------------------------------------"<<endl;
cout<<"No. Nama Siswa Nilai Nilai ";
cout<<"Hasil"<<endl;
cout<<" MidTest Final ";
cout<<"Ujian"<<endl;
cout<<"------------------------------------------"<<endl;
for(i=1;i<=2;i++)
{
cout<<setiosflags(ios::left)<<setw(4)<<i;
cout<<setiosflags(ios::left)<<setw(10)<<nama[i];
cout<<setprecision(2)<<" "<<nilai1[i];
cout<<setprecision(2)<<" "<<nilai2[i];
cout<<setprecision(2)<<" "<<hasil[i]<<endl;
}
cout<<"------------------------------------------"<<endl;
getch();
}
44 | P a g e
Array berdimensi 2
Array dua dimensi sering kali digambarkan/dianalogikan sebagai sebuah matriks atau bentuk grid.
Jika array berdimensi satu hanya terdiri dari 1 baris dan banyak kolom, array berdimensi dua terdiri
dari banyak baris dan banyak kolom yang bertipe sama.
45 | P a g e
Array dua dimensi merupakan array yang terdiri dari M buah baris dan N buah kolom. Bentuknya
dapat berupa matriks atau tabel.
Contong penggambaran Array dimensi 2 dengan ukuran 2x3 yang berarta memiliki 2 baris dan 3
kolom
#include <conio.h>
#include <iostream.h>
main()
{
char nama[2][3][10]={{"Pak","BU","Mas"},
{"Andi","Budi","Carli"}};
clrscr();
cout<<nama[0][0]<<ends<<nama[1][0]<<endl;
cout<<nama[0][1]<<ends<<nama[1][2]<<endl;
cout<<nama[0][2]<<ends<<nama[1][1]<<endl;
getch();
}
/* -------------------- */
/* Array Dimensi 2 */
46 | P a g e
/* -------------------- */
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>
main()
{
int i, j;
int data_jual[4][4];
clrscr();
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
cout<<"Data Ke - "<<i<<" "<<j<<endl;
cout<<"Jumlah Penjulan : ";
cin>>data_jual[i][j];
}
}
cout<<"Data Penjualan Pertahun"<<endl;
cout<<"-----------------------"<<endl;
cout<<"NO 2007 2008 2093"<<endl;
cout<<"-----------------------"<<endl;
for(i=1;i<=3;i++) {
cout<<setiosflags(ios::left)<<setw(5)<<i;
for(j=1;j<=3;j++)
{
cout<<setiosflags(ios::right)<<setw(4);
cout<<data_jual[i][j];
cout<<" ";
}
cout<<endl;
}
cout<<"-----------------------"<<endl;
getch( );
}
47 | P a g e
BAB 8
Divide : Membagi masalah menjadi beberapa upa-masalah yang memiliki kemiripan dengan
masalah semula namun berukuran lebih kecil ( idealnya berukuran hampir sama ).
Algoritma Divide and Conquer merupakan algoritma yang berprinsip memecah-mecah permasalahan
yang terlalu besar menjadi beberapa bagian kecil sehingga lebih mudah untuk diselesaikan
1. Branching Factor
Branching factor dalam algoritma divide and conquer adalah jumlah dari subproblem yang akan
dibagi dari sebuah problem awal. Ini adalah langkah nyata dari algoritma divide and conquer, didalam
proses pembagian yang sebenarnya, jumlah dari branching factor harus 2 atau lebih, karena jika tidak
problem tidak bisa dibagi. Banyak jenis algoritma ini termasuk pula algoritma komputasi geometric
yang memiliki branching factor berjumlah 2
2.Balance
Sebuah algoritma divide and conquer dikatakan balance jika problem awal dibagi menjadi sub-sub
problem dengan ukuran yang sama. Yang artinya jumlah dari keseluruhan ukuran subproblem sama
dengan ukuran problem awal (initial problem). Algoritma Mergesort dan binary tree, dan sama
halnya dengan algoritma reduksi & prefix sum adalah beberapa contoh algoritma divide and conquer
yang seimbang (balance).
Sorting atau biasa banyak orang yang mengatakan dengan istilah Pengurutan, pengurutan
merupakan sebuah proses yang biasa dilakukan dalam pengolahan data memilih beberapa data
untuk dapat di urutkan. Pengurutan Atau sorting di analogokan sebagai sebuah kegiatan yang
mencari beberapa datad alam suatu tempat penyimpanan, dengan urutan tertentu baik urut menaik
(ascending) dari nilai terkecil sampai dengan nilai terbesar, atau urut menurun (descending) dari nilai
terbesar sampai dengan nilai terkecil
Pengurutan internal (internal sort), yaitu pengurutan terhadap sekumpulan data yang
disimpan dalam media internal komputer yang dapat diakses setiap elemennya secara
langsung. Dapat dikatakan sebagai pengurutan tabel
Pengurutan eksternal (external sort), yaitu pengurutan data yang disimpan dalam memori
sekunder, biasanya data bervolume besar sehingga tidak mampu untuk dimuat semuanya
dalam memori.
1.Bubble Sort
a. Pada Penyeleksian ini Pengecekan mulai dari data ke-1 sampai data ke-n
b. Tahap Berikutnya Bandingkan data ke-n dengan data sebelumnya (n-1)
c. Jika Pada data berikutnya lebih kecil maka pindahkan bilangan tersebut dengan
bilangan yg ada didepannya (sebelumnya) secara satupersatu (n-1,n-2,n-3,....dst)
d. Jika ditemukan data lebih besar maka tidak terjadi pemindahan
e. Silahkan di Ulangi langkah berikutnya hinga menjadi sort optimal
Langkah ke 1 : 10 7 20 6 8 5 3 4
10 7 20 6 8 3 5 4
10 7 20 6 3 8 5 4
10 7 20 3 6 8 5 4
10 7 3 20 6 8 5 4
10 3 7 20 6 8 5 4
3 10 7 20 6 8 5 4
Langkah ke 2 : 3 10 7 20 6 8 5 4
3 10 7 20 6 8 4 5
3 10 7 20 6 4 8 5
3 10 7 20 4 6 8 5
3 10 7 4 20 6 8 5
3 10 4 7 20 6 8 5
52 | P a g e
3 4 10 7 20 6 8 5
Langkah ke 3 : 3 4 10 7 20 6 8 5
3 4 10 7 20 6 5 8
3 4 10 7 20 5 6 8
3 4 10 7 5 20 6 8
3 4 10 5 7 20 6 8
3 4 5 10 7 20 6 8
Langkah ke 4 : 3 4 5 10 7 20 6 8
3 4 5 10 7 6 20 8
3 4 5 10 6 7 20 8
3 4 5 6 10 7 20 8
Langkah ke 5 : 3 4 5 6 10 7 20 8
3 4 5 6 7 10 20 8
Langkah ke 6 : 3 4 5 6 7 10 20 8
3 4 5 6 7 10 8 20
3 4 5 6 7 8 10 20
2.Selection Sort
Langkah ke : 10 7 20 6 8 5 3 4
Langkah ke 1 : 3 10 7 20 6 8 5 4
Langkah ke 2 : 3 4 10 7 20 6 8 5
Langkah ke 3 : 3 4 6 10 7 20 8 5
3.Insertion Sort
Lakukan langkah 2 dan 3 untuk bilangan berikutnya ( I= I+1 ) sampai didapatkan urutan
yg optimal.
Contoh : 22 10 15 3 8 2
Iterasi 1
1 2 3 4 5 6
Langkah 1: 22 10 15 3 8 2
Langkah 2: 22 10 15 3 8 2
Langkah 3: 10 22 15 3 8 2
Langkah 4: Ulangi langkah 2 dan 3
Iterasi 2
Langkah 1: 10 22 15 3 8 2
Langkah 2: 10 22 15 3 8 2
Langkah 3: 10 15 22 3 8 2
Langkah 4: Ulangi langkah 2 dan 3
Lakukan Iterasi selanjutnya sampai iterasi
ke- 6
Catatan : Setiap ada pemindahan, maka elemen. Yang sudah ada akan di insert sehingga
akan bergeser kebelakang.
3. Merge Sort
Contoh : 22 10 15 3 8 2
Iterasi 1
1 2 3 4 5 6
Langkah 1 : 22 10 15 3 8 2
Langkah 2 : 10 22 3 15 2 8
Iterasi 2
Langkah 1 : 10 22 3 15 2 8
Langkah 2 : 3 10 15 22 2 8
Iterasi 3
Langkah 1 : 3 10 15 22 2 8
Langkah 2 : 2 3 8 10 15 22
54 | P a g e
BAB 9
1. Low = 1 , High = N
2. Ketika Low <= High Maka kerjakan langkah No .3, Jika tidak Maka kerjakan langkah No.7
3. Tentukan Nilai Tengah dengan rumus
mid = ( Low + High ) Div 2
4. Jika X < Nil. Tengah Maka High = Mid –1
5. Jika X > Nil. Tengah Maka Low = Mid +1
6. Jika X = Nil. Tengah Maka Nil. Tengah = Nil. Yg dicari
7. Jika X > High Maka Pencarian GAGAL
Menentukan / mencari elemen max & min. Pada Himpunan yg berbentuk array linear.
Waktu tempuh/time complexity yg digunakan untuk menyelesaikan pencarian hingga
mendapatkan solusi yg optimal terbagi atas best case,average case dan worst case.
PROCEDURE STRAITMAXMIN(A,n,i,max,min)
int i,n, A [n], max,min
55 | P a g e
BEST CASE
• Keadaan yg tercapai jika elemen pada himpunan A disusun secara increasing (menaik).
Dengan perbandingan waktu n - 1 kali satuan operasi.
• Contoh : Terdapat himp.A yg berisi 4 buah bilangan telah disusun secara increasing dengan
A[0] = 2, A[1] = 4, A[2]=5, A[3]=10. Tentukan / cari Bilangan Max&Min serta jumlah operasi
perbandingan yg dilakukan.
untuk masalah tersebut dapat digunakan procedure STRAITMAXMIN yg menghasilkan
bilangan Min=2 & bilangan Max=10,
Operasi perbandingan data mencari bilangan MaxMin dari himpunan tersebut (n-1) =3 kali
operasi perbandingan.
WORST CASE
• Terjadi jika elemen dalam himp. disusun secara decreasing (menurun). Dengan. Oprasi
perbandingan sebanyak 2(n-1) kali satuan operasi.
• Contoh : Mencari elemen MaxMin & jumlah oprasi perbandingan yg dilakukan terhadap
himp.A yg disusun decreasing.
A[0]=80, A[1]=21, A[2]=6, A[3]=-10
Penyelesaian
• untuk masalah tersebut dengan proses STRAITMAXMIN adalah elemen max=80 & elemen
min=-10, Operasi. perbandingan untuk elemen Maxmin tersebut adalah 2(4-1) = 6 kali satuan
operasi.
AVERAGE CASE
• Jika pencarian elemen MaxMin dilakukan pada elemen dalam himpunan yg tersusun secara
acak (tidak decreasing/tidak increasing). Jumlah oprasi. Perbandingan yg dilakukan adalah
rata-rata waktu tempuh best case & worst case, yaitu ½ [ (n-1) + 2(n-1) ] = ( 3n/2 -1 ) kali.
• Contoh, Pada himpuan A yg berisi { 5,-4, 9,7 } dilakukan pencarian elemen max & min dengan
menggunakan proses STRAITMAXMIN. Berapa elemen maxmin yg didapatkan & jumlah oprasi
perbandingan yg dilakukan.
Penyelesaiannya :
Elemen max=9, & elemen min=-4. Jumlah operasi perbandingan adalah ( 3. 4/2 - 1) = 5 kali
satuan operasi.
• Dengan Prinsip Dasar Metode Devide & akan dapat dipecahkan suatu permasalahan proses
Searching elemen Max&Min dengan teknik DANC
• Contoh : Tentukan elemen MaxMin suatu array A yg terdiri 9 bil. :
A[1] = 22, A[4] = -8, A[7] = 17
A[2] = 13, A[5] = 15, A[8] = 31
A[3] = -5, A[6] = 60, A[9] = 47
1,9
1 ,5 6,9
1,3 4,5 6,7 8,9
1,2 3,3
Lalu Proses tree call dr setiap elemen yg ditunjuk pada bagan tree tersebut diatas. Dengan
cara, membalik terlebih dahulu posisi tree dr bawah ke atas. Lalu mengisinya dengan
elemen-elemnnya sesuai dengan bagan tree. Perhatikan bagan tree call ini :
6,9 60,17
1,5 22,-8
1,9 60,-8
57 | P a g e
BAB 10
Metode Gredi
Di gunakan Untuk mendapatkan solusi optimal dr permasalahan yg mempunyai dua kriteria yaitu
Fungsi Tujuan/Utama & nilai pembatas (constrain)
Untuk menyeselesaikan suatu permasalahan dgn n input data yg terdiri dari beberapa fungsi
pembatas & 1 fungsi tujuan yg diselesaikan dgn memilih beberapa solusi yg mungkin (feasible
solution/feasible sets), yaitu bila telah memenuhi fungsi tujuan/obyektif.
Misal terdapat 3 buah prg.(n=3) yg masing2 mpy panjang prg. (I1,I2,I3)=(5,10,3). Tentukan urutan
penyimpanannya scr berurutan (sequential) agar optimal....!
Dari 3 program tersebut akan didapat 6 buah kemungkinan order, yg didapat dr nilai faktorial 3
3! (ingat faktorial n!).
order yg optimal,sbb :
2. Knapsack Problem
Contoh : sebuah Tas dimana Terdapat n obyek (Xi;i=1,2,3,....n) objek di sini biasa diasumsikan
sebuah benda, yang masing-masing mempunyai berat (weight)/ Wi & masing-masing
memiliki nilai (profit)/Pi yg berbeda-beda.
Bagaimana memilih obyek yg akan dimuat dr n obyek yg ada sehingga nilai obyek termuat
jumlahnya sesuai dgn kapasitas( M)
Jika semua obyek harus dimuat kedalam ransel maka berapa bagian dr setiap obyek yg ada
dapat dimuat kedalam ransel sedemikian shg nilai kum. maks. & sesuai dgn kapasitas ransel ?
Penyelesaian Dengan Kriteria Greedy.
Pilih barang dgn menghitung perbandingan yg terbesar dr Profit dibagi Berat (Pi/Wi) yg diurut
secara tidak naik, yaitu :
P1/W1 = 25/18 karena terkecil maka X1 = 0
P2/W2 = 24/15 karena terbesar maka X2 = 1
P3/W3 = 15/10 dengan Fungsi pembatas X3 = 1/2.
59 | P a g e
Kasus MST Problem = mencari minimum.biaya (cost) spanning tree dr setiap ruas (edge) graph
yang membentuk sebuah pohon (tree).
Solusi dr p’masalah’ ini :
a. Dengan memilih ruas suatu graph yang memenuhi kriteria dr optimisasi yang
menghasilkan biaya min.
b. penambahan dari setiap ruas pada seluruh ruas yang membentuk graph akan
menghasilkan nilai/biaya yg kecil (minimumcost).
Kriteria2 dr spanning tree, yakni :
1. Setiap ruas pada graph harus terhubung (conected)
2. Setiap ruas pd graph hrs mpy nilai (label graph)
3. Setiap ruas pd graph tdk mpy arah (graph tdk berarah)
1 10 2
45 50
30
40
4 3
35
25
5
20
55
6 15
61 | P a g e
45
B E
A 50 10
10 20 15 20 35
30
C D F
15 3
Problema pemberian warna kepada semua simpul, sedemikian sehingga 2 simpul yang berdampingan
( ada ruas menghubungkan ke dua simpul tersebut ) mempunyai warna yang berbeda . Banyak
warna yang dipergunkan , diminta seminimal mungkin
Contoh
Menentukan pola lampu lalulintas dengan jumlah fase minimal, dan pada setiap fase tidak ada
perjalanan yang saling melintas . Perjalanan yang diperbolehkan adalah : A ke B, A ke C, A ke D, B ke
C, B ke D, E ke B, E ke C dan E ke D
62 | P a g e
4. Kita lihat Bahwa simpul AB , BC dan ED tidak dihubungkan oleh suatu ruas jadi untuk simpul
tersebut tidak pernah melintas perjalanan-perjalanan lain dan simpul tersebut selalu berlaku
lampu hijau
Dari langkah ke 5 diperoleh 3 fase, sehingga bisa kita simpulkan keseluruhan situasi dan hasilnya
dapat dinyatakan dengan :
Fase 1
Fase 2
Fase 3
64 | P a g e
Referensi
Al Fatta, Hanif, S.k om. 2006. Dasar PemrogramanC++. Andi Offset. Yogyakarta
Kadir, Abdul. 2001. Pemrograman C++ menggunakan turbo C++ dan borland C++. Andi Offset.
Yogyakarta.
Jan Hendrik Rapar. 1996. Pengantar Logika. Asas-asas penalaran sistematis. Yogyakarta: Penerbit
Kanisius. ISBN 979-497-676-8
Raharjo, Budi. 2004. Mengungkap Rahasia pemrograman dalam C++. Informatika. Bandung
Tim Penyusun Komisi Manajemen Informatika Akademi Manajemen Informatika Dan Komputer BSI
2014
Sismoro heri dan Kussrini Iskandar 2094. Struktur data dan Pemrogaman dengan Pascal. Andi offset
yogjakarta.
Tim Penyusun Komisi Manajemen Informatika Akademi Manajemen Informatika Dan Komputer BSI
2014
Yulikuspartono, S.Kom,2003, Pengantar Logika dan Algoritma, Andi Offset, Yogyakarta
http://www.web-games-online.com/towers-of-hanoi/index.php