PEMOGRAMAN TERSTRUKTUR

MODUL PEMOGRAMAN TERSTRUKTUR
DENGAN C ++
Oleh
Rusnedi AG, S.Kom
FAKULTAS ILMU KOMPUTER
UNIVERSITAS SUBANG
TAHUN 2010
1
DASAR PEMROGRAMAN C++
A. TUJUAN
1. Menjelaskan tentang beberapa tipe data dasar (jenis dan jangkauannya)
2. Menjelaskan tentang Variabel
3. Menjelaskan tentang konstanta
4. Menjelaskan tentang berbagai jenis operator dan pemakaiannya
Lingkup Materi Pemrograman Terstruktur :
1. Komsep Pemrograman Terstruktur.
Jenis-jenis bahasa pemrograman, Proses penyelesaian masalah
Struktur program dalam C++
2. Variabel dan Tipe Data
3. Instruksi I/O
4. Konstanta
5. Operator aritmatik dan beberapa fungsi built in
6. Percabangan If
Switch
7. Perulangan : While dan Do While
8. Fungsi : dengan return value, tanpa return value
9. Array
10. Character sequence
11. Pointer dan Memori dinamis
12. Tipe struct
13. User defined type (dengan menggunakan tipe yang ada)
Referensi:
1. http://www.cplusplus.com/doc/tutorial
2. http://www.cprogramming.com
3. Pemrograman Terstruktur dengan C++
B. DASAR TEORI
1. Tipe Data Dasar
Data merupakan suatu nilai yang bisa dinyatakan dalam bentuk konstanta atau variabel.
Konstanta menyatakan nilai yang tetap, sedangkan variabel menyatakan nilai yang dapat
diubah-ubah selama eksekusi berlangsung, Data berdasarkan jenisnya dapat dibagi menjadi
lima kelompok, yang dinamakan sebagai tipe data dasar. Kelima tipe data dasar adalah:
 Bilangan bulat (integer)
 Bilangan real presisi-tunggal
2
 Bilangan real presisi-ganda
 Karakter
 Tak-bertipe (void), keterangan lebih lanjut tentang void dijelaskan dalam Bab
Selanjutnya.
Kata-kunci yang berkaitan dengan tipe data dasar secara berurutan di antaranya adalah
int (short int, long int, signed int dan unsigned int), float, double, dan char. Tabel 2-1
memberikan informasi mengenai ukuran memori yang diperlukan dan kawasan dari
masing-masing tipe data dasar.
Tabel 1.Ukuran memori untuk tipe data
Untuk tipe data short int, long int, signed int dan unsigned int, maka ukuran memori yang
diperlukan serta kawasan dari masint-masing tipe data adalah sebagai berikut :
Tabel 2. Ukuran memori untuk tipe data int
Catatan :
 Ukuran dan kawasan dari masing-masing tipe data adalah bergantung pada jenis
mesin yang digunakan (misalnya mesin 16 bit bisa jadi memberikan hasil berbeda
dengan mesin 32 bit).
2 Variabel
2.1 Aturan Pendefinisan Variabel
Aturan penulisan pengenal untuk sebuah variabel, konstanta atau fungsi yang
didefinisikan oleh pemrogram adalah sebagai berikut :
 Pengenal harus diawali dengan huruf (A..Z, a..z) atau karakter garis bawah ( _).
3
 Selanjutnya dapat berupa huruf, digit (0..9) atau karakter garis bawah atau tanda
dollar ($).
 Panjang pengenal boleh lebih dari 31 karakter, tetapi hanya 31 karakter pertama
yang akan dianggap berarti. Pengenal tidak boleh menggunakan nama yang
tergolong sebagai kata-kata cadangan (reserved words) seperti int, if, while
dan sebagainya.
2.2 Mendeklarasikan Variabel
Variabel digunakan dalam program untuk menyimpan suatu nilai, dan nilai yang ada
padanya dapat diubah-ubah selama eksekusi program berlangsung. Variabel yang akan
digunakan dalam program haruslah dideklarasikan terlebih dahulu. Pengertian deklarasi di
sini berarti memesan memori dan menentukan jenis data yang bisa disimpan di dalamnya.
Bentuk umum deklarasi variabel:
Pada pendeklarasian varibel, daftar-variabel dapat berupa sebuah variabel atau
beberapa variabel yang dipisahkan dengan koma.
Contoh:
int var_bulat1;
float var_pecahan1, var_pecahan2;
2.3 Memberikan Nilai ke Variabel
Untuk memberikan nilai ke variabel yang telah dideklarasikan, maka bentuk umum
pernyataan yang digunakan adalah :
Contoh:
int var_bulat = 10;
double var_pecahan = 10.5;
2.4 Inisialisasi Variabel
Adakalanya dalam penulisan program, setelah dideklarasikan, variabel langsung diberi
nilai awal. Sebagai contoh yaitu variabel nilai :
4
int nilai;
nilai = 10;
Dua pernyataan di atas sebenarnya dapat disingkat melalui pendeklarasian yang disertai
penugasan nilai, sebagai berikut :
int nilai= 10;
Cara seperti ini banyak dipakai dalam program C, di samping menghemat penulisan
pernyataan, juga lebih memberikan kejelasan, khususnya untuk variabel yang perlu diberi
nilai awal (diinisialisasi).
3 Konstanta
Konstanta menyatakan nilai yang tetap. Berbeda dengan variabel, suatu konstanta tidak
dideklarasikan. Namun seperti halnya variabel, konstanta juga memiliki tipe. Penulisan
konstanta mempunyai aturan tersendiri, sesuai dengan tipe masing-masing.
1. Konstanta karakter misalnya ditulis dengan diawali dan diakhiri dengan tanda petik
tunggal, contohnya : ‘A’ dan ‘@’.
2. Konstanta integer ditulis dengan tanda mengandung pemisah ribuan dan tak
mengandung bagian pecahan, contohnya : –1 dan 32767.
3. Konstanta real (float dan double) bisa mengandung pecahan (dengan tanda berupa
titik) dan nilainya bisa ditulis dalam bentuk eksponensial (menggunakan tanda e),
contohnya : 27.5f (untuk tipe float) atau 27.5 (untuk tipe double) dan 2.1e+5
(maksudnya 2,1 x 105 ).
4. Konstanta string merupakan deretan karakter yang diawali dan diakhiri dengan
tanda petik-ganda (“), contohnya :“Pemrograman Dasar C”.
4 Operator
Operator merupakan simbol atau karakter yang biasa dilibatkan dalam program untuk
melakukan sesuatu operasi atau manipulasi, seperti menjumlahkan dua buah nilai,
memberikan nilai ke suatu variabel, membandingkan kesamaan dua buah nilai. Sebagian
operator C tergolong sebagai operator binary, yaitu operator yang dikenakan terhadap dua
buah nilai (operand).
Contoh :
a + b
5
Simbol + merupakan operator untuk melakukan operasi penjumlahan dari kedua
operandnya (yaitu a dan b). Karena operator penjumlahan melibatkan dua operator ini
tergolong sebagai operator binary.
-c
Simbol – (minus) juga merupakan operator. Simbol ini termasuk sebagai operator unary,
yaitu operator yang hanya memiliki sebuah operand (yaitu c pada contoh ini).
4.1. Operator Aritmatika
Operator untuk operasi aritmatika yang tergolong sebagai operator binary adalah :
* perkalian
/ pembagian
% sisa pembagian
+ penjumlahan
– pengurangan
Adapun operator yang tergolong sebagai operator unary.
– tanda minus
+ tanda plus
Contoh pemakaian operator aritmatika misalnya untuk memperoleh nilai diskriminan dari
suatu persamaan kuadrat : D = b2 – 4ac
/* File program : diskrim.c
Menghitung diskriminan pers kuadrat ax^2 + bx + c = 0 */
# include
main()
{
float a,b,c,d;
a = 3.0f;
b = 4.0f;
c = 7.0f;
d = b*b-4*a*c;
printf(“Diskriminan =%f\n”,d);
}
Contoh eksekusi :
Diskriminan = -84.000000
Operator yang telah dituliskan di atas, yang perlu diberi penjelasan lebih lanjut adalah
operator sisa pembagian. Beberapa contoh berikut kiranya akan memperjelas makna dari
operator ini .
 Sisa pembagian bilangan 7 dengan 2 adalah 1 (7 % 2  1)
 Sisa pembagian bilangan 6 dengan 2 adalah 0 (6 % 2 0)
6
 Sisa pembagian bilangan 8 dengan 3 adalah 1 (8 % 3 2)
Kegunaan operator ini diantaranya bisa dipakai untuk menentukan suatu bilangan bulat
termasuk ganjil atau genap, berdasarkan logika : “Jika bilangan habis dibagi dua (sisanya nol),
bilangan termasuk genap. Sebaliknya, termasuk ganjil”.
4.2. Operator Penurunan dan Penaikan
Masih berkaitan dengan operasi aritmatika, C menyediakan operator yang disebut sebagai
operator penaikan dan operator penurunan, yaitu :
 ++ operator penaikan
 operator penurunan
