Modul V Pemrograman Bahasa C ( bagian II )
5.1 Tujuan Percobaan 1. Mengenal dan memahami fungsi (function) dan kegunaanya serta aplikasinya dalam program sederhana. 2. Mengenal dan memahami fungsi array-larik dan kegunaanya serta aplikasi dalam program sederhana. 3. Mengenal dan memahami struktur (struct) dan kegunaanya serta aplikasi dalam program sederhana. 4. Mengenal dan memahami operasi file dan aplikasinya dalam program sederhana.
5.2 Materi Percobaan I.
Fungsi Fungsi adalah bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan letaknya dipisahkan dari bagian program yang menggunakannya. Fungsifungsi merupakan elemen utama dari program bahasa C. program dari bahasa C dibentuk dari kumpulan fungsi, mulai dari fungsi utama dengan nama main(), fungsi-fungsi pustaka standar, dan fungsi-fungsi yang dibuat sendiri oleh pemrogram. Fungsi dibuat dengan tujuan tertentu, diantaranya 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.
Bentuk umum sebuah fungsi adalah sebagai berikut: tipe_fungsi nama_fungsi(argumen1, argumen2,..){ . . }
Tubuh / isi fungsi
Berikut adalah contoh penggunaan fungsi: #include <stdio.h> void cetakTulisan(void){ printf("Fungsi ini hanya akan menampilkan tulisan ini.\n"); printf("Selamat Mencoba!!"); } int main(){ printf("Ini adalah demo fungsi:\n"); cetakTulisan(); }
Bagian yang bercetak tebal merupakan sebuah fungsi yang bernama cetakTulisan dengan tipe void dan argumennya adalah void (tanpa parameter). Fungsi ini akan menampilkan tulisan yang ada pada perintah printf tersebut. Fungsi ini dipanggil di fungsi utama (main) dengan sintaks: cetakTulisan();. Sehingga jika ingin menampilkan tulisan serupa, kita tidak harus menulis perintah printf dan menuliskan tulisannya, tetapi hanya tinggal memanggil fungsi cetakTulisan();.
1. Fungsi tanpa parameter Fungsi tanpa parameter tidak memiliki parameter (bisa dikatakan juga sebagai data input), dan pada argumennya biasa dituliskan void. Contohnya adalah sebagai berikut: #include <stdio.h> int panjang,lebar,Luas; void cetakLuas(void){ Luas = panjang*lebar; printf("Luasnya adalah %d",Luas); } int main(){ panjang=10; lebar=5; cetakLuas(); }
Pada kode di atas terlihat bahwa fungsi cetakLuas tidak memiliki parameter karena argumennya adalah void.
2. Fungsi dengan parameter Fungsi dengan parameter memiliki argument yang bukan void. Akan tetapi argumennya adalah suatu variable dengan berbagai macam tipe data. Berikut adalah contoh kodenya: #include <stdio.h> void cetakLuas(int panjang, int lebar){ int Luas; Luas = panjang*lebar; printf("Luasnya adalah %d",Luas); } int main(){ int p=10, l=5; cetakLuas(p, l); }
Terlihat bahwa fungsi cetakLuas memiliki bentuk yang berbeda dengan contoh sebelumnya. Dalam contoh ini fungsi cetakLuas memiliki parameter berupa variable panjang dan lebar yang bertipe integer. Sehingga saat fungsi tersebut dipanggil di dalam fungsi main(), maka harus dimasukkan nilai parameter-parameter tersebut (dalam hal ini adalah p dan l).
3. Fungsi dengan return value Pada contoh-contoh sebelumnya, fungsi yang dibuat tidak memiliki nilai kembalian / return value (bisa dikatakan sebagai output fungsi). Hal ini dikarenakan fungsi tersebut bertipe void. Fungsi dapat memiliki tipe selain void seperti: int, float, char, double, dan lain-lain tergantung tipe data yang akan dikembalikan/return. Contoh programnya adalah seperti di bawah: #include <stdio.h> int cetakLuas(int panjang, int lebar){ int Luas; Luas = panjang*lebar; return Luas; }
int main(){ int p=10, l=5, L; L = cetakLuas(p,l); printf("Luasnya adalah %d",L); }
Pada program di atas, tampak bahwa tipe dari fungsi cetakLuas adalah int. Tipe data tersebut dipilih karena data yang dikembalikan juga bertipe int, yaitu Luas. Karena fungsi ini memiliki nilai kembalian (output), maka output tersebut disimpan di variable L saat dipanggil di fungsi main(). Dan hasilnya ditampilkan dengan menuliskan perintah printf di dalam fungsi main().
4. 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 dideklarasikan sebelum fungsi main ditulis hal inilah yang disebut dengan prototipe fungsi. Penulisan prototipe fungsi adalah sebagai berikut. #include <stdio.h> int cetakLuas(int panjang, int lebar); int main(){ int p=10, l=5, L; L = cetakLuas(p,l); printf("Luasnya adalah %d",L); } int cetakLuas(int panjang, int lebar){ int Luas; Luas = panjang*lebar; return Luas; }
Pada contoh di atas, fungsi cetakLuas dideklarasikan terlebih dahulu tanpa tubuh fungsi. Deklarasi fungsi tersebut ditulis sebelum fungsi main(). Baru setelah fungsi main(), ditulis tubuh dari fungsi cetakLuas. Ini merupakan cara kedua untuk membuat suatu fungsi.
II. Array (Larik) Array merupakan koleksi data dengan setiap elemen data menggunakan nama yang samadan masing-masing elemen data bertipe sama. Setiap komponen/elemen array dapat diakses 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 “[ ]”. Array dapat berupa satu dimensi maupun banyak dimensi.
1. Array 1 dimensi Bentuk umunya adalah sebagai berikut : tipe_data nama_array [banyak elemen] misal : 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 penggunaan array adalah sebagai berikut: #include <stdio.h> int main(){ int nilai[4]; //memberi nilai keempat elemen array nilai nilai[0]=2; //array nilai indeks ke 0 bernilai 2 nilai[1]=4; //array nilai indeks ke 1 bernilai 4 nilai[2]=3; //array nilai indeks ke 2 bernilai 3 nilai[3]=7; //array nilai indeks ke 3 bernilai 7 //mencetak masing2 elemen array for(int i=0;i<4;i++){ printf("nilai ke %d adalah %d\n",i,nilai[i]); } }
2. Array multidimensi Array multidimensi merupakan array yang memiliki dimensi lebih dari satu, misalkan array 2 dimensi. Array 2 dimensi (sering disebut matrix), dapat direpresentasikan
sebagai sebuah tabel yang memiliki baris dan kolom. Bentuk array 2 dimensi adalah sebagai berikut: tipe_data nama_array [banyak elemen1][ banyak elemen2] misal : int X[5][3] Pada contoh di atas, array 2 dimensi X dapat dikatakan memiliki baris sebanyak 5 dan kolom sebanyak 3. Sehingga elemen total array X adalah 5x3 = 15 elemen. Jadi ada 15 nilai yang dapat diisikan ke array X. Contoh programnya adalah seperti di bawah: #include <stdio.h> int main(){ int matrik[2][3]; //memberi nilai keenam elemen array nilai matrik[0][0]=1; matrik[0][1]=3; matrik[0][2]=5; matrik[1][0]=4; matrik[1][1]=9; matrik[1][2]=8; //mencetak nilai elemen2 aray for(int i=0;i<2;i++){ for(int j=0;j<3;j++){ printf("matrik[%d][%d] = %d\n",i,j,matrik[i][j]); } } }
3. Array string Pada dasarnya tipe data string merupakan array dari tipe data char. Sehingga untuk membuat array string, maka digunakan array bertipe char 2 dimensi. Berikut contohnya: #include <stdio.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"); } }
III. 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. #include <stdio.h> struct identitas{ char nama[12]; int usia; float tinggi; }; int main() { struct identitas orang; printf("Nama Anda? "); scanf("%s",orang.nama); printf("Usia Anda? "); scanf("%d",&orang.usia); printf("Tinggi Anda? "); scanf("%f",&orang.tinggi);
printf("Nama : %s\n",orang.nama); printf("Usia : %d tahun\n",orang.usia); printf("Tinggi : %.1f",orang.tinggi); }
Pada kode di atas, identitas merupakan tipe data, orang merupakan variable yang bertipe data identitas.
IV. 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”. 1. 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 nama file 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.
2. 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.
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 diatur, apakah akan diganti dengan nama tertentu ataupun membuangnya. Sehingga proses ini juga berlaku untuk mengatur folder.
Contoh Operasi Menulis File #include
#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(); }
Contoh Operasi Membaca File #include #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; }
Contoh Operasi Mengedit dan Menyimpan File #include #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 ; }
Contoh Operasi Menghapus File #include #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 ; }