Pengenalan bahasa pemrograman C++
Tujuan Praktikum :
a. Mahasiswa dapat mengenal bahasa pemrograman C++.
b. Mahasiswa dapat membuat source code, Struktur Program di C++ dan fungsi dari bahasa C++. c. Mahasiswa dapat mengkompile source code dan memanggil program.
d. Mahasiswa dapat mengetahui input dan output dan menganalisa dari sebuah program.
Dasar Toeri
1. Membuat Source Code
Source code merupakan nama lain dari listing program dari suatu program yang akan dikompile. Source code ditulis dengan menggunakan text editor atau aplikasi pengolah kata lainnya yang disediakan oleh sistem operasi. Misal di sistem operasi linux menggunakan text editor vi atau emacs sedangkan di Microsoft menggunakan notepad. Source code yang dituliskan dengan text editor tesebut harus disimpan dengan nama yang berekstension *.cpp atau *.c. Karena source code ditulis dalam bahasa pemrograman C/ C++ yang akan kita gunakan dalam praktikum Algoritma dan Pemrograman.
2. Mengkompilasi Source Code
Source code bukanlah suatu program, tetapi dari source code ini dapat dihasilkan suatu program. Program merupakan file yang berextensi exe (executable).
3. Struktur Program di C++
Dalam bahasa pemrograman C++ strukturnya adalah sebagai berikut: a. Header. Ex: #include<iostream.h>
b. Main adalah isi dari program diawali {……. dan diakhiri dengan ……..}
4. Fungsi
Fungsi dalam suatu program sangat berguna untuk membuat source code dari program tersebut menjadi ringkas dan padat. Suatu fungsi dalam source code akan dipanggil dan dikerjakan sesuai dengan urut-urutan source code-nya. Fungsi harus mengembalikan suatu nilai, baik isi maupun kosong, yang disebut void.
Latihan:
1. #include <iostream.h> 2. int tambah (int x, int y)
3. {
4. cout <<”Berada di dalam fungsi tambah ( )\n”; 5. cout << “Angka I = “;
6. cin >> a;
7. cout << “Angka II = “; 8. cin >> b;
9. cout << “\nPanggil fungsi tambah ( ) …..\n “; 10. c = tambah(a,b);
11. cout << “\n Kembali ke fungsi main ( )\n “;
12. cout << “Hasil penjumlahan “ << a << “dan “ << b << “adalah “ << c << “\n”;
13. cout << “ \nSelesai…\n”; 14. return 0;
15. }
5. Input dan Output
Program komputer berfungsi mengolah dan memroses suatu data yang diinputkan menjadi informasi yang dioutputkan menjadi informasi yang dioutputkan. Statemen input dalam c++, cin dengan cara penulisannya :
cin >> a;
statemen output dalam c++, cout dengan cara penulisan
cout << “---“;
6. Analisa Program
Menganalisa bagian perbagian dan menjelaskan dari kegunaan masing-masing bagian program Contoh:
#include <iostream.h> // mencari (#) preprosesor (include) file iostream.h dalam (<>) yang digunakan untuk input dan output.
int main () // menjalankan fungsi main yang dipanggil secara otomatis leh sistem operasi yang akan mengembalikan nilai integer. {
int nomer;
cout << “Masukkan suatu angka “; cin >> nomer;
cout << “Angkanya adalah “ << number; return 0;
}
Tugas
1. Buatlah source code dari program yang memiliki algoritma sebagai berikut : a. Masukkan suatu kalimat = “Hallo, ini program pertamaku” b. Tulis/ tampilkan kalimat yang pernah dimasukkan
Tipe Data, Variabel dan Konstanta
Tujuan Praktikum:
a. Mahasiswa dapat mengenal beberapa tipe data yang terdapat dalam bahasa C++. b. Mahasiswa dapat belajar menggunakan variable dalam pembuatan sebuah program. c. Mahasiswa dapat belajar menggunakan konstanta dalam pembuatan sebuah program.
Dasar teori 1. Tipe Data
Setiap program pada umumnya mempunyai data yang akan diolah menjadi suatu informasi, data mempunyai tipe tertentu seperti terlihat pada tabel data berikut :
No Tipe Ukuran Nilai
1. Bool 1 byte True atau False
2. Unsigned short int 2 byte 0 – 65.535
3. Short int 2 byte -32.768 – 32.767
4. Unsigned long int 4 byte 0 – 4.294.967.295
5. Long int 4 byte -2.147.483.648 – 2.147.483.647 6. Int (16 bit) 2 byte -32.768 – 32.767
7. Int (32 bit) 4 byte -2.147.483.648 – 2.147.483.647 8. Unsigned int (16 bit) 2 byte 0 – 65.535
9. Unsigned int (32 bit) 4 byte 0 – 4.294.967.295
10. Char 1 byte 256 nilai karakter ASCII
11. Float 4 byte -1.2e-38 – 3.4e+38
12. Double 8 byte -2.2e-308 – 1.8e+308
2. Variable
Variabel merupakan tempat untuk menyimpan data yang digunakan dalam program. Variabel yang telah di deklarasikan akan dibuatkan tempatnya pada RAM sehingga dapat digunakan untuk menyimpan data yang suatu saat dapat digunakan kembali.
int a, b, c;
Keterangan:
int : Tipe data a, b, c : variabel
unsigned short int lebar = 5, panjang;
Keterangan :
Unsigned short int : tipe data
Lebar : variabel
5 : data untuk variable
3. Konstanta
Konstanta merupakan lokasi penyimpanan suatu data, hampir mirip dengan variabel, tetapi konstanta nilainya tidak dapat diubah ketika program dijalankan
Latihan
1. #include <iostream.h> 2. int main ()
3. {
4. const int minggu = 0; 5. const int senin = 0; 6. const int selasa = 0; 7. const int rabu = 0; 8. const int kamis = 0; 9. const int jumat = 0;
10. const int sabtu = 0; 11. int pilih;
12. cout << “Masukkan hari dalam angka (0-6) = “ ; 13. cin >> pilih;
14. if (pilih = = minggu || pilih = = sabtu) 15. {
16. cout << “\n Sekarang anda berada di akhir minggu ! \n “; 17. cout << “Karena anda dihari ke : “ << pilih << endl; 18. }
19. else 20. {
21. cout << “\n Wah, anda dihari kerja ….“;
22. cout << “Karena anda dihari ke : “ << pilih << endl; 23. }
24. cout << endl; 25. return 0;
Latihan
1. Buat source code dari algoritma di bawah ini a. Masukkan panjang dan lebar b. Luas panjang * lebar c. Tulis luas
O p e r a t o r
Tujuan Praktikum:
Operator merupakan simbol atau kata yang dapat digunakan dalam program untuk melakukan suatu operasi atau manipulasi, seperti menjumlahkan 2 buah nilai, memberikan nilai ke variabel dan sebagainya. Sehingga mahasiswa dapat memahami fungsi atau kegunaan dari operator tersebut.
Dasar Teori
1. Operator Pengerjaan (Assigment Operator)
Suatu operator bertanda sama dengan (=) yang digunakan untuk mengisikan nilai yang berada pada sebelah kanan variabel.
Contoh a = 5 a = b = c Latihan
Buat source code untuk algoritma dibawah ini : a. Masukkan data untuk variabel a b. a = b = c
c. Tampilkan nilai a, b dan c
2. Operator Aritmatika
Operator yang digunakan untuk melakukan operasi aritmatika terhadap nilai suatu variabel-variabel. Ada 2 jenis operator aritmatika yaitu operator binary dan operator unary.
Tabel operatur binary
Operator Keterangan * Perkalian / Pembagian
% Modulus atau sisa pembagian + Pertambahan
- Pengurangan Tabel Operator unary
Operator Keterangan + Tanda Plus - Tanda Minus ++ Prefix : preincrement Postfix : Postincrement -- Prefix : predecrement Postfix : Postdecrement Latihan
1. Buat source code untuk algoritma dibawah ini a. Masukkan jari-jari lingkaran
b. Luas * r2
c. Tampilkan jari-jari lingkaran d. Tampilkan luas lingkaran 2. Analisa luas lingkaran
3. Operator Peningkatan dan Penurunan
Operator peningkatan digunakan untuk menambah nilai 1 dari nilai sebelumnya dan operator penurunan digunakan untuk mengurangi nilai 1 pada nilai sebelumnya.
Latihan
1. #include <iostream.h> 2. int main()
3. {
4. int x = 10; 5. x = ++x;
6. cout << “Nilai x = “ << x << endl; 7. x = ++x;
8. cout << “Nilai x = “ << x << endl; 9. x = --x;
10. cout << “Nilai x = “ << x << endl; 11. return 0;
12. }
Latihan
1. Buat source code untuk algoritma dibawah ini a. Masukkan data a dan b
b. C a+b++ c. Tampilkan c 2. Analisa program
3. Buat algoritma dan source code-nya untuk mencari nilai c = a+ ++b
4. Operator Bitwise
Operator dalam bentuk bit dan seluruh operasinya hanya dapat dikenakan pada operand yang bertipe integer atau karakter
Operator Keterangan << Geser ke kiri >> Geser ke kanan
& Operasi bit AND | Operasi bit OR ^ Operasi bit XOR ~ Operasi bit NOT Latihan
1. # include <iostream.h> 2. int main
3. {
4. unsigned x = 93;
5. cout << “Nilai x semula adalah “ << x << endl; 6. x = x << 1;
7. cout << “Nilai x setelah digeser ke kiri adalah << x << endl; 8. x = x >> 2;
9. cout << “Nilai x setelah digeser ke kanan adalah << x << endl; 10. return 0;
11. }
5. Operator Hubungan
Operator ini digunakan untuk membandingkan dua elemen nilai dan akar yang dihasilkan nilai perbandingannya, yaitu betul (bernilai 1) atau salah (bernilai 0).
Operator Keterangan > Lebih besar dari
>= Lebih besar sama dengan < Lebih kecil
<= Lebih kecil sama dengan = = Sama dengan
6. Operator Logika
Operator logika bisasanya berpasangan dengan operator hubungan nilai perbandingan dari operator logikanya menghasilkan 2 nilai yaitu betul (nilai 1) dan salah (nilai 0)
Operator Keterangan
&& Operator logika AND || Operator logika OR ! Operator logika NOT Latihan
1. Buatlah source code untuk algoritma berikut ini a. Masukkan nilai dan tugas
b. Jika nilai lebih besar dari 70 AND tugas lebih besar sama dengan 75, maka tulis lulus c. Jika nilai lebih kecil sama dengan 70 AND tugas lebih kecil dari 75, maka tulis tidak lulus 2. Analisa program tersebut.
7. Operator Alamat
Operator ini berhubungan dengan pengunaan pointer & menunjukkan alamat dari suatu data * menunjukkan suatu pointer
Latihan 1. # include <iostream.h> 2. int main () 3. { 4. int a, *b; 5. a = 20; 6. b = &a;
7. cout << “Pointer b menunjuk alamat “ << b << endl; 8. cout << “Alamat tsb bernilai “ << *b << endl; 9. return 0;
Percabangan
Tujuan Praktikum:
Mahasiswa dapat belajar dan memahami tentang percabangan dalam bahasa pemrograman C++ sehingga dapat menggunakan percabangan tersebut dalam membuat sebuah program baik itu if, if else, nested if maupun percabangan majemuk.
Dasar Teori 1. IF
Statement ini digunakan untuk melakukan pilihan terhadap 2 atau lebih alternatif pilihan dengan bentuk umumnya sebagai berikut.
If (kondisi)
Pernyataan
Contoh : penggalan program Discount = 0; If (harga>10000) {
discount = (10/100)*harga; bonus = “Kaos Kaki”
}
dari penggalan program diatas percabangan terjadi atas kondisi harga yang lebih besar dari 10000 mendapat discount sebesar 10% dan juga mendapat bounus Kaos Kaki.
Latihan :
1. Buatlah algoritma yang lengkap dari penggalan program diatas. 2. Buatlah source code-nya.
2. IF… ELSE Bentuk umumnya : If (kondisi) { pernyataan1 …. } else { Pernyataan …… }
Dalam bentuk percabangan ini jika kondisi yang ditanyakan benar maka akan mengerjakan pernyataan pertama, jika kondisi yang ditanyakan salah maka akan mengerjakan pernyataan kedua.
Contoh :
1. #include<iostream.h> 2. int main()
3. {
4. int n,t;
5. cout<<”Masukan sebuah nilai “<<endl; 6. cin>>n;
7. cout<<”Masukan nilai dari Tugas “<<endl; 8. cin>>t;
9. if (nilai>70)
10. cout<<”Lulus”<<endl;
11. else
12. cout<<”Tidak Lulus”<<endl; 13. return 0;
14. }
Bila program dijalankan, akan muncul pertanyaan tentang nilai dan tugas yang harus dimasukan, kondisi yang dipertanyakan adalah besarnya n atau nilai lebih dari 70, jika benar maka akan muncul pernyataan Lulus, jika salah maka akan muncul pernyataan Tidak Lulus.
Latihan
1. Buatlah source code dari algoritma berikut ini : a. Masukan harga barang yang dibeli
b. Jika harga >= 10000, dikenakan diskon 10% c. Tampilkan harga yang harus dibayarkan
d. Jika harga kurang dari kondisi yang ditetapkan, dikenakan diskon 5% e. Tampilkan harga yang harus dibayarkan
2. Analisa-lah program yang dihasilkan
3. NESTED IF
ini merupakan suatu bentuk percabangan didalam percabangan dengan bentuk umumnya sebagai berikut :
if (kondisi1) if (kondisi2) pernyataan; else pernyataan; else pernyataan; Latihan
1. Buatlah source code dari algoritma berikut ini : a. Masukan Nilai angka
b. Jika 100=>nilai >=81, maka nilai dalam bentuk hurufnya adalah A, jika tidak berarti 81>nilai>=60 dan nilai dalam bentuk hurufnya adalah B, jika tidak berarti 60 >nilai>=40 dan nilai dalam bentuk hurufnya adalah C, jika tidak berarti 40>nilai>=20 dan nilai dalam bentuk hurufnya adalah D, jika tidak berarti nilai hurufnya adalah E
c. Tampilkan tulisan “Nilai dalam bentuk hurufnya =” 2. Buatlah flowchart-nya
3. Analisa-lah program tersebut
4. PERCABANGAN MAJEMUK
Percabangan majemuk disini yang dimaksud adalah suatu percabangan yang menyajikan banyak alternatif pilihan pernyataan yang sesuai dengan kondisi yang dipertanyakan. Dalam bahasa C/C++ percabangan ini menggunakan perintah SWITCH sedangkan pada pascal menggunakan case…of. Bentuk umumnya
switch(ekspresi) { case konstanta1 : pernyataan1; break; case konstanta2 : pernyataan2; break; ….. …. …. Default : pernyataanx; }
contoh :
1. #include<stdio.h> 2. main()
3. {
4. int kode;
5. printf(“Masukan Kode Hasri [1-7] : “); 6. scanf(“%d”,&kode); 7. switch(kode) 8. { 9. case 1: 10. printf(“Senin”); 11. break; 12. case 2: 13. printf(“Selasa”); 14. break; 15. case 3: 16. printf(“Rabu”); 17. break; 18. case 4: 19. printf(“Kamis”); 20. break; 21. case 5: 22. printf(“Jumat”); 23. break; 24. case 6: 25. printf(“Sabtu”); 26. break; 27. case 7: 28. printf(“Minggu”); 29. break; 30. default:
31. printf(“Kode tidak ditemukan”); 32. }
33. }
Latihan :
Sebuah program yang dibuat dengan bahasa C/C++ jika dijalankan akan tampak seperti dibawah ini : MENU UTAMA --- 1. Bujursangkar 2. Segitiga 3. Lingkaran 4. Keluar --- Pilih[1-4] : Buatlah : 1. Algoritmanya 2. Source Code 3. Penjelasan
Perulangan
Tujuan praktikum:
Mahasiswa dapat memahami tentang looping pada sebuah program karena pada dasarnya suatu program ketika dieksekusi sering memunculkan sesuatu yang diulang-ulang, berarti program ini mempunyai listing dengan menggunakan metode looping. Ada dua cara untuk membuat looping yaitu dengan rekursi atau iterasi. Cara iterasilah yang akan dibahas pada Bab 5 ini.
Dasar Teori 1. While…do
While sering digunakan untuk melakukan pengulangan, bentuk penulisannya
While ( kondisi ) { statment1 ; . . statment2; Contoh
1. //Menunjukan looping dengan 'while' 2. //Sebagai pengganti 'goto'
3. #include<iostream.h> 4. int main()
5. {
6. //inisialisasi variabel 'hitung' 7. int hitung = 0;
8. //Mulai looping dengan memeriksa kondisi 9. while (hitung <=5)
10. {
11. hitung++;
12. cout <<"Menghitung : " << hitung << endl; 13. }
14. cout << endl;
15. cout << "Selesai menghitung." << endl;
16. cout << "Perhitungan terakhir : " << hitung; 17. cout << endl;
18. return 0; 19. }
Looping do….while ini mengeksekusi statement yang ada dalam blok looping sebelum mengecek kondisinya.
Cara penulisannya sebagai berikut :
Menghitung : 1
Menghitung : 2
Menghitung : 3
Menghitung : 4
Menghitung : 5
Selesai menghitung
Perhitungan terakhir : 5
5
Do { . . statement; . . } while ( kondisi ); contoh
1. //Menunjukkan looping 'do..while' 2. #include <iostream.h>
3. int main 4. {
5. int hitung, hit;
6. cout << "Berapa kali perulangan ? "; 7. cin >> hitung;
8. //Menyalin isi 'hitung' ke 'hit' untuk perbandingan 9. hit = hitung;
10. cout << "menghitung mundur .. \n" << endl; 11. //Mulai looping (setidaknya satu kali) 12. do
13. {
14. cout << "Mencetak : " << hitung << endl; 15. hitung--;
16. }
17. while (hitung > 0); 18. cout << endl;
19. //Memeriksa apakah input dari user dengan 'hit' yang disalin dari 'hitung'
20. // kurang atau sama dengan nol 21. if (hitung <=0)
22. {
23. cout << "Tidak ada perulangan ... "; 24. cout << endl;
25. } 26. else 27. {
28. cout << "Selesai mengulang." << endl;
29. cout << "Perhitungan terakhir : " << hitung << endl; 30. }
31. return ; 32. }
2. For
Dengan menggunakan loopingdo ini ada tiga langkah yang harus dijalankan yaitu inisialisai ( awalan ), pengujian kondisi, dan aksi yang dilakukan yang dapat berupa penambahan atau pengurangan suatu variabel.
For ( insialisasi; pengujian; aksi ) { . . statement; . . }
Contoh
1. #Menunjukkan looping 'for' 2. #include <iostream.h> 3. int main()
4. {
5. int hitung hit;
6. cout <<"Berapa kali perulangan ? "; 7. cin >> hitung;
8. // Menyalin isi 'hitung' ke 'hit' untuk perbandingan 9. hit = hitung;
10. cout << "Menghitung mundur ...\n" << endl;
11. // Mulai looping dengan kondisi 'hitung' lebih besar atau sama dengan 'hit'
12. // dan akan berakhir ketika 'hitung' sama dengan nol 13. for (hit>= hitung; hitung > 0; hitung--)
14. {
15. cout << "mencetak : " << hitung << endl; 16. }
17. cout >> endl;
18. //Memeriksa apakah input dari user dengan 'hit' yang disalin dari 'hitung' kurang atau sama dengan nol
19. if (hit <= 0) 20. {
21. cout << "tidak ada perulangan ..."; 22. cout << endl;
23. } 24. else
25. cout << "Selesai menghitung." << endl;
26. cout << "Perhitungan terakhir : " << hitung; 27. cout << endl;
28. }
29. return 0; 30. }
3. Goto
Perintah ini digunakan untuk mengalihkan proses ke suatu label tertentu. Contoh : 1. #include<stdio.h> 2. main() 3. { 4. int n=1; 5. cetak :
6. printf(“Praktikum ini terlalu mudah\n”); 7. if(n++<10)
8. goto cetak; 9. }
Latihan :
Buatlah program dalam bentuk menu, yang menampilkan suatu bentuk konversi seperti dibawah ini. MENU UTAMA --- 1. BBM 2. Mata Uang 3. Suhu 4. Keluar --- Pilih[1-4] :
Dengan ketentuan
1. BBM meliputi premium, solar, premix dan minyak tanah. Tampilkan pembelian dari 1 liter hingga 10 liter dengan kenaikan per 1 liter dengan rumus :
Premiun = liter*1850
Solar = liter*1650
Premix = liter*2200
Minyak = liter*700
2. Mata uang meliputi rupiah, dolar dan euro 3. Suhu meliputi celcius, reamur dan fahrenheit
Fahrenheit = 9/5*celceius+32
Fungsi
Tujuan Praktikum:
a. Mahasiswa dapat memahami fungsi dalam sebuah program yaitu subprogram yang akan mengolah data dan mengembalikan nilai.
b. Mahasiswa dapat memahami fungsi keluaran bukan integer.Prototipe fungsi Parameter formal dan parameter actual Variabel local file header dan rekursi
Dasar Teori
Fungsi adalah subprogram yang akan mengolah data dan mengembalikan nilai. Setiap program C++ mempunyai minimal satu fungsi, yaitu main(), yang dijalankan otomatis oleh sistem operasi. Suatu fungsi dapat memanggil fungsi yang lainnya, atau sebaliknya. Setiap fungsi harus dapat mengembalikan suatu nilai, jika tidak akan menjadi fungsi void. Jadi ketika fungsi dipanggil, ia akan akan mengerjakan sesuatu seperti pada listing programnya, dan kemudian mengirimkan hasilnya. Nilai yang dikembalikan disebut dengan returnvalue dan tipenya harus dideklarasikan.
Contoh
1. #include <iostream.h> 2. // fungsi prototype
3. int LuasSegiEmpat(int x, int y); 4. int main()
5. {
6. int panjang, lebar, luas; 7. cout <<"Masukkan Panjang : " ; 8. cin >> panjang;
9. cout <<"Masukkan Lebar : " ; 10. cin >> lebar;
11. cout << endl; 12. // panggil fungsi
13. luas = LuasSegiEmpat(panjang, lebar);
14. cout << "Luas yang didapat adalah = " << luas <<"\n"; 15. return 0;
16. }
17. int LuasSegiEmpat(int x, int y) 18. {
19. //nilai hasil perhitungan langsung dikembalikan 20. return (x*y); 21. } int main ( ) { statement; fungsi1( ); . . . .statment; fungsi2( ); . . . . Return 0; } . . . . return . Fungsi3 ( ); . . return . . . . return
6
Fungsi Uraian Sqrt(x) exp(x) log(x) log10(x) fabs(x) ceil(x) floor(x) pow(x) fmod(x,y) sin(x) cos(x) tan(x)
Akar kuadrat dari x Fungsi eksponen ex
Logaritma alami dari x (dasar e) Logaritma dari x (dasar 10) Nilai mutlak dari x
Pembulatan ke bilangan bulat terkecil yang tidak lebih kecil dari x Pembulatan ke bilangan bulat terbesar yang tidak lebih besar dari x xy
pembagian x/y sebagai tipe float sinus dari x (dalam radian) cos dari x (dalam radian) tangen dari x(dalam radian)
1. Fungsi dengan nilai keluaran bukan integer
Untuk fungsi dengan nilai keluaran bukan integer, langkah yang diperlukan berupa : Fungsi harus dideklarasikan di awal program
Fungsi didefinisikan dengan diawali penentu tipe fungsi Contoh float minimum(x,x) float x,y; { if(x>y) return(x); else return(y); } 2. Prototipe fungsi
Yang dinamakan prototipe fungsi adalah cara atau gaya dalam mendeklarasikan fungsi. Fungsi ini digunakan untuk menjelaskan kepada kompiler mengenai :
Tipe keluaran fungsi Jumlah parameter
Tipe dari masing-masing parameter
Keuntungan pemakaiannya adalah kompiler akan melakukan konversi seandainya antara tipe parameter dalam definisi dan parameter saat pemanggilan fungsi tidak sama atau akan menunjukan kesalahan kalau jumlah parameter dalam definisi dan saat pemanggilan berbeda.
Kalau definisi semula berupa : Float jumlah(x,y) Float x,y ;
Maka menjadi
Float jumlah(float x, float y)
3. Parameter formal dan parameter aktual
Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi. Parameter aktual adalah parameter yang dapat berupa variabel atau konstanta maupun ungkapan yang dipakai dalam pemanggilan fungsi. Contoh
printf(“%f”, kali(2*3,5*6)); Adapun cara melewatkan parameter adalah :
Pemanggilan dengan nilai Pemanggilan dengan referensi Contoh :
1. #include<stdio.h>
3. main() 4. {
5. int a, b; 6. a = 99; 7. b = 11;
8. printf(“Nilai sebelum pemanggilan fungsi : \n”); 9. printf(“Nilai a =%d nilai b =%d\n\n”,a,b);
10. tukar(a,b);
11. printf(“Nilai sesudah pemanggilan fungsi :\n”); 12. printf(“Nilai a =%d nilai b =%d\n\n”,a,b); 13. }
14. void tukar (int px, int py); 15. {
16. int z: 17. z=px; 18. px=py;
19. printf(“Nilai diakhiri fungsi :\n”);
20. printf(“Nilai px=%d nilai py=%d\n\n “, px,py); 21. }
4. Variabel lokal
Variabel lokal adalah variabel yang dideklarasikan didalam fungsi yang bersifat :
Otomatis diciptakan ketika fungsi dipanggil dan hilang ketika fungsi selesai digunakan Hanya dikenal oleh fungsi tempat variabel berada
Pada waktu diciptakan nilainya tidak tentu
Dalam penulisannya dapat ditambahakan kata “AUTO” didepannya Contoh :
1. #include <iostream.h>// fungsi prototype 2. void fungsiKu();
3. int x = 5, y = 7; 4. int main()
5. {
6. cout << "x dari fungsi 'main()' : " << x << endl; 7. cout << "y dari fungsi 'main()' : " << y << endl; 8. cout << endl;
9. cout << "*** Panggil fungsi 'fungsiKu()' *** \n\n"; 10. fungsiKu();
11. cout << "\nKembali lagi ke 'main()' dari 'fungsiKu()'\n"; 12. cout << endl;
13. cout << "x dari fungsi 'main()' : " << x << endl; 14. cout << "y dari fungsi 'main()' : " << y << endl; 15. return 0;
16. }
17. void fungsiKu() 18. {
19. int y = 10; // variabel lokal 'y'
20. cout << "x dari fungsi 'fungsiKu()' : " << x << endl; 21. cout << "y dari fungsi 'fungsiKu()' : " << y << endl; 22. }
5. File header
Setiap pustaka baku mempunyai file header yang mengandung prototipe fungsi untuk semua fungsi yang ada didalam pustaka dan definisi dari tipe-tipe data maupun konstanta yang diperlukan oleh fungsi tersebut.
assert.h : berisi makro dan informasi untuk diagnosa yang membantu pemeriksaan kesalahan prose dalam program
ctype.h : mengandung prototipe fungsi untuk menguji properti dari karakter, dan dapat digunakan untuk mengubah karakter huruf kecil ke besar
errno.h : mendifinisikan makro untuk melaporkan kondisi kesalahan float.h : berisi batasan didalam sistem bilangan bertipe float limits.h : berisi batasan sistem integral
locale.h : berisi prototipe fungsi dan informasi lainnya yang dapat memodifikasi sistem data pada saat program diproses
math.h : berisi prototipe fungsi untuk pustaka matematika
setjmp.h : berisi prototipe fungsi yang menuntun urutan pemanggilan fungsi
signal.h : berisi prototipe fungsi dan makro untuk menangani kondisi yang bermacam-macam saat program diproses
stdarg.h : mendifinisikan makro untuk menangani daftar argumen fungsi yang nilai dan tipenya tidak diketahui
stddef.h : berisi definisi umum dari tipe yang digunakan C untuk membentuk perhitungan tertentu stdio.h : berisi prototipe fungsi untuk pustaka input/ output
stdlib.h : berisi prototipe fungsi untuk konversi nilai ke teks atau sebaliknya, alokasi memori, bilangan acak dan utilitas lainnya
strings.h : pemrosesan string time.h : manipulasi data dan waktu
6. Rekursi
Fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri, artinya fungsi tersebut dipanggil di dalam tubuh fungsi itu sendiri. Fungsi faktorial, yang menghitung nilai faktorial dari suatu bilangan bulat positif, merupakan pokok bahasan yang memudahkan pemahaman fungsi rekursif.
Contoh : #include<stdio.h> int faktorial(int n) { if (n==1) return(1); else return(n*faktorial(n-1)); } main() { int x ;
printf(“Mencari nilai faktorial\n “);
printf(“Masukan nilai x : “); scan(“%d”,&x);
printf(“Nilai faktorial dari %d=%d\n”,x,faktorial(x)); }
Latihan
Buatlah program dalam bentuk menu, yang menampilkan suatu bentuk konversi seperti dibawah ini.
MENU UTAMA --- 1. Perkalian 2. Pembagian 3. Pengurangan 4. Pengurangan 5. Keluar --- Pilih[1-5] : Pernyataan :
Pilihan yang disajikan dibuat menggunakan fungsi
Array, String dan Pointer
Tujuan Praktikum:
a. Mahasiswa dapat memahami, mendeklarasikan dan menggunakan array dimensi dua. b. Mahasiswa dapat memahami, mendeklarasikan dan menggunakan string.
c. Mahasiswa dapat memahami, mendeklarasikan dan menggunakan pointer.
Dasar Teori
1. Deklarasi array
Array merupakan koleksi data dimana setiap elemen memakai nama yang sama dan bertipe sama dengan dibedakan setiap elemennya dengan sebuah indeks. Nilai dari indeks dimulai dari 0, dengan cara penulisan
Tipe_data nama_array[jumlah_elemen_array] Contoh 1. #include<stdio.h> 2. int main() 3. { 4. int square[100]; 5. int i; 6. int k; 7. for(i=0;i<10;i++) 8. { 9. k=i+1; 10. square[i]=k*k;
11. printf(“\nPangkat dari %d adalah %d “,k,square[i]) 12. }
13. return 0; 14. }
2. Array dimensi dua
Contoh :
1. #include <iostream.h> 2. #include <iomanip.h>
3. int jum_kol(int arrIn[] [3], int nilai_kol[]); 4. int jum_bar(int arrIn[] [3], int nilai_bar[]); 5. int main()
6. {
7. static int arr[2][3] = { 8. {10,20,30},
9. {11,21,31} 10. };
11. int bar, kol; 12. int nilai_kol[3]; 13. int nilai_bar[2];
14. for (bar = 0; bar < 2; bar ++)
15. {
16. for (kol = 0; kol < 3; kol++)
17. { // Mengatur tampilan matik agar teratu 18. cout << setw(5) << arr[bar][kol];
19. }
20. cout << "\n\n"; 21. }
22. jum_kol(arr, nilai_kol); 23. for (kol = 0; kol < 3; kol++) 24. {
25. cout << "Hasil penjumlahan kolom " << kol << " adalah "; 26. cout << nilai_kol[kol] << endl;
27. }
28. jum_bar(arr, nilai_bar); 29. for (bar = 0; bar < 2; bar++) 30. {
31. cout << "Hasil penjumlahan baris " << bar << " adalah "; 32. cout << nilai_bar[bar] << endl;
33. }
34. return 0; 35. }
36. int jum_kol(int arrIn[][3], int nilai_kol[]) 37. {
38. int bar, kol;
39. for (kol = 0; kol < 3; kol++) 40. {
41. nilai_kol[kol] = 0;
42. for (bar = 0; bar < 2; bar++) 43. { 44. nilai_kol[kol] += arrIn[bar][kol]; 45. } 46. } 47. return 0; 48. }
49. int jum_bar(int arrIn[][3], int nilai_bar[]) 50. {
51. int bar, kol;
52. for (bar = 0; bar < 3; bar++) 53. {
54. nilai_bar[bar] = 0;
55. for (kol = 0; kol < 3; kol++) 56. { 57. nilai_bar[bar] += arrIn[bar][kol]; 58. } 59. } 60. return 0; 61. } Latihan
Diketahui sebuah data nilai mahasiswa Teknik Informatika STTA Yogyakarta sebagai berikut
No Nim Nama UTS UAS Tugas Total Nilai
1 2 3 4 5 03000001 03000002 03000003 03000004 03000005 Budi Ima Jojon Bagong Londo 70 80 60 75 85 50 40 45 55 60 100 90 80 70 60 Buatlah program dengan menggunakan tampilan menu berikut ini
MENU UTAMA --- 1. Memasukan Data 2. Menampilkan Data 3. Keluar --- Pilih[1-3] : Panduan :
a. Tampilan menu untuk memasukan data adalah sebagai berikut :
NIM : Nama : UTS : UAS : Tugas : Lagi(y/t)?
b. Total diperoleh dengan menggunakan rumus = UTS*0.3+UAS*0.5+Tugas*0.2 c. Nilai dalam bentuk huruf dengan ketentuan :
100>= Nilai>80 = A 80>= Nilai >60 = B 60>= Nilai >40 = C 40>= Nilai >20 = D
20>= Nilai >0 = E
d. Tampilan menu untuk menampilkan data dibuat mirip dengan data yang didapat diatas.
3. String
String merupakan betuk data yang biasa dipakai dalam pemrograman guna menampung dan memanipulasi data teks, string bukan merupakan tipe data tersensiri tetapi merupakan jenis khusus dari array ( dalam bahasa pemrograman C/C++ ).
Data string biasanya dimasukan dengan perintah gets atau scanf :
gets(namalarik); Atau scanf(“%s”,namalarik); contoh : 1. #include<stdio.h> 2. main() 3. { 4. char nama[20];
5. printf(“masukan nama anda: “);scanf(“%s”,nama);
6. printf(„ Nama yang tadi dimasukan adalah : %s\n”,nama); 7. }
Variabel string dalam bentuk char ini dapat diakses seperti halnya kita mengakses suatu tipe data dalam bentuk array atau larik dengan contoh sebagai berikut :
1. #include<stdio.h> 2. main()
3. {
4. int a, j; 5. char kata[25];
6. puts(Ketikan Suatu Kalimat : “); gets(kata); 7. j=0;
8. for(a=0;kata[a];a++) 9. j=j++;
10. printf(“Jumlah karakter dari kalimat yang anda ketikan adalah : %d\n”,j);
5. Pointer
Ambil angka di alamat berikutnya : 5
Jumlahkan angka tersebut dengan angka di alamat sebelumnya 6
Simpan hasilnya di alamat berikutnya : 11 Hentikan program 1 2 3 4 5 6 7 alamat instruksi data
Pointer adalah sebuah variabel yang menunjuk ke alamat memori komputer. Memori komputer digambarkan seperti tampak pada gambar diatas sebagai suatu tumpukan penyimpanan dengan lokasi yang berbeda-beda, untuk memdeakan lokasinya digunakan nomor-nomor yang unik, nomor ini disebut dengan alamat memor. Ada kebiasaan bahwa seorang programmer tidak tahu tentang alamat-alamat memori yang dipakai untuk variabel-variabel yang dibuat karena kompiler sudah menangani ini secara detail. Kita dapat mengetahui alamat-alamat yang dipakai oleh variabel-variabel yang kita buat, dengan menggunakan operator “&“.
Keuntungan meakses memori dengan menggunakan pointer daripada menggunakan variabel global adalah bahwa fungsi yang dapat mengakses data hanya fungsi yang mempunyai pointer tersebut, dengan demikian kontrol terhadap pemakaian data dan mengurangi masalah yang timbul ketika sebuah fungsi mengubah data tersebut secara tidak sengaja.
Contoh :
1. #include<iostream.h>
2. typedef unsigned short int USHORT; 3. int main()
4. {
5. USHORT umurku; //variabel umurku
6. USHORT *umurku = null; // pointer yang menunjuk ke variabel umurku 7. umurku=5;
8. cout<<”umurku = “<<umurku<<endl;
9. *umurku=&umurku; // pointer umurku disi dengan alamat umurku 10. cout<<””Pointer umur ku = “<<*umurku<<endl;
11. cout <<endl; 12. umurku=7;
13. cout<<”umurku = “<<umurku<<endl;
14. *umurku=&umurku; // pointer umurku disi dengan alamat umurku 15. cout<<””Pointer umur ku = “<<*umurku<<endl;
16. cout <<endl; 17. return 0 18. }
bandingkan dengan ini :
1. #include<iostream.h>
2. typedef unsigned short int USHORT; 3. int main()
4. {
5. USHORT umurku; //variabel umurku
data
*data
6. USHORT *umurku = &umurku; // pointer yang menunjuk ke variabel umurku
7. umurku=5;
8. cout<<”umurku = “<<umurku<<endl;
9. cout<<””Pointer umur ku = “<<*umurku<<endl; 10. cout <<endl;
11. umurku=7;
12. cout<<”umurku = “<<umurku<<endl;
13. cout<<””Pointer umur ku = “<<*umurku<<endl; 14. cout <<endl;
15. return 0 16. }
Studi Kasus I, Operasi Matrik
Tujuan praktikum:
Mengetahui cara inisialisasi dan memanipulasi data elemen dari sebuah matrix
Dapat melakukan operasi matrix, penambahan, pengurangan, perkalian, inverse dll. dengan program komputer
Dapat menggunakan array 2D pada C untuk melakukan operasi matrix
Dasar teori:
Sebuah matrix terdiri dari array segiempat dari elemen-elemen yang ditandai dengan simbul [A]. Individual elemen-elemen dari sebuah matrix [A] dinotasikan dengan
a
ij. Set dari elemen-elemen horizontal disebut baris dan set dari elemen-elemen vertikal disebut kolom. Dengan demikian sebuah program matrix dapat diimplementasikan menggunakan array 2D.Contoh:
int a[2][3];
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
Array 2D adalah array dari arrays, sehingga deklarasi di atas adalah array dari dua array integer. Matrix di atas mempunyai jumlah baris 2 dan jumlah kolom 3. Berikut adalah contoh program untuk mengisi data elemen-elemen 1 s/d 6 dan me-print elemen-elemen-elemen-elemen dalam baris dan kolomnya.
1. #include<iostream.h> 2. #include<conio.h> 3. void main(){ 4. clrscr(); 5. int a[3][3]; 6. int b[3][3]; 7. int c[3][3]; 8. int i,j; 9. for (i=1;i<3;i++) { 10. for (j=1;j<3;j++) {
11. cout << "Masukkan elemen matrik A " << i << "," << j << " : "; 12. cin >> a[i][j];
13. } 14. }
15. cout << "Matrik A : " <<endl; 16. for (i=1;i<3;i++) { 17. for (j=1;j<3;j++) { 18. cout << a[i][j] << " "; 19. } 20. cout << endl; 21. } 22. }
Penambahan atau pengurangan dua buah matrix [A] dan [B] dapat dilakukan dengan cara menambahkan atau mengurangkan masing elemen yang bersesuaian dari tiap-tiap matrix [A] dan [B] tersebut.
[C] = [A] + [B]
c
ij
a
ij
b
ij[C] = [A] – [B]
c
ij
a
ij
b
ijProgram penambahan dua buah matrix 2 x 2. Pada program penambahan matrix di bawah terdapat dua buah function mat_read (int mat[2][2]) dan function mat_print (int mat[2][2]) belum dibuat. Buatlah sendiri kedua function tersebut dengan mengacu potongan program di atas dan kemudian selesaikan program penambahan dua buah matrix di bawah.
Program untuk menambah dua matrix 2 x 2:
1. #include<iostream.h> 2. #include<conio.h> 3. 4. void main(){ 5. clrscr(); 6. int a[3][3]; 7. int b[3][3]; 8. int c[3][3]; 9. int i,j; 10. 11. for (i=1;i<3;i++) { 12. for (j=1;j<3;j++) { 13.
14. cout << "Masukkan elemen matrik A " << i << "," << j << " : "; 15. cin >> a[i][j];
16. } 17. } 18.
19. cout << "Matrik A : " <<endl; 20. for (i=1;i<3;i++) { 21. for (j=1;j<3;j++) { 22. 23. cout << a[i][j] << " "; 24. 25. } 26. cout << endl; 27. } 28. 29. for (i=1;i<3;i++) { 30. for (j=1;j<3;j++) { 31.
32. cout << "Masukkan elemen matrik B " << i << "," << j << " : "; 33. cin >> b[i][j];
34. } 35. } 36.
37. cout << "Matrik B : " <<endl; 38. for (i=1;i<3;i++) { 39. for (j=1;j<3;j++) { 40. 41. cout << b[i][j] << " "; 42. 43. } 44. cout << endl; 45. } 46. 47. for (i=1;i<3;i++) { 48. for (j=1;j<3;j++) { 49. c[i][j]=a[i][j]+b[i][j]; 50. }
51. } 52.
53. cout << "Matrik C : " << endl; 54. for (i=1;i<3;i++) { 55. for (j=1;j<3;j++) { 56. cout << c[i][j] << " "; 57. } 58. cout << endl; 59. } 60. }
Perkalian sebuah matrix [A]: m x n, dengan bilangan skalar c, dapat dihitung sebagai berikut: c a11 c a12 ... c a1n
[B] = c [A] = c a21 c a22 ... c a2n
c am1 c am2 ... c amm
Sedang perkalian dua buah matrix [C] = [A] [B] dapat dilakukan dengan persamaan sebagai berikut (ingat jumlah baris-kolom dari matrik [C]).
n k kj ik ija
b
c
1Inverse dari sebuah matrix [A] adalah [A]-1 yang dapat dihitung sebagai berikut: [A] [A]-1 = [A]-1 [A] = [I]
dengan [I] adalah matrix identitas.
Untuk matrix inversi dari matrix 2 x 2 inverse matrix dapat dihitung dengan jauh lebih sederhana sebagai berikut. 11 21 12 22 21 12 22 11 1 1 ] [ a a a a a a a a A Tugas:
Buat program perkalian matrix 2 x 2 dengan bilangan skalar c yang dapat divariasi. Kemudian tentukan matrix inverse dari matrix 2 x 2 tersebut.
Studi Kasus I, Iterasi Bisection
Tujuan praktikum:
Dapat memahami penyelesaian persamaan f(x) = 0 dan mencari akar-akar persamaannya dengan metode penggambaran grafis.
Memahami metode trial-and-error dengan metode Bisection untuk mencari akar-akar persamaan f(x) = 0.
Dapat membuat program metode numerik Bisection untuk mencari akar-akar persamaan f(x) = 0.
Dasar teori:
Metode paling sederhana untuk mencari akar-akar persamaan f(x) = 0 adalah dengan me-plot fungsi yang dicari akar-akarnya. Akar-akar persamaan adalah harga-harga f(x) yang memotong sumbu x. Metode ini biasa disebut metode grafis.
Contoh:
Gunakan metode grafis untuk menentukan koefisien penurunan parasut c yang turun dengan massa m = 68.1 kg, kecepatan v = 40 m/s, pada waktu turun t = 10 detik. Grafitasi bumi adalah g = 9.8 m/detik2.
Persamaan:
e
v
c
gm
c
f
(
)
1
(c/m)t
c (ordinat) f(c) (absis) 4 8 12 16 20 34.115 17.653 6.067 -2.269 -8.401 Metode Bisection:Secara umum jika f(x) adalah berharga real dan kontinyu pada interval
x
l
x
u dan harga-hargaf
(
x
l)
dan)
(
x
uf
mempunyai tanda yang berbeda, maka berlaku persamaanf
(
x
l)
f
(
x
u)
0
. Dan paling tidak akanada satu persamaan yang berharga di antara
x
l
x
u.Mencari akar-akar persamaan dengan metode Bisection adalah dengan membagi dua interval
x
l
x
u kemudian mencari akar-akarnya pada tiap-tiap interval, lalu membagi dua kembali interval yang memuat akar-akar persamaannya. Step-step algoritma dari metode Bisection adalah sebagai berikut:9
1 2 1 6 Akar persamaan c f(c) Pilih harga rendah
x
l dan harga tinggix
u di mana akar-akar persamaanya akan termuat di antaranya. Tentukan estimasi akar persamaan
2
u l rx
x
x
Evaluasi hasilnya dengan cara sebagai berikut:
a. Jika
f
(
x
l)
f
(
x
u)
0
, maka akar persamaan yang dicari ada pada interval bawah. Maka set ru
x
x
dan kembali ke step 2.b. Jika
f
(
x
l)
f
(
x
u)
0
, maka akar persamaan yang dicari ada pada interval atas. Maka set rl
x
x
dan kembali ke step 2.c. Jika
f
(
x
l)
f
(
x
u)
0
, maka akar persamaan yang dicari adalahx
r.Program mencari akar persamaan dengan metode Bisection:
/* User perlu memdefinisikan fungsi yang dicari akarnya sebagai fungsi pada program dengan nama: ffunction. Contoh diberikan pada program ini. */
1. #include<iostream.h>
2. void main() {
3. float a,b,c,fa,fb,fc,konvergensi;
4. int iterasi;
5.
6. cout << "Masukkan Nilai A : ";
7. cin >> a;
8. cout << "Masukkan Nilai B : ";
9. cin >> b; 10. 11. konvergensi=1; 12. iterasi=0; 13. while (konvergensi > 0.000005) 14. { 15. c=(a+b)/2; 16. 17. fa=(2*a)+3; 18. fb=(2*b)+3; 19. fc=(2*c)+3; 20. 21. if ((fc*fb) > 0) 22. b=c; 23. else 24. a=c; 25. 26. konvergensi=a-b; 27. if (konvergensi < 0) 28. konvergensi=konvergensi*-1; 29. 30. iterasi++; 31. } 32.
33. cout << "Jumlah iterasi : " << iterasi << endl; 34. cout << "Akar persamaan : " << a <<endl;
35. 36. }
Tugas: