P. 1
Makalah Program Komputer c++

Makalah Program Komputer c++

|Views: 975|Likes:
Published by ahmad
pemrograman c++ (Ahmad Teguh)
pemrograman c++ (Ahmad Teguh)

More info:

Categories:Types, Research, Science
Published by: ahmad on May 05, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/12/2015

pdf

text

original

TUGAS MAKALAH PEMROGRAMAN KOMPUTER

Disusun Oleh: Aris Sigit Wisnu Anggriawan Wahyu Wido H Ahmad Teguh Santoso LM. Ali Asri Bosa Aji Tri Mulyanto Irham Hadi Pratama 03.2009.1.06587 03.2009.1.06608 03.2009.1.06654 03.2009.1.06671 03.2009.1.06674 03.2009.1.06683 03.2009.1.06686

JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNOLOGI INDUSTRI INSTITUT TEKNOLOGI ADHI TAMA SURABAYA 2010

i

KATA PENGANTAR
Alhamdulillahhirobbil ‘alamin, puji syukur bagi Allah SWT yang telah memberikan Rahmat, Taufiq dan Hidayah-Nya kepada kami sehingga kami bisa menyelesaikan makalah yang berisi kumpulan data-data megenai sejarah komuter, algorima pemrograman, pembuatan diagram alir (flowchart) serta cara-cara pemrograman dengan program C/C++ beserta contoh-contoh aplikasi penggunaanya berdasarkan silabus kuliah pemprograman komputer. Tidak lupa kami mengucapkan terima kasih yang sebesar-besarnya kepada semua pihak yang telah membantu penyusunan makalah ini hingga terselesaikanya penulisan makalah ini terutama kepada Slamet Winardi, ST, MT selaku dosen pemrograman komputer. Kami berharap makalah ini dapat bermanfaat dan menambah wawasan bagi para pembaca mengenai pemrograman dengan menggunakan program C/C++ bagi kami khususnya, dan segenap pembaca umumnya. Ketidak sempurnaan pasti ada pada semua makhluk di dunia ini. Kami menyadari bahwa makalah ini masih jauh dari sempurna. Oleh karena itu, kami masih membutuhkan kritik dan saran dari berbagai pihak demi kesempurnaan makalah kami selanjutnya.

Surabaya, Januari 2010

Penulis

ii

DAFTAR ISI
HALAMAN JUDUL.................................................................................. i KATA PENGANTAR ............................................................................... ii DAFTAR ISI.............................................................................................. iii BAB I PENDAHULUAN A Latar Belakang ............................................................................. 1 B Tujuan........................................................................................... 2 BAB II ISI Pertemuan 1 SEJARAH PERKEMBANGAN KOMPUTER.................... 3 1.1 Komputer Generasi I ..................................................................... 3 1.2 Komputer Generasi II.................................................................... 4 1.3 Komputer Generasi III .................................................................. 6 1.4 Komputer Generasi IV .................................................................. 6 1.5 Komputer Generasi V ................................................................... 7 Pertemuan 2 ALGORITMA DAN DIAGRAM ALIR .............................. 9 2.1 Algoritma ....................................................................................... 10 2.2 Diagram Alir (Flowchart) .............................................................. 10 Pertemuan 3 PEGENALAN PROGRAM C++.......................................... 12 3.1 Tentang C++ .................................................................................. 12 3.2 Borland C++................................................................................... 12 3.3 Main ............................................................................................... 12 3.4 Pernyataan ...................................................................................... 13 3.5 Gaya Penulisan Program ............................................................... 14 3.6 Bagian Komentar ........................................................................... 15 3.7 Include............................................................................................ 15 Pertemuan 4 ELEMEN DASAR C++........................................................ 16 4.1 Konstanta ....................................................................................... 16 4.2 Operator.......................................................................................... 17 4.3 Variabel .......................................................................................... 17

iii

Pertemuan 5 OPERATOR DAN UNGKAPAN ........................................ 19 5.1 Pengantar Operator dan Ungkapan (Ekspresi)............................... 19 5.2 Operator aritmatika ...................................................................... 19 5.3 Operator Bitwise ............................................................................ 20 5.4 Operator penugasan........................................................................ 21 5.5 Operator Relasi.............................................................................. 21 5.6 Operator Logika............................................................................. 22 5.7 Operator Unary.............................................................................. 22 Pertemuan 6 OPERASI DASAR MASUKAN DAN KELUARAN.......... 24 6.1 Cout ............................................................................................... 24 6.2 Cin .................................................................................................. 24 6.3 Manipulator .................................................................................... 25 Pertemuan 7 PERNYATAAN DASAR ..................................................... 27 7.1 If, Else If, dan Else......................................................................... 27 7.2 If ..................................................................................................... 27 7.3 Else................................................................................................. 27 7.4 Else If ............................................................................................. 28 7.5 Switch............................................................................................. 29 Pertemuan 9 FUNGSI ................................................................................ 31 9.1 Prototipe Fungsi ............................................................................. 31 9.2 Definisi Fungsi ............................................................................... 32 9.3 Lingkup Variabel ........................................................................... 33 9.3.1 Varabel Otomatis (lokal).......................................................... 34 9.3.2 Variable Eksternal(global) ....................................................... 35 9.4 Referensi ........................................................................................ 36 9.5 Rekursi ........................................................................................... 37 Pertemuan 10 ARRAY (VARIABEL BERINDEKS) ............................... 39 10.1 Array 1 Dimensi............................................................................ 39 10.2 Array Berdimensi Dua dan Operasi Matrik ................................. 41

iv

Pertemuan 11 STRING .............................................................................. 42 11.1 Pengantar String ............................................................................ 42 11.2 Konstanta String............................................................................ 42 11.3 Memasukan Data String................................................................ 42 11.4 Fungsi untuk string........................................................................ 44 11.4.1 Fungsi getline() ....................................................................... 44 11.4.2 Fungsi strcpy ........................................................................... 45 11.4.3 Fungsi toupper dan tolower .................................................... 46 11.4.4 Fungsi strlen() ......................................................................... 47 11.4.4 Fungsi strlwr() dan strupr......................................................... 47 Pertemuan 12 POINTER............................................................................ 49 12.1 Pengertian Pointer ......................................................................... 49 12.2 Alamat pointer............................................................................... 49 12.3 Variabel Pointer ............................................................................ 50 12.4 Nilai yang di tunjuk pointer .......................................................... 51 12.5 void pointer ....................................................................................... 51 12.6 Memory pointer ................................................................................ 51 12.7 Pointer Penunjuk Pointer (pointer to pointer)............................... 56 Pertemuan 13 STRUKTUR DAN ENUM ................................................. 58 13.1 Struktur.......................................................................................... 58 13.2 UNION.......................................................................................... 58 13.3 Bitfield .......................................................................................... 58 13.4 ENUM ........................................................................................... 64 Pertemuan 14 TYPE................................................................................... 66 14.1 Tipe Data....................................................................................... 66 14.2 Tipe Deskripsi ............................................................................... 66 14.3 Floating Point ( Bilangan Pecahan ).............................................. 66 14.3.1 Tipe Deskripsi ....................................................................... 67 14.3.1.1 Char ............................................................................. 67 14.3.1.2 Tipe Data Referensi...................................................... 67

v

BAB IV PENUTUP A. Kesimpulan ...................................................................................... 68

DAFTAR PUSTAKA .....................................................................................................69

vi

BAB I PENDAHULUAN
A. Latar Belakang C adalah bahasa yang standar, artinya suatu program yang ditulis dengan versi bahasa C tertentu dapat dikompilasi dengan versi bahasa C yang lain dengan sedikit modifikasi. Standar bahasa C yang asli adalah standar dari UNIX. Sistem operasi, kompiler C dan seluruh program aplikasi UNIX yang esensial ditulis dalam bahasa C. Patokan dari standar UNIX ini diambilkan dari buku yang ditulis oleh Brian Kerninghan dan Dennis Ritchie berjudul "The C Programming Language", diterbitkan oleh Prentice- Hall tahun 1978. Deskripsi C dari Kerninghan dan Ritchie ini kemudian dikenal secara umum sebagai "K&R C". Agar suatu program dalam bahasa pemrograman dapat dimengerti oleh komputer, program haruslah diterjemahkan dahulu ke dalam kode mesin. Adapun penerjemah yang digunakan bisa berupa interpreter atau kompiler. Kebanyakan versi C yang beredar di pasaran menggunakan penerjemah berupa kompiler. Kompiler merupakan jenis penerjemah yang lain, dengan cara kerjanya yaitu menerjemahkan seluruh instruksi dalam program sekaligus. Proses pengkompilasian ini cukup dilakukan sekali saja. Selanjutnya hasil penerjemahan (setelah melalui tahapan yang lain) bisa dijalankan secara langsung, tanpa tergantung lagi oleh program sumber maupun kompilernya. Keuntungannya, proses eksekusi dapat berjalan dengan cepat, sebab tak ada lagi proses penerjemahan. Di samping itu, program sumber bisa dirahasiakan, sebab yang dieksekusi adalah program yang sudah dalam bentuk kode mesin. Sedangkan kelemahannya, proses pembuatan dan pengujian membutuhkan waktu relatif lebih lama, sebab ada waktu untuk mengkompilasi (menerjemahkan) dan ada pula waktu melakukan proses linking. Perlu pula diketahui, program akan berhasil dikompilasi hanya

1

jika program tak mengandung kesalahan secara kaidah sama sekali. B. Tujuan Setelah membaca makalah ini para pembaca diharapkan mampu : 1. Tingkat pemahaman Mampu menjelaskan, menganalisa konsep dan logika berpikir komputer, prinsip kerja serta jalannya program, cara perancangan dan analisis masalah, yang kemudian dipecahkan dengan menggunakan teknik pemrograman terstruktur, serta mengimplementasikan suatu permasalahan dalam bentuk algoritma dan diagram alir mampu menterjemahkan algoritma ke dalam program C++ dan mampu menganalisa program C++ 2. Tingkat aplikasi mengimplementasikan konsep dan logika berpikir komputer, cara perancangan dan analisis masalah serta membuat penyelesaian masalah dengan menggunakan pemrograman terstruktur, kemudian mengeksekusi dan melakukan pengujian program.

2

BAB II ISI Pertemuan 1
SEJARAH PERKEMBANGAN KOMPUTER Komputer telah berkembang menjadi suatu perangkat yang sangat dibutuhkan oleh semua orang. Siapa yang tidak membutuhkan teknologi komputer dewasa ini. Mulai dari belanja dapur, perbankan, hingga kontak jodoh bisa dilakukan lewat teknologi komputer ini. Kehidupan manusia sekarang tidak akan pernah lepas dari teknologi yang satu ini. 1.1 Komputer Generasi I Pada tahun 1941, Konrad Zuse, seorang insinyur Jerman membangun sebuah komputer, Z3, untuk mendesain pesawat terbang dan peluru kendali. Tahun 1943, pihak Inggris menyelesaikan komputer yang dinamakan Colossus untuk memecahkan kode-rahasia yang digunakan Jerman. Dampak pembuatan Colossus tidak terlalu mempengaruhi perkembangan industri komputer, karenakan Colossus bukan merupakan komputer serbaguna (general-purpose computer), Howard H. Aiken (1900-1973), seorang insinyur Harvard yang bekerja dengan IBM, berhasil memproduksi kalkulator elektronik untuk US Navy. Kalkulator tersebut berukuran panjang setengah lapangan bola kaki dan memiliki rentang kabel sepanjang 500 mil. The Harvard-IBM Automatic Sequence Controlled Calculator, atau Mark I, merupakan komputer relai elektronik. Ia menggunakan sinyal elektromagnetik untuk menggerakkan komponen mekanik. Mesin tersebut beroperasi dengan lambat (ia membutuhkan 3-5 detik untuk setiap perhitungan) dan tidak fleksibel (urutan kalkulasi tidak dapat diubah). Kalkulator tersebut dapat melakukan perhitungan aritmatik dasar dan persamaan yang lebih kompleks. Perkembangan komputer lain pada masa kini adalah Electronic Numerical Integrator and Computer (ENIAC), yang dibuat oleh kerja sama antara pemerintah

3

amerika Serikat dan University of Pennsylvania. Terdiri dari 18.000 tabung vakum, 70.000 resistor, dan 5 juta titik solder, komputer tersebut merupakan mesin yang sangat besar yang mengonsumsi daya sebesar 160kW. Komputer ini dirancang oleh John Presper Eckert (1919-1995) dan John W. Mauchly (19071980), ENIAC merupakan komputer serbaguna (general purpose computer) yang bekerja 1000 kali lebih cepat dibandingkan Mark I. Pada pertengahan 1940-an, John von Neumann (1903-1957) bergabung dengan tim University of Pennsylvania dalam usha membangun konsep desain komputer yang hingga 40 tahun mendatang masih dipakai dalam teknik komputer. von Neumann mendesain Electronic Discrete Variable Automatic Computer (EDVAC) pada tahun 1945 dengan sebuh memori untuk menampung baik program ataupun data. Teknik ini memungkinkan komputer untuk berhenti pada suatu saat dan kemudian melanjutkan pekerjaannya kembali. Kunci utama arsitektur Von Neumann adalah unit pemrosesan sentral (CPU), yang memungkinkan seluruh fungsi komputer untuk dikoordinasikan melalui satu sumber tunggal. Tahun 1951, UNIVAC I (Universal Automatic Computer I) yang dibuat oleh Remington Rand, menjadi komputer komersial pertama. Komputer Generasi pertama dikarakteristik dengan fakta bahwa instruksi operasi dibuat secara spesifik untuk suatu tugas tertentu. Setiap komputer memiliki program kode-biner yang berbeda yang disebut "bahasa mesin" (machine language). Hal ini menyebabkan komputer sulit untuk diprogram dan membatasi kecepatannya. Ciri lain komputer generasi pertama adalah penggunaan tube vakum (yang membuat komputer pada masa tersebut berukuran sangat besar) dan silinder magnetik untuk penyimpanan data. 1.2 Komputer Generasi II Pada tahun 1948, penemuan transistor sangat mempengaruhi perkembangan komputer. Transistor menggantikan tube vakum di televisi, radio, dan komputer. Akibatnya, ukuran mesin-mesin elektrik berkurang drastis. Transistor mulai digunakan di dalam komputer mulai pada tahun 1956. Penemuan lain yang berupa pengembangan memori inti-magnetik membantu pengembangan

4

komputer generasi kedua yang lebih kecil, lebih cepat, lebih dapat diandalkan, dan lebih hemat energi dibanding para pendahulunya. Mesin pertama yang memanfaatkan teknologi baru ini adalah superkomputer. IBM membuat superkomputer bernama Stretch, dan Sprery-Rand membuat komputer bernama LARC. komputer ini, yang dikembangkan untuk laboratorium energi atom, dapat menangani sejumlah besar data, sebuah kemampuan yang sangat dibutuhkan oleh peneliti atom. Mesin tersebut sangat mahal dan cenderung terlalu kompleks untuk kebutuhan komputasi bisnis, sehingga membatasi kepopulerannya. Hanya ada dua LARC yang pernah dipasang dan digunakan: satu di Lawrence Radiation Labs di Livermore, California, dan yang lainnya di US Navy Research and Development Center di Washington D.C. Komputer generasi kedua menggantikan bahasa mesin dengan bahasa assembly. Bahasa assembly adalah bahasa yang menggunakan singkatan-singakatan untuk menggantikan kode biner. Pada awal 1960-an, Komputer-komputer generasi kedua ini merupakan komputer yang sepenuhnya menggunakan transistor. Mereka juga memiliki komponenkomponen yang dapat diasosiasikan dengan komputer pada saat ini: printer, penyimpanan dalam disket, memory, sistem operasi, dan program. Salah satu contoh penting komputer pada masa ini adalah IBM 1401 yang diterima secara luas di kalangan industri. Pada tahun 1965, hampir seluruh bisnis-bisnis besar menggunakan komputer generasi kedua untuk memproses informasi keuangan. Program yang tersimpan di dalam komputer dan bahasa pemrograman yang ada di dalamnya memberikan fleksibilitas kepada komputer. Fleksibilitas ini meningkatkan kinerja dengan harga yang pantas bagi penggunaan bisnis. Dengan konsep ini, komputer dapat mencetak faktur pembelian konsumen dan kemudian menjalankan desain produk atau menghitung daftar gaji. Beberapa bahasa pemrograman mulai bermunculan pada saat itu. Bahasa pemrograman Common Business-Oriented Language (COBOL) dan Formula Translator (FORTRAN) mulai umum digunakan. Bahasa pemrograman ini menggantikan kode mesin yang rumit dengan kata-kata, kalimat, dan formula matematika yang lebih mudah dipahami oleh manusia.

5

1.3 Komputer Generasi III Walaupun transistor dalam banyak hal mengungguli tube vakum, namun transistor menghasilkan panas yang cukup besar, yang dapat berpotensi merusak bagian-bagian internal komputer. Batu kuarsa (quartz rock) menghilangkan masalah ini. Jack Kilby, seorang insinyur di Texas Instrument, mengembangkan sirkuit terintegrasi (IC : integrated circuit) di tahun 1958. IC mengkombinasikan tiga komponen elektronik dalam sebuah piringan silikon kecil yang terbuat dari pasir kuarsa.Para ilmuwan kemudian berhasil memasukkan lebih banyak komponenkomponen ke dalam suatu chip tunggal yang disebut semikonduktor. Hasilnya, komputer menjadi semakin kecil karena komponenkomponen dapat dipadatkan dalam chip. Kemajuan komputer generasi ketiga lainnya adalah penggunaan sistem operasi (operating system) yang memungkinkan mesin untuk menjalankan berbagai program yang berbeda secara serentak dengan sebuah program utama yang memonitor dan mengkoordinasi memori komputer. 1.4 Komputer Generasi IV Setelah IC, tujuan pengembangan menjadi lebih jelas: mengecilkan ukuran sirkuit dan komponen-komponen elektrik. Large Scale Integration (LSI) dapat memuat ratusan komponen dalam sebuah chip. Pada tahun 1980-an, Very Large Scale Integration (VLSI) memuat ribuan komponen dalam sebuah chip tunggal. Ultra-Large Scale Integration (ULSI) meningkatkan jumlah tersebut menjadi jutaan. Chip Intel 4004 yang dibuat pada tahun 1971 membawa kemajuan pada IC dengan meletakkan seluruh komponen dari sebuah komputer (central processing unit, memori, dan kendali input/output) dalam sebuah chip yang sangat kecil. Sebelumnya, IC dibuat untuk mengerjakan suatu tugas tertentu yang spesifik. Sekarang, sebuah mikroprosesor dapat diproduksi dan kemudian diprogram untuk memenuhi seluruh kebutuhan yang diinginkan. Tidak lama kemudian, setiap perangkat rumah tangga seperti microwave oven, televisi, dan mobil dengan electronic fuel injection dilengkapi dengan mikroprosesor.

6

Perkembangan komputer memungkinkan orang-orang biasa untuk menggunakan komputer biasa. Komputer tidak lagi menjadi dominasi perusahaan-perusahaan besar atau lembaga pemerintah. Pada pertengahan tahun 1970-an, perakit komputer menawarkan produk komputer mereka ke masyarakat umum. Komputer-komputer ini, yang disebut minikomputer, dijual dengan paket piranti lunak yang mudah digunakan oleh kalangan awam. Piranti lunak yang paling populer pada saat itu adalah program word processing Pada tahun 1981, IBM memperkenalkan penggunaan Personal Computer (PC) untuk penggunaan di rumah, kantor, dan sekolah. Jumlah PC yang digunakan melonjak dari tahun ke tahun. Komputer melanjutkan evolusinya menuju ukuran yang lebih kecil, dari komputer yang berada di atas meja (desktop computer) menjadi komputer yang dapat dimasukkan ke dalam tas (laptop), atau bahkan komputer yang dapat digenggam (palmtop). IBM PC bersaing dengan Apple Macintosh dalam memperebutkan pasar komputer. Apple Macintosh menjadi terkenal karena mempopulerkan sistem grafis pada komputernya, sementara saingannya masih menggunakan komputer yang berbasis teks. Macintosh juga mempopulerkan penggunaan piranti mouse. Pada masa sekarang, kita mengenal perjalanan IBM compatible dengan pemakaian CPU: IBM PC/486, Pentium, Pentium II, Pentium III, Pentium IV (Serial dari CPU buatan Intel). Juga kita kenal AMD k6, Athlon, dsb. Ini semua masuk dalam golongan komputer generasi keempat. Cara-cara baru untuk menggali potensial terus dikembangkan. komputer dapat dihubungkan secara bersamaan dalam suatu jaringan untuk saling berbagi memori, piranti lunak, informasi, dan juga untuk dapat saling berkomunikasi satu dengan yang lainnya. Dengan menggunakan perkabelan langsung (disebut juga local area network, LAN), atau kabel telepon, jaringan ini dapat berkembang menjadi sangat besar. 1.5 Komputer Generasi V Mendefinisikan komputer generasi kelima menjadi cukup sulit karena tahap ini masih sangat muda. Contoh imajinatif komputer generasi kelima adalah komputer fiksi HAL9000 dari novel karya Arthur C. Clarke berjudul 2001: Space

7

Odyssey. HAL menampilkan seluruh fungsi yang diinginkan dari sebuah komputer generasi kelima. Dengan kecerdasan buatan (artificial intelligence), HAL dapat cukup memiliki nalar untuk melakukan percapakan dengan manusia, menggunakan masukan visual, dan belajar dari pengalamannya sendiri. Walaupun mungkin realisasi HAL9000 masih jauh dari kenyataan, banyak fungsi-fungsi yang dimilikinya sudah terwujud. Beberapa komputer dapat menerima instruksi secara lisan dan mampu meniru nalar manusia. Namun fasilitas tersebut menjadi jauh lebih rumit dari yang diduga ketika programmer menyadari bahwa pengertian manusia sangat bergantung pada konteks dan pengertian ketimbang sekedar menterjemahkan kata-kata secara langsung. Banyak kemajuan di bidang desain komputer dan teknologi semakin memungkinkan pembuatan komputer generasi kelima. Dua kemajuan rekayasa yang terutama adalah kemampuan pemrosesan paralel, yang akan menggantikan model non Neumann. Model non Neumann akan digantikan dengan sistem yang mampu mengkoordinasikan banyak CPU untuk bekerja secara serempak. Kemajuan lain adalah teknologi superkonduktor yang memungkinkan aliran elektrik tanpa ada hambatan apapun, yang nantinya dapat mempercepat kecepatan informasi. Jepang adalah negara yang terkenal dalam sosialisasi jargon dan proyek komputer generasi kelima. Lembaga ICOT (Institute for new Computer Technology) juga dibentuk untuk merealisasikannya. Banyak kabar yang menyatakan bahwa proyek ini telah gagal, namun beberapa informasi lain bahwa keberhasilan proyek komputer generasi kelima ini akan membawa perubahan baru paradigma komputerisasi di dunia. Kita tunggu informasi mana yang lebih valid dan membuahkan hasil.

