Anda di halaman 1dari 80

TF-FTI ITB

Pemrograman Bahasa C
Buku tambahan untuk kuliah PTI-B FTI

C
Nugraha, Dr.Eng
8/28/2010 Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 1-1

DAFTAR ISI
BAB 1. OVERVIEW PEMROGRAM AN .............................................................................................................1-3 PEMROGRAMAN.........................................................................................................................................................1-3 ALGORITMA................................................................................................................................................................1-3 BAHASA PEMROGRAMAN..........................................................................................................................................1-7 MENJALANKAN PROGRAM C/C++ ..........................................................................................................................1-8 LATIHAN ..................................................................................................................................................................1-9 BAB 2. TIPE DATA.............................................................................................................................................. 2-11 PENDAHULUAN ....................................................................................................................................................... 2-11 IDENTIFIER ............................................................................................................................................................... 2-14 TIPE DATA ............................................................................................................................................................... 2-14 TIPE DATA INTEGER (INT)................................................................................................................................... 2-15 TIPE DATA FLOAT................................................................................................................................................ 2-15 TIPE DATA K ARAKTER (CHAR) ........................................................................................................................... 2-15 TIPE DATA BOOLEAN (BOOL)............................................................................................................................. 2-16 VARIABEL DAN KONSTANTA ................................................................................................................................... 2-16 VARIABEL............................................................................................................................................................ 2-16 K ONSTANTA ....................................................................................................................................................... 2-17 ASSIGNMENT STATEMENT....................................................................................................................................... 2-17 PERNYATAAN GABUNGAN...................................................................................................................................... 2-18 LATIHAN -LATIHAN ............................................................................................................................................ 2-19 BAB 3. OPERATOR ............................................................................................................................................ 3-20 OPERATOR ARITMATIKA ......................................................................................................................................... 3-20 ATURAN PRECEDENCE ....................................................................................................................................... 3-20 K ONVERSI TIPE DATA ........................................................................................................................................ 3-20 OPERATOR ASSIGNMENT........................................................................................................................................ 3-21 OPERATOR LOGIKA DAN PEMBANDINGAN............................................................................................................ 3-21 LATIHAN : ................................................................................................................................................................ 3-23 BAB 4. FUNGSI INPUT DAN OUTPUT .......................................................................................................... 4-24 STANDAR IO ........................................................................................................................................................... 4-24 FUNGSI INPUT ......................................................................................................................................................... 4-24
GETCHAR (PROTOTYPE : INT GETCHAR (VOID )) ................................................................................................. 4-24 SCANF ................................................................................................................................................................. 4-25

FUNGSI OUTPUT...................................................................................................................................................... 4-27


PUTCHAR (PROTOTYPE : INT PUTCHAR (INT C)) .................................................................................................. 4-27 PRINTF ................................................................................................................................................................ 4-28

STREAM IO (HANYA ADA DI C++) ......................................................................................................................... 4-31 ALIRAN OUTPUT (OUTPUT STREAM) ................................................................................................................ 4-31 ALIRAN INPUT (INPUT STREAM)........................................................................................................................ 4-32 FORMAT OUTPUT STREAM................................................................................................................................. 4-33 BAB 5. KONTROL LOOP .................................................................................................................................. 5-36 WHILE LOOPING ...................................................................................................................................................... 5-36
DO LOOPING............................................................................................................................................................ 5-37

FOR LOOPING.......................................................................................................................................................... 5-37 LATIHAN : ................................................................................................................................................................ 5-38

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 1-2 BAB 6. KONTROL PENCABANGAN .............................................................................................................. 6-39

PERNYATAAN IF ....................................................................................................................................................... 6-39 PERNYATAAN IF -ELSE.............................................................................................................................................. 6-39 PENGGUNAAN BREAK DAN CONTINUE DI DALAM LOOP..................................................................................... 6-40 SWITCH.................................................................................................................................................................... 6-41 E KSPRESI BERSYARAT............................................................................................................................................... 6-42 OPERATOR KOMA................................................................................................................................................... 6-43 MENGAKHIRI INPUT DATA NUMERIK..................................................................................................................... 6-43 BAB 7. FUNGSI DAN PROTOTIPE ................................................................................................................. 7-45 PENDAHULUAN ....................................................................................................................................................... 7-45 FUNGSI TANPA PARAMETER ................................................................................................................................... 7-45 FUNGSI DENGAN PARAMETER ................................................................................................................................ 7-47 FUNGSI YANG MENGEMBALIKAN NILAI................................................................................................................. 7-49 VARIABEL LOKAL, GLOBAL DAN SCOPE OPERATOR............................................................................................... 7-52 PASS BY VALUE , PASS BY PARAMETER DAN PASS BY ADDRESS............................................................................ 7-53 FUNCTION OVERLOADING...................................................................................................................................... 7-55 FUNGSI LIBRARY STANDARD .................................................................................................................................. 7-57 BAB 8. ARRAY, POINTER DAN STRING....................................................................................................... 8-58 ARRAY DAN ARITMATIKA ALAMAT......................................................................................................................... 8-58 ARRAYS MULTIDIMENSI.......................................................................................................................................... 8-60 POINTER .................................................................................................................................................................. 8-61 STRING..................................................................................................................................................................... 8-63 OPERASI_OPERASI STRING................................................................................................................................ 8-64 BAB 9. STRUKTUR DAN UNION ................................................................................................................... 9-67 STRUKTUR................................................................................................................................................................ 9-67 TYPE DEFINITION..................................................................................................................................................... 9-68 STRUKTUR DALAM STRUKTUR................................................................................................................................. 9-69 UNION..................................................................................................................................................................... 9-70 BAB 10. FILE INPUT OUTPUT ......................................................................................................................... 10-73 MENULISKAN DATA KE FILE................................................................................................................................... 10-73 MEMBACA DATA DARI FILE ................................................................................................................................... 10-75 REFERENSI............................................................................................................................................................... 10-79

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 1-3

Ba b 1. OVERVI EW PEMROGRAMAN Pemrograman Program : Bersisi instruksi lang kah perlangka h yang menyataka n apa yang harus dikerjaka n oleh komputer. Instruksi ini harus dalam bahasa yang dipahami oleh komputer. Bahasa Pemrograman : merupakan sekumpulan aturan, symbol dan kosa kata khusus yang dipakai untuk membangun program, missal C dan C++ merupaka n salah satu bahasa pemrograman yang dimengerti oleh computer. Langkah-lang kah dalam penulisan program Langkah Problem-Solving Analisa dan spesifikasi masalah (data input, output, asumsi & batasan masalah) Pembua tan algorithma yang merupa kan solusi dari permasalahan tsb, yang berisi langkahlangkah intr uksi untuk meng hasilkan output yang diharapka n.

Fasa Implementasi Terjemahka n algorithma kedalam bahasa pemrograman ( kodifikasi) Test program serta perbaiki jika ada kesalahan (debugging).

Fasa Pemeliharaan Mengguna kan program, merubah algoritma a tau program agar sesuai dengan kebutuhan, serta membuat dokumentasi agar program mudah dibaca oleh orang lain.

Beberapa petunjuk dalam pemecaha n masalah. Ada 3 hal yang diperluka n untuk memecahkan masalah pernyataan masalah yang jelas input yang diperlukan output yang diinginkan

Ajukan pertanyaan Cobalah untuk mengerti permasalahan dengan mengajuka n pertanyaan

Lihatlah pada hal-hal yang sudah familiar (Do not reinvent the wheel !!) Selesaikan permasalahan dengan analogi Bua tlah a nalogi masalah yang dihadapi dengan masalah yang lain yang sudah pernah dipecahkan. Memiliki pengalama n yang luas akan membuat anda menjadi programmer yang baik

Bagi dan Selesaikan Bagi masalah ya ng besar kedalam masalah yang kecil-kecil untuk memuda hka n penyelesaian masalah

Algoritma Orang awam mung kin menga nggap bahwa computer adalah perkakas elektronik yang sangat hebat, dapat mengerjakan berbagai fungsi. Namun orang yang paha m komp uter menganggap ko mputer hanyala h barang elektronik ya ng mengolah data digital berdasarkan program tertentu. Jika tida k ada program, maka komputerpun tidak dapat mengerjaka n apa -apa.

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 1-4 Program akan memberikan perintah kepada komputer tentang apa yang harus dilakuka n serta bagaimana cara melakuka nnya. Karena itu program berisi kumpulan instruksi langka h-la ngka h untuk melakuka n suatu tugas pada komputer.Intruksi ini ditulis dalam bahasa yang dimengerti oleh komputer. Menurut pakar komputer Niklaus Wirth, program terdiri dari algoritma dan data.Data merupakan informasi yang harus diolah komputer dan disimpan sebagai variable dalam program.Algoritma merupakan urutan lang kah yang sistema tis untuk menyelesaika n masalah. Menurut Do nal E. K nuth, algoritma yang baik harus memiliki beberapa ketentuan, yaitu : 1. 2. 3. 4. 5. Algoritma berhenti setelah mengerjakan sejumlah langkah terbatas (terminated) Setiap langkah harus terdefinisi dengan baik, tidak ambigu sehingga dapat di realisasikan Algoritma memiliki nol atau lebih nilai masukan Algoritma mempunyai nol atau lebih nilai keluaran Algoritma harus efektif dan effisien

Berikut ini adalah conto h dari algoritma membuat kopi : Algoritma Membuat Kopi 1. 2. 3. 4. 5. Tuangkan kopi kedalam gelas Jika tidak tersedia air panas maka panaskanlah air terlebih dahulu Tuangkan air panas sec ukupnya kedalam gelas berisi kopi Tuangkan satu sendok teh gula kedalamnya serta aduk hingga gulanya larut Jika kurang manis ulangi lagi langkah 4 diatas.

Dari algoritma diatas terlihat bahwa ada tiga jenis proses dalam algoritma, yaitu proses berurutan, pemilihan serta pengulangan. Proses Berurutan (sequence) Proses pada algoritma dijalankan denga n urutan tertentu.

Proses Pemilihan (selection) Proses ini dita ndai dengan adanya kalimat jika <kondisi> ma ka (if <ko ndisi> then), algoritma harus memilih salah satu dari dua atau lebih piliha n yang ada.

Proses pengulangan (repititon) Proses ini ditandai dengan kata ula ngi (repeat, for to.do, while <kondisi> do .., atau do. while<ko ndisi>). Pada proses ini suatu lang kah dilakukan berulang -ulang sesuai dengan kebutuhan atau kondisi yang ada.

Penulisan algoritma dapat dilakukan denga n berbagai cara, yaitu : 1. 2. 3. 4. Non-Formal : menggunakan deskripsi bahasa sehari-hari seperti contoh diatas Formal : menggunakan ekspr esi matematika Pseudocode : menggunakan deskripsi bahasa yang mendekati bahasa pemrograman Flowchart : langkah-langkah digambarkan secara diagramatik

Pseudocode dan flowchart merupa kan dua cara penulisan algoritma yang banyak dipakai. Flowchart berisi kump ulan diagram berbagai bentuk yang dihubungka n dengan garis panah. Masing -masing bentuk diagram mewa kili lang kah-lang kah dalam algoritma. Beberapa bentuk diagram/simbol yang

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 1-5

Tabel 1 Diagram/Simbol pada flowchart Simbol Arti Untuk tanda mula i dan akhir program Arah program Inisialisasi/pemberian harga awal Proses perhitungan/pengola han data Proses pencabangan

Input/o utput data, parameter, informasi Menjalankan subprogram

Aturan umum flo wchart 1. 2. 3. 4. 5. 6. Seluruh diagram flowchart terhubung dengan tanda panah (bukan garis) Simbol flowchart memiliki titik masuk pada bagian atas dan titik keluar pada bagian bawah kecuali simbol pemilihan (decision) Simbol pemilihan (decision) memiliki dua keluaran di kedua sisi atau bawah dengan samping Simbol konektor digunakan untuk m emotong dan menghubungkan flowchar t dengan flowchart yang lain, misalnya ketika pindah halaman Program subroutine memiliki flowchart tersendiri Flowchart dimulai dan berakhir pada suatu terminal

Flowchart memiliki kelebihan mudah diinterpretasi dan dibaca, relatif muda h dimengerti serta relatif mudah untuk dib uat.Namun flowchart memb utuhkan media penulisan yang rela tif besar, kurang fleksibel untuk menjelaskan ko nsep-konsep spesifik dalam pemrograman misalnya tipe data. Pseudocode cara untuk menyataka n algoritma seperti bentuk tek no n formal na mun dengan kosa kata yang lebih terbatas dan terdefinisi denga n baik serta dekat dengan bahasa pemrograman.Misal jika kita ingin mena mpilkan data x, maka dituliska n dalam pseudocode sebagai print (x); Notasi ini bersesuaian dengan perintah printf (x); writeln (x); write (x); di C/C++ di Java di Pascal

Meskipun tidak ada standarrisasi untuk pseudocode, namun pada umumnya dapat dikelompokan menjadi grup input, output, iterasi, pemilihan, proses, assignment dan fungs i. Beberpa kosakata yang biasa digunakan pada pseudocode beserta contohnya diperlihatkan pada Tabel 2 berikut ini

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 1-6 Tabel 2 Kosa kata pseudocode Grup Input Output Pemilihan (Decision) Kata kunci/operator read, input, get, obtain print, write, sho w, display if <kondisi> then pernyataan endif if <kondisi> then pernyataan1 else pernyataan2 endif repeat pernyataan until <ko ndisi> dowhile <kondisi> pernyataan enddowhile for <var> = <start value> to <stop value> pernyataan endfor add, substract, compute, set, init <variable><variable>; <variable> = <variable>; functio n <function name>(<arguments>) do statement with arguments; return <expression>; Pemanggila n fungsi <functio n name>(<arguments>) Contoh read x, y; print (nama saya :, nama) if (x== y) then print (sama ) endif if (x== y) then print (sama ) else print (tidak sama ) endif repeat x = x +1 until (x > 100) dowhile (x <= 100) x = x +1 enddowhile for i = 1 to 100 x= x + 1 endfor add 3 to x compute x + 5 giving new x x y + 2; functio n rata2 (x,y) rata = (x + y)/2; return rata; rata2(10,6);

Iterasi (Iteration)

Proses Assignment Fungsi

Pada dasarnya penulisan algoritma pseudocode tersusun atas tiga bagian : 1. Judul Algoritma : terdiri dari nama algoritma yg diikuti penjelasan mengenai algoritma, berisi uraian singkat mengenai apa yang dikerjakan oleh algoritma tersebut yg disebut spesifikasi algoritma Deklarasi Algoritma : berisi semua nama yang digunakan dala m algoritma , mencakup namanama tipe, konstanta, variabel, prosedur, fungsi yang didefinisikan pada algoritma. Deskripsi Algoritma : berisi semua langkah-langkah algor itma. Urutan langkah dibaca dari atas kebawah dan menentukan urutan pelaksanaan perintah

2. 3.

Setiap bagian dilengkapi ko mentar, untuk memperjelas tek ya ng dituliskan. Komentar ditulis dalam tanda kur ung kurawal

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 1-7

