Untuk mencapai suatu tujuan besar , maka tujuan tersebut harus dibagi bagi menjadi
tujuan kecil sampai tujuan kecil itu merupukan tujuan yang dapat dicapai berdasarkan
kondisi dan potensi yang dimiliki saat itu (Al-Khuwarizmi).
Ucapan Al-Khuwarizmi diatas sangat mengena dalam kegiatan memprogram.
Program yang besar lebih sulit dibaca (dimengerti) dan lebih sulit lagi dalam pelacakan
kesalahan atau proses debugging (jika ada). Oleh karena itu , program sebaiknya dibagi
menjadi beberapa upa-progra(subprogram/subroutine) yang lebih kecil dan terstruktur
melakukan fungsi atau komputasi masing masing secara spesifik.
Upa-program yang baik adalh upa-program yang independepen dari program utama
sehingga programnya dapat dirancang tanpa mempertimbangkan konteks dimana ia
digunakan. Dengan kata lain, pemogram tidak perlu mempermasalahkan bagaimana
upaprogram tersebut dilakukan, tetapi cukup memikirkan apa yang ia lakukan.
Teknik pemecahan program menjadi sub-program dinamakan teknik pemrograman
modular (modular programming). Beberapa bahasa pemrograman lain menamakan
pemrograman modular dengan sebutan sub-rutin (subroutine), module , prosedur , atau
fungsi.
CONTOH PEMROGRAMAN MODULAR
/* Program mengecek sebuah palindrom */
#include <stdio.h>
#include <string.h>
main()
{
char a[100],b[100];
printf(Ketik Sesuatu : \n);
gets(a);
strcpy(b,a);
strrev(b);
if(strcmp(a,b)==0)
{
printf(Yang anda inputkan adalah palindrom \n);
}
else
{
}
return 0;
}
Algoritma 1.1 Program pengecekan palindrom
Program di atas dapat kita pecah menjadi dua buah upa-program yang spesifik, yaitu
upa-program untuk membaca character ( a dan b ) , upa-program untuk proses mengcopy
string dan membalikan hasil copy dari string (a ke b), dan upa-program untuk mengecek
kondisi string dan menampilkan hasil pengecekan string yang merupakan palindrom , seperti
di bawah ini :
void Baca (char *a[100])
/* Membaca nilai a */
{
printf(Ketik sesuatu : \n);
gets(a);
}
void Proses(char *a[100], char *b[100])
/* Proses mengcopy dan membalik */
{
strcpy(*a,*b); /* mengcopy char a ke b */
strrev(*b); /* string reverse : membalik char b */
}
void Cek_Tampil(char *a[100], char *b[100])
/* Mengecek string dan Menampilkan */
{
if(strcmp(*a,*b)==0) /* Kondisi membandingkan a dan b
{
printf(Yang anda inputkan adalah palindrom \n);
}
else
{
printf(Yang anda inputkan Bukan palindrome \n);
}
return 0;
}
Algoritma 1.2 Program pengecekan palindrom.
/* Program xyz */
#include <stdio.h>
main()
{
/* Deklarasi */
int A,B,C,D,temp.
/* Algoritma */
...
...
/* Pertukaran nilai a dan b */
temp=A;
A=B;
B=temp;
...
...
...
if(C>D)
{
|
| x
|
|
| x
|
}
...
...
}
Algoritma 1.3 Contoh program yang beberapa kali berisi bagian pertukaran.
Di dalam Algoritma 1.3 diatas ada bagian program yang ditulis berulang kali
keduanya melakukan aktivitas yang sama. Yaitu pertukaran nilai antara dua buah peubah kita
dapat menulis bagian yang ditulis berulangkali tersebut ke dalam satu buah upa-program
yang diberi nama tukar. Upa-program yang bernama tukar diakses dengan memanggilnya dari
dalam program utama Algoritma 1.4.
/* Program xyz */
#include <stdio.h>
void Tukar(int *A, int *B); /*deklarasi subroutine yang digunakan*/
main()
{
/* Deklarasi */
int A,B,C,D, temp;
/* Algoritma */
...
...
/* Pertukaran nilai A dan B */
Tukar(&A, &B);
...
...
...
if(C>D)
{
/* Pertukaran nilai C dan D */
Tukar(&C, &D);
}
...
...
}
void Tukar(int *A, int *B)
/* Mempertukarkan nilai A dan B */
{
/* Deklarasi */
int temp;
(peubah bantu)
/* Algoritma */
temp=A;
A=B;
B=temp;
}
Algoritma 1.4 Contoh program dengan menyatakan bagian pertukaran menjadi subroutine
Tukar.