8

BAB I PENDAHULUAN
A. Latar Belakang C adalah bahasa yang standar, artinya suatu program yang ditulis dengan versi bahasa C tertentu dapat dikompilasi dengan versi bahasa C yang lain dengan sedikit modifikasi. Standar bahasa C yang asli adalah standar dari UNIX. Sistem operasi, kompiler C dan seluruh program aplikasi UNIX yang esensial ditulis dalam bahasa C. Patokan dari standar UNIX ini diambilkan dari buku yang ditulis oleh Brian Kerninghan dan Dennis Ritchie berjudul "The C Programming Language", diterbitkan oleh Prentice- Hall tahun 1978. Deskripsi C dari Kerninghan dan Ritchie ini kemudian dikenal secara umum sebagai "K&R C". Agar suatu program dalam bahasa pemrograman dapat dimengerti oleh komputer, program haruslah diterjemahkan dahulu ke dalam kode mesin. Adapun penerjemah yang digunakan bisa berupa interpreter atau kompiler. Kebanyakan versi C yang beredar di pasaran menggunakan penerjemah berupa kompiler. Kompiler merupakan jenis penerjemah yang lain, dengan cara kerjanya yaitu menerjemahkan seluruh instruksi dalam program sekaligus. Proses pengkompilasian ini cukup dilakukan sekali saja. Selanjutnya hasil penerjemahan (setelah melalui tahapan yang lain) bisa dijalankan secara langsung, tanpa tergantung lagi oleh program sumber maupun kompilernya. Keuntungannya, proses eksekusi dapat berjalan dengan cepat, sebab tak ada lagi proses penerjemahan. Di samping itu, program sumber bisa dirahasiakan, sebab yang dieksekusi adalah program yang sudah dalam bentuk kode mesin. Sedangkan kelemahannya, proses pembuatan dan pengujian membutuhkan waktu relatif lebih lama, sebab ada waktu untuk mengkompilasi (menerjemahkan) dan ada pula waktu melakukan proses linking. Perlu pula diketahui, program akan berhasil dikompilasi hanya

1

jika program tak mengandung kesalahan secara kaidah sama sekali. B. Tujuan Setelah membaca makalah ini para pembaca diharapkan mampu : 1. Tingkat pemahaman Mampu menjelaskan, menganalisa konsep dan logika berpikir komputer, prinsip kerja serta jalannya program, cara perancangan dan analisis masalah, yang kemudian dipecahkan dengan menggunakan teknik pemrograman terstruktur, serta mengimplementasikan suatu permasalahan dalam bentuk algoritma dan diagram alir mampu menterjemahkan algoritma ke dalam program C++ dan mampu menganalisa program C++ 2. Tingkat aplikasi mengimplementasikan konsep dan logika berpikir komputer, cara perancangan dan analisis masalah serta membuat penyelesaian masalah dengan menggunakan pemrograman terstruktur, kemudian mengeksekusi dan melakukan pengujian program.

2

BAB II ISI Pertemuan 1
SEJARAH PERKEMBANGAN KOMPUTER Komputer telah berkembang menjadi suatu perangkat yang sangat dibutuhkan oleh semua orang. Siapa yang tidak membutuhkan teknologi komputer dewasa ini. Mulai dari belanja dapur, perbankan, hingga kontak jodoh bisa dilakukan lewat teknologi komputer ini. Kehidupan manusia sekarang tidak akan pernah lepas dari teknologi yang satu ini. 1.1 Komputer Generasi I Pada tahun 1941, Konrad Zuse, seorang insinyur Jerman membangun sebuah komputer, Z3, untuk mendesain pesawat terbang dan peluru kendali. Tahun 1943, pihak Inggris menyelesaikan komputer yang dinamakan Colossus untuk memecahkan kode-rahasia yang digunakan Jerman. Dampak pembuatan Colossus tidak terlalu mempengaruhi perkembangan industri komputer, karenakan Colossus bukan merupakan komputer serbaguna (general-purpose computer), Howard H. Aiken (1900-1973), seorang insinyur Harvard yang bekerja dengan IBM, berhasil memproduksi kalkulator elektronik untuk US Navy. Kalkulator tersebut berukuran panjang setengah lapangan bola kaki dan memiliki rentang kabel sepanjang 500 mil. The Harvard-IBM Automatic Sequence Controlled Calculator, atau Mark I, merupakan komputer relai elektronik. Ia menggunakan sinyal elektromagnetik untuk menggerakkan komponen mekanik. Mesin tersebut beroperasi dengan lambat (ia membutuhkan 3-5 detik untuk setiap perhitungan) dan tidak fleksibel (urutan kalkulasi tidak dapat diubah). Kalkulator tersebut dapat melakukan perhitungan aritmatik dasar dan persamaan yang lebih kompleks. Perkembangan komputer lain pada masa kini adalah Electronic Numerical Integrator and Computer (ENIAC), yang dibuat oleh kerja sama antara pemerintah

3

amerika Serikat dan University of Pennsylvania. Terdiri dari 18.000 tabung vakum, 70.000 resistor, dan 5 juta titik solder, komputer tersebut merupakan mesin yang sangat besar yang mengonsumsi daya sebesar 160kW. Komputer ini dirancang oleh John Presper Eckert (1919-1995) dan John W. Mauchly (19071980), ENIAC merupakan komputer serbaguna (general purpose computer) yang bekerja 1000 kali lebih cepat dibandingkan Mark I. Pada pertengahan 1940-an, John von Neumann (1903-1957) bergabung dengan tim University of Pennsylvania dalam usha membangun konsep desain komputer yang hingga 40 tahun mendatang masih dipakai dalam teknik komputer. von Neumann mendesain Electronic Discrete Variable Automatic Computer (EDVAC) pada tahun 1945 dengan sebuh memori untuk menampung baik program ataupun data. Teknik ini memungkinkan komputer untuk berhenti pada suatu saat dan kemudian melanjutkan pekerjaannya kembali. Kunci utama arsitektur Von Neumann adalah unit pemrosesan sentral (CPU), yang memungkinkan seluruh fungsi komputer untuk dikoordinasikan melalui satu sumber tunggal. Tahun 1951, UNIVAC I (Universal Automatic Computer I) yang dibuat oleh Remington Rand, menjadi komputer komersial pertama. Komputer Generasi pertama dikarakteristik dengan fakta bahwa instruksi operasi dibuat secara spesifik untuk suatu tugas tertentu. Setiap komputer memiliki program kode-biner yang berbeda yang disebut "bahasa mesin" (machine language). Hal ini menyebabkan komputer sulit untuk diprogram dan membatasi kecepatannya. Ciri lain komputer generasi pertama adalah penggunaan tube vakum (yang membuat komputer pada masa tersebut berukuran sangat besar) dan silinder magnetik untuk penyimpanan data. 1.2 Komputer Generasi II Pada tahun 1948, penemuan transistor sangat mempengaruhi perkembangan komputer. Transistor menggantikan tube vakum di televisi, radio, dan komputer. Akibatnya, ukuran mesin-mesin elektrik berkurang drastis. Transistor mulai digunakan di dalam komputer mulai pada tahun 1956. Penemuan lain yang berupa pengembangan memori inti-magnetik membantu pengembangan

4

komputer generasi kedua yang lebih kecil, lebih cepat, lebih dapat diandalkan, dan lebih hemat energi dibanding para pendahulunya. Mesin pertama yang memanfaatkan teknologi baru ini adalah superkomputer. IBM membuat superkomputer bernama Stretch, dan Sprery-Rand membuat komputer bernama LARC. komputer ini, yang dikembangkan untuk laboratorium energi atom, dapat menangani sejumlah besar data, sebuah kemampuan yang sangat dibutuhkan oleh peneliti atom. Mesin tersebut sangat mahal dan cenderung terlalu kompleks untuk kebutuhan komputasi bisnis, sehingga membatasi kepopulerannya. Hanya ada dua LARC yang pernah dipasang dan digunakan: satu di Lawrence Radiation Labs di Livermore, California, dan yang lainnya di US Navy Research and Development Center di Washington D.C. Komputer generasi kedua menggantikan bahasa mesin dengan bahasa assembly. Bahasa assembly adalah bahasa yang menggunakan singkatan-singakatan untuk menggantikan kode biner. Pada awal 1960-an, Komputer-komputer generasi kedua ini merupakan komputer yang sepenuhnya menggunakan transistor. Mereka juga memiliki komponenkomponen yang dapat diasosiasikan dengan komputer pada saat ini: printer, penyimpanan dalam disket, memory, sistem operasi, dan program. Salah satu contoh penting komputer pada masa ini adalah IBM 1401 yang diterima secara luas di kalangan industri. Pada tahun 1965, hampir seluruh bisnis-bisnis besar menggunakan komputer generasi kedua untuk memproses informasi keuangan. Program yang tersimpan di dalam komputer dan bahasa pemrograman yang ada di dalamnya memberikan fleksibilitas kepada komputer. Fleksibilitas ini meningkatkan kinerja dengan harga yang pantas bagi penggunaan bisnis. Dengan konsep ini, komputer dapat mencetak faktur pembelian konsumen dan kemudian menjalankan desain produk atau menghitung daftar gaji. Beberapa bahasa pemrograman mulai bermunculan pada saat itu. Bahasa pemrograman Common Business-Oriented Language (COBOL) dan Formula Translator (FORTRAN) mulai umum digunakan. Bahasa pemrograman ini menggantikan kode mesin yang rumit dengan kata-kata, kalimat, dan formula matematika yang lebih mudah dipahami oleh manusia.

5

1.3 Komputer Generasi III Walaupun transistor dalam banyak hal mengungguli tube vakum, namun transistor menghasilkan panas yang cukup besar, yang dapat berpotensi merusak bagian-bagian internal komputer. Batu kuarsa (quartz rock) menghilangkan masalah ini. Jack Kilby, seorang insinyur di Texas Instrument, mengembangkan sirkuit terintegrasi (IC : integrated circuit) di tahun 1958. IC mengkombinasikan tiga komponen elektronik dalam sebuah piringan silikon kecil yang terbuat dari pasir kuarsa.Para ilmuwan kemudian berhasil memasukkan lebih banyak komponenkomponen ke dalam suatu chip tunggal yang disebut semikonduktor. Hasilnya, komputer menjadi semakin kecil karena komponenkomponen dapat dipadatkan dalam chip. Kemajuan komputer generasi ketiga lainnya adalah penggunaan sistem operasi (operating system) yang memungkinkan mesin untuk menjalankan berbagai program yang berbeda secara serentak dengan sebuah program utama yang memonitor dan mengkoordinasi memori komputer. 1.4 Komputer Generasi IV Setelah IC, tujuan pengembangan menjadi lebih jelas: mengecilkan ukuran sirkuit dan komponen-komponen elektrik. Large Scale Integration (LSI) dapat memuat ratusan komponen dalam sebuah chip. Pada tahun 1980-an, Very Large Scale Integration (VLSI) memuat ribuan komponen dalam sebuah chip tunggal. Ultra-Large Scale Integration (ULSI) meningkatkan jumlah tersebut menjadi jutaan. Chip Intel 4004 yang dibuat pada tahun 1971 membawa kemajuan pada IC dengan meletakkan seluruh komponen dari sebuah komputer (central processing unit, memori, dan kendali input/output) dalam sebuah chip yang sangat kecil. Sebelumnya, IC dibuat untuk mengerjakan suatu tugas tertentu yang spesifik. Sekarang, sebuah mikroprosesor dapat diproduksi dan kemudian diprogram untuk memenuhi seluruh kebutuhan yang diinginkan. Tidak lama kemudian, setiap perangkat rumah tangga seperti microwave oven, televisi, dan mobil dengan electronic fuel injection dilengkapi dengan mikroprosesor.

6

Perkembangan komputer memungkinkan orang-orang biasa untuk menggunakan komputer biasa. Komputer tidak lagi menjadi dominasi perusahaan-perusahaan besar atau lembaga pemerintah. Pada pertengahan tahun 1970-an, perakit komputer menawarkan produk komputer mereka ke masyarakat umum. Komputer-komputer ini, yang disebut minikomputer, dijual dengan paket piranti lunak yang mudah digunakan oleh kalangan awam. Piranti lunak yang paling populer pada saat itu adalah program word processing Pada tahun 1981, IBM memperkenalkan penggunaan Personal Computer (PC) untuk penggunaan di rumah, kantor, dan sekolah. Jumlah PC yang digunakan melonjak dari tahun ke tahun. Komputer melanjutkan evolusinya menuju ukuran yang lebih kecil, dari komputer yang berada di atas meja (desktop computer) menjadi komputer yang dapat dimasukkan ke dalam tas (laptop), atau bahkan komputer yang dapat digenggam (palmtop). IBM PC bersaing dengan Apple Macintosh dalam memperebutkan pasar komputer. Apple Macintosh menjadi terkenal karena mempopulerkan sistem grafis pada komputernya, sementara saingannya masih menggunakan komputer yang berbasis teks. Macintosh juga mempopulerkan penggunaan piranti mouse. Pada masa sekarang, kita mengenal perjalanan IBM compatible dengan pemakaian CPU: IBM PC/486, Pentium, Pentium II, Pentium III, Pentium IV (Serial dari CPU buatan Intel). Juga kita kenal AMD k6, Athlon, dsb. Ini semua masuk dalam golongan komputer generasi keempat. Cara-cara baru untuk menggali potensial terus dikembangkan. komputer dapat dihubungkan secara bersamaan dalam suatu jaringan untuk saling berbagi memori, piranti lunak, informasi, dan juga untuk dapat saling berkomunikasi satu dengan yang lainnya. Dengan menggunakan perkabelan langsung (disebut juga local area network, LAN), atau kabel telepon, jaringan ini dapat berkembang menjadi sangat besar. 1.5 Komputer Generasi V Mendefinisikan komputer generasi kelima menjadi cukup sulit karena tahap ini masih sangat muda. Contoh imajinatif komputer generasi kelima adalah komputer fiksi HAL9000 dari novel karya Arthur C. Clarke berjudul 2001: Space

7

Odyssey. HAL menampilkan seluruh fungsi yang diinginkan dari sebuah komputer generasi kelima. Dengan kecerdasan buatan (artificial intelligence), HAL dapat cukup memiliki nalar untuk melakukan percapakan dengan manusia, menggunakan masukan visual, dan belajar dari pengalamannya sendiri. Walaupun mungkin realisasi HAL9000 masih jauh dari kenyataan, banyak fungsi-fungsi yang dimilikinya sudah terwujud. Beberapa komputer dapat menerima instruksi secara lisan dan mampu meniru nalar manusia. Namun fasilitas tersebut menjadi jauh lebih rumit dari yang diduga ketika programmer menyadari bahwa pengertian manusia sangat bergantung pada konteks dan pengertian ketimbang sekedar menterjemahkan kata-kata secara langsung. Banyak kemajuan di bidang desain komputer dan teknologi semakin memungkinkan pembuatan komputer generasi kelima. Dua kemajuan rekayasa yang terutama adalah kemampuan pemrosesan paralel, yang akan menggantikan model non Neumann. Model non Neumann akan digantikan dengan sistem yang mampu mengkoordinasikan banyak CPU untuk bekerja secara serempak. Kemajuan lain adalah teknologi superkonduktor yang memungkinkan aliran elektrik tanpa ada hambatan apapun, yang nantinya dapat mempercepat kecepatan informasi. Jepang adalah negara yang terkenal dalam sosialisasi jargon dan proyek komputer generasi kelima. Lembaga ICOT (Institute for new Computer Technology) juga dibentuk untuk merealisasikannya. Banyak kabar yang menyatakan bahwa proyek ini telah gagal, namun beberapa informasi lain bahwa keberhasilan proyek komputer generasi kelima ini akan membawa perubahan baru paradigma komputerisasi di dunia. Kita tunggu informasi mana yang lebih valid dan membuahkan hasil.

8

Pertemuan 2
ALGORITMA DAN DIAGRAM ALIR Algoritma adalah urutan langkah-langkah logis penyeselaian masalah yang disusun secara sistematis dan logis. Kata logis merupakan kata kunci dalam algoritma. Langkah-langkah dalam algoritma harus dapat ditentukan bernilai benar atau salah. 2.1 Algoritma Algoritma adalah jantung ilmu komputer. Banyak cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun algoritma juga digunakan dalam kehidupan sehari-hari, contohnya resep makanan. Di dalam resep makanan terdapat langkah-langkah yang merupakan algoritma. Selain itu masih banyak contoh algoritma yang lain. Untuk melaksanakan suatu algoritma diperlukan suatu bahasa pemrograman, contoh bahasa pemrograman adalah : Pascal, C++, Basic, dll. Notasi algoritma dapat diterjemahkan kedalam bahasa pemrograman apapun, dengan kata lain notasi algoritma bersifat independen. 2.2 Diagram Alir (Flowchart)

Gambar 2.1

9

Gambar 2.2

Gambar 2.3

Suatu flowchart adalah suatu representasi secara diagram yang mengilustrasikan urutan dari operasi yang dilakukan untuk mendapatkan suatu hasil. Dengan kata lain, flowchart membantu kita untuk mengerti dan melihat bentuk algoritma dengan menampilkan algoritma dalam simbol-simbol gambar. Dalam menggambar flowchart, digunakan simbol tertentu seperti gambar 2.1. Contoh berikut bisa digunakan untuk lebih mengerti perbedaan kegunaan simbolsimbol tersebut. Misal kita ingin mencari jumlah dari 2 buah bilangan, maka flowchart-nya adalah seperti gambar 2.2. Contoh lain, misalkan kita ingin mengetahui apakah sebuah bilangan ganjil atau genap. Untuk itu kita harus membuat flowchart seperti ini gambar 2.3. Pseudo code Pseudo code adalah urutan baris algoritma seperti kode pemrograman dan tidak memiliki sintak yang baku. Pseudo code lebih umum digunakan oleh programmer yang berpengalaman. Akan tetapi, flowchart lebih mudah dimengerti oleh programmer pemula, pseudo code sangat mudah diimplementasikan ke dalam kode program dibandingkan dengan flowchart. Kita bisa bebas menulis pseudo code selama itu mudah dimengerti bagi orang lain. Tetapi disarankan untuk menggunakan keyword yang umum digunakan seperti : if, then, else, while, do, repeat, for, dan lainnya. Dan ikuti gaya penulisan pemrograman seperti Pascal, C++ dan lain-lain. Perhatikan kode dibawah ini :

10

Mulai masukkan sebuah angka masukkan sebuah angka dan tampilkan ambil angka yang sebelumnya dan tampilkan selesai walaupun pseudo code diatas masih bisa dimengerti tetapi ada beberapa statemen yang ambigu. Dari baris kedua, kita tidak tahu kemana angka tersebut disimpan dan kita juga tidak tahu angka yang mana yang dimaksud untuk “angka yang sebelumnya”. Apakah angka yang pertama atau yang kedua. Pseudo code diatas dapat dimodifikasi menjadi seperti berikut : 1. Mulai 2. Masukkan A 3. Masukkan B, Tampilkan B 4. Tampilkan A 5. Selesai Pseudo code diatas lebih baik dibandingkan sebelumnya. Kita bisa dengan jelas melihat dimana angka disimpan dan angka yang mana yang ditampilkan. Sekarang kita akan mengubah flowchart pada gambar 2.2 1. Mulai 2. Masukkan A dan B 3. C = A + B 4. Tampilkan C 5. Selesai

11

Pertemuan 3

PEGENALAN PROGRAM C++

3.1 Tentang C++ C++ diciptakan untuk mendukung pemrograman berorientasi pada objek (Object Oriented Pragramming/OOP) yang tidak dimiliki C. sementara C merupakan bahasa pemrograman terbaik dilingkungannya, bahasa ini tidak memiliki kemampuan OOP. Reputasi C tidak diragukan lagi dalam menghasilkan program .EXE berukuran kecil, eksekusi yang cepat, antarmuka (interfacing) yang sederhana dengan bahasa lain dan fleksibilitas pemrograman. Apa yang membuat C tampak sukar dipelajari mungkin karena tiadanya pemeriksaan tipe. Sebagai contoh, dapat mencampur bilangan bulat dengan string untuk menghasilkan karakter. Namun, justru dsitu letak fleksibilitas C, dapat mengolah data C sebebas mengolah data dalam bahasa assembly. 3.2 Borland C++ Dibandingkan compiler C++ yang lain, Borland C++ memiliki keunggulan terutama dalam hal kecepatan dan efisiensi kompilasi. Disamping itu, Borland C++ mendukung beberapa system operasi yaitu DOS, Windows 16bit (Window 3.0) dan windows 32 bit (Windows NT). Meskipun demikian compiler Borland C++ juga memiliki kelemahan bila dibandingkan compiler C++ yang lain, misalnya : pemrograman dengan Borland C++ terutama yang menyangkut tampilan jauh lebih sulit daripada pemrograman dengan Microsoft Visual C++. 3.3 Main Main ( ) adalah fungsi utama (main) yang harus ada dalam setiap program C++ kita. Di sini yang digunakan adalah dengan main tanpa nilai kembalian dan tanpa paramater. Contoh program 3.1
#include <iostream.h> void main () {cout << "hallo subagyo\n";}

12