Contoh algorit ma untuk menju mlahkan 100 bilangan bulat pertama. Flowchart MULAI Pseudocode Penjumlahan100 Integer Pertama bilangan integer dari 1 sampai 100} Deklarasi : Sum : integer I=0 SUM = SUM + 1 I=I+1 I>100? i : integer Deskripsi : Sum0 for i=1 to 100 su msum+1 endfor print sum PRINT SUM {menju mlahkan

SUM = 0

SELESAI

Conto h kasus: jumla hka nlah N buah deret bilangan integer dimana harga N diberikan oleh pengguna Menjumlahkan N buah Bilangan Integer {Menjumlahkan deret 1+2+3+.+N , dengan N bilanga n bula t positif yang dibaca di perangkat masukan. Jumlahderetditampilkand iperangkatkeluaran} Deklarasi: N : integer{banyaknyasuku} k : integer{suku deret ke- k} jumlah: integer{jumlahderet} Deskripsi: read(N) {membaca banyaknya suku} jumlah 0 {inisialisasi jumlah deret} k 1 {suku deret ke-k=1} repeat jumlah jumlah+k k k +1 {sukuderetberikutnya} while k < N write (jumlah) Baha sa Pemrograman Bahasa Pemrograman terbagi kedalam beberapa tingkata n : 1. Bahasa Mesin

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 1-8 Bahasa yang terdiri dari intr uksi -instr uksi dlm kode biner ya ng dapat langsung dimengerti oleh komputer. Komputer dengan CPU yang berbeda akan mengg una kan kode biner yang berbeda untuk masalah ya ng sama. Program ya ng ditulis dalam bahasa mesin sangat sukar untuk d ibaca dan dimodifikasi. 2. Bahasa assembler (Bahasa pemrograman tingka t rendah) Hampir sama dengan bahasa mesin hanya ins truksi -ins truksinya mudah dibaca.Agar dapat dibaca oleh computer diperlukan program yang menerjemahkan intruksi bahasa assembler ke bahasa mesin. Bahasa assembler Bahasa mesin ADD100101 SUB010011 3. Bahasa pemrograman tingkat tinggi Bahasa ini lebih mudah digunaka n disbanding bahasa assembler dan bahasa mesin, karena mendeka ti bahasa Inggris.Misalnya : C, C++, Pascal, Fortran, Cobol, Ada.Proses kompilasi akan menerjema hka n bahasa tingkat tinggi ke bahasa mesin. Menjalankan program C /C++ Pembua tan program dengan menggunakan ba hasa pemrograman terkompilasi (compiled language) seperti C/C++ memertlukan sedikitnya 4 langkah pekerjaan : 1. Editing/penulisan program Penulisan program dilakuka n dengan bahasa pemrograman yang masih dapat dimengerti oleh manusia, penulisan dapat dilakukan dengan menggunakan per angkat lunak untuk mengedit tek, seperti emacs, vi dll. Untuk C dan C++ biasanya nama file belakang nya mengguna kan .c atau .cpp Misalnya harga_buku.c atau harga_buku.cpp 2. Kompilasi File .c agar dapat dieksekusi oleh comp uter harus diubah (komp ilasi) ke dala m bahasa mesin yang dimengerti oleh CPU oleh compiler , misalnya di linux biasa menggunaka n gcc untuk sebagai compiler bahasa c. Proses kompilasi biasanya menghasilka n file .obj 3. Linking Pada bahasa pemrograman seperti C dan C++, kita sering menggunaka n lib rary ya ng sudah disediakan oleh bahasa pemrograman seperti pengontrolan input output, fungsi-fungsi matematik dsb. Dengan melakukan linking fungsi-fungsi tersebut dapat ditambahkan pada program kita. Hasil linking sudah mer upakan file ya ng dapat dieksekusi .exe (windows) ata u .out (linux). Proses kompilasi dan linking bisa terpisah bisa juga menjadi satu tergantung pada program kompilasi yang dipakai. Misalnya : gcc harga_buku.c, akan meng hasilkan file a.out yang bias langsung dieksekusi gcc -o harga_buku harga_buku.c, aka n menghasilkan file harga_buku.out yang bias langsung dieksekusi 4. Eksekusi File yang s udah melewa ti proses menuliska n/memanggil nama file tersebut. Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI linking dapat langsung dieksekusi dengan

halaman | 1-9

Misalnya di linux: ./harga_buku Contoh kasus: Ali membeli tiga buah buku, dia ingin tahu harga total buku -buku yang dia beli serta harga rata -rata buku tersebut. Deskripsi masalah : Input : harga 3 buah buku (harga_b1, harga_b2, harga_b3) Output : harga total 3 buah buku dan harga rata-rata Batasan masalah : jumlah buku = 3 buah Algoritma : Menghitung Harga Rata-rata 3 Buah Buku {Program ini menghitung harga rata-rata 3 buah buku yang dimasukan menggunakan piranti masukan} Deklarasi : Sum, rata2, harga_b1, harga_b2, harga_b3: integer Deskripsi: 1. read harga_b1, harga_b2, harga_b3 2. Hitung jumlah total Sum = harga_b1+ harga_b2+ harga_b3 3. Hitung harga rata-rata rata2 = Sum/3 Program dalam C : //Contoh 1.1 : Program menghitung harga total 3 buah buku dan harga rata -rata #include<stdio.h> //header untuk standard input output int main() { int harga_b1, harga_b2, harga_b3; //deklarasi variable harga buku printf(Masuka n harga 3 buah buku : \n); scanf (%d %d %d , &harga_b1, &harga_b2, &harga_b3); int sum = harga_b1 + harga_b2 + harga_b3; int rata2 = sum/3; printf(Harga total dari 3 buah buku = %d \n, sum); printf(Harga rata-rata dari 3 buah buku = %d \n , rata2); return 0; } Sebuah algoritma dapat memiliki berbagai implementasi Think first, code later !!! LATIHAN 1. Bua tlah algoritma program untuk menentukan apakah fluida yang mengalir dalam pipa berada dalam keadaan aliran laminer, turbulen atau tidak stabil. Program mendapat masuka n masa jenis fluida, kecepata n alir fluida, viskositas fluida serta diameter pipa lewat piranti masuka n. Bilangan Reynold dihitung dengan menggunakan persamaa : Reynolds Number = (density x velocity x diameter) / viscosity

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 1-10 Jika bilangan reynold sama dengan 2000 ata u dibawa hnya ma ka aliran fluida adalah la miner, jika bilangan reynold sama denga n 3000 a tau dia tasnya maka alairan fluida adalah turbulen, jika diantara 2000 dan 3000 maka aliran fluida adalah tidak stabil

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 2-11

Ba b 2. TIPE DATA Pen dahuluan Setelah mengenal langka h-la ngkah pemb uatan program dan menjalankan program, maka sekarang anda dapat mencoba memb uat program C, namun sebelum itu a kan diperkenalkan terlebih dahulu beberapa command dalam linux untuk memb uat direktori dan pemakaia n sebuah editor yang dijamin ada disemua edisi linux yaitu vi ed itor. Sebenarnya selai n vi editor dapat juga dig una kan editor lain seperti emacs, kwrite, gedit dll, namun pada kali ini hanya akan dikenalkan vi editor saja. Di linux untuk membua t sebuah direktori baru ya ng diberina ma misalnya direktori_saya dapat dilakukan melalui terminal dengan mengg una kan perinta h (dalam hal ini $ adalah prompt diterminal): $ mkdir direktori_saya Di sini kita masih berada di direktori home dan untuk pindah ke direktori direktori_saya dapat dilakukan dengan menggunaka n perintah: $ cddirektori_saya Sekarang kita telah berada di direktori direktori_saya dan setiap file yang kita buat aka n berada di direktori ini. Marila h kita mencoba membuat program yang kita mulai denga n progam C melalui CONTOH2.1 ya ng membaca dua buah bila ngan bula t a da n b dari keyboard untuk meng hitung u = 2 2 (a+b) dan v = (a-b) . Ketikan pada terminal $ vi contoh2_1.c maka pada layar akan muncul seperti dibawah ini : ~ ~ ~ ~ ~ ~ contoh2_1.c [New file] anda berada pada mode COMMAND dari vi editor. Untuk dapat menuliska n program, anda harus masuk kemode INSERT dengan meneka n a, i atau o lalu ketikan program dibawah ini. /* CONTOH 2. 1 : Sebuah program untuk menghitung kuadrat jumla hdan kuadrat selisih dari dua buah bilangan bula tya ng diberikan. */ #include<stdio.h> main() { printf(Masuka n dua buah bilangan b ulat: \n); /* Tampilkan permintaan untuk menuliskan dua bilangan bulat */ inta, b; scanf(%d %d , &a, &b); // Baca a dan b. intjml = a + b, beda = a - b, u = jml * jml, v = beda * beda; printf(Pa ngkat dari Jumla h : %d \n, u); printf(Pa ngkat dari Perbedaan : %d \n, v); }

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 2-12 untuk kembali ke mode COMMAND tekanla h Esc.Pada mode COMM ANDkita dapat mengedit teks yang telah kita tulis. x untuk mendelete karakter dwuntuk mendelete kata dd untuk mendelete baris r untuk replace Bagian ya ng ingin diedit dapat dipilih dengan menggerakan kursor dengan keyboard tanda panah. Jika pada mode COMMAND kita tekan : ma ka kita masuk ke mode INLINE, ditandai denga n adanya tanda : pada bagian bawah terminal. Pada mode ini kita dapat melakukan : :q :w (nama file) :wq :e (nama file) :r (nama file) keluar vi editor tanpa men-save file men-save file men-save dan keluar editor membuka file baru meng-insert file

Jika tidak ada kesalahan pengetika n program contoh2.1, maka tutuplah editor dengan megetikan :wq untuk men-save dan keluar dari vi editor. Kita dapat menulis program dalam bahasa C jika kita mengetahui ketentua n-ketentuan tatabahasa C. Marilah kita perhatikan program di atas. Merupaka n kebiasaan yang baik dalam menulis program dengan memberikan komentar-komentar yang dirasa amat membantu pada saat kita membaca kembali program tersebuf diwaktu-waktu ma ndatang. Komentar tersebut dapat ditulis kan dengan dua cara. Pertama dengan dimulai oleh dua buah karakter yaitu /*, dan diakhiri denga n dua buah karakter lagi */. Kedua pasangan dua-karakter itu tidak harus terletak dalam satu baris. Berbeda halnya dengan cara penulisan ked ua ya ng menggunaka n dua karakter //. Akhir baris sekaligus merupa kan a khir dari komentar. Sebagaimana yang kita liha t dalam contoh 2.1 di atas, kedua cara menulis komentar itu telah kita guna kan di sini. Dala m conto h di atas juga kita temui baris include sebagai berikut: #include <stdio.h> Bagian ini biasa disebut Pre-processor Dir ectives.Preprocessor dapat menambah ata u mengurangi source code program yang kita bua t. Dalam kasus diatas directive #include memerinta hka n processor untuk meng-include -ka n modul stdio kedalam source code program yang kita buat, ya ng dalam hal ini kita perluka n untuk aliran input dan outp ut. Baris-baris yang melibatkan sua tu file selalu dimulai dengan #include dan mareka memerluka n baris tersendiri di dalam penulisan program. Misalnya kita tidak diperkena nka n menulis kan main () sebaris dengan #include. Baris untuk melibatkan suatu file memang berbeda dengan ketentua n umum yang menyebutkan bahwa teks da n program dapat dipecah menjadi beberapa baris sesuai dengan kemaua n kita. Sebagai contoh kita bisa saja mengganti baris: int jml= a +b, beda= a - b; dengan dua buah baris sebagai berikut: int jml= a + b, beda= a - b; Kita bisa saja memecah baris ini lebih la njut, tetapi jelas bahwa hal tersebut tidak aka n mening katkan kemudahan dalam membacanya. Setiap program C berisi satu atau lebih fungsi yang salah satu diantaranya adalah main. Perlu diteka nka n di sini bahwa fungsi disini ma ksudnya adalah sebua h fragmen program. Untuk kasus contoh2.1 di atas main merupakan satu-satunya fungsi dan ia memiliki bentuk: Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 2-13

main() { . . } Sebuah fungsi bisa saja mempunyai atau tidak mempunyai parameter. Jika mempunyai maka kita menuliska nnya diantara tanda kurung (nanti akan kita temui dalam contoh -contoh selanjutnya). Sebaliknya jika ia tidak mempunya i parameter, tanda kurung masih diguna kan, namun tanpa tulisan apapun, seperti dalam co nto h2.1 di atas. Bagian uta ma (body) dari suatu fungsi berada di antara kurung kurawal { }. Merupakan suatu kebiasaan yang baik untuk menulis kan pasangan kurung kurawal itu dituliska n dalam satu kolom ya ng sama. Setelah tanda buka kurung kurawal { ini akan kita temui pernyataan-pernyataan (statements). Sepanjang kita tidak menggunaka n pernyataa n gabunga n (akan dibahas dalam modul selanjutnya), setiap pernyataan diakhiri dengan sebuah semikolo n ;. Dalam contoh2.1 di a tas kita lihat ada 6 semikolon; masing-masingnya mengakhiri suatu pernyataan. Kita akan sering menuliskan satu pernyataan saja setiap barisnya. Meskipun demikia n, bisa ada lebih da ri satu pernyataan dalam satu baris, dan ada juga sebuah pernyataan yang membutuhkan lebih dari satu baris seperti contoh di bawah ini: int jml = a + b, beda = a -b, u = jml * jml, v = beda * beda; Pernyataa n seperti ini disebut sebagai deklarasi, Di sini deklarasi itu menya taka n bahwa variabelvariabel jml, beda, u, dan v mempunyai tipe ata u jenis int yang berarti bila ngan bula t. Pernyataan di atas tidak saja menyataka n variabel-variabel jml, beda, u, dan v, tetapi juga memberikan harga harga awalnya melalui harga-harga a dan b. Variabel-variabel a dan b dideklarasikan dalam pernyataan: int a, b; tanpa diberi harga awal (inisialisasi) sehingga segera setelah pernyataan ini harga mareka tidak terdefinisi. Selanjutnya terdapat juga sebuah pernyataan ya ng berbeda sama sekali dengan pernyataan-pernyataan sebelumnya yaitu : printf ( Masukan dua buah bilangan bulat: \n); printf merupa kan standard inp ut output dimana kita dapat mengirim karakter-karakter Masukan dua buah bilangan bula t: kelayar. Demikian pula halnya dengan pemyataan: scanf( %d %d , &a, &b); // Baca a dan b membaca dua bua h harga inp ut sta ndard (yaitu dari keyboard) dan selanjutnya menyimpannya di dalam variabel-vanabel a dan b. Pada saat mengeksekusi pernyataan ini, komputer akan menunggu hadirnya suatu inp ut melalui keyboard. Setelah u dan v dihitung, harga variabel -variabel ini, yang didahului oleh sejumla h kata-kata pengantar dicetak dengan perintah pernyataan sebagai berikut: printf (Pangkat dari Jumlah : %d \n, u); printf (Pangkat dari Perbedaan : %d \n, v); Kita gunaka n \n untuk menya taka n bahwa baris pemyataan itu berakhir di sini. Secara umum layo ut dari program C adalah sbb: documentation section pre-processor directives (link section and definition section) Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 2-14 global declarations main() { local variables to function main ; statements associated with function main ; } f1() { local variables to function 1 ; statements associated with function 1 ; } etc Untuk meng kompile program contoh2.1 diatas ketika n dari terminal gcc contoh2_1.c disini kita menggunaka n gcc sebagai program kompilasi untuk merubah program bahasa C contoh2_1.c menjadi program dalam bahasa mesin yang secara otomatis akan menghasilkan file a.out sebagai hasil kompilasi. File a.out dapat dieksekusi secara langsung dengan mengetikan : ./a.out Jika kita ing in menggunaka n na ma lain untuk hasil ko mpilasi, misalnya conto h2_1.o ut, ma ka ketikan baris dibawah ini pada waktu komp ilasi. gcc -o contoh2_1 contoh2_1.c maka sebagai hasil kompilasi akan dihasilkan file conto h2_1.o ut. Untuk mengeksekusi file contoh2_1.o ut, ketikan: ./contoh2_1.out Identifier Identifier adalah nama ya ng kita pakai untuk mengacu pada sesuatu (misalnya variabel, kons tanta, fungsi dll.). Nama ya ng kita pilih tida k ada artinya bagi komp uter karena itu pilihla h nama yang ada artinya bagi kita agar mudah dimengerti. Indentifier boleh tersusun dari huruf (A-Z atau a-z), angka (0-9) dan garis bawah (_).Karakter pertama nya tidak boleh berupa ang ka. Nama identifier bersifat case sensitive sehingga Ba ndung berbeda dengan band ung. Biasakanla h untuk menuliska n identifler ini dengan karakter awalnya berupa huruf (jangan garis bawah), karena ada fungsi-fungsi sistem yang diberi nama denga n awala n baris bawah. Jangan g una kan identifiers berikut ini karena telah digunaka n untuk keywords: asm, auto, break, case, catc h, char, class, canst, conti nue, default, delete, do, double, else, enum, exter n, float, for, friend, goto, if, inline, int, long, new, operator, private, protected, public, register, return, short, signed, sizeof, static, struct, switch, template, this, throw, tr y, typedef, un ion, unsigned, virtual, void, volatile, while. Conto h nama identifier yang benar : _x, _y, akar_kuadrat, Nama_kota, no mor_telepon, win4lin, p4ls, AmbilData, Box22A, NamaVariabelYangPa njang. Conto h nama identifier yang salah : 4Box, while, new model, alamat rumah. Tipe Da ta Tipe data menentukan bagaimana data itu direpresentasika n serta diproses oleh komputer. Tipe data yang dasar terdiri dari int, float, char dan bool.

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 2-15

Tipe data integer (int) Tipe data integer digunaka n untuk merepresentasikan bilanga n integer baik positip maupun negatip (misalnya 22, 16, 0, -4600). Ukuran nilai yang dapat direpresentasika n tergantung pada jenis komputer. Pada PC tipe integer memakai alokasi memori 16 bits (2 bytes) atau dari -32768 sampai 32767. Tipe integer memiliki variasi yang terdiri dari : short int 16 bits (2 byte) - range angka = [-32,768, 32,767] long int 32 bits (4 bytes) - range angka = [-2147483648, 2147483647] long long int 64bits (8 bytes) Jika kurang dari range tersebut maka akan terjadi underflow serta jika range tersebut dilampaui maka akan terjadi overflow. Selain itu tipe integer dapat berjenis unsigned atau signed. Jenis/format integer terdiri dari bilangan desimal (123), hexadesimal (0xFF3A), oktal (0777) dan Long desimal (123L). Jika karakter pertama dan sebuah konsta nta adalah 0 da n segera diikuti o leh digit berikutnya, maka ko nstanta itu dipahami sebagai sebuah bilangan oktal (dengan basis 8); hanya digit 0, .., 7 yang boleh ada dalam konsta nta ini. Jika sua tu ko nstanta diawali denga n 0x ata u 0X ma ka la mer upakan bilangan heksadesimal. Kita gunakan huruf -huruf A, ., F (atau a, ..., f) sebagai bilangan heksadesimal untuk harga-harga 10,..., 15. Huruf L (atau 1), yang berarti long, diakhir suatu kons tanta merupa kan sebuah suffix. Kita dapat juga menggunakan suffix U (atau u) yang berarti unsigned. Urutan penempatan L dan U tidak menjadi persoalan. Tipe data integer dapat dideklarasikan dengan menggunaka n keyword int, long, short, unsigned short dan unsigned long . Bilanga n integer direperentasikan secara exact oleh memori komputer. Tipe data fl oat Tipe data float dipakai untuk merepresentasikan bilanga n riil (misalnya 19.0, 153.24, 3., .9). Alokasi memori yang digunakan tipe data float tergantung pada jenis presisi yang digunakan yang terdiri dari single pr ecision (float) : 4 byte dan 6 digit desimal double precision (double): 8 bytes and 16 digit desimal long double : 10 byte and 20 digit desimal Selain itu bila ngan riil dapat juga diekspresikan dalam no tasi scientific xEy = x.10 (misalnya 2.3E11 = 11 2.3x10 ). Tipe data float dideklarasikan dengan menggunaka n keyword float, double dan long double. Bila ngan riil direpresentasikan sebagai pendekatan oleh memori komputer . Tipe Da ta Karakter ( char) Tipe data karakter dideklarasikan denga n menggunakan keyword char da n dipakai untuk mengekspresikan karakter tunggal dari alphanumerik (hur uf, angka dan simbol khusus), misalnya X, x, $, 9.Karakter harus dituliskan diantara tanda petik tunggal sehingga program kompilasi bisa membedakan antara data karakter 2 denga n ang ka integer 2. Alo kasi memori yang dig una kan untuk merepresentasikan karakter adalah 8 bit (1 byte). Sejumlah karakter mempunyai pengertia n khusus setelah didahului oleh karakter \ sebagai berikut : \n baris baru, meloncat ke awal baris berikutnya \r prompt kembali ke awal baris saat ini \t tabhorizontal \v tabvertical \b backspace \f form feed \\ backlash \' single quote \ double quote
y

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 2-16 \? Tanda tanya \000 Bila ngan oktal \xhh Bilanga n heksadesimal Tipe data Boolean (bool) Pada C++, tipe data boolean dideklarasikan dengan menggunakan keyword bool dan hanya memiliki dua harga yaitu true atau false. Di C tida k ada tipe data keyword bool, sebagai gantinya kita dapat menggunaka n tipe data integer dengan 0 menyata kan FALSE dan 1 adalah TRUE Alokasi memori serta range data yang dapat dipakai untuk berbagai tipe data dapat dilihat pada table dibawah ini . Tipe data unsigned short int short int unsigned long int long int int (16 bit) int (32 bit) unsigned int (16 bit) unsigned int (32 bit) char float double Varia bel dan Kon stan ta Varia bel Variable adalah identifier ya ng merepresentasikan lo kasi di memori ko mputer dimana isi lokasi tersebut dapat diubah. Selain harus punya nama, variabel juga harus dideklarasikan sebelum dapat digunaka n. Deklarasi variabel adalah sbb : Tipe_Data Indetifier; Conto h : int nim; double akar; char nama; bool test; long nomor_telepon; // tipe data integer long unsigned longy; // tipe data integer long unsigned (>0) float rata_rata; Pada waktu deklarasi variabel dapat diberi harga inisiasi, misalnya : int a = 5; Alokasi memori 2 bytes 2 bytes 4 bytes 4 bytes 2 bytes 4 bytes 2 bytes 2 bytes 1 byte 4 bytes 8 bytes Range [-0, 65,535] [--32,768, 32,767] [-0, 4,294,967,295] [--2,147,483,648, 2,147,483,647] [--32,768, 32,767] [--2,147,483,648, 2,147,483,647] [-0, 65,535] [-0, 4,294,967,295] nilai dari 256 karakter [-1.2e-38, 3.4e38] [-2.2e-308, 1.8e308]

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 2-17

float b = 2.1; Konstanta Konstanta adalah identifier ya ng merepresentasikan lo kasi di memori ko mputer dimana isi lokasi tersebut tidak dapat diubah. Pendefinisia n/deklarasi konstanta dapat dila kukan dengan 2 cara. Cara pertama berasal dari bahasa C mengguna kan preprocessor directive #define . #define PI 3.1416 #define MIN 12 #define bintang * Kompiler akan merubah semua konsta nta yang muncul di dalam program, yang memiliki nama yang sama dengan yang didefinisikan diatas, dengan harga ya ng didefinisika n tanpa melihat tipe data, scope dan pembatasan, sehingga disarankan untuk tida k menggunakan definisi dengan cara seperti ini. Cara pendefinisian/deklarasi konsta nta ya ng ked ua adalah dimulai dengan keyword const da n tipe data lalu nama kons tanta beserta harga konstanta tersebut. Deklarasi konstanta adalah sbb : const Tipe Data Indetifier = suatu harga; Conto h : const float PI=3.1416; const int MIN=12; const char bintang = '*'; Assignment statement Assigment statement digunaka n untuk menyimpan nilai kedalam variabel, tapi variabelnya harus dideklarasikan terlebih dahulu. Variabel = Ekspresi; Ekspresi dapat terdiri dari konstanta, variabel dan operator.Operators (diantaranya): +, -, *, /, % (modulus sisa dari pembagian integer) Conto h Assigment : //deklarasi variabel : int x, k, l, nilai; float f, g; char c; //Assigment x=20; k=l+5; nilai=15+x; c='C'; f=1.2-g; Harus diingat penggunaan tipe integer dan float pada waktu pembagian : Tipe integer : 8/2=4, 9/2=4, 2/3=0 Tipe float : 9.0/2.0=4.5, 2.0/3.0=0.66667

Pencamp uran tipe data dalam satu ekspresi Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 2-18 Program kompilasi akan meng ubah tipe ya ng lebih rendah ke ya ng lebih tinggi Hirarki: long double, double, float, long int, int, short int

contoh : 2.0+8 = 10.0 C memiliki notasi lvalues dan rvalues (l=left, r=right) yang berhubungan denga n variabel dan konsta nta. rvalue adalah nilai data dari variabel (atau biasa dihubungka n sbg read), sedangkan lvalue adalah lokasi dari data (location). Pada lvalue hanya bisa diisi oleh variabel sedangkan rvalue bisa diisi oleh variabel dan konstanta. Contoh : int x; x = 5; // ini OK, x boleh sebagai lvalue. 5 = x; // ini illegal. konstanta 5 tidak boleh sbg lvalue. Pernyataa n Ga bun gan Banya k pernyataan, seperti tampak di bawah ini berisi suatu ekspresi yang diikuti oleh sebuah titik koma: scanf (%d, n); c = a + b; printf (Tamat. \n); Kita dapat mengg una kan kurung kurawal { } untuk menulis kan penyataan yang kompleks dari pernyataan-pernyataan ya ng sederhana. Misalnya pernyataan berikut ini : {k = 2*a+c; l = b+3*d; m = 5*e + f;} mengand ung pernyataan gabungan yang berasal dari tiga buah pernyataan sederhana. Pernya taanpernyataan gabungan d isebut juga bloc ks khususnya jika kita me mproklamir kan sejumlah variabel di dalamnya. Bagian dan program ini disebut scope dari variabel yang dideklarasika n. Sua tu variabel dikataka n terlihat (visible) dalam scopenya kecuali jika ada scope lainnya ya ng memiliki variabel dengan nama yang sama. Contoh berikut ini akan memperjelas hal terse but //Contoh 2.2 : Keterlihatan variabel. #include <stdio.h> main() { int nilai = 2; { printf( nilai = %d \n, nilai); // Outp ut: nilai = 2 karena int nilai tampa k (visible). float nilai=3.7; { printf( nilai = %f \n, nilai); // Outp ut: nilai = 3.7 karena float niliai tampak. // int nilai masih dalam scope tetapi tersembunyi. char nilai = 'A'; printf( nilai = %c \n, nilai); // Outp ut: nilai = A (karena char nilai visible). // float nilai dan int nilai masih dalam scope tetapi // tersembunyi. } printf( nilai = %f \n, nilai); Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 2-19

// Outp ut: nilai = 3.7 (karena float nilai visible). // int nilai masih dalam scope tetapi tersembunyi. // char nilai di luar scope. } printf( nilai = %d \n, nilai); // Outp ut: nilai = 2 (karena int nilai visible) // float nilai dan char nilai diluar scope. } LATIHAN-LATI HAN 1. Carilah kesalahan-kesalahan dalam program berikut ini, dan selanjutnya perbaikilah: include <std.h> main(); { float a, b a = A'. b = B. a = C +1; printf(Akhir dari program ini) } 2. Apakah output dari per nyataan berikut ini? printf( tanda petik: \' \n tanda petik dua: \ \n Backlash: \\\nThe End. \n); 3. 4. Buatlah program yang mencetak nama dan nim anda pada baris yang berlainan. Selanjutnya compile dan run program tersebut di komputer anda. Buatlah program yang menc etak umur anda. Program ini har us mengajukan Permintaan kepada anda untuk memasukan tahun kelahiran dan tahun saat ini kepada anda. 5. Diberikan persamaan sbb : x(t) = x o + v0.t + 1/2 at , buatlah program C++ dengan masukan jarak awal, kecepatan awal, percepatan dan waktu serta tampilkan hasil perhitungan jarak sekarang
2

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 3-20 Ba b 3. OPERAT OR Opera tor Aritmatika Padabagiansebelumnyakitatela hmenggunakan operator -operator seperti : Operator Operator Operator Operator Operator penjumlahan pengurangan perkalian pembagian modulus : : : : : x+y xy x*y x/y x%y

Semuanyamempunyaiduab uah operand, yaitu x dan y olehkarenaitudisebutsebagai operator biner. Selain operator bineradajuga operator unary yang hanyamemerlukansatu operand saja, yaitu : x++ ata u ++x disebut operator increment (x=x+1) x-- atau x disebut operator decrement (x=x-1) Kedua operator diatasakanseringdijumpaiter utamapadawa ktu looping dandapatjugasebagaibagiandariekspresi. Jika operator munculsebelum variable ma kahargaakhir variable dipakaisebagaihargaekspresi, sedangkanjika operator munculsetela h variable harga variable asaldipakaisebagaihargaekspresi, misalnya x = 10; y = ++a; (sekarangharga x = 11, y = 11) x = 10 y = x++; (sekarangharga x = 11, y = 10)

Atura n Precedence Operasiaritmatikaaka ndilaksana kanberdasarkanaturanpeng urutansebagaiberikut : Precedence tertinggi : () Precedence berikutnya: * / % Precedence terrendah : + -

Sehinggapernya taan rata_rata = a + b / 2. 0; akanmenghitung b/2.0 terlebihdahulubaruhasilnyaditambahkandengan dilakukanterlebihdahuluma kaharusditulissbb : rata_rata = (a + b) / 2.0; Jikaadabeberapa operator aritmatika makaoperasiaritmatikaa kandikerjakandariarahkirikekanan. a * b /5 (samadengan (a * b)/5) KonversiTipe Data Konversi data secara implisit akandila kukanoleh program kompilasiapabilabeberapatipe data dicampurdalamsuatuekspresi. Aturanko nversiadalahsebagaiberikut : 1. 2. 3. Jikakedua operand bertipe integer makahasilakanbertipe integer Jikasalahsatuataukedua operand ber tipe float makahasilakanbertipe float Jikaekspr esi yang dievaluasibertipe integer sedangkan variabel hasilbertipe float maka integer akandikonversiketipe float sebelum di diberikanke var iable hasil. yang sederajatdalamsatuekspresi, a. Jika ingin a + b

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 3-21

4.

Jikaekspr esi yang dievaluasibertipe float sedangkan variabel hasilbertipe integer maka float akandikonversiketipe integer sebelum di diberikanke variabel hasil.

Kasuskeempatakanmenyebabkankehilangana kurasikarenapemb ulata ndari float ke integer. Contoh : float varFloat = 4., varFloat2 = 3.,hasilFloat; int varInt = 4, varInt2=3, hasilInt; hasilInt = varInt * varInt2; printf (\nhasilInt = %d,hasilInt); hasilFloat = varFloat / varInt2; printf(\nhasilFloat = %f, hasilFloat); hasilFloat = varInt * varInt2; printf(\nhasilFloat = %f, hasilFloat); hasilInt = varFloat / varInt2; printf(\nhasilInt = %d, hasilInt); akanmenghasilkan output hasilInt = 12 hasilFloat = 1. 33333 hasilFloat = 12.0 hasilInt = 1 Opera tor Assignment Pada pernyataan assigment kitatelahmengenal operator = sebagai operator assigment, misalnyapada statement dibawahini : a = a + b; Pada C penulisandiatasdapat di persingkatdenganmenggunaka nsimplifikasi operator menjadi : a+=b; yang artinyasamadengan a = a + b dengananalogisepertidiatas operator assignment lainnya yang merupaka nhasildisimplifikasiadalahsbb : a-=b; a*=b; a/=b; a%=b; ( a = a b) ( a = a * b) ( a = a / b) ( a = a % b)

// Contoh3.1 : Program konversidari Fahrenheit keCelcius #include <stdio.h> main() { const float pengali = 5.0/9.0; // jika integer hasilnyaakan 0 const int pengurang = 32; float fahr, cel; printf(Masuka n temperaturdalamderajat Fahrenheit: ); scanf (%f,&fa hr); cel = (fahr - pengurang) * pengali; printf(Temperatur %f Fsetaradengan %f C ,fahr,cel); } Opera tor LogikadanPem ban din gan Jikakitaharusmela kukanpemrograman yang melibatkan proses pengambilankeputusandanpengula ngan, seringkitamemerlukan operator- operator berikut ini Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 3-22 Simbol == != < <= > >= && || ! Keterangan samadengan tidaksamadengan lebihkecil lebihkecilata usamadengan lebihbesar lebihbesaratausamadengan operator logika AND operator logika OR operator logika NOT

Operator-operator <, <=, >, >= disebut operator ketidaksamaansedangka n == dan != adalah operator kesamaan. Operator ketidaksamaanmempunyaipreseden yang lebihtinggidibanding operator kesamaaan. Tingka t preseden operator logikalebihrendah dibanding kedua operator diatas, dandiantara operator logika&&memilikipreseden ya ng lebihtinggikemud iandiikutioleh || serta !memilikipreseden yang terendah. Perbandinga n, misalnya a < b, merupakansebua hekspresidengandua kemung kina n, ya ng secaraintuitifdikataka nsebagai true (benar) and false (salah). Dalampemrograman C, bilanganinteger 1 dan 0 digunakanuntuktujuanitud imana: 1 berarti true 0 berarti false Perbandingan (danekspesilogikapadaumumnya) memp unyaitipe int. Dengandemikia nekspresiberikutini : (3<4) + (7<9) Merupakanekspresi integer yang sah, danharganyaadalah 2. Yang lebihmenariklagiadalah 5<4<3 Ekspresidiatasdipahamisebagai : (5<4)<3 ata usebagai0<3, sehingganilainyaadalah1. Operator unary (!) umumnyadig una kanuntukmengubahtrue menjadi false:, dansebaliknya. Sebagaicontoh, harga hargadarikeduaekspresisebagaiberikutadalahsamauntuksemua x dan y; x<y ! (x>=y) Kita dapatmengko mbinasikansejumlahperbandingandenga nmengguna kan operator logika&&dan ||. Denganmenggunaka nbentuksbb: operand1 && operand2 operand1 || operand2 sepertiditunjukkanpadaconto hberikutini: x>10 && x<2 untukmenya takanba hwa x terleta kantara 2 dan 10. Tabel berikut ini menamp ilka n summary dari preseden semua operator

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 3-23

Precedence

3 4 5 6 7 8 9 10 11 12 13

14

15

Operator ++ -() [] . -> ++ -+!~ (type) * & sizeof */% +<<>> <<= >>= == != & ^ | && || c?t:f += -= *= /= %= <<= >>= &= ^= |= ,

Description Suffix increment and decrement Function call Array subscripting Element selection by reference Element selection through pointer Prefix increment and decrement Unary plus and minus Logical NOT and bitwise NOT Type cast Indirection Address-of Size-of Multiplication, division, and modulus Additio n and subtraction Bitwise left shift and right shift For relational operators < and respectively For relational operators > and respectively For relational = and respectively Bitwise AND Bitwise XOR (exclusive or) Bitwise OR (inclusive or) Logical AND Logical OR Ternary conditional Assignment by sum and difference Assignment by product, quotient, and remainder Assignment by bitwise left shift and right shift Assignment by bitwise AND, XOR, and OR Comma

Associativity Left-to-right

Right-to-left

Left-to-right

Right-to-Left

Left-to-right

Latihan : 1. Buatlah ekspresi dalam C untuk beberapa persamaan matematik dibawah ini :
2

b
2. 3. 4.

4 ac ;

b ac

a * (b

2c)

Buatlah program yang mengkonversi integer km ke m, cm dan mm Berapa harga integer x pada ekspr esi dibawah ini : x = (34<65)&&(a>b)+23 -(b<a) Buatlah program beserta deklarasi variabelnya untuk menampilkan variabel a, b dan c yang masing-masing diinisialisasi berturut-turut 2000, 40000, 100000

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 4-24 Ba b 4. FUN GSI IN PUT DAN OUTPUT Stan da r I O Untuk memasukan inp ut dari keyboard dan mengeluarkannya ke layarpada C dikenal sta ndar io dengan menggunaka n header <stdio.h>. Pada standar io, pembacaan input dilakukan dengan menggunaka n perintah scanfmisalnya : scanf( %d ,&a); Sedangkan untuk output mengguna kan perintah printf, seperti : printf(The value stored in a is %d,a); Selain scanf, untuk input kita dapat juga menggunaka n fungsi getchar(), sedangkan untuk o utp ut selain menggunakan perintah printf, dapat juga kita g una kan fungsi putchar(). Sebenarnya masih ada lagi beberapa perintah untuk inp ut dan outp ut, seperti gets, getch, getche, puts, putch dan putche. Namun fungsi-fungsi diatas tidak termasuk kedala m printah sta ndar ANSI-C sehingga ha nya ada untuk compiler tertentu saja. Fun gsi In put Fungsi input merupakan fungsi yang akan menerima masuka n data dari piranti standar input (keyboard) untuk dikirimkan ke C untuk selanjutnya di olah oleh program C. getchar (prototype : int getcha r (voi d)) Fungsi getchar termasuk dalam sta ndar io yang berfungsi untuk menerima masuka n karakter dari keyboard. Fungsi ini aka n memanggil dan menungg u kiriman karakter dari keyboard, karakter yang dimasuka n lewa t keyboard akan disimpan pada buffer terlebih dahulu dan buffer akan mengirimkan ke fungsi getchar setelah tombol enter ditekan. Fungsi getchar ha nya menerima satu karakter setiap dipanggil. Fungsi getchar akan mengembalikan nilai integer ya ng merupaka n kode ASCII dari karakter yang diketika n pada keyboard. Perhatikan contoh program dibawah ini :

//Contoh 4.1 : penggunaan fungsi getch


#include <stdio.h> main() { int ch; printf(ketikan karakter lalu akhiri dengan menekan enter\n); ch = getchar(); printf(karakter yg diketikan adalah %c ,ch); return 0; } Jika kita jalankan program diatas dan kita ketikan sebagai masukan a lalu teka n enter maka pada layar akan tercetak karakter yg diketikan adalah a Tapi jika kita ketikan abcdefgh lalu tekan enter maka pada layar akan tercetak karakter yg diketikan adalah a Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 4-25

Karena getchar ha nya dipanggil satu kali ma ka ya ng ada di buffer hanya karakter a, da n karakter ini yang dikirim ke getchar ketika enter dite kan. Untuk membaca satu baris kalima t menggunaka n fungsi getchar dapat dila kukan dengan memanggil fungsi getchar berkali-kali sampai enter ditekan, missal perhatikan contoh program berikut ini

//Contoh 4.2 : penggunaan fungsi getch


#include <stdio.h> main() { int karakter; while ((karakter = getchar()) != '\n') putchar(karakter); return 0; } Jika kita ketikan sebagai input adalah Ini sebuah String maka dilayar akan ditampilka n Ini sebuah String Isi variabel karakter adalah Karakter terakhir ya ng diberikan ke variable karakter adalah \n (ganti baris). Agar input dari getchar dapat disimpan ma ka guna kan variable tipe string (array dari char) untuk mena mpungnya, seperti diperlihatka n pada contoh program berikut ini //Contoh 4.3: Menggunakan getchar() untuk masukan strings. #include <stdio.h> main() { char karakter, string[20]; int i = 0; while ((karakter = getchar()) != '\n' && i < 19) { string[i] = karakter;//karakter diberikan ke string ke i i = i + 1;//i di naikan } string[i] = '\0';//mengakhiri string printf(%s\n, string); } scanf Perinta h scanf merupa kan fungsi inp ut ya ng terformat. Bentuk umum dari scanf adalah sbb: scanf(format string, address list); Format string pada scanf disarankan untuk tidak mengg una kan konsta nta string tapi ha nya spesifikasi field saja. Jika kita menulis kan konsta nta string, ma ka pada waktu memasukan da ta harus ditulis kan konsta nta string tersebut dengan uruta n dan posisi yang s ama. Misalnya program berikut ini :

//Contoh 4.4 : Penggunaan scanf


#include <stdio.h> main()

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 4-26 { int x; scanf(Masuka n nilai x=%d , &x); printf(Nilai x adalah %d.\n, x); return 0; } Jika pada program diatas ingin ditampilkan Nilai x adalah 20, maka kita harus menuliskan pada masukan Masukan nilai x=20. Jika ha nya 20 saja yang kita ketikan maka akan dihasilkan output yang tidak kita harapkan. Pada scanf, masukan ya ng diketikan lewat keyboard akan di ubah sesuai dengan conversion-code -nya dan disimpan pada variabel yang dituliskan dalam format alamat &nama_variabel. Karakter & menya takan parameter ala mat tempat isi variabel disimpan. Ketika membaca bilangan integer dan floating, scanf akan mengabaikan whitespace yang mendahuluinya, artinya space, tab dan baris baru akan diabaikan sampai dia membaca angka. Sedangkan ketika membaca karakter (tipe char), whitespace tidak diabaika n dan dibaca sebagai bagian dari karakter.Misalkan : scanf( %d%d%d%c, &x, &y, &z, &a);

Jika kita menuliskan pada input :


1 2 3A maka harga x=1, y=2, z=3 dan a=A, namun jika kita masukan input sbb: 123A maka harga x=1, y=2, z=3 dan a= . Agar input diatas dapat dibaca dengan benar maka pada scanf harus dimasukan space sebelum %c scanf( %d%d%d %c , &x, &y, &z, &a); Sehingga kala u kita ketikan masukan 123A maka akan terbaca harga x=1, y=2, z=3 dan a=A. Untuk tipe integer dan floating : scanf( %d %d %d , &x, &y, &z); adalah ekivalen denga n scanf( %d%d%d , &x, &y, &z); Serta masukan berikut ini : 1 2 3 adalah ekivalen denga n 123 Jika width modifier digunakan, ma ka scanf akan membaca maksimum sebanya k width yang diberika n. Conto h :

//Contoh 4.5 : Penggunaan format scanf


#include <stdio.h> main()

{
Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 4-27

int x; scanf( %5d , &x); printf( Nilai x adalah %d.\n, return 0;

x);

}
Jika kita nasukan input dengan berbagai panjang karakter maka akan diperoleh outp ut sebagai berikut : input 123 12345678 12 456 output 123 12345 12

scanf akan berhenti membaca nilai dari suatu variabel jika menemui : 1. 2. 3. 4. Karakter whitespace Jumlah maksimum karakter terlampaui Karakter EOF Erro terdeteksi.

Error dapat muncul misalnya pada perintah scanf( %d, &x); kita masukan Hello World maka error akan muncul karena yang diminta adalah nilai integer sedangkan yang dimasukan adalah karakter. Masalah utama dalam penggunaan scanf adalah cenderung untuk mengabaikan white spaces (misalnya space) sehingga tidak reliable untuk kasus tertentu yang memerluka n input white spaces misalnya string. Sehingga untuk string akan lebih baik jika mengguna kan fungsi getstr() dibanding kan memakai scanf. Fun gsi Output Fungsi output akan menampilkan data yang dikirim dari C ke piranti standar output (layar). putchar (prototype: int putchar(int c)) Fungsi putchar a kan mena mpilkan karakter yang disimpan di C ke sta ndar output (la yar). Fungsi ini merupakan fungsi ya ng menembalika n nilai integer dan memerlukan argument bernila i integer pula. Bilanga n integer ini merupa kan representasi integer dari kode ASCII, jadi hanya bilanga n integer yang ada representasi karakternya saja yang aka n ditampilkan ke layar Jika diberikan bilangan yang tidak ada padaan karakternya ma ka aka n terjadi error. Berikut ini adalah contoh program pema kaian putchar() ya ng menerima argument bilangan integer 97 sampai 123 yang merepresentasikan huruf a samapai z. //Contoh 4.6 : penggunaan putchar() #include <stdio.h> main() { int i; for (i=97; i<123; i++) putchar(i); } Seperti pada getc har , putchar hanya mengirim satu karakter setiap kali dipanggil, sehingga untuk menampilka n deretan karakter atau string kita harus mema nggil putchar sebanyak jumla h karakter yang ada, seperti ditampilkan pada contoh program berikut ini.

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 4-28 //Contoh 4.7 menampilkan string dengan putchar() #include <stdio.h> main() { int i; char string[]=String dita mpilkan dengan putchar ; for (i = 0; i < 100; i++) //loop untuk me nampilkan string muali dari karakter pertama { if (string[i] == '\0') //test akhir dari string { putchar('\n'); break; } else putchar(s tring[i]); //tampilkan karakter berikutnya } } printf Fungsi printf merupaka n fungsi untuk mena mpilkan data ke p iranti sta ndar keluaran (la yar) secara terformat. Fungsi printf harus selalu mengguna kan parameter string (misal Hello World ) sebagai parameter pertamanya, setelah itu dapat diikuti oleh beberapa parameter dengan berbagai tipe. Jadi fungsi printf harus berbentuk : printf(format string, data list); Format string ditulis diantara tanda petik dua dan berisi tek dan/a tau spesifikasi field. Format string ini sangat penting karena menentuka n tipe variabel apa ya ng ada pada data list serta dalam format bagaimana dia harus ditampilkan. Perinta h printf aka n men -scan format string dari kiri ke kanan dan menampilka nnya di layar atau divais lain sampai bertemu dengan karakter %. Karakter % merupakan spesifikasi field ya ng menya takan bagaimana menampilkan format variabel yang ada pada data list berikutnya. Masing-masing spesifikasi field memiliki bentuk sbb : %<flag(s)><width><.precision><size>conversion-code Tanda % dan conversion-code harus ada sedangkan yang lain hanyala h optional. Conversion code ya ng ada adalah sbb : Tipe variabel %c %d (%i) %e (%E) %f %g (%G) %o %p %s char int float or double float or double float or double int pointer array of char karakter tunggal signed integer format exponential signed desimal gunaka n %f atau %e sesuai keperluan unsigned nilai oktal address yg disimpan di pointer Barisan karakter atau string Display

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 4-29

%u %x (%X)

int int

unsigned desimal unsigned nilai hex

Conversion-codeaka n mengko nversi variabel yang akan ditampilkan kedalam format ya ng sesuai dengan conversion-code ya ng dipakai. Gunaka nlah conversion-code sesuai dengan tipe variabel yang akan ditampilka n agar tidak terjadi kesalahan. Untuk optional size ada dua pilihan yaitu h, dan l, yang berturut -turut dig una kan untuk menyata kan short integer , dan long integer . %hd %ld /* short integer */ /* long integer */

Pilihan flag antara lain : flag + space 0 # left jus tify selalu menampilka n tanda tampilkan space jika tdk ada tanda karakter yang kosong akan diisi 0 gunaka n bentuk alterna te dari jenis format arti

Pemakaia n flag # akan tergantung pada conversion code ya ng dipakai, misalnya : %#o %#x menambahkan karakter 0 didepan nilai octal menambahkan karakter 0x didepan nilai hex

%#f atau %#e untuk menyakinkan titik desimal di cetak Pilihan width menya takan jumlah karakter yang digunaka n untuk menampilkan nilai, dan prec ision menunjukan jumlah karakter yang digunakan setela h titik desimal, misalnya %-10d akan menampilkan 10 karakter integer rata kiri %+5d akan menampilka n 5 karakter integer dan tambahan tanda + atau %10.3f aka n mena mpilkan 10 karakter (termasuk titik desimal dan tanda) dengan 3 angka setelah titik desimal. Jika nilai yang aka n di tampilkan memiliki jumla h karakter lebih besar dibandingkan denga n width, maka jumla h karakter yang dita mpilkan aka n sesuai dengan jumlah karakter nilai. Jadi width menya taka n jumlah karakter terkecil ya ng akan dita mpilka n. printf(angka printf(angka printf(angka printf(angka printf(angka printf(angka printf(angka printf(angka printf(angka printf(angka =%1d\n, 15); =%2d\n, 15); =%3d\n, 15); =%4d\n, 100000); =%4ld\n, 100000); =%7.2f\n , 1.2345); =%+.2f\n, 1. 2345); =%.9f\n , 1.2345); =%e\n , 21. 2345); =%.2e\n, 21.2345);

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 4-30

Output :
angka angka angka angka angka angka angka angka angka angka =15 =15 = 15 =-31072 =100000 = 1.23 =+1. 23 =1.234500000 =21.23450e+01 =21.230e+01

String yang akan kita bahas pada bagian yang lain merupakan deretan karakter. Untuk menampilkan string dapat mengguna kan %s seperti dibawah ini : printf(Hello World\n); printf( %s, Hello World); printf( %4s , Hello World); printf( %20s , Hello World ); printf( %.4s , Hello World ); printf( %20.8s , Hello World); akan meng hasilka n outp ut : Hello World Hello World Hello World Hello World Hell Hello Wo Karakter-karakter dibawah ini merupa kan kode kontrol yang dapat dipa kai untuk mengontrol penampilan variabel pada layar : \b \f \n \r \t \' \0 backspace formfeed new line carriage return horizontal tab single quote null

//Contoh 4.8 : Pengolahan bilangan float dan cara penampilan #include <stdio.h> main () { int a = 20; long b = 1234567890; float c = 12345.123456789; double d = 12345.123456789; //menampilka n bilangan bula t 15 dan 1234567890 printf (\nBila ngan integer a = 20, b = 1234567890 \n); printf (Berbagai macam cara penulisan dengan %%xd \n); printf (dengan format %%1d a = %1d\n,a);

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 4-31

printf printf printf printf

(dengan format %%2d (dengan format %%3d (dengan format %%4d (dengan format %%4ld

a= a= b= b=

%2d\n,a); %3d\n,a); %4d\n,b); %4ld\n,b);

//menampilka n bilangan float bentuk xx.xx printf (\nBila ngan float c = 12345.123456789 \n) ; printf (Berbagai macam cara penulisan dengan x.xx \n); printf (dengan format %%f c= %f\n,c); printf (dengan format %%3.2f c = %3.2f\n,c); printf (dengan format %%-.5f c = %-.5f\n,c); printf (dengan format %%+.6f c = %+.6f\n,c); printf (dengan format %%+.4e c = %+.4e\n,c); //menampilka n bilangan double bentuk xx.xx printf(\nBilangan double d= 12345.123456789 \n); printf(Berbagai macam cara penulisan dengan x.xx \n); printf (dengan format %%f c= %f\n,d); printf (dengan format %%3.2f c = %3.2f\n,d); printf (dengan format %%-.5f c = %-.5f\n,d); printf (dengan format %%+.6f c = %+.6f\n,d); printf (dengan format %%+.4e c = %+.4e\n,d); // perhatikan perbedaan bilangan dibelakang .xx // antara float dan double //Menampilkan string dengan berbagai format printf(\nString \ Ini co ntoh STRING\\n ); printf(Ini contoh STRING\n); printf(dengan format %%s : %s\n, Ini conto h STRING); printf(dengan format %%4s : %4s\n, Ini contoh STRING); printf(dengan format %%20s : %20s\n, Ini contoh STRING); printf(dengan format %%.4s : %.4s\n, Ini contoh STRING); printf(dengan format %%20.8s : %20.8s\n, Ini contoh STRING); return 0; } Stream io (han ya a da di C ++) Seperti yang telah disinggung pada bagian sebelumnya, header iostream.h. mer upakan salah satu preprocessor yang menyediaka n fungsi inp ut s tream dan output stream untuk mengg una kan inputoutput pada program C++. Aliran Output (Output stream) Dapat dibayangkan sebagai rangkaian karakter yang keluar dari program menuju peralatan outp ut standar.Peralatan output standar ya ng biasa diguna kan pada komputer adalah layar monitor . coutdipakai sebagai fungsi untuk menya takan output stream dengan format sbb : cout << Ekspresi atau String (<<Ekspresi atau String <<.) ; Operator << berarti simpan data ke output stream. Operator << dapat dipakai berkali -kali

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 4-32

cout

Aliran Output

File Layar Monitor

Aliran In put (In put stream) Dapat dibayang kan sebagai rangkaia n akarakter ya ng datang ke dalam program kita dari peralatan input standar.Peralatan inp ut sta ndar yang biasa diguna kan pada komp uter adalah keyboard . cindipakai sebagai fungsi untuk menyata kan inp ut stream dengan sintak sbb : cin >> Variable (>>Variabel>>.) ; Operator >> berarti ambil data dari input stream. Operator >> dapat dipakai berkali-kali cin>>x>>y; ekivalen dengan cin>>x; cin>>y; File Keyboard

Aliran Input
cin

cin akan berhenti membaca nilai variabel sampai bertemu whitespace untuk tipe data integer dan float, sedang untuk tipe data char hanya akan membaca satu karakter saja Input data ya ng dimasukan harus sesuai dengan tipe variabel dalam pernyataa n cin, jika tidak sama dapat terjadi error, misalnya : int i; char c; float f; cin >> f; (jika kita ketikan integer, akan diubah ke float) cin >> i; (jika kita ketikan float, akan terjadi error!) cin >> c; (jika kita ketikan integer atau float, akan terjadi error!) Perhatikan contoh program dibawah ini : //Contoh 4.9 #include <iostream.h> main() { int x; float y; char z; cin>>x>>y>>z; cout<<x<<, <<y<<, <<z; return 0; } Jika kita masukan input sbb :

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 4-33

2 7.5 FTI maka outp utnya adalah : 2,7.5,F Format output stream Untuk mengatur forma t pada output stream dapat dilakuka n dengan mengguna kan o utp ut manipulator sbb : Manipulator dec hex oct endl ends flush Keterangan Konversi ke bilangan desimal Konversi ke bilangan hexadesimal Konversi ke bilangan octal Baris baru Menyisip kan null xero pada string Flus h output stream

Selain itu dapat juga mema nipulasi outp ut dengan menggunaka n ma nipulator berikut ini, namun pada bagian header harus ditambahkan baris #include<manipio.h>

Manipulator setbase (int n) setw(int n) setprecision(int n) setfill(char) setiosflags(flag) resetiosflags(flag) dgn flagnya : ios::left ios::right ios::scientific ios::fixed ios::dec ios::hex ios::oct ios::uppercase ios::showbase ios::showpoint ios::showpos

Keterangan Konversi ke base n (0=dec, 8=oct, 16=hex) Setting lebar field Setting floating point dengan n presisi Setting dengan memasuka n karakter Setting format flag Mereset format flag Rata kiri Rata kanan Format angka dgn notasi scientific Format anggka dengan desimal Format bilangan desimal Format bilangan hexadesimal Format bilangan octal Merubah scientif dan hexadesimal menjadi huruf besar Menceta k base prefix (0x:hex, 0:octal) Menceta k titik untuk menunjukan presisi Menceta k tanda + atau -

Format penggunaan manip ulator adalah sbb : cout<<manipulator<<variabel<<variabel.; Penulisan format ma nipula tor untuk iosflag adalah sbb : setiosflags(ios::flagname) setiosflags(ios::flagname | ios::flagname) // untuk //Contoh 4.10 : #include<iostream.h> main ()

penggunaan lebih dari satu flag

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 4-34 { int angka=125; cout<< Ang ka desimal<<endl <<dec<<angka<< endl; cout<< Ang ka hexadesimal<<endl <<hex<<ang ka<<endl; cout<< Ang ka octal<<endl <<oct<<ang ka; return 0; } akan meng hasilka n outp ut : Angka desimal 125 Angka hexadesimal 7d Angka octal 175 Outp ut yang sama dapat pula diperoleh dari dua program berikut : //Contoh 4.11 : #include<iostream.h> #include<iomanip.h> main () { int angka=125; cout<< Ang ka desimal<<endl <<setbase(10)<<ang ka<<endl; cout<< Ang ka Hexadesimal<<endl <<setbase(16)<<ang ka<<endl; cout<< Ang ka Octal<<endl <<setbase(8)<<angka; return 0; } atau program //Contoh 4.12 : #include<iostream.h> #include<iomanip.h> main () { int ang ka=125; cout<< Ang ka desimal<<endl <<setiosflags(ios::dec) <<angka<< endl; cout<< Ang ka Hexadesimal<<endl <<setiosflags(ios::hex) <<angka<<endl; cout<< Ang ka Octal<<endl <<setiosflags(ios::oct) <<angka; return 0; } pernyataan dibawah ini : Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 4-35

float x=125.1234567; cout<<setprecision(6)<<x<<setprecision(11)<<endl; cout<<setiosflags(ios::scientific) <<x<<endl; cout<<resetiosflags(ios::scientific)<<setw(15)<<x<<endl; cout<<setiosflags(ios::left)<<setw(15)<<x<<endl; cout<<resetiosflags(ios::left)<<setfill('*')<<setw(15)<<x<<endl; cout<< setiosflags(ios::showpos)<<x<<endl; return 0; akan meng hasilka n outp ut 125.123 1.251234567e+02 125. 1234567 125.1234567 ***125. 1234567 +125. 1234567

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 5-36 Ba b 5. KONT ROL LOOP Jika kita d iminta untuk menampilkan Hello World sebanyak 5 baris, ma ka kita dapat mela kukannya dengan memb uat program menggunaka n aliran kontrol sequencial sbb: //Contoh 5.1 :Program menampilkan Hello World dlm 5 baris #include<stdio.h> main() { printf(Hello printf(Hello printf(Hello printf(Hello printf(Hello }

World\n); World \n); World \n); World \n); World \n);

