Bagian 5 FUNGSI ARRAY STRING POINTER DAN STRUCTURE
Bagian 5 FUNGSI, ARRAY, STRING, POINTER, DAN STRUCTURE
Fungsi Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Selanjutnya nama ini dapat dipanggil beberapa kali di beberapa tempat dalam program. Tujuan pembuatan fungsi adalah memudahkan dalam mengembangkan program dan menghemat ukuran program, terutama bila ada beberapa deretan instruksi yang sama digunakan pada beberapa tempat dalam program. Seperti contoh berikut: #include <iostream. h> #include <conio. h> void garis(); //prototipe fungsi void main() { clrscr(); garis(); cout<<"Program Percobaan fungsi"<<endl; garis(); cout<<"Fungsi digunakan untuk menghemat program. "<<endl; cout<<"Fungsi dapat dipanggil berkali-kali dalam program"<<endl; garis(); getch(); }
void garis() { for(int i=1; i<=50; i++) { cout<<"-"; } cout<<endl; } Fungsi main() Program C++ tidak dapat dipisahkan dari fungsi karena fungsi adalah satu dasar penyusun blok pada C++. Sebuah program C++ minimal mengandung sebuah fungsi yaitu fungsi main(). Fungsi ini menjadi awal dan akhir eksekusi program C++. main adalah nama judul fungsi. Dimulai dari tanda { sampai dengan } disebut tubuh fungsi, atau semua yang terletak didalam tanda {} disebut blok. Tanda () digunakan untuk mengapit argumen fungsi, yaitu nilai yang akan dilewatkan ke fungsi. Kata void yang mendahului main() dipakai untuk menyatakan bahwa fungsi ini tidak mempunyai nilai balik (return value). Di dalam tanda {} bisa terkandung sejumlah unit yang disebut pernyataan (statement).
Pernyataan Pada baris : cout<<“Hai. Selamat belajar C++”; Baris tersebut merupakan sebuah pernyataan yang digunakan untuk menampilkan tulisan yang terletak pada sepasang tanda petik ganda ke layar. Tulisan yang terletak pada sepasang tanda petik ganda disebut string. Setiap pernyataan harus diakhiri dengan tanda titik koma (; ). Tanda << merupakan operator yang disebut operator “penyisipan / peletakan”. cout<<“Hai. Selamat belajar C++”; Operator ini mengarahkan operand (data) yang di sebelah kanannya ke obyek yang dikirinya. Pada contoh diatas, string “Hai. Selamat belajar C++” diarahkan ke cout yang memberikan hasil berupa tampilan string tersebut ke layar. Contoh 2 : #include<stdio. h> void main(){ int a, b, c; int hitung (int x, int y); printf(“Masukkan nilai a : ”); scanf(“%d”, &a); printf(“Masukkan nilai b : ”); scanf(“%d”, &b); c=hitung(a, b); printf(“%d+%d =%d”, a, b, c); } int hitung(int x, int y) { int z; z=x+y; return(z); }
Deklarasi fungsi boleh sebelum dan setelah fungsi main() Contoh 2 : #include <stdio. h> #include <conio. h> void tukar(int *a, int *b) { int temp; temp=*a; *a=*b; *b=temp; } void main() { clrscr(); int x, y; printf(“Masukkan Nilai X : ”); scanf(“%d”, &x); printf(“Masukkan Nilai Y : ”); scanf(“%d”, &y); printf("n. Nilai x dan y semula"); printf("nx = %d y = %d", x, y); tukar(&x, &y); printf("n. Nilai x dan y kemudian"); printf("nx = %d y = %d", x, y); getch(); }
Pointer, Array dan String Pointer • Merupakan variabel yang fungsinya menyimpan alamat (address) variabel • Fasilitas untuk mengakses suatu variabel dengan memakai adress Kegunaan • Calling by reference • Mengembalikan lebih satu nilai dari satu fungsi • Mengirimkan array dan string dari suatu fungsi ke fungsi lain • Memudahkan dalam manipulasi array • Manipulasi memory dalam system • Membuat struktur data dinamis seperti linklist, tree, graph dan sebagainya Deklarasi pointer <tipe_data> *<nama_variabel> Contoh : int *ptr. A; ptr. A adalah variabel pointer untuk tipe data integer
Jika misalnya variabel A berisi nilai 23, dan ptr. A menunjuk variabel A yang merupakan representasi alamat memory nomor 2, maka hal tersebut dapat diilustrasikan seperti berikut : ptr. A 1 2 3 (A) 4 5 6 Alamat memory 23 Prosesnya dalam kode C dapat dituliskan seperti berikut : Int A; Int *ptr. A; A=23; ptr. A=&A; Jadi operator * digunakan untuk menyatakan isi (content of) pointer, sedangkan operator & digunakan untuk menyatakan alamat memory (adress of) variabel. Jika ingin meng-akses (mencetak) nilai 23 (isi memory) melalui variabel biasa, maka perintahnya adalah : Printf(“%d”, A); Jika ingin meng-akses (mencetak) nilai 23 (isi memory) melalui pointer, maka perintahnya adalah : Printf(“%d”, *ptr. A);
Percobaan pointer • Coba program berikut dan amati untuk memahami kode pemrograman pointer : /* Nama File : pointer. c */ #include <stdio. h> #include <conio. h> void main() { int A; //deklarasi var biasa int *ptr. A; //deklarasi var pointer clrscr(); A=23; ptr. A=&A; printf("n A = %d", A); //isi dari var A printf("n&A = %u", &A); //alamat memory var A printf("n*(&A) = %u", *(&A)); //isi di alamat pada var A printf("nptr. A = %u", ptr. A); //isi dari var pointer ptr. A printf("n*ptr. A = %d", *ptr. A); //isi di alamat pada var ptr. A printf("n&ptr. A = %u", &ptr. A); //alamat memory var ptr. A getch(); }
• Contoh program penerapan pointer untuk argumen fungsi call by reference : /*Nama File : tukar 2. c Prinsip Call by reference Oleh : */ #include <stdio. h> #include <conio. h> void tukar(int *a, int *b) { int temp; temp=*a; *a=*b; *b=temp; } void main(){ clrscr(); int x=3, y=5; printf("n. Nilai x dan y semula"); printf("nx = %d y = %d", x, y); tukar(&x, &y); printf("n. Nilai x dan y kemudian"); printf("nx = %d y = %d", x, y); getch(); }
Array • Array adalah suatu variabel yang dapat menyimpan beberapa item data yang tipenya sama • Deklarasi array : Format : <tipe_data> <nama_variabel>[exp 1][exp 2][…] Contoh : int bulan[12]; float harga[50], barang[50]; char nama[20]; • Indeks awal array dimulai dari 0 sehingga variabel bulan di atas terdiri dari bulan[0] s/d bulan[11]. • Nilai array dapat langsung diinisial seperti contoh berikut : int A[5] = {15, 34, 32, 11}; artinya : mendeklarasikan A sebagai variabel array sekaligus memberikan nilai 15 ke A[0], 24 ke A[1], 32 ke A[2], 12 ke A[3], 11 ke A[4].
#include <conio. h> #include <stdio. h> void main() { int a; int b[4]; for (a=0; a<4; a++) { printf("Masukkan nilai B[%d] : “, a); scanf("%d", &b[a]); } for (a=0; a<4; a++) { printf("n. NIlai B[%d} adalah : %d", a, b[a]); } getch(); }
Array untuk mencari bilangan terbesar dari sederet bilangan #include<iostream. h> #include<conio. h> void main() { int data[10]; int elemen, a; int maks=0; clrscr(); //entri 10 data for(elemen=0; elemen<=9; elemen++) { cout<<"Data ke - "<<elemen; cout<<" = "; cin>>data[elemen]; } //tampilkan data setelah entri for(elemen=0; elemen<=9; elemen++ ) { if (maks<data[elemen]) { maks=data[elemen]; a=elemen; } } cout<<"n. Data Terbesar adalah data yang ke - "<<a<<" = "<<maks; getch(); }
Contoh program untuk menguji array dan looping dengan for : /* Nama File : acak. c */ #include <stdio. h> #include <stdlib. h> void main() { int acak[5][5][5]; int i, j, k; /*Harga awal untuk fungsi random*/ srand(1234); for (i=0; i<5; i++) { for(j=0; j<5; j++) { for(k=0; k<5; k++) { acak[i][j][k]=rand(); printf("n Acak[%d][%d] = %d", i, j, k, acak[i][j][k]); } } Latihan : ubah kontrol pengulangan for pada kode program di atas dengan while !
Contoh : … //called function int maksimum(int d[], maks) { … } void main() { int dat[10]; … //Calling function Hasil=maksimum(dat, n); } Latihan : Lengkapi kode program tersebut yang tujuannya mencari nilai maksimum dari sekelompok nilai yang dimasukkan melalui keyboard Lanjut • Pada fungsi sebagai argumen formal array hanya diberi tanda [] saja tanpa diberi indeks, sedangkan sebagai argumen aktual array yang disebut namanya saja tanpa []. Array dan fungsi
Array dan pointer • Nama array adalah alamat memory (pointer) pertama dari elemen array tersebut. Jika A adalah array berdimensi satu maka alamat memory dari elemen pertama adalah &A[0] atau A saja. Sehingga &A[i] sama dengan (A+i). Maka A[i] pun sama dengan *(A+i) • Berikut contoh program tentang bagaimana mengakses data array menggunakan konsep pointer : /* Nama file : p_array. c */ #include <stdio. h> #include <conio. h> void main() { int Nilai[5]={55, 75, 60, 90, 80}; clrscr(); for(int i=0; i<5; i++) { //akses dengan indeks array printf("n. Nilai[%d] = %d", i, Nilai[i]); //akses dengan pointer printf("n*(Nilai+%d)= %u", i, *(Nilai+i)); } getch() }