Gambar 3.1 hsil eksekusi program 3.1 Jika diperhatikan ada perintah \n pada akhir “kalimat” hallo subagyo. Apa itu? ”\n” adalah perintah dalam banyak bahasa pemrograman sebagai baris baru (new line) jadi yang akan ditampilkan pada program adalah: Pada baris pertama, seperti yang kita lihat, ada perintah #include <iostream>. Tanda ‘#’ adalah preprocessor directive. Preprocessor directive adalah perintah – perintah yang diberikan kepada compiler untuk melakukan definisi, memasukkan file library, dll. 3.4Pernyataan Pernyataan merupakan bagian program yang berupa instruksi kepada computer untuk melakukan sesuatu. Menampilkan tulisan dilayar, menghitung operasi aritmatika, membaca inputan dan lain sebagainya. Setiap pernyataan harus diakhir dengan tanda titik koma “;”. Baris (#include <iostream.h>) bukan merupakan suatu pernyataan baris ini digunakan untuk menyisipkan file (iostream.h) ke dalam program. Pada contoh diatas iostream.h disebut file header. File header tersebut diperlukan agar perintah cout bias dijalankan. Apabila file heder tersenut dihapus maka akan terjadi error. Perintah Untuk menampilkan Informasi Ke Layar Contoh program 3.2 :
#include <iostream.h> #include <conio.h> void main() {cout << " saya sedang belajar c++"; getch();}

Gambar 3.2 hasil eksekusi program 3.2

13

Pengenal cout dapat digunakan untuk mengarahkan data ke standart output (normalnya adalah layer). Tanda << merupakan operator yang berfungsi untuk mengarahkan data yang terletak di sebelah kanannya ke objek yang berada di sebelah kiri. 3.5 Gaya Penulisan Program Bahasa C memberikan keleluasaan dalam menulis bentuk program. Program di atas misalnya dapat ditulis kembali tanpa mengubah hasil eksekusi program menjadi: program 3.3
#include <iostream.h> #include <conio.h> void main() {cout << " saya sedang belajar c++"; getch();}

Gamabar 3.3 hasil eksekusi program 3.3 Bahkan penulisan seperti berikut, dengan menghilangkan sejumlah spasi tetap diperkenankan: program 3.4
#include <stdio.h> main ( ) { printf("Selamat datang\n"); printf("di program C++\n"); }

Gambar 3.4 hasil eksekusi program 3.4 Pemrogram tinggal memilih bentuk yang disukai. Sebagai pedoman, penulisan atau pemilihan bentuk hendaknya memberikan kemudahan bagi yang ingin membaca program, terutama untuk program yang berukuran besar. Jika dilihat pada program 3.4 penulisan yang sangat mampat dapat menyebabkan program sulit dipahami.

14

3.6 Bagian Komentar Program yang baik pada umumnya diberi komentar yang akan membantu orang lain maupun pembuat program itu untuk memahami program yang dibuat. Dalam C atau C++ setiap tulisan yang diapit oleh symbol /* … */ atau setiap baris yang dimulai dengan symbol // dianggap komentar. C++ tidak mengizinkan komentar bersarang ( nested comment), namun Borland C++ lebih fleksibel dalam hal ini. Contoh C++ menggunakan komentar:program 3.5
#include<iostream.h> main () {cout<<”nama :subagyo”; //untuk menampilkan nama}

Gambar 3.5 penulisan komentar tidak mempengaruhi hasil eksekusi 3.7 Include #include merupakan salah satu jenis pengarah praprosesor yang digunakan untuk memberitahu kompiler agar dalam proses linking membaca file yang dinamakan file judul (header file), yaitu file yang diantaranya berisi deklarasi fungsi dan definisi konstanta. Bahasa C menyediakan beberapa file judul yang ditandai dengan ekstensi .h. Misal pada Program di atas, #include <iostream.h> menyatakan pada kompiler agar membca file bernama iostream.h saat melakukan kompilasi. Bentuk umum #include : #include <namafile> atau #include “namafile” Bentuk pertama (#include <namafile>) mengisyaratkan bahwa pencarian file dilakukan pada direktori khusus (direktori file include), yang merupakan default direktori file-file judul yang disediakan oleh bahasa pemrograman. Bentuk kedua (#include “namafile”) menyatakan bahwa pencerian file dilakukan pertama kali pada direktori aktif tempat program sumber, dan seandainya tidak ditemukan pencarian akan dilanjutkan pada direktori lainnya sesuai dengan perintah pada sistem operasi (yaitu PATH).

15

Pertemuan 4
ELEMEN DASAR C++ 4.1 Konstanta Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses pemrograman berlangsung. Nilai konstanta selalu tetap. Konstanta harus didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer, pecahan, karakter dan string. Contoh konstanta: 50;13;3;14;4;50005;’A’;’BahasaC’. Selain itu, bahasa C++ juga menyediakan beberapa karakter khusus yang disebut karakter escape, antara lain: Konstanta karakter ‘A’ ‘1’ ‘*’ ‘\\’ \0 \a \b \f \n \r \t \v \\ \’ \” Karakter Karakter berupa huruf A Karakter berupa angka 1 Karakter symbol Karakter \ (harus ditulis dengan awalan \) Karakter ber- ASCII nol (karakter null) Karakter bel Karakter backspace Karakter formfeed (ganti halaman) Karakter newline (pindah baris) Karakter carriage return(keawal baris) tanpa linefeed Karakter tab horizontal Karakter tab vertical Karakter \ Karakter ' Karakter "

16

Konstanta karakter \? Contoh program 4.1:
#include <iostream.h> main() {const float phi = 3.14;

Karakter Karakter ?

cout << " Nilai phi = " << phi;}

Gambar 4.1 program dengan konstanta Jika terjadi pengubahan nilai dari konstanta phi, maka akan terjadi error. 4.2 Operator Operator (lambang-operasi) adalah simbol-simbol, baik berupa satu atau beberapa karakter, yang menetapkan bagaimana suatu nilai dimanipulasi. itu adalah: ! ~ - + * / % < > = | ^ ' ++ -- -= += /= %= << >> == != <= >= |= && || ?: &= ^= <<= >>= 4.3 Variabel Variable adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Nilai dari suatu variabel bisa diubah-ubah sesuai kebutuhan. Nama dari suatu variable dapat ditentukan sendiri oleh pemrograman dengan aturan sebagai berikut: 1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf. 2. Bahasa C++ bersifat case-sensitive artinya huruf besar dan kecil dianggap berbeda. Jadi antara nim,NIM dan Nim dianggap berbeda. 3. Tidak boleh mengandung spasi

17

4. Tidak boleh mengandung symbol-symbol khusus, kecuali garis bawah (underscore). Yang termasuk symbol khusus yang tidak diperbolehkan antara lain: $,?,%,#,!,&,*(,),-,+,= dsb 5. Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai. Contoh pendeklarasian variabel yang benar: NPM,b,c,nama_siswa,a6547,nilai, dsb. Contoh penanaman variable yang salah: %nilai_siswa, 80siswa, rata-rata,ada spasi, penting!, dsb. Contoh program 4.2:
#include <iostream.h> void main() { int x,y,z; x = 7; y = 5; z = x + y; cout << " Hasil Penjumlahan = " << z; }

Gambar 4.2 program dengan pendeklarasian variable

18

Pertemuan 5
OPERATOR DAN UNGKAPAN 5.1 Pengantar Operator dan Ungkapan (Ekspresi) Operator merupakan simbol yang biasa dilibatkan dalam program untuk melakukan sesuatu operasi atau manipulasi misalnya untuk: 1. Menjumlahkan duabuah nilai 2. Memberikan nilai ke suatu variable 3. Membandingkan kesamaan dua buah nilai Dalam C ekspresi dapat berupa : pengenal konstanta atau diantara kombinasi elemen diatas dengan operator a=b+c–2 Pada ungkapan ini, a, b dan c merupakan operand, simbol =, + dan – merupakan operator. Dalam hal ini variabel a diisi dengan hasil penjumlahan b dan c dikurangi 1. Selanjutnya nilai a ini mernyatakan nilai ungkapan. 5.2 Operator aritmatika Bahasa C++ menyediakan lima operator aritmatika, yaitu: Lima Operator Aritmatika Operator Keterangan * / % + Perkalian Pembagian Contoh 2*4 8/2

Contoh Ungkapan:

Sisa Pembagian atau Modulus 9%2 Penjumlahan Pengurangan 5+6 6-5

19

Contoh program 5.1:
#include <iostream.h> #include <conio.h> void main() { clrscr(); // untuk membersihkan layar cout<<7 % 7 <<" n "; //sisa 0 cout<<9 % 7 <<" n "; //sisa 2 cout<<13 % 7 <<" n "; // sisa 6 getch(); }

Gambar 5.1 hasil program dengan operator aritmatika 5.3 Operator Bitwise Operator Bitwise adalah manipulasi data dalam bentuk bit. Borland C++ menyediakan enam buah operator bitwise. Contoh Program 5.2:
#include <stdio.h> main() { unsigned x; void displayBits(unsigned); printf( "Ketik bilangan bulat tak bertanda : "); scanf( "%u", &x); displayBits(x); return 0; } void displayBits (unsigned value) { unsigned c, displayMask = 1 << 15; printf ( "%7u = ", value ); for ( c = 1 ; c <= 16 ; c++ ) { putchar ( value & displayMask ? '1' : '0' ) ;

20

if ( c % 8 == 0 ) putchar ( ' ' ); } putchar ( '\n' ); }

Gambar 5.2 hasil program dengan operator bitwise 5.4 Operator penugasan Operator penugasan (Assigment operator)dalam bahasa C++ berupa tanda sama dengan (“=”). Contoh: Nilai = 80; A = x * Y; Artinya : variable”nilai” diisi dengan 80 dan variable”A” diisi dengan hasil perkalian antara x dan y, contoh: Contoh program 5.3:
#include <iostream.h> #include <conio.h> void main() { int nilai; nilai = 70 ;//variable nilai diisi 70 cout << " variable nilai = " << nilai; getch(); }

Gambar 5.3 hasil program dengan operator penugasan 5.5 Operator Relasi Operator relasi digunakan untuk membandingkan antara dua buah nilai atau variable. Operator relasi dalam bahasa C++:

21

Operator Arti < <= > >= == != x==y hasil ungkapan ini bernilai : 1 jika nilai x sama dengan nilai y 0 jika nilai x tidak sama dangan y 5.6 Operator Logika Kurang Dari

Contoh x< td>

Kurang Dari Sama Dengan x<=y (Apakah x kurang dari samadengan y) Lebih Besar x>y (Apakah x lebih dari y)

Lebih Besar Sama Dengan x>=y (Apakah x lebih dari sama dengan y) Sama Dengan Tidak Sama Dengan x==y (Apakah x samadengan y) x!=y (Apakah x tidak samadengan y)

Contoh ungkapan kondisi yang menggunakan operator ralasi:

Operator logika biasa digunakan untuk menghubungkan dua buah ungkapan kondisi menjadi sebuah ungkapan kondisi operator oprator ini ada tiga diantaranya: ? ? ? && :Logika AND(DAN) || : Logika OR (ATAU) !: Logika NOT (TIDAK / BUKAN)

bentuk pemakaian || atau && ungkapan1 dan ungkapan2 ditulis di dalam tanda kurung. Sebagai contoh (a = = c) && (b = = d) atau a = = c && b= = d 5.7 Operator Unary Operator unary merupakan operator yang hanya membutuhkan satu operand saja. Dalam bahasa c++ terdapat beberapa operator unary, yaitu: Operator Unary Operator Arti/Maksud ++ Unary minus Letak Contoh Equivalent

Sebelum operator A+-B*C A+(-B)*C dan A++ A=A=1

Peningkatan dengan penambahan Sebelum

22

Operator Arti/Maksud nilai 1 -Sizeof ! ~ & * Pengurangan pengurangan nilai 1

Letak sesudah dengan Sebelum sesudah dan

Contoh Equivalent

A--

A=A-1

Ukuran dari operand dalam byte Sebelum Unary NOT Bitwise NOT Menghasilkan alamat memory operand Menghasilkan nilai dari pointer Sebelum Sebelum Sebelum Sebelum

Sizeof(I) !A ~A &A *A -

Contoh program 5.4:
#include <iostream.h> #include <conio.h> void main( ) { int x, nilai; clrscr( ) ; x = 6; nilai = ++x; /* berarti x= x+1; nilai =x; */ cout << " nilai x " << nilai << endl; //endl untuk pindah baris nilai = x++; getch ( ); } // berarti nilai =x; nilai = x+1;*/

Gambar 5.4 hasil program dengan operator unary

23

Pertemuan 6
OPERASI DASAR MASUKAN DAN KELUARAN 6.1 Cout Dalam bahasa C++ proses menampilkan suatu data biasa menggunakan beberapa operasi tersedia. Beberapa operasi yang biasanya digunakan adalah: cout dengan menggunakan obyek ini program dapat menampilkan informasi ke standard output (berupa layar) cout << ”saya belajar C++ \n”; cout << ”saya belajar C++ “ << endl; Pada contoh diatas terdapat karakter khusus yang berupa newline penulisan berupa (\n) digunakan untuk pindah baris atau biasa nya menggunakan (endl) juga digunkan untuk pindah baris Contoh program 6.1 :
#include <iostream.h> void main( ) {cout << ” Saya belajar C++ \n ”;}

Gambar 6.1 hasil eksekusi program 6.1 6.2 Cin Obyek ini bermanfaat untuk membaca data dari standard input (keyboard). Dengan meletakan variable bernama var : Contoh Program 6.2 :
#include <iostream.h> #include <iomanip.h> void main( ) {int x; float y; cout << " Masukkan sebuah nilai bulat : ";

24

cin >> x; cout << " Masukkan sebuah nilai desimal : "; cin >> y; cout << " Bilangan bulat " << x << endl; cout << " Bilangan desimal " << y << endl; }

Gambar 6.2 hasil eksekusi program 6.2 6.3 Manipulator Manipulator umumnya digunakan untuk mengatur tampilan data missal untuk mengatur nilai dengan lebar tampilan 10 karakter ada beberapa jumlah manipulator pada C++ diantaranya: Manipulator endl Digunnakan untuk menyisipkan karakter newline. Manipulator ini identik dengan newline Contoh program 6.3 :
#include <iostream.h> void main( ) { int nilai1 = 100 , nilai2 = 90; cout << " nilai1 = " << nilai1 << endl; cout << " nilai2 = " << nilai2 << endl; }

Gambar 6.3 hasil eksekusi program 6.3 Manipulator setw()

25

Manipulator setw() bermanfaat untuk mengatur lebar halaman dari suatu tampilan data.Sebagai contoh,nilai pada progam di bawah ini dapat ditampilkan rata kanan dengan cara sebagai berikut: Contoh program 6.4:
#include <iostream.h> #include <iomanip.h> void main( ) { int nilai1 = 100 , nilai2 = 90; cout << " nilai1 = " << setw(5) << nilai1 << endl; cout << " nilai2 = " << setw(5) << nilai2 << endl; }

Gambar 6.4 hasil eksekusi program 6.4

26

Pertemuan 7

PERNYATAAN DASAR 7.1 If, Else If, dan Else Dalam pembahasan sebelumnya, secara sekilas kita sudah melihat cara penerapan if dan else dalam kode – kode yang kita gunakan. Di sini kita kan mencoba membahasnya lebih lanjut. 7.2 If Seperti namanya, if berarti jika, yang berarti “jika kondisi ini terbukti maka (akan dilakukan sesuatu dalam kondisi seperti ini)”. Dan biasanya if “berpasangan” dengan else. Jadi, dapat dikatakan bahwa secara keseluruhan apa yang dimengerti oleh komputer adalah: “jika kondisi A terjadi, maka saya akan melakukan tindakan A, selain itu maka saya akan melakukan tindakan B”. 7.3 Else Else adalah kondisi selain atau diluar kondisi pertama (if). Salah satu perumpamaan dari “kasus” ini adalah: “jika dia tidak mati, maka dia hidup”. Contohnya: program
#include <iostream.h> void main ( ) { char benda; cout << "masukkan jenis benda (M/H): "; cin >> benda; if (benda == 'M') cout << "benda mati\n"; else cout << "benda hidup \n"; }

Gambar 7.1 hasil program dengan else dan if

27

7.4 Else If else if sebenarnya adalah kondisi kedua yang diperkirakan akan terjadi sedangkan else sebenarnya adalah kondsi terakhir yang diperkirakan akan terjadi. Jika anda perhatikan sebenarnya else adalah untuk semua kondisi selain kondisi pertama. Artinya, jika anda memasukkan huruf selain “M” juga akan diangap hidup. Karena yang terbaca oleh komputer adalah “jika variabel benda “isinya” huruf M, maka benda mati, selain itu dianggap benda hidup”. Jadi, jika anda memasukkan huruf L atau P sekalipun, benda yang anda masukkan akan tetap dianggap benda hidup. Penempatan else if adalah selalu di bawah if karena else if yaitu kondisi selain if. Berikut adalah kode lengkap dari penggunaan if, else if dan else:
#include <iostream.h> #include <string.h> void main () {int pilihan; cout << "selamat datang di restoran kami \n"; cout << "silahan memilih\n"; cout << "1. ayam goreng campur mules\n"; cout << "2. bangkai pesawat adam air dan isinya\n"; cout << "3. sop ayam campur sari\n"; cout << "silahkan masukkan pilihanmu, \n"; cin >> pilihan; if (pilihan == 1) cout << "selamat berlama2 di toilet\n"; else if (pilihan == 2) cout << "wah, selera anda cukup unik ya...?\n"; else if (pilihan == 3) cout << "wah, memang menu ini lagi naik daun disini\n"; else cout << "wah, sepertinya anda tidak bisa membaca ya?\n" << "dari galaksi mana anda?\n";}

28

Gambar 7.2 hasil program dengan else,if dan else if 7.5 Switch Dengan memakai contoh program di atas, kita bisa membuat hasil yang sama dengan kode yang lebih singkat.Kali ini saya akan langsung menunjukkan contoh penggunaan switch.
#include <iostream.h> void main () { int pilihan; cout << "selamat datang di restoran kami \n"; cout << "silahan memilih\n"; cout << "1. ayam goreng campur mules\n"; cout << "2. bangkai pesawat adam air dan isinya\n"; cout << "3. sop ayam campur sari\n"; cout << "masukkan pilihan anda: "; cin >> pilihan; switch (pilihan) {case 1: {cout << "anda memilih nomor satu!\n";break; }case 2: {cout << "anda memilh nomor dua!\n";break; }case 3: {cout << "anda memilih nomor tiga!\n";break; }default:cout << "maaf pilihan anda tidak terdapat dalam menu kami\n";}}

29

Gambar 7.3 hasil program menggunakan switch Mengapa memakai break ? Ini karena disebabkan oleh switch akan mengeksekusi statement di bawahnya jika tidak dikeluarkan oleh break. Jadi, jika tida dikeluarkan oleh break, yang akan terjadi adalah:

Gambar 7.4 hasil program switch jika tanpa break Ini akan terjadi jika kita memasukan angka 1,2 dan 3 (tiga) dan seterusnya. Ini terjadi karena ketika switch selesai mengeskusi case 1, misalnya, tanpa break, maka switch akan terus mengeksekusi statement yang berada di bawahnya sampai selesai. Makanya, break berfungsi untuk keluar dari switch begitu statement pada satu case selesai di eksekusi (tanpa melanjutkan ke statement berikutnya / yang berada di bawahnya).

30

Pertemuan 9

FUNGSI Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Nama ini selanjutnya dapat dipanggil dipanggil beberapa kali dibeberapa tempat dalam program. Tujuan pembuatan fungsi adalah : Memudahkan dalam mengembangkan program. Hal ini merupakan kunci dalam pembuatan program yang terstruktur. Menghemat ukuran program. Manfaat ini terasakan kalau ada beberapa deretan instruksi yang sama digunakan pada beberapa tempatdi dalam program. Umumnya fungsi menerima masukan (disebut argumen atau parameter). Masukan ini selanjutnya diproses oleh fungsi. Hasil akhir berupa sebuah nilai yang disebut nilai balik (return value). 9.1 Prototipe Fungsi Sebuah fungsi tidak dapat dipanggil kecuali sudah dideklarasikan. Untuk melihat hal ini perhatikan contoh berikut : Program 9.1
void main ( ) {printf (“Hai \n”);}

Jika program ini dijalankan, C++ akan memberikan kesalahan yang menyatakan bahwa printf( ) tidak memiliki prototype. Hal seperti ini masih bisa lolos pada bahasa C. Tetapi tidak demikian halnya pada C++. Kesalahan seperti diatas tidak akan terjadi seandainya program ditulis menjadi seperti berikut. Program 9.2 :
#include <stdio.h> void main() {printf (“ Hai \n “);}

31

Gambar 9.1 hasil eksekusi program 9.2 Mengapa? Karena prototipe fungsi printf( ) ada pada file “stdio.h”. Itulah sebabnya diperlukan untuk menyertakan baris berbentuk : #include < nama_file_header > Deklarasi fungsi dikenal dengan sebutan prototipe fungsi. Dan diakhiri dengan titik koma (;), sebagaimana pada pendeklarasian variable. Sebagai contoh : 1). long kuadrat (long l); 2). int maks3 (int a, int b, int c ); 3). double maks (double x, double y ); 4). void garis ( ); Pada contoh pertama, fungsi kuadrat() mempunyai argumen bertipe long dan nilai balik juga bertipe long. Pada contoh kedua, fungsi maks3() memiliki tiga buah argumen, masing-masing bertipe int dan nilai balik juga bertipe int. Adapun contoh ketiga, fungsi maks() mempunyai dua buah argumen, masing-masing argumen bertipe double. Pada contoh keempat, fungsi garis() tidak memiliki argumen dan nilai balik tidak ada (void). Manfaat dari prototipe fungsi adalah untuk menjamin tipe argumen yang dilewatkan pada pemanggilan fungsi benar-benar sesuai. Tanpa adanya prototipe fungsi, amatlah mudah bagi pemrogram untuk melakukan kesalahan tanpa sengaja dalam melewatkan argumen. Misalnya, melewatkan argumen bertipe float pada fungsi yang semestinya meminta tipe data int. Dengan adanya prototipe fungsi, kesalahan semacam itu akan terdeteksi oleh kompiler. 9.2 Definisi Fungsi Setiap fungsi yang dipanggil didalam program harus didefinisikan. Letaknya dapat dimana saja. Khusus untuk fungsi yang disediakan sistem, definisinya sebenarnya ada dalam pustaka, yang akan digabungkan dengan program sewaktu proses linking. Contoh definisi fungsi kuadrat( ): long kuadrat (long l) { return (l * l);

