Hal pertama yang perlu dipahami adalah perintah #include atau library yang berfungsi untuk
memanggil fungsi-fungsi perintah yang akan kita gunakan pada program kita nantinya. Ada
beberapa jenis include yang kita bisa gunakan sesuai keperluan kita, namun pada bagian ini
kita cukup kenal stdio.h untuk menangani perintah dasar input dan output.
Dibawah include kitab isa melihat bagian void main() perintah “void” digunakan untuk
membuat sebuah fungsi yang tidak memerlukan pengembalian nilai (prosedur), seperti
sebuah fungsi untuk menuliskan luaran seperti program di atas, sedangkan “main” adalah
nama fungsi dan khusus nama fungsi “main” ini adalah fungsi utama di dalam program atau
fungsi yang akan pertama kali dijalankan oleh Bahasa C, tentu semua program C wajib
memiliki fungsi “main” ini. Pada fungsi main dalam contoh diatas terdapat perintah
mencetak tulisan “hello Word”, yaitu perintah printf(), perintah ini adalah salah satu perintah
yang terdapat pada library stdio.h. jika program tersebut kita jalankan maka akan
menghasilkan keluaran sebagai berikut
Dalam contoh program ini terdapat 3 buah variable yaitu variable angka yang bertipe int
(integer/bilangan bulat), pada contoh diberi inisialisasi nilai 10 (jika tidak diberi nilai
inisialisasi maka secara default variable akan bernilai 0 ). Variable lain adalah variable huruf
yang bertipe char (karakter) pada contoh diberi inisialisasi nilai ‘A’ (jika tidak diberi nilai
inisialisasi maka secara default variable akan bernilai kosong atau ‘ ’ ). Variable selanjutnya
adalah variable pecahan yang bertipe float (decimal).
Selain variable, dalam program diatas juga diberikan contoh penulisan dari konstanta,
konstanta harus dituliskan di bagian header di luar fungsi main. Berbeda dengan variable,
nilai konstanta akan tetap dan tidak bisa diubah. Dalam contoh di program terdapat
konstanta JUDUL dan konstanta BILANGAN.
D. Penulisan Output
Untuk mengeluarkan output yang dapat dilihat user, dalam Bahasa C terdapat tiga cara,
namun ada sebuah cara yang umum digunakan yaitu dengan perintah printf(). Namun untuk
mencetak nilai variable maupun konstanta, kita harus memperhatikan kode format tipe data
dari variable atau konstanta yang akan kita cetak dengan printf().
Terlihat pada program tersebut ada kode %s, %i, %d, %c, dan %f, yang merupakan kode
format yang sesuai dengan tipe data variable atau konstanta yang dituju. Sedangkan tanda /n
merupakan perintak pindah baris setelah perintah printf() dilakukan.
Khusus untuk tipe data decimal, kode format dapat diisi informasi berapa digit dibelakang
koma yang akan dicetak. Dengan kode %.2f yang berarti akan ditampilkan 2 angka dibelakang
koma.
E. Input pada Bahasa C
Bagian penting lainnya dalam program adalah bagian input, yaitu perintah yang
memungkinkan user memberi masukan nilai variable yang akan digunakan, bagian ini
penting digunakan untuk program yang melayani proses dengan beberapa kombinasi nilai
variable, seperti program menghitung luas segitiga, dan lainnya
Perintah paling dasar yang bisa digunakan adalah scanf() yang digunakan untuk menginput
data berupa numerik, karakter, dan string(rangkaian karakter). Perintah lain bisa
menggunakan gets, getchar, atau getch, kegunaannya akan kita belajari sambal berlatih.
Terlihat bahwa diperlukan juga kode data pada penggunaan scanf ini. Dalam Bahasa C tidak
ada tipe variable untuk membuat string (rangkaian karakter), namun kitab isa menggunakan
tipe data char[], dimana di dalam kurung siku diisi nilai Panjang karakter yang akan dibuat
Namun menginputkan string pada C harus diperhatikan jika string tersebut memuat spasi,
karena seluruh program akan diberhentikan, disini perlu kita menggunakan perintah gets()
Latihan Coding
Buatlah program yang berfungsi untuk mencatat dan menampilkan data siswa yang terdiri dari
Nama
Kelas
Umur
Tinggi Badan
Berat badan
Jenis kelamin (L/P)
Berikan juga tampilan header yang menampilkan tulisan “program pencatatan data siswa”
**kerapian tampilan luaran program akan menjadi nilai tambah pada Latihan ini
2. Operator increment/decrement
3. Operator Bitwise, digunakan sebagai perbandingan nilai dua buah variable, luaran
operator ini 1 (benar) atau 0 (salah)
4. Operator Logika, digunakan untuk menggabungkan beberapa variable logika, namun isi
setiap variable haruslah hanya 0 atau 1. Didalam Bahasa C tidak mengenal tipe data
Boolean, sehingga untuk membuat variable Boolean kitab isa menggunakan tipe data
bilangan bulat namun isi datanya hanya 0 atau 1.
5. Operator Biner, digunakan untuk melakukan operasi pada bilangan biner, disini nilai
variable akan diubah ke dalam bentuk biner terlebih dahulu baru dikenakan operator
Pada program diatas perintah percabangan if-else digunakan untuk dua percabangan yang
saling terkait. Jika dianalogikan dengan diagram menjadi
>=80
Nilai=A
0-100
0-5960-79 Nilai=B
Bukan
Nilai=C
Pesan kesalahan
dapat dilihat juga penggunaan operator logika dan operator perbandingan pada program di
atas.
Kasus diatas sebenarnya bisa deprogram dengan metode switch-case, namun akan menjadi
kurang cocok, karena metode ini lebih baik untuk data katagori (paling umum digunakan
untuk pemilihan menu)
c. Perulangan dalam Bahasa C
Selain percabangan, di dalam sebuah proses pengerjaan suatu kasus bisa juga terjadi kasus
dimana kita harus melakukan hal yang sama berulang kali, seperti untuk mencetak 100
bilangan asli pertama, tentu akan sangat repot jika kita menulis perintah printf sebanyak 100
kali. Perintah perulangan pada Bahasa C ada 3 perintah dasar yaitu for, do-while, while-do,
masing-masing memiliki karakteristik masing-masing sehingga kita nantinya bisa memilih
perintah sesuai dengan kasus yang sedang dihadapi.
1. Perulangan dengan for
Perulangan ini digunakan saat kita sudah tahu batas awal dan akhir dari nilai perulangan
(counter) selain itu perubahan nilai perulangannya/counter juga teratur misalnya loncat
1, loncat 3, atau loncat 100. Format perintah ini adalah
For (nilai awal counter; nilai akhir counter; perubahan nilai counter)
Yang berarti perulangan dilakukan dari nilai awal counter sampai nilai akhir counter dan
setiap perulangan nilai counter akan berubah sesuai perubahan nilai counter. Sebagai
contoh bisa diperhatikan program menulis angka ganjil 1-100 berikut
Pada perintah for terlihat ada pendeklarasian counter I dengan tipe data integer, nilai
awal I adalah 1, kondisi perulangan akan terus dikerjakan selama nilai I memenuhi
kondisi i<=100, dan loncatan nilai I adalah 2. Jika kita ingin menampilkan bilangan-
bilangan itu secara menurun programnya menjadi
Namun tipe perulangan ini juga dapat digunakan pada kasus perulangan for, misalnya
untuk program menampilkan bilangan ganjil menggunakan perintah while berikut
3. Perulangan dengan do-while
Perintah do-while secara umum sama dengan perintah while, namun pada do-hile
minimal proses akan dieksekusi sekali karena pengecekan kondisi dilakukan di akhir.
d. Perulangan bersarang
Perulangan bersarang adalah adanya perulangan di dalam sebuah perulangan. Struktur ini
sangat sering digunakan, sehingga wajib untuk dikuasai dalam Bahasa C. yang perlu
diperhatikan penggunaan kurung kurawal untuk setiap perulangan, karena jika ada banyak
perulangan di dalam perulangan maka seringkali hal ini cukup membingungkan jika penulisan
programnya kurang rapi.
Contoh permasalah dasar yaitu Ketika membuat table perkalian 1-10, disini aka nada 10
kolom dan 10 baris, dan masing-masing sell table akan berisi nilai perkalian baris dan
kolomnya.
Pada program di atas terdapat sebuah perulangan kolom (counter j) untuk setiap perulangan
baris (counter i). tentu setelah perulangan kolom berakhir kita perlu melakukan perpindahan
baris dengan perintah printf(“\n”). Selanjutnya kita membuat table yang menampilkan data
jumlah factor dari perkalian baris dan kolom dari table tersebut.
pada program disamping,
perulangan paling dalam adalah
perulangan dengan counter k yang
berfungsi untuk melakukan
pengecekan di setiap angka dari 1
sampai (baris x kolom) apakah merupakan factor dari bilangan (baris x kolom). Jika iya maka
akan dihitung oleh pencatat c.
e. Konsep Array
Array adalah sebuah variable yang tidak hanya bisa digunakan untuk menyimpan sebuah
data, namun variable bertipe array dapat menyimpan sejumlah data. Namun tipe data pada
sebuah array haruslah sama. Analogi array ini adalah seperti loker guru di sekolah yang
diperuntukkan untuk mengumpulkan tugas siswa, tentu setiap loker ada identitasnya yaitu
nama guru yang bersesuaian. Di dalam C Alamat/identitas/index dari masing-masing sell di
array dimulai dari 0, 1,2,… dan seterusnya.
Latihan programming
1. Buatlah program yang mampu menampilkan segitiga Bintang seperti berikut
Input : 7
Output:
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
SUB PROGRAM
Di dalam Bahasa C kita banyak menemukan fungsi atau prosedur bawaan yang sering kita sebuat
sintak perintah, seperti printf, scanf, main, dll. Namun demikian kita sebagai programmer juga bisa
membuat prosedur atau fungsi kita sendiri Ketika diperlukan, Teknik ini disebut dengan sub program.
Mari perhatikan program berikut
Terlihat pada program di atas dilakukan berkali-kali kegiatan dengan proses yang sama, maka kitab
isa menggunakan Teknik sub program untuk lebih meringkas tampilan kode. Sub program yang
dibuat bisa sebuah prosedur ( dengan perintah void nama_prosedur) atau sebuah fungsi ( dengan
perintah tipe_data_fungsi Nama_Fungsi). Prosedur ditujukan jika sub program tidak perlu
mengembalikan sebuah nilai, sedangkan fungsi diperlukan jika sub program perlu menampilkan nilai.
Contoh pada program di atas kita membuat menjadi :
Dari contoh program di atas, terlihat terdapat prosedur cetak() yang digunakan sebanyak 3 kali, tentu
ini akan jauh lebih mempersingkat program, dan juga Ketika ada validasi pada prosedur cetak maka
tidak harus dilakukan ber kali-kali.
REKURSIF
Setelah memahami konsep dan kegunaan sub program, kita lanjut untuk menggunakan
konsep sub program dalam memprogram permasalahn perulangan dengan metode rekursif.
Rekursif dalam referensi didefinisikan sebagai fungsi yang memanggil terminology dirinya
sendiri. Salah satu penerapannya adalah pada deret fibonaci yaitu 1,1,2,3,5,8,13,21,34,….
Dimana deret ini memiliki rumus Un = U(n-1) + U(n-2), dengan bilangan basis U(0)=1, dan
U(1)=1. Keberadaan bilangan basis sangat penting dalam rekursif sebagai pemberhentian
perulangan. Simaklah program untuk mencari sukuk e n deret fibonachi berikut ini
Fibo(4)
Fibo(3) Fibo(2)
Fibo(1) Fibo(0)
Latihan pemrograman
1. Buatlah program untuk mengetahui sebuah string palindrome atau bukan
2. Buatlah program untuk mencetak factor prima dari sebuah bilangan
3. Buatlah program konveris bilangan decimal ke biner
Latihan pemrograman lanjut
1. Di sebuah kelas terdapat n orang siswa, setiap siswa memiliki kepribadian yang
berbeda-beda, ada yang suka berkelompok namun tidak jarang ada yang memilih
menyendiri. Suatu Ketika siswa siswa tersebut akan melakukan kamping di
pegunungan, guru berusaha mengakomodir keinginan siswa dan mendata akan ada
berapa kelompok siswa yang akan terbentuk saat kamping. Tentu jumlah anggota
satu kelompok dapat terdiri dari 1-m orang siswa. Bantulah guru untuk melihat ada
berapa kejadian yang mungkin dari kasus pembentukan kelompok tersebut.
Contoh input
4 Format input
53 X -> jumlah kasus
N1,M1 -> kasus pertama, N1 siswa, M1 jumlah maksimum anggota kelompok
21
N2,M2 -> kasus kedua, N2 siswa, M2 jumlah maksimum anggota kelompok
01
N3,M3 -> kasus ketiga, N3 siswa, M3 jumlah maksimum anggota kelompok
70 N4,M4 -> kasus keempat, N4 siswa, M4 jumlah maksimum anggota kelompok
Pendekatan logika
Perhatikan terlebih dahulu contoh output yang diminta
gambaran 0utput
5 3 -> (3,2), (3,1,1), (2,2,1), (2,1,1,1), (1,1,1,1,1)
2 1 -> (1,1)
0 1 -> (0)
7 0 -> tidak bisa
Secara lebih mudah kita dapat analogikan N adalah hasil penjumlahan dimana
masing-masing bilangan yang dijumlahkan tidak boleh melebihi nilai M, sehingga
contoh itu bisa ditulis Kembali
gambaran 0utput
5 3 -> (3+2), (3+1+1), (2+2+1), (2+1+1+1), (1+1+1+1+1)
2 1 -> (1+1)
0 1 -> (0)
7 0 -> tidak bisa
Lakukan penyelidikan untuk mengetahui pola yang berlaku dalam masalah ini
Kasus 1: n=0 dan m=0, untuk membentuk jumlahan 0 tentu hanya ada 1
Kasus 2: n=0 dan m=1, untuk membentuk jumlahan 0 tentu hanya ada 1
Kasus 3: n=0 dan m=2, untuk membentuk jumlahan 0 tentu hanya ada 1
Kasus 4: n=0 dan m=3, untuk membentuk jumlahan 0 tentu hanya ada 1
Jadi nilai m berapapun hanya aka nada 1 cara jika jumlah yang diinginkan adalah 0
Kasus 5: n=1 dan m=0, untuk membentuk jumlahan 1 tentu hanya ada 0 cara karena
tidak mungkin membentuk penjumlahan hasil 1, jika masing-masing elemen
penjumlahnya adalah 0, kasus ini juga berlaku untuk nilai n lebih dari 1
Kasus 6: n=1 dan m=1, untuk membentuk jumlahan 1 tentu hanya ada 1, berapapun
nilai m pada kasus ini pasti Cuma ada 1 cara saja.
Kasus 7: n=2 dan m=1, untuk membentuk jumlahan 2 ada 1+1 jadi 1 cara
Selanjutnya mari kita tabelkan
Setelah melakukan penelitian pada pola data di atas kitab isa membuat fungsi
rekursif yang berlaku umum pada kasus ini
Kita sementara bisa menebaknya F(N,M)=F(N,M-1)+F(N-M,N-M)
2. Mencari jalan terpendek
Input : N,M
Pada kasus ini kita juga perlu untuk membuat tabulasi penyelidikan dari kasus paling
sederhana sebagai berikut:
n m Gambaran keterangan
1 1 1 jalan
2 1 1 jalan
1 2 1 jalan
2 2 2 jalan
F(2,2)=F(1,2)+F(2,1)
3 1 1 jalan
1 3 1 jalan
3 2 3 jalan
F(3,2)=F(2,2)+F(3,1)
2 3
3 3
4 1
1 4
4 2
2 4
4 3
3 4
4 4
Setelah melakukan penelitian pada pola data di atas kitab isa membuat fungsi
rekursif yang berlaku umum pada kasus ini
Kita sementara bisa menebaknya F(N,M)=F(N,M-1)+F(N-1,M)
3. Kasus N quin
Pada kasus N Quin, kita diminta menempatkan maksimal buah quin dalam papan
catur sehingga masing-masing quin tidak bisa saling menyerang, contoh pada kasus
papan catur 4 x 4 berikut
v
Bagaimana cara menemukan jumlah ratu maksimal untuk kasus papan NXN?
Berbeda dengan kasus rekursif sebelumnya, di kasus ini kita menggunakan perulangan
rekursif untuk melakukan pencarian secara brute force, bagaimana posisi quin dan apakah
bisa jumlah quin akan sama dengan jumlah baris atau kolom pada papan catur tersebut
Pencarian dilakukan dengan tujuan mengisi 1 buah quin di setiap baris secara terurut, dan
pada setiap baris percobaan penempatan quin adalah dimulai dari kolom paling kiri ke
kanan. Sebelum ditempatkan tentu harus dilakukan terlebih dahulu cek apakan posisi
tersebut aman dari quin di baris-baris sebelumnya
Jika semua posisi dalam calon baris tidak aman maka update posisi pada baris sebelumnya,
disinilah letak rekursifnya.
Rancangan program diatas masih memerlukan penelitian dan pendalaman lebih lanjut.
Pemrograman Graph
Graph merupakan salah satu metode pemodelan masalah dalam informatika contohnya jika
ingin mewarnai bangun berikut dengan warna yang berbeda maka kita dapat memodelkan
bentuk draphya
Namun bentuk graph akan sangat tergantung dari masalah yang dimodelkan, di atas karena
kita ingin mewarnai setiap daerah dengan warna berbeda. Maka garis di graph
merepresentasikan daerah yang berbatasan. Sehingga jika setiap simpul di graph kita beri
warna yang berbeda maka di peta juga memiliki komposisi warna yang sama. Salah satu
contoh komposisinya adalah
Teknik pewarnaan graph ini dapat digunakan untuk beberapa masalah terkait, seperti
pembentukan kelompok kerja.
#include <iostream>
using namespace std;
int main() {
int a[7][7]; int T[7]={0,0,0,0,0,0,0}; int d[7]={0,0,0,0,0,0,0}; int w[7]={0,0,0,0,0,0,0};
int kolom, baris, hitung,awal,akhir;
cin>>baris; kolom=baris;
for (int i=1;i<=baris;i++){ //baris
for (int b=1;b<=kolom;b++){ //kolom
if (i!=b) {
cin>>a[i][b];
if(a[i][b]==1){
d[i]++; } /*perhitungan derajat vertex*/
} else a[i][b]=0;
}
}
/*pewarnaan*/
/*cari derajat terbesar yang masih belum memiliki warna*/
int warna=1; int total=0;
while (total<baris){
int cek=0; int mark=0;
for (int i=1;i<=baris;i++){
if((d[i]>cek)and(w[i]==0)){ /*derajat terbesar yang belum diwarnai*/
cek=d[i]; mark=i;
}
}
w[mark]=warna; /*vertek terpilih diberi warna sekarang*/
total++; /* mencatat ada penambahan vertek yang sudah diwarnai*/
d[mark]=0; /* derajat vertek terpilih yang sudah diwarnai kemudian di nolkan */
for (int i=1;i<=baris;i++){ /*catat semua vertek yang terhubung dengan vertek terpilih*/
T[i]=a[mark][i];
}
for (int i=1;i<=baris;i++){
if((a[mark][i]==0)and(i!=mark)and(w[i]==0)and (T[i]==0)){
/* jika tidak ada hubungan vertek I dengan vertek terpilih dan belum diwarnai*/
w[i]=warna; /* diberi warna yang sama*/
total++; d[i]=0; T[i]=1;
for(int j=1;j<=baris;j++){ /*semua vertek yang berhubungan dicatat*/
if ((a[i][j]==1)){
T[i]=1; }
}
}
}
warna++;
}
for(int i=1;i<=baris;i++){
cout<<"warna ke "<<i<<" adalah "<<w[i]<<endl;
}
return 0;
}
Bentuk pemodelan graph lainnya adalah Ketika memecahkan permasalahan yang memiliki
bobot pada setiap hubungannya. Contoh mencari jarak terpendek dari suatu tempat ke
tempat lain. Perhatikan pemodelan berikut
Jika kita mencari jalan terpendek dari start ke finish maka kita dapat memanfaatkan
beberapa algoritma baik yang bersifat bruteforce maupun yang bersifat greedy.
Nama:
Kelas:
Tes Pemahaman Pemrograman Dasar
1. Buatlah program dalam Bahasa C/C++ tentang input dan output data hasil ujian siswa
di kelas yang terdiri dari n (2>n>100) siswa.
Contoh
siswa 1 2 3 4 5 6
Uts 80 78 79 82 78 78
Uas 78 74 77 80 81 75
Rata tugas 86 85 85 83 87 80
2. Dari data siswa pada contoh nomor 1, temukan nilai rata-rata UTS, UAS, dan RATA
TUGAS dalam format 2 angka decimal.
3. Buatlah fungsi rekursif dalam C/C++ untuk mencari sukuk e n dari deret
0,1,1,2,4,7,13,24,44,81,….
Tes Pemahaman Materi Aritmatika
1. Tentukan banyak bilangan yang habis dibagi 7 atau habis dibagi 3, namun tidak habis
dibagi 5 dan 3
2. Tentukan banyaknya siswa minimal dalam satu kelas agar dipastikan terdapat 4 orang
siswa memiliki huruf depan nama yang sama.
3. Ada berapa bilangan biner 7 digit yang tidak memiliki 2 digit 0 bersebelahan.