Pada program diatas, kita menulis printf (Hello World\n); sebanya 5 kali, jumlah sebanya k ini belum jadi masalah. Namun jika kita diminta untuk menampilkan Hello World 10 kali, 100, atau 1000 kali apakah kita akan menulis kannya berulang -ula ng sebanyak yang diminta?. Tentu saja kita tida k ing in melakuka nnya. Untuk melakukan pengula ngan didalam program C, selain aliran ko ntrol squencial, dikenal juga co ntrol loop ata u looping. Ada 3 jenis looping, yaitu while looping, do while looping dan for looping While looping While looping diguna kan untuk mengeksekusi blok pernyataan sepanjang suatu ko ndisi dipenuhi. Jika ko ndisi tidak dipenuhi maka blo k pernya taan tidak a kan dieksekusi lagi. Sinta k dari while looping adalah sbb : while (kondisi) { Blok pernyataan } Karena pengecekan kondisi berlangsung pada bagian paling atas, maka ada kemung kinan blok pernyataan tidak pernah dieksekusi. Kondisi biasanya berupa pembandingan, kebanya kan yang dibandingka n adalah variabel ya ng berfungsi sebagai counter ya ng menghitung jumlah pengulangan dengan kons tanta ata u variabel yang membatasi jumlah peng ulangan. Misalnya dalam kasus contoh program menampilkan Hello World berulang -ula ng seperti dia tas dapat dilakuka n denga n program sebagai berikut: //Contoh 5.2 :Program menampilkan Hello World dlm 5 baris dengan menggunakan // while looping

