You are on page 1of 278
“e . ~ i} Got | iv , GNU/LINUX Suwanto Raharjo, S.Si., M.Kom. sesereeseeee HE Kata Pengantar .........cssssssssssesesee 1.1 Menggunakan Linux ... 1.2 Perintah-Perintah Dasar di Linux .. 1.3 Text Editor di Limux ....cssseccssscsernmsrcsennmsssssnmassssansacssssnaanssee 5 1.4 Latihan ....eeeseesseessees seer = 26 Bab 2 Bahasa Pemrograman C 1.1 Struktur Bahasa Cw 2.2 Kompilasi BB LatiM an weeessesesseeennsecasesnssssssnssnnesssnseesnetssntessssaesanaesssnssssnsesnasesas 12 Bab 3 Dasar-Dasar Pemrograman C .. 3.1 Tipe Kesalahan....... . 3.1.1 Kesalahan Sintaks .........sssscasesnsssnssscnssassnnsssassssensenes 14 9.1.2 Kesalahan Run-time ..sssscssssscsscceccecssceessssmassssnssssnnsnssssseee 14 3.1.3 Kesalahan Logika .... B.2 Elemen Dasar Cu.....csssssccssssssecsnsssssecsnssssecsssasseesansanssssesssasessses 15 3.2.1 Pengenal 3.2.2 Kata KUNG 0. ssessaessnsnssenesensssnssanssnsesnsesasssessnssnsenasenes 16 3.2.3 Tipe Data Dasar 3.2.4 Variabel ...sccssssseecsssnssessssssesssssssessssnsssssssnnsssssennsnsssssssess 18 8.2.5 Konstanta es ccsnessnnescnesennsssnassnnsssnacsssncssansiesnasesns 21 \ x i Struktur Dato Menggunakan C di GNU/LINUX 3.2.6 Operator .... 3.2.7 Pernyataan 3.3 Latihan Bab 4 Operasi Input Output 4.1 Fungsi printf .. 4.2 Fungsi scanf .. 4.3 Contoh-Contoh Soal 4.4 Latihan Bab 5 Pengendalian Program RAD HUK ST cr crscarnmn tra enRM aE 6.2 Instruks? SWHCH ssssssccsssessconsnsessesnssssiesissssesessassssseisnissseressssssce 47 5.3 Contoh-Contoh Soa .... oor G4 LARA ct cssseesessssesncreneeesenntsnnscasnsnsonnasitosersanssssomnstsarisnnstsonisssss SD Babs. 6: Perulan gan ‘sa. cinssisencesvinionsnnessiensaroean: sree OT AD Instr POP scion ncnaiocoiaenma SE 6.2 Instruksi while 60 6.3 Instruksi do-while 6.4 Penggunaan break dan continue . 6.5 Contoh-Contoh Soal 6.6 Latihan ... Bab 7 Array dan String..... 7.1 Contoh-Contoh Soa .ssssssssessesssssssssssncsssssesssassessssssnssssssssssssess 99 72 Latta ssescssssessecsssseornsessacsrasscenssesssercasesnaesssaassseeessassessssassce TOT, Bab 8 Struktur 8.1 Definisi Strul 8.2 Contoh-Contoh Soal ...sssssssecssssesssssssesesssssasssesensesssesssssatsssrsssse 112 8.3. Latihan J Daftar Isi Bab 9 Subprogram . 9.1 Rekursi .. 9.2 Contoh-Contoh Soal Bab 10 Sorting .. 10.1 Metode Selection Sort 10.1.1 Pengurutan Naik (Ascending) 10.1.2 Pengurutan Turun (Descending) 10.2 Metode Bubble Sort ... 10.2.1 Pengurutan Naik (Ascending) 10.2.2 Pengurutan Turun (Descending) 10.3 Metode Insertion Sort 10.3.1 Pengurutan Naik (Ascending) 10.3.2 Pengurutan Turun (Descending) 10.4 Metode Merge Sort .... 10.4.1 Pengurutan Naik (Ascending) 10.4.2 Pengurutan Turun (Descending) 10.5 Latihan ... Bab 11 Searching... 11.1 Metode Sequential Search 11.1.1 Pencarian pada Array Belum Terurut .. 11.1.2 Pencarian pada Array Terurut 11.2 Metode Binary Search 11.3 Latihan ... Bab 12 Stack... 12.1 Single Stack. 12.1.1 Operasi- 9 12.1.2 Contoh Soal Single Stack 12.1.3 Latihan Single Stack .. i220 DoUbIe Steck ee 12.2.10perasi-Operasi Double Stack 12.2.2 Contoh Soal Double Stack. 12.2.3 Latihan Double Stack ... & et Struktur Dato Menggunakan C di GNU/LINUX Bab 13 Queue ........00008 13.1 Implementasi Queue dengan Linear Array.. 13.1.1 Operasi-Operasi Queue dengan Linear Array 13.1.2 Contoh Soal Queue dengan Linear Array 13.1.3 Latihan Queue dengan Linear Array... 13.2 Implementasi Queue dengan Circular Arra‘ 13.2.1 Operasi-Operasi Queue dengan Circular Array 13.2.2 Contoh Soal Queue dengan Circular Array . 13.2.3 Latihan Queue dengan Circular Array..... Bab 14 Pointer dan Linked List 14.1 Operasi-Operasi Pointer 14.2 Alokasi Dinamis pada Poi 14.3 Contoh Program Pointer 14.5 Linked List 14.5.1 Operasi-Operasi Linked Li: 14.5.2 Contoh Soal Linked List... 14.5.3 Latihan Linked List... Daftar PuStaka ........sceescsessseseseeseseteeees wenesbdansnsnbes 391 Profil PENUlis .......:.cscsssseeessseeessseseeseeesseeseseee an 393 1.1 Tampilan Desktop di Linux 1.2 Text Mode di Linux .. 1.3 Prompt Login di Linux 1.4 Shell Prompt .... 1.5 Beberapa Text Editor di Linux . 2.1 Langkah Interpreter . 2.2 Langkah Compiler ... 12.1 llustrasi Single Stack 12.2 llustrasi Double Stack 13.1 llustrasi Queue ........ 13.2 llustrasi Queue dengan 13.3 llustrasi Circular Array . 13.4 Ilustrasi Queue dengan Circular Array 14.1 Ilustrasi Linked List ...........0068 14.2 Menambah Simpul di Belakang 14.3 Menambah Simpul di Depan 14.4 Menambah Simpul di Tengah 14.5 Menghapus Simpul di Depan . 14.6 Menghapus Simpul di Tengah 14.7 Menghapus Simpul di Belakang 14.8 Mencetak List dengan Membaca Maju 14.9 Mencetak List dengan Membaca Mundir .. 13.10 Mencari Data pada List 317 3.1 Tabel Kata Kunci 3.2 Data dalam Pemrograman ... 3.3 Tabel Tipe Dasar ........... 3.4 Perbandingan Tipe Dasar 4.1 Fasilitas /O Terformat aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Ww atau banyak pengguna menjalankan task yang sama) semua task dapat membagi pakai memori yang sama. Metode ini dinamakan copy-on-write pages yang menjadikan penggunaan RAM menjadi lebih efisien. 3. Linux juga mendukung demand paging, yaitu hanya akan meload suatu page jika diperiukan. 4. Penggunaan swap space yang akan membantu suatu komputer dengan RAM yang kecil. 5. Dukungan terhadap dinamically shared library yang dapat memperkecil ukuran dari program. Struktur Data Menggunakan C di GNU/LINUX Linux juga mendukung berbagai arsitektur komputer seperti Alpha, Mac, dan lainnya, serta telah mendapat dukungan dari perusahaan komputer besar seperti IBM dan Hewlett Packard. Umumnya Linux digunakan sebagai server dalam jaringan, namun kini Linux digunakan untuk keperluan sehar-hari seperti mentik, menghitung, menggambar, dan bermain games di lingkungan dekstop yang telah semakin banyak. Tampilan Linux yang digunakan sebagai desktop telah dapat mengimbangi sistem operasi yang telah ada seperti Microsoft Windows. Tampilan desktop dari Linux tampak pada Gambar 1.1. Gambar 1.1 Tampilan Desktop di Linux Tampilan Gambar 1.1. menunjukkan bahwa Linux dapat menjalankan berbagai aplikasi yang secara prinsip sama dengan aplikasi yang dijalankan pada sistem operasi lain, seperti Mozilla sebagai web browser, OpenOffice untuk aplikasi perkantoran, gimp untuk manipulasi gambar, dan lain-lain. Selain memiliki tampilan desktop yang cantik, aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Nee + S poe 14. Struktur Data Menggunakan C di GNU/LINUX Gambar 1.5 Beberapa Text Editor di Linux 1.4 Latihan Instruksi apakah yang berfungsi untuk mengetahui posisi atau home directory? Instruksi id berfungsi untuk apa? Sebutkan langkah-langkah untuk membuat login. Bagaimana caranya mengganti login? Bagaimana caranya menghapus login? Bagaimana caranya mematikan login? Login sudah dibuat, tetapi password belum dibuat. Bagaimana caranya mengisi atau melengkapi password? Apabila kita lupa password, bagaimana solusinya? Bagaimana caranya mengganti password? Apabila kita akan melengkapi identitas, menggunakan instruksi apa? Apabila kita akan mengcopy berkas pada direktori yang sama, instruksinya bagaimana? Apabila kita akan mengcopy berkas pada direktori yang berbeda yang nama direktori asalnya juga ikut terkopi dengan nama file copy yang sama, maka instruksinya bagaimana? Apabila kita akan mengcopy berkas pada direktori yang berbeda yang nama direktori asainya tidak ikut terkopi, hanya nama file copy saja (dengan nama file copy sama) bagaimana? Apabila kita akan mengcopy berkas pada direktori yang berbeda yang nama direktori asalnya tidak ikut terkopi, hanya nama file copy saja (dengan nama file copy berbeda) bagaimana? aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Struktur Data Menggunakan C di GNU/LINUX float jumlah(float x,float y);<- fungsi Penulisan library atau praprosessor selain diapit dengan tanda < > juga main ( ) { } Dalam C fungsi main() harus didefinisikan dan pada setiap fungsi yang ada dalam bahasa C akan memiliki bentuk: nama_fungsi (parameter) { variabel lokal Cc statement } Berikut contoh program dalam bahasa C [wen eenen nee neeeeneee- */ i* Program Sederhana */ aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Struktur Data Menggunakan C di GNU/LINUX 3.1 Tipe Kesalahan Pemrograman merupakan proses yang kompleks dan tidak menutup kemungkinan terjadi suatu kesalahan atau error. Berbagai macam kesalahan dapat terjadi dalam sebuah pemrograman. Kesalahan pemrograman sering dinamakan bug, sedangkan proses untuk pencarian kesalahan dinamakan dengan debugging. Pemrograman kesalahan dapat dibagi menjadi tiga macam, yakni kesalahan sintaks (syntax error), kesalahan run-time (run-time error), dan kesalahan logika (/ogic error). Pembagian jenis kesalahan ini dalam pemrograman Gapat menjadikan proses pencarian kesalahan menjadi lebih cepat. 3.1.1 Kesalahan Sintaks Bahasa C hanya dapat dieksekusi jika dan hanya jika program tersebut memiliki sintaks yang telah sepenuhnya benar. Jika tidak, maka proses akan berhenti dan memberikan pesan kesalahan. Sintaks menunjukkan pada struktur program dan aturannya. Sintaks dalam bahasa Indonesia, misalnya sebuah kalimat harus diawali dengan huruf besar dan diakhiri dengan titik. Bila terjadi kesalahan sintaks dalam bahasa, maka beberapa pembaca tidak akan begitu mempermasalahkan, tetapi C tidak demikian. C harus ditulis dengan benar tanpa ada satupun kesalahan sintak. 3.1.2 Kesalahan Run-time Kesalahan tipe kedua adalah kesalahan run-time, Disebut demikian karena kesalahan ini tidak akan muncul sebelum program dijalankan, Kesalahan ini juga sering disebut dengan exception karena kesalahan ini biasanya menunjukkan sesuatu yang ganjil (dan tidak benar) terjadi. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. a ‘Struktur Data Menggunokan C di GNU/LINUX Tabel 3.3 Tabel Tipe Dasar De ae char 1 5 unsigned char 1 0 255 short int 2 32768 32767 unsigned short int | 2 0 65536 (long) int 4 2 $241 float 4 3.210" +3.2x10% double _ 4 -1.7x10% +1. 7x10" Bila kita menggunakan Pascal, maka padanan tipe data dengan Pascal adalah seperti tertampil pada tabel 3.4. Tabel 3.4 Perbandingan Tipe Dasar Char char unsigned char ~ short int integer unsigned short int - (long) int longint float real Double extended 3.2.4 Variabel Fungsi variabel di dalam program adalah untuk menyimpan suatu nilai tertentu yang dapat diubah-ubah. Variabel dapat dianggap sebagai sebuah tempat penyimpanan yang dapat diisi oleh suatu data yang isinya dapat berubah-ubah. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. yy Struktur Data Menggunakan C di GNU/LINUX Operator Penunjukan (Assignment) Memberikan nilai dari bagian sebelah kanan operator ke bagian sebelah kiri operator. Operator penunjukan dalam bahasa C menggunakan tanda sama dengan =. Termasuk: =, dan Contoh : x =x + 1 sama artinya dengan x += 1. Je wane neeee een e eee eee e eee */ /* Perhitungan Sederhana */ * by Ema & Wawan */ #include main () { float p,q.r,s.t: tl; pteqtr/s+t; printf (*Hasil perhitungan p adalah %.0f \n",p); Contoh pemberian nilai awal pada program di atas bisa disederhanakan menjadi: yt = -*/ /* Perhitungan Sederhana */ is by Ema & Wawan f Jt -e2------------------- = */ #include main () £ float p,g,r,s,ti aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. ‘Struktur Data Menggunakan C di GNU/LINUX Dalam penggunaan operator, khususnya operator aritmatika, perlu di- perhatikan urutan prioritasnya. Untuk mengubah urutan prioritas gunakan tanda kurung buka dan kurung tutup. Perlu diperhatikan bahwa tipe data di sebelah kiri operator penunjukkan (tanda =) harus sama dengan tipe data ekspresi yang terdapat di sebelah kanan operator penunjukkan. Misalkan, jika di sebelah kanan adalah perhitungan aritmatika yang menghasilkan nilai bilangan float, maka varia- bel yang ada di sebelah kiri harus bertipe float juga. 3.2.7 Pernyataan Pernyataan (statement) adalah satuan instruksi atau perintah yang akan cikerjakan selama eksekusi program berlangsung. Sebuah program terdiri dari sekumpulan pernyataan. Ada beberapa jenis pernyataan di dalam C misainya: pernyataan penunjukan, pernyataan pemanggilan fungsi, dan pernyataan pengendalian program. Contoh pernyataan penunjukan: c=sart (pow (a, 2) +pow(b,2)); Contoh pernyataan pemanggilan fungsi: tukar (x,y); Contoh pernyataan penunjukan yang melibatkan pemanggilan fungsi: q=keliling(p,1); Contoh pernyataan pengendalian program: for (i=1;i<=4;i++) printf£(*Hello semua\n"); aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. go Struktur Data Menggunokan C di GNU/LINUX Setelah program di atas dialankan, selama belum di-enter data diinputkan terus. Untuk menghentikan penginputan tekan Ctrl c sehingga muncul shell prompt. Selain fasilitas dasar VO, bahasa C juga mempunyai fasilitas VO yang terformat, yaitu dengan fungsi scant dan printf. Terformat artinya lebar dan bentuk tampilannya dapat diatur. Tabel 4 merupakan penggunaan fasilitas I/O terformat: Tabel 4.1 Fasilitas I/O Terformat é char _| satu karakter iva int angka desimal ° int angka oktal x int angka haeksadesimal na int desimal tak bertanda s string | String £ float angka pecahan e float angka pecahan dalam notasi saintifik g float | angka pecahan pengganti Sf atau Se tergantung yang terpendek Pp alamat memori untuk pointer & menampilkan persen Simbol % dinamakan momen, sering juga disebut penentu format. Mo- men digunakan untuk mengeluarkan nilai dari suatu variabel dengan tipe tertentu. Antara tanda % dan format dapat diberi (-) tanda minus atau angka integer. Tanda minus dapat menjadikan karakter rata kiri, sedangkan angka integer menunjuk- kan lebar field. Tanda m.n dengan m = lebar field dan n = digit presisi setelah titik. Misal: 1. %ns artinya menampilkan hasil bertipe string rata kanan selebar n. 2. %ns artinya menampilkan hasil bertipe string rata kiri selebar n. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. wy ‘Struktur Data Menggunokan C di GNU/LINUX Tampilan program: Masukkan nilai panjang = Masukkan nilai lebar = 6. Luas = 63.05 9.7 5 Program berikut adalah untuk menghitung rata-rata dari dua buah data. [* neneenennneeeeee nnn e- */ /* Menghitung Rerata */ * by Ema & Wawan*/ = */ #include main() { float a,b,hasil; printf ("Masukan dua buah nilai “\ “dipisahkan dengan koma “); scanf("$f,%£", &a,&b); hasil= (a+b) /2; printf (*Rata-rata =%f\n",hasil); Tampilan program: Masukan dua buah nilai dipisahkan dengan koma 7,9 Rata-rata =8.000000 : 4.3 Contoh-Contoh€oal 1. Buatlah program untuk menghitung luas dan keliling lingkaran dengan besarnya jari-jari lingkaran dimasukkan melalui keyboard. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. \38 ee tt Struktur Data Menggunokan C di GNU/LINUX printf ("Setara dengan %i jam %i menit $i detik \ n”,jam,menit, detik) ; } Tampilan program: Waktu ujian (dalam detik) = 7244 Setara dengan 2 jam 0 menit 44 detik 4, Buatlah program untuk menukar dua buah nilai, Jawab: jt --------------------- */ a Menukar Dua Nilai af /* by Ema & Wawan ba #include main () { float a,b, temp; printf ("Enter first number : “); scanf("tf£",&a); print£("Enter second number : “); scanf(“tf",&b); temp=a; a=b; b=temp; printf (*First number is %.2f and second number is %.2£ \n",a,b); Tampilan program: Enter first number : 99 Enter second number : 75 First number is 75.00 and second number is 99.00 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bob 5 Pengendalian Program RY Operator lain yang sering digunakan adalah temary (?) yang mempunyai bentuk (ekspresi) ? pernyataanl : pernyataan2; Perintah di atas mempunyai nilai yang sama dengan perintah berikut: if (ekspresi) pernyataanl else pernyataan2; 3. Instruksi if dengan pilihan if lainnya if (ekspresil) pernyataanl; else if (ekspresi2) pernyataan2; else pernyataan3; 4. Instruksi if di dalam instruksi if if (ekspresil) pernyataani; if (ekspresiz) pernyataan2; Contoh penggunaan perintah if adalah sebagai berikut: [* ----------------------------- */ /* Data Terbesar dari 3 Data */ i* by Ema & Wawan */ #include main() { int a,b,c; printf ("Masukkan 3 buah data yang dipisahkan dengan koma “); scant ("ti, ti, ti", &a,&b, &e); if (a>b) { aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 5 Pengendalian Program 5.2 Instruksi switch Instruksi switch dirancang untuk menangani pengendalian program yang melibatkan banyak alternatif. Biasanya digunakan untuk menggantikan instruksi if-else yang bertingkat. Bentuk umum instruksi switch adalah: switch (ekspresi) { case iteml: pernyataanl; break; case item2: pernyataan2; break; default : pernyataan; break; Berikut contoh penggunaan instruksi switch: /* Pilihan Mobil */ /* by Ema & Wawan */ #include main () { int kode; puts (" Menentukan Pilihan”) ; puts(" 1=BMW 2=AUDI 3=FIAT 4=VW 5=TIMOR”); printf (" Masukan pilihan anda (1..5): “); scanf(“d”, kode) ; switch (kode) { case 1: puts(* Mobil pilihan anda BMW"); break; case 2: puts(" Mobil pilihan anda AUDI"); break; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 5 Pengendatian Program (kode==2) puts(" puts (" puts (* puts (" puts (™ puts (" puts (* puts(* Bulan Februari”); Bulan Maret”) ; Bulan April”); Bulan Mei”); Bulan Juni”); Bulan Juli”); Bulan Agustus”) ; Bulan September”) ; 0) puts(" Bulan Oktober") ; 11) puts(" Bulan Nopember") ; 12) puts(" Bulan Desember”) ; i 1) puts(" Bulan Januari”); else puts(" Yang Anda masukkan bukan pilihan (1..12) kan ?"); } Penyelesaian di atas menggunakan instruksi if-else, sedangkan apabila menggunakan instruksi switch adalah seperti berikut ini: /* => */ /* Pilihan Bulan */ /* by Ema & Wawan */ JR amaumemomonammases */ #include main () { int kode; puts(" Menentukan pilihan”) ; puts(" 1 = Januari”); puts(" 2 Februari"); puts(" 3 Maret") ; puts(* 4 = April”); puts(" 5 Mei”); puts(" 6 Juni"); puts(" 7 = Juli”); puts(" 8 = Agustus”); puts(" 9 = September”) ; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. ‘Bab 5 Pengendalian Program & 5.4 Latihan 1. Berikut program untuk mencek apakah data yang dimasukkan merupakan bilangan nol, genap, atau ganijil. #include “stdio.h" main() { int data; printf ("Masukkan sebuah data ="); scanf ("%i", &data) ; if (data==0) printf(“Data nol\n"); else if (datat2 0) printf (“Data genap\n”) ; else printf(“Data ganjil\n"); Ubahlah program di atas dengan menggunakan tanda ternary (?) untuk menggantikan if-else di atas. 2. Menggunakan switch buatlah program untuk menentukan nama hari jika yang diinputkan bilangan integer 1 s/d 7. 3. Buatlah program di mana user diberi pilihan sebagai berikut: Menu Pilihan Bidang Jajaran Genjang Bidang Persegi Panjang Bidang Bujur Sangkar Bidang Lingkaran Bidang Segitiga Bidang Trapesium me powD Setiap pilihan bidang menghitung luas dan keliling bidang yang di Ukuran-ukuran yang berkaitan dimasukkan melalui keyboard. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. &- Bab 6 Ferulangan Tampilan program: Penulisan instruksi for pada program di atas mempunyai arti yang sama dengan instruksi for 3 downto 1 pada Pascal. Contoh lain adalah: [eon n- nee e eee nee e eee eee eee eee eee */ /* Indeks Perulangan dengan Nilai Tertentu */ /* by Ema & Wawan af [twa nnn nn nnn nn nnn eee eee */ #include main() int bilangan; for (bilangan=1000; bilangan; bilangan/=10) { printf ("%d\n”, bilangan) ; Tampilan program: 1000 100 10 1 Proses perulangan pada program di atas akan berhenti sampai nilai variabel bilangan yang masih bisa dibagi dengan 10. Ekspresi dapat lebih dari satu, misal: for (x=0,y=4,2=1000;2;2/=10) aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 6 Perulangan for (xx=5 ;xx<15 ;xx=xx+1) { if (xx==8) { printf("Break terjadi di sini saat xx = %d\n",xx); break; } printf ("Loop ini terjadi sebelum break dengan xx = Sd\n", xx); } flor (xx=5 ;xx<15 ; XX=xxt1) { if (xx==8) printf(“Ini saat xx sama dengan %d\n”, xx); cont inue; printf ("Loop terjadi pada xx<8 dan akan diteruskan setelah xx-8, xx=td\n" xx); Tampilan program: Loop ini terjadi sebelum break dengan xx Loop ini terjadi sebelum break dengan xx Loop ini terjadi sebelum break dengan xx = Break terjadi di sini saat xx = 8 Loop terjadi pada xx<8 dan akan diteruskan setelah xx=8, xx=5 Loop terjadi pada xx<8 dan akan diteruskan setelah xx=8, XX=6 Loop terjadi pada xx<8 dan akan diteruskan setelah xx=8, XxX=7 Ini saat xx sama dengan 8 Loop terjadi pada xx<8 dan akan diteruskan setelah 5 6 7 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 6 Perulangan en: 7, cpos=cneg=cnol=0; for (i=l;i<=n;i++) { printf ("Masukkan data = "); scant ("$i", &dt); if (dt>0) cpos++; /* cpos=cpos+1 */ else if (dt<0) cnegt+; else cnol++; } print£("Banyaknya data bernilai positif = %i\ n”,cpos) ; printf ("“Banyaknya data bernilai negatif - %i\ n”, cneg) ; printf (“Banyaknya data bernilai nol = %i\n",cnol); } Tampilan program: Berapa banyaknya data yang akan dihitung ? 4 Masukkan data oO Masukkan data 1 Masukkan data Qe Masukkan data =& Banyaknya data bernilai positif Banyaknya data bernilai negatif Banyaknya data bernilai nol = 1 BR 3. Buatlah program untuk mencari rata-rata yang sejak awal banyaknya data yang akan dimasukkan belum ditentukan. Jawab: /* Penghitungan Rata-Rata _*/ 7* by Ema & Wawan a7 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 6 Perulongan 7) printf (*Masukan nilai c = “); scanf (“%£", ac); printf (*Persamaan kuadrat : %.1f x*x + $.1f£ x + %.1f \n",a,b,c); d=b*b-44atc; if (d #include main () { int i,n,sigma; printf(* 0 + 7 - 26 + 63 - ...\n"); printf (*Banyak suku yang diinginkan = “); scanf("si",&n); sigma=0; isl; while (ican) { if (4$2==0) sigma=sigma+(pow(i,3)-1); else sigma=sigma-(pow(i,3)-1); aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 6 Perulangan eet 83 j 11. Buatlah program yang dapat digunakan untuk mengidentifikasi setiap huruf yang dimasukkan oleh pemakai melalui keyboard, apakah merupakan huruf kecil atau huruf besar! Jawab: /* eee erie: */ /* Identifikasi Huruf */ /* by Ema & Wawan #/: [toon n-ne ene eee eee */ #include #include main() { int kar; printf ("Tekan enter,spasi atau tab untuk berhenti a exe hE) 7 do { printf ("Masukkan satu karakter = “); kar=getchar (); if (isspace(kar)) break; else { if (isalpha(kar)) printf ("$c adalah huruf “,kar); if (islower(kar)) printf ("kecil\n”); else printf("besar\n”); /* if (isupper(kar) */ } else print£("tc adalah bukan huruf\n”,kar) ; } } while(1); } Program tersebut menggunakan fungsi-fungsi isspace, isalpha, islower, dan isupper yang terdapat dalam library ctype. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bob 6 Perulongan else { printf (“besar\n"); /* if (isupper(kar) */ printf("“Huruf kecilnya adalah %c\n",tolower (kar) ); cb++; } } else { printf("%c adalah bukan huruf\n”,kar) ; cnonh++; } printf£("Ada data lagi (¥/T)? = “); scanf ("%s”, &pilihan) ; print£("\nAnda telah memasukkan %i karakter\ n”,cacah) ; printf ("Anda telah memasukkan %i huruf kecil\n”,ck) ; printf ("Anda telah memasukkan ti huruf besar\n", cb) ; printf ("Anda telah memasukkan %i bukan huruf\ n”,cnonh) ; } Tampilan program: Masukkan satu karakter = a a adalah huruf kecil Huruf besarnya adalah A Ada data lagi (¥/T)? = y Masukkan satu karakter = K K adalah huruf besar Huruf kecilnya adalah k Ada data lagi (¥/T)? = y Masukkan satu karakter = U U adalah huruf besar Huruf kecilnya adalah u Ada data lagi (¥/T)? = y Masukkan satu karakter = E E adalah huruf besar aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. j ab 7 Array dan String Dalam beberapa literatur, array sering diartikan larik. Array merupakan koleksi data dengan setiap elemen data menggunakan nama yang sama dan tiap elemen data bertipe sama. Setiap elemen array dapat diakses melalui indeks array. Suatu array berdimensi satu dideklarasikan dengan bentuk umum berupa: tipe nama_var[ukuran] Pengaksesan array dapat dilihat pada program berikut: YS ccuceommonmtamemene */ /* Program Array */ /* by Ema & Wawan */ Je cic EESS. */ #include int main() aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 7 Array dan St printf ("Hasil Penjumlahan 2 Matriks\n"); for (i = 0; i < nj; i++) { for (j = 0; j < m; j++) printf (*Elemen M3 (ti, %i] = #i\n”,i+1, 5+2,M3 (i) 051); } Tampilan program: Penjumlahan 2 Matriks Matriks berordo = 3,3 Masukkan elemen M1[1,1] Masukkan elemen M1 [1,2] Masukkan elemen M1[1,3] = Masukkan elemen M1[2,1] Masukkan elemen M1 [2,2] Masukkan elemen M1 [2,3] Masukkan elemen M1 [3,1] Masukkan elemen M1[3,2] Masukkan elemen M1[3,3] Masukkan elemen M2[1,1] Masukkan elemen M2[1,2] = Masukkan elemen M2[1,3] = Masukkan elemen M2([2,1] Masukkan elemen M2 [2,2] Masukkan elemen M2[2,3] Masukkan elemen M2[3,1] Masukkan elemen M2 [3,2] Masukkan elemen M2 [3,3] Hasil Penjumlahan 2 Matriks Elemen M3[1,1] = Elemen M3(1,2) Elemen M3[1,3] Elemen M3(2,1] Elemen M3 [2,2] Elemen M3 [2,3] Elemen M3[3,1] = WUUUHHAKHANNNNNNNNN waa aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 7 Array dan String: 7.1 Contoh-Contoh Soal 1 Modifikasi Program String 3 sehingga dapat menghitung banyak huruf kecil dan huruf besar serta banyak karakter. Contoh tampilan adalah sebagai berikut: Masukan nama anda : Naufal RAR Nama anda adalah : Naufal RAR dumlah huruf kecil = 5 Jumlah huruf besar = 4 dumlah karakter termasuk spasi = 10 Jawab: [st ~---------------------------- */ /* Huruf Kecil & Huruf Besar = */ /* by Ema & Wawan */] jie seumooeet pews eeu eee ge eee */ #include main () char line [17]; int ch, max=17, nch=0; int jk=0,jb=0; max = max - 1; printf ("Masukan nama anda : “); while((ch = getchar()) != EOF) if(ch == ‘\n’) break; aif(nch < max) { line[nch] = ch; if (line (nch]>='a’ && line[nch]<='z’) jk++; else if {line[nch]>='A’ && line [nch]<='2') jb++e neh = nch + 1; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 7 Array dan String Data terbesar adalah 28.00 merupakan data ke- 5 4, Buatlah program untuk mencari data terkecil pertama dan data terkecil kedua dari n buah data beserta masing-masing posisinya dalam kumpulan data tersebut. Jawab: fie oxweweeesereemeecuesseoesemeeeewe */ /* Data Terkecil Pertama dan Kedua */ /* by Ema & Wawan */ /* #include int main() int n, index,imin1,imin2,temp; float data [n] ; float minl,min2; printf ("Berapa data yang tersedia ? “); scant ("%i", &n); for (index = 0 ; index < n ; index++) { print£(*Masukkan data ke- ti = “,index+1); scanf ("$f , &data [index] ) ; if (data[0]>data[(1]) { mini-data [1]; imin1=2; min2=data [0]; imin2=1; } else { minl=data [0] ; iminl=1; min2=data [1]; imin2=2; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 7 Array dan String ny Masukkan elemen M1 [2,3] Masukkan elemen M2[1,1] Masukkan elemen M2[1,2] = Masukkan elemen M2 [2,1] Masukkan elemen M2[2,2] = Masukkan elemen M2 [3,1] Masukkan elemen M2[3,2] = pea RR EL Hasil Perkalian 2 Matriks Elemen M3[1,1] = 36 Elemen M3[1,2] = 36 Elemen M3[2,1] 36 Elemen M3[2,2] = 36 7.2 Latihan Buatlah program untuk mencari bilangan prima terbesar kedua dan bilangan prima terkecil kedua disertai posisi atau letaknya dan berapa banyaknya cacah untuk masing-masing bilangan prima terbesar kedua dan bilangan prima terkecil kedua dari n buah data. Buatlah program untuk menentukan matriks transpose. Buatlah program untuk menentukan elemen terbesar dan elemen terkecil yang tersimpan dalam matriks berukuran mxn. Buatlah program untuk menukar dua buah kata yang dimasukkan melalui keyboard. Buatlah program untuk menceri apakah suatu nilai data tertentu merupakan elemen dari suatu matriks A berordo mxn. Apabila datanya ditemukan maka informasikan posisi atau letak ditemukannya. Modifikasilah program operasi penjumiahan dan perkalian matriks di atas supaya tampilannya lebih menarik. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. W127 ceuktur Data Menggunakan C di GNU/LINUX 8.2 Contoh-Contoh Soal 1. Buatlah program untuk menghitung fuas dan keliling lingkaran menggunakan struktur. Jawab: * ~---------------------------------------- */ i Menghitung Luas & Keliling Lingkaran */ is by Ema & Wawan i /* #include #include main() { struct { float jari; float luas; float keliling; } lingkaran; print£(*Masukan jari-jari lingkaran = “); scanf ("$f", &lingkaran.jari); lingkaran.luas=3.14*pow(lingkaran.jari,2); lingkaran.keliling=2*3.14*lingkaran.jari; print£("Lingkaran berjari-jari %.2£ mempunyai luas %.2£ dan keliling %.2£\n", lingkaran. jari, lingkaran. lua s,lingkaran.keliling) ; } Tampilan program: Masukan jari-jari lingkaran = 100 Lingkaran berjari-jari 100.00 mempunyai luas 31400.00 dan keliling 628.00 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Vigne Struktur Dota Menggunakan C di GNU/LINUX 4, Program di atas dapat dimodifikasi seperti di bawah ini: je ween * /* [* ----. #include main() { /* mendefinisikan tipe data_tanggal */ struct data_tanggal { int tanggal, bulan, tahun; de struct char nama[40]; struct data_tanggal tgl_lahir: } info_saudara = { “Naufal Rasendriya Apta Raharema”,19,8,1999}; /* penampilan elemen variabel struktur */ printf ("Nama : %s\n", info_saudara.nama) ; printf ("fanggal lahir : %d-%d-%d\n", info_saudara.tol_ lahir.tanggal, info_saudara.tgl_lahir.bulan, info_saudara.tgl_ lahir. tahun); d aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. wy ‘Struktur Data Menggunakan C di GNU/LINUX 4. Diberika Daftar Nilai Peserta Kuliah Pelatihan Super Unggul STMIK AMIKOM Yogyakarta Tempat & Tgl. Lahir Pape | ete | a [afoaacors| |__| | |onnesssarrr | 76 | No. NIM Nama Email | Alamat Telepon Nilai [8 oscuro 0 200 | 03.22.0997 A ee a. Berikan deklarasi tipe datanya. b. Tuliskan fungsi untuk mencetak daftar nilai masing-masing untuk jenjang D3-T1, S1-T1, D3-M1, dan $1-S1 (--01-- D3-T1; --21--S1-T1; -02-D3- M1; --22--S1-S1). c. Tuliskan fungsi untuk menampilkan data mahasiswa yang pada bulan April 2004 telah berusia minimal 20 tahun dan mengetahui banyaknya. d. Tuliskan fungsi untuk menampilkan data mahasiswa yang lulus menempuh kuliah Pelatihan Super Unggul dan mengetahui banyaknya. Seorang mahasiswa dinyatakan lulus apabila memperoleh nilai minimal 56. Dari fungsi ini diketahui banyaknya mahasiswa yang lulus (dalam prosentase). e. Tuliskan fungsi untuk mengkonversikan nilai angka menjadi nilai huruf dengan ketentuan: Nilai Angka Nilai Huruf 86-100 A 71-85 B 56-70 c <= 55 D aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Struktur Dota Menggunakan C di GNU/LINUX Masukkan nilai panjang = 40 Masukkan nilai lebar = 60 Hasil = 2400 Pada program di atas fungsi tampil merupakan fungsi yang tidak mem- berikan hasil. Fungsi ini menggunakan void. Dalam Pascal, fungsi seperti ini dapat disamakan dengan procedure. /* Bilangan Faktorial */ ye by Ema & Wawan *] #include int fact(); main() { int n, m; printf (*Masukkan angka: “); scanf(“%d",&n); m = fact (n); printf (*Faktorial dari %d adalah %d.\n",n,m); > int fact (x) int x; { int i, facto; if (x==0) facto=1; else { facto: for ( pi<=x;i++) { facto=facto*i; } aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. i287 ceruktur Data Menggunakan C di GNUILINUX Tampilan program: Masukkan angka: 10 Faktorial dari 10 adalah 3628800. Proses operasi perkalian juga dapat ditelusuri menggunakan rekursi. on ea /* Perkalian dengan Rekursi */ * by Ema & Wawan “7s [8 wanna anne nnn e nee n ene none " #include main () { int a,b,hasil; print£(“Masukkan dua buah nilai dipisahkan dengan koma = “); scanf (“td, ta”, &a,&b); hasil=kali(a,b); printf("%i x $i = %i\n",a,b,hasil); } int kali(x,y) int x,y; { if (y: ) return(0); else return(kali(x,y-1) +x); } Tampilan program: Masukkan dua buah nilai dipisahkan dengan koma = 9,9 9x9 = 81 Bandingkan dengan yang tidak menggunakan rekursi seperti tampak di bawah ini: aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. fi i* File main.c “/ /* by Ema & Wawan */ ae “/ #include extern int prima(int x); main () { int i,dt,n; ‘Struktur Data Menggunakan C di GNU/LINUX print£("Berapa banyaknya data ? *); scanf("%i",&n); for (isl;i int prima(int x) { int st,pembagi, batascek: if (x==2) st=0; else if((x<=1) || (x%2==0)) st= else { aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. y3e7 ‘Struktur Data Menggunakan ¢ di GNU/LINUX int x; { int i,jml for (i=1;i; { pit+) if (prima(i)==0) jml=jml+((2*i) +pow(2,i)+2); else jml=jm1- ((2*i)+pow(2, 4) +2); } return (jml); } int prima(j) int j: { int st,pembagi, batascek; if( 2) return(0); else if ((j<=1)||(j%2==0)) return(1); else { sts0; pembagi=3; batascek=ceil (sqrt (j)); while ( (pembagi<=batascek) &&(st==0) ) { if (jtpembagi else pembagi+=2; } if (st ) st=1; ) return (0); Tampilan program: -6+10+16-26+44- Penjumlahan berapa suku ? 4 Penjumlahan 4 suku = -6 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. a Vy Steuktur Data Menggunakan C di GNU/LINUX for (i=1;i<=x;i++) { if (i%2!=0) result=result+a/b; else result=result-a/b; a=at+3; b=b*4; } return(result); Tampilan program: 12/5-15/20+18/80-21/320+...+Un Penjumlahan berapa suku ? 2 Penjumlahan 2 suku = 1.65 9.3 Latihan 4. Jelaskan perbedaan antara void namafungsi(); dan int namafungsi(); 2. — Tunjukkan hasil keluaran dari program di bawah ini: #include float ssi(int mkom) ; main( ) float ssi(int mkom) { int b=1; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bots 10' Sorting: ae NAG, } for (i=0;i main() { int i,j,n,temp; int data[n]; printf ("Berapa data yang akan diurutkan ? “); scanf (“%i",&n); for (i=0;i main() { int i,j,n,temp; int data(n]; printf (*Berapa data yang akan diurutkan ? “); scanf ("i",&n); for (i=O;i0)) { data(j+1]=data[j]; j=3-1; } if (temp<=data[j]) data[j+1]=temp; else { data(j+1]=data[j]; data[j]=temp; } printf (“Setelah Pengurutan\n") ; for (i=0;i0)) { datal[j+1]=datal[j]; 5-5-1; } if (temp<=datai[j]) datal[j+1]=temp; else datal[j+1]=datal[j]; datal[{j]=temp; 20)) { data2 (k+1] =data2[k]; k=k-1; } if (templ<=data2[k]) data2[k+1]=temp1; else { data2[k+1]=data2[k]; data2([k]=templ; JecoucsssugeuccunesuseuesuTecueuEsEeeEeEEE EEE + UM wade ge oe Sesto ce caters esuen css ae + aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. yy Struktur Data Menggunokan C di GNU/UNUX Membaca array data 2. Menentukan data yang dicari 3. Mulai dari data pertama sampai dengan data terakhir, data yang dicari dibandingkan dengan masing-masing data di dalam array a. Jika data yang dicari tidak ditemukan, maka semua data atau elemen array dibandingkan sampai selesai. b. _Jika data yang dicari ditemukan, maka perbandingan akan dihentikan. 11.1.1 Pencarian pada Array Belum Terurut t= “/ /* Pencarian dengan Sequential Search */ i* by Ema & Wawan ay #include main() { int i,n,dt,posisi,ketemu=0; int data[n]; printf ("“Banyaknya elemen array = "); scanf (“%i”,&n); for (i=0;i main () { int i,j,n,dt, temp, ketemu=0,posisi; int data[n]; printf ("Banyaknya elemen array = "); scanf ("%i”,&n); for (i= { printf (“Masukkan data ke-%i = “,i+1); scanf("%i",&data[i]); } pi #define MAX 50 #define true 1 #define false 0 char stack[MAX]; int top; void init (void); int full (void); int empty (void) ; char pop(void); void push(char info); aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 12 Stack MENU PILIHAN : (1] PUSH (2] BACA BALIK [3] Selesai. Pilihan : 1 PUSH M MENU PILIHAN (1] PUSH [2] BACA BALIK [3] Selesai... Pilihan : 1 PUSH P MENU PILIHAN [1] PUSH [2] BACA BALIK [3] Selesai. Pilihan PUSH U MENU PILIHAN : (1] PUSH [2] BACA BALIK [3] Selesai. Pilihan : 1 PUSH K MENU PILIHAN (1] PUSH [2] BACA BALIK [3] Selesai. Pilihan : PUSH A MENU PILIHAN [1] PUSH [2] BACA BALIK [3] Selesai... aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 12 Stack a */ /* Data Terbesar dan Data Terkecil ap i+ Pada Single Stack */ i* by Ema & Wawan */ Pi sees ceeauamaeesunnsemaae nessa */ #include #define MAX 50 #define true 1 #define false 0 int stack[MAX]; int top; void init (void); int full (void); int empty(void); void push(int info); int pop(void); void baca(void); void maxmin (void); main() { char pilih; int elm; Data Terbesar & Data Terkecil--\n”); Menggunakan Single Stack --\n"); printé(* printé(* init(); do { printf("MENU PILIHAN :\n”); aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 12 Stock [2] BACA ISI TUMPUKAN {3] MENCARI DATA TERBESAR {4] Selesai... Pilihan : 1 PUSH 3 MENU PILIHAN : {1] MEMASUKKAN DATA [2] BACA ISI TUMPUKAN [3] MENCARI DATA TERBESAR [4] Selesai... Pilihan : 1 PUSH 5 MENU PILIHAN : [1] MEMASUKKAN DATA {2] BACA ISI TUMPUKAN {3] MENCARI DATA TERBESAR [4] Selesai Pilihan : 1 PUSH 0 MENU PILIHAN : [1] MEMASUKKAN DATA {2] BACA ISI TUMPUKAN (3] MENCARI DATA TERBESAR {4} Selesai... Pilihan : 1 PUSH 11 MENU PILIHAN : [1] MEMASUKKAN DATA [2] BACA ISI TUMPUKAN [3] MENCARI DATA TERBESAR [4] Selesai.. Pilihan : Isi Stack : 2 MENU PILIHAN : (1] MEMASUKKAN DATA 2 35011 DAN DATA TERKECIL DAN DATA TERKECIL DAN DATA TERKECIL DAN DATA TERKECIL DAN DATA TERKECIL 211 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. PNET Struktur Data Menggunakan C di GNU/LINUX #include #define MAX 50 #define true 1 #define false 0 int stack [MAX] ; int top; void init (void) ; int full (void); int empty(void) ; int pop(void); void cari(int data); void push(int info void baca(void) ; main () { char pilih; int elm, dt; printf(“-- Mencari Suatu Data --\n"); printf (“--Menggunakan Single Stack--\n"); init(); do printf ("MENU PILIHAN :\n"); printf ("[1] MEMASUKKAN DATA\n”) ; printf ("{2] BACA ISI TUMPUKAN\n") ; printf (*(3] CARI DATA\n”); printf£(*{4] selesai...\n"); printf(" Pilihan : “); scanf ("ts", &pilih) ; switch (pilih) { aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. 3. Buatlah program untuk faktorisasi bilangan bulat positif menjadi pembagi primanya, urutannya menurun serta menggunakan tipe struktur data stack. Dasar penyelesaian masalahnya adalah untuk mencari faktor prima suatu bilangan, kita harus menceknya dengan membagi bilangan tersebut dengan bilangan prima, yaitu 2, 3, 5, 7, .... Ada beberapa kemungkinan untuk menyelesaikan masalah tersebut. Salah satunya adalah dengan menggunakan prinsip bahwa tiap pembagi terkecil dari suatu bilangan pasti merupakan bilangan prima. Struktur Data Menggunakan C di GNU/LINUX Contoh output program faktor prima dengan stack: Masukkan sebarang bilangan = 4900 Faktor prima bilangan 4900 adalah 77 5 5 2 2 Contoh output program faktor prima dengan stack: Masukkan sebarang bilangan = 2100 Faktor prima bilangan 2100 adalah 75 5 3 2 2 Contoh output program faktor prima dengan stack: Masukkan sebarang bilangan = 101 Faktor prima bilangan 101 adalah 101 4, Ubahlah program mencari dala terbesar dan terkecil diatas tanpa menggunakan operasi. 5. Buatlah program untuk penginputan data penduduk menggunakan struktur data single stack. 12.2 Double Stack Double stack merupakan bentuk pengembangan dari single stack den- gan maksud untuk menghemat memori. Prinsip double stack adalah dalam satu array terdapat dua stack. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. py ‘Struktur Data Menggunakan C di GNU/LINUX case ‘3’: printf£(*no stack “); scanf (“$d”, &no) ; clear (no); break; case ‘4’: baca(); break; case ‘S': break; default : print£("Salah pilih...\n”); break; } printf (*\n"); }while(pilih!='5"); ) void init (void) void push(char info,int nostack) { if (full () !=true) { switch (nostack) { case 1 : topl++; stack[topl]=info; break; case 2 : top2--; stack[top2]=info; break; default: printf (“Invalid PUSH...\n"); break; } } else printf (Stack overflow...\n”); aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 12 Stack nn: int elm,no,dt; init(); do { printf ("MENU PILIHAN\n"); print£("[1] PUSH\n"); print£("(2] BACA ISI STACK\n"); print£("[{3] CARI DATA\n”); print£("[4] Selesai...\n"); printf (" Pilihan : “); scanf("ts”,&pilih); switch (pilih) { case ‘1': printf ("PUSH "); scanf ("td $d", &e1m, &no) ; push (elm,no) ; break; case ‘2’: baca(); break; case ‘3’; printf ("Masukkan data yang dicari : scanf ("%d", &dt) ; cari (dt); break; case ‘4’: break; default : printf(“salah pilih...\n"); break; 2 printf("\n"); }while(pilih! } ayy void init(void) { top1=0; top2=MAX+1; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. -Struktur Data Menggunakan C di GNU/LINUX top2=MAX+1; } void push(int info,int nostack) { if(full() !=true) { switch (nostack) { case 1 : topl++; stack[top1]=info; break; case 2 : top2--; stack [top2] =info; break; default: printf("Invalid PUSH...\n”); break; } t else printf ("Stack overflow...\n"); y int pop(int nostack) ( int info; if (empty (nostack) !=true) C switch (nostack) { case 1: info=stack[top1]; topl--; return (info); break; case 2 : info=stack[top2]; top2++; return (info); break; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bob 12 Stack PUSH 0 2 MENU PILIHAN {1] PUSH [2] BACA ISI STACK [3] DATA TERBESAR DAN TERKECIL [4] Selesai... Pilihan : 1 PUSH 3 2 MENU PILIHAN {1] PUSH {2] BACA ISI STACK [3] DATA TERBESAR DAN TERKECIL 1 MENU PILIHAN [1] PUSH [2] BACA ISI STACK [3] DATA TERBESAR DAN TERKECIL [4] Selesai... Pilihan : 2 Isi Stack Pertama Isi Stack Kedua: 8 0 3 11 MENU PILIHAN {11 PUSH {2] BACA ISI STACK {3] DATA TERBESAR DAN TERKECIL, [4] Selesai... Pilihan : 3 Masukkan nomor stack : 2 Kondisi Stack Kedua Data Terbesar = 11 Data Terkecil aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. @ M0647 gps is ‘Menggunakan C di GNUILINUX int Empty(void) { if(antri.akhir==0) return(true); else return (false); } void baca (void) { int i; printf(“Isi queue sekarang : “); for (i=zantri.awal;i<=antri.akhir;it++) printf (“sc “,antri.info[i]); print£("\n"); } ‘Tampilan program: Demo Queue dengan Linear Array Operasi Queue {1] InQueve (Insert Queue) [2] DeQueue (Delete Queue) [3] Baca [4] Selesai... Pilihan : 1 Antrian masuk : K Operasi Queue {1] InQueue (Insert Queue) [2] DeQueue (Delete Queue) (3] Baca [4] Selesai... Pilihan : 1 Antrian masuk : O Operasi Queue aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bob 13 Queue break; } print£(*\n‘); }while(pilih!=/4"); 3 void init (void) { antri.awal antri.akhi } void inQueue(int elemen) { if (Empty()==true) { antri.awal=1; antri.akhir=1; antri.info[antri.awal]=elemen; else { if(Full() !=true) { antri.akhirt++; antri.info[antri.akhir]=elemen; } else printf ("Queue overflow...\n"); } } int deQueue (void) { int isi; int i; if(Empty() !=true) 307, aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Struktur Data Menggunckan C di GNU/LINUX By [1] InQueue (Insert Queue) [2] Baca Isi Queue [3] Cari Data [4] Selesai Pilihan : 13.1.3 Latihan Queue dengan Linear Array 1. Modifikasilah program membalik kata di atas tanpa operasi diQueue 2. Ubah menu program pada fungsi main menjadi: Menu Program 1. Menambah Elemen Queue 2. Menghapus Elemen Queue 3. Menampilkan Isi Queue 4. Mengosongkan Queue 5. Keluar Pilihan 3. Modifikasilah program mencari data terkecil dan terbesar di atas tanpa menggunakan operasi deQueue. 3. Jelaskan kelemahan queue dengan linear array. 4. Tulislah fungsi untuk menghitung banyaknya elemen suatu queue. 5. Contoh program nomor 5 digunakan untuk mencari data dalam antrian yang menggunakan algoritma Binary Search. Program berikut dimaksudkan untuk mencarisuatu data apakah terdapat dalam queue, tetapi menggunakan operasi DeQueue. Logikanya adalah mengambil data satu per satu dari dalam antrian untuk dicek apakah nilai datanya sama dengan data yang dicari. Program tersebut belum berfungsi dengan benar. Carilah letak kesalahan logikanya dan perbaikilah supaya program dapat berjalan sesuai yang diinginkan. #include #define MAX 50 #define true 1 #define false 0 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 13 Queue hg 13.2 Implementasi Queue dengan Circular Array Salah satu variasi array adalah array melingkar (circular array), artinya array dapat diakses mulai dari sembarang indeks (indeks awal) ke arah indek terakhir (maksimun array), lalu memutar ke indeks pertama hingga kembali ke indeks awal. Circular array adalah array yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal dan titik akhir saling bersebelahan jika array tersebut masih kosong. Jumlah data yang dapat ditampung oleh array ini adalah besamya ukuran array dikurangi 1. Jadi, misalnya besar array adalah 8, maka jumlah data yang dapat ditampung adalah 7. Perhatikan ilustrasi berikut: IS Gambar 13.3 Hustrasi Circular Array Dengan metode ini, meskipun posisi terakhir telah terpakai, elemen baru tetap dapat ditambahkan pada posisi pertama jika posisi pertama dalam keadaan kosong. Jika nilai head dan tail mencapai maksimum, maka akan dikembalikan ke posisi awal. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 13 Queue oY antri.awal=(antri.awal MAX) +1; return(isi); } else printf (“Queue underflow. ..\n”); ) 6. Fungsi Clear Dituliskan seperti pada fungsi inisialisasi. 13.2.2 Contoh Soal Queue dengan Circular Array 1 ‘Ada queue bentuk karakter diimplementasikan dengan array (10 elemen). a. Untuk keadaan array T A |B [c |p [EB [F Indeks queue.depan = = 3 dan queue.belakang = 7. elemen queue. . Tuliskan semua | A |B jc (D JE b. Untuk keadaan array s | t R_ |U_ |[K |T {|U |R_|[D [T Indeks queue.depan = 7 dan queue.belakang = 3. Tuliskan semua elemen queue. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Ey Struktur Data Menggunakan C di GNU/LINUX if(Empty()!=true) t isi=antri.info[antri.awal]; antri.awal=(antri.awal%MAX) +1; return (isi); } else print£ ("Queue underflow. ..\n”); dint Full (void) { i£((((antri.akhir%MAX) +1)%MAX) +1=-antri.awal) return (true) ; else return (false); int Empty(void) { if ((antri.akhir%MAX) +1==antri.awal) return (true) ; else return (false); void baca (void) { int i=antri.awal; printf(“Isi antrian : “); do aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 13 Queue en: 4. Program membalik kata di atas dapat dimodifikasi menjadi program berikut. [8 wanna nnn nnn nnn nnn nnn == s * Membalik Kata */ if Queue dengan Circular Array ay * by Ema & Wawan */ J* --------------------------------- *f include #include define MAX 70 fidefine true 1 define false 0 struct queue t char info[MAX]; int awal; int akhir; Ve struct queue antri; void init (void); void inQueue(char elemen); char deQueue (void); int Pull (void); int Empty(void); main() { aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Ey Struktur Data Menggunakan C di GNU/LINUX printf ("Menu Pilihan\n”); printf("[1} InQueue (Insert Queue) \n”); printf ("[2] Baca Isi Queue\n”); printf (“[3} Cari Data\n"); print£("[4] Selesai\n”) ; printf (* Pilihan : “); scant (“%s”,&pilih); switch (pilih) t case ‘1’: printf("Antrian masuk : “); scant (“%s”,&elm) ; inQueue (elm); break; case ‘2’: baca(); break; case ‘3’: printf("Masukkan data yang dicari : *); scant (“%e",&dt); cari (dt); break; case : break; default: printf ("Salah pilih...\n"); } printf£("\n”): }while(piliht='4'); d void init (void) { antri.awal=1; antri.akhir=MAX; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Bab 13 Queue Menu Pilihan 1 [2] (31 (41 Inqueue (Insert Queue) Baca Isi Queue Cari Data Selesai Pilihan : 1 Antrian masuk : a Menu Pilihan 113 {21 131 (4] InQueue (Insext Queue) Baca Isi Queue Cari Data Selesai Pilihan : 1 Antrian masuk : 8 Menu Pilihan 11] (21 13] 4] InQueue (Insert Queue) Baca Isi Queue Cari Data Selesai Pilihan : 1 Antrian masuk : d Menu Pilihan (11 1 (31 41 InQueue (Insert Queue) Baca Isi Queue Cari Data Selesai Pilihan : 1 Antrian masuk : f£ Menu Pilihan aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. ‘Struktur Dota Mengeunakan C di GNU/LINUX {4] Selesai Pilihan : 1 Antrian masuk : 7 Menu Pilihan (1] Inqueve (Insert Queue) 12] Baca Isi Queue [3] Cari Data [4] Selesai Pilihan : 1 Antrian masuk : & Menu Pilihan [1] Inqueue (Insert Queue) [2] Baca Isi Queue {3] Cari Data [4] Selesai Pilinan : 1 Antrian masuk : @ Menu Pilihan {1] InQueue (Insert Queue) [2] Baca Isi Queue [3] Cari Data [4] Menu Pilihan {1] InQueue (Insert Queue) {2] Baca Isi Queue {3] Cari Data [4] Selesai Pilihan : 1 aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Ey ‘Struktur Data Menggunokan C di GNU/LINUX depan = 10 belakang = 4 a. Tulisiah semua elemen dari queue. b. Bagaimana keadaan queue setelah dikenakan operas inQueue(M)? c. Jika setelah langkah b dikenakan operasi deQueue, berapa nilai yang dihapus dan bagaimana keadaan queue? Buatiah program untuk mencari data terbesar dan data terkecil menggunakan struktur data queue dengan circular array. a. tanpa operasi deQueue b. memanfaatkan operasi deQueue Buatlah program untuk penginputan data barang menggunakan struktur data queue dengan circular array. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Seruktur Data Menggunakan C di GNU/LINUX Pc ptr ptrl,ptr2; int x,y: x-5; yr2*x; ptrl=(ptr)malloc(sizeof (ptr) ); ptrl->info=x+2y; ptr2=(ptr)malloc(sizeof (ptr) ); ptr2->info=2* (x+y); printf(“Isi info dari data yang ditunjuk oleh ptri: td\n", ptr1->info) ; printf(“Isi info dari data yang ditunjuk oleh ptr2: %d\n", ptr2->info) ; } Tampilan program: Isi info dari data yang ditunjuk oleh ptrl : 25 Isi info dari data yang ditunjuk oleh ptr2 : 30 14.4 Latihan Pointer Ada program seperti berikut. Tulisiah output beserta alur pengerjaannya. #include #include main() { typedef struct data ‘ptr; aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. aa You have either reached a page that is unavailable for viewing or reached your viewing limit for this book. Penggunaan bahasa C diLinux akan memperkaya pengetahuan mahasiswa tentang bahasa pemrograman yang dapat berjalan di sistem operasi selain DOS dan Windows. Ini adalah suatu nilai lebih yang diperoleh dari pemahaman bahasa pemrograman selain sistem operasi DOS atau Windows. Dengan pertimbangan tersebut, konsep-konsep struktur data yang dibahas dalam buku ini dipelajari ‘menggunakan bahasa pemrograman C untuk sistem operasi Linux yang akan menggunakan GNU Compiler Colection untuk mengkompile kode sumber C Buku ini membahas secara mendalam konsep-konsep struktur data seperti array, struktur, stack, queue, pointer, dan linked list). Contoh program dan soal serta contoh-contoh lathan yang disertakan dimaksudkan agar pembaca mudah memahaminya dan dapat _mengembangkan sesuai kreativitasnya. Pokok Bahasan buku ini: Bahasa Pemrograman C Dasar-Dasar Pemrograman C Operasi Input Output Pengendalian Program Perulangan Array dan String Struktur Subprogram Sorting Searching Stack Queue Pointer dan Linked List Buku ini cocok bagi mahasiswa llmu Komputer, Teknik Informatika, Manajemen Informatika, dan Teknik Industri yang sedang menempuh mata kuliah Struktur Data, Algoritma dan Struktur Data, Struktur Data dan Pemrograman, serta Analisa Algoritma. Buku ini juga dapat membantu kalangan umum yang tertarik bidang pemrograman. ail : penerbitan@andipublishe We ICEL NAG ctr Te oS ~ MM | 45 31 ie

You might also like