Operator penaikan digunakan untuk menaikkan nilai variabel sebesar satu. Penempatan
operator terhadap variabel dapat dilakukan di muka atau di belakangnya, contohnya :
x = x+1;
y = y+1;
Bisa ditulis menjadi :
++x;
–y;
atau :
x++;
y–;
bergantung pada kondisi yang dibutuhkan oleh pemrogram. Di bawah ini adalah contoh yang
akan menunjukkan perbedaan pemakaian dan hasil dari ++x dengan x++ (atau pemakaian
y– dengan –-y).
/* File program : pre_post.c
Contoh penggunaan pre & post Increment operator */
#include
main()
{
int count = 0, loop;
loop = ++count; /* count=count+1; loop=count; */
printf(“loop = %d, count = %d\n”, loop, count);
loop = count++; /* loop=count; count=count+1; */
printf(“loop = %d, count = %d\n”, loop, count);
}
Contoh eksekusi :
loop = 1, count = 1
loop = 1, count = 2
4.3. Prioritas Operator Aritmatika
7
Tabel di bawah ini memberikan penjelasan mengenai prioritas dari masingmasing
operator. Operator yang mempunyai prioritas tinggi akan diutamakan dalam hal pengerjaan
dibandingkan dengan operator yang memiliki prioritas lebih rendah.
Tabel 2.3 Tabel prioritas operator aritmatika dan urutan pengerjaannya
*)
Bentuk unary + dan unary – memiliki prioritas yang lebih tinggi daripada bentuk binary + dan
binary –
4.4. Operator Penugasan
Operator penugasan (assignment operator) digunakan untuk memindahkan nilai dari
suatu ungkapan (expression) ke suatu pengenal. Operator pengerjaan yang umum
digunakan dalam bahasa pemrograman, termasuk bahasa C adalah operator sama dengan.
(=). Contohnya :
fahrenheit = celcius * 1.8 + 32;
Maka ‘=’ adalah operator penugasan yang akan memberikan nilai dari ungkapan : celcius
* 1.8 + 32 kepada variabel fahrenheit.
Bahasa C juga memungkinkan dibentuknya statemen penugasan menggunakan
operator pengerjaan jamak dengan bentuk sebagai berikut :
pengenal1 = pengenal2 = … = ungkapan ;
Misalnya :
a = b = 15;
maka nilai variabel ‘a ‘ akan sama dengan nilai variabel ‘b‘ akan sama dengan 15.
4.5 Operator Kombinasi (Pemendekan)
C menyediakan operator yang dimaksudkan untuk memendekkan penulisan operasi
penugasan semacam
x = x + 2;
y = y * 4;
menjadi
8
x += 2;
y *= 4;
Daftar berikut memberikan seluruh kemungkinan operator kombinasi dalam suatu
pernyataan serta pernyataan padanannya.
Tabel 4. Seluruh kemungkinan operator kombinasi dan padanannya
C. TUGAS PENDAHULUAN
1. Berapakah nilai jawaban yang ditampilkan oleh program di bawah ini :
#include
main()
{
int jawab, hasil;
jawab = 100;
hasil = jawab – 10;
printf(“Jawabannya adalah %d\n”, hasil + 6);
}
9
MATERI 1
A. STRUKTUR PROGRAM
Secara umum struktur program dalam C++ adalah sebagai berikut:
Keterangan :
1. Deklarasi header file diawali dengan #include Titik-titik diisi dengan nama
header file yang ingin digunakan. Header file merupakan suatu fungsi yang
mendukung eksekusi instruksi tertentu dalam C++
2. Deklarasi konstanta (bisa ada bisa tidak)
3. Deklarasi variabel global (bisa ada bisa tidak)
4. Deklarasi fungsi bisa ada bisa tidak. Fungsi juga dapat diletakkan seletah fungsi
main().
5. Deklarasi class (bisa ada bisa tidak)
6. Fungsi utama  harus ada, diawali dengan { dan diakhiri dengan }. Didalamnya
berisi instruksi-instruksi yang nantinya akan dieksekusi berikut deklarasi variabel
(variabel lokal) yang diperlukan.
Beberapa header file yang sering digunakan :
1. iostream.h
Untuk instruksi:
cout<>nama_var;
2. conio.h
Untuk instruksi:
getch();
clrscr();
Instruksi untuk memindah cursor dibaris berikut:
1. ”\n”
2. <<endl;
Menuliskan komentar :
1. //
Jika komentar hanya satu baris
deklarasi header file/preprocessor
deklarasi konstanta
deklarasi var global
deklarasi fungsi
deklarasi class
program utama (fungsi utama)
main() {
…….
……..
}
10
2. /*…..*/
Sangat berguna jika komentar lebih dari satu baris.
C++ bersifar case sensitive  membedakan huruf besar dan huruf kecil, sehingga:
1. instruksi harus ditulis dalam huruf kecil
2. Variabel yang ditulis dengan huruf kecil dan huruf besar berbeda.
Contoh program :
Contoh 1:
//ini contoh pertama
#include
#include
main() {
cout<<"Pemrograman Terstruktur";
getch();
}
Contoh 2:
//ini contoh kedua
#include
#include
main() {
cout<<"Pemrograman Terstruktur";
cout<<"Program D3";
cout<<"Jurusan Manajemen Informatika";
getch();
}
Contoh 3:
//ini contoh ketiga
#include
#include
main() {
cout<<"Pemrograman Terstruktur\n";
cout<<"Program D3\n";
cout<<"Jurusan Manajemen Informatika";
getch();
}
11
Contoh 4 :
//ini contoh keempat
#include
#include
main() {
cout<<"Pemrograman Terstruktur"<<endl;
cout<<"Program D3"<<endl;
cout<<"Jurusan Manajemen Informatika"<<endl;
getch();
}
Contoh 5 :
//ini contoh kelima
/* Pengggunaan \n
untuk mengatur tampilan */
#include
#include
main() {
cout<<"Pemrograman\n Terstruktur\n";
cout<<"\nProgram D3";
cout<<"\nJurusan \nManajemen Informatika";
getch();
}
B. VARIABEL DAN TIPE DATA
Variabel merupakan sarana yang digunakan untuk menyimpan data. Nama variabel
(identifier) bebas, tetapi harus memperhatikan hal-hal sebagai berikut:
1. tidak boleh ada spasinya
2. tidak boleh mengandung operator aritmatik
3. tidak boleh diawali dengan angka
4. tidak boleh merupakan reserved word dalam bahasa pemrograman.
5. mencerminkan data yang akan disimpan.
Macam-macam tipe data :
Name Description Size* Range*
char
Character or small
integer.
1byte
signed: -128 to
127
unsigned: 0 to 255
short int
(short) Short Integer. 2bytes
signed: -32768 to
32767
unsigned: 0 to
65535
12
int Integer. 4bytes
signed: –
2147483648 to
2147483647
unsigned: 0 to
4294967295
long int
(long) Long integer. 4bytes
signed: –
2147483648 to
2147483647
unsigned: 0 to
4294967295
bool
Boolean value. It can
take one of two values:
true or false.
1byte true or false
float Floating point number. 4bytes 3.4e +/- 38 (7
digits)
double
Double precision floating
point number. 8bytes 1.7e +/- 308 (15
digits)
long
double
Long double precision
floating point number.
8bytes 1.7e +/- 308 (15
digits)
wchar_t Wide character. 2bytes 1 wide character
*) http://cplusplus.com/doc/tutorial/variables.html
size dan range tergantung compilernya
Deklarasi variabel
Contoh:
int a;
float b
char n_hrf;
double gaji;
char nama[20];
dsb.
13
Contoh lain:
int a;
int b;
int c;
dapat disingkat penulisannya menjadi:
int a,b,c;
Memberi nilai variabel
1. Inisialisasi (variabel diberi nilai langsung)
Contoh 6:
//a dan c diinisialisasi
#include
#include
main() {
int a;
float c;
a=5;
c=6;
cout<<"Nilai a = "<<a;
cout<<"\nNilai c = "<<c;
getch();
}
Contoh 7:
//a dan c diinisialisasi
#include
#include
main() {
int a;
float c;
a=5.7;
c=6.7;
cout<<"Nilai a = "<<a;
cout<<"\nNilai c = "<<c;
getch();
}
Inisialisasi harus sesuai dengan tipe datanya.
Contoh 8:
//cara lain untuk inisialisasi
#include
#include
main() {
int a=5;
float c=6;
cout<<"\nNilai a = "<<a;
cout<<"\nNilai c = "<<c;
getch();
}
14
Contoh 9:
//inisialisasi untuk variable yang nilainya sama
#include
#include
main() {
int a,b,c;
a=b=c=5;
cout<<"\nNilai a = "<<a;
cout<<"\nNilai b = "<<b;
cout<<"\nNilai c = "<>
Contoh 10:
//input data dengan cin>>
#include
#include
main() {
int a;
float c;
cin>>a;
cin>>c;
cout<<"\nNilai a = "<<a;
cout<<"\nNilai c = "<<c;
getch();
}
Contoh 11:
//input dengan tambahan instruksi cout<<
#include
#include
main() {
int a;
float c;
cout<>a;
cout<>c;
cout<<"\nNilai a = "<<a;
cout<<"\nNilai c = "<<c;
getch();
}
3. Proses
Cth: adanya operator aritmatik (+,-,*,/)
Contoh 12:
//penggunaan operator +
#include
#include
main() {
int a,b,c;
a=6; b=7;
c=a+b;
cout<<"\nNilai a = "<<a;
cout<<"\nNilai b = "<<b;
cout<<"\nNilai c = "<<c;
getch();
}
15
MATERI II
DEKLARASI KONSTANTA DAN OPERATOR ARITMATIK
Kompetensi Dasar:
Dapat menggunakan deklarasi konstanta dan operator aritmatik dalam program.
Indikator Kompetensi:
1. Dapat mendeklarasikan konstanta.
2. Dapat menuliskan ekspresi aritmatik dengan benar, berikut pemilihan tipe data
yang benar.
3. Dapat menggunakan operator gabungan dan ekspresi increasing dan decreasing.
4. Dapat melakukan type casting dalam suatu ekspresi aritmatik
5. Mengaplikasikan konstanta dan operator aritmatik dalam program.
A. Deklarasi konstanta
Ada dua cara untuk mendeklarasikan konstanta:
1. Setelah deklarasi header file dengan menggunakan #define
Contoh 1:
//contoh deklarasi konstanta 1
#include
#include
#define phi 3.14
#define r1 3
#define r2 10.7
#define kar ‘A’
#define teks “Contoh deklarasi konstanta”
#define x true
main() {
cout<<teks<<"\n";
cout<<kar<<"\n";
cout<<x<<"\n";
cout<<phi<<"\n";
cout<<r1<<"\n";
cout<<r2<<"\n";
getch();
}
Keterangan :
 phi dan r2 adalah konstanta yang tipenya float
 r1 adalah konstanta yang bertipe int
 kar adalah konstanta yang bertipe char
 teks adalah konstanta karakter string, tipe char
 x adalah konstanta yang tipenya boolean
16
2. Di dalam fungsi dengan menggunakan const
Contoh 2:
// contoh deklarasi konstanta 2
#include
#include
main() {
const float phi=3.14;
const int r1=3;
const float r2=10.7;
const char kar=’A’;
const char teks[30]=”Contoh deklarasi konstanta” ;
const bool x=true;
cout<<teks<<"\n";
cout<<kar<<"\n";
cout<<x<<"\n";
cout<<phi<<"\n";
cout<<r1<<"\n";
cout<<r2<<"\n";
getch();
}
Constanta tidak dapat diubah nilainya, berbeda dengan proses inisialisasi, dimana nilainya
dapat diubah-ubah.
B. Operator Aritmatik
Operator aritmatik terdiri :
1. Penjumlahan (+)
2. Pengurangan (-)
3. Perkalian (*)
4. Pembagian (/)
5. Modulo (%)
Contoh 3:
//operator aritmatik 1
#include
#include
#define phi 3.14
#define r1 10
#define teks “Program mencari luas lingkaran\n\n”
main() {
cout<<teks;
float r, luas;
cout<<"Luas lingkaran pertama = "<<phi*r1*r1;
cout<>r;
luas=phi*r*r;
cout<<"\nLuas lingkaran kedua = "<<luas;
getch();
}
17
Contoh 3:
//operator aritmatik 2
#include
#include
main() {
int a,b,hasil,sisa;
cout<<"Contoh penggunaan / dan %\n\n";
cout<>a;
cout<>b;
hasil=a/b;
sisa=a%b;
cout<<"\nHasil pembagian bulat = "<<hasil;
cout<<"\nSisa hasil bagi = "<<sisa;
getch();
}
Tipe Casting
Dari contoh 3 dapat diketahui bahwa:
Jika kita mempunyai dua variabel integer (a dan b), dan kita ingin membagi keduanya
(a/b), hasilnya diimpan ke variabel hasil yang tipenya int , maka hasil yang tersimpan
hanya nilai integernya saja.
Bagaimana jika kita ingin agar dua bilangan bulat yang dibagi tersebut hasilnya dapat
memuat angka desimal?
Caranya :
Tipe variabel yang menampung hasil harus float dan ubah salah satu data yang diproses
menjadi float sementara (type casting)
Contoh 4:
//operator aritmatik 3
//pembagian dengan hasil bertipe float, hasil yang tersimpan
adalah integernya
#include
#include
main() {
int a,b;
float c;
cout<<"Contoh penggunaan / dan %\n\n";
cout<>a;
cout<>b;
c=a/b;
cout<<"\nHasil pembagian = "<<c;
getch();
}
18
Contoh 5:
//operator aritmatik 4
//contoh penggunaan type casting
#include
#include
main() {
int a,b;
float c;
cout<<"Contoh penggunaan / dan %\n\n";
cout<>a;
cout<>b;
c=float(a)/b;
cout<<"\nHasil pembagian = "<<c;
getch();
}
Mengatur angka desimal dan non desimal
Caranya:
1. menggunakan instruksi setprecision(n)
2. menggunakan instruksi setiosflag(ios::fixed)
Kedua instruksi diatas memerlukan header file iomanip.h
Contoh 6:
//penggunaan setprecision
#include
#include
#include
main() {
int a,b;
float c;
cout<<"Contoh penggunaan / dan %\n\n";
cout<>a;
cout<>b;
c=float(a)/b;
cout<<"\nHasil pembagian = "<<setprecision(3)<<c;
getch();
}
Keterangan :
setprecision (3)  tempat yang dipesan baik untuk nilai bulat maupun desimal adalah 3.
19
Contoh 7:
//penggunaan setprecision dan setiosflags
#include
#include
#include
main() {
int a,b;
float c;
cout<<"Contoh penggunaan / dan %\n\n";
cout<>a;
cout<>b;
c=float(a)/b;
cout<<"\nHasil pembagian = "
<<setiosflags(ios::fixed)<<setprecision(2)<<c;
getch();
}
Keterangan :
setiosflags(ios::fixed)<<setprecision(2)  tempat yang dipesan untuk angka desimal saja.
Contoh 8:
//penggunaan setprecision untuk data yang nilainya besar
#include
#include
#include
#include
main() {
char nama[10];
double gpokok,pot,tunj,gbersih;
cout<>nama;
cout<>gpokok;
cout<>tunj;
cout<>pot;
gbersih=gpokok+tunj-pot;
cout<<"\n\nGaji bersih : "<<setpecision(10)<<gbersih;
getch();
}
Keterangan:
Instruksi setprecision(10) bisa dihilangkan seandainya gaji bersih kurang dari 1 juta, tetapi
jika lebih dari 1 juta maka akan ditampilkan dalam bentuk eksponensial sehingga perlu
ketelitian dalam membaca hasilnya.
20
Operator gabungan
Antara lain : +=, -=, *=, /=, %=
Operator Contoh Ekivalen
+= bonus += 500; bonus = bonus + 500;
-= budget -= 50; budget = budget – 50;
*= gaji *= 1.2; gaji=gaji * 1.2;
/= faktor/= 50; faktor= faktor/.50;
%= jml_hari %=7; jml_hari =jml_hari % 7;
Contoh 8:
// operator gabungan
#include
#include
main()
{
int i = 4;
int j = 8;
int k = 12;
int jwb;
jwb = i + j;
cout << jwb << "\n";
jwb += k;
cout << jwb << "\n";
jwb /= 3;
cout << jwb << "\n";
jwb -= 5;
cout << jwb << "\n";
jwb *= 2;
cout << jwb << "\n";
jwb %= 4;
cout << jwb << "\n";
jwb *= 5+3;
cout << jwb << "\n";
jwb += 4-2;
cout << jwb << "\n";
getch();
}
Increase dan Decrease
Operator Contoh Deskripsi Pernyataan yang ekivalen
++ J++; posfix j = j + 1; j += 1;
++ ++j; prefix j = j + 1; j += 1;
— j–; postfix j = j – 1; j -= 1;
— –j; prefix j = j – 1; j -= 1;
21
Contoh 9 :
// increase dan decrease
#include
#include
main()
{
int i1=4,i2=4;
int j1=8,j2=8;
int a,b,c,d;
a=++i1;
b=i2++;
c=–j1;
d=j2–;
cout<<"\nNilai a = "<<a;
cout<<"\nNilai i1 = "<<i1;
cout<<"\n\nNilai b = "<<b;
cout<<"\nNilai i2 = "<<i2;
cout<<"\n\nNilai c = "<<c;
cout<<"\nNilai j1 = "<<j1;
cout<<"\n\nNilai d = "<<d;
cout<<"\nNilai j2 = "<<j2;
getch();
}
Fungsi built-in matematik yang sering digunakan
Fungsi-fungsi tersebut antara lain:
1. Fungsi sqrt(x)  untuk mencari x.
2. Fungsi pow(x,y)  digunakan untuk mencari xy
Kedua fungsi tersebut harus menggunakan header file math.h
Contoh 10:
//penggunaan sqrt dan pow
#include
#include
#include
main() {
float a,b,c,d;
a=5;
b=7;
c=sqrt(a);
d=pow(a,b);
cout<<"\nAkar "<<a<<" = "<<c;
cout<<"\n"<<a<<" pangkat "<<b<<" = "< Lebih besar
= Lebih atau sama
<= Kurang atau sama
!= Tidak sama dengan
Selain itu jika syarat yang digunakan lebih dari satu sering digunakan operator logika
yakni :
Operator Arti
&& And
|| Or
! Not
Contoh 1:
//penggunaan if
#include
#include
main() {
int a;
cout<>a;
a=a+2;
if (a>5)
a=a-6;
a=a+3;
cout<<"\nNilai a sekarang = "<5) dipenuhi akan
mengeksekusi instruksi a=a-6, tidak dipenuhi maka didalam instruksi if tidak mengerjakan
apapun, langsung menuju instruksi setelah if.
Contoh 2:
/*program contoh penggunaan
perintah if else*/
#include
#include
main ()
{
float nmid, nujian;
char ket,nama[20];
cout<<"Menentukan lulus tidaknya mahasiswa\n";
cout<<"———————————–\n";
cout<>nama;
cout<>nmid;
cout<> nujian;
float rata=(nmid+nujian)/2;
if (rata >=60)
ket=’L’;
else
ket=’T’;
cout<<"\nKeterangan(L=Lulus/T=Tidak) : "<<ket;
cout<<"\nNilai rata-rata : "<=60) dipenuhi maka
akan mengerjakan instruksi dibawah if, tetapi jika tidak dipenuhi maka akan mengerjakan
istruksi setelah else.
Instruksi percabangan dalam bentuk 2, ada yang dapat dituliskan dengan operator kondisi
(?) seperti contoh berikut:
Contoh 3:
//program contoh penggunaan operator ?
#include
#include
main ()
{
float nmid, nujian;
char ket,nama[20];
cout<<"Menentukan lulus tidaknya mahasiswa\n";
cout<<"———————————–\n";
cout<>nama;
cout<>nmid;
cout<> nujian;
float rata=(nmid+nujian)/2;
ket=(rata>=60)?’L’:’T’;
cout<<"\nKeterangan(L=Lulus/T=Tidak) : "<<ket;
25
cout<<"\nNilai rata-rata : "<<rata;
getch();
}
Contoh berikut menggunakan if bentuk 3, dimana ada banyak kondisi yang masing-masing
punya instruksi tersendiri untuk dieksekusi.
Contoh 4:
/*program contoh penggunaan
perintah if else*/
#include
#include
main ()
{
float nmid, nujian;
char ket,nama[20];
cout<<"Menentukan lulus tidaknya mahasiswa\n";
cout<<"———————————–\n";
cout<>nama;
cout<>nmid;
cout<> nujian;
float rata=(nmid+nujian)/2;
if (rata >=60)
ket=’L’;
else
ket=’T’;
char nh;
if (rata>=80)
nh=’A’;
else if (rata>=60)
nh=’B’;
else if (rata>=40)
nh=’C’;
else if (rata>=20)
nh=’D’;
else
nh=’E’;
cout<<"\nKeterangan(L=Lulus/T=Tidak) : "<<ket;
cout<<"\nNilai rata-rata : "<<rata;
cout<<"\nNilai huruf : "<<nh;
getch();
}
Jika kondisi yang digunakan dalam percabangan bentuk 3 merupakan konstanta integer
atau karakter, maka dapat tuliskan dengan instruksi switch.
Syntax:
26
switch (ekpresi)
{
case konstanta_l:
pernyataan;
.
.
break;
case konstanta_2:
pernyataan;
.
.
break;
.
.
default:
pernyataan;
.
.
}
Kasus ada pada contoh 5, dituliskan dengan instruksi swicth pada contoh 6 :
Contoh 5:
/*program contoh penggunaan
perintah if else*/
#include
#include
main ()
{
char nh,nama[20],mk[20];
cout<<"Mengubah nilai huruf menjadi angka\n";
cout<<"———————————–\n";
cout<>nama;
cout<>mk;
cout<> nh;
int na;
if (nh==’A’)
na=4;
else if (nh==’B’)
na=3;
else if (nh==’C’)
na=2;
else if (nh==’D’)
na=1;
else
na=0;
cout<<"\nNilai angka : "<<na;
getch();
}
27
Contoh 6:
/*program contoh penggunaan
perintah switch*/
#include
#include
main ()
{
char nh,nama[20],mk[20];
cout<<"Mengubah nilai huruf menjadi angka\n";
cout<<"———————————–\n";
cout<>nama;
cout<>mk;
cout<> nh;
int na;
switch (nh)
{ case ‘A’:
na=4;
break;
case ‘B’:
na=3;
break;
case ‘C’:
na=2;
break;
case ‘D’:
na=1;
break;
case ‘E’:
na=0;
break;
default:
cout<<"\nNilai yang anda masukkan salah";
}
cout<<"\nNilai angka : "<<na;
getch();
}
28
MATERI IV
PERULANGAN (LOOPING)
Kompetensi Dasar:
Dapat menggunakan instruksi perulangan dalam pemecahan masalah.
Indikator Kompetensi:
1. Mengenal dan memahami kapan diperlukannya perulangan.
2. Memahami syntax perintah perulangan
3. Dapat menggunakan perulangan untuk suatu aplikasi.
PERULANGAN
Contoh berikut digunakan untuk menampilkan tulisan ”Selamat datang” dilayar sebanyak 5
baris.
Contoh 1:
#include
#include
main() {
cout<<"\nSelamat datang";
cout<<"\nSelamat datang";
cout<<"\nSelamat datang";
cout<<"\nSelamat datang";
cout<<"\nSelamat datang";
getch();
}
Tidak menjadi masalah jika yang ditampilkan ke layar hanya 5 baris, tetapi bagaimana
halnya jika kita ingin menampilkan tulisan tersebut dilayar sebanyak 10 baris, 50 baris atau
bahkan lebih.
Tentunya sangat tidak efisien jika harus mengcopy instruksi yang sama berulang ulang.
Itulah sebabnya muncul instruksi perulangan untuk mengatasi permasalahan tersebut.
Ada dua jenis perulangan:
1. Perulangan yang jumlahnya diketahui pasti.
Menggunakan instruksi for, while atau do while
2. Perulangan yang jumlahnya tidak diketahui pasti, tetapi diketahui kapan perulangan
tersebut dikerjakan (syarat agar perulangan dikerjakan).
Menggunakan instruksi while atau do while.
29
PERULANGAN YANG JUMLAHNYA DIKETAHUI
Perulangan Dengan For
Syntaxnya adalah sebagai berikut:
for (inisialisasi; kondisi/syarat; kenaikan-indek)
{ instruksi;
.
.
}
Jalannya instruksi adalah sebagai berikut:
1. Pertama instruksi pada inisialisasi akan dijalankan. Umumnya inisialisasi
digunakan untuk memberi nilai awal variabel indek, walaupun tidak menutup
kemungkinan, dapat juga digunakan untuk inisialisasi variabel lain yang
diperlukan. Inisialisasi ini hanya dijalankan satu kali saja.
2. Berikutnya kondisi akan dicek, dipenuhi atau tidak.
3. Jika kondisi/syarat dipenuhi maka instruksi di dalam instruksi for akan dijalankan.
4. Akhirnya, akan mengeksekusi kenaikan indek. Untuk selanjutnya kembali ke
langkah 2.
Jika program pada contoh 1 ditulis dengan instruksi for, maka akan menjadi seperti di
bawah ini:
Contoh 2:
#include
#include
main() {
for(int i=1;i<=5;i++)
cout<<"\nSelamat datang";
getch();
}
Pernyataan untuk inisialisasi dapat dituliskan lebih dari satu.
Contoh 3:
#include
#include
main() {
int a;
for(int i=1,a=5;i<=10;i++)
{ cout<<"\nNilai ke "<<i<<" = "<<a;
a+=5;
}
getch();
}
30
Contoh 3 diatas dapat juga dituliskan dengan cara sebagai berikut:
Contoh 4:
#include
#include
main() {
int a=5;
int i=1;
for(;i<=10;i++)
{ cout<<"\nNilai ke "<<i<<" = "<<a;
a+=5;
}
getch();
}
Dapat juga dituliskan dengan cara sebagai berikut:
Contoh 5:
#include
#include
main() {
int a=5;
int i=1;
for(;i<=10;)
{ cout<<"\nNilai ke "<<i<<" = "<<a;
a+=5;
i++;
}
getch();
}
Untuk pemahaman terhadap contoh 3, 4 dan 5 perhatikan perbedaan penulisan pada
pernyataan for nya.
Indek untuk perulangan for tidak harus selalu bertambah dengan 1 (i++), tetapi juga bisa
dengan 2,3,4, atau lainnya tergantung kebutuhan, bahkan indek juga bisa dibuat menurun
(i–) seperti pada contoh 5a dan 5b berikut ini.
Contoh 5a:
#include
#include
main() {
int b;
cout<>b;
for(int i=1;i<=b;i=i+2)
cout<<i<<"\n";
getch();
}
31
Contoh 5b:
#include
#include
main() {
int b;
cout<>b;
for(int i=b;i>=1;i=i-2)
cout<<i<<"\n";
getch();
}
Perulangan Dengan While
Syntax :
while (syarat)
{ instruksi;
.
.
}
Jika contoh no 2 dan 3 akan ditulis menggunakan instruksi while maka akan menjadi sbb:
Contoh 6:
#include
#include
main() {
int i=1;
while (i<=5)
{ cout<<"\nSelamat datang";
i++;
}
getch();
}
Contoh 7:
#include
#include
main() {
int a=5,i=1;
while (i<=10)
{ cout<<"\nNilai ke "<<i<<" = "<<a;
a+=5;
i++;
}
getch();
}
32
Perulangan Dengan Do While
Syntax:
do
{ instruksi;
.
.
}
while (syarat);
Mirip dengan while, perbedaannya adalah:
While Do while
Bisa jadi tidak akan pernah dikerjakan
jika syarat tidak dipenuhi.
Ini dikarenakan sebelum instruksi
dikerjakan, syarat dicek terlebih dahulu.
Minimal dikerjakan satu kali walaupun
syarat tidak dipenuhi.
Ini dikarenakan instruksi dikerjakan
dahulu, baru syarat dicek untuk
melanjutkan perulangan.
Jika contoh 6 dan 7 ditulis dengan do while maka, akan menjadi sbb:
Contoh 8:
#include
#include
main() {
int i=1;
do
{ cout<<"\nSelamat datang";
i++;
}
while (i<=5);
getch();
}
Contoh 9:
#include
#include
main() {
int a=5,i=1;
do
{ cout<<"\nNilai ke "<<i<<" = "<<a;
a+=5;
i++;
}
while (i<=10);
getch();
}
33
Contoh kasus untuk latihan:
1. Buat program untuk mencari rata-rata dari n bilangan.
2. Buat program untuk mencari total penjualan dari n jenis barang, dan pemberian
diskon penjualan, dengan ketentuan,
Pembelian diatas 500 ribu mendapat diskon 10%
Pembelian diatas 200 ribu sampai dengan 500 ribu mendapat diskon 5%
Pembelian 200 ribu kebawah tidak mendapat diskon.
3. Buat program untuk mencari ipk dari n matakuliah yang diambil seorang
mahasiswa.
Untuk masing-masing nomor buat dengan instruksi for, while dan do while.
PERULANGAN YANG JUMLAHNYA TDK PASTI
Perhatikan contoh 10 berikut ini. Program digunakan untuk menginputkan n data.
Seandainya pada saat program dijalankan n diinputkan 10, tetapi karena kesalahan, terinput
100 maka tetap harus diinputkan 100 data. Ada cara lain untuk ini, dimana menggunakan
perulangan yang tidak diketahui pasti jumlahnya, tetapi diketahui kapan perulangan
dikerjakan, yakni selama masih ada data lagi. Sehingga program dimodifikasi menjadi
contoh no 11.
Contoh 10:
#include
#include
main() {
int b,angka;
cout<>b;
for(int i=1;i<=b;i++)
{ cout<<"Data ke "<<i<>angka; }
getch();
}
Contoh 11:
#include
#include
main() {
int angka;
char ada;
cout<>ada;
while (ada==’Y’)
{ cout<>angka;
cout<>ada;
}
getch();
}
34
MATERI V
POINTER DAN MEMORI DINAMIS
Kompetensi:
Mampu memahami konsep pointer beserta penggunaanya
Indikator:
1. Mampu mendeklarasikan pointer.
2. Mampu menggunakan pointer dalam program
Operator Reference (&)
Digunakan untuk mengetahui alamat memori yang ditempat oleh suatu variabel.
Contoh 1
#include
#include
main() {
int x;
x=5;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
getch();
}
Program diatas akan menampilkan nilai variabel x, dan memori yang ditempati oleh x.
Mendeklarasikan tipe pointer.
Dapat dilakukan seperti mendeklarasikan variabel biasa, tetapi dengan menambahkan
tanda asterik (*) sebelum nama variabel.
Contoh :
int *a;
float *x;
.
.
dsb.
Perbedaan pointer dengan variable biasa
Pointer Variabel biasa (bukan pointer)
Deklarasi variabel int *a; int b;
Alamat memori Tidak otomatis Otomatis
Mengetahui alamat memori a &b
Mengetahui datanya *a b
35
Perhatikan pernyataan berikut,
int b;
b=5;
instruksi diatas benar, karena pada saat b dideklarasikan, otomatis akan dialokasikan space
di memori.
Perhatikan pula pernyataan berikut,
int *a;
*a=7
instruksi diatas tidak diperbolehkan, karena pointer tidak otomatis disediakan space di
memori, maka kita tidak bisa langsung menggunakannya untuk menyimpan data.
Sehingga, sebelum pointer tersebut digunakan untuk menyimpan data harus dicarikan
dahulu space di memori.
Ada dua cara yang dapat dilakukan untuk alokasi space di memori bagi pointer, yaitu:
1. Menempati space variable lain yang sudah punya space.
2. Dialokasikan tersendiri.
Menempati space variabel lain.
Variabel lain tersebut dapat berupa variabel biasa (bukan pointer) atau pointer yang
tentunya sudah punya alokasi space di memori.
Syntaxnya :
var_pointer = &var_biasa;
Contoh 2:
#include
#include
main() {
int x,*y;
y=&x;
x=5;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<*y;
getch();
}
Karena *y menempati alokasi memori yang sama dengan x, akibatnya data yang tersimpan
di dalamnyapun akan sama. Jika ada instruksi yang menginisialisasi x, otomatis juga akan
menginisialisasi *y.
36
Contoh 3 :
#include
#include
main() {
int x,*y;
y=&x;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
Demikian juga, jika ada instruksi yang menginisialisasi *y, maka akan otomatis pula
menginisialisasi nilai x. Coba anda pikirkan output dua contoh program berikut ini :
Contoh 4:
#include
#include
main ()
{
int n1,n2;
int *p;
p=&n1;
*p=10;
p=&n2;
*p=20;
cout<<"Nilai n1 = "<<n1;
cout<<"\nNilai n2 = "<<n2;
cout<<"\nNilai p = "<<*p;
getch();
}
Contoh 5:
#include
#include
main ()
{
int n1=5,n2=15;
int *p1, *p2;
p1 = &n1;
p2 = &n2;
*p1 = 10;
*p2 = *p1;
p1 = p2;
*p1 = 20;
37
cout<<"Nilai n1 = "<<n1;
cout<<"\nNilai n2 = "<<n2;
cout<<"\nNilai p1 = "<<*p1;
cout<<"\nNilai p2 = "<<*p2;
getch();
}
Alokasi space tersendiri di memori (Memori dinamis).
Pointer tidak menempati space variabel lain, tetapi dialokasikan space tersendiri di memori
dengan instruksi new.
Syntaxnya:
var_ponter = new tipe_data-pointernya;
Contoh :
int *a;
float *x;
a=new int;
x=new float;
Perhatikan Contoh 6 yang dimodifikasi dari Contoh 3 sebelumnya.
Contoh 6:
#include
#include
main() {
int x,*y;
y=new int;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
x dan y mempunyai alokasi memori yang berbeda, sehingga data yang tersimpan di
dalamnyapun akan berbeda pula.
Membebaskan memori dari variabel dinamis
Dengan alokasi memori dinamis ini kita dapat menghemat alokasi memori dengan cara
membebaskan memori dari variabel dinamis, jika memang variabel tersebut tidak
digunakan lagi.
Syntaxnya:
delete var_pointer;
38
Contoh 7:
#include
#include
main() {
int x,*y;
y=new int;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
delete y;
cout<<"\n\nSetelah di delete";
cout<<"\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
Perhatikan Contoh 7 diatas. Setelah dikenai instruksi delete y; maka nilai yang tersimpan
dalam *y akan hilang. Itulah sebabnya *y dikatakan sebagai variable dinamis, sedangkan x
merupakan variable statis, sehingga tidak bisa dibebaskan dari memori.
39
MATERI V
POINTER DAN MEMORI DINAMIS
Kompetensi:
Mampu memahami konsep pointer beserta penggunaanya
Indikator:
1. Mampu mendeklarasikan pointer.
2. Mampu menggunakan pointer dalam program
Operator Reference (&)
Digunakan untuk mengetahui alamat memori yang ditempat oleh suatu variabel.
Contoh 1
#include
#include
main() {
int x;
x=5;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
getch();
}
Program diatas akan menampilkan nilai variabel x, dan memori yang ditempati oleh x.
Mendeklarasikan tipe pointer.
Dapat dilakukan seperti mendeklarasikan variabel biasa, tetapi dengan menambahkan
tanda asterik (*) sebelum nama variabel.
Contoh :
int *a;
float *x;
.
.
dsb.
Perbedaan pointer dengan variable biasa
Pointer Variabel biasa (bukan pointer)
Deklarasi variabel int *a; int b;
Alamat memori Tidak otomatis Otomatis
Mengetahui alamat memori a &b
Mengetahui datanya *a b
40
Perhatikan pernyataan berikut,
int b;
b=5;
instruksi diatas benar, karena pada saat b dideklarasikan, otomatis akan dialokasikan space
di memori.
Perhatikan pula pernyataan berikut,
int *a;
*a=7
instruksi diatas tidak diperbolehkan, karena pointer tidak otomatis disediakan space di
memori, maka kita tidak bisa langsung menggunakannya untuk menyimpan data.
Sehingga, sebelum pointer tersebut digunakan untuk menyimpan data harus dicarikan
dahulu space di memori.
Ada dua cara yang dapat dilakukan untuk alokasi space di memori bagi pointer, yaitu:
1. Menempati space variable lain yang sudah punya space.
2. Dialokasikan tersendiri.
Menempati space variabel lain.
Variabel lain tersebut dapat berupa variabel biasa (bukan pointer) atau pointer yang
tentunya sudah punya alokasi space di memori.
Syntaxnya :
var_pointer = &var_biasa;
Contoh 2:
#include
#include
main() {
int x,*y;
y=&x;
x=5;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<*y;
getch();
}
Karena *y menempati alokasi memori yang sama dengan x, akibatnya data yang tersimpan
di dalamnyapun akan sama. Jika ada instruksi yang menginisialisasi x, otomatis juga akan
menginisialisasi *y.
41
Contoh 3 :
#include
#include
main() {
int x,*y;
y=&x;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
Demikian juga, jika ada instruksi yang menginisialisasi *y, maka akan otomatis pula
menginisialisasi nilai x.
Coba anda pikirkan output dua contoh program berikut ini :
Contoh 4:
#include
#include
main ()
{
int n1,n2;
int *p;
p=&n1;
*p=10;
p=&n2;
*p=20;
cout<<"Nilai n1 = "<<n1;
cout<<"\nNilai n2 = "<<n2;
cout<<"\nNilai p = "<<*p;
getch();
}
42
Contoh 5:
#include
#include
main ()
{
int n1=5,n2=15;
int *p1, *p2;
p1 = &n1;
p2 = &n2;
*p1 = 10;
*p2 = *p1;
p1 = p2;
*p1 = 20;
cout<<"Nilai n1 = "<<n1;
cout<<"\nNilai n2 = "<<n2;
cout<<"\nNilai p1 = "<<*p1;
cout<<"\nNilai p2 = "<<*p2;
getch();
}
Alokasi space tersendiri di memori (Memori dinamis).
Pointer tidak menempati space variabel lain, tetapi dialokasikan space tersendiri di memori
dengan instruksi new.
Syntaxnya:
var_ponter = new tipe_data-pointernya;
Contoh :
int *a;
float *x;
a=new int;
x=new float;
Perhatikan Contoh 6 yang dimodifikasi dari Contoh 3 sebelumnya.
Contoh 6:
#include
#include
main() {
int x,*y;
y=new int;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
43
getch();
}
x dan y mempunyai alokasi memori yang berbeda, sehingga data yang tersimpan di
dalamnyapun akan berbeda pula.
Membebaskan memori dari variabel dinamis
Dengan alokasi memori dinamis ini kita dapat menghemat alokasi memori dengan cara
membebaskan memori dari variabel dinamis, jika memang variabel tersebut tidak
digunakan lagi.
Syntaxnya:
delete var_pointer;
Contoh 7:
#include
#include
main() {
int x,*y;
y=new int;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
delete y;
cout<<"\n\nSetelah di delete";
cout<<"\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
Perhatikan Contoh 7 diatas. Setelah dikenai instruksi delete y; maka nilai yang tersimpan
dalam *y akan hilang. Itulah sebabnya *y dikatakan sebagai variable dinamis, sedangkan x
merupakan variable statis, sehingga tidak bisa dibebaskan dari memori.
44
MATERI V
POINTER DAN MEMORI DINAMIS
Kompetensi:
Mampu memahami konsep pointer beserta penggunaanya
Indikator:
1. Mampu mendeklarasikan pointer.
2. Mampu menggunakan pointer dalam program
Operator Reference (&)
Digunakan untuk mengetahui alamat memori yang ditempat oleh suatu variabel.
Contoh 1
#include
#include
main() {
int x;
x=5;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
getch();
}
Program diatas akan menampilkan nilai variabel x, dan memori yang ditempati oleh x.
Mendeklarasikan tipe pointer.
Dapat dilakukan seperti mendeklarasikan variabel biasa, tetapi dengan menambahkan
tanda asterik (*) sebelum nama variabel.
Contoh :
int *a;
float *x;
.
.
dsb.
Perbedaan pointer dengan variable biasa
Pointer Variabel biasa (bukan pointer)
Deklarasi variabel int *a; int b;
Alamat memori Tidak otomatis Otomatis
Mengetahui alamat memori a &b
Mengetahui datanya *a b
45
Perhatikan pernyataan berikut,
int b;
b=5;
instruksi diatas benar, karena pada saat b dideklarasikan, otomatis akan dialokasikan space
di memori.
Perhatikan pula pernyataan berikut,
int *a;
*a=7
instruksi diatas tidak diperbolehkan, karena pointer tidak otomatis disediakan space di
memori, maka kita tidak bisa langsung menggunakannya untuk menyimpan data.
Sehingga, sebelum pointer tersebut digunakan untuk menyimpan data harus dicarikan
dahulu space di memori.
Ada dua cara yang dapat dilakukan untuk alokasi space di memori bagi pointer, yaitu:
1. Menempati space variable lain yang sudah punya space.
2. Dialokasikan tersendiri.
Menempati space variabel lain.
Variabel lain tersebut dapat berupa variabel biasa (bukan pointer) atau pointer yang
tentunya sudah punya alokasi space di memori.
Syntaxnya :
var_pointer = &var_biasa;
Contoh 2:
#include
#include
main() {
int x,*y;
y=&x;
x=5;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<*y;
getch();
}
46
Karena *y menempati alokasi memori yang sama dengan x, akibatnya data yang tersimpan
di dalamnyapun akan sama. Jika ada instruksi yang menginisialisasi x, otomatis juga akan
menginisialisasi *y.
Contoh 3 :
#include
#include
main() {
int x,*y;
y=&x;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
Demikian juga, jika ada instruksi yang menginisialisasi *y, maka akan otomatis pula
menginisialisasi nilai x.
Coba anda pikirkan output dua contoh program berikut ini :
Contoh 4:
#include
#include
main ()
{
int n1,n2;
int *p;
p=&n1;
*p=10;
p=&n2;
*p=20;
cout<<"Nilai n1 = "<<n1;
cout<<"\nNilai n2 = "<<n2;
cout<<"\nNilai p = "<<*p;
getch();
}
47
Contoh 5:
#include
#include
main ()
{
int n1=5,n2=15;
int *p1, *p2;
p1 = &n1;
p2 = &n2;
*p1 = 10;
*p2 = *p1;
p1 = p2;
*p1 = 20;
cout<<"Nilai n1 = "<<n1;
cout<<"\nNilai n2 = "<<n2;
cout<<"\nNilai p1 = "<<*p1;
cout<<"\nNilai p2 = "<<*p2;
getch();
}
Alokasi space tersendiri di memori (Memori dinamis).
Pointer tidak menempati space variabel lain, tetapi dialokasikan space tersendiri di memori
dengan instruksi new.
Syntaxnya:
var_ponter = new tipe_data-pointernya;
Contoh :
int *a;
float *x;
a=new int;
x=new float;
Perhatikan Contoh 6 yang dimodifikasi dari Contoh 3 sebelumnya.
Contoh 6:
#include
#include
main() {
int x,*y;
y=new int;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
48
x dan y mempunyai alokasi memori yang berbeda, sehingga data yang tersimpan di
dalamnyapun akan berbeda pula.
Membebaskan memori dari variabel dinamis
Dengan alokasi memori dinamis ini kita dapat menghemat alokasi memori dengan cara
membebaskan memori dari variabel dinamis, jika memang variabel tersebut tidak
digunakan lagi.
Syntaxnya:
delete var_pointer;
Contoh 7:
#include
#include
main() {
int x,*y;
y=new int;
x=5;
*y=10;
cout<<"Nilai x = "<<x;
cout<<"\nAlamat memori yang ditempati x = "<<&x;
cout<<"\n\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
delete y;
cout<<"\n\nSetelah di delete";
cout<<"\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<<y;
getch();
}
Perhatikan Contoh 7 diatas. Setelah dikenai instruksi delete y; maka nilai yang tersimpan
dalam *y akan hilang. Itulah sebabnya *y dikatakan sebagai variable dinamis, sedangkan x
merupakan variable statis, sehingga tidak bisa dibebaskan dari memori.
49
MATERI VI
FUNGSI
Kompetensi dasar:
Mampu membuat fungsi dalam pemecahan masalah.
Indikator kompetensi:
1. Memahami perlunya fungsi
2. Mampu memilih kapan menggunakan tipe fungsi tertentu
3. Mampu mendeklarasikan fungsi
4. Mampu membedakan variabel lokal dan global
5. Mampu melakukan pemanggilan fungsi dari fungsi lain
6. Mampu membuat aplikasi lengkap yang mengandung fungsi berbagai tipe berikut
pemanggilannya di fungsi lainnya
Perlunya Fungsi
Jika kita dihadapkan oleh suatu permasalahan yang besar, untuk mempermudah
pemecahannya, maka akan lebih baik jika dibagi-bagi menjadi sub permasalahan yang
lebih kecil.
Inilah yang merupakan konsep dari pemrograman terstruktur.
Fungsi
Deklarasi fungsi:
tipe_fungsi nama_fungsi(parameter_formal)
{ instruksi
dan deklarasi var lokal
}
BIG PROBLEM
subproblem subproblem subproblem . . . . . . . . . subproblem
50
Ada 2 tipe fungsi :
1. void
Fungsi tanpa return value.
2. bukan void (int, float, char dll …..)
Fungsi dengan return value.
Nama fungsi dapat dipilih sembarang, tetapi tetap mempertimbangkan syarat sebagaimana
jika kita memilih identifier.
Petunjuk membuat fungsi:
1. Agar lebih mudah anggap bahwa membuat fungsi sama dengan membuat
program.
2. Tentukan variable input dan variable outputnya.
3. Jika jumlah variable output sama dengan satu maka
kita bisa buat dalam fungsi yang tipenya void maupun bukan void.
else
tipe fungsi harus void
Fungsi tipenya bukan void :
a. tipe fungsi sama dengan tipe output
b. parameter formal (parameter value) fungsi adalah variable inputnya.
c. Instruksi fungsi = instruksi program dengan menghilangkan instruksi untuk
menginputkan data pada variable input, dan instruksi untuk menampilkan hasil dari
variable output.
d. Cek kembali apakah masih ada variable yang belum dideklarasikan. Jika ada, maka
deklarasikan sebagai variable local.
e. Diakhiri dengan instruksi :
return var_output;
Fungsi yang tipenya void:
a. tipe fungsinya void
b. Parameter formal fungsi ada dua macam:
 parameter value, adalah variable inputnya.
 Parameter reference/address, adalah variable outputnya
c. Instruksi fungsi = instruksi program dengan menghilangkan instruksi untuk
menginputkan data pada variable input, dan instruksi untuk menampilkan hasil dari
variable output.
51
Pemanggilan fungsi:
1. Fungsi yang tipenya void
nama_fungsi(parameter_aktual);
2. Fungsi yang tipenya bukan void
nama_var = nama_fungsi(parameter_aktual);
nama_var harus dideklarasikan dulu, tipenya harus sama dengan tipe output fungsi
Cotoh:
a. Fungsi mencari luas persegi panjang.
Input : p, l  int
Output: ls  int
Karena outputnya ada 1 variabel maka dapat dibuat fungsi dengan return value maupun
tanpa return value.
Fungsi dengan return value (tipenya = tipe output = int)
Contoh 1:
#include
#include
int luas(int p, int l)
{ int ls;
ls = p*l;
return ls; }
main(){
int pj,lb,hsl;
cout<>pj;
cout<>lb;
hsl=luas(pj,lb);
cout<<"\nLuasnya = "<<hsl;
getch();
}
Program diatas dapat juga dituliskan seperti berikut:
Contoh 2:
#include
#include
int luas(int p, int l)
{return (p*l); }
main(){
int pj,lb;
cout<>pj;
cout<>lb;
cout<<"\nLuasnya = "<<luas(pj,lb);
getch();
}
52
Fungsi tanpa return value (tipenya void)
Contoh 3:
#include
#include
void luas(int &ls, int p, int l)
{ ls = p*l; }
main(){
int pj,lb, hsl;
cout<>pj;
cout<>lb;
luas(hsl,pj,lb);
cout<<"\nLuasnya = "<<hsl;
getch();
}
b. Fungsi mencari luas dan keliling persegi panjang (dalam satu fungsi).
Input : p, l  int
Output: ls,kl  int
Karena outputnya ada 2 variabel maka hanya dapat dibuat fungsi tanpa return value,
tipenya void, sebagai berikut:
Contoh 4:
#include
#include
void luas(int &ls, int &kl, int p, int l)
{ ls = p*l;
kl = 2*(p+l); }
main(){
int pj,lb, hsl1,hsl2;
cout<>pj;
cout<>lb;
luas(hsl1,hsl2,pj,lb);
cout<<"\nLuasnya = "<<hsl1;
cout<<"\nKelilingnya = "<<hsl2;
getch();
}
c. Fungsi menampilkan tulisan dilayar.
Input : tdk ada
Output: tdk ada
Karena outputnya tdk ada maka hanya dapat dibuat fungsi tanpa return value, tipenya
void.
Misalnya fungsi tersebut dimasukkan ke dalam contoh program 4, maka menjadi
sebagai berikut:
53
Contoh 5:
#include
#include
void luas(int &ls, int &kl, int p, int l)
{ ls = p*l;
kl = 2*(p+l); }
void cetak()
{cout<<"MENCARI LUAS DAN KELILING PERSEGI PANJANG\n\n";}
main(){
cetak();
int pj,lb, hsl1,hsl2;
cout<>pj;
cout<>lb;
luas(hsl1,hsl2,pj,lb);
cout<<"\nLuasnya = "<<hsl1;
cout<<"\nKelilingnya = "<<hsl2;
getch();
}
Letak fungsi:
1. Dapat diletakkan sebelum main()
2. Dapat juga diletakkan setelah main(). Namun jika fungsi diletakkan setelah main,
sebelum main harus dituliskan prototype fungsinya.
Contoh 6:
#include
#include
void luas(int &ls, int &kl, int p, int l);
void cetak();
main(){
cetak();
int pj,lb, hsl1,hsl2;
cout<>pj;
cout<>lb;
luas(hsl1,hsl2,pj,lb);
cout<<"\nLuasnya = "<<hsl1;
cout<<"\nKelilingnya = "<<hsl2;
getch();
}
void luas(int &ls, int &kl, int p, int l)
{ ls = p*l;
kl = 2*(p+l); }
54
void cetak()
{cout<<"MENCARI LUAS DAN KELILING PERSEGI PANJANG\n\n";}
Variabel local dan global
Variabel global dapat diakses oleh semua fungsi dalam program. Variabel global sangat
berbahaya karena secara tidak sengaja dapat termodifikasi oleh instruksi-instruksi dalam
programnya sehingga pemakaian variabel global ini harus seminimal mungkin.
Deklarasinya adalah sebelum deklarasi fungsi.
Sedangkan variabel lokal hanya dapat diakses oleh fungsi dimana variabel lokal tersebut
didefinisikan sehingga scope dari variabel lokal tersebut teriindungi. Variabel lokal tidak
dapat diubah atau bahkan dihapus oleh fungsi-fungsi yang lain.
Deklarasinya adalah di dalam fungsi yang menggunakannya.
#include
#include
int a;  ini adalah variable global
main() {
int b;  ini adalah variable lokal
}
Contoh 7:
#include
#include
int i=5;
void fungsi()
{ i+=2;
cout<<"\nNilai i dari fungsi = "<<i;
}
main() {
i+=3;
cout<<"\nNilai i dari main = "<<i;
fungsi();
getch();
}
55
Pada contoh 7, i adalah variabel global, sehingga akan dikenali di semua bagian program.
Akibatnya jika ada pernyataan yang mengubah nilai i maka tentunya nilainya akan
menyesuaikan.
Variabel static dan dynamic
Istilah automatik dan statik menjelaskan apa yang terjadi pada suatu variabel lokal dalam
suatu fungsi sesaat setelah fungsi ini selesai dipanggil dan eksekusi program kembali ke
prosedur yang memanggil.
Default dari variabel lokal dalam suatu fungsi adalah automatik artinya variabel lokal
tersebut dihapus pada saat fungsi selesai dipanggil.
Untuk mendefinisikan suatu variabel automatik, tambahkan awalan auto pada deflnisi
variabel tersebut.
Karena default dari variabel lokal adalah automatik maka awalan auto ini optional, jadi
boleh dihilangkan
Kebalikan dari variabel automatik adalah variabel statik yaitu tidak dihapus pada saat
fungsi berakhir. Semua variabel global adalah statik.
Variabel lokal yang sifatnya automatic dapat diubah menjadi static. Untuk membuat suatu
variabel lokal statik, tambahkan awalan static pada definisi variabel lokal tersebut.
Variabel lokal statik tidak kehilangan nilainya pada saat fungsi berakhir dan tetap lokal
dalam fungsi tersebut. Jika fungsi yang mengandung variabel lokal statik ini dipanggil lagi
maka nilai variabel ini masih ada.
Untuk pemahaman konsep diatas, bandingkan output dari Contoh 8 dan Contoh 9 berikut
ini.
Contoh 8:
#include
#include
void fungsi()
{ int j=7;
j+=2;
cout<<"\nNilai j dari fungsi = "<<j;
}
main() {
fungsi();
fungsi();
getch();
}
56
Contoh 9:
#include
#include
void fungsi()
{ static int j=7;
j+=2;
cout<<"\nNilai j dari fungsi = "<<j;
}
main() {
fungsi();
fungsi();
getch();
}
57
MATERI VII
ARRAY
Kompetensi dasar:
Mampu menggunakan tipe array untuk pemecahan masalah.
Indikator kompetensi:
1. Memahami perlunya array
2. Mampu menentukan kapan harus menggunakan array.
3. Mampu mendeklarasikan array
4. Mampu membuat aplikasi lengkap yang mengandung array, dan menggunakan
fungsi yang menggunakan parameter array.
ARRAY
Digunakan untuk menyimpan sekelompok data yang tipenya sama.
Deklarasi Array 1 Dimensi
tipe nama_var[max_data];
Contoh:
int a[5];
float x[100];
char nama[25];
.
dst.
Cara mengakses data bertipe array
nama_variabel[alamat]
Misal : Array a
27 23 35 46 87  data yang tersimpan di array
0 1 2 3 4  alamat array (dimulai dari 0)
a[0] = 27
a[1] = 23
.
.
a[4] = 87
Menginputkan data ke array
Data dapat diinputkan untuk setiap emelen array. Tetapi jika jumlah elemen array banayk,
tentunya cara ini tidak efisien. Oleh karena itu dapat digunakan bantuan instruksi
perulangan untuk input datanya.
58
Contoh 1:
#include
#include
main() {
int a[5];
cout<>a[0];
cout<>a[1];
cout<>a[2];
cout<>a[3];
cout<>a[4];
int jumlah;
jumlah=a[0]+a[1]+a[2]+a[3]+a[4];
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
Contoh 2:
#include
#include
main() {
int a[5];
int jumlah=0;
for(int i=0;i<5;i++)
{ cout<<"Data ke "<<i<>a[i];
jumlah+=a[i];
}
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
Tipe array juga dapat digabungkan dengan pointer. Untuk itu kita akan melakukan
perubahan pada contoh 3 menjadi sebagai berikut:
Contoh 3:
#include
#include
main() {
int *a=new int[5];
int jumlah=0;
for(int i=0;i<5;i++)
{ cout<<"Data ke "<<i<>a[i];
jumlah+=a[i];
}
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
59
Perhatikan contoh 3 diatas pada pengaksesan datanya. Jika array dideklarasikan sebagai
pointer, maka untuk pengaksesan datanya cukup dituliskan sebagai array. Tetapi kita tetap
bisa menuliskannya sebagai pointer tanpa harus menyertakan alamat arraynya. Jika
demikian maka data akan diambilkan dari data pertama, atau data pada alamat ke 0.
Sehingga misalkan pada akhir program contoh 3 diatas kita tambahkan instruksi :
cout<<"\nData = "<<*a;
atau instuksi :
cout<<"\nData = "<<a[0];
akan mempunyai arti yang sama, data akan diambil dari data pertama (alamat 0).
Selain itu untuk input data dan proses penjumlahan, dapat juga dibuat dalam bentuk fungsi
seperti pada contoh 4. Perhatikan pada saat tipe array menjadi parameter fungsi, jumlah
data yang tersimpan dalam array boleh ditulis boleh tidak (optional). Sehingga bisa ditulis
dengan : b[] saja
Contoh 4 :
#include
#include
void input_array(int b[],int n)
{ for(int i=0;i<n;i++)
{ cout<<"Data ke "<<i<>b[i]; }
}
int jumlah(int b[],int n)
{ int hasil=0;
for(int i=0;i<n;i++)
hasil+=b[i];
return hasil;
}
main() {
int a[100];
int bd;
cout<>bd;
input_array(a,bd);
cout<<"\n\nJumlahnya = "<<jumlah(a,bd);
getch();
}
60
Penggunaan array 1D untuk sorting data
Pada proses berikut ingin akan diurutkan n data yang tersimpan di array dengan metode
Bubble Sort.
Contoh 5:
#include
#include
void masukan(int a[],int n)
{
for(int i=0;i<n;i++)
{ cout<<"Data ke "<<i<>a[i];
}
}
void urutkan(int a[], int n)
{ int temp;
for(int i=0;i<n;i++)
for(int j=0;ja[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
void tampil(int a[], int n)
{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
main() {
int a[100];
int jml;
cout<>jml;
masukan(a,jml);
urutkan(a,jml);
cout<<"\n\nSetelah diurutkan ";
tampil(a,jml);
getch();
}
61
Pada contoh program diatas ada tiga fungsi, fungsi pertama digunakan untuk
menginputkan data ke dalam array, fungsi kedua untuk mengurutkan arraynya, dan fungsi
ketiga untuk menampilkan data yang tersimpan di array ke layar.
Array 2 Dimensi
Contoh deklarasi :
int a[4][5];
0 1 2 3
0 25 40 26 12
1 6 8 12 5
2 1 3 8 9
3 15 22 13 19
4 0 5 7 15
Mengakses data :
a[0][0] = 25
a[0][1] = 40
.
.
dst
Penggunaan array 2D untuk menjumlahkan dua matrik
Matrik asal adalah a dan b, dijumlahkan dan hasilnya disimpan di matrik c. Syarat agar
matrik dapat dijumlahkan adalah keduanya mempunyai ukuran yang sama.
Baris matrik 1 = Baris matrik 2
Kolom matrik 1 = Kolom matrik 2
Contoh 6:
#include
#include
void masukan(int a[10][10],int b,int k)
{ for(int i=0;i<b;i++)
for(int j=0;j<k;j++)
{cout<<"Data ke "<<i<<j<>a[i][j]; }
}
void jumlah(int a1[][10],int a2[][10],int a3[][10],int b1,int k1)
{ for(int i=0;i<b1;i++)
for(int j=0;j<k1;j++)
a3[i][j]=a1[i][j]+a2[i][j];
}
void tampilkan(int a[10][10],int b,int k)
62
{ for(int i=0;i<b;i++)
{ for(int j=0;j<k;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
main() {
int dt1[10][10],dt2[10][10],dt3[10][10];
int b1,k1;
cout<>b1;
cout<>k1;
cout<<"\nMatrik pertama\n";
masukan(dt1,b1,k1);
cout<<"\nMatrik kedua\n";
masukan(dt2,b1,k1);
jumlah(dt1,dt2,dt3,b1,k1);
clrscr();
cout<<"\nMatrik pertama\n";
tampilkan(dt1,b1,k1);
cout<<"\nMatrik kedua\n";
tampilkan(dt2,b1,k1);
cout<<"\nMatrik hasil penjumlahan\n";
tampilkan(dt3,b1,k1);
getch();
}
Perhatikan pada saat array 2D menjadi parameter fungsi, jumlah baris boleh ditulis boleh
tidak, tetapi jumlah kolom harus ditulis.
Tipe array dapat dikembangkan menjadi array multidimensi. Misal 3D, 4D, dan
sebagainya.

Tinggalkan komentar

Filed under Uncategorized

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s