#include<stdio.h> main() { int x=0; while (x<5) //selama x<5 dipenuhi pernya taan dlm {} akan dieksekusi { printf(Hello World \n); x++; //increment x } return 0;

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 5-37

} Dengan mengg una kan program diatas, jumla h peng ulanga n berapa kalipun dengan muda h kita b uat hanya dengan menggati konstanta 5 dengan jumlah peng ulangan yang kita inginka n. do loopin g Do looping pada dasarnya sama dengan whilelooping hanya pada do looping pengetesan kondisi dilakukan dibawa h. Do looping memiliki sinta k sbb : do{ Blok pernyataan } while (kondisi); Karena pengetesan dila kukan dibawa h ma ka sedikitnya b lok pernyataan telah dieksekusi satu kali sebelum pengetesan kondisi dilakuka n. Kondisi yang kita test bisa pemba ndingan ya ng simpel bisa juga pembandinga n yang komplek dengan melibatkan operator logika. (dalam pembandingan sama dengan, kita harus menggunakan == bukan =). Misalnya kita diminta menebak suatu ang ka yang akan dibangkitkan secara otomatis oleh program, kesempatan yang diberikan maksimum 5 kali. Untuk membang kitkan ang ka random diguna kan fungsi rand() dari stdlib.h // Contoh 5.3 :Program menebak angka integer 0 sampai 10 #include<stdio.h> #include<stdlib.h>//diperlukan untuk menggunaka n rand() main() { int angka, tebak, jml_tebaka n=0; angka=rand()%10; //Membangkitkan angka 0-10 printf (Tebaklah ang ka integer yang digenerate program\n); do { printf (\nMasukan tebaka n ke %d :, jml_tebakan+1); scanf (%d, &tebak); jml_tebaka n++; }while((angka!=tebak)&&(jml_tebaka n<5)); return 0; } Program diatas akan berhenti jika kita berhasil meneba k dengan benar ata u tebaka n kita sudah melewa ti 5 kali kesempatan. Untuk kasus yang perta ma kita dapat mengetahui a ngka yang dibangkitkan komputer berdasarkan tebakan terakhir kita, na mun untuk kasus kedua kita tidak dapat mengeta hui apakah program berhenti karena tebaka n kita benar ata u karena kesempata n menebak telah melewati 5 kali. For Loopi ng For looping dapat digunakan untuk mengeksekusi blok pernyataan untuk jumla h peng ulangan yang tetap.Sintak dari for looping adalah sbb : for (inisialisasi;kondisi;aksi) { blok pernyataan } Misalnya program untuk menampilkan ang ka integer 1 sampai 10 dapat dilakukan denga n perintah for(int i=1; i<=10;i++) { Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 5-38 printf (%d \n, i); } Kondisi pengetesan bisa saja tidak ada hub ungannya dengan variabel yang diinisialisasi.Inisialisasi, kondisi da n aksi dapat berbentuk simpel atau ko mplek dengan multiple inisialisasi, multipel aksi a tau pembandingan ya ng komplek.Selain itu inisialisasi, kondisi dan aksi merupakan optio nal boleh saja tidak ada. Pada program dibawah ini looping akan berhenti jika jawab=N walaup un variabel yang diinisiasi adalah i. for (i = 1; jawab == 'Y'; i++) { printf (%d \n, i); printf (Teruskan (Y/N): ); scanf (%c, &jawab); } Inisialisasi dan aksi melibatkan dua variabel x dan y. for (x = 0, y = 50; y != x; x++, y--) { printf(%d, %d\n, x, y); } printf(%d, %d\n, x, y); Program dibawah ini tanpa mengguna kan aksi, namun tanda ; tetap harus ditul iskan. for (i = 1; jawab != 'N';) { printf(%d\n, i); printf (Teruskan (Y/N): ); scanf (%c, &jawab); } Untuk membua t program looping tanpa akhir kita dapat menggunaka n program dibawah ini. int i=1 for (;;) { printf(%d\n, i); } Program diatas akan berakhir apabila kita mela kukan break (ctrl -break, dst.). Walupun inisialisasi, kondisi dan aksi tidak dipakai, tapi tanda ; tetap harus ada. Latihan : 1. 2. Buat program untuk menghitung mundur dari 10 sampai 1 dengan menggunakan ketiga looping diatas. Buat program untuk menghitung x! (faxtorial x) dimana x!=1*2* *x dengan x adalah bilangan integer positip.

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 6-39

