ALGORITMA Diperkenalkan Oleh Ahli Matematika : Abu Ja’far Muhammad Ibnu Musa Al Khawarizmi, seorang ilmuwan Persia yang menulis kitab al jabr w’al muqabala (rules of restoration and reduction) sekitar tahun 825 M Suatu prosedur untuk menyelesaikan masalah yang berisi urutan langkah-langkah yg berintegrasi
KRITERIA ALGORITMA Ada Output, Efektifitas dan Efesiensi, Jumlah Langkahnya Berhingga, Berakhir, Terstruktur Suatu algoritma harus menghasilkan output yg tepat guna (efektif) dlm waktu yg relatif singkat & penggunaan memori yg relatif sedikit (efesien) dgn langkah yg berhingga & prosedurnya berakhir baik dlm keadaan diperoleh suatu solusi ataupun tdk ada solusinya
MENYATAKAN ALGORITMA Dengan bahasa semu (pseudocode) Contoh algoritma menghitung Luas Segi tiga : Masukan Nilai Alas Masukan Nilai Tinggi Hitung Luas =( Alas * Tinggi ) / 2 Cetak Luas
b. Dengan diagram alur atau flowchart Contoh : Start Masukan Alas Tinggi Luas = (Alas * Tinggi)/2 Cetak Luas Stop
c. Dengan Statement program / penggalan Program Contoh (menggunakan c++): cin>>alas; untuk input data cin>> tinggi; luas = (alas * tinggi)/2 ; proses cout>>luas; untuk output data
MENYATAKAN ALGORITMA
DIAGRAM ALUR (FLOWCHART) Flowchart adalah suatu diagram yang menggambarkan susunan logika suatu program. Simbol : Proses/prosessing, satu atau beberapa himpunan penugasan yang akan dilaksanakan secara berurutan. Input / Output data yg akan dibaca & dimasukan ke dalam memori komputer dari suatu alat input Terminal, berfungsi sebagai awal dan akhir dari suatu proses alur.
Decision (kotak keputusan) berfungsi utk memutuskan arah/percabangan yg diambil sesuai dgn kondisi yg dipenuhi, yaitu Benar/Salah. (dibahas dalam struktur branching). Subroutine digunakan untuk menjalankan proses suatu bagian (sub program) atau prosedur. Preparation digunakan untuk pemberian harga awal.
Connector/penghubung, digunakan untuk menghubungkan diagram alur yang terputus dimana bagian tersebut masih berada pada halaman yang sama. On page Connector, Untuk menghubungkan sambungan dari bagian flowchart yang terputus dimana sambungannya berada pada halaman lain. Flowline, menunjukkan bagian arah instruksi dijalankan
Sruktur Dasar Algoritma Sequence/urutan/runtunan instruksi dikerjakan dari atas ke bawah secara berurutan Condition/Decision/selection/branching/keputusan/pemilihan/percabangan/bersyarat ada 2 macam: 1. Bersyarat (if dan case) 2. Tidak bersyarat (goto) Looping/repetition/iteration/perulangan (for dan while)
MENYATAKAN ALGORITMA DENGAN KALIMAT 1. Tampilkan kata “Algoritma” Nyatakan nilai r sama dengan 7 Hitung s sama dengan r dibagi 2 Tampilkan nilai s
MENYATAKAN ALGORITMA DENGAN FLOWCHART Start Start r = 7 Tampilkan kata “Algoritma” s = r/2 End Tampilkan nilai s End
MENYATAKAN ALGORITMA DENGAN STATEMENT PROGRAM Judul Algoritma Deklarasi Berisi pendefinisian nama/identifier yang digunakan pada bagian deskripsi 3. Deskripsi/statement Berisi penyelesaian masalah berupa deretan intruksi
Contoh Pendeklarasian Tidak ada deklarasi Dengan deklarasi Algoritma tampilan begin Write(“Algoritma”); end. Algoritma hitung r : integer s : real begin r ←7 s ← r/2 write (s) end.
IDENTIFIER Identifier adalah nama yang didefinisikan oleh programmer Identifier dalam program: Variabel Tempat menyimpan nilai yang isinya relative berubah sesuai dengan kondisi terkini 2. Konstanta Tempat menyimpan nilai yang isinya tetap selama program dijalankan
IDENTIFIER 3. Tipe data bentukan Jenis data, tipe baru bisa didefinisikan oleh programer Label Bagian program untuk intruksi lompatan Fungsi/prosedur Sub program
Aturan membuat identifier Terdiri dari 1 huruf atau lebih maksimal 256 karakter Boleh di gabung dengan angka tapi angka tidak boleh di letakan di depan Tidak boleh menggunakan keyword/reserved word/kata cadangan Tidak boleh ada spasi Tidak boleh menggunakan symbol kecuali underscore (_) Tidak boleh sama
Tentukan output flowchart berikut Latihan Tentukan output flowchart berikut INPUT X X=2*X X=X+10 X=X+7 X=5*X X=X+5 START END INPUT A INPUT B A > B ? START END Y T Cetak ‘A lebih besar’ Cetak ‘B lebih besar’ CETAK X
Buatlah Flowchartnya dari pseudocode berikut ini: a. Masukan kode barang b. Masukan harga barang Masukan Jumlah barang Hitung bayar = harga * Jumlah barang Jika bayar >= 100.000 maka diberikan discount 10%, selain dari itu tidak mendapat discount Hitung total bayar = bayar - discount Cetak total bayar
2. Buatlah Flowchartnya dari pseudocode berikut ini: a. Diketahui phi=3.14 b. Masukan nilai jari-jari (r) c. Hitung Keliling = 2 * phi * r d. Cetak Keliling e. Ingin menghitung kembali? Jika Ya maka kembali ke proses awal, jika Tidak maka program berhenti.
VARIABEL, OPERATOR dan TIPE DATA
VARIABEL Tempat menyimpan nilai yang isinya berubah sesuai dengan kondisi terkini Berdasarkan caranya, pengisian nilai ke variabel bisa dilakukan secara: Langsung menuliskan langsung nilainya di algoritma/program Tidak Langsung menggunakan simbol/statement pemasukan nilai
Pengisian Nilai ke Variabel Cara langsung Cara tidak langsung Dengan flowchart Dengan statement program harga = 100 Dengan flowchart Dengan statement program cin>>harga Harga <- 100 Masukan harga
Pengisian Nilai ke Variabel Cara langsung Cara tidak langsung { int r; float s; r = 7; s = r/2 Cout<< s; } { int r; float s; cin>>r; s = r/2 Cout<< s; }
Nilai variabel Berupa: 1. Konstanta 2. Nilai dari variable lain Contoh : A = 100 2. Nilai dari variable lain Contoh: A = 100; B = A; 3. Hasil evaluasi ekspresi Contoh: A = B * C Ekspresi adalah kalimat matematika yang terdiri dari operand dan operator
OPERATOR Macam operator dasar: Aritmatika (+, -, *, /, %, pow) Relational/perbandingan(<, >, =, <=, >=, <>, ) Logika/Boolean not , notasi dalam C++ ! Or, notasi dalam C++ || And, notasi dalam C++ &&
Dilihat dari jumlah operand yang dibutuhkan: Unary/uner membutuhkan 1 operand contoh operator ! dan - Binary/biner membutuhkan 2 operand
OPERATOR OPERAND HASIL Aritmatika Integer atau float Relational Logika Logika (boolean)
NAMA TIPE NILAI OPERASI Bilangan bulat (integer) Bilangan bulat + dan - Aritmatika Relasional Bilangan desimal (float) Bilangan desimal + dan - Logika (boolean) True dan False Logika Karakter (char) Alfanumerik dan simbol String Kumpulan karakter (string)
` A B not A A or B A and B T F
Operator logika (boolean) Not (!): untuk membalik nilai Contoh { typedef enum {false = 0, true = 1} Bool; Bool S, T; S = true; T = !S; maka nilai T = false cout<<S; cout<<T; }
Or (||): jika kedua input false maka output false jika salah satu input true maka output true Contoh typedef enum {false = 0, true = 1} Bool; Bool R, S, T; S = true; T = true; R = S || T maka nilai R = true cout<<R;
And (&&): jika kedua operand true maka output true jika salah satu operand false maka output false Contoh typedef enum {false = 0, true = 1} Bool; Bool R, S, T; S = true; T = false; R = S && T maka nilai R = false cout<<R;
Latihan Buat program untuk menghitung nilai mahasiswa dimana nilai total adalah jumlah hadir, 20% nilai tugas, 35% nilai uts, dan 45% nilai uas, dengan tampilan: NIM = 12345 NAMA = jokowaw MATA KULIAH = algoritma NILAI TUGAS = NILAI UTS = NILAI UAS = NILAI TOTAL =
STRUKTUR KEPUTUSAN (DECISION)
1. SATU KONDISI SATU AKSI Jika seleksi kondisi/syarat terpenuhi (benar) maka aksi dilakukan, jika kondisi tidak terpenuhi (salah) maka selesai y t aksi
Dengan Statement program Menggunakan struktur if If (kondisi) aksi Ekspresi kondisi harus menghasilkan nilai logika (boolean)
2. SATU KONDISI DUA AKSI Jika seleksi kondisi terpenuhi (benar) maka aksi dilakukan, jika kondisi tidak terpenuhi (salah) maka aksi lain dilakukan y t kondisi Aksi 1 aksi 2
Dengan Statement program Menggunakan struktur if-else If (kondisi) aksi 1 else aksi 2
3. BANYAK KONDISI BANYAK AKSI Memiliki banyak kondisi dan aksi kondisi1 Aksi 1 kondisi2 kondisi3 Aksi 4 Aksi 3 Aksi 2
Dengan Statement program (if) If (kondisi 1) aksi 1 else if (kondisi 2) aksi 2 else if (kondisi 3) aksi 3 …
Dengan Statement Program (Switch Case) Switch (nama variabel/ekspresi) { Case nilai konstanta 1 : aksi 1; break; Case nilai konstanta 2: aksi 2; break; Case nilai konstanta 3 : aksi 3; break; Default : aksi n;break; } nilai konstanta harus berupa nilai ordinal
Latihan membuat Algoritma 1. Tebak huruf Masukan sebuah huruf Jika huruf sama dengan huruf yang ditebak maka tampikan kata “Tebakan anda benar” Jika huruf tidak sama dengan huruf yang ditebak maka tampikan kata “Tebakan anda salah”
Latihan membuat Algoritma 2. Menentukan bilangan GENAP dan GANJIL Masukan sebuah bilangan Jika bilangan habis dibagi 2 maka tampilkan kata “Bilangan genap” Selain itu maka tampilkan kata “Bilangan genap”
Sruktur Dasar Algoritma Sequence/urutan/runtunan instruksi dikerjakan dari atas ke bawah secara berurutan Condition/Decision/selection/branching/keputusan/pemilihan/percabangan/bersyarat Looping/repetition/iteration/perulangan For While Do-while
Struktur Perulangan (For) For menaik/positif for (nilai awal; syarat perulangan; naik cacahan) { aksi } For menurun/negatif for (nilai awal; syarat perulangan; turun cacahan)
Contoh penggunaan for dalam C For menaik/positif For menurun/negatif int i; for (i=1;i<=5;i++) { printf("algoritma\n"); } int i; for (i=5;i>=1;i--) { printf("algoritma\n"); }
For bersarang (nested for) int i,j; for (i=1;i<=2;i++) { for (j=1;j<=3;j++) printf(”%d \n”, i); }
Struktur Perulangan (while) int i=1; while (i<5) { printf("algoritma\n"); i++; } int i=5; while (i>1) { printf("algoritma\n"); i--; }
Struktur Perulangan (do-while) int i=1; do { printf("algoritma\n"); i++; } while (i<5);
Latihan Menampilkan bilangan mulai dari angka 11 sampai 20 Menampilkan angka 10, 20, 30, 40, 50 Menampilkan 10 bilangan ganjil mulai dari 7
Pertemuan 8 Array
LARIK ATAU ARRAY adalah tipe terstruktur yang terdiri dari sejumlah komponen yang mempunyai tipe data yang sama (homogen) Variabel Array terdiri dari : Array Berdimensi Satu Array Berdimensi Banyak
Array Berdimensi Satu Bentuk Umum : Tipe_data nama variabel [indeks] Contoh: Var float data [10] jumlah elemen nama variabel tipe data
2. Array Berdimensi dua Bentuk Umum : Tipe_data nama variabel [indeks1] [indeks2] Contoh: Var float data [5][6] jumlah elemen baris dan kolom nama variabel tipe data
Latihan Diberikan matriks A sebagai berikut : 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 Perintah pokok yg digunakan pd pengisian matriks A adalah : A[i,j] = 1, jika i <=j , A[i,j] = 0, jika i > j
1. Diberikan matriks A sebagai berikut : 1 2 3 4 0 2 3 4 0 0 3 4 0 0 0 4 Perintah pokok yg digunakan pd pengisian matriks A adalah :
2. Diberikan matriks A sebagai berikut : 1 0 0 0 2 2 0 0 3 3 3 0 4 4 4 4 Perintah pokok yg digunakan pd pengisian matriks A adalah .
Pertemuan 9 RECORD
RECORD adalah tipe terstruktur yang terdiri dari sejumlah bidang (field) yang mempunyai tipe yang berbeda (heterogen).
Bentuk Umum : struct { tipedata1 field 1; tipedata2 field 2 ; tipedata3 field 3; … tipedata-n field n; } nama variabel ;
Record (Struct) struct { int nim; float nilai; } dt; dt.nim = 123; dt.nilai = 92.8; printf ("%d\n", dt.nim); printf ("%f\n", dt.nilai);
PARAMETER
Fungsi tanpa parameter void hitung() { int a=6,b=5,c; c=a*b; printf("%d \n",c); } main() hitung(); } int hitung() { int a=6,b=5; return a*b; } main() printf("%d \n", hitung());
Fungsi dengan parameter void hitung(int a,int b) { int c; c=a*b; printf("%d \n", c); } main() int a=6,b=5; hitung(a,b); int hitung(int a) { int b=6; return a*b; } main() { int a=6; printf("%d \n", hitung(a));
Parameter Ketika procedure atau function dipanggil, kita dapat melewatkan suatu nilai ke dalam function atau procedure tersebut. Nilai yang dilewatkan disebut juga argument atau parameter. Ada dua cara melewatkan nilai, yaitu: Passing by Value (Dilewatkan secara nilai) parameter input 2. Passing by Reference parameter input/output
Parameter (lanjutan) Variabel dalam subprogram: Variabel lokal Variabel yang terdapat dalam subprogram yang nilainya hanya berlaku di subprogram itu saja 2. Variabel global Variabel yang terdapat dalam program utama yang nilainya berlaku di seluruh bagian program Parameter berdasarkan lokasi: 1. Parameter formal Parameter yang terdapat pada subprogram Parameter aktual Parameter yang disertakan pada waktu pemanggilan
Passing by refference void hitung(int a) { a=a*a; printf("%d\n",a); } main() { int a=5; hitung(a); } void hitung(int a,int c) { int b=5; c=a*b; printf("%d \n",c); } main() int a=6,c; hitung(a,c);
REKURSI Rekursi adalah suatu proses yang bisa memanggil dirinya sendiri. Contoh aplikasi rekursi Fungsi pangkat Faktorial Fibonacci Menara Hanoi
Fungsi Pangkat int pangkat (int x,int n) {if(n==1) return x; else return(x*pangkat(x,n-1)); } main() { int x,y; cout<<"Menghitung x pangkat y "<<endl; cout<<"X : ";cin >> x; cout<<"Y : ";cin >> y; cout<<x<<" Pangkat "<<y<<" = "<<pangkat(x,y)<<endl; }
Faktorial int faktorial(int n) { if (n == 1) return 1; else return n * faktorial (n-1); } main() { int n; printf (“Faktorial = "); scanf ("%d", &n); printf ("hasil = %d\n", faktorial(n)); }
SUBPROGRAM FUNCTION
Fungsi yang tidak mengembalikan nilai main () { hitung(); } void hitung() int a,b=10,c=20; a = b + c; printf ("10 + 20 = %d\n", a);
Fungsi yang mengembalikan nilai main () { printf ("10 + 20 = %d\n", hitung()); } int hitung() int b=10,c=20; return b + c;
Latihan Buat program yang terdiri dari fungsi untuk menghitung luas persegi panjang, fungsi untuk keliling persegi panjang, dan fungsi untuk volume balok
Teknik Pengurutan Sorting
Algoritma selection sort Tentukan bilangan terkecil dari data Tukar bilangan dengan terkecil tersebut dengan bilangan pertama dari data Ulangi langkah 2 sampai data terurut
Algoritma insertion sort Bandingkan data ke-i (i = data ke-2 s/d data ke-n) dengan data sebelumnya (i-1), jika lebih kecil maka data tersebut dapat disisipkan ke data awal sesuai dgn posisi yg seharusnya Lakukan langkah 1 untuk data berikutnya (i = i+1) sampai data terurut
Algoritma Bubble sort Bandingkan data ke-n dengan data sebelumnya (n-1), jika data sebelumnya lebih besar, maka tukar. Jika tidak, maka bandingkan data ke n-1 dengan data ke n-2 dan seterusnya ulangi langkah satu untuk data berikutnya (data kedua dengan ketiga, dst) sampai data terakhir Ulangi langkah 1 dan 2 sampai data terurut optimal
Algoritma Radix Sort Kelompokkan data secara terurut berdasarkan digit terkanan semua data Ulangi langkah satu untuk digit kedua dari kanan dan seterusnya sampai digit terkiri sehingga diperoleh data yang terurut
Searching Pencarian
a. Linear/Sequential Search ( Untuk data a. Linear/Sequential Search ( Untuk data yg belum terurut / yg sudah terurut ) Pencarian yg dimulai dari record-1 diteruskan ke record selanjutnya yaitu record-2, ke-3,..., sampai diperoleh isi record sama dengan informasi yg dicari Algoritma : Tentukan I = 0 X adalah data yang dicari Ketika Nilai (I) <> X Maka Tambahkan I = I +1 Jika i == N Maka Cetak “Pencarian Gagal” ulangi langkah No. 3 sampai Nilai(I) = X
b. Binary Search ( Untuk data yg sudah terurut ) Digunakan mencari sebuah data pd himp.data-data yg tersusun secara urut, yaitu data yg telah diurutkan dr besar ke kecil/sebaliknya. Proses dilaksanakan pertama kali pd bgn tengah dr elemen himpunan, jk data yg dicari ternyata < elemen bagian atasnya, maka pencarian dilakukan dr bagian tengah ke bawah.
Algoritma : 1. Kiri = 1 , kanan = N 2. Ketika kiri <= kanan Maka kerjakan langkah No .3, Jika tidak Maka kerjakan langkah No.7 3. Tentukan Nilai Tengah dengan rumus tengah = (kiri+ kanan ) / 2 4. Jika X < Nil. Tengah Maka kanan = tengah – 1 5. Jika X > Nil. Tengah Maka kiri = tengah + 1 6. Jika X == Nil. Tengah Maka Nil. Tengah = Nil. Yg dicari 7. Jika X > Maka Pencarian GAGAL
Latihan 1. Buat program dengan linier search untuk menampilkan data [0] = data [1] = data [2] = data [3] = data [4] = Nilai yang dicari: 9 ditemukan, ada 2 di posisi 2 dan 3