32

} Pada pendefisian fungsi, setelah : long kuadrat (long l) Tidak terdapat tanda titik koma. Ini berbeda dengan prototipe fungsi. Pernyataan return didalam fungsi digunakan untuk memberikan nilai balik fungsi. Pada contoh diatas, fungsi kuadrat() memberikan nilai balik berupa nilai kuadrat dari argumen. contoh fungsi untuk memperoleh nilai terbesar di antara dua bilangan program 9.3 :
#include<iostream.h> #include<conio.h> double maks(double x,double y); //prototie void main() { clrscr(); //hapus layar cout<<maks(65789,123)<<endl; cout<<maks(123,65789)<<endl; } double maks(double x,double y) {if (x > y) return (x); else return (y); }

Gambar 9.2 hasil eksekusi program 9.3 9.3 Lingkup Variabel Pemahaman terhadap lingkup variable didalam penulisan fungsi sangatlah penting, agar tidak salah dalam menggunakan suatu variable. Lingkup variable menentukan keberadaan suatu variable tertentu didalam fungsi. Ada variable yang

33

hanya dikenal disuatu fungsi dan tidak dikenal pada fungsi lain. Namun ada juga variable yang dapat di akses oleh semua fungsi. Jenis variable berdasarkan kelas penyimpanannya, yaitu : 1. Varabel Otomatis (lokal) 2. Variable Eksternal(global). 9.3.1. Varabel Otomatis (lokal). Variabel yang didefinisikan didalam suatu fungsi berlaku sebagai variabel lokal bagi fungsi. Artinya, variable tesebut hanya dikenal didalam fungsi tempat variable didefinisikan. Contoh untuk memperlihatkan efek variabel otomatis (lokal) Program 9.4:
#include<iostream.h> #include<conio.h> void alpha(); //prototipe fungsi void main() {int x = 22; //variable lokal pada main() double y = 2.22; //begitu juga pada variable ini clrscr(); cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl; alpha(); //panggil variable alpha cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl; } void alpha()//definisi fungsi alpha() {int x = 20; //variable lokal pada main() double y=3.14; //begitu juga pada variable ini cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl; }

Gambar 9.3 hasil eksekusi program 9.4

34

9.3.2. Variable Eksternal(global) Variable eksternal adalah varibel yang didefinisikan diluar fungsi manapun. Variable ini dikenal juga sebagai variable global, sebab variable ini dikenal di semua fungsi. Guna memperjelas bahwa suatu variable didalam suatu fungsi merupakan variable eksternal, didalam fungsi yang menggunakannya, kita dapat mendeklarasikan (bukan mendefinisikan, karena tidak ada pengalokasian memori) dengan menambahkan kata kunci extern didepan tipe data. Kata kunci menyatakan bahwa variable tersebut didefinisikan di tempat lain. Contoh program 9.5
#include<iostream.h> #include<conio.h> int oblada = 550; //variable eksternal void tambah(); //prototipe fungsi void main() { clrscr(); //hapus layar cout<<oblada<<endl; tambah(); cout<<oblada<<endl; tambah(); cout<<oblada<<endl; } //definisi fungsi void tambah() { oblada++; //variable eksternal dinaikkan }

35

Gambar 9.4 hasil eksekusi program 9.5 9.4 Referensi Pada C++ referensi digunakan untuk memberikan nama alias dari variable. Bentuk pendeklarasiannya : Tanda & mengawali nama referensi. Setelah pendeklarasian seperti diatas, ref menjadi nama alias dari nama_variable. Pengubahan nilai terhadap nama_variable dapat dilakukan melalui nama_variable itu sendiri ataupun melalui referensi ref. Referensi sangat berguna untuk melewatkan struktur atau obyek yang besar kedalam fungsi. Dengan memakai referensi untuk parameter, hanya alamat yang akan dilewatkan dan bukan struktur atau obyek itu sendiri. Keuntungannya : Menghemat stack (untuk meletakkan argumen ke stack pada saat pemanggilan fungsi). Selain itu akan membuat argumen struktur atau obyek gampang dipakai didalam fungsi itu sendiri. contoh untuk memperlihatkan alamat variabel alamat referensi program 9.6:
#include<iostream.h> #include<conio.h> void main() { int i = 55; int &r = i; //referensi clrscr(); //hapus layar cout<<”Alamat : i = “<<&i<<” r =”<<&r<<endl; }

Gambar 9.5 hasil eksekusi program 9.6

36

9.5 Rekursi Rekursi atau recursion dalam matematika dan ilmu komputer diartikan sebagai fungsi yang dalam definisinya mengimplementasikan dirinya sendiri. Untuk lebih mudahnya, bisa dikatakan bahwa rekursi adalah fungsi yang memanggil dirinya sendiri. Namun demikian, rekursi tidaklah hanya merupakan istilah eksak semata. Jika kita mau memperhatikan lagi dengan lebih teliti, ternyata ada banyak contoh rekursi di sekeliling kita. Rekursi dalam dunia nyata bisa terjadi salah satunya adalah jika kita meletakkan dua cermin secara berhadapan dan sejajar. Bayangan yang terjadi pada kedua cermin itulah rekursi. Dalam dunia matematika dan komputer, rekursi khususnya digunakan untuk menyelesaikan perhitungan yang rumit dan kompleks. Prinsip rekursi sebenarnya sederhana, yaitu memecah masalah menjadi masalah-masalah yang lebih kecil. Dengan memecah masalah menjadi bagian-bagian yang lebih kecil tersebut, masalah yang sangat kompleks dan rumit sekalipun akan lebih mudah untuk diselesaikan. Contoh paling populer implementasi rekursi adalah penyelesaian perhitungan faktorial dari suatu bilangan bulat (integer number). Dalam matematika, faktorial didefinisikan sebagai berikut:

dan Sehingga didapat misalnya nilai faktorial dari bilangan 5 dan 6 adalah sebagai berikut: dan Perhatikan contoh source code yang ditulis dalam bahasa pemrograman C++ berikut. Source code berikut adalah contoh penyelesaian komputasi faktorial menggunakan teknik rekursi.

37

Program 9.7:
#include <iostream.h> typedef unsigned int UINT; long Factorial(UINT aNumber) { if (aNumber == 0) return 1; return aNumber*Factorial(aNumber-1); } int main() { std::cout << Factorial(5); return 0; }

Gambar 9.6 hasil eksekusi program 9.7

38

Pertemuan 10
ARRAY (VARIABEL BERINDEKS) Variabel dengan tipe data tunggal (skalar) hanya dapat digunakan untuk menyimpan sebuah nilai saja, sehingga untuk menyimpan beberapa nilai sekaligus dalam suatu variabel khusus yang disebut dengan variabel array atau variabel berindeks. Variabel array dapat digunakan untuk menampung banyak data yang sejenis (numerik/string). 10.1 Array 1 Dimensi Tanda [] disebut juga “elemen yang ke... Misalnya kondisi[0] berarti elemen yang ke nol. Array yang sudah dipesan, misalnya 10 tempat tidak harus diisi semuanya, bisa saja hanya diisi 5 elemen saja, baik secara berurutan maupun tidak. Namun pada kondisi yang tidak sepenuhnya terisi tersebut, tempat pemesanan di memori tetap sebanyak 10 tempat, jadi tempat yang tidak terisi tetap akan terpesan dan dibiarkan kosong. Contoh program 10.1
#include <stdio.h> #include <conio.h> void main() { int nilai[10], x; clrscr(); printf("Memasukkan nilai :\n"); for(x=0;x<5;x++) { printf("Nilai Angka : "); scanf("%d",&nilai[x]); } printf("\n"); printf("Membaca nilai :\n"); for(x=0;x<5;x++)

39

{ printf("Nilai Angka : %d",nilai[x]); } getch(); }

Ganbar 10.1 hasil eksekusi program 10.1 Terlihat bahwa alamat array berurutan dengan jarak antar alamat adalah 4 bytes (integer berukuran 4 bytes) Contoh program 10.2 (inisialisasi dengan 0):
#include <stdio.h> #include <conio.h> int main(){ int bil[7] = {0}; //inisialisasi 0 for(int i=0;i<7;i++){ printf("Elemen ke-%i = %d\n",i,bil[i]); } getch(); return 0; }

Gambar 10.2 hasil eksekusi program 10.2

40

10.2 Array Berdimensi Dua dan Operasi Matrik Array berdimensi 2 sering digunakan dalam operasi matrik. Array berdimensi 2 terdiri atas 2 elemen yaitu baris dan kolom. Matrik adalah daftar bilangan yang disusun dalam bentuk dua dimensi kolom dan baris. Nilai-nilai dalam matrik disebut dengan elemen matrik. Pada suatu program komputer, suatu matriks disimpan pada array berdimensi 2. Indeks dari matrik menunjukkan nomor elemen dari matriknya. Contoh program 10.3:
#include <stdio.h> #include <conio.h> void main() { int x[3][3]={{1,2,3},{4,5,6},{7,8,9}},b,k; clrscr(); for(b=0 ; b<3 ; b++) for(k=0 ; k<3 ; k++) printf("x[%d][%d] = %d\n",b,k,x[b][k]); for(b=0 ; b<3 ; b++) for(k=0 ; k<3 ; k++) { gotoxy(20+(k+1)*2,b+1); printf("%d",x[b][k]); } getch(); }

Gambar 10.3 hasil eksekusi program 10.3

41

Pertemuan 11 STRING

11.1 Pengantar String String sangat memudahkan tugas pemogram. Dengan menggunakan string, pemogram dapat menampilkan pesan kesalahan, menampilkan prompt bagi masukan keyboard ataupun memberikan informasi pada layar dengan mudah. Seperti halnya tipe data yang lain, string dapat berupa konstanta atau variabel. Konstanta string sudah biasa anda sertakan pada program. Misalnya pada pernyataan : cout << "C++"<<endl; terdapat konstanta string "C++". Tetapi sejauh ini, variabel string belum diperkenalkan. 11.2 Konstanta String Suatu konstanta string ditulis dengan awalan dan akhiran tanda petik ganda(" "), misalnya: "C++". Konstanta string seperti diatas disimpan dalam memori secara berurutan. Setiap karakter menempati memory 1 byte. Setelah karakter yang terakhir terdapat karakter Null (karakter dengan nilai ASCII sama dengan nol atau disimbolkan dengan "\0", yaitu tanda \ dikuti dengan nol). Bila suatu string hanya berisi karakter NULL, string disebut sebagai string kosong. 11.3 Memasukan Data String Setelah suatu variabel string didefinisikan, Anda bisa mengisikan data ke variabel tersebut. Pemasukan data dapat ditangani oleh data cin, seperti contoh program 11.1 :
#include<iostream.h> #include<conio.h> void main()

42

{

char teks[13]; //string dengan panjang maksimal 12 karakter clrscr(); cout<<"Masukan sebuah kata :"<<endl; cin>> teks; cout<< "Kata yang tercetak :"<<teks;

}

Gambar 11.1 hasil eksekusi program 11.1 Yang perlu diperhatikan adalah bahwa cin hanya dapat membaca sebuah kata. Artinya karakter-karakter yang terletak sesudah spasi tidak bisa ditampung pada teks. Ini disebabkan operator << pada cin hanya bisa membaca masukan hingga terdapat spasi, tab atau enter. Untuk menampilkan agar dapat terbaca solusinya adalah menambahkan fungsi get() pada objek cin (cin.get()) bisa dipakai untuk keperluan ini. Sebagai contoh seperti program 11.2 :
#include<iostream.h> #include<conio.h> void main() { char teks[13]; //string dengan panjang maksimal 12 karakter clrscr(); //hapus layar cout<<"Masukan sebuah kata :"<<endl; cin.get(teks, 13); cout<< "Kata yang tercetak } :"<<teks;

Gambar 11.2 hasil eksekusi program 11.2 Tampak, bahwa karakter yan terletak sesudah spasi juga ikut disimpan pada teks. Sekarang kita lihat kalau data yang dimasukan lebih dari 13 karakter

43

maka hanya 12 karakter pertama yang disimpan pada teks, mengingat argumen kedua dari fungsi get() diisi dengan 13 (satu karakter berisi Null). Pada contoh program di atas dapat ditulis sebagai berikut : cin.get(teks, 13) Bisa juga ditulis sebagai berikut : cin. Get(teks, sizeof(teks)); 11.4 Fungsi untuk string 11.4.1Fungsi getline() Suatu masalah akan timbul kalau cin.get() digunakan 2 kali seperti contoh program 11.3i
#include<iostream.h> #include<conio.h> void main() { char nama[25]; char alamat[35]; clrscr(); cout<<"Masukan Nama :"<<endl; cin.get(nama, sizeof(nama)); cout<< "Masukan Alamat :"<<endl; cin.get(alamat,sizeof(alamat)); cout<<"Nama:"<<nama<<endl; cout<<"Alamat:"<<alamat<<endl; }

Gambar 11.3 hasil eksekusi program 11.3 Pada contoh di atas cin.get() pertama digunakan untuk membaca nama yang kedua untuk membaca alamat. Ternyata program tidak memberikan kesempatan untuk mengisi alamat. Hal ini terjadi karena get() yang pertama tidak membuang kode newline(\n). Oleh karena get() tidak mengabaikan spasi putih( spasi, tab , atau newline) maka get() kedua menjadi tidak berfungsi sebagaimana

44

mestinya. Cara untuk menyelesaikan masalah di atas dengan menggunakan fungsi getline(), karena fungsi ini dapat membuang sisa data yang tidak dibaca, termasuk newline itu sendiri. Pada contoh berikut, get() diganti dengan getline(). Contoh program 11.4:
#include<iostream.h> #include<conio.h> void main() { char nama[25]; char alamat[35]; clrscr(); //hapus layar cout<<"Masukan Nama :"<<endl; cin.getline(nama, sizeof(nama)); cout<< "Masukan Alamat :"<<endl; cin.getline(alamat,sizeof(alamat)); cout<<"Nama:"<<nama<<endl; cout<<"Alamat:"<<alamat<<endl; }

Gambar 11.4 hasil eksekusi program 11.4 Tampak bahwa dengan menggunakan getline(), data alamat dapat diisi. 14.1.2Fungsi strcpy Bentuk dari dari strcpy() : strcpy(string_target,string_awal) Prototipe fungsi di atas ada pada file header string.h Contoh program 11.5 menggunakan strcpy():
#include<iostream.h> #include<conio.h> #include<string.h> void main() {

45

char teks[]="C++ Oke"; char data [25]; clrscr(); //hapus layar strcpy(data,teks); // mengcopy isi teks ke data cout<<"Isi data :"<<data<<endl; }

Gambar 11.5 hasil eksekusi program 11.5 11.1.3 Fungsi toupper dan tolower Fungsi toupper() berguna untuk memperoleh huruf kapital dari suatu huruf kecil. Nilai balik dari fungsi ini akan berupa seperti argumennya kalau argumen tidak berisi huruf kecil. Adapun fungsi tolower() adalah kebalikan dari toupper(). Fungsi ini memberikan nilai balik : v Berupa huruf kecil kalau argumen berisi huruf kapital v Berupa nilai seperti argumen kalau argumen tidak berupa huruf kecil Kedua fungsi di atas memberikan nilai balik bertipe int dan memiliki protipe pada file ctype.h Contoh program 11.6 :
#include<iostream.h> #include<conio.h> #include<ctype.h> void main() { char st[]="saya suka C++"; clrscr(); //hapus layar for(int i=0; st[i];i++) st[i]= toupper(st[i]); cout<<st<<endl; }

Gambar 11.6 hasil eksekusi program 11.6

46

Pada contoh di atas, st[i]= toupper(st[i]); menyebabkan setiap huruf kecil pada variabel st akan diganti dengan huruf kapital. 11.1.4 Fungsi strlen() Panjang suatu string dapat diketahui dengan mudah menggunakan fungsi strlen(). Misalnya saja, didefinisikan : char bunga[15]= "mawar"; int panjang; Maka pernyataan yang menggunakan strlen : panjang = strlen(bunga); akan memberikan panjang string yang tersimpan pada variabel bunga ke panjang. Contoh program 11.7:
#include<iostream.h> #include<conio.h> #include<string.h> void main() { char bunga[15]="mawar"; char kosong[23]=""; clrscr(); //hapus layar cout<<strlen(bunga)<<endl; cout<<strlen(kosong)<<endl; }

Gambar 11.7 hasil eksekusi program 11.7 11.1.5 Fungsi strlwr() dan strupr Jika isi semua huruf kapital pada suatu string dinginkan untuk diubah menjadi huruf kapital, hal ini dapat dilakukan melalui fungsi strlwr(). Misalnya, didefinisikan :

47

char st[]="AbCdEfGeHjKl"; Maka st akan berisi : "abcdefgehjki"; Sedangkan fungsi strupr() kebalikan dari fungsi strlwr(). Kedua fungsi di atas sama seperti tolower dan toupper. Contoh program 11.8 untuk memperlihatkan efek strlwr() dan strupr() :
#include<iostream.h> #include<conio.h> #include<string.h> void main() { char st[]="AbCdEfGhIjKl"; clrscr(); //hapus layar cout<<"Isi St mula-mula:"<<st<<endl; strlwr(st); cout<<"Isi setelah dikonversi strlwr: "<<endl; cout<<st<<endl; strupr(st); cout<<"Isi setelah dikonversi strupr: "<<endl; cout<<st<<endl; }

Gambar 11.8 hasil eksekusi program 11.8

48

Pertemuan 12

POINTER
12.1 Pengertian Pointer Pada pertemuan kali ini, kita akan membahas powerful feature dari bahasa pemograman C/C++, yaitu pointer. Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Pointer merupakan variabel level rendah yang dapat digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung oleh bahasa C. Variabel biasa, sifatnya statis dan sudah pasti, sedangkan pada pointer sifatnya dinamis dan dapat lebih fleksibel. Variabel pointer yang tidak menunjuk pada nilai apapun berarti memiliki nilai NULL, dan disebut sebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi. 12.2 Alamat pointer Operator atau alamat. Pada saat pendeklarasian variable, pengguna tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh : ted = &andy; Penulisan tersebut berarti akan memberikan variable ted alamat dari variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb : andy = 25;

49

fred = andy; ted = &andy; Maka hasilnya

Gambar 12.1 12.3 Variabel Pointer Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar di bawah ini

50

px zzzz 1000

Address ? 1000 x

Gambar 12.2 Variabel pointer px menunjuk ke variabel x Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan. Bentuk Umum : tipe_data *nama_pointer; Contoh char *huruf; Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya. 12.5 Nilai yang di tunjuk pointer untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, juga digunakan operator * (tanda asterisk). Jika diinginkan untuk menampilkan alamat tempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakan operator & (tanda ampersand). 12.6 void pointer Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya. 12.7 Memory pointer Salah satu konsep yang menyebabkan banyak programer baru tak berujung frustrasi adalah pointer. Ini didasarkan pada konsep bahwa setiap variabel : int *nilai;

51

memiliki lokasi penyimpanan di memori. Sebelum kita berbicara tentang pointer, kita akan melihat bagaimana sebuah memori komputer bekerja. Memori terdiri, pada tingkat terendah, sekelompok bit yang dapat baik 1 atau 0. Bit ini agak terlalu kecil untuk individual berguna, dan itu akan sangat tidak praktis untuk mengaksesnya satu per satu waktu. Sebagai hasilnya, mereka biasanya diakses dalam potongan. Pada komputer pribadi, mereka biasanya diakses dalam potongan dari 8 bit. Tidak ada yang terlalu istimewa 8. Sebuah sistem dapat dengan mudah bekerja dengan potongan dari 9, 12, 16 atau 32 bit. Untuk tutorial ini, kita akan menggunakan 8 bit. Apapun sistem bekerja dengan disebut sebagai blok addressable terkecil memori. Karena kita menggunakan 8 bit pada contoh kita, itu berarti setiap variabel akan menggunakan satu atau lebih blok dari 8 bit. Akibatnya, urutan dari beberapa blok memori akan terlihat seperti ini: Kode: |........||........||........||........| 01 02 03 04 Gambar 12.3 Setiap blok bit diberikan nomor (alamat memori). Sebuah variabel di C + + akan menempati satu atau lebih blok memori. Untuk keperluan bekerja dengan memori, sebuah char didefinisikan untuk menduduki 1 blok (minimum 8 bit). Variabel lain menempati kelipatan yang banyak blok. Untuk keperluan tutorial ini, sebuah char akan menempati 1 dari blok memori di atas (seperti 01). Sebuah int akan menempati 2 blok memori yang berdekatan (seperti 01 dan 02, atau 03 dan 04). Ganda akan menempati 4 blok memori yang berdekatan (01, 02, 03, dan 04). Mengingat semua itu, perhatikan kode berikut: Kode:
int main() { int int1=5; double double1=3.14; int int2=10; char cha1='A',cha2='2';

52

return 0; }

Jika anda melihat diagram tentang bagaimana variabel-variabel yang disimpan dalam memori, ini mungkin terlihat seperti ini (. Adalah 2 bits): Kode: |int1....||double1.........||int2....||cha1||cha2| 02&03 04-07 08&09 10 11 Melihat ini, lokasi dari variabel-variabel dapat berupa: INT1: 02, double1: 04, int2: 08: cha1: 09, cha2: 10. Perhatikan bahwa saya tidak mengatakan apa-apa tentang apa yang masing-masing variabel berisi, di mana mereka berada. Juga perhatikan bahwa char adalah ukuran 1 (seperti biasa), dan bahwa aku mengasumsikan bahwa int adalah ukuran 2, dan double adalah ukuran 4. Jumlah bit dalam ukuran 1 adalah sering 8, tapi benar-benar tergantung pada arsitektur perangkat keras. Tujuan dari pointer adalah untuk menyimpan alamat-alamat ini dan memberikan kami akses ke variabel berdasarkan alamat mereka. Anda membuat petunjuk sebagai berikut: Kode:
int main() { int int1=5; double double1=3.14; int int2=10; char cha1='A',cha2='2'; int* intptr = &int1; double* dptr = &double1; char* charptr = &cha1; return 0; }

Alamat di depan INT1 mengembalikan alamat INT1, dalam hal ini 02. Jadi intptr berisi 02, dptr berisi 04, dan charptr berisi 09. The * dalam deklarasi variabel menunjukkan bahwa variabel pointer ke jenis di depan *. Pada titik ini, hal itu mungkin tampak konyol untuk menggunakan pointer bukan hanya menggunakan variabel. Besar, kita dapat menyimpan lokasi memori. Jadi apa?

