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:




Penjelasan:
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 =&num;
    *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:

Subscribe to receive free email updates: