MODUL 2
FUNGSI DAN STRUCT
2.1 Tujuan Praktikum
1.
Memahami
dan menguasai cara membuat fungsi.
2.
Memahami
dan menguasai cara membuat struct.
2.2 Dasar Teori
a.
Fungsi
pada Bahasa C
Dalam
bahasa pemrograman C dikenal berbagai macam fungsi. Fungsi sendiri adalah
elemen utama karena bahasa C terbentuk atas fungsi-fungsi. Fungsi digunakan
untuk mengerjakan tugas tertentu yang mana definisinya dipisahkan dari program
yang memanggilnya. Dalam satu program minimal mempunyai satu fungsi yaitu
main(). Tujuan pembuatan fungsi adalah agar menghindari bagian yang sama dalam
suatu program dan agar program lebih terstruktur.
Fungsi dapat didefinisikan menjadi 2 yaitu fungsi
pustaka atau fungsi yang telah disediakan oleh header file turbo C sendiri dan
fungsi yang didefinisikan sendiri oleh programmer.
· Fungsi String (header file : string.h)
1. strcpy
-> menyalin nilai variabel string asal ke variabel string tujuan. Format
penulisan : strcpy(string_tujuan,string_asal);
2. strlen ->
menghitung jumlah karakter yang ada dalam suatu string. Format penulisan :
strlen(string);
3. strcat
-> menambahkan string sumber ke bagian akhir dari string tujuan. Format
penulisan : strcat(string_tujuan,string_sumber);
4. strupr
-> merubah seluruh karakter pada string menjadi huruf besar (kapital). Format
penulisan : strupr(string);
5. strlwr
-> merubah seluruh karakter pada string menjadi huruf kecil. Format
penulisan : strlwr(string);
6. strcmp
-> membandingkan nilai dari 2 buah string. Hasil perbandingan berupa nilai
integer dengan nilai (1) Negatif, apabila string 1 lebih kecil dari string 2
(2) Nol, apabila string 1 sama dengan string 2 (3) Positif, apabila string 1
lebih besar dari string 2. Format penulisan : strcmp(string1, string2);
· Fungsi Aritmatika (header file : math.h, stdlib.h)
1. sqrt
-> menghitung akar dari nilai sebuah bilangan. Format penulisan :
sqrt(bilangan);
2. pow ->
menghitung pemangkatan dari nilai sebuah bilangan. Format penulisan :
pow(bilangan, pangkat);
3. sin, cos, tan
-> menghitung nilai sinus, cosinus, tangen dari suatu sudut. Format
penulisan : sin(sudut); cos(sudut); tan(sudut);
4. atof ->
mengkonversi nilai suatu string menjadi nilai float/desimal dengan syarat nilai
string berupa bilangan bulat atau desimal (koma dipisahkan dengan karakter
titik "."). Format penulisan : atof(string);
5. atoi
-> mengkonversi nilai suatu string menjadi nilai integer dengan syarat nilai
string berupa bilangan bulat. Format penulisan : atoi(string);
6. div
-> menghitung hasil pembagian(qout) dan sisa pembagian(rem). Format
penulisan : div(bilX, bilY);
7. max
-> mengambil nilai maksimal/terbesar dari dua buah bilangan. Format
penulisan : max(bil1, bil2);
8. min
-> mengambil nilai miinimum/terkecil dari dua buah bilangan. Format
penulisan : min(bil1, bil2);
Dan masih banyak lagi fungsi-fungsi yang tersedia di bahasa
C. Bagaimana dengan fungsi yang didefinikan sendiri oleh programer? Kita bebas
mendefinikan fungsi serta parameter sesuai dengan tujuan pembuatan fungsi
tersebut. Dengan format penulisan fungsi :
tipe_fungsi nama_fungsi(parameter_fungsi) { statement; }
Sekarang tinggal kita sesuaikan dengan kebutuhan dari program yang kita buat. Kalo memang fungsi sudah disediakan oleh C tidak perlu kita repot-repot mendefinisikan fungsi sendiri. Kalo tidak, ya kita harus mendefinisikan fungsi sendiri sesuai kebutuhan. Yang perlu diingat, tujuan dari pembuatan fungsi adalah memudahkan programmer dalam membangun program.
tipe_fungsi nama_fungsi(parameter_fungsi) { statement; }
Sekarang tinggal kita sesuaikan dengan kebutuhan dari program yang kita buat. Kalo memang fungsi sudah disediakan oleh C tidak perlu kita repot-repot mendefinisikan fungsi sendiri. Kalo tidak, ya kita harus mendefinisikan fungsi sendiri sesuai kebutuhan. Yang perlu diingat, tujuan dari pembuatan fungsi adalah memudahkan programmer dalam membangun program.
b. Memahami Struct pada Bahasa C
Pengenalan
Struct Pada Bahasa C
Sesuai dengan
penamaannya, pengertian struct secara ringkas dan sederhana ialah "sekumpulan
data yang terstruktur". Data yang terstruktur seperti yang gimana? Untuk
menjawab pertanyaan tersebut, mari mencoba menyimak ilustrasi berikut ini.
|
Setiap "manusia"
memiliki nama yang digunakan untuk identitas
pribadinya dalam kehidupan sehari-hari, manusia juga memiliki usia yang digunakan untuk mengetahui sudah berapa lama
masa kelangsungan hidupnya di dunia, dan manusia juga memiliki jenis kelamin sebagai identitas pembeda terhadap sesama
manusia secara biologis.
"Seseorang" adalah manusia. Setiap "pegawai" memiliki NIP sebagai identitas personalitas yang digunakan untuk kebutuhan di lingkungan instansi. Setiap pegawai juga memiliki jabatan sebagai identitas kedudukan pegawai yang bersangkutan dengan jenis pekerjaan yang dilakukan di dalam suatu instansi. "Seseorang" merupakan pegawai di suatu instansi. |
Berdasarkan ilustrasi
di atas, yang perlu diperhatikan bukanlah makna kesuluruhan kalimat yang
disampaikan, tetapi yang terpenting ialah hubungan kata yang bercetak miring
(dengan tanda petik) dengan kata yang ditandai dengan pemberian garis bawah
(Bercetak tebal). Setiap kata yang diberi garis bawah, merupakan
atribut-atribut yang dimiliki oleh "Manusia", "Pegawai",
"Seseorang". Atribut-atribut inilah yang disebut dengan data dan
keterkaitan yang erat diantara atribut-atribut dengan "Manusia" dan
"Pegawai" inilah menjadikan kumpulan data tersebut terstruktur. Untuk
sedikit lebih jelasnya lagi, akan diuraikan di bagian berikut ini.
Menggunakan
Struct Pada Bahasa C
Berdasarkan
uraian diatas, dituliskan bahwa atribut-atribut merupakan sekumpulan data dan
data tersebut memiliki hubungan yang erat terhadap "Manusia",
"Pegawai". Untuk itu, ketika ingin menyimpan sesuatu hal yang
memiliki sekumpulan data terkait didalamnya, saat itulah "struct"
menjadi pilihan satu-satunya. Struct membebaskan pemrogram untuk menyimpan data
yang kompleks, data yang disimpan tidak harus bertipe data yang sama dengan
data lainnya.
Untuk mendeklarasikan sebuah struct, kita dapat
memilih salah satu dari dua metode berikut ini.
Pendeklarasian struct yang pertama (bentuk umum).
|
struct structName {
tipeData namaVariabel; };
|
Sedangkan untuk pendeklarasian cara yang kedua, kita
dapat menggunakan fasilitas typedef untuk memberikan nama samaran (alias name)
kepada struct yang ingin kita deklarasikan dan gunakan nantinya.
|
typedef struct { tipeData
namaVariabel; }structName;
|
Jika
dilihat dari kedua cara pendeklarasian diatas, hanya terdapat sedikit perbedaan
saja, yaitu letak "nama" dari "struct" yang ingin
digunakan. Perbedaan dari kedua cara pendeklarasian tersebut diatas akan lebih terlihat
ketika melakukan perintah yang berhubungan dengan struct tersebut.
Mari kita lihat
langsung contoh dari penggunaan struct dengan bahasa c berikut ini sebagai
implementasi dari penjelasan yang telah diuaraikan di atas.
|
#include
<stdio.h>
struct human {
char nama[25];
int usia;
};
struct pegawai
{
char nip[7];
char
jabatan[16];
struct human
manusia;
};
int main(void)
{
struct pegawai
seseorang = {"010110", "Programmer", {"Seorang
Manusia", 22}};
printf("Pegawai
dengan NIP : %s \nKedudukan : %s \nBernama : %s (%d tahun) \n",
seseorang.nip,
seseorang.jabatan, seseorang.manusia.nama, seseorang.manusia.usia);
return 0;
}
|
Berdasarkan contoh kode program penggunaan
"struct" pada bahasa c di atas, untuk dapat menggunakan data struct
yang telah dideklarasikan, kita harus melakukan deklarasi lengkap di bagian
fungsi "main" struct pegawai
seseorang; . Ini merupakan cara
pendeklarasian metode pertama atau cara pendeklarasian yang umum.
Untuk pendefenisian nilai terhadap
elemen-elemen atau atribut-atribut dari sebuah struct, caranya sama seperti
mendefenisikan elemen-elemen pada sebuah array (larik). Jika masih samar-samar,
postingan mengenai array berikut dapat menyegarkan kembali ingatan mengenai
array.
Mengakses Elemen pada
Struct
Meskipun pendefenisian elemen pada "struct"
itu sama seperti pendefenisian nilai pada array, namun untuk mengakses elemen
pada struct, cara pengaksesan elemen pada array
seseorang[0] tidak bisa
dilakukan. Untuk dapat mengakses elemen pada struct, kita harus menggunakan
notasi tanda "." (titik) diikuti dengan nama atribut yang ingin
diakses (seperti yang terlihat pada contoh kode program diatas). Jika Anda
sudah pernah mempelajari materi "Objek" pada JavaScript, Java, maka
notasi seperti tentu tidak akan terlihat asing lagi.
Mengirimkan Struct ke
Fungsi
Ketika kita memiliki sebuah fungsi untuk menampilkan
data dan kita tidak menggunakan struct dalam hal ini, maka fungsi yang harus
kita deklarasikan adalah seperti berikut ini.
|
void
tampilData(char nama[], int usia, char jabatan[], char nip[]) { //your code
here... }
|
Bagaimana jika data kita lebih banyak lagi? Tentunya
parameter fungsi kita pun akan semakin banyak. Oke, lalu bagaimana dengan
struct? Bagaimana melewatkan struct ke sebuah fungsi? Caranya seperti berikut
ini
|
void
tampilData(struct pegawai person) { //your code here... }
|
Sederhananya,
kita cukup memberikan sebuah "struct" yang ingin dijadikan sebagai
paramater dari sebuah fungsi untuk diproses oleh si fungsi tersebut.
Memperbaharui Nilai
Elemen pada Struct
Sejauh ini, kita sudah mengetahui apa itu struct,
bagaimana dan untuk apa "struct" itu digunakan, bagaimana cara
mendeklarasikan dan pendefenisian setiap elemennya, dan bagaimana cara
melemparkan struct menjadi paramater fungsi. Pada topik yang terakhir ini, kita
akan melihat bagaiamna caranya memperbaharui nilai dari elemen-elemen pada
sebuah struct.
Masih ingat dengan topik bagaimana
bahasa c memperlakukan parameter dari sebuah fungsi? Pada dasarnya, bahasa C
memperlakukan parameter-parameter sebuah fungsi itu sebagai variabel otomatis
yang hanya menyimpan salinan nilai dari variabel yang kita kirimkan ke fungsi
tersebut. Postingan ini mungkin dapat menyegarkan pengetahuan kita kembali
Fungsi pass by value. Oleh karena sifat tersebut, maka kita harus memberikan
alamat keberadaan si struct di dalam memori kepada si fungsi yang ingin kita
gunakan, agar si fungsi dapat mengetahui dimana elemen itu berada dan si fungsi
dapat merubah nilai dari elemen tersebut. Postingan mengenai fungsi pass by
reference mungkin dapat menyegarkan pengetahuan kita juga dalam mendukung
pemahaman pada topik ini.
Berikut
ini merupakan contoh kode program bahasa c dalam memperbaharui nilai dari
elemen-elemen pada sebuah struct.
|
#include
<stdio.h>
#include
<string.h>
typedef struct
{
char tipe[5];
int masaUji;
}machine;
typedef struct
{
char
model[15];
char
warna[10];
char
bahanBakar[15];
machine mesin;
moto;
void
tampilInfo(moto);
void
gantiBahanBakar(moto *);
int main(void)
{
moto mx =
{"Jupiter MX", "Merah", "Pertamax",
{"DOHC", 5}};
tampilInfo(mx);
gantiBahanBakar(&mx);
tampilInfo(mx);
return 0;
}
void
tampilInfo(moto items) {
puts("Moto
Info");
puts("==============================");
printf("Model
: %s (%s)\nBahan Bakar : %s\nTipe Mesin : %s\n"
"Masa Uji
Mesin : %d (tahun)\n",
items.model,
items.warna, items.bahanBakar, items.mesin.tipe, items.mesin.masaUji);
puts("==============================");
}
void
gantiBahanBakar(moto *items) {
printf("Bahan
bakar motor saat ini : %s\n", items->bahanBakar);
printf("Ketikkan
bahan bakar yang ingin digunakan : ");
fgets((*items).bahanBakar,
15, stdin);
items->bahanBakar[strlen(items->bahanBakar)
- 1] = '\0';
}
|
Pada contoh kode program bahasa c di atas, penulis
memanfaatkan fasilitas typedef untuk memberikan nama samaran ("alias
name") untuk tiap struct yang dideklarasikan. Dengan cara ini tentunya
lebih mudah digunakan dan lebih gampang untuk dibaca oleh pengembang siapa
saja. Kita tidak perlu khawatir terhadap proses kompilasi, karena
"compiler" cukup pintar untuk mengetahui data apa yang kita berikan.
Coba perhatikan potongan kode items->bahanBakar dan
(*items).bahanBakar pada contoh
kode program di atas. Kedua cara ini merupakan cara yang dilakukan ketika ingin
mengakses elemen yang dimiliki oleh struct, dengan catatan, sebuah struct yang
dikirimkan ke fungsi adalah "alamat" dari sebuah variabel struct dan
parameter fungsi "harus" merupakan pointer (karena kita akan
berinteraksi dengan alamat memori). Untuk menyegarkan kembali pengetahuan
mengenai pointer, postingan berikut ini mungkin dapat membantu kita dasar
pointer dan aritmatika pointer.
2.3 Pembahasan
Contoh Membuat Fungsi:
|
int pangkatdua(int
bil){
return (bil * bil);
}
#include
<stdio.h>
int main() {
int angka = 5;
printf("Pangkat dua dari %d=%d
\n", angka, pangkatdua(angka));
return 0;
}
|
|
|
Analisis :
Contoh diatas dibuat untuk membuat pangkat dari
variabel bil yang menggunakan type data integer. Return (bil*bil) merupakan pernyataan
yang diberikan untuk memberikan nilai akhir, disini nilai akhirnya merupakan
hasil pangkat dua dari bil. %d merupakan format untuk bilangan bulat.
Contoh Membuat Struct.
|
#include
<stdio.h>>
struct jam {
int H;
int M;
int S;
};
int main() {
struct jam JAM = {14, 39, 30};
printf("Now is = %d, %d, %d
\n", JAM.H, JAM.M, JAM.S);
return 0;
};
|
|
|
Analisis:
Struct adalah kumpulan elemen elemen data yang
digabungkan menjadi satu kesatuan.masing masing elemen data tersebut dikenal
dengan sebutan field. field data tersebut dapat memiliki tipe data yang sama
ataupun berbeda. walaupun field field tersebut berada dalam satu kesatuan,
masing masing field tersebut tetap dapat diakses secara individual. Stuct
diatas digunakan untuk membuat jam, struct jam diatas mencakup variabel H yg
bertipe integer dan merupakan deklarasi jam, M bertipe integer dan merupakan
deklarasi Menit, serta S yang bertipe integer dan merupakan deklarasi dari
detik.
ADT jam.c
|
typedef struct {
int H;
int M;
int S;
} jam;
int IsJValid (int H, int M, int S) {
if (
(H<=23
&& H>=0)
&&
(M<=59 && M>=0)
&&
(S<=59 && S>=0)
)
{
return
1;
} else {
return
0;
}
}
jam MakeJam (int HH, int MM, int SS) {
jam JAM=
{HH,MM,SS};
return
JAM;
}
int GetHour (jam JAM) {
return
JAM.H;
}
int GetMinute (jam JAM) {
return
JAM.M;
}
int GetSecond (jam JAM) {
return
JAM.S;
}
void SetHour (jam JAM, int newHH) {
JAM.H =
newHH;
}
void SetMinute (jam JAM, int newMM) {
JAM.M =
newMM;
}
void SetSecond (jam JAM, int newSS) {
JAM.S =
newSS;
}
#include <stdio.h>
void BacaJam(jam JAM,int HH, int MM, int SS) {
scanf("Masukkan
jam = %d",&JAM.H);
scanf("Masukkan
menit = %d",&JAM.M);
scanf("Masukkan
detik = %d",&JAM.S);
}
#include <stdio.h>
void TulisJam(jam JAM){
printf("Jam
: %2d:%2d:%2d\n, JAM.HH, JAM.MM, JAM.SS");
}
|
Analisis:
Saya tidak menyediakan screenshoot karena program
diatas tidak menggunakan fitur main.
DAFTAR PUSTAKA
·
Blog Kodeprogram. “Memahami struct pada
bahasa c”. 20 Mei 2016. http://kodeprogramcpp.blogspot.co.id/2015/04/memahami-struct-pada-bahasa-c.html
·
Sulastri, Heni.2016. Modul Praktikum
Algoritma & Struktur Data. Tasikmalaya:Teknik Informatika Universitas
Siliwangi
·
Yanuar, rezqi. “Fungsi Pada Bahasa C”. 20
Mei 2016. http://yanuarrezqi.blogspot.co.id/2011/05/fungsi-pada-bahasa-c.html
Komentar
Posting Komentar