Algoritma & Pemrograman 1
FUNGSI
1.1.Tujuan:
a.
Agar mahasiswa memahami struktur program
b.
Mahasiswa mampu membuat fungsi
1.2.Definisi
Program komputer yang dibuat untuk
menjawab permasalahan umumnya berukuran sangat besar. Pengalaman telah
menunjukkan bahwa cara terbaik untuk mengembangkan dan mengangani program besar
adalah menyusunnya dari potongan-potongan program yang berukuran kecil-kecil
(disebut modul) yang lebih mudah untuk ditangani dibanding program yang terdiri
banyak sekali baris.
Modul program di dalam Bahasa C disebut
Fungsi(function). Program C ditulis
dengan mengkombinasikan fungsi baru yang ditulis oleh pemprogram (programmer-defined function) dengan
fungsi yang telah tersedia di dalam pustakanya (standart library).
Fungsi
merupakan blok dari kode yang dirancang untuk melakukan tugas khusus. Adapun
tujuan dari pembuatan fungsi adalah:
a.
Program
menjadi terstruktur. Program yang besar dapat dipecah menjadi beberapa program
yang lebih kecil, yang setiap satu program kecil tersebut mempunyai tugas
tertentu.
b.
Dapat
mengurangi duplikasi kode.
Fungsi dapat dipanggil dari program atau
fungsi yang lain.
1.3. Dasar Fungsi
Pada umumnya
fungsi memerlukan masukan yang dinamakan argumen atau parameter. Hasil akhir
fungsi akan berupa sebuah nilai (nilai balik fungsi).
Adapun bentuk
umum definisi sebuah fungsi:
Penentu_tipe
nama-fungsi (daftar parameter)
Deklarasi
parameter
{
Tubuh fungsi;
}
Penentu tipe fungsi untuk menentukan
tipe keluaran fungsi yang dapat berupa salah satu tipe data C yang berlaku,
misalnya char atau int. Default tipe fungsi yang tidak disebutkan dianggab
sebagai int.
Sebuah fungsi dapat saja tidak
mengandung parameter. Tentu saja untuk kondisi ini deklarasi parameter juga
tidak ada.
Contoh:
inisialisasi()
{
return (0);
}
Pada fungsi di
atas dapat dijelaskan sebagai berikut:
a.
Penentu
tipe fungsi tidak disebutkan, berarti keluaran yang bertipe int.
b.
Inisialisasi
adalah nama fungsi.
c.
Tanda()
menyatakan bahwa fungsi tidak memiliki parameter.
d.
Tanda
{ dan } merupakan awal dan akhir fungsi
e.
Return(0)
merupakan pernyataan dalam tubuh fungsi.
Sebuah fungsi
cukup didefinisikan sekali tetapi dapat digunakan beberapa kali. Seandainya
tubuh fungsi banyak mengandung pernyataan maka pemakaian fungsi dapat
menghindari duplikasi kode dan menghemat penulisan program maupun kode dalam
memori. Jadi, fungsi merupakan semacam subprogram.
Adapun bentuk
umumnya adlah sebagai berikut:
inisaialisai()
{
Return (0);
}
main()
{
int x, y;
... .. .
x = inisialisasi();
... .. .
y = inisialisai();
}
Misalkan
anda diminta untuk membuat Algoritma dan program untuk menentukan bilangan
terbesar dari 2 buah bilangan yang diketahui dengan menggunakan fungsi, Anda
terlebih dahulu mendeklarasikan fungsi untuk menampung dan membandingkan dua
buah bilangan tersebut.
Adapun algoritma daripermasalahan
diatas adalah sebagai berikut:
1.
Deklarasikan
fungsi untuk menampung dua buah bilangan (bilangan pertama dan bilangan kedua)’
2.
Deklarasikan
fungsi untuk mencari bilangan terbesar.
3.
Tentukan
dua buah bilngan tersebut
4.
Tentukan
sebuah variabel untuk menampung fungsi dari bilangan terbesar.
5.
Sesuai
dengan langkah 1, lakukan pengujian untuk 2 buah bilangan tersebut.
6.
Jika
bilangan pertama lebih besar dari bilangan kedua, dan jawabannya ya maka
bilamagan menjadi bilangan tebesar.
7.
Dari
langkah 6, jika jawabannya tidak, maka bilangan kedua yang menjadi bilangan
tebesar.
8.
Sesuai
langkah 2, cetaklah bilangn terbesar.
Program 2.1. Program contoh
implementasi fungsi
//program:
fungsi.c
#include<stdio.h>
//deklarasi
fungsi
int
FindMax(int n1, int n2);
void
Printmax(int m);
main()
{
int i=5;
int j=7;
int k;
k = FindMax(i,j);
PrintMax(k);
return 0;
}
//definisi
fungsi
int
FindMax(int n1, int n2)
{
if(n1>n2)
{
return n1;
}
else
{
return n2;
}
}
void
PrintMax(int m)
{
printf(“bilangan terbesar adalah: %d\n”,
m);
}
Bila program di atas dijalankan, maka
hasilnya adalah sebagai berikut:
Penjelasan:
Program diatas
adalah cotoh fungsi untuk menampilkan bilangan terbesar diantara 2 buah
bilangan. Dimana sebelum bilangan pertama dengan bilangan kedua dibandingkan,
terlebih dahuulu didefinisikan fungsi yaitu:
int
FindMax(int n1, int n2)
{
if(n1>n2)
{
return n1;
}
else
{
return n2;
}
}
Jika nantinya bilangan pertama waktu
dibandingkan dengan bilangan kedua menghsilkan bilangan terbesar atau angkanya
lebih besar maka bilangan pertama yang terbesar. Sedangkan sebaliknya, kalau
waktu pertama lebih kecil, maka bilangan kedualah yang dicetak. Untuk bilangan
pertama diwakili i yang nilainya 5 dan natinya akan mengisi n1 dan bilangan kedua
yang diwakili j yang nilainya 7 dan natinya akan mengisi n2.
1.4. Rekursi
Fungsi yang
telah dibahas sebeluamnya dipanggil dari bagian lain diluar tubuh fungsi yang
bersangkutan. Fungsi rekursif adalah suatu fungsi yang memanggil dirinya
sendiri, artinya fungsi itu dipanggil di dalam tubuhnya itu sendiri.
Fungsi faktorial, yang menghitung
nilai faktorial dari suatu bilangan bulat positif, merupakan pokok bahasan yang
diselesaikan dengan cara biasa:
int
faktorial(int n)
{
int counter, hasil=1;
for(counter = n; counter>=hasil;
counter--)
hasil *= counter;
return hasil;
}
Fungsi tersebut
menunjukkan bahwa nilai faktorial dihitung menggunakan looping sehingga
melakukan proses sebagai berikut:
hasil
= 1;
hasil
= hasil * n; artinya hasil = n;
hasil
= hasil * (n-1); artinya hasil = n x (n-1);
Demikian
seterusnya sampai n bernilai 1, atau jika dituuliskan sekaligus menjadi:
Faktorial=
n! = n x (n-1) x (n-2) !;
Yang menunjukkan
sifat rekursif dari suatu fungsi, yaitu (n-1)!. Oleh karena itu, fungsi
faktorial yang telah ditulis dalam program C sebelumnya, dapat ditulis kembali
dalam bentuk rekursif sebagai berikut:
int
faktorial(int n)
{
if(n==0)
return 1;
else
return (n * faktorial (n-1));
}
Dari penggalan
program rekursi untuk faktorial bagian atas hasil selengkapanya dapat dilihat
pada keterangan di bawah ini:
Program 3.1. Program contoh rekursi untuk faktorial.
//program:
rekursi.c
#include<stdio.h>
int
faktorial(int n)
{
if(n==1)
return (1);
else
return (n*faktorial(n-1));
}
main()
{
int x;
printf(“mencari
nilai faltorial\n”);
printf(“masukkan
nilai x: “);
scanf(“%d”,
&x);
printf(“nilai
faktorial dari %d = %d\n”, x, faktorial(x));
}
Bila
program diatas dijalankan, maka hasilnya adalah sebagai berikut:
Penjelasan:
Fungsi
tersebut mennunjukkan baahwa nilai faktorial dihitung menggunakan looping
sehingga melakukan proses sebagai berikut:
faktorial
= 1;
faktorial
= 1 * 2 = 2;
faktorial
= 3 * faktorial(2);
=
3 x 2 = 6
faktorial
= 4 * faktorial(3);
= 4 * 6 = 24
1.5. Parameter
Parameter
terbagi atas dua bagian yaitu Parameter
Formal dan Parameter Aktual.
Parameter formal adalah variabel yang ada daftar parameter dalam definisi
fungsi. Parameter aktual adalah parameter yang dapat berupa variabel atau
konstanta maupun ungkapan yang dipakai dalam pemanggilan fungsi.
Adapun
cara melewatkan parameter adalah:
a. Pemanggilan dengan nilai.
b.
Pemanggilan
dengan referensi
Sebagai contoh
perhatikan keterangan berikut ini:
A...x
B...y
Dengan cara ini
nilai parameter aktual tidak dapat
berubah sekalipun nilai parameter formal berubah-ubah sebab x merupakan
salinan dari A dan y salinan dari B.
Pada saat
pemanggilan suatu fungsi, misalnya:
A bernilai 20
maka x juga bernilai 20
B bernilai 30
maka y juga bernilai 30
Selanjutnya
nilai x dan y diproses tetapi nilai A dan B akan tetap.
Pemanggilan dengan referensi
merupakan usaha melewatkan alamat dari suatu variabel ke dalam fungsi. Dengan
pengubahan dilakukan di dalam fungsi untuk mengubah variabel di luar fungsi.
Perhatikan
penggalan program berikut ini:
tukar(int
*px, int *py)
{
int z;
z = *px;
*px = *py;
*py = z;
.....
}
Parameter
aktualnya:
tukar(&a, &b);
Dalam deklarasi
parameternya:
(int *px, int *py)
Dalam hal ini,
px menunjuk variabel a, dan py menunjuk variabel b(* adalah tanda pointer).
Dapat
digambarkan sebagai berikut:
px py
alamat a alamat
b
a b
Apabila
penggalan program tersebut, kita implementasikan pada program hasilnya adalah
sebagai berikut:
Progarm 4.1. Program contoh parameter formal dan aktual.
//program:
parameter.c
#include<stdio.h>
void
tukar(int x, int y);
void
tukar(int px, int py)
{
int z;
z=px;
px=py;
py=z;
printf("nilai di akhir fungsi: px= %d,
py= %d\n\n", px, py);
}
int
main()
{
int a, b;
a=99;
b=11;
printf("nilai sebelum pemanggilan
fungsi: a= %d, b= %d\n", a, b);
tukar(a, b);
printf("nilai sesudah pemanggilan
fungsi: a= %d, b= %d\n", a, b);
}
Bila program dijalankan, hasilnya adalh sebagai
berikut:
Setelah px menunjuk a dan py menunjuk b, proses penukaran isi a dan b dilakukan dengan
cara sebagai berikut:
z=px;
px=py;
py=z;
Dengan melaui
tiga pernyataan diatas a dan nilai b dapat diubah dalam fungsi.
ARRAY
2.1. Tujuan
a.
Mahasiswa
mengenal fungsi Array
b.
Mahasiswa
dapat mendeklarasikan Array
2.2.
Definisi
Array merupakan koleksi data
dimana setiap element memakai nama dan tipe yang sama serta setiap elemen
diakses dengan membedakan indeks array. Berikut adalah contoh variabel bernama c yang mempunyai 5 lokasi memori yang
semuanya bertipe data int.
c[0]
|
-45
|
c[1]
|
6
|
c[2]
|
0
|
c[3]
|
5
|
C[4]
|
1543
|
Masing-masing nilai dalam setiap lokasi mempunyai
identitas berupa nama c dan nomor indeks yang dituliskan di dalam tanda siku
“[ ]” sebagai contoh, 5 adalah nilai
cari c[3].
2.3. deklarasi Array
Variabel array dideklarasikan
dengan mencantumkan tipe data dan nama yang diikuti dengan banyaknya lokasi
memori yang ingin dibuat, dengan demikian deklarasi untuk vaariabel array c
diatas adalah:
int c[5];
Perlu diperhatikan bahwa C secara otomatis akan
menyediakan lokasi memori sesuai dengan yang didkelarasikan, deimana nomor
indeks selaludimulai dari 0. Nilai suatu array juga dapat diinisialisasikan
secara langsung pada saat deklarasi, misalnya:
int
c[7]={-45, 0, 5, 56, 465, 3, 81};
berarti setiap lokasi memori
dari variabel array c langsung diisi dengan nilai yang dituliskan di dalam
tanda kurung kurawal.
Banyaknya lokasi memori dapat secara otomatis disediakan
sesuai banyaknya nilai yang dimasukkan seperti contoh berikut:
int
x[]={24, 5, 7, 89, 65, 24, 62, 12, 98, 3, 1}
Program 3.1.1. Contoh
program array
//program: array.c
#include<stdio.h>
#define SIZE 12
main()
{
int
a[SIZE]= {1, 3, 5, 4, 7, 2, 99, 16, 45, 57, 89, 45};
int
indeks, total= 0;
for(indeks=0; indeks<=SIZE-1; indeks++)
total += a[indeks];
printf("\ntotal setiap elemen array adalah %d", total);
return 0;
}
Bila program diatas
dijalankan, akan muncul hasil:
Total
setiap elemen array 383
POINTER
3.1. Tujuan
a.
Mahasiswa
mengerti tentang pointer dan pengelamatan pada memori
b.
Mahasiswa
mengenal operator pointer
3.2. Definisi
Pointer
adalah variabel yang berisi alamat memori sebagai nilainya dan berbeda dengan
variabel biasa yang berisi nilai tertentu.
Adapun bentuk umum dari
pernyataan variabel pointer dalam C adalah:
Type *variable_name;
Dengan:
a.
Type
adalah tipe dasar pointer
b.
Variable
name adalah variabel komputer
c.
* adalah operator memori yang fungsinya untk
mengembalikan alamatnya pada yang ditentukan oleh operand.
3.3.
Operator Pointer
Ada beberapa operator yang bisa digunakan dalam
pointer. Operator itu adalah: operator alamat yang mengembalika alamat dari
operannya.
Sebagai contoh diasumsikan sebagai berikut:
int y=5;
int *yPtr;
maka pernyataannya:
yPtr=y;
Pernyataan
ini mengandung arti bahwa alamat dari variabel, yang ditunjukkan kepada
variabel pointer lebih jelas pemahamannnya tentang operator pointer.
Program
4.2.1. Contoh program operator
pointer
//program:
pointer2.c
#include<stdio.h>
int
main()
{
int *ptr, num;
ptr =#
*ptr = 100;
printf("%d\n", num);
(*ptr)++;
printf("%d\n", num);
(*ptr)*2;
printf("%d\n", num);
return 0;
}
Bila program dijalankan, maka hasilnya adalah
sebagai berikut: