Almadani ALGORITMA
Sekilas
Mengenai Algoritma
Algoritma
seperti kata kebanyakan orang, bukanlah sesuatu yang hanya berhubungan
dengan dunia komputer saja.Algoritma juga berlaku dalam kehidupan
sehari-hari.Kali ini saya mau membahas contoh yang mungkin kedengaran tidak
“lazim” digunakan untuk memberi gambaran mengenai algoritma .
Beberapa
contoh sederhana mengenai algoritma yang dapat ditemui dalam kehidupan sehari –
hari misalnya:
1 . Memasak mie instant.
Prosesnya sbb:
memanaskan air, membuka pembungkus mie instant (tentunya), memasukkan mie ke
dalam air, taruh bumbu di piring, angkat mie jika sudah masak, campurkan dengan
bumbu yang sudah ada di piring dengan mie, makan.
2 . Menelepon
Prosesnya sbb:
angkat telepon, tekan nomor teleponnya:
· jika diangkat maka mulai berbicara
setelah selesai tutup teleponnya
· jika tidak diangkat, maka tutup teleponnya
Dan
masih banyak lagi contoh – contoh sederhana mengenai algoritma yang dapat kita
jumpai dalam kehidupan sehari – hari.
Algoritma
Pemrograman
Sekarang
kita mulai membicarakan mengenai algoritma pemrograman.Pertama – tama, akan
saya kutip dulu ciri – ciri dari algoritma seperti yang dipaparkan oleh Donald
E. Knuth:
· Algoritma mempunyai awal dan akhir.
· Setiap langkah harus didefinisikan
dengan tepat sehingga tidak memiliki arti ganda (ambigu).
· Memiliki masukan (input) atau
kondisi awal.
· Memiliki keluaran (output) atau
kondisi akhir.
· Algoritma harus efektif; bila digunakan
benar – benar menyelesaikan persoalan.
Saya
sendiri sebenarnya tidak terlalu setuju dengan hal – hal seperti itu yang
terkesan terlalu membatasi.Karena sebenarnya ada banyak cara untuk menghasilkan
sesuatu tanpa harus mengikuti aturan yang “baku” / satu aturan saja yang
terkesan mengikat, iya kan? Namun jika ada yang mau “bertindak” seperti yang
telah dipaparkan di atas, itu sah – sah saja.
Sekarang,
kita akan melihat beberapa program, mulai dari yang mudah sampai yang cukup
sulit, beserta penjelasannya.
Nilai
Terbesar Dari 3 Buah Bilangan
Untuk
mencari nilai terbesar dari 3 buah bilangan, dalam C++, kode yang saya gunakan
adalah sbb:
#include <iostream>
using namespace std;
void main() {
int a, b, c, d;
cout << "nilai 1:
";
cin >> a;
cout << "nilai 2:
";
cin >> b;
cout << "nilai 3:
";
cin >> d;
c = (a > b ? a : b);
cout << "nilai
terbesar adalah : " << (c > d ? c : d) << "\n";
}
Logika:
Bandingkan nilai
pertama dengan nilai kedua. Kemudian yang lebih besar di antara nilai tersebut
di bandingkan dengan nilai berikutnya (nilai ke tiga), sehingga di dapat nilai
terbesar di antara ketiga variabel tersebut.
Penjelasan kode:
Seperti yang
kita lihat di atas, pertama – tama, kita membuat tiga variabel yaitu, variabel a, b, c, dan d. Kemudian, kita meminta user untuk
memasukkan nilai untuk variabel a, b, dan d. Setelah itu, kita membandingkan
nilai masing – masing variabel. Disini digunakan variabel c sebagai “alat bantu”. Variabel c sendiri menyimpan nilai terbesar
antara variabel a dan b. Kemudian ditampilkan nilai yang
terbesar yang didapat setelah membandingkan variabel c dan d.
Jumlah Deret
Yang
dimaksud dengan jumlah deret di sini adalah misalnya saja yang diminta adalah 3
suku deret. Maka dikalkulasikan menjadi:
1 – 1/3 + 1/5 –
1/ 7
Perhatikan bahwa
dalam proses kalkulasi tersebut tanda + dan – berubah setiap kali dilakukan
proses perhitungan. Baiklah, sekarang kita membahas kodenya:
#include <iostream>
using namespace std;
void main () {
int mp = -1;
double satu = 1, ulang = 3;
int masuk;
cout << "masukan nilai
: ";
cin >> masuk;
for (int ulang2 = 1; ulang2 <=
masuk; ++ulang2) {
satu = satu + ((1 / ulang) * mp);
mp *= -1;
ulang += 2;
}
cout << satu <<
"\n";
}
Logika:
Melakukan
perhitungan dari suku pertama sampai suku ke – n (jumlah suku yang diminta
oleh user). Mungkin yang paling “mengganggu” pemikiran Anda adalah
bagaimana cara untuk membuat tanda + dan minus berubah – ubah setiap kali, kan ?
Padahal itu bisa saja diatasi hanya dengan mengalikan -1
dengan -1 sehingga hasilnya bisa menjadi positif , ya kan ?
Jika sudah begitu, “urusan” berikutnya menjadi beres .
Penjelasan kode:
Kode di atas
juga cukup jelas jika diamati dengan baik. Awalnya kita membuat beberapa “buah”
variabel:
· Yang akan menjadi input bagi
/ dari user, yaitu masuk
· Yang akan “menampung” hasil perhitungan,
yaitu satu
· Yang akan menjadi pembagi dan terus
dinaikkan nilainya, yaitu ulang
· Yang akan “merubah” tanda dan jenis
perhitungan (dari penjumlahan menjadi pengurangan dan sebaliknya), yaitu mp
Kemudian kita
melakukan perulangan dengan menjumlahkan variabel satu yang bernilai 1 (pada awalnya)
dengan hasil dari 1 dibagi dengan variabel ulang dimana nilai awalnya adalah 3, dan
kemudian ditambah 2 untuk setiap perulangan yang dilakukan kemudian dikalikan
dengan variabel mp yang
bernilai -1 pada awalnya sehingga menghasilkan perhitungan: 1 –
(1/3).Variabel mp kemudian
dikalikan dengan -1 untuk menghasilkan nilai positif sehingga pada perhitungan
berikutnya menjadi seperti berikut:
1 – (1/3) + (1/5)
Begitu
seterusnya hingga perhitungan mencapai suku ke – n, dan proses perhitungan pun
dilakukan sekali lagi dan berhenti. Hasilnya kemudian ditunjukkan oleh variabel satu. Jelas sekali, bukan?
Array
Ok,
sekarang, masuk ke “permainan” array. Dalam “permainan” ini, kita akan meminta
user untuk memasukkan nomor stambuk yang terdiri atas 7 angka. Masing -
masing angka (dari nomor stambuk) tersebut akan disimpan dalam sebuah array
yang terdapat variabel a. Nilai dari masing – masing array tersebut akan
dikalikan jika nilai tersebut bukan 0 (nol) dan “disimpan dalam sebuah variabel
sebut saja x.Kemudian dibuat variabel lain sebut saja b yang memiliki 7 array
juga. “Isi” variabel b merupakan hasil dari masing – masing array variabel a
ditambah x. Berikut ini kodenya:
#include <iostream>
using namespace std;
void main() {
int a[7], x = 1;
for (int i = 0; i < 7; ++i) {
cout << "nomor " << i + 1 << ": ";
cin >> a[i];
}
for (int j = 0; j < 7; ++j) {
if (a[j] == 0)
continue;
else {
x *= a[j];
}
}
int b[7];
for (int k = 0; k < 7; ++k) {
b[k] = a[k] + x;
cout << b[k] << "\n";
}
}
Logika:
Dari semua array
(angka – angka) yang ada (sudah dimasukkan), kita melakukan “pencarian”. Jika
array tersebut bernilai 0 (nol) maka, array tersebut kita lewati. Jika array
tersebut bukan bernilai nol (karena itu tentu saja bernilai lebih dari nol,
karena secara logika, tidak ada nomor stambuk yang minus, kan ?),
maka kita kalikan dengan array berikutnya yang juga tidak bernilai nol. Kemudian
setelah itu, kita membuat array lain dari sebuah variabel yang lain (tentunya)
untuk “ditempati” masing – masing oleh hasil dari masing – masing array
variabel yang satunya ditambah dengan hasil perkalian seluruh nilai tadi.
Penjelasan kode:
Pertama – tama,
kita buat sebuah variabel (variabel a) untuk menampung 7 buah array,
lalu variabel x untuk
menampung hasil perkalian seluruh array variabel a. Nilai awal x adalah 1, dengan asumsi bahwa
tidak ada nomor stambuk yang seluruhnya 0 (nol) (karena klo gitu buat apa
dibuatkan nomor stambuk, kan?) sehingga bisa dikalikan dengan seluruh array
variabel a dengan
memiliki kemungkinan nilai terkecil adalah 1. Lakukan perulangan untuk
setiap array variabel a, dengan “menyisipkan” kondisi agar jika
nilai array tersebut adalah 0 (nol) maka dilewati (continue), dan apabila nilainya bukan nol, maka
dikalikan dengan variabel x. Setelah selesai, dibuat variabel baru dengan array yang
sama, yaitu 7. Lalu perulangan dilakukan lagi untuk mengisi semua array tersebut
dengan hasil dari x ditambah dengan masing – masing array variabel a.
Segitiga Siku
- Siku
Gambar
segitiga yang akan dibuat adalah seperti di bawah ini:
*
**
***
****
*****
******
*******
Seperti
yang kita lihat, bahwa terdapat segitiga siku – siku yang dibuat dengan cara
membuat simbol “*” mulai dari satu sampai baris ke – n. Misalnya saja, dengan
contoh di atas, user ingin menampilkan segitiga dengan jumlah
baris 7, maka ditampilkan gambar seperti di atas. Begitu seterusnya. Berikut
adalah contoh kodenya:
#include <iostream>
using namespace std;
void main () {
int segi1;
cout << "";
cin >> segi1;
for (int j = 1; j <= segi1;
++j) {
for (int i = 1; i <= segi1; ++i) {
if (i <= segi1 - j)
cout << " ";
else
cout << "*";
}
cout << "\n";
}
}
Logika:
Bila diamati
baik – baik, akan diketahui bahwa, misalnya, jika ada 7 baris yang diminta,
maka ada 6 buah spasi yang dibuat lalu kemudian dicetak tanda asterisk “*”,
dan pada baris berikutnya ada 5 buah spasi lalu dicetak dua buah tanda asterisk.
Lalu kemudian pada baris berikutnya ada 4 buah spasi, pada baris berikutnya
lagi ada 3 buah spasi, dst. Dapat disimpulkan bahwa jumlah spasi yang dibuat
pada baris pertama adalah:
Total
baris yang diinginkan – 1
Lalu kemudian
pada baris kedua adalah:
Total
baris yang diinginkan – 2
Begitu
seterusnya.
Dengan demikian
diketahui bahwa untuk mecetak spasi menggunakan rumus:
Total
baris yang diinginkan – baris yang akan dicetak
Jadi, misalnya
baris yang sedang “dikerjakan” adalah baris pertama maka, rumusnya menjadi:
total baris yang diinginkan – 1, begitu juga dengan baris kedua menjadi: total
baris yang diinginkan – 2, dst. Jika sudah “melewati” keadaan tersebut, dicetak
“*”.
Penjelasan kode:
Pada kode di
atas, pertama – tama kita membuat sebuah variabel / identifier dengan
nama segi1. Dimana segi1, merupakan input dari user untuk
menentukan berapa banyak baris segitiga yang akan dicetak. Setelah itu,
dilakukan perulangan untuk mencetak banyaknya baris, di sini kita memakai
variabel j. Untuk
mencetak spasi dan tanda “*” sendiri digunakan variabel i, dengan kondisi:
· Jika i lebih kecil atau sama dengan segi1
- j, dicetak spasi
Ini karena
syarat yang telah dikemukakan sebelumnya, jumlah spasi yang dicetak per baris
adalah hasil dari segi1 – j,
dimana j adalah
baris yang aktual (current) pada saat itu.
· Jika i lebih besar dari segi1, maka dicetak tanda “*”.
Sebenarnya, jika
Anda bisa mengamati dengan cukup seksama, maka Anda akan menemukan bahwa kita
selalu mencetak dengan jumlah yang sama. Misalnya jumlah baris yang diinginkan adalah
7, maka sebenarnya dalam setiap baris dari baris pertama sampai baris 7, kita
selalu mencetak sebanyak 7 kali pada setiap barisnya. Hanya saja ada
“variasi”pada setiap barisnya, yaitu jika dengan dikuranginya segi1dengan j, maka denga sendirinya jumlah “*” yang
tercetak akan semakin banyak dan pada akhirnya sama dengan jumlah baris yang
diinginkan. Jadi, cobalah bayangkan bahwa yang kita cetak adalah sebuah persegi
/ persegi panjang dengan gambaran seperti yang telah disebutkan di atas (bisa, kan ? J).
Comments
Post a Comment