Anda di halaman 1dari 24

PENGENALAN BAHASA C

A. Struktur dasar Bahasa C


Secara umum struktur Bahasa C dapat dilihat sebagai berikut.

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

B. Memberi catatan pada program dengan komentar


Sangat penting bagi seorang programmer untuk memberi catatan-catatan penting pada list
program, untuk memudahkan apabila dikemudian hari program tersebut akan ditinjau
kembali. Ada dua cara menuliskan komentar yaitu dengan awalan tanda // untuk komentar
hanya 1 baris, dan dengan /*….*/ untuk komentar lebih dari satu baris. Komentar ini hanya
dilihat oleh programmer dan tidak ditampilkan ke user saat di compile, contoh penulisan
komentar pada program terlihat pada gambar berikut.

C. Tipe Data Dasar dalam C


Ada tiga kelompok besar tipe data yaitu tipe data karakter (char), tipe data bilangan bulat
(unsign int, integer, longint, short), tipe data bilangan decimal (float, double). Tipe data
karakter mengacu pada kode ASCII, dimana data dibaca berupa karakter walaupun
bentuknya sebuah angka namun dia pada tipe data ini tidak dianggap bilangan namun
sebuah karakter. Sedangkan untuk angka yang bermakna bilangan kitab isa memilih tipe data
bilangan bulat atau decimal.
Tipe data ini sangat berkaitan erat dengan variable yang digunakan untuk menampung data
tersebut. Di dalam Bahasa C dikenal ada dua jenis media tamping data yaitu variable dan
konstanta. Variable adalah sebuah wadah untuk menampung data sesuai tipe data yang
sesuai, nilai dari variable bisa berubah-ubah.

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()

Perhatikan pada gets tidak diperlukan kode variable.

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

OPERATOR, PERCABANGAN, PERULANGAN


a. Operator pada Bahasa C
Operator merupakan simbul yang digunakan untuk melakukan operasi tertentu, seperti
operator + untuk operator penjumlahan. Ada beberapa operator pada Bahasa C diantaranya
operator aritmatika, operator logika, operator increment-decrement, dan lainnya.
1. Operator Aritmatika, digunakan untuk operasi matematika

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

6. Operator pemberi nilai, digunakan untuk mempersingkat penulisan saat melakukan


operasi aritmatika

b. Percabangan pada Bahasa C


Percabangan adalah istilah untuk menggambarkan alur program yang bercabang atau ada
pilihan aktifitas atau proses lanjutan. Analoginya kita berkendara dan sampai di sebuah
persimpangan, tentu disana kita harus memilih salah satu pilihan jalan yang selanjutnya akan
kita lalui.
Di dalam Bahasa C ada dua cara melakukan percabangan ini yaitu dengan perintah IF kondisi
Then pilihan else pilihan lain (perintah if-else), dan dengan cara switch-case atau pilihan
kasus.

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

2. Perulangan dengan while


Perintah pada perulangan while akan dilakukan jika kondisinya sesuai, sehingga disini
tidak perlu sebuah perubahan nilai counter yang tidak teratur atau pada beberapa tidak
membutuhkan counter. Namun harus diperhatikan kondisi pemberhentian perulangan
harus ada. Misalnya program yang akan eksekusi perintah Ketika user menginputkan
sebuah karakter tertentu.

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.

Pada contoh ini array adalah nama


variable, kitab isa mengganti dengan
nama variable yang lain. Kurung siku
digunakan untuk mengakses index dari
array tersebut. Pada beberapa kasus
tentu kitab isa membuat variable array 2
dimensi ( int array[10][10];)
Dimana terdapat index baris dan index
kolom dari variable

Latihan programming
1. Buatlah program yang mampu menampilkan segitiga Bintang seperti berikut
Input : 7
Output:
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *

2. Buatlah program segitiga pascal sesuai input yang diberikan


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(2) Fibo(1) Fibo(1) Fibo(0)

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

Output: gambaran 0utput


5 5 3 -> (3,2), (3,1,1), (2,2,1), (2,1,1,1), (1,1,1,1,1)
1 2 1 -> (1,1)
1 0 1 -> (0)
0 7 0 -> tidak bisa

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

n m Cara jumlah Tebak pola


2 0 - 0
2 1 1+1, 1 =F(2,1-1)+F(2-1,2-1)
2 2 1+1, 2+0 2 =F(2,2-1)+F(2-2,2-2)
3 0 - 0
3 1 1+1+1 1 ….
3 2 1+1+1, 2+1, 2 = F(3,2-1) +F(3-2,3-2)
3 3 1+1+1, 2+1, 3 3 = F(3,3-1) +F(3-3,3-3)
4 0 - 0
4 1 1+1+1+1 1
4 2 1+1+1+1, 2+2, 2+1+1 3
4 3 1+1+1+1, 2+2, 2+1+1, 3+1 4
4 4 1+1+1+1, 2+2, 2+1+1, 3+1, 4 5
5 0 - 0
5 1 1+1+1+1+1 1
5 2 1+1+1+1+1, 2+1+1+1, 2+2+1 3
5 3 1+1+1+1+1, 2+1+1+1, 2+2+1, 3+1+1, 3+2 5
5 4 1+1+1+1+1, 2+1+1+1, 2+2+1, 3+1+1, 6
3+2, 4+1
5 5 1+1+1+1+1, 2+1+1+1, 2+2+1, 3+1+1, 7
3+2, 4+1, 5
6 1 1+1+1+1+1+1 1
6 2 1+1+1+1+1+1, 2+1+1+1+1, 2+2+1+1, 4
2+2+2,
6 3 1+1+1+1+1+1, 2+1+1+1+1, 2+2+1+1, 7
2+2+2, 3+1+1+1, 3+2+1, 3+3
6 4 1+1+1+1+1+1, 2+1+1+1+1, 2+2+1+1, 9
2+2+2, 3+1+1+1, 3+2+1, 3+3, 4+1+1, 4+2
6 5 1+1+1+1+1+1, 2+1+1+1+1, 2+2+1+1, 10
2+2+2, 3+1+1+1, 3+2+1, 3+3, 4+1+1,
4+2, 5+1
6 6 1+1+1+1+1+1, 2+1+1+1+1, 2+2+1+1, 11
2+2+2, 3+1+1+1, 3+2+1, 3+3, 4+1+1,
4+2, 5+1, 6

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

A Ada berapa jalan terpendek (horizontal/vertical)


dari A ke B.

Input : N,M

Output : jumlah kombinasi jalan terpendek


B

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

Ada 3 arah cek posisi. Misalkan posisi adalah (x,y) maka


yang perlu di cek adalah

1. (x--,y) perulangan sejumlah x


2. (x--,y++) perulangan sejumlah n-y
3. (x--,y--) perulangan sejumlah y

Jika semua posisi dalam calon baris tidak aman maka update posisi pada baris sebelumnya,
disinilah letak rekursifnya.

Secara kasar kitab isa merancang sebagai berikut

Int cekposisi( int x, int y){ Void posisi(int a,int b){


Cekposisi=1; If (cekposisi(a,b)){
For (int i=1;i<=x;i++){ N[a,b]=1;
If((I,y) terisi quin){ Posisi(a+1,0);
Cekposisi=0; }
Else if (b<n){
}
Posisi(a,b+1);
}
} else{
If(cekposisi==1){ Int i=0;
For (int i=y+1;i<=n;i++){ Do{
If((x--,i) terisi quin){ If(a!=0 &&N[a-1,i]==1){
Cekposisi=0; N[a-1,i]=0; N[a-1,i+1]=1;
} Posisi(a,0);
} }
}
If(cekposisi==1){
For (int i=1;i<=y;i++){
If((I,y--) terisi quin){
Cekposisi=0;
}
}
}
}

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

Bagaimana algoritma untuk kasus ini?

1. Prioritaskan simpul di graph dengan cabang terbanyak, beri warna I,


2. Untuk simpul dengan cabang terbanyak berikutnya beri warna dengan syarat
a. Jika terhubung dengan simpul yang sudah diwarnai maka beri warna yang tidak
sama, usahakan warna yang dipilih adalah warna yang sama dengan simpul yang
pernah diwarnai namun tidak terhubung.
b. Jika tidak terhubung dengan simpul yang sudah berwarna, maka pilih warna
usahakan warna yang pernah dipakai
3. Perulangan berhenti saat semua simpul sudah diwarnai.

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.

4. Berapa banyak warna yang diperlukan untuk mewarnai graph berikut

Anda mungkin juga menyukai