You are on page 1of 21

BAB VII

DASAR C II

7.1. Fungsi

Fungsi adalah kumpulan baris perintah (blok program) yang di buat untuk melaksanakan
tugas tertentu, yang tujuanya adalah :
1. Program menjadi lebih terstruktur, sehingga mudah untuk dipahami, mencari
kesalahan kode dan dikembangkan lebih lanjut.
2. Untuk mengurangi penulisan kebali kode yang telah dibuat.

Fungsi memerlukan masukan yang dinamakan argumen atau parameter, yang akan
diolah oleh fungsi. Hasil akhir dari sebuah fungsi adalah sebuah nilai berupa nilai
keluaran fungsi.

Seperti halnya main (), fungsi juga memiliki sintaks untuk hasil kembalian kosong
(void) dan hasil kembalian berupa nilai. Sebagai contoh :

Void Tulis10Kali (void) ; maka nilai keluaran yang dikembalikan ke sistem operasi
setelah file selesai di eksekusi adalah kosong atau tidak ada kembalian.

Berbeda dengan : int HitungLuasLingkaran (int x) ; yaitu nilai keluaran yang


dikembalikan ke sistem operasi adalah berupa nilai bertipe data integer. Fungsi jenis ini
sering digunakan untuk proses penghitungan.

Contoh Fungsi
1. Contoh Fungsi
#include <stdio.h>

#include <conio.h>

#define phi 3.14

int alas, tinggi, panjang, lebar, jari_jari;

float luas_segitiga, luas_persegi_panjang, luas_lingkaran;