53

Satu hal yang dapat kita lakukan adalah menggunakan pointer untuk mendapatkan akses ke variabel apa toko. Kita melakukan ini dengan * operator (dereferencing). Itu berarti * intptr akan kembali 5, sementara intptr akan kembali 02. Hal lain yang dapat Anda lakukan adalah menggunakan + dan - pada pointer ke langkah maju atau mundur melalui memori. Jarak 1 akan bergerak melalui memori tergantung pada jenis memori pointer memandang. Sejak intptr terlihat di ints (dalam hal ini ukuran 2 (biasanya 16 bit)), jika intptr berisi 02, kemudian intptr + 1 akan kembali 04 (satu int maju). Sejak dptr terlihat di ganda (dalam hal ini ukuran 4), jika dptr berisi 04, dptr 1 akan kembali 08 (satu ganda maju). Pada titik ini, Anda mungkin berpikir hal ini berarti Anda dapat menggunakan intptr untuk mengakses ganda. Anda tidak bisa. intptr + 1 akan mengakses double1 paruh pertama. Hasilnya akan tergantung pada arsitektur yang mendasari. Demikian pula, dptr + 1 akan menafsirkan semua int2, cha1, dan cha2 sebagai ganda. Nilai utama dari pointer adalah menerima dan bekerja dengan array dalam fungsi. Perhatikan kode berikut: Kode:
#include <iostream.h> void loadarray(int* thearray) { for (int i=0;i<10;i++) thearray[i]=i; } void printarray(int* thearray) { for (int i=0;i<10;i++) std: cout<<"element"<<i<<" "<<*(thearray+i)<<"\n"; } int main() { int myarray[10]; loadarray(myarray); printarray(myarray); }

54

Gambar 12.4 Pada pembahasan pertama, mungkin muncul bahwa kami melewati sebuah integer ke load array. Ini tidak terjadi. myarray adalah sebuah array dari ints, tetapi istilah myarray sebenarnya adalah sebuah pointer ke int pertama dalam array. Ketika loadarray menerima bahwa pointer, kemudian dapat menggunakan pointer int thearray seperti nama array (ya, kami memiliki dua pointer menunjuk ke elemen pertama dari array). [] operator akan menafsirkan array itu nama sebagai array dan menemukan elemen yang benar berdasarkan indeks. Penggunaan array yang lain adalah untuk menciptakan variabel pada saat run-time. Dalam keadaan normal, anda harus menyatakan apa yang variabel dalam kode Anda akan bekerja dengan. Kadang-kadang, bagaimanapun, anda tidak tahu. Ketika Anda sedang membaca sebuah file, Anda tidak tahu seberapa besar itu, sehingga Anda tidak dapat menjelaskan ukuran di muka. Berhasil membacanya, Anda akan perlu untuk mengambil memori yang diperlukan. Kode:
int main() { int* intptr = 0; intptr = new int; intptr = new int; *intptr = 5; delete intptr; }

55

12.7 Pointer Penunjuk Pointer (pointer to pointer) Suatu pointer bisa saja menunjuk ke pointer lain. Gambar berikut memberikan contoh mengenai pointer menunjuk pointer. Pointer ptr1 alamat ptr1 Pointer ptr2 alamat ptr1 Variabel var_x nilai

Gambar 12.5 Pointer yang menunjuk pointer Untuk membentuk rantai pointer seperti pada gambar di atas, pendeklarasian yang diperlukan berupa int var_x; int *ptr1; int **ptr2; Perhatikan pada deklarasi di depan: var_x adalah variabel bertipe int. Ptr1 adalah variabel pointer yang menunjuk ke data bertipe int. Ptr2 adalah variabel pointer yang menunjuk ke pointer int. (itulah sebabnya deklarasinya berupa int **ptr2; ) Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa ptr1 = &var_x; Sedangkan supaya ptr2 menunjuk ke ptr1, instruksi yang diperlukan adalah ptr2 = &ptr1; Contoh berikut memberikan gambaran cara pengaksesan nilai pada var_x melalui pointer ptr2 dan ptr1. Contoh program untuk pointer yang menunjuk pointer
#include <stdio.h> main() { int var_x = 273; int *ptr1; int **ptr2; ptr1 = &var_x; ptr2 = &ptr1; printf(”Nilai var_x = %d\n”, *ptr1); printf(”Nilai var_x = %d\n”, **ptr2); }

56

Gambar 12.6

57

Pertemuan 13

STRUKTUR DAN ENUM 13.1 Struktur Nilai pada dasarnya struktur jenis. Mereka didefinisikan dengan menggunakan kata kunci struct. Anda dapat mengakses variabel di dalam struktur dengan menciptakan sebuah objek dari struktur. Satu-satunya perbedaan adalah bahwa Anda tidak harus menggunakan sintaks untuk membuat objek dari sebuah kelas, 13.2 UNION Sama seperti struct, union juga merupakan tipe data yang dibangkitkan, dimana anggota-anggotanya menggunakan secara bersama-sama ruang penyimpanan memori yang sama, berbeda dengan struktur yang masing-masing variabel menempati lokasi memori yang berbeda. Jumlah bytes yang digunakan untuk menyimpan union adalah sedikitnya cukup untuk menyimpan data terbesar yang ditangani. Oleh karena itu, tipe union ini umumnya digunakan untuk menangani satu, dua, atau tiga variabel dengan tipe yang mirip. Sebagai contoh: union nilaiUjian { int uts, uas; float akhir; } 13.3 Bitfield Suatu bit atau beberapa bit dalam sebuah data berukuran satu byte atau dua byte dapat diakses dengan mudah melalui bitfield. Dengan cara ini, suatu bit atau beberapa bit dapat diakses tanpa melibatkan operator pemanipulasi bit (seperti &, |). Selain itu, satu atau dua byte memori dapat dipakai untuk menyimpan sejumlah informasi.

58

Sebagai contoh, untuk memperoleh informasi masing-masing bit dari suatu data satu byte, penulisan medan bit berupa struct info_byte { unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned }; Jika disajikan dalam bentuk gambar, gambaran suatu struktur yang memiliki tipe seperti di atas adalah sebagai berikut : 7 6 5 4 3 2 1 0 bit bit0:1; bit1:1; bit2:1; bit3:1; bit4:1; bit5:1; bit6:1; bit7:1;

b i t 7

b i t 6

b i t 5

b i t 4

b i t 3

b i t 2

b i t

b i t

1 0

Gambar Susunan bit dari memori sebuah data bertipe info_byte Pada pendefinisian struktur info_byte di atas, • • Nilai 1 setelah tanda titik-dua (:) menyatakan panjang dari bitfield unsigned menyatakan bahwa bitfield dinyatakan dalam keadaan tak(untuk contoh berikutnya, nantinya setiap bitfield memiliki

bertanda

kemungkinan nilai berkisar 1 atau (0).

nama tipe struktur yang terdiri atas sejumlah bitfield struct info_byte { unsigned bit0:1;

59

unsigned unsigned unsigned unsigned unsigned unsigned unsigned };

bit1:1; bit2:1; bit3:1; bit4:1; bit5:1; bit6:1; bit7:1; panjang/jumlah bit nama variabel bitfield

sebuah variabel bitfield haruslah dideklarasikan berupa salah satu di antara int,unsigned dan signed. Contoh berikut memberikan gambaran tentang cara memberikan nilai kepada variabel struktur yang mengandung elemen berupa bitfield, dan cara mengakses setiap nilai dari bitfield. Program 13.1 Bitfield utk menampilkan bentuk biner dr karakter masukan :
#include <stdio.h> main() {struct info_byte { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; }; /* deklarasi variabel union dan elemen bitfield */ union { unsigned char karakter; struct info_byte byte; } ascii; /* bit ke-0 */ /* bit ke-1 */ /* bit ke-2 */ /* bit ke-3 */ /* bit ke-4 */ /* bit ke-5 */ /* bit ke-6 */ /* bit ke-7 */ /* definisi tipe bitfield */

60

printf(“Masukkan sebuah karakter : ”); scanf(“%c”, &ascii.karakter); printf(“\nKode ASCII dari karakter %c adalah %d\n”, ascii.karakter, ascii.karakter); printf("Bentuk biner dari nilai %d adalah ", ascii.karakter); printf("%d%d%d%d%d%d%d%d\n",ascii .byte.bit7, ascii.byte.bit6, ascii.byte.bit5, ascii.byte.bit4, ascii.byte.bit3, ascii.byte.bit2, ascii.byte.bit1, ascii.byte.bit0); }

Gambar 13.1 hasil eksekusi program 13.1 Pada program di atas, setelah pernyataan : scanf(“%c”, &ascii.karakter); dan user memasukkan karakter : ‘A’ , berarti nilai ascii.karakter = ‘A’.Maka hal itu memberikan efek elemen byte juga akan bernilai seperti data pada memori yang sama. karakter, sebab byte dan karakter berbagi

Namun, walaupun adanya sifat demikian, pernyataan : ascii.byte = 'A';, akan dianggap salah (saat kompilasi), sebab suatu variabel struktur yang mengandung elemen bitfield memang tidak diijinkan untuk diberi nilai secara langsung. Pengaksesan nilai dapat dilakukan melalui variabel bitfield, misalnya : printf("%d", ascii.byte.bit7); untuk mengambil nilai dari bitfield bit 7. Contoh lain ascii.byte.bit7 = 0; untuk mengubah bit7 agar bernilai 0. Kalau di depan sudah dibicarakan bitfield dengan panjang 1 bit, contoh berikut akan memberikan gambaran tentang bitfield dengan panjang 2 bit. struct data_gambar { unsigned unsigned unsigned unsigned piksel1:2; piksel2:2; piksel3:2; piksel4:2;

61

} koord; Pada contoh di atas, variabel koord yang bertipe data_gambar akan menempati memori 1 byte (8 bit) dengan 4 informasi terkandung di dalamnya (masing-masing 2 bit), atau memegang nilai bulat antara 0 sampai dengan 3 (22 – 1). Untuk memberikan nilai kepada piksel1 misalnya, bisa digunakan pernyataan sebagai berikut : koord.piksel1 = 3; yang mengisikan 3 ke dalam bitfield tersebut. Bitfield biasanya dipakai untuk menghemat memori. Misalnya ada dua informasi dengan keterangan sebagai berikut : informasi pertama (info_x) memiliki kemungkinan nilai bilangan bulat antara 0 sampai dengan 3, dan informasi kedua (info_y) memiliki kemungkinan nilai bilangan bulat 0 atau 1 saja. Seandainya kedua informasi itu disimpan dalam memori (secara terpisah) sebagai tipe char, maka akan diperlukan total memori sebesar 2 byte. Namun jika disajikan dalam bentuk bitfield, memori yang dibutuhkan cukup 1 byte. Dalam hal ini info_x akan dinyatakan dalam 2 bit dan info_y dinyatakan dalam 1 bit. deklarasinya adalah sebagai berikut : struct info { unsigned info_x:2; unsigned info_y:1; } status; atau struct info { unsigned info_x:2; unsigned info_y:1; unsigned } status; :5; Penuangan

62

Pada pendeklarasian terakhir : Unsigned :5; fungsinya hanya untuk memperjelas bahwa total bit dari bitfield adalah 8 bit (1 byte). Perhatikan, bahwa karena 5 bit terakhir tidak diperlukan, maka nama bitfield boleh tidak disertakan. Kalaupun mau diberi nama (misalnya : kosong), maka bentuk deklarasinya adalah : struct info { unsigned info_x:2; unsigned info_y:1; unsigned kosong:5; } status; program 13.2:
#include <stdio.h> main() { /* definisi tipe bitfield */ struct info {unsigned info_x:2; unsigned info_y:1; unsigned kosong:5; } status; status.info_x = 3; status.info_y = 1; printf("info_x = %d\n", status.info_x); printf("info_y = %d\n", status.info_y); } /* bisa dihilangkan */

Gambar 13.2

63

13.4 ENUM ENUM adalah sebuah mekanisme pemetaan nomor telepon Telkom yang kita kenal, seperti, +628113334567 atau +62555334567, agar di kenali di dunia VoIP yang menggunakan nomor telepon, seperti, 20333@voiprakyat.or.id atau 5007987@fwd.pulver.com. Jadi sebetulnya isi sebuah ENUM hanya tabel saja. Tentunya konsep ENUM tidak terbatas pada pemetaan saja, dengan menggunakan ENUM sebuah nomor telepon +6255534567 dapat mempunyai beberapa pesawat penerima dengan sistem prioritas, misalnya, +6255534567 +6255534567 +6255534567 +6255534567 +6255534567 prioritas 1 prioritas 2 prioritas 3 prioritas 4 prioritas 5 245678@voiprakyat.or.id 6543686@fwd.pulver.com +62215678976 (nomor kantor) +62856789654 (nomor handphone) mail:oknum@salemba.co.id

Dalam bahasa yang lebih manusiawi, jika seseorang berusaha menelepon ke +6255534567 akan diusahakan untuk menghubungi ke VoIP Rakyat 245678@voiprakyat.or.id, jika gagal maka akan berusaha menghubungi nomor VoIP di Pulver 6543686@fwd.pulver.com, jika gagal maka akan berusaha menghubungi kantor di +62215678976, jika gagal lagi maka akan berusaha menghubungi handphone di +62856789654. Terakhir jika semua cara gagal, apa boleh buat masuk ke voice mail untuk oknum@salemba.co.id. Cara penulisan ENUM di Internet, misalnya menggunakan top level domain e164.id, adalah sebagai berikut +6255512345678 +6281812345678 yang kita kenal biasa. Contoh ENUM Salah satu contoh ENUM yang paling baik adalah e164.org, kita dapat mendaftarkan diri secara automatis dengan mekanisme authentikasi yang baik dengan cara menelepon nomor telepon yang akan di mapping ke account VoIP. 8.7.6.5.4.3.2.1.5.5.5.2.6.e164.id 8.7.6.5.4.3.2.1.8.1.8.2.6.e164.id

perhatikan nomor ENUM mempunyai urutan terbalik dari nomor telepon

64

Tentunya e164.org bukan satu-satunya ENUM server di dunia. Rekan-rekan VoIP Rakyat-pun mengembangkan ENUM sendiri yang dapat di akses di http://www.enum.voiprakyat.or.id. Tampilan maupun menu ENUM VoIP Rakyat akan secara berangsur-angsur berubah dengan akan di adakannya ENUM Indonesia yang menggunakan domain e164.id. Jika e164.id sudah berjalan dengan baik, maka akan digunakan delegasi dari ARPA menggunakan domain 2.6.e164.arpa untuk kode negara +62 (Indonesia).

65

Pertemuan 14 TYPE
14.1 Tipe Data Integer ( Bilangan Bulat ) Integer merupakan tipe data numerik yang digunakan apabila tidak berurusan dengan pecahan atau bilangan desimal. Tipe data numerik yang termasuk integer adalah sebagai berikut : 14.2 Tipe Deskripsi Byte Memiliki nilai integer dari -128 sampai +127 dan menempati 1 byte ( 8 bits ) di memori. Short Memiliki nilai integer dari -32768 sampai 32767 dan menempati 2 bytes ( 16 bits ) di memori Int Memiliki nilai integer dari 2147483648 sampai 2147483647 dan menempati 4 bytes ( 32 bits ) di memori Long Memiliki nilai dari -9223372036854775808 sampai 9223372036854775807 dan menempati 8 bytes ( 64 bits ) di memori Bilangan integer biasanya menggunakan int, dan bukan byte, short maupun long. Bilangan integer juga mengenal nilai positif dan negatif ( signed number ). Tipe data byte dan short hanya digunakan pada aplikasi khusus yang memperhatikan penggunaan memori. Sedangkan long jarang digunakan karena jarang memerlukan bilangan sebesar kapasitas long. 14.3 Floating Point ( Bilangan Pecahan ) Floating Point digunakan untuk menangani bilangan desimal atau perhitungan yang lebih detail dibanding integer. Ada dua macam floating point, yaitu : 1. Tipe deskripsi 2. Tipe data referensi

66

14.3.1 Tipe Deskripsi Float memiliki nilai -3.4x108 sampai +3.4x108 dan menempati 4 byte di memori Double memiliki nilai -1.7x10308 sampai +1.7x10308 Semua bilangan pecahan atau desimal dalam Java tanpa diakhiri huruf f akan dianggap sebagai double. Sedangkan bilangan yang ingin dikategorikan sebagai float harus diakhiri dengan huruf F. Misalnya : 4.22 F atau 2.314f. Sedangkan untuk bilangan double, bisa menambah dengan huruf D, karena secara default bilangan dengan koma atau pecahan atau desimal akan dianggap sebagai double. 14.3.1.1 Char Char adalah karakter tunggal yang didefinisikan dengan diawali dan diakhiri dengan tanda ‘ ( petik tunggal ). Char berbeda dengan String, karena String bukan merupakan tipe data primitif, tetapi sudah merupakan sebuah objek. Tipe char mengikuti aturan unicode, sehingga dapat menggunakan kode /u kemudian diikuti bilangan dari 0 sampai 65535, tetapi yang biasa digunakan adalah bilangan heksadesimal dari 0000 sampai FFFF. Misalnya : ‘\u123’ Selain karakter biasa, juga terdapat karakter khusus yang didefinisikan dengan cara mengawalinya menggunakan tanda . 14.3.1.2 Tipe Data Referensi Kelebihan pemrograman berorientasi objek adalah dapat mendefinisikan tipe data baru yang merupakan objek dari class tertentu. Tipe data ini digunakan untuk mereferensikan objek atau class tertentu, seperti String.

67

BAB IV PENUTUP A. Kesimpulan
Dari pembahasan di atas dapat kita ketahui sejarah lahirya komputer yang semula berukuran panjang setengah bola kaki dan menghabiskan daya yang sangat besar hingga ditemukanya suatu alat yang diberinama transistor yang mampu merubah perkembangan komputer hingga menjadi seperti saat ini. Untuk membuat suatu program yang bisa dimengerti kita dapat mengambarkan program tersebut dengan suatu flowchart yang mencakup seluruh program tersebut. Dan dalam suatu program kita bisa memberikan komentar untuk memperjelas suatu program. Dari pembahasan diatas kita dapat mengetahui bagian-bagian yang terdapat dalam suatu program C/C++ serta pengertian tentang definisi sebuah program seperi fungsi, aray, string, pointer, struktur, enum, tipe, pemberian komentar, include dan lain sebagainya, serta cara untuk memasukkan suatu untuk dilakukan suatu proses perhitungan dan menampilkanya pada layar komputer.

68

DAFTAR PUSTAKA

Deitel, Harvey M dan Paul J Deitel. 2005. C++ How to Program, Fifth Edition. New Jersey: Prentice Hall. Deshpande, P. S dan O. G. Kakde. 2003. C & Data Structures. Massachusetts : Dreamtech Press. Solichin, Achmad. 2003. Pemograman Bahasa C dengan Turbo C. IlmuKomputer.Com. Materi Struktur Data TI UKDW oleh Antonius Rachmat C. S.Kom, M.Sc. Materi Praktikum Struktur Data 2007 oleh TIM Asisten Praktikum Struktur Data 2007. Pamungkas, Dudi. 2009. SEJARAH PERKEMBANGAN KOMPUTER. Google. Surabaya Weblog, Wahyunisetiana.2009.FUNGSI.Wordpress.Yogyakarta

69

Pertemuan 2
ALGORITMA DAN DIAGRAM ALIR Algoritma adalah urutan langkah-langkah logis penyeselaian masalah yang disusun secara sistematis dan logis. Kata logis merupakan kata kunci dalam algoritma. Langkah-langkah dalam algoritma harus dapat ditentukan bernilai benar atau salah. 2.1 Algoritma Algoritma adalah jantung ilmu komputer. Banyak cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun algoritma juga digunakan dalam kehidupan sehari-hari, contohnya resep makanan. Di dalam resep makanan terdapat langkah-langkah yang merupakan algoritma. Selain itu masih banyak contoh algoritma yang lain. Untuk melaksanakan suatu algoritma diperlukan suatu bahasa pemrograman, contoh bahasa pemrograman adalah : Pascal, C++, Basic, dll. Notasi algoritma dapat diterjemahkan kedalam bahasa pemrograman apapun, dengan kata lain notasi algoritma bersifat independen. 2.2 Diagram Alir (Flowchart)

Gambar 2.1

9

Gambar 2.2

Gambar 2.3

Suatu flowchart adalah suatu representasi secara diagram yang mengilustrasikan urutan dari operasi yang dilakukan untuk mendapatkan suatu hasil. Dengan kata lain, flowchart membantu kita untuk mengerti dan melihat bentuk algoritma dengan menampilkan algoritma dalam simbol-simbol gambar. Dalam menggambar flowchart, digunakan simbol tertentu seperti gambar 2.1. Contoh berikut bisa digunakan untuk lebih mengerti perbedaan kegunaan simbolsimbol tersebut. Misal kita ingin mencari jumlah dari 2 buah bilangan, maka flowchart-nya adalah seperti gambar 2.2. Contoh lain, misalkan kita ingin mengetahui apakah sebuah bilangan ganjil atau genap. Untuk itu kita harus membuat flowchart seperti ini gambar 2.3. Pseudo code Pseudo code adalah urutan baris algoritma seperti kode pemrograman dan tidak memiliki sintak yang baku. Pseudo code lebih umum digunakan oleh programmer yang berpengalaman. Akan tetapi, flowchart lebih mudah dimengerti oleh programmer pemula, pseudo code sangat mudah diimplementasikan ke dalam kode program dibandingkan dengan flowchart. Kita bisa bebas menulis pseudo code selama itu mudah dimengerti bagi orang lain. Tetapi disarankan untuk menggunakan keyword yang umum digunakan seperti : if, then, else, while, do, repeat, for, dan lainnya. Dan ikuti gaya penulisan pemrograman seperti Pascal, C++ dan lain-lain. Perhatikan kode dibawah ini :

10

Mulai masukkan sebuah angka masukkan sebuah angka dan tampilkan ambil angka yang sebelumnya dan tampilkan selesai walaupun pseudo code diatas masih bisa dimengerti tetapi ada beberapa statemen yang ambigu. Dari baris kedua, kita tidak tahu kemana angka tersebut disimpan dan kita juga tidak tahu angka yang mana yang dimaksud untuk “angka yang sebelumnya”. Apakah angka yang pertama atau yang kedua. Pseudo code diatas dapat dimodifikasi menjadi seperti berikut : 1. Mulai 2. Masukkan A 3. Masukkan B, Tampilkan B 4. Tampilkan A 5. Selesai Pseudo code diatas lebih baik dibandingkan sebelumnya. Kita bisa dengan jelas melihat dimana angka disimpan dan angka yang mana yang ditampilkan. Sekarang kita akan mengubah flowchart pada gambar 2.2 1. Mulai 2. Masukkan A dan B 3. C = A + B 4. Tampilkan C 5. Selesai

11

Pertemuan 3

PEGENALAN PROGRAM C++

3.1 Tentang C++ C++ diciptakan untuk mendukung pemrograman berorientasi pada objek (Object Oriented Pragramming/OOP) yang tidak dimiliki C. sementara C merupakan bahasa pemrograman terbaik dilingkungannya, bahasa ini tidak memiliki kemampuan OOP. Reputasi C tidak diragukan lagi dalam menghasilkan program .EXE berukuran kecil, eksekusi yang cepat, antarmuka (interfacing) yang sederhana dengan bahasa lain dan fleksibilitas pemrograman. Apa yang membuat C tampak sukar dipelajari mungkin karena tiadanya pemeriksaan tipe. Sebagai contoh, dapat mencampur bilangan bulat dengan string untuk menghasilkan karakter. Namun, justru dsitu letak fleksibilitas C, dapat mengolah data C sebebas mengolah data dalam bahasa assembly. 3.2 Borland C++ Dibandingkan compiler C++ yang lain, Borland C++ memiliki keunggulan terutama dalam hal kecepatan dan efisiensi kompilasi. Disamping itu, Borland C++ mendukung beberapa system operasi yaitu DOS, Windows 16bit (Window 3.0) dan windows 32 bit (Windows NT). Meskipun demikian compiler Borland C++ juga memiliki kelemahan bila dibandingkan compiler C++ yang lain, misalnya : pemrograman dengan Borland C++ terutama yang menyangkut tampilan jauh lebih sulit daripada pemrograman dengan Microsoft Visual C++. 3.3 Main Main ( ) adalah fungsi utama (main) yang harus ada dalam setiap program C++ kita. Di sini yang digunakan adalah dengan main tanpa nilai kembalian dan tanpa paramater. Contoh program 3.1
#include <iostream.h> void main () {cout << "hallo subagyo\n";}

12

Gambar 3.1 hsil eksekusi program 3.1 Jika diperhatikan ada perintah \n pada akhir “kalimat” hallo subagyo. Apa itu? ”\n” adalah perintah dalam banyak bahasa pemrograman sebagai baris baru (new line) jadi yang akan ditampilkan pada program adalah: Pada baris pertama, seperti yang kita lihat, ada perintah #include <iostream>. Tanda ‘#’ adalah preprocessor directive. Preprocessor directive adalah perintah – perintah yang diberikan kepada compiler untuk melakukan definisi, memasukkan file library, dll. 3.4Pernyataan Pernyataan merupakan bagian program yang berupa instruksi kepada computer untuk melakukan sesuatu. Menampilkan tulisan dilayar, menghitung operasi aritmatika, membaca inputan dan lain sebagainya. Setiap pernyataan harus diakhir dengan tanda titik koma “;”. Baris (#include <iostream.h>) bukan merupakan suatu pernyataan baris ini digunakan untuk menyisipkan file (iostream.h) ke dalam program. Pada contoh diatas iostream.h disebut file header. File header tersebut diperlukan agar perintah cout bias dijalankan. Apabila file heder tersenut dihapus maka akan terjadi error. Perintah Untuk menampilkan Informasi Ke Layar Contoh program 3.2 :
#include <iostream.h> #include <conio.h> void main() {cout << " saya sedang belajar c++"; getch();}

Gambar 3.2 hasil eksekusi program 3.2

13

Pengenal cout dapat digunakan untuk mengarahkan data ke standart output (normalnya adalah layer). Tanda << merupakan operator yang berfungsi untuk mengarahkan data yang terletak di sebelah kanannya ke objek yang berada di sebelah kiri. 3.5 Gaya Penulisan Program Bahasa C memberikan keleluasaan dalam menulis bentuk program. Program di atas misalnya dapat ditulis kembali tanpa mengubah hasil eksekusi program menjadi: program 3.3
#include <iostream.h> #include <conio.h> void main() {cout << " saya sedang belajar c++"; getch();}

Gamabar 3.3 hasil eksekusi program 3.3 Bahkan penulisan seperti berikut, dengan menghilangkan sejumlah spasi tetap diperkenankan: program 3.4
#include <stdio.h> main ( ) { printf("Selamat datang\n"); printf("di program C++\n"); }

Gambar 3.4 hasil eksekusi program 3.4 Pemrogram tinggal memilih bentuk yang disukai. Sebagai pedoman, penulisan atau pemilihan bentuk hendaknya memberikan kemudahan bagi yang ingin membaca program, terutama untuk program yang berukuran besar. Jika dilihat pada program 3.4 penulisan yang sangat mampat dapat menyebabkan program sulit dipahami.

14

3.6 Bagian Komentar Program yang baik pada umumnya diberi komentar yang akan membantu orang lain maupun pembuat program itu untuk memahami program yang dibuat. Dalam C atau C++ setiap tulisan yang diapit oleh symbol /* … */ atau setiap baris yang dimulai dengan symbol // dianggap komentar. C++ tidak mengizinkan komentar bersarang ( nested comment), namun Borland C++ lebih fleksibel dalam hal ini. Contoh C++ menggunakan komentar:program 3.5
#include<iostream.h> main () {cout<<”nama :subagyo”; //untuk menampilkan nama}

Gambar 3.5 penulisan komentar tidak mempengaruhi hasil eksekusi 3.7 Include #include merupakan salah satu jenis pengarah praprosesor yang digunakan untuk memberitahu kompiler agar dalam proses linking membaca file yang dinamakan file judul (header file), yaitu file yang diantaranya berisi deklarasi fungsi dan definisi konstanta. Bahasa C menyediakan beberapa file judul yang ditandai dengan ekstensi .h. Misal pada Program di atas, #include <iostream.h> menyatakan pada kompiler agar membca file bernama iostream.h saat melakukan kompilasi. Bentuk umum #include : #include <namafile> atau #include “namafile” Bentuk pertama (#include <namafile>) mengisyaratkan bahwa pencarian file dilakukan pada direktori khusus (direktori file include), yang merupakan default direktori file-file judul yang disediakan oleh bahasa pemrograman. Bentuk kedua (#include “namafile”) menyatakan bahwa pencerian file dilakukan pertama kali pada direktori aktif tempat program sumber, dan seandainya tidak ditemukan pencarian akan dilanjutkan pada direktori lainnya sesuai dengan perintah pada sistem operasi (yaitu PATH).

15

Pertemuan 4
ELEMEN DASAR C++ 4.1 Konstanta Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses pemrograman berlangsung. Nilai konstanta selalu tetap. Konstanta harus didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer, pecahan, karakter dan string. Contoh konstanta: 50;13;3;14;4;50005;’A’;’BahasaC’. Selain itu, bahasa C++ juga menyediakan beberapa karakter khusus yang disebut karakter escape, antara lain: Konstanta karakter ‘A’ ‘1’ ‘*’ ‘\\’ \0 \a \b \f \n \r \t \v \\ \’ \” Karakter Karakter berupa huruf A Karakter berupa angka 1 Karakter symbol Karakter \ (harus ditulis dengan awalan \) Karakter ber- ASCII nol (karakter null) Karakter bel Karakter backspace Karakter formfeed (ganti halaman) Karakter newline (pindah baris) Karakter carriage return(keawal baris) tanpa linefeed Karakter tab horizontal Karakter tab vertical Karakter \ Karakter ' Karakter "

16

Konstanta karakter \? Contoh program 4.1:
#include <iostream.h> main() {const float phi = 3.14;

Karakter Karakter ?

cout << " Nilai phi = " << phi;}

Gambar 4.1 program dengan konstanta Jika terjadi pengubahan nilai dari konstanta phi, maka akan terjadi error. 4.2 Operator Operator (lambang-operasi) adalah simbol-simbol, baik berupa satu atau beberapa karakter, yang menetapkan bagaimana suatu nilai dimanipulasi. itu adalah: ! ~ - + * / % < > = | ^ ' ++ -- -= += /= %= << >> == != <= >= |= && || ?: &= ^= <<= >>= 4.3 Variabel Variable adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Nilai dari suatu variabel bisa diubah-ubah sesuai kebutuhan. Nama dari suatu variable dapat ditentukan sendiri oleh pemrograman dengan aturan sebagai berikut: 1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf. 2. Bahasa C++ bersifat case-sensitive artinya huruf besar dan kecil dianggap berbeda. Jadi antara nim,NIM dan Nim dianggap berbeda. 3. Tidak boleh mengandung spasi

17

4. Tidak boleh mengandung symbol-symbol khusus, kecuali garis bawah (underscore). Yang termasuk symbol khusus yang tidak diperbolehkan antara lain: $,?,%,#,!,&,*(,),-,+,= dsb 5. Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai. Contoh pendeklarasian variabel yang benar: NPM,b,c,nama_siswa,a6547,nilai, dsb. Contoh penanaman variable yang salah: %nilai_siswa, 80siswa, rata-rata,ada spasi, penting!, dsb. Contoh program 4.2:
#include <iostream.h> void main() { int x,y,z; x = 7; y = 5; z = x + y; cout << " Hasil Penjumlahan = " << z; }

Gambar 4.2 program dengan pendeklarasian variable

18

Pertemuan 5
OPERATOR DAN UNGKAPAN 5.1 Pengantar Operator dan Ungkapan (Ekspresi) Operator merupakan simbol yang biasa dilibatkan dalam program untuk melakukan sesuatu operasi atau manipulasi misalnya untuk: 1. Menjumlahkan duabuah nilai 2. Memberikan nilai ke suatu variable 3. Membandingkan kesamaan dua buah nilai Dalam C ekspresi dapat berupa : pengenal konstanta atau diantara kombinasi elemen diatas dengan operator a=b+c–2 Pada ungkapan ini, a, b dan c merupakan operand, simbol =, + dan – merupakan operator. Dalam hal ini variabel a diisi dengan hasil penjumlahan b dan c dikurangi 1. Selanjutnya nilai a ini mernyatakan nilai ungkapan. 5.2 Operator aritmatika Bahasa C++ menyediakan lima operator aritmatika, yaitu: Lima Operator Aritmatika Operator Keterangan * / % + Perkalian Pembagian Contoh 2*4 8/2

Contoh Ungkapan:

Sisa Pembagian atau Modulus 9%2 Penjumlahan Pengurangan 5+6 6-5

19

Contoh program 5.1:
#include <iostream.h> #include <conio.h> void main() { clrscr(); // untuk membersihkan layar cout<<7 % 7 <<" n "; //sisa 0 cout<<9 % 7 <<" n "; //sisa 2 cout<<13 % 7 <<" n "; // sisa 6 getch(); }

Gambar 5.1 hasil program dengan operator aritmatika 5.3 Operator Bitwise Operator Bitwise adalah manipulasi data dalam bentuk bit. Borland C++ menyediakan enam buah operator bitwise. Contoh Program 5.2:
#include <stdio.h> main() { unsigned x; void displayBits(unsigned); printf( "Ketik bilangan bulat tak bertanda : "); scanf( "%u", &x); displayBits(x); return 0; } void displayBits (unsigned value) { unsigned c, displayMask = 1 << 15; printf ( "%7u = ", value ); for ( c = 1 ; c <= 16 ; c++ ) { putchar ( value & displayMask ? '1' : '0' ) ;

20

if ( c % 8 == 0 ) putchar ( ' ' ); } putchar ( '\n' ); }

Gambar 5.2 hasil program dengan operator bitwise 5.4 Operator penugasan Operator penugasan (Assigment operator)dalam bahasa C++ berupa tanda sama dengan (“=”). Contoh: Nilai = 80; A = x * Y; Artinya : variable”nilai” diisi dengan 80 dan variable”A” diisi dengan hasil perkalian antara x dan y, contoh: Contoh program 5.3:
#include <iostream.h> #include <conio.h> void main() { int nilai; nilai = 70 ;//variable nilai diisi 70 cout << " variable nilai = " << nilai; getch(); }

Gambar 5.3 hasil program dengan operator penugasan 5.5 Operator Relasi Operator relasi digunakan untuk membandingkan antara dua buah nilai atau variable. Operator relasi dalam bahasa C++:

21

Operator Arti < <= > >= == != x==y hasil ungkapan ini bernilai : 1 jika nilai x sama dengan nilai y 0 jika nilai x tidak sama dangan y 5.6 Operator Logika Kurang Dari

Contoh x< td>

Kurang Dari Sama Dengan x<=y (Apakah x kurang dari samadengan y) Lebih Besar x>y (Apakah x lebih dari y)

Lebih Besar Sama Dengan x>=y (Apakah x lebih dari sama dengan y) Sama Dengan Tidak Sama Dengan x==y (Apakah x samadengan y) x!=y (Apakah x tidak samadengan y)

Contoh ungkapan kondisi yang menggunakan operator ralasi:

Operator logika biasa digunakan untuk menghubungkan dua buah ungkapan kondisi menjadi sebuah ungkapan kondisi operator oprator ini ada tiga diantaranya: ? ? ? && :Logika AND(DAN) || : Logika OR (ATAU) !: Logika NOT (TIDAK / BUKAN)

bentuk pemakaian || atau && ungkapan1 dan ungkapan2 ditulis di dalam tanda kurung. Sebagai contoh (a = = c) && (b = = d) atau a = = c && b= = d 5.7 Operator Unary Operator unary merupakan operator yang hanya membutuhkan satu operand saja. Dalam bahasa c++ terdapat beberapa operator unary, yaitu: Operator Unary Operator Arti/Maksud ++ Unary minus Letak Contoh Equivalent

Sebelum operator A+-B*C A+(-B)*C dan A++ A=A=1

Peningkatan dengan penambahan Sebelum

22

Operator Arti/Maksud nilai 1 -Sizeof ! ~ & * Pengurangan pengurangan nilai 1

Letak sesudah dengan Sebelum sesudah dan

Contoh Equivalent

A--

A=A-1

Ukuran dari operand dalam byte Sebelum Unary NOT Bitwise NOT Menghasilkan alamat memory operand Menghasilkan nilai dari pointer Sebelum Sebelum Sebelum Sebelum

Sizeof(I) !A ~A &A *A -

Contoh program 5.4:
#include <iostream.h> #include <conio.h> void main( ) { int x, nilai; clrscr( ) ; x = 6; nilai = ++x; /* berarti x= x+1; nilai =x; */ cout << " nilai x " << nilai << endl; //endl untuk pindah baris nilai = x++; getch ( ); } // berarti nilai =x; nilai = x+1;*/

Gambar 5.4 hasil program dengan operator unary

23

Pertemuan 6
OPERASI DASAR MASUKAN DAN KELUARAN 6.1 Cout Dalam bahasa C++ proses menampilkan suatu data biasa menggunakan beberapa operasi tersedia. Beberapa operasi yang biasanya digunakan adalah: cout dengan menggunakan obyek ini program dapat menampilkan informasi ke standard output (berupa layar) cout << ”saya belajar C++ \n”; cout << ”saya belajar C++ “ << endl; Pada contoh diatas terdapat karakter khusus yang berupa newline penulisan berupa (\n) digunakan untuk pindah baris atau biasa nya menggunakan (endl) juga digunkan untuk pindah baris Contoh program 6.1 :
#include <iostream.h> void main( ) {cout << ” Saya belajar C++ \n ”;}

Gambar 6.1 hasil eksekusi program 6.1 6.2 Cin Obyek ini bermanfaat untuk membaca data dari standard input (keyboard). Dengan meletakan variable bernama var : Contoh Program 6.2 :
#include <iostream.h> #include <iomanip.h> void main( ) {int x; float y; cout << " Masukkan sebuah nilai bulat : ";

24

cin >> x; cout << " Masukkan sebuah nilai desimal : "; cin >> y; cout << " Bilangan bulat " << x << endl; cout << " Bilangan desimal " << y << endl; }

Gambar 6.2 hasil eksekusi program 6.2 6.3 Manipulator Manipulator umumnya digunakan untuk mengatur tampilan data missal untuk mengatur nilai dengan lebar tampilan 10 karakter ada beberapa jumlah manipulator pada C++ diantaranya: Manipulator endl Digunnakan untuk menyisipkan karakter newline. Manipulator ini identik dengan newline Contoh program 6.3 :
#include <iostream.h> void main( ) { int nilai1 = 100 , nilai2 = 90; cout << " nilai1 = " << nilai1 << endl; cout << " nilai2 = " << nilai2 << endl; }

Gambar 6.3 hasil eksekusi program 6.3 Manipulator setw()

25

Manipulator setw() bermanfaat untuk mengatur lebar halaman dari suatu tampilan data.Sebagai contoh,nilai pada progam di bawah ini dapat ditampilkan rata kanan dengan cara sebagai berikut: Contoh program 6.4:
#include <iostream.h> #include <iomanip.h> void main( ) { int nilai1 = 100 , nilai2 = 90; cout << " nilai1 = " << setw(5) << nilai1 << endl; cout << " nilai2 = " << setw(5) << nilai2 << endl; }

Gambar 6.4 hasil eksekusi program 6.4

26

Pertemuan 7

PERNYATAAN DASAR 7.1 If, Else If, dan Else Dalam pembahasan sebelumnya, secara sekilas kita sudah melihat cara penerapan if dan else dalam kode – kode yang kita gunakan. Di sini kita kan mencoba membahasnya lebih lanjut. 7.2 If Seperti namanya, if berarti jika, yang berarti “jika kondisi ini terbukti maka (akan dilakukan sesuatu dalam kondisi seperti ini)”. Dan biasanya if “berpasangan” dengan else. Jadi, dapat dikatakan bahwa secara keseluruhan apa yang dimengerti oleh komputer adalah: “jika kondisi A terjadi, maka saya akan melakukan tindakan A, selain itu maka saya akan melakukan tindakan B”. 7.3 Else Else adalah kondisi selain atau diluar kondisi pertama (if). Salah satu perumpamaan dari “kasus” ini adalah: “jika dia tidak mati, maka dia hidup”. Contohnya: program
#include <iostream.h> void main ( ) { char benda; cout << "masukkan jenis benda (M/H): "; cin >> benda; if (benda == 'M') cout << "benda mati\n"; else cout << "benda hidup \n"; }

Gambar 7.1 hasil program dengan else dan if

27

7.4 Else If else if sebenarnya adalah kondisi kedua yang diperkirakan akan terjadi sedangkan else sebenarnya adalah kondsi terakhir yang diperkirakan akan terjadi. Jika anda perhatikan sebenarnya else adalah untuk semua kondisi selain kondisi pertama. Artinya, jika anda memasukkan huruf selain “M” juga akan diangap hidup. Karena yang terbaca oleh komputer adalah “jika variabel benda “isinya” huruf M, maka benda mati, selain itu dianggap benda hidup”. Jadi, jika anda memasukkan huruf L atau P sekalipun, benda yang anda masukkan akan tetap dianggap benda hidup. Penempatan else if adalah selalu di bawah if karena else if yaitu kondisi selain if. Berikut adalah kode lengkap dari penggunaan if, else if dan else:
#include <iostream.h> #include <string.h> void main () {int pilihan; cout << "selamat datang di restoran kami \n"; cout << "silahan memilih\n"; cout << "1. ayam goreng campur mules\n"; cout << "2. bangkai pesawat adam air dan isinya\n"; cout << "3. sop ayam campur sari\n"; cout << "silahkan masukkan pilihanmu, \n"; cin >> pilihan; if (pilihan == 1) cout << "selamat berlama2 di toilet\n"; else if (pilihan == 2) cout << "wah, selera anda cukup unik ya...?\n"; else if (pilihan == 3) cout << "wah, memang menu ini lagi naik daun disini\n"; else cout << "wah, sepertinya anda tidak bisa membaca ya?\n" << "dari galaksi mana anda?\n";}

28

Gambar 7.2 hasil program dengan else,if dan else if 7.5 Switch Dengan memakai contoh program di atas, kita bisa membuat hasil yang sama dengan kode yang lebih singkat.Kali ini saya akan langsung menunjukkan contoh penggunaan switch.
#include <iostream.h> void main () { int pilihan; cout << "selamat datang di restoran kami \n"; cout << "silahan memilih\n"; cout << "1. ayam goreng campur mules\n"; cout << "2. bangkai pesawat adam air dan isinya\n"; cout << "3. sop ayam campur sari\n"; cout << "masukkan pilihan anda: "; cin >> pilihan; switch (pilihan) {case 1: {cout << "anda memilih nomor satu!\n";break; }case 2: {cout << "anda memilh nomor dua!\n";break; }case 3: {cout << "anda memilih nomor tiga!\n";break; }default:cout << "maaf pilihan anda tidak terdapat dalam menu kami\n";}}

29

Gambar 7.3 hasil program menggunakan switch Mengapa memakai break ? Ini karena disebabkan oleh switch akan mengeksekusi statement di bawahnya jika tidak dikeluarkan oleh break. Jadi, jika tida dikeluarkan oleh break, yang akan terjadi adalah:

Gambar 7.4 hasil program switch jika tanpa break Ini akan terjadi jika kita memasukan angka 1,2 dan 3 (tiga) dan seterusnya. Ini terjadi karena ketika switch selesai mengeskusi case 1, misalnya, tanpa break, maka switch akan terus mengeksekusi statement yang berada di bawahnya sampai selesai. Makanya, break berfungsi untuk keluar dari switch begitu statement pada satu case selesai di eksekusi (tanpa melanjutkan ke statement berikutnya / yang berada di bawahnya).

30

Pertemuan 9

