Diagram alir (en: flowchart) merupakan jenis diagram yang merepresentasikan suatu algoritma, aliran kerja, atau proses, menggunakan berbagai bentuk kotak bermakna tertentu sebagai langkah-langkah dan panah yang menghubungkan kotak-kotak tersebut sebagai arah langkah-langkah [1]. Dapat dikatakan bahwa diagram alir merupakan suatu representasi grafis dari suatu algoritma dengan berbagai keuntungan dan kerugiannya [2]. Dalam mengajarkannya dapat dilakukan dengan per tahap, seperti mulai dulu dengan tugas yang sudah akrab, perluas pengetahuan dengan melibatkan pengambilan keputusan, dan akhir dengan terapkan pada pengenalan pola ke instruksi pengulangan [3]. Setidaknya terdapat enam bentuk kotak standar yang digunakan dan berbagai kotak lainnya [4], yang kadang dinamai berbeda. Untuk membuatnya dapat digunakan aplikasi daring seperti Lucidchart [5] atau luring seperti Visio, yang juga sudah ada versi webnya [6], atau alternatif-alternatif lainnya yang lintas sistem operasi atau hanya menggunakan penjelajah internet [7].
Sebagaimana representasi yang lain, untuk diagram alir terdapat pula keuntungan dan kerugiannya [2].
Sebenarnya, beberapa kesulitan dapat diatasi dengan membuat sub-diagram alir yang modular, sehingga pada diagram alir utama menjadi tidak terlalu rumit.
Terdapat berbagai bentuk standar kotak diagram alir yang digunakan [1, 2, 3, 4], akan tetapi hanya enam bentuk (lima ‘kotak’ dan satu panah) yang digunakan di sini. Keenam bentuk tersebu diberikan pada gambar berikut ini.
Gambar 1. Bentuk standar elemen diagram alir: (a) terminal, (b) proses, (c) keputusan, (d) konektor, (e) masukan/keluaran, dan (f) garis aliran.
Untuk konektor ada yang membedakan konektor pada halaman (on-page) dan ke halaman lain (off-page) dengan memberinya nomor. Di sini akan digunakan bentuk pertama dengan nomor dan tanpa nomor. Bila diberi nomor berarti konektor ke bagian lain, baik pada halaman yang sama ataupun halaman lain, dan bila tanpa nomor berarti titik temu dari lebih satu garis aliran.
Sebagai ilustrasi misalkan terdapat suatu algoritma untuk membandingkan dua bilangan.
Tentukan dua buah bilangan bulat dan bandingkan keduanya, tuliskan hasilnya dalam bentuk kalimat berisikan bilangan pertama lebih besar, lebih kecil, atau sama dengan bilangan kedua.
Algoritma di atas dapat diilustrasikan secara visual, terutama proses pengambilan keputusannya, dalam bentuk diagram alir seperti pada gambar berikut ini.
Gambar 2. Implementasi diagram alir untul algoritma menentukan dua buah bilangan, apakah lebih besar, lebih kecil, atau sama.
Bahasa yang digunakan dalam diagram alir masih berbahasa Inggris, agar konsisten dengan penggunannya dalam pseudocode yang setengah bahasa Inggris dan setengah kode [8].
Suatu program yang mulai rumit dapat dipecah-pecah ke dalam berbagai fungsi, dan hal ini dapat pula dilakukan dengan diagram alir sehingga penggunaan simbol konektor ke halaman lain dapat dihindari. Dalam diagram alir utama, suatu proses yang bersimbol kotak di dalamnya mungkin pula terdapat diagram alir yang menjelaskan bagaimana subproses-subprosesnya dilaksanakan dan saling terhubung. Kotak ini dapat mewakili suatu fungsi yand di dalamnya pun mengandung fungsi-fungsi lain.
Menukar dua bilangan merupakan suatu fungsi yang sering digunakan. Algoritma dapat berbentuk
Ambil dua buah bilangan, tukar nilai keduanya
dan pseudocodenya
GET first
GET second
temp = second
second = first
first = temp
RETURN first and second
yang bentuk diagram alirnya seperti pada gambar di bawah ini.
Gambar 3. Diagram alir untuk menukar dua buah bilangan.
Perhatikan bahwa semua proses pada Gambar 3 bersifat berurutan dan tidak ada yang bercabang atau diulang-ulang.
Iterasi meliputi suatu larik, yang merupakan data berindeks yang akan diolah, juga merupakan suatu fungsi yang sering digunakan. Misalnya suatu algoritma dapat berbentuk
Dalam suatu himpunan bilangan bulat, baca satu-per-satu anggota himpunannya dari awal hingga akhir dan tampilkan
dengan pseudocodenya
GET N numbers
SET i to 1
Read i-th number and show the value
Advance i with 1
IF i ≤ N go to the previous two steps
dan diagram alirnya diberikan pada gambar berikut ini.
Gambar 4. Diagram alir untuk iterasi meliputi suatu himpunan bilangan (larik atau array).
Pada Gambar 4 proses yang diulang-ulang adalah menampilkan bilangan yang nilai indeksnya sesuai dengan nilai $i$ saat itu. Proses ini dapat diganti dengan proses lain, seperti mengolah nilai $i$ melalu suatu fungsi $f(i) \rightarrow i$ atau lainnya.
Dalam suatu larik kita dapat menggeser bilangan terbesar sehingga berada paling kanan atau dengan indeks terbesar. Algoritmanya
Pindahkan bilangan terbesar dalam himpunan bilangan bulat menjadi anggota terakhir
yang salah satu pseudocodenya adalah
GET N numbers
SET i to 1
IF i-th number > (i+1)-th number swap the numbers
Advance i with 1
IF i < N go to the previous two steps
dengan diagram alirnya diberikan pada gambar di bawah ini.
Gambar 5. Diagram alir untuk iterasi meliputi suatu himpunan bilangan (larik atau array) untuk memindahkan bilangan terbesarnya ke akhir larik.
Pada salah satu proses dalam iterasi dalam diagram alir pada Gambar 5 terdapat proses menukarkan dua bilangan yang ditandai dengan lambang $\leftrightarrow$, di mana pembandingan kedua bilangan dilakukan secara implisit di dalamnya, yaitu bila memenuhi kondisi $x_i > x_{i+1}$ maka kedua bilangan ditukar posisinya dalam larik.
Dalam bagian sebelumnya bilangan terbesar dalam larik dicari dan diletakkan paling kanan atau pada bilangan dengan indeks terbesar. Bagaimana bila langkah ini dilakukan lagi pada larik yang sama, akan tetapi tidak untuk semua bilangan tetapi untuk semua bilangan kecuali bilangan terakhir? Apa yang akan diperoleh? Lalu dilanjutkan dengan mengecualikan dua bilangan terakhir dan seterusnya sampai hanya untuk dua bilangan pertama? Ya, akan diperoleh larik dengan urutan bilangan dari kecil ke besar. Algoritmanya
GET N numbers
SET j to N
Process j first numbers to put the largest to the end
Decrease j by 1
IF j > 1 go to the previon two steps
dengan diagram alirnya seperti berikut ini.
Gambar 6. Diagram alir untuk iterasi meliputi suatu himpunan bilangan (larik atau array) untuk mengurutkannya dari kecil ke besar.
Diagram alir pada Gambar 6 memperlihatkan pemanfaatan proses menempatkan bilangan terbesar paling kanan dari suatu himpunan bilangan largest_to_end(x, j)
dengan $j$ adalah jumlah suku pertama yang diolah dari larik x
, atau vektor $\vec{x}$, yang berdimensi $N$ dengan $1 < j \le N$
Gambar 6 dapat disajikan dengan menampilkan bagian-bagian dalamnya sehingga akan diperoleh diagram alir yang kompleks seperti pada Gambar 7.
Gambar 7. Diagram alir mengurutkan bilangan dalam larik dari kecil ke besar dengan detil prosesnya.
Bagian berwarna biru ($\color{#18c}{\blacksquare}$) merupakan proses menukar bilangan, bagian berwarna merah ($\color{#d34}{\blacksquare}$) merupakan proses menempatkan bilangan terbesar pada akhir larik, dan bagian berwarna hijau ($\color{#8b5}{\blacksquare}$) merupakan proses mengurutkan bilangan dari kecil ke besar, serta bagian jingga ($\color{#f92}{\blacksquare}$) merupakan masukan berupa larik dan keluaran berupa larik yang telah diurutkan dari kecil ke besar.
Diagram alir pada Gambar 1 dapat diimplementasikan dalam bahasa pemrograman Python seperti berikut ini.
# 0383-sort-numbers.py
# Example of flowchart implementation in a program
# Sparisoma Viridi | https://github.com/dudung
# 20220121 Create this example program
# Swap two numbers
def swap(a, b):
t = a
a = b
b = t
return a, b
# Put largest number to end
def largest2end(x, N):
for i in range(N-1):
if x[i] > x[i+1]:
x[i], x[i+1] = swap(x[i], x[i+1])
# Sort numbers in an array
def sort(x):
N = len(x)
for i in range(N, 0, -1):
largest2end(x, i)
# Define an array and display it
num = [10, 19, 11, 18, 12, 17, 13, 16, 14, 15]
print(num)
# Sort the array and display it
sort(num)
print(num)
Perhatikan pada kode yang diberikan bahwa fungsi sort
memanggil fungsi largest2end
, dan fungsi largest2end
memanggil fungsi swap
. Kaitan antara fungsi dan diagram alirnya diberikan berikut ini.
Tabel 1. Diagram air dan fungsi implementasinya.
Diagram alir | Fungsi |
---|---|
Gambar 3 | swap |
Gambar 5 | largest2end |
Gambar 6 | sort |
Kode di atas bila dijalankan akan menghasilkan keluaran sebagai berikut ini, dengan baris pertama adalah isi larik awal dan baris kedua adalah isi larik yang telah diurutkan.
[10, 19, 11, 18, 12, 17, 13, 16, 14, 15]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Konfirmasi dapat dilakukan dengan menjalankannya secara daring di OneCompiler 3xqrb4tbp.
Diagram alir dapat digambarkan dengan berbagai piranti lunak luring maupun daring [7]. Di sini digunakan aplikasi daring, dengan untuk sumber dari Gambar 1, 2, 3, 4, 5, 6, dan 7 dapat dilihat pada Lucid flowchart-1.
swap
yang dibuat sebenarnya mubazir dalam Python dan d sini disajikan hanya sebagai ilustrasi. Mengapa?— Sparisoma Viridi (@6unpnp) January 21, 2022