Ba b 6. KONT ROL PEN CABAN GAN Pada waktu mengeksekusi sebuah kondisi sering kita memerlukan untuk memilih blok pernyataan mana ya ng harus dikerjaka n sesuai dengan ko ndisi ya ng ada, atau biasa disebut pencabanga n. Untuk keperluan pencabanga n tersebut kita dapat menggunakan perintah if, if-elseata uswitch. Pernyataa n I f Pernyataa n if (if s tatement) b iasa digunaka n untuk mengeksekusi suatu pernya taan (boleh berupa pernyataan ya ng ko mplek) apabila suatu kondisi dipenuhi, jika tida k dipenuhi pernyataan tersebut tidak akan dieksekusi. Format pernyataan if adalah sbb : if (kodisi) pernyataan; Berikut ini adalah conto h pemakaian if sta tement. // Contoh 6.1 :Program mencari angka terbesar dan terkecil dari 2 angka integer #include <stdio.h> main() { int angka1 , angka2; printf(\nMasukan ang ka ke 1: ); scanf(%d , &angka1); printf(\n Masukan angka ke 2: ); scanf(%d , &angka2); if (angka1<angka2) printf(\nAngka ke 1 lebih kecil dari Ang ka ke 2 ); if (angka2<angka1) printf(\nAngka ke 2 lebih kecil dari Ang ka ke 1 ); } Pernyataa n I f-else Pernyataa n if hanya dapat mengeksekusi antau men-s kip suatu pernyataan saja. Jika kita ing in program memilih pernyataan mana ya ng harus dikerja kan dari dua pilihan pernyataan yang ada maka kita harus mengguna kan pernya taanif-else. Sinta k dari pernyataanif-else adalah sbb : if (kondisi) pernyataan1; else pernyataan2; Jika kondisi dipenuhi akan mengerjakan pernya taan1 jika kondisi tidak dipenuhi a kan mengerjakan pernyataan2. Sebagai conto h kita gunakan program yang telah dibicarakan pada bagian looping yaitu program untuk menebak ang ka yang dibang kitkan program dengan kesempatan menebak ma ksimum 5 kali.Namun pada program yang telah dibuat ternyata ada masalah yaitu ada kasus dimana kita tidak dapat mengeta hui apaka h program berhenti karena tebaka n kita benar atau karena kesempatan menebak tela h melewati 5 kali. Untuk mengatasi hal tersebut kita dapat mela kukannya dengan menambahkan pernya taanif-else pada program yang telah dibuat Sehingga program yang telah ditambah dengan pernya taanif-else menjadi : // Contoh 6.2 :Program menebak angka integer 0 sampai 10 #include<stdio.h> #include<stdlib.h>//diperlukan untuk menggunaka n rand() main() { int angka, tebak, jml_tebaka n=0; angka=rand()%10; //Membangkitkan angka 0 -10 Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 6-40 printf (Tebaklah ang ka integer yang dibang kitkan program\n); do { printf (\nMasukan tebaka n ke %d : , jml_tebakan+1); scanf (%d, &tebak); jml_tebaka n++; }while((angka!=tebak)&&(jml_tebaka n<5)); if(angka==teba k) printf(\ntebakan anda tepatpada tebakan ke : %d, jml_teba kan); else printf(teba kan anda salah\n); return 0; } Dalam pernyataan if-else dapat berisi pernyataan if-else lagi sehingga membentuk pencabanga n yang lebih komplek. Misalnya pencabangan seperti berikut ini : if (kondisi1) if (kondisi2) if (kondisi3) pernyataan1; else pernyataan2; else pernyataan3; else if (kondisi) pernyataan4; else pernyataan5; Penggunaan Break dan Continue di dalam Loop Pernyataa n break digunaka n untuk keluar dari program looping dengan mem-bypass ekspresi terminasi yang normal. Jika pernyataan break ditemui di dalam loop, ma ka loop aka n berhenti dan program akan mengeksekusi pernya taan yang mengikuti loop tersebut. Pernya taan break dapat digunaka n di ketiga jenis looping. Pernyataa n break dapat diguna kan dima na saja di dalam loop, namun guna kanla h break untuk hal khusus saja dan jangan gunakan break untuk keluar loop pada keadaan normal. Break juga diguna kan didalam fungsi dan pernyataan case. Pernyataa n continue adalah kebalikan dari pernyataan break. Pernyataan co ntinue aka n mema ksa loop untuk mengeksekusi iterasi berikutnya denga n mem -bypass pernyataan yang ada antara pernyataan co ntinue dengan test kondisi. Pada loop while da n do -while loops, pernyataan continue akan menyebabkan program loncat ke bagian pengetesan ko ndisi. Sedang kan pada kasus lo op for, program akan mengeksekusi bagian a ksi (increment). Co ntoh yang baik dalam pema kaian pernyataan continue adalah untuk me-restart rangkaian pernya taan apabila ditemui error. // Contoh 6.3 :Program mengurutkan bilangan genap dari 0 sd 100 #include <stdio.h> main() { int x ; for ( x=0 ; x<=100 ; x++)

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 6-41

{ if (x%2) continue; printf(%d\n , x); } } Conto h program menggunakan break. // Contoh 6.4 :Program menghitung pembagian #include <stdio.h> main() { int a,b; float c;char jawab; for ( ; ; ) { printf (\nMasukan bilangan integer a : ); scanf(%d, a); printf(\nMasukan bila ngan integer b : ); scanf(%d, b); if ( b==0 ) break ; c=a/b; printf(Hasil Pembagian %d/%d = %f\n, a, b, c); printf(Teruska n (Y/N) ? ); jawab = getchar(); if (jawab==N)break; } printf(Akhir dari loop...\n); } Switch Pernyataa n if-else dapat digunakan untuk menentuka n piliha n diantara dua alternatif yang ada, namun jika alternatif yang ada lebih dari dua maka pernya taan switch dapat digunakan untuk menyelesaikan permasalahan ini. Bentuk sintak dari pernyataan switch adalah sbb : switch(ekspresi) { case constant1: rangkaian pernya taan; break; case constant2: rangkaian pernya taan; break; case constant3: rangkaian pernya taan; break; . default: rangkaian pernyataan; break; } Ekspresi pada switch berisi sua tu variabel ya ng aka n diband ing kan terhadap beberapa harga konsta nta integer atau karakter yang menjadi label dari masing -masing case, jika harga yang sama ditemuka n maka rangkaia n pernyataan ya ng berhubungan dengan label case tersebut akan dieksekusi sampai bertemu break. Jika tidak ditemuka n harga yang sama, maka case default aka n dieksekusi. Sebagai contoh : // Contoh 6.5 :Contoh program pemakaian switch #include <stdio.h> main() { int i;

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 6-42 printf(Masuka n bilangan integer antara 1 sampai 4 ); scanf(%d,&i); switch (i) { case 1: printf(satu); break; case 2: printf(dua ); break; case 3: printf( tiga ); break; case 4: printf(empa t); break; default: printf(bila ngan tida k dikenal); } /* akhir dari switch */ } Ekspresi bersyara t Di samping pernyataan bersyarat (conditional s tatement), ya ng dia wali dengan if , terdapat juga ekspresi bersyarat yang menggunakan dua b uah karakter ?, dan:. E kspresi bersyarat ini mempunyai bentuk sebagai berikut ekspresi1 ?ekspresi2 : ekspresi3 Pertama-tama, ekspresi1 dievaluasi, jika benar maka ekspresi2 dikerjakan tapi jika salah maka ekspresi3 yang dikerjakan. Dengan kata lain berdasarkan nilai ekspresi1 dilakukan pilihan antara ekspresi2 dan ekspresi3. Pernyataan bersyarat dan ekspresi bersyarat berbeda tidak hanya dalam penampila nnya tetapi juga dalam penggunaa nnya. Keduanya dig una kan dalam konteks ya ng berbeda. Ekspresi bersyarat dapat digunakan dala m setiap ekspresi sedangkan pernyataan bersyarat tidak demikian. Perhatika n conto h berikut ini: z = 3*(a<b?a+l:b-1)+2; Jika dituliskan dengan sebagai berikut: mengg una kan pernyataa n bersyarat maka kita harus menuliskannya

if (a<b) z =3* (a+1) +2; else z =3* (b-1) +2; atau dengan mengguna kan variabel temporer t sebagai berikut: if (a<b) t = a +1; else t = b -1; z = 3*t + 2; Format ekspresi bersyarat tampak lebih efisien dibandingka n denga n format pernyataan bersyarat . Ekspresi bersyarat juga sangat berguna sebagai argumen fungsi. Misalnya pada sebuah fungsi sta ndar, seperti printf.Ekspresi bersyarat dapat digunakan dalam argumen untuk printf seperti contoh berikut ini: printf( Bilangan terbesar antara a and b adalah , (a > b ?a : b)); Sebuah program yang ekivalen dengan fragmen program di atas tanpa menggunakanekspresi bersyarat misalnya adalah sebagai berikut:

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 6-43

printf (Bilangan terbesar antara a and b adalah ); if (a>b) printf( %d , a); else printf(%d, b); Perlu digaris bawahi di sini bahwa ada kasus-kasus di mana pernya taan bersyarat lebihbaik dig una kan dibandingka n ekspresi bersyarat, misalnya kasus dengan pernyataan yang merupakan bagian dari pernyataan bersyarat yang cukup kompleks. Opera tor Koma Dua buah ekspresi yang dipisahkan oleh operator koma ditunjukkan dalam contoh berikut ini: ekspresi 1, ekspresi2 Kedua ekspresi itu dievaluasi sesuai dengan urutannya, dan harga dari keseluruhan sama dengan ekspresi2. Konstruksi bahasa seperti ini aka n berarti hanya jika ekspresi1 melakuka n sesuatu, tidak hanya sekedar sebuah harga. Berikut ini adalahcontoh dari hal tersebut : // Contoh 6.6 :PENJUMLAHAN 1: Solusi berbasis operator koma. #include <stdio.h> main () { int s=0, i; printf (Masukan Bilanga n bulat serta akhiri dengan harga negative\n); while (scanf(%d, &i), i>0) s+=i; printf(jumla h s = %d\n, s); } Program ini meng hitung penjumla han bilangan b ulat positif yang diberika n melalui keyboard dan diikuti oleh sebuah bila ngan bula t negatif atau nol. Yang menarik dalam co nto h ini adalah bahwa ekspresi scanf(%d, i) terjadi dalam kurung mengikuti kata while meskip un tujuannya buka n untuk menguji suatu loop. Cara lain dalam menuliska n program di atas adalah sebagai berikut: // Contoh 6.7 :PENJUMLAHAN2: Solusi berbasis pernyataan break. #include <stdio.h> main () { int s=0, i; printf(Masuka n Bilangan bula t akhiri denga n harga negative\n); for( ; ; ) { scanf(%d, &i); if (i<0) break; s += i; } printf(jumla h s = %d\n, s); } Mengakhiri Input Data N umerik Dalam co nto h sebelumnya barisan bilanga n bulat dari keyboard diakhiri dengan sebua h bilangan nonpositip. Kita mungkin ingin mengakhiri hal itu dengan cara lain, misalnya dengan kata END. Hal ini dapat kita lakukan secara tradisional misalnya dengan cara sebagai berikut: // Contoh 6.8 : PENJUMLAHAN 3: Data input diakhiri dengan kata END. #include <stdio.h> main () { Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 6-44 int s=0, i; printf(Masuka n Bilangan bula t akhiri denga n END\n); while (scanf(%d , &i)) s+= i; printf(jumla h s = %d ,s); } Pada saat scanf membaca sebuah bilangan bula t ia akan melanjutkannya denga n mengabaikan white space charakter sampai ditemui character ya ng buka n bilanga n bulat. Akibatnya bila menemui huruf E dari kata END ia akan mengakhiri pembacaannya.

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 7-45

Ba b 7. FUN GSI DAN PROT OTIPE Pen dahuluan Fungsi didalam ba hasa C/C++ adalah sama denga n apa ya ng disebut dengan subroutin a tau procedure yang dikenal pada bahasa pemrograman yang lain. Fungsi didalam pemrograman diperlukan untuk : 1. Memecahkan masalah besar kedalam masalah yang lebih kecil, sehingga seorang pemerogram dapat menulis kannya dalam bentuk fungsi-fungsi yang dapat di test keberhasilannya secara terpisah. Menangani pekerjaan ya ng sering dilakukan berulang -ula ng. Dapat mengguna kan program yang tela h dibua t orang lain (fungsi librari) sehingga kita tidak perlu membua tnya lagi tinggal mengg una kannya saja.

2. 3.

Selain menyediaka n beberapa fungsi standar seperti fungsi-fungsi matematik, cin, cout dsb., C++ mengijinkan pemrogram mendefinisikan fungsi miliknya sendiri. Misalnya pada fungsi berikut ini fungsi untuk meng hitung jarak titik terhadap titik 0 pada koordinat x,y. // Contoh 7.1 : fungsi menghitung jarak antara dua titik float jarak(float x, float y) // Returns jarak koordinat (x, y) dari ttk pusat { float jarak; // var iable lokal jarak = sqrt(x * x + y * y); return jarak; } Fungsi diatas memiliki dua parameter input bilangan real x dan y, serta mengembalikan (retur n) jarak ttk pusat ke ttk (x,y). Di dalam fungsi dideklarasikan variabel loka l (varia bel yang hanya berlaku didalam fungsi ini saja) jarak sebagai variabel untuk menyimpan hasil perhitungan sementara. Bentuk umum dari definisi fungsi adalah sbb : Tipe_fungsi nama_fungsi (list parameter) { definisi lokal; implementasi fungsi; } Jika fungsi mengembalikan nilai maka tipe dari nilai harus dispesifikasikan oleh tipe fungsi, dapat berupa int, float atau char . Jika fungsi tida k mengembalika n nilai maka tipe fungsi harus void. Nama fungsi mengikuti aturan untuk identifier seperti untuk variabel atau ko nstanta. List-parameter merupaka n daftar parameter yang dipakai disertai tipe datanya. Definisi lokal adalah variabel yang dideklarasikan di dlm fungsi dan akan diguna kan pada bagian implementasi fungsi. Implementasi fungsi merupa kan rangkaian statemen C yang mengimplementasikan efek dari fungsi.

Fun gsi tan pa Parameter Fungsi yang tidak memiliki parameter biasanya tida k mengembalikan nilai tapi melakuka n sua tu operasi. Tipe fungsi seperti ini diguna kan untuk hal terbatas. Misalnya fungsi dibawah ini hanya melakuka n operasi mencetak Belajar Bahasa C dalam 2 baris :

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 7-46 //Contoh 7.2 : Contoh prosedur mencetak 2 baris Belajar Bahasa C void cetak2baris (void) { printf(Belajar Bahasa C\n); printf(Belajar Bahasa C\n); } Pada fungsi diatas kata void pertama dig una kan untuk menyata kan fungsi tidak mengembalika n nilai sedang void kedua ya ng berada dalam tanda kur ung menyataka n bahwa fungsi ini tida k memiliki variabel. Fungsi tersebut mengimplementasikan peri ntah printf ( Belajar Bahasa C\n) sebanya k2 kali. Karena tidak mengempalikan nilai maka fungsi diatas dalam pemakaiannya tida k dapat digunaka n dalam bentuk pernya taan assigment, tapi dipanggil dalam statement sbb : cetak2baris(); Walupun tidak memiliki parameter namun tanda () harus dituliska n. Penulisan fungsi didalam program dapat dilakuka n dalam dua cara. Cara pertama menuliskan definisi fungsi sebelum fungsi main. // Contoh 7.3 :Program penggunaan fungsi void cetak2baris (void) { printf(Belajar Bahasa C\n); printf(Belajar Bahasa C\n); } main() { printf(Cetak Bela jar Bahasa C 2 baris\n); cetak2baris(); printf(Cetak Bela jar Bahasa C 2 baris lagi\n); cetak2baris(); } Pada penulisan diatas terliha t bahwa sebelum ke program utama sepertinya terlalu banya k informasi yang mendahuluinya, ya ng sebenarnya ingin mena mpilkan sebua h fungsi. Karena itu lebih baik jika fungsi dileta kan setela h program utama. Namun persoalan akan muncul ketika kita meng kompilasi program, karena fungsi akan dikompilasi sebelum program kompilasi menemukan definisi fungsinya. Untuk mengatasi hal tersebut dia tas dapat dilakukan dengan mengg una kan proto tipe fungsi (Function prototypes) . Proto tipe fungsi mememberi informasi mengenai tipe return dari fungsi dan tipe parameternya. Prototipe fungsi diletakan sebelum program main. Definisi fungsi ya ng lengkap diletaka n setelah fungsi main atau dapat berada pada file lain yang dikompile terpisah dan di -link program main. Prototipe fungsi merupa kan pengula ngan fungsi heading sehingga untuk program contoh 7.3 diatas dapat dituliskan menjadi : // Contoh 7.4 :Program penggunaan fungsi void cetak2baris (void);//prototype main() { printf(Cetak Bela jar Bahasa C 2 baris\n); cetak2baris(); printf(Cetak Bela jar Bahasa C 2 baris lagi\n); cetak2baris(); } void cetak2baris (void) Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 7-47

{ printf(Belajar Bahasa C\n); printf(Belajar Bahasa C\n); } Fungsi prototipe dapat juga dileta kan di dalam program main seperti deklarasi tipe data lainnya, sehingga program diatas dapat dituliskan juga sbb: // Contoh 7.4 (2) :Program penggunaan fungsi main() { void cetak2baris (void); printf(Cetak Bela jar Bahasa C 2 baris\n); cetak2baris(); printf(Cetak Bela jar Bahasa C 2 baris lagi\n); cetak2baris(); } void cetak2baris (void) { printf(Belajar Bahasa C\n); printf(Belajar Bahasa C\n); } Deklarsi fungsi pada cara pertama disebut deklarasi global, artinya kita hanya perlu mendeklarasikan fungsi itu sekali saja tidak tergantung kepada jumla h fungsi yang memanggilnya. Misalnya jika ada fungsi lain selain fungsi main() ya ng mema nggil fungsi cetak2baris() ma ka kita tidak perlu mendeklarasikannya pada fungsi yang memanggilnya. Deklarasi pada cara kedua memerlukan pendeklarasian pada setiap fungsi ya ng mema nggil fungsi tersebut. Misalnya jika ada f ungsi lain yang juga mema nggil fungsi cetak2baris() ma ka kita perlu mendeklarasikan fungsi cetak2baris() itu didalam fungsi yang memanggilnya. Fun gsi den gan Parameter Berbeda dengan fungsi ta npa parameter, pada fungsi denga n parameter harus ada parameter y ang digunaka n beserta tipenya. Misalkan pada kasus untuk mencetak 2 baris Belajar Ba hasa C pada contoh 7.4 diatas, kita ha nya dapat mela kukan menceta k 2 baris Belajar Bahasa C pada setiap memanggil fungsi. Jika kita ingin menceta k Belajar Bahasa C dengan jumlah baris yang berbeda sesuai dengan kebutuhan setiap kita memanggil fungsi, ma ka kita dapat mela kukannya dengan memasukan parameter int n sebagai penghitung jumlah baris ya ng harus diceta k, sehingga fungsi yang harus dipakai akan memiliki bentuk : void cetaknbaris (int n) // Fungsi mencetak n baris Belajar Bahasa C pada output { int i; // nariabel local for (i = 0; i < n; i++) // loop n kali printf(Belajar Bahasa C\n); } Seperti fungsi sebelumnya, fungsi diatas tidak me-return nilai sehingga dig una kan tipe fungsi void, namun pada kasus sekarang ada parameter int n yang a kan menentukan jumlah baris Belajar Bahasa C yang harus diceta k. Di dalam body fungsi ada variabel lokal i. Variabel lokal yang ada pada body fungsi dapat mengg unaka n nama identifier yang sama dengan variabel lain ditempat yang lain. Perubahan nilai di lokal variabel i tidak akan mempengaruhi variabel i di tempat lain. Sebaliknya Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 7-48 perubahan variabel i di tempat lain tidak a kan mempengaruhi nilai d i lokal variabel i. Cara pemanggilan fungsi diatas, sama dengan conto h sebelumnya hanya diberika n parameter integer n saja. Parameter yang diberikan oleh program pada fungsi disebut argumen . // Contoh 7.5 :Program penggunaan fungsi memakai parameter #include <stdio.h> void cetaknbaris (void);//prototype main() { printf(Cetak Bela jar Bahasa C 1 baris\n); cetaknbaris(1);//1 adalah argumen printf(Cetak Bela jar Bahasa C 3 baris lagi\n); cetaknbaris(3); } void cetaknbaris (int n) // Fungsi mencetak n baris Belajar Bahasa C pada output { int i; // variabel local for (i = 0; i < n; i++) // loop n kali printf(Belajar Bahasa C\n); } Argumen yang diberikan ketika mema nggil fungsi harus sama dengan tipe pa rameter pada definisi fungsi, jika tida k maka a kan terjadi error. Misalnya pada co ntoh 7.5 diatas jika kita panggil dengan perintah : cetaknbaris(3. 0); Aka n menghasilkan error karena berbeda tipe parameter yang diberikan. Co nto h lain dari fungsi yang tidak mengembalikan nilai tapi memerluka n parameter adalah sbb: // Contoh 7.6 :Program penggunaan fungsi memakai parameter /* MAKSIMUM: Sebuah fungsi yang mencetak harga maksimum dari tiga buah bilangan bulat. */ #include <stdio.h> main() { int i, j, k; void maks(int x, int y, int z); //fungsi prototipe printf (Masukan tiga buah bilangan integer: ); scanf(%d %d %d ,&i,&j, &k); maks(i,j,k); } void maks(int x, int y, int z) //definisi fungsi { if (y>x) x=y; if (z>x) x=z; printf (Harga maksimum dan ketiga bilangan itu: %d \n, x); }

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 7-49