FUNGSI Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Nama ini selanjutnya dapat dipanggil dipanggil beberapa kali dibeberapa tempat dalam program. Tujuan pembuatan fungsi adalah : Memudahkan dalam mengembangkan program. Hal ini merupakan kunci dalam pembuatan program yang terstruktur. Menghemat ukuran program. Manfaat ini terasakan kalau ada beberapa deretan instruksi yang sama digunakan pada beberapa tempatdi dalam program. Umumnya fungsi menerima masukan (disebut argumen atau parameter). Masukan ini selanjutnya diproses oleh fungsi. Hasil akhir berupa sebuah nilai yang disebut nilai balik (return value). 9.1 Prototipe Fungsi Sebuah fungsi tidak dapat dipanggil kecuali sudah dideklarasikan. Untuk melihat hal ini perhatikan contoh berikut : Program 9.1
void main ( ) {printf (“Hai \n”);}

Jika program ini dijalankan, C++ akan memberikan kesalahan yang menyatakan bahwa printf( ) tidak memiliki prototype. Hal seperti ini masih bisa lolos pada bahasa C. Tetapi tidak demikian halnya pada C++. Kesalahan seperti diatas tidak akan terjadi seandainya program ditulis menjadi seperti berikut. Program 9.2 :
#include <stdio.h> void main() {printf (“ Hai \n “);}

31

Gambar 9.1 hasil eksekusi program 9.2 Mengapa? Karena prototipe fungsi printf( ) ada pada file “stdio.h”. Itulah sebabnya diperlukan untuk menyertakan baris berbentuk : #include < nama_file_header > Deklarasi fungsi dikenal dengan sebutan prototipe fungsi. Dan diakhiri dengan titik koma (;), sebagaimana pada pendeklarasian variable. Sebagai contoh : 1). long kuadrat (long l); 2). int maks3 (int a, int b, int c ); 3). double maks (double x, double y ); 4). void garis ( ); Pada contoh pertama, fungsi kuadrat() mempunyai argumen bertipe long dan nilai balik juga bertipe long. Pada contoh kedua, fungsi maks3() memiliki tiga buah argumen, masing-masing bertipe int dan nilai balik juga bertipe int. Adapun contoh ketiga, fungsi maks() mempunyai dua buah argumen, masing-masing argumen bertipe double. Pada contoh keempat, fungsi garis() tidak memiliki argumen dan nilai balik tidak ada (void). Manfaat dari prototipe fungsi adalah untuk menjamin tipe argumen yang dilewatkan pada pemanggilan fungsi benar-benar sesuai. Tanpa adanya prototipe fungsi, amatlah mudah bagi pemrogram untuk melakukan kesalahan tanpa sengaja dalam melewatkan argumen. Misalnya, melewatkan argumen bertipe float pada fungsi yang semestinya meminta tipe data int. Dengan adanya prototipe fungsi, kesalahan semacam itu akan terdeteksi oleh kompiler. 9.2 Definisi Fungsi Setiap fungsi yang dipanggil didalam program harus didefinisikan. Letaknya dapat dimana saja. Khusus untuk fungsi yang disediakan sistem, definisinya sebenarnya ada dalam pustaka, yang akan digabungkan dengan program sewaktu proses linking. Contoh definisi fungsi kuadrat( ): long kuadrat (long l) { return (l * l);

32

} Pada pendefisian fungsi, setelah : long kuadrat (long l) Tidak terdapat tanda titik koma. Ini berbeda dengan prototipe fungsi. Pernyataan return didalam fungsi digunakan untuk memberikan nilai balik fungsi. Pada contoh diatas, fungsi kuadrat() memberikan nilai balik berupa nilai kuadrat dari argumen. contoh fungsi untuk memperoleh nilai terbesar di antara dua bilangan program 9.3 :
#include<iostream.h> #include<conio.h> double maks(double x,double y); //prototie void main() { clrscr(); //hapus layar cout<<maks(65789,123)<<endl; cout<<maks(123,65789)<<endl; } double maks(double x,double y) {if (x > y) return (x); else return (y); }

Gambar 9.2 hasil eksekusi program 9.3 9.3 Lingkup Variabel Pemahaman terhadap lingkup variable didalam penulisan fungsi sangatlah penting, agar tidak salah dalam menggunakan suatu variable. Lingkup variable menentukan keberadaan suatu variable tertentu didalam fungsi. Ada variable yang

33

hanya dikenal disuatu fungsi dan tidak dikenal pada fungsi lain. Namun ada juga variable yang dapat di akses oleh semua fungsi. Jenis variable berdasarkan kelas penyimpanannya, yaitu : 1. Varabel Otomatis (lokal) 2. Variable Eksternal(global). 9.3.1. Varabel Otomatis (lokal). Variabel yang didefinisikan didalam suatu fungsi berlaku sebagai variabel lokal bagi fungsi. Artinya, variable tesebut hanya dikenal didalam fungsi tempat variable didefinisikan. Contoh untuk memperlihatkan efek variabel otomatis (lokal) Program 9.4:
#include<iostream.h> #include<conio.h> void alpha(); //prototipe fungsi void main() {int x = 22; //variable lokal pada main() double y = 2.22; //begitu juga pada variable ini clrscr(); cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl; alpha(); //panggil variable alpha cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl; } void alpha()//definisi fungsi alpha() {int x = 20; //variable lokal pada main() double y=3.14; //begitu juga pada variable ini cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl; }

Gambar 9.3 hasil eksekusi program 9.4

34

9.3.2. Variable Eksternal(global) Variable eksternal adalah varibel yang didefinisikan diluar fungsi manapun. Variable ini dikenal juga sebagai variable global, sebab variable ini dikenal di semua fungsi. Guna memperjelas bahwa suatu variable didalam suatu fungsi merupakan variable eksternal, didalam fungsi yang menggunakannya, kita dapat mendeklarasikan (bukan mendefinisikan, karena tidak ada pengalokasian memori) dengan menambahkan kata kunci extern didepan tipe data. Kata kunci menyatakan bahwa variable tersebut didefinisikan di tempat lain. Contoh program 9.5
#include<iostream.h> #include<conio.h> int oblada = 550; //variable eksternal void tambah(); //prototipe fungsi void main() { clrscr(); //hapus layar cout<<oblada<<endl; tambah(); cout<<oblada<<endl; tambah(); cout<<oblada<<endl; } //definisi fungsi void tambah() { oblada++; //variable eksternal dinaikkan }

35

Gambar 9.4 hasil eksekusi program 9.5 9.4 Referensi Pada C++ referensi digunakan untuk memberikan nama alias dari variable. Bentuk pendeklarasiannya : Tanda & mengawali nama referensi. Setelah pendeklarasian seperti diatas, ref menjadi nama alias dari nama_variable. Pengubahan nilai terhadap nama_variable dapat dilakukan melalui nama_variable itu sendiri ataupun melalui referensi ref. Referensi sangat berguna untuk melewatkan struktur atau obyek yang besar kedalam fungsi. Dengan memakai referensi untuk parameter, hanya alamat yang akan dilewatkan dan bukan struktur atau obyek itu sendiri. Keuntungannya : Menghemat stack (untuk meletakkan argumen ke stack pada saat pemanggilan fungsi). Selain itu akan membuat argumen struktur atau obyek gampang dipakai didalam fungsi itu sendiri. contoh untuk memperlihatkan alamat variabel alamat referensi program 9.6:
#include<iostream.h> #include<conio.h> void main() { int i = 55; int &r = i; //referensi clrscr(); //hapus layar cout<<”Alamat : i = “<<&i<<” r =”<<&r<<endl; }

Gambar 9.5 hasil eksekusi program 9.6

36

9.5 Rekursi Rekursi atau recursion dalam matematika dan ilmu komputer diartikan sebagai fungsi yang dalam definisinya mengimplementasikan dirinya sendiri. Untuk lebih mudahnya, bisa dikatakan bahwa rekursi adalah fungsi yang memanggil dirinya sendiri. Namun demikian, rekursi tidaklah hanya merupakan istilah eksak semata. Jika kita mau memperhatikan lagi dengan lebih teliti, ternyata ada banyak contoh rekursi di sekeliling kita. Rekursi dalam dunia nyata bisa terjadi salah satunya adalah jika kita meletakkan dua cermin secara berhadapan dan sejajar. Bayangan yang terjadi pada kedua cermin itulah rekursi. Dalam dunia matematika dan komputer, rekursi khususnya digunakan untuk menyelesaikan perhitungan yang rumit dan kompleks. Prinsip rekursi sebenarnya sederhana, yaitu memecah masalah menjadi masalah-masalah yang lebih kecil. Dengan memecah masalah menjadi bagian-bagian yang lebih kecil tersebut, masalah yang sangat kompleks dan rumit sekalipun akan lebih mudah untuk diselesaikan. Contoh paling populer implementasi rekursi adalah penyelesaian perhitungan faktorial dari suatu bilangan bulat (integer number). Dalam matematika, faktorial didefinisikan sebagai berikut:

dan Sehingga didapat misalnya nilai faktorial dari bilangan 5 dan 6 adalah sebagai berikut: dan Perhatikan contoh source code yang ditulis dalam bahasa pemrograman C++ berikut. Source code berikut adalah contoh penyelesaian komputasi faktorial menggunakan teknik rekursi.

37

Program 9.7:
#include <iostream.h> typedef unsigned int UINT; long Factorial(UINT aNumber) { if (aNumber == 0) return 1; return aNumber*Factorial(aNumber-1); } int main() { std::cout << Factorial(5); return 0; }

Gambar 9.6 hasil eksekusi program 9.7

38

Pertemuan 10
ARRAY (VARIABEL BERINDEKS) Variabel dengan tipe data tunggal (skalar) hanya dapat digunakan untuk menyimpan sebuah nilai saja, sehingga untuk menyimpan beberapa nilai sekaligus dalam suatu variabel khusus yang disebut dengan variabel array atau variabel berindeks. Variabel array dapat digunakan untuk menampung banyak data yang sejenis (numerik/string). 10.1 Array 1 Dimensi Tanda [] disebut juga “elemen yang ke... Misalnya kondisi[0] berarti elemen yang ke nol. Array yang sudah dipesan, misalnya 10 tempat tidak harus diisi semuanya, bisa saja hanya diisi 5 elemen saja, baik secara berurutan maupun tidak. Namun pada kondisi yang tidak sepenuhnya terisi tersebut, tempat pemesanan di memori tetap sebanyak 10 tempat, jadi tempat yang tidak terisi tetap akan terpesan dan dibiarkan kosong. Contoh program 10.1
#include <stdio.h> #include <conio.h> void main() { int nilai[10], x; clrscr(); printf("Memasukkan nilai :\n"); for(x=0;x<5;x++) { printf("Nilai Angka : "); scanf("%d",&nilai[x]); } printf("\n"); printf("Membaca nilai :\n"); for(x=0;x<5;x++)

39

{ printf("Nilai Angka : %d",nilai[x]); } getch(); }

Ganbar 10.1 hasil eksekusi program 10.1 Terlihat bahwa alamat array berurutan dengan jarak antar alamat adalah 4 bytes (integer berukuran 4 bytes) Contoh program 10.2 (inisialisasi dengan 0):
#include <stdio.h> #include <conio.h> int main(){ int bil[7] = {0}; //inisialisasi 0 for(int i=0;i<7;i++){ printf("Elemen ke-%i = %d\n",i,bil[i]); } getch(); return 0; }

Gambar 10.2 hasil eksekusi program 10.2

40

10.2 Array Berdimensi Dua dan Operasi Matrik Array berdimensi 2 sering digunakan dalam operasi matrik. Array berdimensi 2 terdiri atas 2 elemen yaitu baris dan kolom. Matrik adalah daftar bilangan yang disusun dalam bentuk dua dimensi kolom dan baris. Nilai-nilai dalam matrik disebut dengan elemen matrik. Pada suatu program komputer, suatu matriks disimpan pada array berdimensi 2. Indeks dari matrik menunjukkan nomor elemen dari matriknya. Contoh program 10.3:
#include <stdio.h> #include <conio.h> void main() { int x[3][3]={{1,2,3},{4,5,6},{7,8,9}},b,k; clrscr(); for(b=0 ; b<3 ; b++) for(k=0 ; k<3 ; k++) printf("x[%d][%d] = %d\n",b,k,x[b][k]); for(b=0 ; b<3 ; b++) for(k=0 ; k<3 ; k++) { gotoxy(20+(k+1)*2,b+1); printf("%d",x[b][k]); } getch(); }

Gambar 10.3 hasil eksekusi program 10.3

41

Pertemuan 11 STRING

11.1 Pengantar String String sangat memudahkan tugas pemogram. Dengan menggunakan string, pemogram dapat menampilkan pesan kesalahan, menampilkan prompt bagi masukan keyboard ataupun memberikan informasi pada layar dengan mudah. Seperti halnya tipe data yang lain, string dapat berupa konstanta atau variabel. Konstanta string sudah biasa anda sertakan pada program. Misalnya pada pernyataan : cout << "C++"<<endl; terdapat konstanta string "C++". Tetapi sejauh ini, variabel string belum diperkenalkan. 11.2 Konstanta String Suatu konstanta string ditulis dengan awalan dan akhiran tanda petik ganda(" "), misalnya: "C++". Konstanta string seperti diatas disimpan dalam memori secara berurutan. Setiap karakter menempati memory 1 byte. Setelah karakter yang terakhir terdapat karakter Null (karakter dengan nilai ASCII sama dengan nol atau disimbolkan dengan "\0", yaitu tanda \ dikuti dengan nol). Bila suatu string hanya berisi karakter NULL, string disebut sebagai string kosong. 11.3 Memasukan Data String Setelah suatu variabel string didefinisikan, Anda bisa mengisikan data ke variabel tersebut. Pemasukan data dapat ditangani oleh data cin, seperti contoh program 11.1 :
#include<iostream.h> #include<conio.h> void main()

42

{

char teks[13]; //string dengan panjang maksimal 12 karakter clrscr(); cout<<"Masukan sebuah kata :"<<endl; cin>> teks; cout<< "Kata yang tercetak :"<<teks;

}

Gambar 11.1 hasil eksekusi program 11.1 Yang perlu diperhatikan adalah bahwa cin hanya dapat membaca sebuah kata. Artinya karakter-karakter yang terletak sesudah spasi tidak bisa ditampung pada teks. Ini disebabkan operator << pada cin hanya bisa membaca masukan hingga terdapat spasi, tab atau enter. Untuk menampilkan agar dapat terbaca solusinya adalah menambahkan fungsi get() pada objek cin (cin.get()) bisa dipakai untuk keperluan ini. Sebagai contoh seperti program 11.2 :
#include<iostream.h> #include<conio.h> void main() { char teks[13]; //string dengan panjang maksimal 12 karakter clrscr(); //hapus layar cout<<"Masukan sebuah kata :"<<endl; cin.get(teks, 13); cout<< "Kata yang tercetak } :"<<teks;

Gambar 11.2 hasil eksekusi program 11.2 Tampak, bahwa karakter yan terletak sesudah spasi juga ikut disimpan pada teks. Sekarang kita lihat kalau data yang dimasukan lebih dari 13 karakter

43

maka hanya 12 karakter pertama yang disimpan pada teks, mengingat argumen kedua dari fungsi get() diisi dengan 13 (satu karakter berisi Null). Pada contoh program di atas dapat ditulis sebagai berikut : cin.get(teks, 13) Bisa juga ditulis sebagai berikut : cin. Get(teks, sizeof(teks)); 11.4 Fungsi untuk string 11.4.1Fungsi getline() Suatu masalah akan timbul kalau cin.get() digunakan 2 kali seperti contoh program 11.3i
#include<iostream.h> #include<conio.h> void main() { char nama[25]; char alamat[35]; clrscr(); cout<<"Masukan Nama :"<<endl; cin.get(nama, sizeof(nama)); cout<< "Masukan Alamat :"<<endl; cin.get(alamat,sizeof(alamat)); cout<<"Nama:"<<nama<<endl; cout<<"Alamat:"<<alamat<<endl; }

Gambar 11.3 hasil eksekusi program 11.3 Pada contoh di atas cin.get() pertama digunakan untuk membaca nama yang kedua untuk membaca alamat. Ternyata program tidak memberikan kesempatan untuk mengisi alamat. Hal ini terjadi karena get() yang pertama tidak membuang kode newline(\n). Oleh karena get() tidak mengabaikan spasi putih( spasi, tab , atau newline) maka get() kedua menjadi tidak berfungsi sebagaimana

44

mestinya. Cara untuk menyelesaikan masalah di atas dengan menggunakan fungsi getline(), karena fungsi ini dapat membuang sisa data yang tidak dibaca, termasuk newline itu sendiri. Pada contoh berikut, get() diganti dengan getline(). Contoh program 11.4:
#include<iostream.h> #include<conio.h> void main() { char nama[25]; char alamat[35]; clrscr(); //hapus layar cout<<"Masukan Nama :"<<endl; cin.getline(nama, sizeof(nama)); cout<< "Masukan Alamat :"<<endl; cin.getline(alamat,sizeof(alamat)); cout<<"Nama:"<<nama<<endl; cout<<"Alamat:"<<alamat<<endl; }

Gambar 11.4 hasil eksekusi program 11.4 Tampak bahwa dengan menggunakan getline(), data alamat dapat diisi. 14.1.2Fungsi strcpy Bentuk dari dari strcpy() : strcpy(string_target,string_awal) Prototipe fungsi di atas ada pada file header string.h Contoh program 11.5 menggunakan strcpy():
#include<iostream.h> #include<conio.h> #include<string.h> void main() {

45

char teks[]="C++ Oke"; char data [25]; clrscr(); //hapus layar strcpy(data,teks); // mengcopy isi teks ke data cout<<"Isi data :"<<data<<endl; }

Gambar 11.5 hasil eksekusi program 11.5 11.1.3 Fungsi toupper dan tolower Fungsi toupper() berguna untuk memperoleh huruf kapital dari suatu huruf kecil. Nilai balik dari fungsi ini akan berupa seperti argumennya kalau argumen tidak berisi huruf kecil. Adapun fungsi tolower() adalah kebalikan dari toupper(). Fungsi ini memberikan nilai balik : v Berupa huruf kecil kalau argumen berisi huruf kapital v Berupa nilai seperti argumen kalau argumen tidak berupa huruf kecil Kedua fungsi di atas memberikan nilai balik bertipe int dan memiliki protipe pada file ctype.h Contoh program 11.6 :
#include<iostream.h> #include<conio.h> #include<ctype.h> void main() { char st[]="saya suka C++"; clrscr(); //hapus layar for(int i=0; st[i];i++) st[i]= toupper(st[i]); cout<<st<<endl; }

Gambar 11.6 hasil eksekusi program 11.6

46

Pada contoh di atas, st[i]= toupper(st[i]); menyebabkan setiap huruf kecil pada variabel st akan diganti dengan huruf kapital. 11.1.4 Fungsi strlen() Panjang suatu string dapat diketahui dengan mudah menggunakan fungsi strlen(). Misalnya saja, didefinisikan : char bunga[15]= "mawar"; int panjang; Maka pernyataan yang menggunakan strlen : panjang = strlen(bunga); akan memberikan panjang string yang tersimpan pada variabel bunga ke panjang. Contoh program 11.7:
#include<iostream.h> #include<conio.h> #include<string.h> void main() { char bunga[15]="mawar"; char kosong[23]=""; clrscr(); //hapus layar cout<<strlen(bunga)<<endl; cout<<strlen(kosong)<<endl; }

Gambar 11.7 hasil eksekusi program 11.7 11.1.5 Fungsi strlwr() dan strupr Jika isi semua huruf kapital pada suatu string dinginkan untuk diubah menjadi huruf kapital, hal ini dapat dilakukan melalui fungsi strlwr(). Misalnya, didefinisikan :

47

char st[]="AbCdEfGeHjKl"; Maka st akan berisi : "abcdefgehjki"; Sedangkan fungsi strupr() kebalikan dari fungsi strlwr(). Kedua fungsi di atas sama seperti tolower dan toupper. Contoh program 11.8 untuk memperlihatkan efek strlwr() dan strupr() :
#include<iostream.h> #include<conio.h> #include<string.h> void main() { char st[]="AbCdEfGhIjKl"; clrscr(); //hapus layar cout<<"Isi St mula-mula:"<<st<<endl; strlwr(st); cout<<"Isi setelah dikonversi strlwr: "<<endl; cout<<st<<endl; strupr(st); cout<<"Isi setelah dikonversi strupr: "<<endl; cout<<st<<endl; }

Gambar 11.8 hasil eksekusi program 11.8

48

Pertemuan 12

POINTER
12.1 Pengertian Pointer Pada pertemuan kali ini, kita akan membahas powerful feature dari bahasa pemograman C/C++, yaitu pointer. Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Pointer merupakan variabel level rendah yang dapat digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung oleh bahasa C. Variabel biasa, sifatnya statis dan sudah pasti, sedangkan pada pointer sifatnya dinamis dan dapat lebih fleksibel. Variabel pointer yang tidak menunjuk pada nilai apapun berarti memiliki nilai NULL, dan disebut sebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi. 12.2 Alamat pointer Operator atau alamat. Pada saat pendeklarasian variable, pengguna tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh : ted = &andy; Penulisan tersebut berarti akan memberikan variable ted alamat dari variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb : andy = 25; fred = andy;

1

ted = &andy; Maka hasilnya

Gambar 12.1 12.3 Variabel Pointer Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar di bawah ini

2

px zzzz 1000

Address ? 1000 x

Gambar 12.2 Variabel pointer px menunjuk ke variabel x Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan. Bentuk Umum : tipe_data *nama_pointer; Contoh char *huruf; Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya. 12.5 Nilai yang di tunjuk pointer untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, juga digunakan operator * (tanda asterisk). Jika diinginkan untuk menampilkan alamat tempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakan operator & (tanda ampersand). 12.6 void pointer Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya. 12.7 Memory pointer Salah satu konsep yang menyebabkan banyak programer baru tak berujung frustrasi adalah pointer. Ini didasarkan pada konsep bahwa setiap variabel : int *nilai;

49