void segitiga(int a, int b, float *c){

*c= (a*b)/2;

int persegi_panjang(int a, int b){

return a*b;

}
void lingkaran(int a, float *c){

*c=phi*(a*a);

int main ()

luas_segitiga=0;

luas_persegi_panjang=0;

luas_lingkaran=0;

printf("Masukkan alas :\n");

scanf("%d",&alas);

printf("Masukkan tinggi :\n");

scanf("%d",&tinggi);

segitiga (alas, tinggi, &luas_segitiga);

printf("Luas segitiga : %.02f\n\n", luas_segitiga);

printf("Masukkan panjang :\n");

scanf("%d",&panjang);

printf("Masukkan lebar :\n");

scanf("%d",&lebar);

luas_persegi_panjang = persegi_panjang(panjang,lebar);

printf("Luas persegi panjang : %.02f\n\n", luas_persegi_panjang);

printf("Masukkan jari-jari:\n");

scanf("%d",&jari_jari);

lingkaran(jari_jari, &luas_lingkaran);

printf("Luas lingkaran: %.02f\n\n", luas_lingkaran);


getch();

7.1.1. Deklarasi Fungsi

Pendeklarasian Fungsi (fungsi bernilai balik yang banyak digunakan di praktikum ini)
adalah sebagai berikut :

tipe_data NamaFungsi (parameter1, parameter2, ….) {

statemen_yang_akan_dieksekusi;

return nilai_balik

Penggunaan return merupakan fungsi dengan nilai balik tertentu yang nantinya dipakai
untuk proses lain di dalam fungsi utama.

7.1.2. Prototype Fungsi

Secara default sebuah fungsi di dalam bahasa C dideklarasikan/ditulis sebelum fungsi


main. Namun bahasa C memungkinkan pembentukan fungsi setelah fungsi main. Hal ini
dilakukan dengan syarat bahwa fungsi tersebut sudah didefinisikan (judulnya) sebelum
fungsi main ditulis hal inilah yang disebut dengan prototipe fungsi. Penulisan prototipe
fungsi adalah sebagai berikut :

float mengukur_suhu (float suhu); /*contoh prototipe*/

int main (void) {

statemen…statemen

Float mengukur suhu (float suhu) { /*implementasi dari prototype diatas*/


statemen…statemen

Karena prototype merupakan sebuah statemen maka harus diakhiri tanda semicolon.
Prototipe fungsi merupakan statemen, sehingga harus diakhiri dengan semi-colon (;).
Prototipe terdiri dari tipe return value, nama dan daftar parameter (dipisahkan dengan
koma).
Contoh : Float luas(float panjang, float lebar);

Prototipe fungsi dan definisi fungsi harus sama dengan return value, nama dan jenis
parameternya. Jika tidak akan ada pesan kesalahan compile-nya. Prototipe dapat dibuata
tanpa menyertakan nama parameter, jadi hanya tipe parameter saja, misalnya:

Float luas(float,float)

Prototipe ini bisa berjalan dan tidak ada masalah (selama sesuai dengan fungsi yang
didefinisikan ). Meskipun demikian, prototipe samacam ini tidak dianjurkan, karena
dengan memberi nama parameter akan memperjelas fungsi dan mempermudah
penelusuran program.

Contoh Prototipe Fungsi


#include <stdio.h>

#include <conio.h>

int faktorial(int n);

int main (){

int n,hasil;

printf("masukkan nilai yang akan difaktorialkan n = ");

scanf("%d", &n);
hasil=faktorial(n);

printf("hasil pemfaktorial adalah %d! = %d", n, hasil);

getch();

int faktorial(int n){

int nilai_fak=1;

for(int i=1;i<=n;i++)

nilai_fak=nilai_fak*i;

return(nilai_fak);

}
7.1.3. Hasil Balik Fungsi
Suatu fungsi dibuat untuk maksud menyelesaikan tugas tertentu. Suatu fungsi dapat
hanya melakukan suatu tugas saja tanpa memberikan suatu hasil balik atau melakukan
suatu tugas dan kemudian memberikan suatu hasil balik. Fungsi yang hanya melakukan
suatu tugas saja tanpa memberikan hasil balik misalnya adalah fungsi untuk
menampilkan hasil di layar.

          Contoh Hasil Balik Fungsi


#include

void tampil_s_n(char *String, int Jumlah);  //prototype fungsi

main(){

           tampil_s_n(“Bahasa C\n”,3);

void tampil_s_n(char *String, int n){

            int i;

            for(i=1; i<=n; i++) printf(String);

Jika suatu fungsi memberikan hasil balik, maka hasil balik yang diberikan oleh fungsi
dapat dilakukan oleh statemen return yang diikuti oleh nilai hasil baliknya yang ditulis
dalam tanda kurung.

         Contoh:
 Program berikut ini dimaksudkan untuk menghitung n faktorial (n!). Nilai n! adalah
sebesar 1*2*3*…*n dengan n adalah nilai positif. Jika n bernilai negatif atau nol,
maka fungsi Faktorial() di program ini akan memberikan hasil balik 0. Nilai F adalah
nilai hasil balik yang akan diberikan oleh fungsi untuk nilai n positif. Variabel F ini
pertama kali harus diberi nilai awal 1. Jika nilai F mempunyai nilai awal 0, maka
hasilnya akan selalu nol, karena bilangan apapun dikalikan dengan nilai nol
mempunyai hasil nilai nol.
#include

long int Faktorial(int n); //prototype fungsi faktorial

main(){
          int n;

            long int Fak;

            printf(“Berapa Faktorial ?”); scanf(“%d”, &n);

Fak = Faktorial(n);

            printf(“%d faktorial = %d\n”, n, Fak);

long ing Faktorial(int n){

            int i;

            long int F=1;

            if(n<=0)

                return(0);

            for(i=2; i<=n; i++) F*= i; //F*=i sama dengan F = F*i

return (F);

7.1.4. Pengiriman Parameter

7.1.4.1. Pengiriman Parameter Secara Nilai

Nilai dari parameter aktual akan disalin dalam parameter formal, sehingga nilai pada
parameter aktual tidak bisa berubah sekalipun nilai parameter formalnya mengalami
perubahan.

Pada parameter Pass by Value terjadi proses penyalinan (copy) dari parameter formal ke
parameter aktual hal ini menyebabkan variable di dalam fungsi tidak berpengaruh
dengan variable di luar fungsi.

Contoh Fungsi By Values


#include <stdio.h>

int tukar(int, int);


int main()

int a, b;

a = 11, b = 22;

printf("Nilai awal variabel a = %d Nilai awal variabel b = %d \n",a,b);

tukar(a, b);

printf("Nilai setelah pemanggilan fungsi a = %d Nilai b = %d \n",a,b);

gets(0); return(0);

int tukar(int j, int k)

int m;

m = j;

j = k;

k = m;

printf("Nilai di akhir fungsi pindah_pos a = %d Nilai b = %d \n", j , k);

7.1.4.2. Pengiriman Parameter Secara Acuan

Dengan melewatkan alamat dari suatu variabel kedalam fungsi. Dengan cara ini isi dari
sebuah variabel dapat diubah diluar fungsi dengan proses perubahan didalam fungsi.
Pada pass by reference variabel yang digunakan dalam fungsi dimasukan ke dalam suatu
alamat memori tertentu. Sehingga variable dalam fungsi tersebut digunakan untuk
proses proses selanjutnya atau fungsi fungsi selanjutnya. Perubahan nilai di dalam
fungsi, akan berpengaruh pada proses lainya, hal ini dikarenakan acuan untuk proses
selanjutnya adalah nilai dari alamat tertentu yang dihasilkan oleh proses fungsi tersebut.

Contoh Fungsi By References


#include <stdio.h>

int tukar(int *pj, int *pk);


int main()

int a, b;

a = 11, b = 22;

printf("Nilai awal variabel a = %d Nilai awal variabel b = %d \n",a,b);

tukar(&a, &b);

printf("Nilai setelah pemanggilan fungsi a = %d Nilai b = %d \n",a,b);

gets(0); return(0);

int tukar(int *pj, int *pk)

int m;

m = *pj;

*pj = *pk;

*pk = m;

printf("Nilai di akhir fungsi pindah_pos a = %d Nilai b = %d \n", *pj , *pk);

7.2. Array

Array merupakan koleksi data dengan setiap elemen data menggunakan nama yang
sama dan masing-masing elemen data bertipe sama. Setiap komponen/elemen array
dapat iakses dan dibedakan melalui indeks array.

Deklarasi array didahului oleh jenis tipe data dari array yang dikehendaki kemudian
nama variabelnya. Sedangkan jumlah elemen ditulis dalam tanda “[ ]”. Bentuk umunya
adalah sebagai berikut :

tipe_data nama_array [banyak elemen]

Int X[5]
Deklarasi di atas berarti array dengan nama variabel X, memiliki tipe data berupa
integer dan memiliki anggota sebanyak 5 buah.

Perbedaan antara array dan variabel biasa adalah sebuah array bisa menyimpan sejumlah
nilai, sedangkan variabel biasa hanya dihubungkan dengan sebuah nilai saja. Jika
diinginkan jumlah data yang banyak dan memiliki tipe yang sama, maka lebih efisien
jika digunakan tipe array.

Contoh Array
1. Menentukan nilai maksimum dari Array
#include <stdio.h>

#include <conio.h>

int nilai[5];

int i, nilai_terbesar;

int main(){

i=1;

while (i<=5){

printf("Masukkan nilai ke-%d:\n",i);

scanf("%d",&nilai[i]);

i++;

for (i=1 ; i<=5;i++){

if (nilai_terbesar <nilai[i])

nilai_terbesar=nilai[i];

printf("Nilai terbesar dari Array adalah : %d",nilai_terbesar);


getch();

2. Membuat String Array


#include <stdio.h>

#include <conio.h>
int main()

{
int I,J;

char hari[7][7]={

"minggu",

"senin",

"selasa",

"rabu",

"kamis",

"jumat",

"sabtu"

};

for(I=0; I<7; I++) {

for(J=0; J<7; J++)

printf("%c", hari[I][J]);

printf("\n");

}getch();

7.2.1. Array Satu Dimensi

Aray satu dimensi adalah kumpulan elemen-elemen identik yang tersusun dalam satu
baris. 

Contoh Array Satu Dimensi


#include <stdio.h>

#define max 5   /*nilai konstanta*/

main()
{

int x[max];

int j;

printf(“masukan nilai : \n”);

for(j=0; j<max; j++)

printf(“x[%d] = “,j);

scanf(“%d”,&x[j]);

printf(“menampilkan nilai : \n”);

for(j=0; j<max; j++)

printf(“x[%d] = %d\n “,j,x[j]);

#include <stdio.h>
main()

int x[5] = {15,25,35,45,55};

int y[5] = {15};

int z[5] = {15,0,35};

int j;

for(j=0; j<5; j++)

printf(“x[%d] = %2.d, y[%d] = %2.d,  z[%d] =

%2.d\n”,j,x[j],j,y[j],j,z[j]);

7.2.2. Array Dua Dimensi

Aray dua dimensi adalah array yang memiliki dua buah subskrip yaitu baris dan kolom.
Bentuk umum pendeklarasian array dua dimensi :

Tipe_data nama_array [banyak_baris] [banyak_kolom] ;

Contoh Array Dua Dimensi


#include <stdio.h>

#include <conio.h>

int main()
{ int baris, kolom, matriks[3][3];

printf("Input elemen Array : \n");

for(baris=1; baris<=3; baris++)

{ for(kolom=1; kolom<=3; kolom++)

{ printf("matriks[%i][%i]", baris, kolom);

scanf("%i", &matriks[baris][kolom]);

printf("\n");}

printf("Isi array : \n");

for(baris=1; baris<=3; baris++)

{ for(kolom=1; kolom<=3; kolom++)

{ printf("%i ", matriks[baris][kolom]);}

printf("\n");

printf("\n");}

getchar()

7.3. Struct

Struktur merupakan sekumpulan variable yang mungkin terdiri dari beberapa tipe data
berbeda dan dikelompokan dalam satu nama untuk kemudian diakses oleh program.
Tipe data yang dimaksud adalah tipe data dasar termasuk tipe data bentukan seperti
array, pointer, dan juga struktur lain yang telah didefinisikan sebelumnya. Dalam
beberapa bahasa pemrograman lain (misalnya Pascal), struktur sering disebut dengan
istilah rekaman (record).

Kehadiran struktur akan sangat membantu untuk menyederhanakan masalah


dalam pengaturan data yang realtif kompleks, karena dalam struktur kita diizinkan untuk
mengelompokan data-data yang saling berhubungan tersebut ke dalam suatu entitas
yang terpisah. Dalam program-program besar, pendefinisian struktur biasanya dilakukan
dalam unit atau file tersendiri secara terpisah.
Contoh Struct (struktur)

#include <stdio.h>

#include <conio.h>

int main(){

struct identitas

{
char nama[30];

char nim[9];

char asal[30];

data;

identitas mahasiswa[100];

int j;

printf(" jumlah mahasiswa yang akan di input data (maks 100) : ");

scanf("%d", &j);

printf("\n");

printf(" input data mahasiswa \n");

for(int i=1;i<=j;i++)

{
printf("\n Nama : ");

scanf("%s", mahasiswa[i].nama);

printf("\n NIM : ");

scanf("%s", mahasiswa[i].nim);

printf("\n Asal : ");

scanf("%s", mahasiswa[i].asal);

}
printf("\n \n berikut adalah data-data mahasiswa yang telah tersimpan \n \n");

for(int i=1;i<=j;i++)

{
printf("%d. Nama : %s \n", i, mahasiswa[i].nama);

printf(" NIM : %s \n", mahasiswa[i].nim);

printf(" Asal : %s \n \n", mahasiswa[i].asal);

}getch();}

7.4. Operasi File

Merupakan sumber atau tujuan dari data yang dihubungkan dengan disk atau peripheral
lainnya. Standart library stdio.h mendukung text stream dan binary stream.

Text stream adalah urutan baris yang tiap barisnya terdiri dari nol atau lebih karakter
yang diakhiri oleh ‘\n”

Mode dalam Operasi File

Untuk menguhubungkan sebuah file maka terlebih dahulu harus dideklarasikan


penghubung file yaitu fungsi fopen() untuk membuka file dan fclose()yang keduanya
terdapat dalam header <stdio.h>.

Berikut prototipe dari pemanggilan file tersebut :

FILE *fopen (char_*namafile, char_*mode)

Fungsi ini akan mengembalikan pinter ke file apabila proses yang dilakukan berjalan
dengan benar. Sebaliknya, apabila gagal, maka fungsi akan mengembalikan nilai
NULL. Berikut ini beberapa factor yang menyebabkan terjadinya kesalahan dalam
proses pembukaan file :

Nama file yang diisikan tidak valid, misalnya nama file mengandung spasi ataupun
tanda lain.

Membuka file dari disk yang belum disiapkan, misalnya disk belum terformat.

Membuka file yang tidak terdapat di dalam direktori yang dimaksudkan.

Membuka file yang belum terbuat untuk proses pembacaan (mode “r”)
Parameter namafile di atas digunakan untk menunjukan nama file yang akan dibuka
di dalam program. Sedangkan parameter mode digunakan untuk menetukan mode
atau aksi yang akan dilakukan setelah file dibuka. Adapun mode-mode yang telah
didefinisikan untuk fopen dapat dilihat pada tabel berikut :

Mode Keterangan

r File dibuka untuk proses pembacaan (reading). Apabila file belum ada
maka proses gagal dan fungsi fopen () akan mengembalikan nilai
NULL.

w File dibuka untuk proses penulisan (writing). Apabila file belum ada
maka file akan dibuat. Sebaliknya apabila, file yang didefinisikan
sudah ada, maka file tersebut akan dihapus, selanjutnya akan dibuat
file baru (dengan data kosong).

a File akan dibuka untuk proses penambahan data (appending). Apabila


file belum ada maka file akan dibuat. Sebaliknya apabila file telah ada
maka data yang dimasukan ke dalam file akan ditambahkan pada
bagian akhir dari data lama (end of file)

r+ File dibuka untuk proses pembacaan dan penulisan. Apabila file belum
ada maka file akan dibuat. Sebaliknya, apabila file telah ada, maka
data baru akan ditambhkan di bagian awal, yaitu dengan melakukan
penimpaan (overwriting) terhadap data yang sebelumnya telah ada.

w+ File dibuka untuk proses penulisan dan pembacaan. Apabila file belum
ada maka file akan dibuat. Apabila file telah ada makan file tersebut
akan ditimpa (overwriten) dengan file baru.

a+ File dibuka untuk proses pembacaan dan penambahan data. Apabila


file belum ada maka file akan dibuat. Sebaliknya apabila file telah ada
maka data yang dimasukan ke dalam file akan ditambahkan pada
bagian akhir dari data lama (end of file).
Fungsi-Fungsi dalam Operasi File

Berikut fungsi fungsi yang digunakan dalam operasi file :

Fungsi getch ()
Fungsi getch merupakan sebuah proses pembacaan karakter dan menempatkan karakter
di dalam file ke dalam console. Fungsi tersebut hampir sama dengan fungsi getchar,
perbedaanya jika pada getchar adalah membaca input (berupa karakter) dari keyboard ke
dalam program saat running. Sedangkan getc membaca karakter dari dalam file dan
memasukanya dalam running program. Contoh deklarasi getc adalah sebagai berikut :

int getc (FILE *fp);

Fungsi fgets ()
Fungsi ini digunakan untuk membaca suatu baris data yang terdapat di dalam file.
Adapun prototipenya adalah sebagai berikut :

char fgets (char str, int n, FILE *fp);

Fungsi fscanf ()
Fungsi fscanf hampir sama dengan scanf (), yaitu mengambil data dengan format
tertentu.

Perbedaanya fungsi fscanf dilakukan terhadap file sedangkan scanf dilakukan terhadap
data yang dimasukan atau dibaca dari keyboard. Prototipe dari fungsi scanf () adalah
sebagai berikut:

int fscanf (FILE *fp, char *format, …);

Fungsi putc ()
Fungsi putc merupakan kebalikan dari fungsi getc (), yaitu digunakan untuk menuliskan
sebuah karakter ke dalam file. Prototipe fungsi ini adalah sebagai berikut :

int putc (int c, FILE *fp);

Fungsi fputs ()
Fungsi fputs merupakan kebalikan dari fgets, yaitu untuk melakukan penulisan atau
memasukan satu buah baris data ke dalam file. Adapun prototype fputs () adalah sebagai
berikut :

int fputs (char *str, FILE *fp)

Fungsi fprintf ()
Fungsi fprintf merupakan kebalikan dari fscanf (). Fungsi ini digunakan untuk
menuliskan data dengan format tertentu ke dalam file. Prototipenya adalah sebagai
berikut :
int fprintf (FILE *fp, char *format, …);

Fungsi rename ()
Fungsi ini berguna untuk mengubah nama file dari dalam program. Protipe fungsi ini
adalah sebagai berikut :

int rename (const char *oldname, const char *newname );

Fungsi remove ()
Fungsi ini berguna untuk menghapus file. Contoh programnya adalah sebagai berikut :

#include <stdio.h>

int main void () {

int status;

status = remove (“D/PROG/TEST.TXT”);

if (status == 0) {

printf (“File telah terhapus”);

} else {

printf (“Proses penghapusan file gagal”);


}

return 0;}

Fungsi rename dan remove merupakan fungsi dalam manajemen file, berbeda dengan
fungsi fungsi sebelumnya fungsi ini tidak membutuhkan pointer ke file yang akan
dituju.

Fungsi ini hanya mendeteksi nama file kemudian dimenej, apakah akan diganti dengan
nama tertentu ataupun membuangnya. Sehingga proses ini juga berlaku untuk memenej
folder.

Contoh Operasi File


1. Operasi Menulis File
#include <conio.h>

#include <stdio.h>

int main()

{
FILE *fp;

int tekan,a;

char nama_file[20];

while(a=1)

puts("nama file yang diinginkan : ");

gets(nama_file);

if ((fp = fopen(nama_file,"w")) == NULL) {

printf("tidak bisa membuat file %s",nama_file);

return 0;}

printf("\nMasukkan sebarang input ke dalam file %s\n",nama_file);

printf("\ntekan ctrl+z untuk mengakhiri..\nInput : \n");

while ((tekan=getchar()) !=EOF)

putc(tekan,fp);

fclose(fp);

getch();

return 0 ;

break;

}getch();

2. Operasi Membaca File


#include <conio.h>

#include <stdio.h>

int main()

{
FILE *fp;

char c;

char baca[50];

puts("Nama file yang ingin dibaca :");

gets(baca);

if((fp=fopen(baca,"r")) == NULL){

printf("tidak bisa buka file %s", baca);

while((c=getc(fp)) != EOF)

putch(c);

fclose(fp);

return 0;

3. Operasi Mengedit dan Menyimpan File


#include <conio.h>

#include <stdio.h>

int main()

FILE *fp;

char c;
char baca[50];

puts("Nama file yang ingin diedit :");

gets(baca);

if((fp=fopen(baca,"w+")) == NULL){

printf("tidak bisa buka file %s", baca);

}
printf("\nMasukkan editan ke dalam file %s\n",baca);

printf("\ntekan ctrl+z untuk menyimpan..\nEditan : \n");

while ((c=getchar()) !=EOF)

putc(c,fp);

fclose(fp);

getch();

return 0 ;

4. Operasi Menghapus File

#include <conio.h>

#include <stdio.h>

int main()

{ FILE *fp;

int tekan;

char nama[20];

puts("nama file yang ingin dihapus : ");

gets(nama);

remove(nama);

printf("\ntekan ctrl+z untuk mengakhiri penghapusan\n");

while ((tekan=getchar()) !=EOF)

putc(tekan,fp);

getch();

return 0 ;

You might also like