Sejarah Algoritma
Asal kata Algoritma berasal dari nama Abu Ja’far Mohammed Ibn Musa
al-Khowarizmi, ilmuan Persia yang menulis kitab al jabr w’al-muqabala
(rules of restoration and reduction) sekitar tahun 825 M
A. Algoritma
Urutan langkah-langkah untuk memecahkan masalah
Urutan logis pengambilan putusan untuk memecahkan masalah
urutan langkah logis, berarti algoritma harus mengikuti suatu
urutan tertentu, tidak boleh melompat-lompat.
Alur pemikiran dalam menyelesaikan suatu pekerjaan yang
dituangkan secara tertulis.
Alur pikiran yang artinya algoritma seseorang dapat berbeda dari
algoritma orang lain.
tertulis, yang artinya dapat berupa kalimat, gambar, atau tabel
tertentu.
Note:
Algoritma Di butuhkan untuk memerintah computer mengambil langkah-
langkah tertentu untuk menyelesaikan masalah
Penulisan Algoritma :
1. Menggunakan bahasa natural (Bahasa manusia: Indonesia, Inggris)
Kelemahannya masih sering membingungkan (ambigu) / sulit
dipahami.
2. Menggunakan Flowchart
Dengan psudocode
Logika dan Algoritma Pemrograman -3 Fak. Saintek Universitas Ibrahimy
suatu cara penulisan algoritma agar ide dan logika dari algoritma
dapat disampaikan/diekspresikan menggunakan gaya bahasa
pemrograman pemrograman tertentu.
Studi Kasus :
Buatlah Algoritma untuk memilih bilangan terbesar dari 3 buah bilangan
?
Dengan Flowchart
Dengan Pseudo-code
Input (Bilangan_pertama)
Logika dan Algoritma Pemrograman -5 Fak. Saintek Universitas Ibrahimy
Input (Bilangan_kedua)
Input (Bilangan_ketiga)
maks bilangan_pertama
if (maks < bilangan_kedua) then
maks bilangan_kedua
if (maks < bilangan_ketiga) then
maks bilangan_ketiga
output (maks)
End.
E. Sifat-sifat Algoritma
Aspek Penting Algoritma :
1. Finite algoritma harus berhenti setelah mengerjakan sejumlah
langkah terbatas
2. Definite setiap langkah didefinisikan secara tepat, tidak boleh
membingungkan (ambigu)
3. Input sebuah algoritma memiliki nol/lebih input sebelum
dijalankan
4. Output algoritma memiliki satu/lebih output, yang biasanya
bergantung kepada input
5. Effective setiap algoritma diharapkan memiliki sifat efektif. (setiap
langkah harus sederhana
dan sehingga dapat dikerjakan dalam waktu yang masuk
akal)
Tugas 1 :
Buatlah algoritma (dengan bahasa natural, Flowchart, pseudocode, dan
program C++):
1. Menampilkan bilangan ganjil dari 1 sampai dengan 10.
2. Menghitung jumlah deret : 1 + 2 + 3 + 4 + .... + N
N = jumlah maksimum suatu nilai yang dimasukkan.
Studi Kasus:
A B
algoritma :
Tuangkan larutan dari bejana A ke dalam bejana B
Tuangkan larutan dari bejana B ke dalam bejana A.
Penyelesaian :
Logika dan Algoritma Pemrograman -8 Fak. Saintek Universitas Ibrahimy
Untuk mempertukarkan isi duah bejana, diperlukan sebuah bejana tambahan
sebagai tempat penampungan sementara, misalnya bejana C.
A B C
TUGAS 2 :
SUPLEMEN
a. Deklarasi variabel
Untuk membuat variabel/pengenal/indentifier pada yaitu dengan
menuliskan nama variabel dan tipe datanya pada bagian deklarasi
variabel
Format penulisan: [tipe_data nama_identifier ; ]
contoh :
int i = 1;
char nama[10];
bool Jenis_kelamin=true;
float Luas,Panjang,Lebar;
double luas;
- kurang
* kali
/ bagi
% modulus
a = -25;
b = +25;
c = -a+b; .
Suatu ekpresi dapat mengandung lebih dari satu jenis operator, C++
mengartikannya berdasar order of precedence dari operator-operator
tersebut. Order of precedence dari operator menunjukkan hirarki
matematis dari suatu operator misalnya:
2 + 3 * 2;
C++ akan menghitung 3*2 dulu karena operator kali (*) hirarkinya lebih
tinggi dari operator + sehingga ekpresi di atas hasilnya adalah 8, bukan
10. Untuk operator aritmatik order of precedence-nya yang tinggi adalah
kali (*), bagi (/) dan modulus (%) sedang yang rendah adalah tambah (+)
dan kurang (-),Jadi C++ selalu melakukan kali, bagi dan modulus lalu
Logika dan Algoritma Pemrograman - 13 Fak. Saintek Universitas Ibrahimy
diikuti tambah dan kurang. Operator-operator dalam C++ terdistribusi
dalam 15 hirarki precedence yang dapat dilihat pada tabel di bawah ini.
++ Prefex increment
– Prefex decrement
Function call and
()
1 subexpression Left to right
[] Array subscript
-> Structure pointer
. Structure member
! Logical negation
~ 1’s complement
- Unary negation
+ Unary plus
2 Right to left
(type) Type cast
* Pointer deference
& Address of
Sizeof Size of
* Multiplication
3 / Division Left to right
% Modulus
+ Addtion
4 Left to right
- Subtraction
<< Bitwise left shift
5 Left to right
>> Bitwise right right shift
< Less than
<= Less than or equal to
6 Left to right
> Greater than
>= Greater than or equal
Logika dan Algoritma Pemrograman - 14 Fak. Saintek Universitas Ibrahimy
to
== Equal test
7 Left to right
!= Not equal to
8 & Bitwise AND Left to right
Precedence
Symbol Description Associativity
Level
A = b = c = d = e = 100;
dalam hal ini assosiativitasnya adalah dari kanan ke kin, jadi 100
dipasangkan di variabel e, lalu dari variabel e ke variabel d demikian
seterusnya sampai akhirnya n, sehingga setelah selesai dieksekusi
variabel-variabel a, b, c, d, e mempunyai nilai 100. Bahkan kita dapat
menulis ekpresi sebagai berikut :
x = 5 + (y = 9 – z);
1 //C1_2.CPP
2 #include <iostream>
3 #include <iomanip>
4 Using namespace std;
5
6 main()
7 {
8 float nilai_1, nilai_2, nilai_3, rata2;
1 // C2_2.CPP
2 #include <iostream>
Pada suatu ekpresi dalam C++ tipe data tidak harus sama. Kalau suatu
bilangan bulat ditambah dengan suatu bilangan pecahan maka C++ akan
mengkonversi tipe yang lebih kecil ke tipe yang lebih besar. Konversi ini,
yang hanya bersifat sementara pada saat ekpresi dievalusi saja, pada umumnya
akan memberikan hasil yang lebih teliti. Jika konversi dilakukan sebaliknya
maka terjadi pemotongan pada tipe data yang lebih besar sehingga mengurangi
Logika dan Algoritma Pemrograman - 18 Fak. Saintek Universitas Ibrahimy
ketelitian. Konversi yang bersifat otomatis ini dapat di bypass dengan type
casting, yaitu kita memaksa compiler untuk mengkonversi menjadi tipe data
yang kita inginkan. Tipe data yang di type cast ini berubah menjadi tipe baru
hanya pada saat ekpresi dievaluasi, jadi sifatnya sementara. Format dari suatu
type cast adalah:
dalam hal ini tipe data adalah tipe data yang ada di C++, dan ekspresi dapat
berupa variabel, konstanta atau kombinasinya. Program berikut ini memakai
suatu type cast untuk menghitung bunga pinjaman.
1 #include <iostream>
2 #include <iomanip>
3
4 using namespace std;
5
6 main ()
7 {
8 int jml_hari =45;
9 float jml_pinjaman = 2000000.00;
10 float bunga_tahunan = 0.155;
11 float bunga_harian, bunga_pinjaman;
12
// Type cast jumlah hari dalam 1 tahun
13
menjadi tipe float
14 bunga_harian = bunga_tahunan / (float)365;
//Karena jml_hari adalah integer,
15
konversikan menjadi float
bunga_pinjaman =jml_pinjaman * bunga_harian
16
* (float)jml_hari;
17 jml_pinjaman += bunga_pinjaman;
cout << "Total piutang anda adalah "<<
18 setiosflags(ios::fixed) << setprecision(2) <<
jml_pinjaman;
19
20 return 0;
CIN
Digunakan untuk meminta masukan dari papan ketik untuk diolah computer.
CIN >> nama; memasukan nilai ke variabel
COUT
Contoh Program :
1 #include <iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 char x;
8 char i[20],j[20],k[20],l[20];
9 float nilai1, nilai2;
10 int hasil;
11 double hasil1;
12 float hasil2;
13
14 cout << "Inputkan nilai 1 : ";
15 cin >> nilai1;
16 cout << "Inputkan Nilai 2 : ";
Logika dan Algoritma Pemrograman - 20 Fak. Saintek Universitas Ibrahimy
17 cin >> nilai2;
18 cout << "Inputkan sebuah huruf : ";
19 cin >> x;
20 cout << "Inputkan Nama Anda : ";
21 cin >> i;
22 cout << "Masukkan Kelas anda : ";
23 cin >> j;
24 cout << "Masukkan No.Telp/HP Anda : ";
25 cin >> k;
26 cout << " Masukkan Alamat Anda : ";
27 cin >> l;
28 //memproses perkalian, penjumlahan dan
pengurangan
29 hasil = nilai1 * nilai2;
30 hasil1 = nilai1 + nilai2;
31 hasil2 = nilai1-nilai2;
32 //mencetak hasil operator matematika
33 cout << "Hasil perkalian adalah : " <<
hasil << "\n";
34 cout << "Hasil penjumlahan adalah : " <<
hasil1 << "\n";
35 cout << "Hasil Pengurangan adalah : " <<
hasil2 << "\n";
36 return 0;
37 }
Flowchart
Flowchart adalah representasi grafik dari langkah-langkah yang
harus diikuti dalam menyelesaikan suatu permasalahan yang
terdiri atas sekumpulan simbol, dimana masing-masing simbol
merepresentasikan suatu kegiatan tertentu.
Flowchart diawali dengan penerimaan input, pemrosesan input,
dan diakhiri dengan penampilan output.
bagan yang menggambarkan urutan logika dari suatu prosedur
pemecahan masalah.
suatu diagram yang menggambarkan susunan logika suatu
program
2. Struktur Branching
Diagram yg alurnya terjadi/terdapat alih kontrol berupa percabangan.
Flowchart dengan stuktur percabangan digunakan untuk meyeleksi
kondisi dan menentukan pilihan proses selanjutnya.
contoH : flowchart dari algoritma menentukan apakah bilangan yang
dimasukan ganjil atau genap.
3. Struktur looping
VARIABEL
Variabel, sebagai tempat untuk menyimpan suatu nilai yang sejenis.
Terdiri dari nama dari variable itu sendiri dan nilai yang disimpan.
variabel / Peubah suatu nilai yg dapat berubah harganya.
Studi kasus
Buat diagram alur untuk masalah menghitung temperatur dalam derajat
Fahrenhait yang diubah ke dalam derajat Celcius & Reamur.
C= 5 (F-32) R= 4 (F-32)
9 9
Derajat Celsius (°C) adalah suatu satuan ukur suhu yang mendapatkan
namanya dari ahli astronomi Anders Celsius (1701–1744), yang
pertama kali mengusulkannya pada tahun 1742. Skala suhu celsius
didesain supaya titik beku air berada pada 0 derajat dan titik didih pada
100 derajat di tekanan atmosferik standar.
Fahreheit adalah salah satu skala temperatur selain Celsius dan kelvin.
Nama Fahrenheit diambil dari ilmuwan Jerman yang bernama Gabriel
Fahrenheit (1686-1736). Dalam skala ini, titik beku air adalah 32 derajat
Fahrenheit (ditulis 32°F) dan titik didih air adalah 212 derajat
Fahrenheit. Negatif 40 derajat Fahreheit sama dengan negatif 40
derajat Celsius.
mulai
C = 5/9*(F-32)
R = 4/9 *(F-32)
C,R
selesai
B. Soal Latihan
Tersedia potongan Program berikut ini :
If (A>B) {
Perintah 1
}
Else If ((A< B) or (C>B)) {
Perintah 2
}
Else {
perintah 3
}
Tidak
selesai
hasil : 1 2 3 4 5 6 7 8 9 10
Nested Loop for for (int i=1; i<=10; i++) {
Persamaan :
Perbedaan :
#include <iostream>
using namespace std;
FUNGSI FAKTORIAL
0! = 1
Nama fungsi:
#include <iostream> faktorial
using namespace std;
int rekursiffaktorial(int f)
{
Memanggil dirinya
if (f == 0){ sendiri
return 1;
}
Else {
return f * rekursiffaktorial(f - 1);
}
1. Cara menggunakan
} fungsi yaitu dengan
memanggil nama
fungsi tersebut dari
int main() program blok utama
MENARA HANOI
#include <iostream>
return 0;
}
Logika dan Algoritma Pemrograman - 38 Fak. Saintek Universitas Ibrahimy
Hasil :
Jumlah Piringan = 3
. Pindahkan piringan ke 1 dari A ke C
. Pindahkan piringan ke 2 dari A ke B
. Pindahkan piringan ke 1 dari C ke B
. Pindahkan piringan ke 3 dari A ke C
. Pindahkan piringan ke 1 dari B ke A
. Pindahkan piringan ke 2 dari B ke C
. Pindahkan piringan ke 1 dari A ke C
Pengertian array
Array merupakan kumpulan elemen data yang terdiri dari elemen baris
dan kolom dengan tipe data sejenis. Array yang akan dibahas adalah :
a. Array 1 dimensi
b. Array 2 dimensi Elemen array
a. Array 1 dimensi
20 11 12 11 1 1 0 3 2 6 9
1 2 3 4 5 6 7 8 9 10 11
m a u $ * 1 Indeks array
5 6 7 8 9 10
Contoh :
#include <iostream>
int main()
{
int Angka[10];
int i;
cout << "Menggunakan Array 1 dimensi";
cout <<"\n\n";
for (i=0;i<10;i++) {
cout << "Input data Array " << i << " : ";
cin >> Angka[i];
}
Cout << “\n\nMenampilkan Array 1 dimensi \n”;
for (i=0;i<10;i++) {
cout << "\nArray ke- " << i << " Adalah =>
" << Angka[i];
}
return 0;
}
b. Array 2 Dimensi
Larik Dimensi 2 atau lebih larik yang memiliki indek > 1. (larik
dengan banyak dimensi)
Contoh :
Int matrix[2][2];
1 5
A=
2 4
Terlihat pada contoh deklarasi tipe data : Integer, Nama Array: Matrix,
jumlah elemen baris: 2 dan jumlah elemen kolom : 2.
#include <iostream>
int main()
{
int matrix[2][2];
int i,j;
Latihan
1 0 0 1
1 1 0 1
1 0 1 1
1 0 0 1
Jawab
#include <iostream>
int main()
{
TUGAS
1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
Logika dan Algoritma Pemrograman - 44 Fak. Saintek Universitas Ibrahimy
Buatlah flowchart menggunakan raptor dan program menggunakan c++
untuk membuat matrik di atas.
Metode Pengurutan
Algoritma pengurutan / sorting bermacam-macam dan setiap algoritma
ini memiliki kinerja yang berbeda-beda. Berikut ini macam-macam
algoritma pengurutan:
29 27 10 8 76 21
29 27 10 8 76 21
1 2 3 4 5 6
8 27 10 29 76 21
1 2 3 4 5 6
.
8 10 27 29 76 21
1 2 3 4 5 6
8 10 21 29 76 27
1 2 3 4 5 6
8 10 21 27 29 76
/*selection Sort*/
#include <iostream>
#include <iomanip>
cout<<"\n\n";
selectionsort(NumList,N);
Analogi :
Larik dengan urut menaik, elemen larik yang berharga paling kecil
diapungkan , artinya diangkat ke atas (atau ke ujung kiri larik)
melalui proses pertukaran.
Proses pengapungan ini dilakukan sebanyak N-1 langkah dengan N
adalah ukuran larik.
Pada akhir setiap langkah ke-I, larik L[1..N] akan terdiri atas
dua bagian yaitu bagian yang sudah terurut, yaitu L[1..I] dan
bagian yang belum terurut L[I+1..N]. Setelah langkah terakhir,
diperoleh larik L[1..N] yang terurut menaik.
25 27 10 8 76 21
1 2 3 4 5 6
Contoh 2 :
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 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];
}
cout<<endl;
}
void Tampil()
{
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
void bubble_sort()
{
for(int i=1;i<n;i++)
{
for(int j=n-1;j>=i;j--){
bubble_sort();
return 0;
}
Mengurutkan satu set kartu dari kartu yang bernilai paling kecil hingga
yang paling besar.
Seluruh kartu diletakkan pada meja, kita sebut meja pertama, disusun
dari kiri ke kanan dan atas ke bawah.
Kemudian pada meja kedua tempat meletakkan kartu yang diurutkan.
Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama
dan letakkan pada meja kedua.
Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang
berada pada meja kedua, kemudian letakkan pada urutan yang sesuai
setelah perbandingan.
Proses tersebut akan berlangsung hingga seluruh kartu pada meja
pertama telah diletakkan berurutan pada meja kedua.
Contoh :
Jika sudah terurut 3,6,9, dan selanjutnya belum terurut 5,7,2,....
5 akan disisipkan di antara 3 dan 6, sehingga menjadi 3,5,6,9.
7 akan disisipkan di antara 6 dan 9, sehingga menjadi 3,5,6,7,9.
2 akan disisipkan sebelum 3, sehingga menjadi 2,3,5,6,7,9.
Contoh :
Konsep :
3 9 4 1 5 2
list 1: | list 2: 3 9 4 | 1 5 2
list 1: | list 2: 3 4 9 | 1 2 5
Setelah itu dubentuk list baru yang merupakan gabungan kedua list tadi:
List baru:
1 list 1: | list2:
3 4 9 | 2 5
List baru: 1 2
list 1: | list 2:
3 4 9 | 5
List baru: 1 2 3
list 1: | list 2:
4 9 | 5
List baru: 1 2 3 4
list1: | list 2: 9 | 5
List baru: 1 2 3 4 5
Logika dan Algoritma Pemrograman - 59 Fak. Saintek Universitas Ibrahimy
list 1: | list 2: 9 | kosong
List baru: 1 2 3 4 5 9
list 1: | list 2: kosong | kosong
List: 1 2 3 4 5 9
Contoh 2
Contoh : data berikut ini akan diurutkan
2).
4).
5).
7).
8).
9).
11).
12).
14).
16).
18).
20).
21).
23).
24).
26).
28).
30).
32).
34).
35).
37).
38).
39).
Konsep
Algoritma
(1) i ← 0
(2) ketemu ← false
(3) selama (tidak ketemu) dan (i <= N) kerjakan baris 4
(4) jika (Data[i] = x) maka ketemu ← true, jika dak i ← i + 1
(5) jika (ketemu) maka i adalah indeks dari data yang dicari, jika data
tidak ditemukan.
Contoh
Pemcarian angka
1. #include <iostream>
using namespace std;
2.
3. int main()
4. {
5. cout<<"====== PROGRAM SEQUENTIAL SEARCH
========"<<endl<<endl;
6.
7. int n,bil_cari,Data[100];
8. int i,ketemu;
9.
cout<<" Inputan Jumlah Data Dalam Array : ";
10. cin>>n;
11. cout<<endl;
12. for(int c=0; c<n; c++)
{
13. cout<<" Elemen Data Array Ke - "<<c<<" =
14. "; cin>>Data[c];
15. }
16. i=0;
cout<<" \n\n Inputkan Bilangan Yang Dicari =
17. "; cin>>bil_cari;
18. ketemu = 0;
19.
while((i<n) && (ketemu==0))
20.
{
Logika dan Algoritma Pemrograman - 77 Fak. Saintek Universitas Ibrahimy
21. if(Data[i] == bil_cari)
{
22.
ketemu=1;
cout<<" \n Pencarian sequential
23. "<<bil_cari<<" Ada Pada Indeks ke - " <<i;
24. }
else
25. i=i+1;
26. }
27. if(ketemu == 1)
28. cout<<"\n Data ditemukan!!! "<<endl;
else
29. cout<<"\n Data tidak
30. ditemukan!!!"<<endl;
31. return 0;
}
32.
33.
Pencarian Huruf
1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 char bil_cari,Data[10];
6 int i,n,ketemu;
7
cout<<"======PROGRAM SEQUENTIAL
8 SEARCH========"<<endl<<endl;
9
10 cout<<" Inputan Jumlah Data Dalam Array : ";
11 cin>>n;
12 cout<<endl;
for(int c=0; c<n; c++)
13 {
14 cout<<" Elemen Data Array Ke - "<<c<<" =
15 "; cin>>Data[c];
16 }
Algoritma
(a) L ← 0
(b) R ← N – 1
(c) Ketemu ← false
(d) Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai
dengan 8
(e) m ← (L + R) / 2
(f) jika (Data[m]) maka ketemu ← true
(g) jika (x < Data[m]) maka R ← m – 1
(h) jika (x > Data[m]) maka L ← m + 1
(i) jika (ketemu) maka m adalah indeks dari data yang dicari, jika
tidak maka data tidak ditemukan.
Contoh
1 #include <iostream>
2
using namespace std;
3
4 int main ()
5 {
int arr[100],awal,tengah,akhir,i,n,num;
Logika dan Algoritma Pemrograman - 80 Fak. Saintek Universitas Ibrahimy
6 cout << "\nMasukkan Jumlah data : ";
7 cin >> n;
cout << "\nMasukkan data yang sudah terurut : "
8 << endl;
9 for (i=0;i<n;i++) {
10 cout << "Masukkan data ke- "<< i+1 << " :
11 ";
12 cin >> arr[i];
cout << endl;
13 }
14
15 //inisialiasi nilai awal dan akhir
16 awal = 0;
17 akhir = n-1;
18 cout << "\nMasukkan angka yang dicari : ";
19 cin >> num;
20
21 while (awal <= akhir) {
22 //menentukan tengah
tengah = (awal+akhir)/2;
23
24 //jika nilai ditemukan di tengah,maka
25 tampilkan posisi dan keluar
26 if(arr[tengah] == num) {
27 cout << "\nAngka ditemukan pada posisi
: " << (tengah+1);
28 return(0);
29 } else if (num > arr[tengah]) {
30 awal=tengah+1;
31 } else if (num < arr[tengah]) {
32 akhir=tengah-1;
}
33 }
34 cout << "Angka tidak ditemukan!";
35 return 0;
}