memiliki lokasi penyimpanan di memori. Sebelum kita berbicara tentang pointer, kita akan melihat bagaimana sebuah memori komputer bekerja. Memori terdiri, pada tingkat terendah, sekelompok bit yang dapat baik 1 atau 0. Bit ini agak terlalu kecil untuk individual berguna, dan itu akan sangat tidak praktis untuk mengaksesnya satu per satu waktu. Sebagai hasilnya, mereka biasanya diakses dalam potongan. Pada komputer pribadi, mereka biasanya diakses dalam potongan dari 8 bit. Tidak ada yang terlalu istimewa 8. Sebuah sistem dapat dengan mudah bekerja dengan potongan dari 9, 12, 16 atau 32 bit. Untuk tutorial ini, kita akan menggunakan 8 bit. Apapun sistem bekerja dengan disebut sebagai blok addressable terkecil memori. Karena kita menggunakan 8 bit pada contoh kita, itu berarti setiap variabel akan menggunakan satu atau lebih blok dari 8 bit. Akibatnya, urutan dari beberapa blok memori akan terlihat seperti ini: Kode: |........||........||........||........| 01 02 03 04 Gambar 12.3 Setiap blok bit diberikan nomor (alamat memori). Sebuah variabel di C + + akan menempati satu atau lebih blok memori. Untuk keperluan bekerja dengan memori, sebuah char didefinisikan untuk menduduki 1 blok (minimum 8 bit). Variabel lain menempati kelipatan yang banyak blok. Untuk keperluan tutorial ini, sebuah char akan menempati 1 dari blok memori di atas (seperti 01). Sebuah int akan menempati 2 blok memori yang berdekatan (seperti 01 dan 02, atau 03 dan 04). Ganda akan menempati 4 blok memori yang berdekatan (01, 02, 03, dan 04). Mengingat semua itu, perhatikan kode berikut: Kode:
int main() { int int1=5; double double1=3.14; int int2=10; char cha1='A',cha2='2';

50

return 0; }

Jika anda melihat diagram tentang bagaimana variabel-variabel yang disimpan dalam memori, ini mungkin terlihat seperti ini (. Adalah 2 bits): Kode: |int1....||double1.........||int2....||cha1||cha2| 02&03 04-07 08&09 10 11 Melihat ini, lokasi dari variabel-variabel dapat berupa: INT1: 02, double1: 04, int2: 08: cha1: 09, cha2: 10. Perhatikan bahwa saya tidak mengatakan apa-apa tentang apa yang masing-masing variabel berisi, di mana mereka berada. Juga perhatikan bahwa char adalah ukuran 1 (seperti biasa), dan bahwa aku mengasumsikan bahwa int adalah ukuran 2, dan double adalah ukuran 4. Jumlah bit dalam ukuran 1 adalah sering 8, tapi benar-benar tergantung pada arsitektur perangkat keras. Tujuan dari pointer adalah untuk menyimpan alamat-alamat ini dan memberikan kami akses ke variabel berdasarkan alamat mereka. Anda membuat petunjuk sebagai berikut: Kode:
int main() { int int1=5; double double1=3.14; int int2=10; char cha1='A',cha2='2'; int* intptr = &int1; double* dptr = &double1; char* charptr = &cha1; return 0; }

Alamat di depan INT1 mengembalikan alamat INT1, dalam hal ini 02. Jadi intptr berisi 02, dptr berisi 04, dan charptr berisi 09. The * dalam deklarasi variabel menunjukkan bahwa variabel pointer ke jenis di depan *. Pada titik ini, hal itu mungkin tampak konyol untuk menggunakan pointer bukan hanya menggunakan variabel. Besar, kita dapat menyimpan lokasi memori. Jadi apa?

51

Satu hal yang dapat kita lakukan adalah menggunakan pointer untuk mendapatkan akses ke variabel apa toko. Kita melakukan ini dengan * operator (dereferencing). Itu berarti * intptr akan kembali 5, sementara intptr akan kembali 02. Hal lain yang dapat Anda lakukan adalah menggunakan + dan - pada pointer ke langkah maju atau mundur melalui memori. Jarak 1 akan bergerak melalui memori tergantung pada jenis memori pointer memandang. Sejak intptr terlihat di ints (dalam hal ini ukuran 2 (biasanya 16 bit)), jika intptr berisi 02, kemudian intptr + 1 akan kembali 04 (satu int maju). Sejak dptr terlihat di ganda (dalam hal ini ukuran 4), jika dptr berisi 04, dptr 1 akan kembali 08 (satu ganda maju). Pada titik ini, Anda mungkin berpikir hal ini berarti Anda dapat menggunakan intptr untuk mengakses ganda. Anda tidak bisa. intptr + 1 akan mengakses double1 paruh pertama. Hasilnya akan tergantung pada arsitektur yang mendasari. Demikian pula, dptr + 1 akan menafsirkan semua int2, cha1, dan cha2 sebagai ganda. Nilai utama dari pointer adalah menerima dan bekerja dengan array dalam fungsi. Perhatikan kode berikut: Kode:
#include <iostream.h> void loadarray(int* thearray) { for (int i=0;i<10;i++) thearray[i]=i; } void printarray(int* thearray) { for (int i=0;i<10;i++) std: cout<<"element"<<i<<" "<<*(thearray+i)<<"\n"; } int main() { int myarray[10]; loadarray(myarray); printarray(myarray); }

52

Gambar 12.4 Pada pembahasan pertama, mungkin muncul bahwa kami melewati sebuah integer ke load array. Ini tidak terjadi. myarray adalah sebuah array dari ints, tetapi istilah myarray sebenarnya adalah sebuah pointer ke int pertama dalam array. Ketika loadarray menerima bahwa pointer, kemudian dapat menggunakan pointer int thearray seperti nama array (ya, kami memiliki dua pointer menunjuk ke elemen pertama dari array). [] operator akan menafsirkan array itu nama sebagai array dan menemukan elemen yang benar berdasarkan indeks. Penggunaan array yang lain adalah untuk menciptakan variabel pada saat run-time. Dalam keadaan normal, anda harus menyatakan apa yang variabel dalam kode Anda akan bekerja dengan. Kadang-kadang, bagaimanapun, anda tidak tahu. Ketika Anda sedang membaca sebuah file, Anda tidak tahu seberapa besar itu, sehingga Anda tidak dapat menjelaskan ukuran di muka. Berhasil membacanya, Anda akan perlu untuk mengambil memori yang diperlukan. Kode:
int main() { int* intptr = 0; intptr = new int; intptr = new int; *intptr = 5; delete intptr; }

53

12.7 Pointer Penunjuk Pointer (pointer to pointer) Suatu pointer bisa saja menunjuk ke pointer lain. Gambar berikut memberikan contoh mengenai pointer menunjuk pointer. Pointer ptr1 alamat ptr1 Pointer ptr2 alamat ptr1 Variabel var_x nilai

Gambar 12.5 Pointer yang menunjuk pointer Untuk membentuk rantai pointer seperti pada gambar di atas, pendeklarasian yang diperlukan berupa int var_x; int *ptr1; int **ptr2; Perhatikan pada deklarasi di depan: var_x adalah variabel bertipe int. Ptr1 adalah variabel pointer yang menunjuk ke data bertipe int. Ptr2 adalah variabel pointer yang menunjuk ke pointer int. (itulah sebabnya deklarasinya berupa int **ptr2; ) Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa ptr1 = &var_x; Sedangkan supaya ptr2 menunjuk ke ptr1, instruksi yang diperlukan adalah ptr2 = &ptr1; Contoh berikut memberikan gambaran cara pengaksesan nilai pada var_x melalui pointer ptr2 dan ptr1. Contoh program untuk pointer yang menunjuk pointer
#include <stdio.h> main() { int var_x = 273; int *ptr1; int **ptr2; ptr1 = &var_x; ptr2 = &ptr1; printf(”Nilai var_x = %d\n”, *ptr1); printf(”Nilai var_x = %d\n”, **ptr2); }

54

Gambar 12.6

55

Pertemuan 13

STRUKTUR DAN ENUM 13.1 Struktur Nilai pada dasarnya struktur jenis. Mereka didefinisikan dengan menggunakan kata kunci struct. Anda dapat mengakses variabel di dalam struktur dengan menciptakan sebuah objek dari struktur. Satu-satunya perbedaan adalah bahwa Anda tidak harus menggunakan sintaks untuk membuat objek dari sebuah kelas, 13.2 UNION Sama seperti struct, union juga merupakan tipe data yang dibangkitkan, dimana anggota-anggotanya menggunakan secara bersama-sama ruang penyimpanan memori yang sama, berbeda dengan struktur yang masing-masing variabel menempati lokasi memori yang berbeda. Jumlah bytes yang digunakan untuk menyimpan union adalah sedikitnya cukup untuk menyimpan data terbesar yang ditangani. Oleh karena itu, tipe union ini umumnya digunakan untuk menangani satu, dua, atau tiga variabel dengan tipe yang mirip. Sebagai contoh: union nilaiUjian { int uts, uas; float akhir; } 13.3 Bitfield Suatu bit atau beberapa bit dalam sebuah data berukuran satu byte atau dua byte dapat diakses dengan mudah melalui bitfield. Dengan cara ini, suatu bit atau beberapa bit dapat diakses tanpa melibatkan operator pemanipulasi bit (seperti &, |). Selain itu, satu atau dua byte memori dapat dipakai untuk menyimpan sejumlah informasi.

56

Sebagai contoh, untuk memperoleh informasi masing-masing bit dari suatu data satu byte, penulisan medan bit berupa struct info_byte { unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned }; Jika disajikan dalam bentuk gambar, gambaran suatu struktur yang memiliki tipe seperti di atas adalah sebagai berikut : 7 6 5 4 3 2 1 0 bit bit0:1; bit1:1; bit2:1; bit3:1; bit4:1; bit5:1; bit6:1; bit7:1;

b i t 7

b i t 6

b i t 5

b i t 4

b i t 3

b i t 2

b i t

b i t

1 0

Gambar Susunan bit dari memori sebuah data bertipe info_byte Pada pendefinisian struktur info_byte di atas, • • Nilai 1 setelah tanda titik-dua (:) menyatakan panjang dari bitfield unsigned menyatakan bahwa bitfield dinyatakan dalam keadaan tak(untuk contoh berikutnya, nantinya setiap bitfield memiliki

bertanda

kemungkinan nilai berkisar 1 atau (0).

nama tipe struktur yang terdiri atas sejumlah bitfield struct info_byte { unsigned bit0:1;

57

unsigned unsigned unsigned unsigned unsigned unsigned unsigned };

bit1:1; bit2:1; bit3:1; bit4:1; bit5:1; bit6:1; bit7:1; panjang/jumlah bit nama variabel bitfield

sebuah variabel bitfield haruslah dideklarasikan berupa salah satu di antara int,unsigned dan signed. Contoh berikut memberikan gambaran tentang cara memberikan nilai kepada variabel struktur yang mengandung elemen berupa bitfield, dan cara mengakses setiap nilai dari bitfield. Program 13.1 Bitfield utk menampilkan bentuk biner dr karakter masukan :
#include <stdio.h> main() {struct info_byte { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; }; /* deklarasi variabel union dan elemen bitfield */ union { unsigned char karakter; struct info_byte byte; } ascii; /* bit ke-0 */ /* bit ke-1 */ /* bit ke-2 */ /* bit ke-3 */ /* bit ke-4 */ /* bit ke-5 */ /* bit ke-6 */ /* bit ke-7 */ /* definisi tipe bitfield */

58

printf(“Masukkan sebuah karakter : ”); scanf(“%c”, &ascii.karakter); printf(“\nKode ASCII dari karakter %c adalah %d\n”, ascii.karakter, ascii.karakter); printf("Bentuk biner dari nilai %d adalah ", ascii.karakter); printf("%d%d%d%d%d%d%d%d\n",ascii .byte.bit7, ascii.byte.bit6, ascii.byte.bit5, ascii.byte.bit4, ascii.byte.bit3, ascii.byte.bit2, ascii.byte.bit1, ascii.byte.bit0); }

Gambar 13.1 hasil eksekusi program 13.1 Pada program di atas, setelah pernyataan : scanf(“%c”, &ascii.karakter); dan user memasukkan karakter : ‘A’ , berarti nilai ascii.karakter = ‘A’.Maka hal itu memberikan efek elemen byte juga akan bernilai seperti data pada memori yang sama. karakter, sebab byte dan karakter berbagi

Namun, walaupun adanya sifat demikian, pernyataan : ascii.byte = 'A';, akan dianggap salah (saat kompilasi), sebab suatu variabel struktur yang mengandung elemen bitfield memang tidak diijinkan untuk diberi nilai secara langsung. Pengaksesan nilai dapat dilakukan melalui variabel bitfield, misalnya : printf("%d", ascii.byte.bit7); untuk mengambil nilai dari bitfield bit 7. Contoh lain ascii.byte.bit7 = 0; untuk mengubah bit7 agar bernilai 0. Kalau di depan sudah dibicarakan bitfield dengan panjang 1 bit, contoh berikut akan memberikan gambaran tentang bitfield dengan panjang 2 bit. struct data_gambar { unsigned unsigned unsigned unsigned piksel1:2; piksel2:2; piksel3:2; piksel4:2;

59

} koord; Pada contoh di atas, variabel koord yang bertipe data_gambar akan menempati memori 1 byte (8 bit) dengan 4 informasi terkandung di dalamnya (masing-masing 2 bit), atau memegang nilai bulat antara 0 sampai dengan 3 (22 – 1). Untuk memberikan nilai kepada piksel1 misalnya, bisa digunakan pernyataan sebagai berikut : koord.piksel1 = 3; yang mengisikan 3 ke dalam bitfield tersebut. Bitfield biasanya dipakai untuk menghemat memori. Misalnya ada dua informasi dengan keterangan sebagai berikut : informasi pertama (info_x) memiliki kemungkinan nilai bilangan bulat antara 0 sampai dengan 3, dan informasi kedua (info_y) memiliki kemungkinan nilai bilangan bulat 0 atau 1 saja. Seandainya kedua informasi itu disimpan dalam memori (secara terpisah) sebagai tipe char, maka akan diperlukan total memori sebesar 2 byte. Namun jika disajikan dalam bentuk bitfield, memori yang dibutuhkan cukup 1 byte. Dalam hal ini info_x akan dinyatakan dalam 2 bit dan info_y dinyatakan dalam 1 bit. deklarasinya adalah sebagai berikut : struct info { unsigned info_x:2; unsigned info_y:1; } status; atau struct info { unsigned info_x:2; unsigned info_y:1; unsigned } status; :5; Penuangan

60

Pada pendeklarasian terakhir : Unsigned :5; fungsinya hanya untuk memperjelas bahwa total bit dari bitfield adalah 8 bit (1 byte). Perhatikan, bahwa karena 5 bit terakhir tidak diperlukan, maka nama bitfield boleh tidak disertakan. Kalaupun mau diberi nama (misalnya : kosong), maka bentuk deklarasinya adalah : struct info { unsigned info_x:2; unsigned info_y:1; unsigned kosong:5; } status; program 13.2:
#include <stdio.h> main() { /* definisi tipe bitfield */ struct info {unsigned info_x:2; unsigned info_y:1; unsigned kosong:5; } status; status.info_x = 3; status.info_y = 1; printf("info_x = %d\n", status.info_x); printf("info_y = %d\n", status.info_y); } /* bisa dihilangkan */

Gambar 13.2

61

13.4 ENUM ENUM adalah sebuah mekanisme pemetaan nomor telepon Telkom yang kita kenal, seperti, +628113334567 atau +62555334567, agar di kenali di dunia VoIP yang menggunakan nomor telepon, seperti, 20333@voiprakyat.or.id atau 5007987@fwd.pulver.com. Jadi sebetulnya isi sebuah ENUM hanya tabel saja. Tentunya konsep ENUM tidak terbatas pada pemetaan saja, dengan menggunakan ENUM sebuah nomor telepon +6255534567 dapat mempunyai beberapa pesawat penerima dengan sistem prioritas, misalnya, +6255534567 +6255534567 +6255534567 +6255534567 +6255534567 prioritas 1 prioritas 2 prioritas 3 prioritas 4 prioritas 5 245678@voiprakyat.or.id 6543686@fwd.pulver.com +62215678976 (nomor kantor) +62856789654 (nomor handphone) mail:oknum@salemba.co.id

Dalam bahasa yang lebih manusiawi, jika seseorang berusaha menelepon ke +6255534567 akan diusahakan untuk menghubungi ke VoIP Rakyat 245678@voiprakyat.or.id, jika gagal maka akan berusaha menghubungi nomor VoIP di Pulver 6543686@fwd.pulver.com, jika gagal maka akan berusaha menghubungi kantor di +62215678976, jika gagal lagi maka akan berusaha menghubungi handphone di +62856789654. Terakhir jika semua cara gagal, apa boleh buat masuk ke voice mail untuk oknum@salemba.co.id. Cara penulisan ENUM di Internet, misalnya menggunakan top level domain e164.id, adalah sebagai berikut +6255512345678 +6281812345678 yang kita kenal biasa. Contoh ENUM Salah satu contoh ENUM yang paling baik adalah e164.org, kita dapat mendaftarkan diri secara automatis dengan mekanisme authentikasi yang baik dengan cara menelepon nomor telepon yang akan di mapping ke account VoIP. 8.7.6.5.4.3.2.1.5.5.5.2.6.e164.id 8.7.6.5.4.3.2.1.8.1.8.2.6.e164.id

perhatikan nomor ENUM mempunyai urutan terbalik dari nomor telepon

62

Tentunya e164.org bukan satu-satunya ENUM server di dunia. Rekan-rekan VoIP Rakyat-pun mengembangkan ENUM sendiri yang dapat di akses di http://www.enum.voiprakyat.or.id. Tampilan maupun menu ENUM VoIP Rakyat akan secara berangsur-angsur berubah dengan akan di adakannya ENUM Indonesia yang menggunakan domain e164.id. Jika e164.id sudah berjalan dengan baik, maka akan digunakan delegasi dari ARPA menggunakan domain 2.6.e164.arpa untuk kode negara +62 (Indonesia).

63

Pertemuan 14 TYPE
14.1 Tipe Data Integer ( Bilangan Bulat ) Integer merupakan tipe data numerik yang digunakan apabila tidak berurusan dengan pecahan atau bilangan desimal. Tipe data numerik yang termasuk integer adalah sebagai berikut : 14.2 Tipe Deskripsi Byte Memiliki nilai integer dari -128 sampai +127 dan menempati 1 byte ( 8 bits ) di memori. Short Memiliki nilai integer dari -32768 sampai 32767 dan menempati 2 bytes ( 16 bits ) di memori Int Memiliki nilai integer dari 2147483648 sampai 2147483647 dan menempati 4 bytes ( 32 bits ) di memori Long Memiliki nilai dari -9223372036854775808 sampai 9223372036854775807 dan menempati 8 bytes ( 64 bits ) di memori Bilangan integer biasanya menggunakan int, dan bukan byte, short maupun long. Bilangan integer juga mengenal nilai positif dan negatif ( signed number ). Tipe data byte dan short hanya digunakan pada aplikasi khusus yang memperhatikan penggunaan memori. Sedangkan long jarang digunakan karena jarang memerlukan bilangan sebesar kapasitas long. 14.3 Floating Point ( Bilangan Pecahan ) Floating Point digunakan untuk menangani bilangan desimal atau perhitungan yang lebih detail dibanding integer. Ada dua macam floating point, yaitu : 1. Tipe deskripsi 2. Tipe data referensi

64

14.3.1 Tipe Deskripsi Float memiliki nilai -3.4x108 sampai +3.4x108 dan menempati 4 byte di memori Double memiliki nilai -1.7x10308 sampai +1.7x10308 Semua bilangan pecahan atau desimal dalam Java tanpa diakhiri huruf f akan dianggap sebagai double. Sedangkan bilangan yang ingin dikategorikan sebagai float harus diakhiri dengan huruf F. Misalnya : 4.22 F atau 2.314f. Sedangkan untuk bilangan double, bisa menambah dengan huruf D, karena secara default bilangan dengan koma atau pecahan atau desimal akan dianggap sebagai double. 14.3.1.1 Char Char adalah karakter tunggal yang didefinisikan dengan diawali dan diakhiri dengan tanda ‘ ( petik tunggal ). Char berbeda dengan String, karena String bukan merupakan tipe data primitif, tetapi sudah merupakan sebuah objek. Tipe char mengikuti aturan unicode, sehingga dapat menggunakan kode /u kemudian diikuti bilangan dari 0 sampai 65535, tetapi yang biasa digunakan adalah bilangan heksadesimal dari 0000 sampai FFFF. Misalnya : ‘\u123’ Selain karakter biasa, juga terdapat karakter khusus yang didefinisikan dengan cara mengawalinya menggunakan tanda . 14.3.1.2 Tipe Data Referensi Kelebihan pemrograman berorientasi objek adalah dapat mendefinisikan tipe data baru yang merupakan objek dari class tertentu. Tipe data ini digunakan untuk mereferensikan objek atau class tertentu, seperti String.

65

BAB III PENUTUP A. Kesimpulan
Dari pembahasan di atas dapat kita ketahui sejarah lahirya komputer yang semula berukuran panjang setengah bola kaki dan menghabiskan daya yang sangat besar hingga ditemukanya suatu alat yang diberinama transistor yang mampu merubah perkembangan komputer hingga menjadi seperti saat ini. Untuk membuat suatu program yang bisa dimengerti kita dapat mengambarkan program tersebut dengan suatu flowchart yang mencakup seluruh program tersebut. Dan dalam suatu program kita bisa memberikan komentar untuk memperjelas suatu program. Dari pembahasan diatas kita dapat mengetahui bagian-bagian yang terdapat dalam suatu program C/C++ serta pengertian tentang definisi sebuah program seperi fungsi, aray, string, pointer, struktur, enum, tipe, pemberian komentar, include dan lain sebagainya, serta cara untuk memasukkan suatu untuk dilakukan suatu proses perhitungan dan menampilkanya pada layar komputer.

66

DAFTAR PUSTAKA

Deitel, Harvey M dan Paul J Deitel. 2005. C++ How to Program, Fifth Edition. New Jersey: Prentice Hall. Deshpande, P. S dan O. G. Kakde. 2003. C & Data Structures. Massachusetts : Dreamtech Press. Solichin, Achmad. 2003. Pemograman Bahasa C dengan Turbo C. IlmuKomputer.Com. Materi Struktur Data TI UKDW oleh Antonius Rachmat C. S.Kom, M.Sc. Materi Praktikum Struktur Data 2007 oleh TIM Asisten Praktikum Struktur Data 2007. Pamungkas, Dudi. 2009. SEJARAH PERKEMBANGAN KOMPUTER. Google. Surabaya Weblog, Wahyunisetiana.2009.FUNGSI.Wordpress.Yogyakarta

67

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->