Fun gsi yang Mengemba likan Nilai Salah satu keg unaan dari fungsi adalah kemampua nnya untuk meng hasilka n suatu nilai. Dalam kasus fungsi yang mengembalika n nilai, tipe fungsi merupaka n tipe nilai yang a kan diberikan oleh fungsi. Misalnya pada conto h 7.1, yang menghitung jarak titik koordinat ke p usat, kita dapat menjadikan program tersebut menjadi fungsi seperti contoh dibawa h ini : float jarak( float x, float y) // Returns jarak koordinat (x, y) dari ttk pusat { float jarak; // variable lokal jarak = sqrt(x * x + y * y); return jarak; } Prototipe fungsi untuk fungsi diatas adalah sbb: float jarak(float x, float y); // function prototype Sebenarnya kita dapat juga menghilangka n nama-narna parameter di dalam fungsi seperti float jarak(float, float); // function prototype Tetapi kita lebih baik menuliska n na ma-na ma itu, pertama, mareka mung kin bermanfaat untuk tujuan-tujua n dokumentasi, dan kedua, kompiler dapat menggunakan na ma -na ma itu untuk tujuan error messages. Penggunaan jarak sebagai variabel sementara untuk menyimpan hasil perhitungan tidak penting karena untuk mengembalikan nilai kita bisa langsung melakuka n perintah : return sqrt(x * x + y * y); Ketika fungsi di pa nggil, parameter formal x dan y diganti oleh argumen tipe float dala m urutan yang sama. Karena fungsi mengembalikan nilai ma ka fungsi dapat diguna kan dalam ekspresi. Berikut ini contoh penggunaan fungsi diatas : //Contoh 7.7 : Fungsi yang mengembalikan nilai tipe float #include<stdio.h> float jarak(float x, float y); // prototipe fungsi main() { float a, b, c, d, x, y; a = 3.0, b = 4.4, c = 5.1, d = 2.6; x = jarak(a, b); y = jarak(c, d); printf (jarak ttk (3.0,4.4) ke ttk pusat = %f \n, x); printf(jarak ttk (5.1,2.6) ke ttk pusat = %f \n, y); } float jarak(float x, float y) // Returns jarak koordinat (x, y) dari ttk pusat { float jarak; // variable lokal jarak = sqrt(x * x + y * y); return jarak; }

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 7-50 Satu fungsi bisa memiliki beberapa pernyataan return. Misalnya conto h-co ntoh program berikut ini : //Contoh 7.8 : Fungsi menghitung akar #include<stdio.h> #include<math.h> // untuk memanggil fungsi library matema tik. float akar2(float x); main() { float x, hasil; char jawab; do { printf(Masuka n bil. Riil untuk dihitung akarnya : ); scanf(%f, &x); hasil = akar2(x); printf(\nAkar dari %f = %f, x. hasil); printf(\nLakuka n perhitungan lagi ? (y/n) ); scanf(%c, &ja wab); }while ((jawab=='Y')||(jawab=='y')); return 0; } float akar2(float x) // fungsi menghitung untuk akar kuadrat x. //Jika x < 0, hasilnya = 0. { const float toleransi = 1.0e-7; // 7 digit dibelakang koma float x1, x2; //variabel lokal if (x <= 0.0) return 0.0; // untuk kasus <= 0 else { x1 = x; //pendekatan pertama x2 = 0.5 * (x1 + x / x1); // pendekatan yang lebih baik while (fabs((x1-x2)/x2) > toleransi) //fabs: fungsi untuk nilai absolut { x1 = x2; x2 = 0.5 * (x1 + x / x1); } return x2; } } // akhir dari akar2 //Contoh 7.9 : Program menghitung x power n #include<stdio.h> #include<math.h> float pangkat(float x, int n); main() { float x, y; int n; char jawab='y'; while((jawab=='Y')||(jawab=='y'))

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 7-51

{ printf (Masukan bilangan riil dan integer : ); scanf (%f&d, &x, &n); y = pangkat(x, n); printf (\nHarga %f pangkat %d = %f , x, n, y); printf (\nLakukan perhitungan lagi ? (y/n) ); scanf (%c, &jawab); } return 0; } float pangkat(float x, int n) { float hasil = 1.0; int absn; int i; if ( n == 0) return 1.0; else { absn = int(fabs(n)); for (i = 1; i <= absn; i++) hasil*=x; if (n < 0) return 1.0; // hasil; else return hasil; } } // end of power Fungsi yang mengembalikan suatu harga dapat pula tidak memiliki parameter, misalnya seperti contoh dibawa h ini : //Contoh 7.10 : Menggunakan sebuah fungsi tanpa parameter #include<stdio.h> double readreal(void); main() { double xx; float x; printf (\nMasukan sebuah bilanga n riil : ); xx = readreal(); printf (Masukan lagi bilanga n riil lainnya: ); x = readreal(); printf (Bilangan berikut ini tela h dibaca : %f %f , xx , x); } double readreal(void) { double x; char ch; while(!(scanf(%1f, &x))) Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 7-52 { do ch = getchar(); while (ch != \n'); printf (\nTida k benar. Masukan sebuah bilangan:\n ) ; } return x; } Varia bel lokal, Globa l dan Scope Operator Variabel-variabel yang kita guna kan dalam sebuah fungsi dapat tersifat lokal ma upun global. Sebuah variabel bersifat lokal jika hanya dideklarasikan dan digunakan di dalam fungsi tersebut. Sebagai pegangan umum, variabel selalu loka l kecuali ji ka keadaan menuntut lainnya. Sedang kan variabel global selalu harus dideklarasikan. Berikut ini adalah contoh sederhana yang menggambarkan hal tersebut //Contoh 7.11 : variabel global dan lokal #include<stdio.h> int i; //deklarasi i sbg variabel global void print_i(); // fungsi prototipe main() { i = 123; //tdk perlu deklarasi int i, krn i adalah var global print_i(); } void print_i() { printf(%d \n, i); } Karena kita tela h mendefinisikan i sebelum fungsi print_i da n main, maka kita dapa t menggunakannya di kedua fungsi itu. C++ memung kinka n kita untuk mengguna kan sebuah variabel global bahkan di dalam sebuah fungsi di mana sua tu variabel lain dengan nama yang sama didefinisikan. Kita dapat memberika n indikasi bahwa yang dimaksud adalah variabel global dengan cara menuliska n scoperesolution-operator :: di depan nama variabel seperti yang diberikan dalam conto h berikut ini: //Contoh 7.12 : Penggunaan scope-resolution-operator #include<iostream.h> int i=l; //global variabel main() { int i=2; //lokal variabel cout<< ::i <<endl; // Output: 1 (variabel global) cout<< i <<ends; // Output: 2 (variabel lokal) } Titik dua sebanyak dua kali :: juga akan diguna kan didalam kelas, seperti yang akan ditemui nanti pada modul-modul selanjutnya. Penggunaan global variabel harus hati-ha ti karena semua fungsi yang memanggilnya dapat merubah harganya sehingga dapat menjadi sumber kesalahan ya ng susah dilacak. Misalnya perhatikan contoh dibawah ini : //Contoh 7.13 : Perubahan harga global variabel #include<stdio.h> int i=3; //global variabel Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 7-53

void fungsi(); int main() { printf(%d \n, i); // Output: 1 (i global) i+=2; printf(%d \n, i);// Outp ut: 1 (stl expresi dr main) fungsi (); printf(%d \n, i);// Outp ut: 2 (stl ekspresi dari fungsi) return 0; } void fungsi() { i*=5; } Pass by Va lue, Pass by Parameter dan Pass by Address Sampai saat ini parameter-parameter fungsi dapat dianggap sebagai variabel variabel lokal yang memperoleh harga awal dari argumen-argumennya. Prinsip ini tida k memung kinka n kita untuk, misalnya. menuliskan sebuah fungsi yang menukarkan harga-harga dua buah variabel yang dilalukan via argumen-argumennya. Misalnya jika kita coba hal itu dengan mengguna kan cara sebagai berikut ini: void tukar_value(int x, int y) // Pass by value { int temp = x; x = y; y= temp; } Jika kita panggil fungsi dengan pernya taan : tukar_value(i, j) Harga integer i dan j tidak akan tertukar, meskipun di dalam fungsi harga -harga x dan y dipertukarka n, tetapi argumen-argumen i dan j ha nya digunaka n satu kali saja, yaitu untuk memberi harga (value) awal parameter-parameter x dan y. Setelah pertukaran itu, harga-harga baru x dan y tidak disampaikan ke i dan j lagi. Pemberian harga parameter dari i dan j ke parameter x dan y pada fungsi diatas disebut pass by value. Untuk melakuka n parameter seperti yang diinginkan pada program diatas dapat dilakuka n dengan menggunaka n reference ( pass by referenc e) atau dengan menggunakan alama t (pass by address). void tukar_reference(int*x, int*y) // Pass by reference { int temp = *x; *x = *y; *y= temp; } Perhatikan pengg unaan operator pointer * pada fungsi tukar_reference(int *x, int *y). *x dan *y merupakan pointer yang menunjuk pada variabel asalnya. Perubahan pada isi pointer akan merubah pula variabel asalnya, sehingga ketika pernyataan tukar_reference(&i,&j) dieksekusi ma ka variabel *x sinonim dengan i dan variabel *y sino nim dengan j. Perubahan haraga *x dan *y akan mer ubah harga i dan j. Contoh berikut ini lebih memperjelas mengenai konsep reference parameters atau reference variables:

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 7-54 //Contoh 7.14 : Contoh penggunaan sebuah variabel acuan . #include <stdio. h> main() { int i, &x =i; //&x reference dari variabel i i = 2; x*= 100; //perubahan pada I atau x akan merubah harga keduanya printf (Harga i sekarang adalah: %d\n, i); printf (Denga n menggunaka n x diperoleh i = %d\n, x); } //Contoh 7.14 : Contoh penggunaan sebuah variabel acuan. #include <stdio.h> main() { int *i, x; i = &x; //i menunjuk ke x x = 2; //isi alamat yg ditunjuk i yaitu x dgn 2 *i *= 100; //perubaha n x akan merubah harga *i juga printf ("Harga x sekarang adalah: %d\n", x); printf ("Dengan mengg una kan *i diperoleh x = %d\n", *i); } Yang paling menarik untuk disimak dari program ini adalah bahwa x *= 100 yang sebe narnya adalah mengalikan *i dengan 100. Output dari program ini adalah : Harga x sekarang adalah: 200. Dengan menggunakan *i diperoleh x = 200. Dalam pembahasan di atas kita menemui sebua h operator unary: & da n * yang bersifat inversi satu terhadap lainnya yaitu: OPERATOR & * ARTI Alamat dari Isi dari

Alamat adalah sebuah b ilangan yang secara permanen dinyata kan sebagai atau diasosiasikan dengan sebuah lokasi memori. Operator * dikenal dengan nama pointer yaitu tipe variabel khusus yang berisi alamat memori. Pointer akan dibahas lebih la njut pada bagian berikutnya. Karena * merupakan inverse dari & maka ekspresi *&i tidak lebih dan sekedar suatu cara yang berlebihan untuk menulis kan i. Pada fungsi tukar_reference, nilai-nilai dari x dan y adalah alamat-alamat dan suatu lokasi tertentu, serta *x dan *y menya takan isi dari lokasi-lokasi itu. Karena kita berhub unga n dengan alamat dart variabel int maka *x dan *y mempunyai tipe int sehingga dideklarasikan sebagai: int *x, int *y Conto h program penggunaan ketiga fungsi diatas adalah sbb : //Contoh 7.15 :Pass by reference #include<stdio.h> main() { void tukar_value(int x, int y); void tukar_reference(int *x, int *y);

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 7-55

int i = 2, j = 7; printf (Harga i = %d Harga j = %d\n, i, j); tukar _value(i, j); printf (Harga setelah tukar_address\n); printf (Harga i = %d Harga j = %d\n, i, j); tukar _reference(&i, &j); printf (Harga setelah tukar_reference\n); printf (Harga i = %d Harga j = %d\n, i, j); } void tukar_value(int x, int y) // Pass by value { int temp = x; x = y; y= temp; } void tukar_reference(int*x, int*y) // Pass by address { int temp = *x; *x = *y; *y= temp; } Fun ction Overloa din g Misalkan kita memerluka n fungsi untuk merubah temperatur dari Fahrenheit ke Celsius. voidUbahFToC(float f, float&c); //Deklarasi Prototype voidUbahFToC(float f, float&c) //Definisi fungsi { c = (f - 32.) * 5./9.; } Sekarang misalkan kita harus juga meruba h temperatur untuk tipe data integer. Mung kin kita masih dapat mendefinisikan fungsi dengan na ma yang berbeda, misalnya : void fUbahFToC(float f, float &c); void iUbahFToC(int f, int &c); Namun jika sekarang perlu juga menghitung untuk tipe data misalkan double, short serta long, maka kita harus mendefinisika n fungsi sbb: void void void void void fUbahFToC(float f, float &c); iUbahFToC(int f, int &c); dUbahFToC(double f, double &c); lUbahFToC(long f, long &c); sUbahFToC(short f, short &c);

Nama-nama diatas mungkin akan sulit untuk diingat sehingga sangatlah membing ung kan karena fungsi yang dipakai semuanya melakuka n penghitungan yang sama hanya ber beda tipe datanya saja. Beruntung sekali fungsi overloading memberika n alternatif yang lebih baik. Untuk fungsi yang hanya berbeda jumlah dan tipe data nya saja dapat mengg una kan nama ya ng sama. Fungsi ya ng ma na yang akan dikerjaka n akan dipilih oleh kompiler sesuai dengan tipe dan jumlah parameter yang diberikan. Untuk kasus diatas hanya tipe parameter saja yang berbeda, pemilihan fungsi akan dilakuka n oleh kompiler berdasarkan tipe parameter yang diberikan kepada fungsi. Fungsi overloading hanya dapat dijalanka n di C++, tidak untuk di C.

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 7-56 Solusi untuk permasalahan perubahan temperatur dari Fa hrenheit ke Celsius dapat dila kukan dengan menggunaka n program sbb: //Contoh 7.16 : Penggunaan fungsi overloading #include <iostream.h> void UbahFToC(double f, double &c); void UbahFToC(float f, float &c); void UbahFToC(int f, int&c); int main() { double df, dc; float ff, fc; int i_f,i_c; df = 75.0; ff = 75.0; i_f = 75; printf (Memanggil versi double\n); UbahFToC(df,dc); printf(%lf == %lf\n \n, df, dc); printf (Memanggil versi float \n); UbahFToC(ff,fc); printf(%f == %f\n \n, ff, fc); printf (Memanggil versi integer\n); UbahFToC(i_f,i_c); printf(%d == %d\n \n, i_f, i_c); } void UbahFToC(double f, double &c) { printf (Dalam versi double\n); c = (f - 32.0) * 5. / 9.; } void UbahFToC(float f, float &c) { printf (Dalam versi float\n); c = (f - 32.0) * 5. / 9.; } void UbahFToC(int f, int&c) { printf (Dalam versi integer\n); c = (f - 32) * 5. / 9.; }

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 7-57

Fun gsi Li brary S tan da rd Beberapa commands di dalam C/C++ sebenarnya bukan comma nds tetapi fungsi. Misalnya printf dan scanf adalah fungsi untuk outp ut dan input, selain itu banyak fungsi-fungsi lainnya yang sudah disediakan oleh kompiler sebagai fungsi librari standar, diantaranya adalah : stdio.h: fungsi I/O: getchar() meng hasilkan karakter berikunya ya ng diketikan pada keyboard. putchar() menampilkan karakter tunggal pada printf() seperti yg telah dijelaska n sebelumnya scanf() seperti yg telah dijelaskan sebelumnya string.h: fungsi String : strcat() menggabung kan str2 ke str1 strcmp() membandingka n dua strings strcpy() mengcopy isi str2 ke str1 ctype.h: fungsi karakter : isdigit() meng hasilka nnon-0 jika arg adalahangka 0 sampai 9 isalpha() menghasilkan no n-0 jika arg adalahhuruf alphabet isalnum()menghasilkan non-0 jika arg adalahhuruf atau angka islower() menghasilkan no n-0 jika arg adalahhuruf kecil isupper() menghasilka n non-0 jika arg adalahhuruf besar math.h: fungsi Mathema tik : acos() menghasilkan arc cosine dari arg asin()meng hasilka n arc sine dariarg atan()menghasilkan arc tangent dariarg cos() menghasilka n cosine dariarg exp() menghasilkan natural logarithim e fabs() menghasilkan absolute value darinum sqrt() menghasilka n square root darinum time.h: fungsi waktu dan tanggal : time() menghasilkan waktukalender sistem difftime() meng hasilka n perbedaan dalam detik antara dua waktu clock() menghasilkan jumlah siklus sistem clock sejak program dijalankan stdlib.h: fungsi Miscellaneous functions malloc() menyediaka n dynamic memory allocation rand() menghasilka n bilangan random srand() digunakan untuk menset titik awal rand()

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 8-58 Ba b 8. ARRAY, POINT ER DAN STRIN G Array dan Aritmatika Alamat Jika program kita memerlukan 5 buah data dari tipe data yang sama misalkan integer, maka kita dapat mendeklarasikan lima variabel untuk masing-masing da ta tersebut. Na mun lain cerita nya jika data yang kita perlukan adalah 100 bua h data integer. Kita tidak mungkin mendeklarasikan 100 buah variabel bertipe integer. Untuk mengatasi sekump ulan data ya ng memiliki tipe da ta yang sama, maka kita dapat mengg una kan array. Array adalah struktur data yang digunaka n untuk menyimpa n sekumpula n tipe data sejenis secara sekuensial d i dalam memori. Array satu dimensi dapat dib uat dengan menggunaka n deklarasi array seperti dibawah ini; <tipe data><nama variable>[ukuran] dimana ukuran merupa kan jumlah data ya ng dapat disimpan pada array, misalnya int data[100]; dengan dekalarasi ini kita memiliki variable-variabel: data [0], data [1], , data [99] Konstanta 100 dalam deklarasi itu menyata kan bahwa terdapat 100 elemen array, tetapi dimulai dari data[0] sehingga elemen terakhir adalah data [99] b uka n data[100]. Dala m hal ini tipe data elemen array itu adalah integer. Selain denga n mengguna kan bila ngan bulat, elemen array dapat juga diakses melalui sebua h ekspresi yang hasilnya bilangan b ulat, seperti dalam bentuk di bawah ini: k = 50 * a[3*i + j/2] 1; dengan cata tan bahwa 3*i+j/2harus leb ih kecil dari 100 dan tidak negatif. Nilai yang berada dalam tanda kurung disebut subscript dan harus mempunyai tipe integer tidak peduli apapun tipe data elemen array-nya.Dalam deklarasi itu dimensi 100 hanya sekedar contoh tetapi kita harus senantiasa menuliska n dimensi array sebagai kons tanta. Jika kita mengisika n data pada array melebihi dimensi yang dideklarasikan ma ka akan terjadi error. Array dapat diinisialisasi ketika deklarasi atau setelah deklarasi, seperti pada contoh dibawah ini int data_int[3] = {2 ,4, 6}; //inisialisasi bersamaan dengan deklarsi atau int data_int[5]; // deklarsi data_int[0] = 2; //inisialisasi data_int[ 1] = 4; data_int[ 2] = 5;

Akses data elemen array dapat dilakuka n dengan mema nggil array bes erta indek elemen da ta yang ingin dia kses, misalnya untuk mengakses nilai pada elemen array data_int ke 2 dan memberikannya ke variable a, maka kita tuliskan dalam bentuk a = data_int[2] Seperti sudah diba has sebelumnya ekspresi &z, merupaka n alamat dari variabel z. Selain ekspresi tersebut, terdapat jenis ekspresi lainnya yang jika dievaluasi juga meng hasilka n alama t. Salah satunya adalah nama dari array, ditulis ta npa kurung. Alama t ya ng diperoleh dengan cara ini adalah elemen pertama dari array tersebut. Sebagai contoh, setelah deklarasi ini: doubledata[50]; kita dapat menggunaka n data, ta npa diikuti dengan [..], sebagai ringkasan dari &(data[0]), yang dapat dituliskan sebagai &data[0]. Ekspresi lainnya yang harganya juga merupa kan alamat adalah data + i, di mana i adalah bilangan bula t, Dalam hal ini alamat itu adalah data[i] dan denga n demikian kita mempunyai ekivalensi seperti berikut ini:

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 8-59

data= &data[0] data + i =&data[i] Perhatikan sebuah int array sebagai berikut: charstring[10]; Di sini alamat-ala mat string dan string + i terpisah sejauh bilangan bulat i. Maka ekivalensi seperti berikut ini: string +i = &string[i]

juga berlaku untuk setiap array. Kedua baris berikut ini juga ekivalen: for (i=0; i<10; i++) printf( %7d , string[i]); for (i=0; i<10; i++) printf( %7d , *[string+i] ); Juga dimungkinkan untuk mengurangi sebuah bilangan bula t dan sebuah alamat seperti contoh berikut ini: &string[5] - 3 Ingat ba hwa &string[9] dapat ditulis kan p ula sebagai string + 5 maka pengurangan di a tas akan menghasilkan s tring + 2 yang dapat dituliska n setagai &s tring[2]. Kita dapat juga mengurang kan sebuah alamat dari alamat yang 1ainnya. Jadi misalnya &string[7] - &string[5] = (string + 7) - (string + 5) hasilnya adalah 2. Kita memp unyai akses ke semua elemen array jika kita tahu alamat dari elemen perta manya. Oleh karena itulah dalam C tidak diperluka n mekanisme parameter passing untuk array. Perhatikan contoh sebuah program berikut ini: /* Contoh 8.1 : Mencari elemen terkecil dan sebuah arraybilangan bulat. */ #include <stdio. h> main() { int data[10], minimum(int *a, int n), i; printf (Masukan 10 bila ngin bulat: \n); for (i=0; i<10; i++) scanf(%d,&data[i]); printf(\nHarga minimum dari bilangan itu %d \n, minimum(data, 10)); } int minimum(int *a, int n) { int small, i; small = *a; for (i=1; i<n; i++) if (*(a+i) <small) small = *(a+i); return small; } Dari pembahasan sebelumnya kita tahu bahwa int *a berarti bahwa a menyataka n alamat sebuah bilangan bula t. Argumennya, yaitu table, mer upakan alamat dari table[0], yang memberi imp likasi bahwa kedua panggilan di bawah ini adalah ekivalen: minimum(&table[0], 10) minimum(table, 10) Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 8-60 Dari contoh 8.1 fungsi minimum di atas jelas bahwa aritmatika ala mat telah digunakan. Kita dapat saja menuliskan kembali program di atas dengan cara konvensio nal sehingga mungkin lebih mudah dibaca karena kebiasaan mengg una kan no tasi array konvensio nal. Perha tika n p enulisan di bawah ini: int minimum(int *a, int n) { int small, small = a[0]; for (i=l; i<n; i++) if (a[i] < small) small = a[i]; return small; } Kita bahka n dapat lebih menekankan lagi sifat alami array dari a dengan mengganti baris pertama dari fungsi itu dengan: int minimum(int a[], int n) Perhatikan bahwa panja ngnya array dikosong kan dalam a[]. Jika panjang itu kita tuliskan maka ia jelas sekedar merupakan konsta nta dan dengan demikia n fungsi itu menjadi tidak bersifat umum dan kurang elegan. Arrays Multi dimensi Misalnya kita diminta untuk melakuka n penjumlaha n matrik sbb :
1 A 3 4 2 , B 3 9 5 6 ,C A B 3 4 3 9 1 2 5 6

Kalau hanya menggunaka n array satu demensi saja kita tidak bisa mengerja kan penjumlahanmatrikmatrik d ua dimensi diatas, untuk itu harus diguna kan array multidimensi yang pema kaiannya diijinkan oleh C. Array multidimensi misalnya dalam kasus diatas dapat dilakukan dengan definisi sbb: //Contoh 8.2 : Penjumlahan matrik #include <stdio.h> main() { int A[2][2] = {{1,2},{3,4}};//inisialisasi matrik A int B[2][2]; int C[2][2]; int i,j; for(i=0;i<2;i++) //inisialisasi matrik B dari keyboard for(j=0;j<2;j++) { printf("\nB\(%d,%d\) = ",i,j); scanf(%d% ,B[i][j]); } printf(\n); //penjumla han matrik for(i=0;i<2;i++) for(j=0;j<2;j++) C[i][j]= A[i][j]+ B[i][j];

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 8-61

//Menampilkan matrik C printf(Matrik C =\n); for(i=0;i<2;i++) { for(j=0;j<2;j++) printf(%d \n, C[i][j]); } } Pointer Pointer adalah variable yang menyimpan alama t pada C. Pointer memberikan programmer power dan utilitas yang besar untuk menga kses dan memanipulasi data dengan cara yang tidak ditemui pada bahasa pemrograman lainnya. Pointer juga sangat berguna untuk passing parameter kedalam fungsi yang memungkinkan fungsi untuk memodifikasi dan mengembalika n nilai pada routine yang memanggilnya.Tapi jika penggunaannya tidak benar, pointer dapat menjadi sumber kesalahan program dan frustasi programmer. Ketika program dieksekusi, seluruh variabel disimpan dalam memori yang masing -masing memiliki alamat yang unik.Variabel dan alamat memori yang diasosiasikannya berisi nilai data. Misalnya int hitung = 2; Harga 2 disimpan didalam memori dan dapat diakses dengan menggunaka n nama variabel hitung. Pointer merupakan tipe variabel spesial yang menyimpan alamat memori bukan isi dari memori. Seperti juga pada variabel lainnya, nilai alamat ya ng disimpan pada pointer akan termodifikasi jika variabel pointer dimanipulasi. Biasanya alamat yang disimpa n pada pointer adalah alamat variabel lain, dan pointer biasa di deklarasikan serta diinisialisasi sebagai berikut : int *ptr; ptr = &count // deklarasi //inisialisasi simpan alamat variabel count di dlm ptr

Untuk meliha t harga dari lokasi memori yang d isimpan pada pointer, pointer harus d i- dereference dengan mengg unaka n operator * int total; total = *ptr; // Nilai dari alamat yang disimpan di ptr diberikan ke total Jika kita mendeklarasikan : int *p maka p mer upakan sebua h variabel pointer, atau pointer saja untuk singkatnya. Kita mengguna kan pointer untuk menyimpan alamat sebagaimana halnya kita menggunaka n variabel aritmatika untuk menyimparn angka. Pointer dapat digunakan sebagai parameter seperti dalam contoh ini: int minimum(int *a, int n) maupun sebagai variabel pada umumnya, misalnya pada program berikut ini: int minimum(int *a, int n) { int small, *p, small = *a; for (p = a+1; p < a+n; p++) if (*p < small) small = *p; return small; } Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 8-62 Harga dari p adalah sebuah alamat dan isinya dinyataka n oleh *p. Pada mulanya p diberi harga a+1 yaitu alamat dari a[1]. Di sini kita asumsikan bahama fungsi minimum dipanggil dengan menggunaka n minimum(table, 10) Dengan menamba h p kita bergerak ke elemen berikutnya, sampai penambaha n itu menyebabkan p sama dengan a + n, maka p sama dengan alamat lokasi memori elemen terakhir yaitu table[n-1]. Hal lain yang perlu disampaika n di sini adalah bahwa s etelah mendeklarasikan sebua h pointer, misal p, kita tida k boleh menggunaka n *p sebelum memberika n sebuah harga pada p. Jika kita pa ksakan maka ada kemung kinan aka n terjadi kesalaha n ya ng amat serius. Program berikut ini memberikan contoh mengenai kesalahan tersebut: main() { char *p, ch; *p = A; } Kesalahan ini amat serius harga p yang tidak terdefinisi digunaka n dan dipahami sehagai suatu alamat dan selanjutnya isi dari alamat tersebut diubah. Hal ini mungkin aka n menyebabkan hilang nya sejumlah informasi dalam memori. Dalam co ntoh ini sangat mudah untuk mengoreksinya yaitu dengan memasukka n pernyataan koreksi sehingga program menjadi sebagai berikut: main() { char *p, ch; p = &ch; *p = A' }

Kita juga dapat mengguna kan sebuah pointer sebagai sebuah array tetapi sekali lagi hal ini hanya mungkin setelah kita memberinya sebuah nilai yang tepat. Per hatikan contoh berikut ini: main() { char s[10], *p, p = s; p[9] = A'; } Dalam program di atas deklarasi s mengalo kasikan 10 b ytes untuknya.Sebag ai kontras hanya tersedia sebuah lokasi dalam pendeklarasian p, dan nilai a walnya tida k terdefinisi. Dengan mengeksekusi pernyataan p = s; alamat s[0] diberikan ke p, dan setelah itu ma ka kita dapat mengg una kan p[0], p[1], ,p[9] sebagaimana halnya kita me ngguna kan s[0], s[l],.. s[9] ata u dengan kata lain variabel variabel p[i] dan s[i] menempati lokasi memori ya ng sama. Jika pernyataan p = s; dihilang kan ma ka pernyataan p[9] = `A'; menjadi tidak benar. Kita juga akan sering merasa perlu untuk mempunyai seb ua h pointer yang umum ya ng dapat menyeb utkan alama t setiap objek tanpa peduli dengan tipenya. Misal kita lihat pernataan berikut ini: int i float riil int *p_int float *p_flaot

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 8-63

Karena alamat sebuah integer memp unyai format internal yang sama dengan alamat float maka kita boleh saja menduga bahwa pernyataan berikut ini dibolehkan: p_float = &i; // SALAH!! Ekspresi &i mempunyai tipe pointer-to-int sementara itu p_float mempunyai tipe pointer-tofloat.Kedua tipe tida klah bersesuaian yang berarti pernyataa n di a tas tida k sah. Tetapi hal ini dapat kita koreksi dengan mengg una kan type castsebagai berikut: p_float = (float *)&i Perhatikan kehadiran ta nda * dalam ( float *). Hal itu menya takan bahwa &i aka n dikonversikan menjadi tipe pointer-to -float, bukan ke tipe float. Pointer void merupa kan salah satu tipe pointer khus us dimana kita dapat menghubungkan tipe pointer ini ke segala jenis tipe data. Pointer void dideklarasikan sebagai berikut: void *nama _pointer misalkan jika pada contoh diatas kita ta mbahka n baris void *p_void maka pernyataan berikut ini diijinkan: p_void = &i; // Dari pointer-to-int ke pointer-to-void p_void = &riil; // Dari pointer-to-float ke pointer-to-void p_void = (float *)p_void; //Dari pointer-to-void ke pointer-to-float String Kita telah mengenal dengan ide bahwa sebuah alama t dapat mempunyai tiga bentuk: Sebuah ekspresi yang berawal dengan operator &, seperti &table[0]. Nama sebuah array seperti table. Sebuah pointer, seperti p.

Ada lagi sebuah bentuk yang penting, ya ng juga meng hasilkan sebuah alama t: sebuah string, seperti ABC

Jika string ABC terjadi dalam sebuah program, ketiga karakter A'. `B' dan 'C' akan disimpa n di memory sebagaimana halnya sebuah array karakter disimpan. Oleh karena itu kita dapat menganggap ba hwa ABC sebagai sebua h array dari empat elemen char. Harga a ktual dari string ini adalah alamat karakter pertamanya dan tipenya adalah pointer -to-char. Dengan menggunaka n operator * pada objek yang mempunvai tipe seperti ini akan menghasilkan karakter yang membentuk isinya. Juga perlu diketa hui bahwa kita juga dapat mengguna kan aritmatika alamat terhadap string: *ABC *(ABC + 1) *(ABC + 2) *(ABC + 3) sama dengan A' sama dengan B' sama dengan 'C' sama dengan \0'

Seperti yang kita liha t tidak ha nya array yang dapat mempunyai subs cript tetapi juga pointers. Nama-nama array dan pointer mempunyai persamaan yaitu mareka mempunya i tipe pointer -to. (dimana dapat berupa semua tipe ) ata u dengan ka ta lain nilainya adalah alamat. Hal ini dapat digeneralisir untuk semua ekspresi dengan karakteristik seperti ini. Sebuah string merupakan salah satu conto h sehingga dapat ditulis kan scbagai berikut: ABC [0] ABC [1] sama dengan A' sama dengan B'

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 8-64 ABC [2] ABC [3] sama dengan 'C' sama dengan \0'

Hanya jika mengetahui bahwa ABC adalah alamat ma ka kita mengerti mengapa progam seperti di bawah ini bekerja: // Contoh 8.3 : Pointer - Penggunaan string #include <stdio.h> main() { char *p; p = ABC; printf(p); } Pertama, sungguh salah jika membaya ngkan bahwa pernyataa n pemberian harga dalam program diatas akan mengcopy karakter. Padahal hanya alamat awal dan barisan ABC yang diberikan ke p. Outp ut dari program di atas adalah ABC Sekarang kita dapat dengan muda h memb uktikan bahwa outp utnya seandainya saja printf (p) digantika n oleh salah satu dan panggilan berikut ini: printf(p+1); printf( ABC + 1); Operasi_ Operasi S tring Dengan menggunakan string.h yaitu melalui #include <string.h> maka string dapat diberikan pada sebuah array karakter seperti teriihat pada contoh berikut ini strcpy(s, ABC ) ; di mana strcpy merupa kan sebuah fungsi dengan d ua argumen yang dapat berupa semua ekspresi yang mempunyai tipe pointer-to-char. Dengan kata lain adalah ekspresi-ekspresi yang merupakan destinasi dan.sumber yang pada waktu mema nggilnya strcpy(destinasi, sumber); akan meng hasilka n alamat-ala mat. Program di bawah ini akan memberi gambaran, yang lebih jelas: // Contoh 8.4 : Penggunaan strcpy #include <stdio.h> #include <string.h> main() { char s[100] = Belajar Pemrograman , t[100]; strcpy(t, s); strcpy(t+8, Ba hasa C) ; printf (%s\n%s , s, t); } yang outp utnya adalah Belajar Pemrograman aka n berupa BC

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 8-65

Belajar Bahasa C. strcpy(t+8, Bahasa C) mengcopy Ba hasa C ke string t mulai dari posisi ke 8, yaitu setelah Belajar , sehingga string t me njadi Belajar Bahasa C. Pada kedua baris di bawah ini s merupaka n sebuah array dengan empat buah elemen, ini lebih dari cukup untuk memua tABC plus karakter null: char s[4] = ABC; char *p = DEF ; Selama inisialisasi keempat karakter (ABC + karakter null) dikopikan ke s, atau kita dapat juga menempa tka n karakter lainnya kedalam s asal panja ngnya 4.Tetapi hal ini berbeda dengan variabel pointer p. Di sini alama t DEF, b uka n ur utan karakter itu sendiri, ya ng dikopikan ke p (tidak ke *p). Kita dapat memisahka n baris terakhir itu menjadi sebuah deklarasi dan sebuah pemberian harga (assignment) sebagai berikut: char *p; p = DEF; Kita tidak dapat mela kukan hal ini pada s (kecuali dengan mengg unaka n strcpy). Hal lain yang pe rlu juga untuk diketahui adalah bahwa p tidak diba tasi hanya untuk array dengan empat elemen sebagaimana halnya s. Di p hanya sebuah alamat saja yang disimpa n dan oleh karena itu bisa saja kita menuliska n: p = ABCDEFGH ; Setelah melihat perbedaan-perbedaan antara s dan p, kita juga harus mengingat bahwa mareka juga meiniliki sejumlah kesamaan; sebagai contoh ekspresi-ekspresi di bawah ini juga sah: s[i] p[i] *(s+i) *(p+i) Meskipun strcpy merupaka n sebuah fungsi ya ng amat berguna, mengcopy segalanya dari sebuah sumber sampai ditemuinya karakter null tidak selalu yang kita inginkan. Sering kita hanya menginginkan beberapa bagian yang perlu dicopy. Hal seperti ini dapat kita lakuka n dengan menggunaka n strncpy. Fungsi ini mempunyai bentuk: strncpy(destinasi, sumber, n) yang aka n mengcopy n buah karakter dari sumber ke destinasi kecuali jika ditemui karakter null sebelum n karakter itu tercopy. Sebagai contoh: char s[100]; strcpy( Nama saya reni. ); kita dapat meagguna kan pernya taan: strncpy(s + 10, so , 2); yang akan menghasilkan perubahan sebagai berikut: Nama saya soni. Setelah mengcopy huruf-huruf s dan o jumla h karakter maksimum tercapai sehingga proses mengcopy dia khiri. Jika argumen terakhir lebih besar dari 2, maka tepat 3 karakter yang akan dicopy, yaitu s, o dan \n'. Hasil-hasil strcp y dan strncp y tidak terdefinisi jika destinasi da n sumbernya tumpang tindih.Sebagai conto h, jika kita menginginkan untuk memasukka n string Prof. di awal dari string yang disimpan di dalam s. char s[100] = Muhammad Ali ;

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 8-66 strcpy(s, Prof. ); jika perintah d iatas dijalankan maka a kan dihasilkan Prof. mmad Ali bukan Prof. Muhammad Aliseperti yang diinginkan, maka untuk itu kita harus menggunakan variabel temporer temp misalnya dengan menulis kan: strcpy(temp, s); // temp = Muhammad Ali strcpy(s, Prof. ); // s = Prof. strcpy(s + 6, temp); // s = Prof. Muhammad Ali Fungsi-fungsi memerlukan dikehendaki. Selain strcpy dan strncpy masih ada lagi beberapa fungsi yang ada di pustaka string.h yaitu : strlen untuk mencari panjang string strlwr untuk meng ubah semua karakter dalam string ke huruf kecil (lo wer case) strupr untuk meng ubah semua karakter dalam string ke huruf kecil (upper case) strcat untuk mena mbahka n string ke string lainnya strncat untuk mena mbahka n n buah karakter pertama sebuah string ke string lainnya strcmp untuk memba nding kan dua string strncmp untuk memba nding kan n bua h karakter pertama dari dua string strcp y nilai dan strncpy mengembalikan ala mat a wal ke destinasi. Kila sering tidak pengembalian ini, tetapi kita dapat me ngguna kannya jika memang

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 9-67

Ba b 9. STRUKT UR DAN UNI ON Struktur Untuk menyimpan sekelo mpak data kita dapat mengg una kan array, namun saya ng array hanya dapat menyimpan sekelo mpok data yang tipe datanya sama, jika tipe data berbeda tidak dapat d isimpan dalam array. Untuk menyimpan sekumpula n data yang dapat terdiri dari berbagai tipe kita dapat menggunaka n struktur. Pemahama n tenta ng struktur dapat membuka jalan untuk memahami ko nsep class dalam bahasa pemrograman berorientasi objek. Stuktur adalah tipe data yang dapat dibua t oleh programer yang dapat berisi kumpula n beberapa tipe data. Sehingga struktur dapat disebut pula sebagai kumpulan data. Struktur dideklarasikan dengan mengguna kan keyword struct, dengan sintak sbb : struct nama_struktur { daftar komponen variable }; Komponen variabel dalam struktur biasa disebut field atau member dari struktur. Misalnya kita ing in menyimpan da ta nama mahasiswa, nim serta kehadiran kuliah dalam suatu struktur. Hal itu dapat dilakukan dengan mendeklarsika n sebuah struktur, misalnya absensi, dengan variabel kompo nen nama, nim dan kehadiran seperti dibawah ini : struct absensi { char nama[30]; long nim; float kehadiran; //% kehadiran }; //jangan lupa diakhiri dengan tanda ; Setelah struktur dideklarasikan maka kita dapat mendeklarasikan variabel bertipe struktur tersebut, dengan sinta k sbb: struct nama_variabel; Misalnya kita memb uat variabel absensi untuk peserta kuliah Dasar Pemrograman struct absensi peserta1, peserta2; Deklarasi variabel ini dapat juga dilakukan bersamaan dengan deklarasi struktur : struct absensi { char nama[30]; long nim; float kehadiran; //% kehadiran } peserta1, peserta2; Conto h program pemakaian struktur dapat dilihat pada program dibawah ini. //Contoh 9.1: Struktur 1 #include<stdio.h> struct absensi { char nama[30]; Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 9-68 unsigned long nim; float kehadiran; //% kehadiran }; main() { //inisialisasi struktur struct absensi peserta1 = {Alpha , 13303100, 85}; struct absensi peserta2 = { Betha , 13303101, 80}; struct absensi peserta3; peserta3 = peserta2; //Menampilkan data printf (Absensi Kehadiran Kulia h Dasar Pemrograman\n); printf (1. %s %l %f\n, peserta1.nama, peserta1.nim, peserta1.kehadiran); printf (2. %s %l %f\n, peserta2.nama, peserta2.nim, peserta2.kehadiran); printf (3. %s %l %f\n, peserta3.nama, peserta3.nim, peserta3.kehadiran); } Pada contoh diatas terliha t bahwa untuk mengakses field yang ada pada struktur digunaka n opertor . seperti peserta1.kehadiran ya ng menga kses field kehadiran pada variabel peserta1. Pada contoh diatas juga terliha t ada assigment peserta3 = peserta2 hal ini ha nya bisa dilakukan pada struktur yang sama saja. Type Definition Salah satu konsep yang sering berhubungan dengan str uctures adalah konsep type definitions. Type definition digunaka n untuk mema kai tipe data ya ng ada dan memberinya nama baru. Tipe data yang dipakai dapat berupa tipe data sta ndar yang disediakan C, misalnya integer, float, da n char, atau tipe data yang dibuat programer misalnya struktur. Biasanya penamaa n type definitions mengguna kan huruf besar semua. Type definitions dideklarasikan dengan mengg una kan keyword typedef.Misalnya kita ingin mendefinisika n tipe int (integer) sebagai INTEGER : typedef int INTEGER Sehingga kita dapat mendeklarasikan variabel integer dalam bentuk : INTEGER x, y, z; yang ekivalen dengan int x, y, z;

Untuk struktur typedef dapat dideklarasikan bersamaan dengan deklarasi struktur atau terpisah : struct titik{ int x; int y; }; typedef struct titik TITIK; TITIK titik1, titik 2; typedef struct titik{ int x; int y; } TITIK; TITIK titik1, titik 2;

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 9-69

Struktur dalam Struktur Data struktur dapat dikelompoka n dalam struktur seperti pada contoh program berikut ini : //Contoh 9.2: Struktur dlm struktur #include<stdio.h> struct titik { int x; int y; }; typedef struct titik TITIK; struct segi_empa t { struct titik atas_kiri; struct titik bawah_ka nan; }; main() { TITIK titik1 = {1,5},titik2 = {5,1};

struct segi_empa t segi_empat1, segi_empat2 = {{2,7},{4,1}}; int xx1, xx2, yy1, yy2; segi_empat1. atas_kiri.x = titik1.x; segi_empat1. atas_kiri.y = titik1.y; segi_empat1.bawa h_kanan.x = titik2.x; segi_empat1.bawa h_kanan.x = titik2.y; xx1 yy1 xx2 yy2 = = = = titik2.x - titik1.x; titik1.y - titik2.y; segi_empat2.bawah_kanan.x - segi_empat2.atas_kiri.x; segi_empat2.atas_kiri.y - segi_empat2.bawah_ka nan.y;

printf (Luas segi empat 1 = %d\n, xx1*yy1); printf (Luas segi empat 2 = %d\n,xx2*yy2); } akan meng hasilka n ourtput Luas segi empat 1 = 16 Luas segi empat 2 = 12 Didalam struktur dimung kinka n mengg una kan array, misalnya pada contoh berikut ini. //Contoh 9.3: Struktur dengan array #include<stdio.h> struct absensi { char nama[30]; unsignedlong nim; float kehadiran; //% kehadiran };

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 9-70

main() { //inisialisasi struktur struct absensi peserta[3]; strcpy(peserta[0].na ma , Alpha ); peserta[0].nim = 13303100; peserta[0].kehadiran = 85; strcpy(peserta[0].na ma , Betha); peserta[1].nim = 13303101; peserta[1].kehadiran = 80; strcpy(peserta[0].na ma , Gamma); peserta[2].nim = 13303102; peserta[2].kehadiran = 95; //Menampilkan data printf (Absensi Kehadiran Kuliah Dasar Pemrograman\n); for(i=0;i<3;i++) { printf (%d. %s\t %l\t %f \% \n, i+1, peserta[i].nama, peserta[i].nim, peserta[i].kehadiran); } }

Union Union adalah sekumpulan data yang memiliki tipe data yang berbeda, sama seperti struct. Union dideklarasikan sebagai mana struct dideklarasikan, yaitu sebagai berikut Struktur dideklarasikan dengan mengguna kan keyword struct, dengan sintak sbb : union nama_union { daftar komponen variable }; Komponen variabel dalam union d isebut field ata u member dari union sama seperti dalam str uct. Misalnya kita memb uat harga laptop dalam rupiah dan US dolar. unionharga { int rupiah;//harga dlm rupiah float dollar; //harga dlm US dollar }; //jangan lupa diakhiri dengan tanda ; Setelah union dideklarasikan maka kita dapat mendeklarasikan variabel bertipe union tersebut, dengan sinta k yang sama seperti struct, yaitu sbb: union nama_variabel; Misalnya kita memb uat variable harga untuk netbook dan notebook

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 9-71

union harganetbook, notebook; Kita juga dapat menggabungka n deklarasi unio n beserta pembuatan variable secara bersamaan seperti pada contoh dibawah ini. union harga { int rupiah;//harga dlm rupiah float dollar; //harga dlm US dollar }netbook, no tebook; Member dari union diakses dengan cara yang sama seperti struct, yaitu menggunakan operator '.' untuk variabel unio n atau operator'->' untuk pointer umion variabel _union.member atau pointer_union->member Jadi apa bedanya antara union dan struct. Perbedaan antara unio n dan struct terdapat pada fungsinya dan tujuannya. Untuk melihat bedanya mari kita liha t deklarasi unio n dan struct berikut ini. struct data { float data_float; int data_int; char data_char; }data1; union data { float data_float; int data_int; char data_char; }data1;

Ketika str uct dideklarasikan, ma ka struct aka n memesan memori 4 byte untuk float, 2 byte untuk integer dan 1 b yte untuk char sehingga to tal 7 byte. Namun union ketika dideklarasikan hanya memesan sebesar ukuran tipe data terbesar yang diperluka n yaitu 4 b yte untuk float, karena tipe data character dan integer dapat masuk ke tipe data float. Perbedaan ini dikarenaka n perbedaan fungsi unio n dan s truct dalam mengelola data. Jika ketiga tipe data pada contoh diatas ada kemung kinan diakses pada waktu yang bersamaan, maka gunaka nlah struct, namun jika hanya satu jenis tipe data saja yang diakses pada suatu wa ktu maka cukup g una kan union saja. Sehingga tipe data yang tersimpan di unio n adalah tipe data yang terakhir dia kses oleh program. Misal perhatika n contoh program dibawah ini. //Contoh 9.4 : Contoh pemakaian union #include <stdio.h> union data { float data_f; int data_i; char data_c; }; main () { union data data1; data1.data_f = 12.56; printf (data_f = %f, data_i = %d, data_c = %c\n, data1.data_f, data1.data_i, data1.data_c); data1.data_i = 10; printf (data_f = %f, data_i = %d, data_c = %c\n, data1.data_f, data1.data_i, data1.data_c); data1.data_c = 'A'; printf (data_f = %f, data_i = %d, data_c = %c\n, data1.data_f, data1.data_i, data1.data_c); } Jika kita jalankan maka akan kita peroleh hasil sebagai berikut :

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 9-72 data_float = 12.560000, data_int = 1015389231, data_char = 0 data_float = 0. 000000, data_int = 10, data_char = data_float = 0. 000000, data_int = 65, data_char = A Dari hasil terlihat setelah pernyataan inisialisasi data float, maka data yang ditampilkan ke la yar dengan benar ha nya tipe data float saja ya ng lain tidak sesuai dengan kenyataan. Begitu juga setelah inisialisasi data integer dan char, hanya tipe data yang diinisialisasi terakhir saja yang benar, yang lainnya diisi dengan harga yang tidak menentu.

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 10-73

Ba b 10.

FILE I NPUT OUTPUT

Untuk mengetes suatu program kadang kita memerluka n sejumla h data input yang harus dimasukan ketika program dijalankan. Jika data input yang diperlukan cukup banya k dan harus dimasukan secara langsung lewat keyboard, maka mungkin sua tu saat kita aka n merasa bosan dan malas untuk melakuka nnya lagi. Untuk mengatasi hal tersebut, data input yang diperlukan oleh program dapat kita simpan dalam bentuk file yang dapat dibaca oleh program sehingga kita tidak usah mengetikan data lewat keyboard, begitu juga output dari program dapat disimpoan kedalam file oleh program. Ada dua jenis file I/O yang umum dig una kan yaitu text file dan binary file. Kedua nya ketika dibaca/ditulis ole program akan diperlakukan sebagai text stream dan binary stream, karena C hanya mengijinkan aliran data dalam bentuk stream dari karakter. Isi file dibaca secara sekuensial karakter per-karakter sesuai dengan indikatorposisi yang juga akan bergerak mengikuti posisi karakter yang dibaca. Indika tor posisi diset diawal file pada saat awal pembacaan dan dapat dipindahka n ke sua tu tempat berdasarkan perintah dalam program. Text file hanya berisi rangkaian karakter yang tersusun dalam rangkaian baris tek. Tia p baris dapat berisi karakter sampai 255 karakter dan diakhiri dengan karakter newline ( \n). Ada karakter-karakter yang memiliki arti tertentu ya ng harus diinterpretasi secara khusus, misalnya \n (ganti baris). Data text file dapat dibaca di flatform/mesin manap un. Sedangka n binary text dapat menyimpan data terurut termasuk data tek da n dibaca apa adanya. Isi data dalam bentuk binary text pada umumnya tergantung dari flatform/mesin dimana data itu dib uat. Menuliskan da ta ke file Untuk dapat berhubungan dengan file kita aka n menggunakan fungsi-fungsi ya ng ada di pustaka stdio.h. Untuk tipe text file, pertama-tama kita harus mendeklarasikan variabel FILE yang merupa kan pointer ke file. Deklarasi FILE di lakukan dengan menggunaka n sinta k sebagai berikut : FILE *< pointer file >; FILE adalah tipe data/str uktur yang didefinisikan di dala m stdio.h. FILE akan menyimpan semua informasi yang berhubungan denga n file. Setelah po nter file dideklarasikan kita harus membuka file dimana data a kan disimpan sebelum melakukan proses penyimpanan da ta. Pemb ukaan file dila kukan dengan mengg unaka n sinta k < pointer file > = fopen(char nama_file, char mode); Nama file adalah nama file yang aka n kita buka termasuk lokasi direktori dimana file itu disimpan. Jika file dismpan di direktori ya ng sama dengan program, hanya nama file saja sudah c ukup. Mode file menanda kan untuk tujuan apa file aka n dipakai, ada beberapa mode yang dapat dipilih sesuai dengan keperluannya. Untuktipetext-file mode yang dapat digunakan diantaranya adalah : Mode r r+ w w+ a a+ Arti file yang dibuka hanya bisa dibaca saja file yang dibuka bisa dibaca dan ditulis file ya ng dibuka hanya bisa ditulis saja, jika nama file yang sama sudah ada maka file yang lama akan terhapus diganti dengan yang baru file yang dib uka bisa dibaca dan ditulis, jika na ma file ya ng sama sudah ada maka file yang lama akan terhapus diganti dengan yang baru pada file yang dibuka ha nya dapat ditambahkan data saja mulai dari akhir data yang ada. Jika nama file yang bersesuaian tidak ada maka file baru akan dibuat pada file yang dibuka dapat dibaca dan ditambahkan da ta. Jika nama file ya ng bersesuaian tidak ada maka file baru akan dibuat

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 10-74 Fungsi fopen jika berhasil membuka file aka n mengembalikan pointer file, tapi jika gagal akan mengembalikan NULL. Setelah file terbuka barulah kita dapat menuliskan data ke dalam file. Ada beberapa cara untuk menuliska n data ke dalam file dengan mengguna kan fungsi-fungsi ya ng ada di pusta ka stdio.h. Fungsi-fungsi di pustaka stdio.h ya ng dapat dipakai untuk menulis kan data ke file adalah putc , fputs dan fprintf. putc digunaka n untuk menulis kan satu karakter ke dalam stream, sintak untuk mengguna kan putc adalah putc( <karakter>, < pointer file> ); perintah putc akan mengembalikan karakter yang akan ditulis jika berhasil dan akan mengembalikan EOF jika gagal. Berikut ini adalah co nto h program untuk menyimpan string Menyimpan da ta dengan putc ke dalam file data _putc.dat mengg una kan perinta h putc. //Contoh 10.1 demontrasi pemakaian putc #include <stdio.h> void main() { FILE *p_file; //pointer file p_file = fopen(data_p utc.da t, w); int i; char string[]=Menyimpan data dengan putc ; for (i = 0; i < 100; i++) { if (string[i] == '\0') //test akhir dari string { putc('\n', p_file); break; } else putc(string[i], p_file); //tuliskan karakter berikutnya } fclose(p_file); return 0; } fputs digunakan untuk menuliska n satu baris string kedalam file. Pemakaia nfputsdilakuka n dengan menggunaka n sinta k fputs( <string / array karakter>, <pointerfile> ); jika perinta h ini berhasil dijalan ka n maka aka n mengembalika n string ya ng akan ditulis, dan jika gagal akan mengembalikan EOF. Berikut ini adalah co nto h penggunaan fputs yang dipakai untuk menuliska n string Menyimpan data dengan fputs ke dalam file data_fp uts.dat. //Contoh 10.2 : Demonstrasi penggunaan fputs #include <stdio.h> void main()

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 10-75

{ FILE *p_file; //pointer file p_file = fopen(data_fputs.dat, w); fputs( Menyimpan data dengan fputs , p_file ); fclose(p_file); } fprintf fungsi ini sama dengan printf yang tela h kita bahas sebelumnya, hanya destinasinya saja yang berbeda, kalau printf menuliskan secara terformat data ke layar (stdin), maka fprintf menuliskan data secara terformat ke file (pointer _file). Sinta k penulisannya adalah sbb: fprintf(<pointerfile>,<string format data>, <daftar variabel>) ; Jika perintah ini berhasildijalankan aka n mengembalikan bila ngan b ulat positip (jumlah karakter yang ditulis ke dalam file) ata u bilangan negatip jika berakhir dengan kegagalan. Berikut ini contoh penggunaan fprintf //Contoh 10.3 : Penggunaan fprintf #include <stdio.h> main() { float dataf = 123.4567; int datai = 250; char datas[] = data string ; FILE *p_file; //pointer file p_file = fopen(data_fprintf.dat, w); fprintf(p_file, %f %d %s , dataf, datai, datas); printf( %f %d %s , dataf, datai, datas); fclose(p_file); } Setelah selesai menuliskan datama ka seperti pada ketiga contoh diatas, kita harus menutup file yang telah kita buka dengan mengg una kan perintah fclose. Jika sampai a khir program tidak dijumpai perintah ini, maka program akan dengan sendirinya menutup semua file ya ng sedang dibuka ketika mengakhiri eksekusi program. fclose ditulis dengan menggunaka n sinta k fclose(<pointerfile>); fungsi ini akan mengembaikan nilai 0 jika sukses dan EOF jika gagal. Memba ca data dari file Untuk membaca data yang sudah disimpan didalam file bertipe text file , dapat dila kukan dengan menggunaka n fungsi getc, fgets dan fscanf ya ng tersedia di pustaka stdio.h. Seperti juga ketika kita mau menuliskan data ke file, sebelum membaca data dari file terlebih dahulu kita harus memb uat variabel FILE sebagai pointer ke file serta membuka file ya ng akan kita baca, lalu setelah selesai membaca data dari file harus kita akhiri dengan menutup file. Pastika n file yang aka n dibuka ada, terutama pada mode r (baca saja). Untuk mengecek apakah file yang akan dibaca ada atau tidak, dalam program dapat kita lakukan dengan cara sebagai berikut FILE *p_file; //pointer file

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 10-76 p_file = fopen(data.txt, r );//buka file data.txt didirektori yg sama dgn program if (p_file == NULL) { printf (file ya ng tidak ada ); exit(1); //keluar dari program } Fungsi getc merupakan fungsi untuk membaca satu karakter dari file dengan menggunkan sintak <char variabel> = getc( < pointer file > ); fungsi ini aka n mengembalika n karakter yang akan dibaca jika berhasil dijalankan dan menghasilkan EOF jika gagal dijalankan. Berikut ini adalah conto h program untuk membaca data pada file data_putc.dat yang ditulis dengan menggunakan putc pada program contoh 10.1 diatas. //Contoh 10.4 Program membaca data dgn getc #include <stdio.h> #include <stdlib.h>//untuk exit(1) main() { FILE *p_file; //pointer file int karakter;// menyimpa n bilangan ASCII dr karakter p_file = fopen(data_putc.dat, r ); if (p_file == NULL) { printf (file tida k ada ); exit(1); //keluar dari program } karakter = getc(p _file) ; while (karakter!= EOF) { putchar(karakter);//da ta ditampilkan ke la yar karakter = getc(p _file); } fclose(p_file); } Fungsi fgets merupaka n fungsi yang dapat digunaka n untuk membaca rangkaian karakter dalam baris per baris sampai bertemu dengan new line atau panjang maksimum string, data akan yang dibaca akan disimpan sebagai string. Sintak untuk mengg una kan fgets adalah fgets(<string>, <max panjang string>, <pointer file>); fungsi tersebut aka n mengembalika n string jika berhasil dan EOF jika gagal. Berikut ini contoh program menggunakan fgets. Pada contoh ini fgets akan diguna kan untuk membaca data_fputs.data yang dibuat pada program contoh 10.2. //Contoh 10.5 : Demonstrasi penggunaan fgets #include <stdio.h> #include <stdlib.h>//untuk exit(1) #define MAX 256 //maximum karakter perbaris main()

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 10-77

{ FILE *p_file; //pointer file char karakter[MAX]; p_file = fopen(data _fputs.dat, r ); if (p_file == NULL) { printf (file tida k ada ); exit(1); //keluar dari program } while (fgets(karakter,MAX,p_file)!= NULL) { printf(%s ,karakter); fgets(karakter,MAX,p_file); } fclose(p_file); } Fungsi fscanf merupakan fungsi untuk membaca data file terformat dengan forma t yang sama seperti pada pemakaian scanf. Karena fscanf ini membaca file yang terformat, maka kita harus ta hu terlebih dahulu format data yang tersimpan pada file yang a kan d ibaca dengan mengguna kan scanf sebelum kita membacanya, karena jika formatnya tidak sesuai a kan meng hasilka n kesalahan. fscanf dipakai dengan mengg unaka n sinta k fscanf(<pointer file>, <string format data>, <daftar variabel>) ; fungsi ini akan menghasilkan nilai bilangan bulat jika berhasil dan EOF jika gagal. Berikut ini contoh program memakai fscanf yang akan membaca file data_fprintf.da t yang ditulis secara terformat menggunaka n fprintf pada program Contoh 10.3 //Contoh 10.6 : Penggunaan fscanf #include <stdio.h> #include <stdlib.h>//untuk exit(1) main() { float dataf; int datai; char datas[50]; FILE *p_file; //pointer file p_file = fopen(data _fprintf.dat, r ); if (p_file == NULL) { printf (file tida k ada ); exit(1); //keluar dari program } fscanf(p_file, %f %d %s , &dataf, &datai, datas); printf( %.3f %d %s , dataf, datai, datas); fclose(p_file); }

Untuk kalangan sendiri td k untuk disebar luaskan

halaman | 10-78 Selain fungsi-fungsi dia tas, pada pustaka stdio.h juga terdapat beberapa fungsi lain yang berhubunga n dengan penulisan dan pembacaan file, fungsi-fungsi tersebut adalah Fungsi fseek() merupaka n fungsi untuk memilih lokasi serta panjangnya data yang ingin dibaca atau ditulis serta memiliki sinta k: fseek( <pointer file>, <offset>, <awal> ); Offset merupaka n bilangan riil yang menyata kan panja ng byte ya ng akan dibaca pada file. Awal adalah bilangan integer yang merupaka n pilihan dari 3 konstanta berikut yang terdapat pada stdio.h: SEEK_SET Start of file. SEEK_CUR Current location. SEEK_END End of file. Fungsi fseek() akan mengembalikan nilai 0 jika sukses dan nilai ya ng buka n 0 jika gagal. Fungsi rewind() dig una kan untuk mengembalika n ind icator posisi pembacaan file ke posisi awal ketika file mulai dibuka. Pengunaan fungsi rewind() dilakukan dengan sintak sebagai berikut : rewind(<file_pointer>); Fumgsi rename() a kan meng ubah nama file lama menjadi na ma file yang baru dengan mengguna kan sintak: rename(<nama_file_lama>, <nama_file_baru >); Fungsi remove() dapat menghapus file data yangada. Sinta k untuk fungsi ini adalah sebagai berikut: remove(<file_name_string>);

Untuk kalangan sendiri td k untuk disebar luaskan Peleng kap untuk mata kuliah KU1072 PTI-B FTI

halaman | 10-79

REF ER ENSI 1. 2. 3. 4. http://cplus.about.com http://www.mycplus.com/ http://www.cprogramming.com/ http://en.wikibooks.org/wiki/A_Little_C_Primer/

Untuk kalangan sendiri td k untuk disebar luaskan