• Tidak ada hasil yang ditemukan

Tutorial Pemrograman Bahasa C dan Assembly oleh Darmawan MS a.k.a Pinczakko Daftar Isi Pengetahuan Dasar Pemrograman Assembly dan C Pemrograman Bahasa

N/A
N/A
Protected

Academic year: 2021

Membagikan "Tutorial Pemrograman Bahasa C dan Assembly oleh Darmawan MS a.k.a Pinczakko Daftar Isi Pengetahuan Dasar Pemrograman Assembly dan C Pemrograman Bahasa"

Copied!
10
0
0

Teks penuh

(1)

Tutorial Pemrograman Bahasa C dan

Tutorial Pemrograman Bahasa C dan

Assembly

Assembly

oleh Darmawan MS a.k.a Pinczakko oleh Darmawan MS a.k.a Pinczakko Daftar Isi

Daftar Isi

• Pengetahuan Dasar Pemrograman Assembly dan CPengetahuan Dasar Pemrograman Assembly dan C •

• Pemrograman Bahasa CPemrograman Bahasa C

o

o

Alasan Penggunaan Bahasa CAlasan Penggunaan Bahasa C

o

o

Pengenalan Sintaks Bahasa CPengenalan Sintaks Bahasa C

 Preprocessor dan MacroPreprocessor dan Macro   CompilerCompiler   LinkerLinker   PernyataanPernyataan   VariabelVariabel   OperatorOperator   PercabanganPercabangan   PerulanganPerulangan 

 Fungsi dan Struktur Program CFungsi dan Struktur Program C 

 Fungsi untuk Input dan OutputFungsi untuk Input dan Output 

 Pointer dan ArrayPointer dan Array 

 Struct dan UnionStruct dan Union 

 Lebih Lanjut Tentang FungsiLebih Lanjut Tentang Fungsi

o

o

Arsitektur Driver Windows 2000/XPArsitektur Driver Windows 2000/XP •

• Pemrograman Bahasa AssemblyPemrograman Bahasa Assembly

o

o

Arsitektur Microprocessor x86Arsitektur Microprocessor x86

 Arsitektur DasarArsitektur Dasar 

 Mode Kerja Microprocessor x86Mode Kerja Microprocessor x86 

 Arsitektur x86 ModernArsitektur x86 Modern

o

o

Sintaks Bahasa Assembly x86Sintaks Bahasa Assembly x86

o

o

Program Assembly SederhanaProgram Assembly Sederhana •

• Penggunaan Assembly dan C dalam satu ProgramPenggunaan Assembly dan C dalam satu Program •

• Beberapa Sumber InformasiBeberapa Sumber Informasi •

• CreditsCredits

Artikel ini pada dasarnya adalah follow up dari arti

Artikel ini pada dasarnya adalah follow up dari arti kel Tutorial Membuat Patch dalam Bentuk Driver padakel Tutorial Membuat Patch dalam Bentuk Driver pada Windows 2000/XP. Sebagian source code yang akan dipelajari pada tulisan ini adalah source code dari Windows 2000/XP. Sebagian source code yang akan dipelajari pada tulisan ini adalah source code dari artikel tersebut. Tujuan pembuatan tutorial ini adalah 'Bringing System Level Programming to

artikel tersebut. Tujuan pembuatan tutorial ini adalah 'Bringing System Level Programming to the Mass'.the Mass'. Tutorial ini sendiri akan terbagi menjadi dua bagian besar, yaitu

Tutorial ini sendiri akan terbagi menjadi dua bagian besar, yaitu pemrogaman bahasa C danpemrogaman bahasa C dan pemrograman bahasa assembly, namun pada bagian akhir akan kita

pemrograman bahasa assembly, namun pada bagian akhir akan kita bahas penggunaan bahasa assemblybahas penggunaan bahasa assembly yang terintegrasi dalam sebuah source code bahasa C, yang lazim disebut i

yang terintegrasi dalam sebuah source code bahasa C, yang lazim disebut i nline assembly. Penulisnline assembly. Penulis mengikutsertakan bagian yang agak "advanced" ini karena pada source code Tutorial Membuat Patch mengikutsertakan bagian yang agak "advanced" ini karena pada source code Tutorial Membuat Patch dalam bentuk Driver

dalam bentuk Driver pada Windows 2000/XP teknik ini pada Windows 2000/XP teknik ini dimanfaatkan. Perlu anda ketahui bahwa bahasadimanfaatkan. Perlu anda ketahui bahwa bahasa assembly yang akan dibahas pada t

assembly yang akan dibahas pada t ulisan ini adalah bahasa assembly untuk arsitektur ulisan ini adalah bahasa assembly untuk arsitektur hardware x86(PC)hardware x86(PC) dan tidak dapat diaplikasikan pada arsitektur hardware lainnya.

dan tidak dapat diaplikasikan pada arsitektur hardware lainnya. Petunjuk:

Petunjuk:

Bagi yang sudah pernah menggunakan bahasa C

Bagi yang sudah pernah menggunakan bahasa C sebelumnya, penulis menyarankan untuk langsungsebelumnya, penulis menyarankan untuk langsung membaca bagian

membaca bagian Pointer dan ArrayPointer dan Array , kemudian bagian, kemudian bagian Struct dan UnionStruct dan Union dan dilanjutkan sampai bagiandan dilanjutkan sampai bagian akhir Pemrograman C.

(2)

Pengetahuan Dasar Pemrograman C dan Assembly

Pengetahuan Dasar Pemrograman C dan Assembly

Bagian ini diperuntukkan bagi pembaca yang

Bagian ini diperuntukkan bagi pembaca yang masih belum mengetahui pemrograman sama sekali ataumasih belum mengetahui pemrograman sama sekali atau yang sudah tahu tetapi ingin menyegarkan kembali ingatannya. Kita akan memulai dengan sistem yang sudah tahu tetapi ingin menyegarkan kembali ingatannya. Kita akan memulai dengan sistem bilangan yang digunakan pada komputer. Komputer hanya mengenal nilai 0 dan 1, oleh karena itu bilangan yang digunakan pada komputer. Komputer hanya mengenal nilai 0 dan 1, oleh karena itu digunakanlah beberapa sistem bilangan untuk mempermudah. Sistem bilangan tersebut

digunakanlah beberapa sistem bilangan untuk mempermudah. Sistem bilangan tersebut antara lain:antara lain:

1.

1. Bilangan Biner (binary), yaitu bilangan basis 2, sehingga nilai yang dikenal hanya 0 dan 1.Bilangan Biner (binary), yaitu bilangan basis 2, sehingga nilai yang dikenal hanya 0 dan 1.

Contoh : 101

Contoh : 101binerbinerbernilai sama dengan 5bernilai sama dengan 5desimaldesimal, sebab 101, sebab 101binerbiner= 1 x 2= 1 x 200+ 0 x 2+ 0 x 211+ 1 x 2+ 1 x 222atau 5atau 5desimaldesimal..

Operasi matematis lainnya sama dengan bilangan desimal, hanya

Operasi matematis lainnya sama dengan bilangan desimal, hanya di sini bilangan yang digunakandi sini bilangan yang digunakan adalah basis 2.

adalah basis 2.

2.

2. Bilangan Oktal (octal), yaitu bilangan basis 8, sehingga nilai yang dikenal hanya 0 s/d 7. Contoh :Bilangan Oktal (octal), yaitu bilangan basis 8, sehingga nilai yang dikenal hanya 0 s/d 7. Contoh :

072

072octaloctal(prefix 0 digunakan pada bahasa pemrograman C) (prefix 0 digunakan pada bahasa pemrograman C) bernilai sama dengan 58desimal,bernilai sama dengan 58desimal,

sebab 072

sebab 072octaloctal= 2 x 8= 2 x 800+ 7 x 8+ 7 x 811atau 58atau 58desimaldesimal. Operasi matematis lainnya sama de. Operasi matematis lainnya sama de ngan bilanganngan bilangan

desimal, hanya di sini

desimal, hanya di sini bilangan yang digunakan adalah basis 8.bilangan yang digunakan adalah basis 8.

3.

3. Bilangan Heksadesimal (Hexadecimal), yaitu bilangan basis 16, sehingga nilai Bilangan Heksadesimal (Hexadecimal), yaitu bilangan basis 16, sehingga nilai yang dikenal hanyayang dikenal hanya 0 s/d 9 dan huruf A s/d F

0 s/d 9 dan huruf A s/d F melambangkan 10melambangkan 10desimaldesimals/d 15s/d 15 desimaldesimal. Contoh : 0x72. Contoh : 0x72hexadecimalhexadecimal (prefix 0x(prefix 0x

digunakan pada bahasa pemrograman C) bernilai sama

digunakan pada bahasa pemrograman C) bernilai sama dengan 114dengan 114desimaldesimal, sebab 0x72, sebab 0x72hexadecimalhexadecimal = 2= 2

x 16

x 1600+ 7 x 16+ 7 x 1611atau 114atau 114 desimal

desimal. Operasi matematis lainnya sama dengan . Operasi matematis lainnya sama dengan bilangan desimal, hanyabilangan desimal, hanya

di sini bilangan yang digunakan adalah basis 16. Ada satu hal yang perlu anda perhatikan, yaitu di sini bilangan yang digunakan adalah basis 16. Ada satu hal yang perlu anda perhatikan, yaitu konversi dari bilangan biner ke hexadecimal adalah suatu operasi yang "agak natural", sebab konversi dari bilangan biner ke hexadecimal adalah suatu operasi yang "agak natural", sebab anda tinggal memecah bilangan hexadecimal tersebut menjadi

anda tinggal memecah bilangan hexadecimal tersebut menjadi elemen-elemennya kemudianelemen-elemennya kemudian setiap elemen direpresentasikan dengan 4 bilangan biner, maka anda telah memperoleh bilangan setiap elemen direpresentasikan dengan 4 bilangan biner, maka anda telah memperoleh bilangan biner yang bernilai sama dengan bilangan hexadecimal tersebut. Contoh: 0xA2 = ...

biner yang bernilai sama dengan bilangan hexadecimal tersebut. Contoh: 0xA2 = ... binerbiner, solusi:, solusi:

pertama pecah menjadi elemennya , kita peroleh A dan

pertama pecah menjadi elemennya , kita peroleh A dan 2. A jika direpresentasikan dalam 42. A jika direpresentasikan dalam 4 angka biner adalah 1010 (10

angka biner adalah 1010 (10desimaldesimal) dan 2 jika direpresentasikan dalam 4 ) dan 2 jika direpresentasikan dalam 4 angka biner adalah 0010angka biner adalah 0010

sehingga kita peroleh 0xA2 = 1010 0010

sehingga kita peroleh 0xA2 = 1010 0010 binerbiner. Kemudahan operasi ini . Kemudahan operasi ini akan membantu anda saatakan membantu anda saat

berurusan dengan pemrograman yang mengolah informasi bilangan biner, jadi

berurusan dengan pemrograman yang mengolah informasi bilangan biner, jadi sangat perlusangat perlu untuk dipahami.

untuk dipahami.

Pemrograman atau programming secara umum dilakukan untuk membuat sekumpulan instruksi yang Pemrograman atau programming secara umum dilakukan untuk membuat sekumpulan instruksi yang dapat dieksekusi (dijalankan) pada komputer. Jadi,

dapat dieksekusi (dijalankan) pada komputer. Jadi, instruksi-instruksi yang dapat dijalankan (executable)instruksi-instruksi yang dapat dijalankan (executable) tersebut merupakan hasil akhir yang kita inginkan. Kumpulan instruksi-instruksi itulah yang disebut tersebut merupakan hasil akhir yang kita inginkan. Kumpulan instruksi-instruksi itulah yang disebut software. Instruksi yang dihasilkan biasanya hanya dapat dieksekusi pada satu arsitektur komputer. software. Instruksi yang dihasilkan biasanya hanya dapat dieksekusi pada satu arsitektur komputer. Instruksi yang dimaksud adalah "machine code" atau "bahasa mesin", bahasa mesin ini tidak lebih dari Instruksi yang dimaksud adalah "machine code" atau "bahasa mesin", bahasa mesin ini tidak lebih dari kumpulan bit-bit 0 dan 1 yang dapat dipahami oleh sebuah komputer. Perbedaan satu arsitektur kumpulan bit-bit 0 dan 1 yang dapat dipahami oleh sebuah komputer. Perbedaan satu arsitektur komputer (misalnya x86

komputer (misalnya x8611) dengan arsitektur lain (misalnya Sparc) dengan arsitektur lain (misalnya Sparc22) adalah bagaimana bit-bit tersebut) adalah bagaimana bit-bit tersebut

diorganisasikan, hal inilah yang menyebabkan machine code untuk

diorganisasikan, hal inilah yang menyebabkan machine code untuk satu macam arsitektur tidak satu macam arsitektur tidak dapatdapat dieksekusi pada arsitektur yang lain. Prosesnya kira-kira seperti

dieksekusi pada arsitektur yang lain. Prosesnya kira-kira seperti ini:ini:

Pembuatan Machine Code --> Machine Code --> Eksekusi pada Komputer

Pembuatan Machine Code --> Machine Code --> Eksekusi pada Komputer

Catatan: Catatan:

1

1x86 adalah keluarga microprocessor yang digunakan oleh para pemakai PC, yang termasuk ke dalamx86 adalah keluarga microprocessor yang digunakan oleh para pemakai PC, yang termasuk ke dalam

keluarga ini antara l

keluarga ini antara l ain: Intel 80286, 80386, 80486, Pentium (i586), PentiumPro (i686),Pentium 4 (i786);ain: Intel 80286, 80386, 80486, Pentium (i586), PentiumPro (i686),Pentium 4 (i786); AMD K6, K6-2, K6-3, Athlon (K7), Duron; Via Cyrix III; Transmeta Crusoe, dan lain-lain.

AMD K6, K6-2, K6-3, Athlon (K7), Duron; Via Cyrix III; Transmeta Crusoe, dan lain-lain.

2

2Sparc adalah keluarga microprocessor yang digunakan pada Server-server Sparc adalah keluarga microprocessor yang digunakan pada Server-server Sun Microsystem, yangSun Microsystem, yang

termasuk ke dalamnya antara lain: UltraSparc II, IIIi, III. termasuk ke dalamnya antara lain: UltraSparc II, IIIi, III.

Teknik pemrograman merupakan teknik yang digunakan untuk menghasilkan kumpulan machine code Teknik pemrograman merupakan teknik yang digunakan untuk menghasilkan kumpulan machine code tadi. Ketika komputer digital pertama kali

tadi. Ketika komputer digital pertama kali muncul (komputer ENIAC), untuk membuat program, orangmuncul (komputer ENIAC), untuk membuat program, orang harus langsung memasukkan bit-bit machine code tadi ke dalam komputer melalui pengaturan harus langsung memasukkan bit-bit machine code tadi ke dalam komputer melalui pengaturan saklar-saklar dan punch cards (kartu yang dilubangi). Perkembangan selanjutnya adalah orang tidak perlu lagi saklar dan punch cards (kartu yang dilubangi). Perkembangan selanjutnya adalah orang tidak perlu lagi pusing dengan bit-bit program yang sangat mudah salah (sebab anda langsung bekerja dengan angka 0 pusing dengan bit-bit program yang sangat mudah salah (sebab anda langsung bekerja dengan angka 0 dan 1 dalam jumlah yang sangat besar), muncul lah apa yang disebut assembler, yaitu program yang dan 1 dalam jumlah yang sangat besar), muncul lah apa yang disebut assembler, yaitu program yang dapat mengubah token-token (potongan kata-kata tertentu

dapat mengubah token-token (potongan kata-kata tertentu yang dapat dipahami oleh assembler)yang dapat dipahami oleh assembler) sederhana menjadi machine code. Karena

sederhana menjadi machine code. Karena adanya assembler, orang mulai mengenal apa yang diadanya assembler, orang mulai mengenal apa yang di namakannamakan bahasa assembly, yaitu bahasa yang menggunakan token-token yang dapat

bahasa assembly, yaitu bahasa yang menggunakan token-token yang dapat dikenali oleh assembler, jadidikenali oleh assembler, jadi bahasa assembly satu level lebih maju dibanding bahasa mesin atau machine code. Sejak saat inilah bahasa assembly satu level lebih maju dibanding bahasa mesin atau machine code. Sejak saat inilah orang mulai mengenal apa yang dikatakan source code , yaitu bentuk program yang belum

(3)

sebuah bahasa pemrograman menjadi bentuk yang dapat

sebuah bahasa pemrograman menjadi bentuk yang dapat dieksekusi pada komputer. Source codedieksekusi pada komputer. Source code biasanya berbentuk file yang dapat di edit.

biasanya berbentuk file yang dapat di edit.

Perlu anda ketahui, bahwa saat ini pun anda dapat memprogram dalam machine code jika anda memang Perlu anda ketahui, bahwa saat ini pun anda dapat memprogram dalam machine code jika anda memang benar-benar menginginkannya. Caranya mudah, anda tinggal mencari program hexeditor, misalnya benar-benar menginginkannya. Caranya mudah, anda tinggal mencari program hexeditor, misalnya Hexworkshop kemudian membuat file yang berisi machine code dalam hexadesimal (bilangan basis 16). Hexworkshop kemudian membuat file yang berisi machine code dalam hexadesimal (bilangan basis 16). Penulis beberapa kali melakukan hal ini karena belum mampu menggunakan assembler dengan baik Penulis beberapa kali melakukan hal ini karena belum mampu menggunakan assembler dengan baik (output file biner yang dihasilkan oleh assembler tidak

(output file biner yang dihasilkan oleh assembler tidak sesuai dengan yang diharapkan). Sebenarnysesuai dengan yang diharapkan). Sebenarnya jikaa jika anda membaca dan mencoba trik ke-3 pada artikel Trik

anda membaca dan mencoba trik ke-3 pada artikel Trik Modifikasi Bios, anda telah memprogram denganModifikasi Bios, anda telah memprogram dengan menggunakan machine code untuk microprocessor keluarga x86. Jadi,

menggunakan machine code untuk microprocessor keluarga x86. Jadi, cukup mudah bukan :).cukup mudah bukan :). Dalam tutorial ini kita akan belajar

Dalam tutorial ini kita akan belajar tentang assembler. Assembler pada dasarnya bekerja dengan caratentang assembler. Assembler pada dasarnya bekerja dengan cara "mencocokkan (matching)". Setiap baris perintah yang

"mencocokkan (matching)". Setiap baris perintah yang anda tulis dalam bahasa assembly akan dianda tulis dalam bahasa assembly akan di

asosiasikan dengan satu machine code tertentu, sehingga pada assembler setiap baris perintah yang anda asosiasikan dengan satu machine code tertentu, sehingga pada assembler setiap baris perintah yang anda ketikkan akan menghasilkan satu machine code.

ketikkan akan menghasilkan satu machine code. Jadi jika anda menggunakan assembler, prosesnya akanJadi jika anda menggunakan assembler, prosesnya akan kurang lebih seperti ini (tentang li

kurang lebih seperti ini (tentang li nker akan dijelaskan lebih lanjut):nker akan dijelaskan lebih lanjut):

Pembuatan Source Code Assembly

Pembuatan Source Code Assembly

|

|

V

V

Source Code Assembly

Source Code Assembly

|

|

V

V

Assembler

Assembler

|

|

V

V

library,object

library,object

file-->

file-->

Linker

Linker

|

|

V

V

Machine Code

Machine Code

|

|

V

V

Eksekusi pada komputer

Eksekusi pada komputer

Perkembangan selanjutnya adalah bahasa tingkat menengah, yaitu bahasa pemrograman C. Pada

Perkembangan selanjutnya adalah bahasa tingkat menengah, yaitu bahasa pemrograman C. Pada bahasabahasa pemrograman ini, machine code dihasilkan melalui

pemrograman ini, machine code dihasilkan melalui tahap yang lebih panjang. Mungkin anda berttahap yang lebih panjang. Mungkin anda bert anya,anya, kalau orang sudah bisa membuat program dengan assembler, mengapa harus ada bahasa C ? ,

kalau orang sudah bisa membuat program dengan assembler, mengapa harus ada bahasa C ? ,  jawabannya adalah bahasa assembly masih terlalu "machine oriented",

 jawabannya adalah bahasa assembly masih terlalu "machine oriented", sukar dipahami dan bahasanyasukar dipahami dan bahasanya lebih dekat kepada machine code daripada ke bahasa manusia, alasan lain adalah karena dengan lebih dekat kepada machine code daripada ke bahasa manusia, alasan lain adalah karena dengan membuat bahasa yang levelnya lebih tinggi (lebih dekat ke

membuat bahasa yang levelnya lebih tinggi (lebih dekat ke bahasa manusia) maka pengembabahasa manusia) maka pengembanganngan perangkat lunak (software) akan lebih cepat, masih ada satu alasan lagi dan mungkin yang terpenting perangkat lunak (software) akan lebih cepat, masih ada satu alasan lagi dan mungkin yang terpenting yaitu bahasa assembly hanya dapat dieksekusi oleh satu macam arsitektur komputer saja seperti yang yaitu bahasa assembly hanya dapat dieksekusi oleh satu macam arsitektur komputer saja seperti yang disebutkan sebelumnya. Jika kita dapat membuat program yang dapat berjalan di berbagai macam disebutkan sebelumnya. Jika kita dapat membuat program yang dapat berjalan di berbagai macam arsitektur komputer maka itu akan mempercepat pengembangan software. Namun demikian, itu tidak arsitektur komputer maka itu akan mempercepat pengembangan software. Namun demikian, itu tidak berarti bahwa setiap program yang ditulis dengan bahasa C akan dapat berjalan

berarti bahwa setiap program yang ditulis dengan bahasa C akan dapat berjalan pada semua mesin.pada semua mesin. Misalnya, program driver yang di buat pada Tutorial Membuat Patch ... yang akan kita

Misalnya, program driver yang di buat pada Tutorial Membuat Patch ... yang akan kita bahas adalahbahas adalah program C yang tidak portable

program C yang tidak portable (dapat digunakan pada komputer dengan arsitektur yang berbeda), karena(dapat digunakan pada komputer dengan arsitektur yang berbeda), karena tidak dapat dieksekusi di luar arsitektur

tidak dapat dieksekusi di luar arsitektur komputer x86 yang menggunakan system bus PCI compliant.komputer x86 yang menggunakan system bus PCI compliant. Software yang dijamin portable biasanya adalah software yang tidak mengutak-atik sistem, atau yang Software yang dijamin portable biasanya adalah software yang tidak mengutak-atik sistem, atau yang menggunakan API(Application Programming Interface) standar dan tersedia di

menggunakan API(Application Programming Interface) standar dan tersedia di berbagai arsitekturberbagai arsitektur komputer misalnya software yang menggunakan OpenGL atau yang dibuat dengan kriteria ANSI C. komputer misalnya software yang menggunakan OpenGL atau yang dibuat dengan kriteria ANSI C. Berikut ini adalah

Berikut ini adalah langkah-langkalangkah-langkah pembuatan program dengan bahasa C h pembuatan program dengan bahasa C (tentang preprocessor, compiler(tentang preprocessor, compiler & linker akan dijelaskan lebih l

(4)

Pembuatan Source Code C

Pembuatan Source Code C

|

|

V

V

Source Code C

Source Code C

|

|

V

V

Preprocessor

Preprocessor

|

|

V

V

Compiler

Compiler

|

|

V

V

Assembler

Assembler

|

|

V

V

library,object

library,object

file-->

file-->

Linker

Linker

|

|

V

V

Machine Code

Machine Code

|

|

V

V

Eksekusi pada komputer

Eksekusi pada komputer

Inilah garis besar dari apa yang harus kita

Inilah garis besar dari apa yang harus kita lakukan untuk menghasilkan sebuah program dalam bahalakukan untuk menghasilkan sebuah program dalam bahasa C.sa C. Anda tidak perlu

Anda tidak perlu khawatir dengan langkah-langkah yang begitu banyak, sebab dalam sebagian besarkhawatir dengan langkah-langkah yang begitu banyak, sebab dalam sebagian besar kasus, kita hanya perlu membuat source code kemudian tools programming yang kita gunakan akan kasus, kita hanya perlu membuat source code kemudian tools programming yang kita gunakan akan mengerjakan langkah -langkah selanjutnya sampai sebuah file executable

mengerjakan langkah -langkah selanjutnya sampai sebuah file executable dihasilkan. Bahasadihasilkan. Bahasa pemrograman yang lain sebagian besar

pemrograman yang lain sebagian besar melakukan pembuatan program seperti C melakukan pembuatan program seperti C namun dengannamun dengan beberapa langkah tambahan, tetapi ada juga

beberapa langkah tambahan, tetapi ada juga bahasa pemrograman yang menggunakan cara yang agakbahasa pemrograman yang menggunakan cara yang agak berbeda, misalnya Java. Untuk mengetahui bagaimana cara kerja

berbeda, misalnya Java. Untuk mengetahui bagaimana cara kerja bahasa tingkat tinggi lainnya anda perlubahasa tingkat tinggi lainnya anda perlu membaca buku atau tutorial dalam

membaca buku atau tutorial dalam bahasa yang bersangkutan.bahasa yang bersangkutan.

Pemrograman Bahasa C

Pemrograman Bahasa C

Setelah membaca ulasan di atas,

Setelah membaca ulasan di atas, selnjutnya kita akan membahas tentang bahasa C. selnjutnya kita akan membahas tentang bahasa C. Bahasa ini adalahBahasa ini adalah salah satu bahasa pemrograman yang andal dan

salah satu bahasa pemrograman yang andal dan banyak digunakan. Seperti yang telah disebutkanbanyak digunakan. Seperti yang telah disebutkan sebelumnya, bahasa C dapat berjalan pada berbagai platform, jadi dengan mempelajari bahasa ini, sebelumnya, bahasa C dapat berjalan pada berbagai platform, jadi dengan mempelajari bahasa ini,

pengetahuan yang anda proleh dapat digunakan untuk mmeprogram di komputer dengan arsitektur selain pengetahuan yang anda proleh dapat digunakan untuk mmeprogram di komputer dengan arsitektur selain x86.

x86.

Alasan Penggunaan Bahasa C

Alasan Penggunaan Bahasa C

Bahasa C saat ini

Bahasa C saat ini masih merupakan bahasa pemrograman yang banyak digunakan dan powerful. Sebelummasih merupakan bahasa pemrograman yang banyak digunakan dan powerful. Sebelum melangkah lebih jauh, penulis akan

melangkah lebih jauh, penulis akan menjelaskan beberapa alasan penggunaan bahasa C.menjelaskan beberapa alasan penggunaan bahasa C. 1.

1. DalaDalam beberapm beberapa aplikaa aplikasi pemrogsi pemrogramaraman pada sisten pada sistem operasi wim operasi windowndows, kita tidak das, kita tidak dapat ataupat atau sangat sulit menggunakan bahasa pemrograman selain C, misalnya untuk

sangat sulit menggunakan bahasa pemrograman selain C, misalnya untuk mengaplikasikanmengaplikasikan sebuah User Interface yang belum memiliki dukungan library untuk C++ pada visual C++ atau sebuah User Interface yang belum memiliki dukungan library untuk C++ pada visual C++ atau

(5)

dalam pembuatan driver. Penulis menyebutkan sangat sulit

dalam pembuatan driver. Penulis menyebutkan sangat sulit berarti tidak menutup kemungkinanberarti tidak menutup kemungkinan menggunakan bahasa lain, bahasa lain tersebut adalah C++, namun dukungan ofisial dari menggunakan bahasa lain, bahasa lain tersebut adalah C++, namun dukungan ofisial dari microsoft untuk penggunaan C++ pada kasus yang di

microsoft untuk penggunaan C++ pada kasus yang di sebutkan sebelumnya belum ada sehinggasebutkan sebelumnya belum ada sehingga anda harus membuat semacam "wrapper" sendiri jika ingin menggunakan C++ dan hal ini sulit anda harus membuat semacam "wrapper" sendiri jika ingin menggunakan C++ dan hal ini sulit dilakukan bagi pemrogram pemula. Perlu diket

dilakukan bagi pemrogram pemula. Perlu diket ahui bahwa Windows saat ini belum ahui bahwa Windows saat ini belum merupakanmerupakan sistem operasi yang benar-benar object oriented (C++ adalah bahasa pemrograman yang object sistem operasi yang benar-benar object oriented (C++ adalah bahasa pemrograman yang object oriented) dan "core" dari sistem

oriented) dan "core" dari sistem operasinya sendiri masih diimplementasikan dalam bahasa C,operasinya sendiri masih diimplementasikan dalam bahasa C, sehingga fleksibilitas terbesar dalam membuat software untuk windows akan kita peroleh jika sehingga fleksibilitas terbesar dalam membuat software untuk windows akan kita peroleh jika kita menggunakan bahasa C. Namun demikian, cara ini

kita menggunakan bahasa C. Namun demikian, cara ini juga merupakan salah satu cara juga merupakan salah satu cara yangyang cukup sulit bagi para pemrogram pemula, namun anda tidak perlu khawatir, sebab dalam tutorial cukup sulit bagi para pemrogram pemula, namun anda tidak perlu khawatir, sebab dalam tutorial ini akan dijelaskan prinsip

ini akan dijelaskan prinsip dasarnya.dasarnya. 2.

2. BeberBeberapa softwapa software membare membutuhutuhkan kinekan kinerja yang tinrja yang tinggi dari segggi dari segi kecepatai kecepatan, hal ini bisa din, hal ini bisa dicapacapaii dengan mudah jika kita menggunakan bahasa pemrograman yang "sederhana" seperti

dengan mudah jika kita menggunakan bahasa pemrograman yang "sederhana" seperti C. PenulisC. Penulis sendiri telah membuat beberapa software dalam dua versi, yaitu C

sendiri telah membuat beberapa software dalam dua versi, yaitu C "murni" dan C++ , kemudian"murni" dan C++ , kemudian membandingkan kinerjanya, ternyata software yang diimplementasikan dengan C

membandingkan kinerjanya, ternyata software yang diimplementasikan dengan C memilikimemiliki kinerja yang lebih tinggi.

kinerja yang lebih tinggi. 3.

3. KelemaKelemahan darhan dari bahasa C yani bahasa C yang penulig penulis ketahus ketahui sampai sampai saat ini adali saat ini adalah dari segi komah dari segi kompleksipleksitastas pemeliharaan dan pengembangan software yang kita buat,

pemeliharaan dan pengembangan software yang kita buat, jika software tersebut jika software tersebut sudah cukupsudah cukup kompleks. Sebagai contoh, software ExploChip pada art

kompleks. Sebagai contoh, software ExploChip pada art ikel Tutorial Membuat Patch... dibuatikel Tutorial Membuat Patch... dibuat dengan C++, C dan

dengan C++, C dan Assembly, namun C++ merupakan bahasa yang terbanyak digunakan untukAssembly, namun C++ merupakan bahasa yang terbanyak digunakan untuk memudahkan pemeliharaan dan pengembangan.

memudahkan pemeliharaan dan pengembangan.

Pengenalan Sintaks Bahasa C

Pengenalan Sintaks Bahasa C

Sintaks adalah suatu bentuk dasar (biasanya kata) yang dapat dipahami dan diolah oleh compiler. Pada Sintaks adalah suatu bentuk dasar (biasanya kata) yang dapat dipahami dan diolah oleh compiler. Pada bagian ini akan di bahas beberapa sintaks yang umum digunakan dalam bahasa C, selain itu akan bagian ini akan di bahas beberapa sintaks yang umum digunakan dalam bahasa C, selain itu akan dijelaskan bagaimana cara kerja compiler C secara umum. Sebelum melangkah lebih jauh, perlu anda dijelaskan bagaimana cara kerja compiler C secara umum. Sebelum melangkah lebih jauh, perlu anda ketahui bahwa C adalah bahasa pemrograman yang

ketahui bahwa C adalah bahasa pemrograman yang case sensitive, sehingga var, case sensitive, sehingga var, Var, dan VAR adalahVar, dan VAR adalah tiga hal yang berbeda pada bahasa C.

tiga hal yang berbeda pada bahasa C.

Preprocessor dan Macro

Preprocessor dan Macro

Preprocessor Preprocessor33

adalah bagian dari sebuah software development tool adalah bagian dari sebuah software development tool44

untuk bahasa C yang bertugas untuk bahasa C yang bertugas untukuntuk melakukan pengolahan source code sebelum diberikan kepada compiler untuk diolah lebih lanjut.

melakukan pengolahan source code sebelum diberikan kepada compiler untuk diolah lebih lanjut. Preprocessor pada dasarnya menerjemahkan source code yang kita buat ke bentuk yang

Preprocessor pada dasarnya menerjemahkan source code yang kita buat ke bentuk yang dapat dikenalidapat dikenali oleh compiler. Dalam bahasa C, ada beberapa keyword

oleh compiler. Dalam bahasa C, ada beberapa keyword55

yang sebenarnya tidak dikenali oleh compiler, yang sebenarnya tidak dikenali oleh compiler, umumnya keyword ini diawali dengan #,

umumnya keyword ini diawali dengan #, misalnya #macro,misalnya #macro,

#define

#define

,,

#include

#include

, #pragma dan lain-, #pragma dan lain-lain, keyword inilah yang diolah oleh preprocessor. Preprocessor merupakan salah satu bagian Software lain, keyword inilah yang diolah oleh preprocessor. Preprocessor merupakan salah satu bagian Software Development Tool yang tergantung kepada vendor yang membuat tool tersebut, namun demikian, kita Development Tool yang tergantung kepada vendor yang membuat tool tersebut, namun demikian, kita akan membahas beberapa keyword yang umum diolah oleh preprocessor (telah di standarisasi). Keyword akan membahas beberapa keyword yang umum diolah oleh preprocessor (telah di standarisasi). Keyword yang diolah oleh preprocessor antara lain:

yang diolah oleh preprocessor antara lain: Catatan:

Catatan:

3 3

Preprocessor juga ada dalam bahasa lain, tetapi yang kita maksud di sini

Preprocessor juga ada dalam bahasa lain, tetapi yang kita maksud di sini adalah preprocessor untukadalah preprocessor untuk bahasa C.

bahasa C.

4 4

Software development Tool misalnya Turbo C, Visual C++, Borland C++ Builder, GNU C dan

Software development Tool misalnya Turbo C, Visual C++, Borland C++ Builder, GNU C dan lain-lainlain-lain yang dapat mengolah source code C.

yang dapat mengolah source code C.

5

5Kata-kata yang mempunyai arti khusus dan digunakan secara internal oleh compiler.Kata-kata yang mempunyai arti khusus dan digunakan secara internal oleh compiler.

#include

#include

, keyword ini membuat kita seakan-akan telah mengetik isi , keyword ini membuat kita seakan-akan telah mengetik isi dari file yang dicantumkandari file yang dicantumkan sesudah keyword tersebut. Misalnya:

sesudah keyword tersebut. Misalnya:

#include < stdio.h >

#include < stdio.h >

akan membuat preprocessorakan membuat preprocessor mengekspansikan file stdio.h pada tempat keyword

mengekspansikan file stdio.h pada tempat keyword

#include

#include

tadi diketikkan.tadi diketikkan.

#include

#include

mempunyaimempunyai dua macam bentuk yaitu

dua macam bentuk yaitu

#include

#include <...>

<...>

dandan

#include

#include "..."

"..."

, titik-titik tersebut adalah nama, titik-titik tersebut adalah nama file.

file.

#include

#include <...>

<...>

akan membuat preprocessor mencari file akan membuat preprocessor mencari file yang namanya dicantumkan di dalamyang namanya dicantumkan di dalam kurung pada direktori- direktori yang tel

kurung pada direktori- direktori yang tel ah didefinisikan oleh software development tool yang kitaah didefinisikan oleh software development tool yang kita gunakan, misalnya pada direktory

gunakan, misalnya pada direktory

INC, INCLUDE

INC, INCLUDE

, dan lain-lain., dan lain-lain.

#include

#include "..."

"..."

akan membuatakan membuat preprocessor mencari file yang namanya dicantumkan di dalam tanda petik ganda pada direktori file preprocessor mencari file yang namanya dicantumkan di dalam tanda petik ganda pada direktori file yangyang memiliki keyword

memiliki keyword

#include

#include

tersebut. Misalnya anda mengerjakan file test.c yang ada pada direktoritersebut. Misalnya anda mengerjakan file test.c yang ada pada direktori bernama test, dan anda

bernama test, dan anda mengetikkanmengetikkan

#include "test.h"

#include

"test.h"

, maka preprocessor akan mencari file, maka preprocessor akan mencari file test.h pada direktori test.

(6)

#define,

#define,

keyword ini mempunyai format:keyword ini mempunyai format:

#define

#define identifier token-string

identifier token-string

optopt. Identifier. Identifier adalah nama sebuah konstanta yang akan kita

adalah nama sebuah konstanta yang akan kita gunakan dalam program kita, dangunakan dalam program kita, dan

token-string

token-string

adalah nilai dari identifier tersebut (nilai

adalah nilai dari identifier tersebut (nilai ini harus dapat dikenali oleh compiler),ini harus dapat dikenali oleh compiler),

token-string

token-string

dapatdapat merupakan sebuah ekspresi6. Preprocessor akan mengganti setiap

merupakan sebuah ekspresi6. Preprocessor akan mengganti setiap kemunculan identifier dengan nilaikemunculan identifier dengan nilai pada

pada

token-string

token-string

. Jika. Jika

token-string

token-string

dikosongkan, maka identifier tadi akan hilang dari sourcedikosongkan, maka identifier tadi akan hilang dari source code program kita (pada baris-baris selanjutnya, identifier menjadi tidak dikenali

code program kita (pada baris-baris selanjutnya, identifier menjadi tidak dikenali sebab tidak memilikisebab tidak memiliki nilai lagi). Contoh:

nilai lagi). Contoh:

#define

#define a 0xff

a 0xff

akan membuat setiap kemunculan a dalam program, akan membuat setiap kemunculan a dalam program, misalnyamisalnya

Function1(a)

Function1(a)

diganti dengandiganti dengan

0xff

0xff

(255 desimal), dan jika sesudah baris Function1(a) ada baris(255 desimal), dan jika sesudah baris Function1(a) ada baris

#define

#define

a , maka a sudah tidak akan dikenali lagi a , maka a sudah tidak akan dikenali lagi pada bagian selanjutnya. Dengan demikianpada bagian selanjutnya. Dengan demikian penggunaan a pada baris-baris selanjutnya adalah ilegal

penggunaan a pada baris-baris selanjutnya adalah ilegal (compiler akan memberikan pesan kesalahan(compiler akan memberikan pesan kesalahan saat program di buat/ di-compile). Jika pada

saat program di buat/ di-compile). Jika pada

#define identifier token-string

#define identifier token-string

optopt,,

token-

token-string

string

merupakan sebuah ekspresi, maka identifier tersebut disebut sebagai makro. Makro akan diolahmerupakan sebuah ekspresi, maka identifier tersebut disebut sebagai makro. Makro akan diolah preprocessor, setiap kemunculan

preprocessor, setiap kemunculan

identifier

identifier

pada source code yang akan diganti dengan ekspresipada source code yang akan diganti dengan ekspresi

token-string

token-string

(jika baris source code tsb t(jika baris source code tsb t idak mengandungidak mengandung

#

#

sebagai karakter pertamanya),sebagai karakter pertamanya), ekspresi ini kemudian diolah oleh compiler.

ekspresi ini kemudian diolah oleh compiler. Catatan:

Catatan:

6

6Ekspresi adalah sekumpulan operator (misalnya +, -, dll) dan operand (variabel yangEkspresi adalah sekumpulan operator (misalnya +, -, dll) dan operand (variabel yang

dikenai operasi) yang mengerjakan salah satu kombinasi aktivitas berikut: Menghitung dikenai operasi) yang mengerjakan salah satu kombinasi aktivitas berikut: Menghitung nilai, memindahkan nilai ke dalam suatu objek atau fungsi (fungsi akan dijelaskan lebih nilai, memindahkan nilai ke dalam suatu objek atau fungsi (fungsi akan dijelaskan lebih lanjut), atau menghasilkan efek samping (misalnya membuat sebuah baris

lanjut), atau menghasilkan efek samping (misalnya membuat sebuah baris programprogram dieksekusi atau tidak).

dieksekusi atau tidak). Contoh:

Contoh: makro

makro

#define a ((c)*(d))

#define a ((c)*(d))

akan mengganti setiap kemunculan a dengan nilai hasil perkalianakan mengganti setiap kemunculan a dengan nilai hasil perkalian variabel c dan d. Tanda kurung yang banyak untuk memastikan bahwa makro kita dieksekusi sesuai variabel c dan d. Tanda kurung yang banyak untuk memastikan bahwa makro kita dieksekusi sesuai dengan yang kita inginkan, sebab ada yang disebut dengan operator precedence, yaitu urutan pengerjaan dengan yang kita inginkan, sebab ada yang disebut dengan operator precedence, yaitu urutan pengerjaan operator jika berbagai operator muncul dalam sebuah pernyataan. Misalnya:

operator jika berbagai operator muncul dalam sebuah pernyataan. Misalnya:

a*b+c

a*b+c

, pada ekspresi ini,, pada ekspresi ini, yang akan diolah terlebih dulu adalah perkalian a dan b, kemudian hasilnya dijumlahkan dengan c. yang akan diolah terlebih dulu adalah perkalian a dan b, kemudian hasilnya dijumlahkan dengan c. makro dapat mempunyai parameter(nilai input). Berikut

makro dapat mempunyai parameter(nilai input). Berikut ini contohnya:ini contohnya:

#define kali(a,b) ((a)*(b))

#define kali(a,b) ((a)*(b))

....

....

int y = 20;

int y = 20;

int z = 90;

int z = 90;

int x = kali(y,z);

int x = kali(y,z);

Pada source code di atas, int

Pada source code di atas, int adalah tipe data variabel, kita akan belajar lebih adalah tipe data variabel, kita akan belajar lebih lanjut tentang hal ini. Saatlanjut tentang hal ini. Saat preprocessor menemukan ekspresi

preprocessor menemukan ekspresi

kali(y,z)

kali(y,z)

, maka nilai y dan z dari , maka nilai y dan z dari baris-baris sebelumnya akanbaris-baris sebelumnya akan menggantikan y dan z pada

menggantikan y dan z pada

kali(y,z)

kali(y,z)

, kemudian, kemudian

kali(y,z)

kali(y,z)

berubah menjadiberubah menjadi

((y)*(z))

((y)*(z))

sehingga diperoleh

sehingga diperoleh

20x90 = 1800

20x90 = 1800

, kemudian hasil ini dipindahkan ke x (tanda = , kemudian hasil ini dipindahkan ke x (tanda = artinya pindahkanartinya pindahkan nilai di sebelah kanan tanda ini ke

nilai di sebelah kanan tanda ini ke variabel yang ada di sebelah kiri tanda ini).variabel yang ada di sebelah kiri tanda ini).

#if

#if

, keyword ini digunakan untuk menentukan pengolahan baris-baris source code sesudahnya, sampai, keyword ini digunakan untuk menentukan pengolahan baris-baris source code sesudahnya, sampai dengan keyword

dengan keyword

#endif

#endif

. Formatnya adalah :. Formatnya adalah :

#if

#if

expression , expression adalah sebuah ekspresi yangexpression , expression adalah sebuah ekspresi yang valid (dapat diolah oleh compiler). Jika e

valid (dapat diolah oleh compiler). Jika e kspresi tersebut benar maka baris-baris source code sesudahkspresi tersebut benar maka baris-baris source code sesudah

#if

#if

akan diolah dan sebaliknya jika ekspresi tersebut bernilai akan diolah dan sebaliknya jika ekspresi tersebut bernilai salah. Keyword ini harus digunakansalah. Keyword ini harus digunakan bersama dengan keyword

bersama dengan keyword

#endif

#endif

untuk menandakan batas penggunaan keyword tersebut dalam sourceuntuk menandakan batas penggunaan keyword tersebut dalam source code. Contoh: code. Contoh:

#define TEST 2

#define TEST 2

#if (TEST > 0)

#if (TEST > 0)

...

...

baris source code;

baris source code;

#endif

#endif

Pada potongan program diatas, baris source code akan diolah sebab ekspresi

(7)

#ifdef

#ifdef

, keyword ini , keyword ini penggunaanpenggunaannya sama dengannya sama dengan

#if

#if

. Formatnya:. Formatnya:

#ifdef

#ifdef identifier

identifier

, identifier, identifier adalah sebuah konstanta. Jika identifier

adalah sebuah konstanta. Jika identifier telah didefinisikan sebelumnya (dengan keywordtelah didefinisikan sebelumnya (dengan keyword

#define

#define

)) maka baris-baris source code sesudah

maka baris-baris source code sesudah

#ifdef

#ifdef

akan diolah oleh kompiler, demikian pula sebaliknya.akan diolah oleh kompiler, demikian pula sebaliknya. Keyword ini harus

Keyword ini harus digunakan bersama dengan keyworddigunakan bersama dengan keyword

#endif

#endif

untuk menandakan batas penggunaanuntuk menandakan batas penggunaan keyword tersebut dalam source code

keyword tersebut dalam source code

#ifndef

#ifndef

, keyword ini mempunyai format yang sama dengan, keyword ini mempunyai format yang sama dengan

#ifdef

#ifdef

, tetapi cara kerjanya adalah, tetapi cara kerjanya adalah kebalikan dari

kebalikan dari

#ifdef

#ifdef

, sehingga jika baris- baris program sesudahnya justru diolah jika identifier , sehingga jika baris- baris program sesudahnya justru diolah jika identifier tidaktidak didefinisikan sebelumnya. Keyword ini harus digunakan bersama

didefinisikan sebelumnya. Keyword ini harus digunakan bersama dengan keyworddengan keyword

#endif

#endif

untukuntuk menandakan batas penggunaan keyword tersebut dalam source

menandakan batas penggunaan keyword tersebut dalam source codecode

#endif

#endif

, keyword ini sebagai pembatas untuk menadakan bagian akhir dari source code yang akan, keyword ini sebagai pembatas untuk menadakan bagian akhir dari source code yang akan dikenai efek jika keyword

dikenai efek jika keyword

#if

#if

,,

#ifdef

#ifdef

dandan

#ifndef

#ifndef

dievaluasi.dievaluasi.

#undef

#undef

, adalah keyword untuk menonaktifkan identifier yang telah didefinisikan dengan, adalah keyword untuk menonaktifkan identifier yang telah didefinisikan dengan

#define

#define

,, efeknya sama dengan

efeknya sama dengan

#define identifier

#define

identifier

. Dengan demikian kita . Dengan demikian kita dapat mendefinisikan kembalidapat mendefinisikan kembali identifier tadi setelah #undef.

identifier tadi setelah #undef.

#else

#else

, keyword ini digunakan di antara keyword, keyword ini digunakan di antara keyword

#if

#if

,,

#ifdef

#ifdef

,,

#ifndef

#ifndef

dengan keyworddengan keyword

#endif

#endif

.. Jika ekspresi pada keyword

Jika ekspresi pada keyword

#if

#if

,,

#ifdef

#ifdef

,,

#ifndef

#ifndef

benar maka source code sesudah #else, tidak akanbenar maka source code sesudah #else, tidak akan dieksekusi,demikian pula sebaliknya.Contoh:

dieksekusi,demikian pula sebaliknya.Contoh:

#define TEST 0

#define TEST 0

#if (TEST > 0)

#if (TEST > 0)

...

...

baris source code1;

baris source code1;

#else

#else

...

...

baris source code2;

baris source code2;

#endif

#endif

Pada potongan program diatas,Pada potongan program diatas,

baris source code2;

baris source code2;

akan diolah sebab ekspresiakan diolah sebab ekspresi

TEST

TEST

> 0

> 0

adalah salah.adalah salah.

Compiler

Compiler

Compiler adalah bagian dari Software Development Tool yang kita gunakan, yang bertugas Compiler adalah bagian dari Software Development Tool yang kita gunakan, yang bertugas menerjemahkan source code yang telah diolah oleh prepocessor menjadi bahasa assembly yang menerjemahkan source code yang telah diolah oleh prepocessor menjadi bahasa assembly yang

selanjutnya akan diolah oleh assembler untuk dijadikan machine code yang dapat dieksekusi. Bahasa C selanjutnya akan diolah oleh assembler untuk dijadikan machine code yang dapat dieksekusi. Bahasa C dikatakan sebagai bahasa pemrograman yang portable, sebab

dikatakan sebagai bahasa pemrograman yang portable, sebab dengan memberikan switch tertentudengan memberikan switch tertentu kepada compiler C pada saat kompilasi dilakukan, compiler akan menghasilkan file assembly yang kepada compiler C pada saat kompilasi dilakukan, compiler akan menghasilkan file assembly yang berbeda, sesuai dengan tipe arsitektur yang kita pil

berbeda, sesuai dengan tipe arsitektur yang kita pil ih (dengan menggunakan switch tersebut), namunih (dengan menggunakan switch tersebut), namun kemampuan ini juga tergantung kepada Software development Tool yang kita gunakan.

kemampuan ini juga tergantung kepada Software development Tool yang kita gunakan.

Linker

Linker

Linker adalah bagian dari Software development Tool yang bertugas mengubah format machine code yang Linker adalah bagian dari Software development Tool yang bertugas mengubah format machine code yang dihasilkan oleh assembler menjadi instruksi yang dapat dieksekusi. Jadi sebenarnya assembler tidak dihasilkan oleh assembler menjadi instruksi yang dapat dieksekusi. Jadi sebenarnya assembler tidak menghasilkan sebuah program yang dapat dieksekusi. Sebuah file

menghasilkan sebuah program yang dapat dieksekusi. Sebuah file yang dapat dieksekusi mempunyaiyang dapat dieksekusi mempunyai format header tertentu, dan dari satu sistem

format header tertentu, dan dari satu sistem operasi ke sistem operasi yang lain operasi ke sistem operasi yang lain formatnya berbeda-beda.formatnya berbeda-beda. Linker juga mempunyai fungsi lain,

Linker juga mempunyai fungsi lain, yaitu menyatukan komponen-komponen dari software yang kita yaitu menyatukan komponen-komponen dari software yang kita buatbuat ke dalam file executable yang nantinya akan dihasilkan setelah melalui linker,

ke dalam file executable yang nantinya akan dihasilkan setelah melalui linker, misalnya software tersebutmisalnya software tersebut mempunyai komponen eksternal seperti resource pada windows, resource sebenarnya bukan bagian dari mempunyai komponen eksternal seperti resource pada windows, resource sebenarnya bukan bagian dari program yang dieksekusi tetapi ikut disertakan dalam program karena dibutuhkan , contoh resource: program yang dieksekusi tetapi ikut disertakan dalam program karena dibutuhkan , contoh resource: ikonikon yang akan ditampilkan pada sebuah program. Komponen

yang akan ditampilkan pada sebuah program. Komponen lain yang kadang-kadang disatukan oleh linkerlain yang kadang-kadang disatukan oleh linker adalah dll (dynamic link library) yang disatukan secara "static" ke

adalah dll (dynamic link library) yang disatukan secara "static" ke dalam file executable, selain itu linkerdalam file executable, selain itu linker  juga menyatukan file objek (obj) diluar file

 juga menyatukan file objek (obj) diluar file objek yang kita hasilkan jika dibutuhkan oleh program kita keobjek yang kita hasilkan jika dibutuhkan oleh program kita ke dalam executable yang akan dibentuk.

(8)

Pernyataan

Pernyataan

dalam bahasa C adalah sebuah baris program yang dapat diproses oleh compiler. Pernyataan diakhiri dalam bahasa C adalah sebuah baris program yang dapat diproses oleh compiler. Pernyataan diakhiri dengan tanda

dengan tanda

;

;

(titik-koma). Setiap pernyataan dapat berisi beberapa ekspresi, operator maupun(titik-koma). Setiap pernyataan dapat berisi beberapa ekspresi, operator maupun operand. Contoh:

operand. Contoh:

return;

return;

Sekelompok pernyataan yang disatukan dalam sebuah kurung kurawal (kadang

Sekelompok pernyataan yang disatukan dalam sebuah kurung kurawal (kadang di sebut sebagaidi sebut sebagai block of block of  statement 

statement  atauatau blok pernyataanblok pernyataan ) juga diperlakukan seperti sebuah pernyataan biasa, hal ini terutama) juga diperlakukan seperti sebuah pernyataan biasa, hal ini terutama berguna saat anda akan mengatur e

berguna saat anda akan mengatur e ksekusi sekelompok pernyataan dalam sebuah percabangan sepertiksekusi sekelompok pernyataan dalam sebuah percabangan seperti contoh di bawah ini:

contoh di bawah ini:

if (a > b)

if (a > b)

{

{

pernyataan 1;

pernyataan 1;

pernyataan 2;

pernyataan 2;

pernyataan 3;

pernyataan 3;

}

}

jika ekspresi didalam kurung sesudahjika ekspresi didalam kurung sesudah

if ( ekspresi a > b)

if ( ekspresi a > b)

bernilai benar maka seluruhbernilai benar maka seluruh pernyataan di dalam kurung kurawal akan dieksekusi. Sebenarnya keyword if 

pernyataan di dalam kurung kurawal akan dieksekusi. Sebenarnya keyword if  hanya dapat hanya dapat mengeksekusimengeksekusi satu pernyataan sesudah ekspresi yang diuji olehnya ( pada contoh di

satu pernyataan sesudah ekspresi yang diuji olehnya ( pada contoh di atas ekspresiatas ekspresi

a > b

a > b

), namun), namun dengan adanya kurung kurawal, pernyataan 1 s/d

dengan adanya kurung kurawal, pernyataan 1 s/d pernyataan 3 seolah-olahpernyataan 3 seolah-olah dianggap satu pernyataandianggap satu pernyataan saja

saja oleh compiler yang kita gunakan.oleh compiler yang kita gunakan.

Variabel

Variabel

adalah sebuah simbol yang mewakili sebuah alamat di memory yang nilainya dapat dimanipulasi melalui adalah sebuah simbol yang mewakili sebuah alamat di memory yang nilainya dapat dimanipulasi melalui nama tersebut dan mempunyai ukuran tertentu. Ukuran ini disebut tipe data. Tipe data

nama tersebut dan mempunyai ukuran tertentu. Ukuran ini disebut tipe data. Tipe data yang berbedayang berbeda kemungkinan mempunyai ukuran yang berbeda. Sintaks untuk mendeklarasikan (menyatakan pertama kemungkinan mempunyai ukuran yang berbeda. Sintaks untuk mendeklarasikan (menyatakan pertama kali adanya sebuah variabel) adalah:

kali adanya sebuah variabel) adalah:

tipe-data NamaVariabel

tipe-data NamaVariabel

Contoh:

Contoh:

int variabel1;

int variabel1;

Berikut ini adalah tipe data dan

Berikut ini adalah tipe data dan ukurannya.ukurannya.

Tipe data

Tipe data

Ukuran

Ukuran

(byte)

(byte)

Contoh

Contoh

bool

bool

1

1

bool

bool a

a =

= true

true ;

; bool

bool b

b =

= false

false

i

in

nt

t,

, u

un

ns

si

ig

gn

ne

ed

d i

in

nt

t

4

4

i

in

nt

t a

a =

= -

-2

25

55

5 ;

; u

un

ns

si

ig

gn

ne

ed

d i

in

nt

t b

b =

= 1

10

0

c

ch

ha

ar

r,

, u

un

ns

si

ig

gn

ne

ed

d c

ch

ha

ar

r 1

1

c

ch

ha

ar

r a

a =

= -

-1

1 ;

; u

un

ns

si

ig

gn

ne

ed

d c

ch

ha

ar

r b

b =

= 1

1

long, unsigned long 4

long, unsigned long 4

long c = 0xFF ; unsigned long d =

long c = 0xFF ; unsigned long d =

0xFFC

0xFFC

short, unsigned

short, unsigned

short

short

2

2

short e = 0xFFF ; unsigned short f =

short e = 0xFFF ; unsigned short f =

067

067

f

fl

lo

oa

at

t

4

4

f

fl

lo

oa

at

t

g

g

=

=

0

0.

.0

00

01

1

d

do

ou

ub

bl

le

e

8

8

d

do

ou

ub

bl

le

e

h

h

=

=

1

1.

.0

02

2e

e8

8

l

lo

on

ng

g d

do

ou

ub

bl

le

e

8

8

l

lo

on

ng

g d

do

ou

ub

bl

le

e h

h =

= 2

2.

.4

42

2e

e1

10

0

Variabel bertipe

Variabel bertipe

bool

bool

hanya mempunyai dua nilai yaituhanya mempunyai dua nilai yaitu truetrue atauatau falsefalse, jadi anda hanya dapat, jadi anda hanya dapat mengisinya dengan nilai ini. Perlu diperhatikan bahwa variabel bertipe

mengisinya dengan nilai ini. Perlu diperhatikan bahwa variabel bertipe

bool

bool

dianggap bernilai false jikadianggap bernilai false jika nilainya 0 , dan benar jika

nilainya 0 , dan benar jika nilainyanilainya

>= 1

>= 1

. Mungkin anda bertanya, mengapa untuk dua alternatif saja. Mungkin anda bertanya, mengapa untuk dua alternatif saja kita menggunakan 1 byte (8 bit) padahal untuk 2 alternatif

kita menggunakan 1 byte (8 bit) padahal untuk 2 alternatif hanya dibutuhkan 1 bit, hal ini disebabkanhanya dibutuhkan 1 bit, hal ini disebabkan oleh arsitektur kebanyakan microprocessor saat ini adalah "byte addessable", maksudnya nilai variabel oleh arsitektur kebanyakan microprocessor saat ini adalah "byte addessable", maksudnya nilai variabel terkecil yang dapat ditangani oleh microprocessor tersebut

terkecil yang dapat ditangani oleh microprocessor tersebut adalah byte. Variabel bertipeadalah byte. Variabel bertipe

int

int

(integer/bilangan bulat) dan

(integer/bilangan bulat) dan

unsigned int

unsigned int

(unsigned integer/bilangan bulat positif) hanya dapat diisi(unsigned integer/bilangan bulat positif) hanya dapat diisi dengan bilangan yang bernilai bulat (tidak ada nilai di belakang koma atau pecahan) termasuk 0. Pada dengan bilangan yang bernilai bulat (tidak ada nilai di belakang koma atau pecahan) termasuk 0. Pada

(9)

sistem operasi windows variabel dengan tipe ini memiliki

sistem operasi windows variabel dengan tipe ini memiliki nilai 32 bit (4 byte), sehingga untuk unsigned intnilai 32 bit (4 byte), sehingga untuk unsigned int nilai maksimumnya adalah 2

nilai maksimumnya adalah 23232

-1 (karena ada 0), int nilainya berada pada kisaran -(2 -1 (karena ada 0), int nilainya berada pada kisaran -(21616

) sampai 2 ) sampai 21616

-1 -1 (karena ada 0). Untuk variabel yang tipenya lain tentunya anda sudah dapat menghitung sendiri nilai (karena ada 0). Untuk variabel yang tipenya lain tentunya anda sudah dapat menghitung sendiri nilai kisarannya, karena semuanya analog dengan tipe data int. Anda hanya perlu mengetahui jumlah bit yang kisarannya, karena semuanya analog dengan tipe data int. Anda hanya perlu mengetahui jumlah bit yang digunakan variabel tersebut dan untuk yang signed, nilai negatif yang paling kecilnya adalah - (2

digunakan variabel tersebut dan untuk yang signed, nilai negatif yang paling kecilnya adalah - (2(jumlah bit tipe(jumlah bit tipe data tsb/2)

data tsb/2)) dan nilai maksimum positifnya adalah 2) dan nilai maksimum positifnya adalah 2 (jumlah bit tipe data tsb/2)(jumlah bit tipe data tsb/2)-1 (karena ada 0). Namun demikian, ada-1 (karena ada 0). Namun demikian, ada

tiga tipe variabel yang t

tiga tipe variabel yang t idak termasuk ke dalam golongan yang memenuhi aturan ini, yaituidak termasuk ke dalam golongan yang memenuhi aturan ini, yaitu

float,

float,

double

double

dandan

long double

long double

. Ketiga tipe ini adalah tipe variabel. Ketiga tipe ini adalah tipe variabel floating point floating point , yaitu variable yang, yaitu variable yang dinyatakan dalam

dinyatakan dalam mantissamantissa dandan eksponeneksponen. Mantissa adalah faktor pengali, . Mantissa adalah faktor pengali, dan eksponen adalah bilangandan eksponen adalah bilangan berpangkat 10 yang dikalikan dengan

berpangkat 10 yang dikalikan dengan mantissa tersebut. Misalnya 1,045x10e5 , pada bilangan inimantissa tersebut. Misalnya 1,045x10e5 , pada bilangan ini mantissa adalah 1,045 sedangkan eksponennya adalah 10e5 (10

mantissa adalah 1,045 sedangkan eksponennya adalah 10e5 (1055). Pada prakteknya variabel tipe floating). Pada prakteknya variabel tipe floating

point ditangani oleh bagian FPU (Floating Point Unit/Math Coprocessor) pada microprocessor kita. Pada point ditangani oleh bagian FPU (Floating Point Unit/Math Coprocessor) pada microprocessor kita. Pada variabel floating point

variabel floating point anda dapat memasukan data dengan nilai pecahan yang anda dapat memasukan data dengan nilai pecahan yang dikalikan dengandikalikan dengan eksponesial, misalnya 1,5x10

eksponesial, misalnya 1,5x103232

.Tipe data floating point

.Tipe data floating point nilai maksimum dan minimumnya tergantung padanilai maksimum dan minimumnya tergantung pada Software Development Tool yang kita gunakan, pada Visual C++ , kisarannya sebagai berikut: float Software Development Tool yang kita gunakan, pada Visual C++ , kisarannya sebagai berikut: float mempunyai nilai antara 10

mempunyai nilai antara 10-308-308s/d 10s/d 10308308, double , double mempunyai nilai antara -1.79769313486231x10mempunyai nilai antara -1.79769313486231x10308308s/ds/d

-4.94065645841247x10 -4.94065645841247x10-324-324

untuk bilangan negatif,

untuk bilangan negatif, dan 4.94065645841247x10dan 4.94065645841247x10-324-324

s/d s/d 1.79769313486231x10

1.79769313486231x10308308untuk bilangan positif, dan 0. Pada beberapa sistem long double dan doubleuntuk bilangan positif, dan 0. Pada beberapa sistem long double dan double

mempunyai ukuran berbeda, tetapi pada

mempunyai ukuran berbeda, tetapi pada Microsoft Visual C++, keduanya adalah identik. Microsoft Visual C++, keduanya adalah identik. Pada saatPada saat menentukan tipe data sebuah variabel

menentukan tipe data sebuah variabel yang akan anda gunakan anda harus memperhatikan nilaiyang akan anda gunakan anda harus memperhatikan nilai maksimum atau minimum yang dapat ditampung oleh tipe data tersebut agar tidak terjadi

maksimum atau minimum yang dapat ditampung oleh tipe data tersebut agar tidak terjadi kesalahankesalahan perhitungan, nilai dari variabel tersebut harus kurang dari atau sama dengan nilai maksimum yang dapat perhitungan, nilai dari variabel tersebut harus kurang dari atau sama dengan nilai maksimum yang dapat ditampung oleh tipe data tersebut. Anda juga dapat memasukkan bilangan bukan desimal(basis 10) ke ditampung oleh tipe data tersebut. Anda juga dapat memasukkan bilangan bukan desimal(basis 10) ke dalam variabel yang bukan floating

dalam variabel yang bukan floating point. Misalnya, anda dapat memasukkan nilai heksa desimal point. Misalnya, anda dapat memasukkan nilai heksa desimal (basis(basis 16) seperti

16) seperti

0xFF

0xFF

, bilangan octal (basis 8) seperti, bilangan octal (basis 8) seperti

0223

0223

. Selain sifat ini, variabel dengan tipe . Selain sifat ini, variabel dengan tipe data chardata char mempunyai sifat tersendiri, yaitu anda dapat memasukkan sekumpulan ke dalam variabel tersebut, mempunyai sifat tersendiri, yaitu anda dapat memasukkan sekumpulan ke dalam variabel tersebut, misalnya pada potongan source code berikut:

misalnya pada potongan source code berikut:

char message = "Ini adalah string"

char message = "Ini adalah string"

variabel char dengan deklarasi seperti di atas

variabel char dengan deklarasi seperti di atas sering di sebut string, sebab menyimpan sekumpulansering di sebut string, sebab menyimpan sekumpulan karakter, nilai variabel ini tidak

karakter, nilai variabel ini tidak begitu penting sebab yang kita simpan bukan merupakan nilai yang akanbegitu penting sebab yang kita simpan bukan merupakan nilai yang akan dioperasikan.

dioperasikan.

Variabel memiliki apa yang disebut

Variabel memiliki apa yang disebut variable scopevariable scope. Variable scope adalah daerah di dalam source code. Variable scope adalah daerah di dalam source code tempat sebuah variabel masih dikenali/terlihat oleh compiler. Misalnya seperti i

tempat sebuah variabel masih dikenali/terlihat oleh compiler. Misalnya seperti i ni: anda mendeklarasikanni: anda mendeklarasikan sebuah variabel di dalam sebuah fungsi di luar fungsi

sebuah variabel di dalam sebuah fungsi di luar fungsi

main(),

main(),

maka variabel tersebut hanya memilikimaka variabel tersebut hanya memiliki scope pada fungsi itu saja, sebab di luar

scope pada fungsi itu saja, sebab di luar fungsi tersebut variabel tersebut tidak akan dikenali fungsi tersebut variabel tersebut tidak akan dikenali oleholeh compiler. Variabel seperti ini biasa disebut

compiler. Variabel seperti ini biasa disebut variabel lokal. Kasus kedua adalah variabel yang dideklarasikanvariabel lokal. Kasus kedua adalah variabel yang dideklarasikan diluar semua fungsi, variabel seperti ini mempunyai scope dikeseluruhan source code yang kita

diluar semua fungsi, variabel seperti ini mempunyai scope dikeseluruhan source code yang kita miliki.miliki. Variabel seperti ini biasa juga disebut

Variabel seperti ini biasa juga disebut variabel global sebab variabel ini dikenali di variabel global sebab variabel ini dikenali di dalam fungsi manapundalam fungsi manapun dalam program kita, termasuk fungsi

dalam program kita, termasuk fungsi

main()

main()

. Implikasi dari adanya variabel global dan lokal adalah:. Implikasi dari adanya variabel global dan lokal adalah: 1.

1. Anda tidAnda tidak dapaak dapat menggut menggunakanakan nama varn nama variabel yaniabel yang sama ung sama untuk sebuatuk sebuah variabh variabel global dael global dan lokaln lokal sebab compiler akan menganggap variabel tersebut dideklarasikan 2 kali dan hal ini

sebab compiler akan menganggap variabel tersebut dideklarasikan 2 kali dan hal ini tidaktidak dibolehkan oleh compiler C.

dibolehkan oleh compiler C. 2.

2. Anda tiAnda tidak dapdak dapat mengat menggunagunakan varikan variabel lokabel lokal di luar fual di luar fungsi temngsi tempat vapat variabel terriabel tersebutsebut dideklarasikan, sebab variabel tersebut tidak akan dikenali oleh compiler.

dideklarasikan, sebab variabel tersebut tidak akan dikenali oleh compiler. Untuk memperjelas, akan diberikan contoh sebagai berikut:

Untuk memperjelas, akan diberikan contoh sebagai berikut:

#include <stdio.h>

#include <stdio.h>

#define UINT unsigned int

#define UINT unsigned int

/* deklarasi fungsi kali */

/* deklarasi fungsi kali */

UINT kali(UINT a, UINT b);

UINT kali(UINT a, UINT b);

UINT var_test;

UINT var_test;

void main()

void main()

{

{

UINT faktor1 = 10;

UINT faktor1 = 10;

UINT faktor2 = 20;

UINT faktor2 = 20;

UINT hasil ;

UINT hasil ;

hasil = kali(faktor1,faktor2);

hasil = kali(faktor1,faktor2);

printf("%d \n",hasil);

printf("%d \n",hasil);

}

}

(10)

UINT kali(UINT a, UINT b)

UINT kali(UINT a, UINT b)

{

{

UINT hasil = 30;

UINT hasil = 30;

UINT c = a*b;

UINT c = a*b;

return c;

return c;

}

}

Pada source code di atas,

Pada source code di atas,

var_test

var_test

adalah variabel global, sebab variabel ini dideklarasikan di luaradalah variabel global, sebab variabel ini dideklarasikan di luar semua fungsi. Variabel

semua fungsi. Variabel

faktor1

faktor1

,,

faktor2

faktor2

dan hasil adalah variabel lokal pada fungsidan hasil adalah variabel lokal pada fungsi

main()

main()

.. Variabel

Variabel

hasil

hasil

yang ada pada fungsi kali adalah variabel lokal, yang berbeda dengan variabelyang ada pada fungsi kali adalah variabel lokal, yang berbeda dengan variabel

hasil

hasil

yang ada pada fungsi

yang ada pada fungsi

main()

main()

sebab scope kedua variabel tersebut adalah berbeda. Anda perlusebab scope kedua variabel tersebut adalah berbeda. Anda perlu

memperhatikan hal seperti ini saat anda membuat program, sebab jika anda dengan seenaknya memberi memperhatikan hal seperti ini saat anda membuat program, sebab jika anda dengan seenaknya memberi nama pada variabel yang anda gunakan tanpa memperhatikan scope dari variabel tersebut, bisa-bisa nama pada variabel yang anda gunakan tanpa memperhatikan scope dari variabel tersebut, bisa-bisa program anda tidak dapat di-compile.

program anda tidak dapat di-compile.

Operator

Operator

Operator

Operator adalah karakter atau kumpulan karakter yang adalah karakter atau kumpulan karakter yang digunakan untuk memanipulasi variabel. Karakterdigunakan untuk memanipulasi variabel. Karakter atau kumpulan karakter ini dikenali secara spesifik oleh compiler

atau kumpulan karakter ini dikenali secara spesifik oleh compiler sehingga variabel yang diubah-ubahsehingga variabel yang diubah-ubah nilainya(operand) akan dikenai operasi sesuai dengan definisi operasi yang dimiliki oleh operator nilainya(operand) akan dikenai operasi sesuai dengan definisi operasi yang dimiliki oleh operator tadi.tadi. Dalam bahasa C ada tiga golongan besar operator, yaitu:

Dalam bahasa C ada tiga golongan besar operator, yaitu: unary operator

unary operator, operator ini hanya bekerja pada satu ope, operator ini hanya bekerja pada satu ope rand. Unary operator antara lain:rand. Unary operator antara lain:

Operator

Operator

Unary

Unary

Kegunaan

Kegunaan

- ~ !

- ~ !

Operator ini melakukan operasi negasi, yaitu merubah nilai operand

Operator ini melakukan operasi negasi, yaitu merubah nilai operand

menjadi nilai yang berlawanan tanda. Disebut juga Negation atau

menjadi nilai yang berlawanan tanda. Disebut juga Negation atau

complement operator

complement operator

++

++

Operator ini menaikkan nilai operand 1 satuan, disebut juga

Operator ini menaikkan nilai operand 1 satuan, disebut juga

increment operator.

increment operator.

----

Operator ini menurunkan nilai operand 1 satuan, disebut juga

Operator ini menurunkan nilai operand 1 satuan, disebut juga

decrement operator.

decrement operator.

*

*

Operator ini memberikan nilai yang tersimpan pada alamat memory

Operator ini memberikan nilai yang tersimpan pada alamat memory

yang ditunjuk oleh operand, disebut juga indirection operator.

yang ditunjuk oleh operand, disebut juga indirection operator.

Biasanya digunakan dalam operasi dengan pointer (akan dijelaskan

Biasanya digunakan dalam operasi dengan pointer (akan dijelaskan

lebih lanjut)

lebih lanjut)

&

&

Operator ini memberikan alamat memory operand. Biasanya

Operator ini memberikan alamat memory operand. Biasanya

digunakan dalam operasi dengan pointer (akan dijelaskan lebih

digunakan dalam operasi dengan pointer (akan dijelaskan lebih

lanjut). Disebut juga address of operator.

lanjut). Disebut juga address of operator.

sizeof

sizeof

(operand

(operand

)

)

Operator ini memberikan ukuran memory yang digunakan operand

Operator ini memberikan ukuran memory yang digunakan operand

dalam byte.

dalam byte.

operand

operand

adalah operand yang ukurannya akan dicari.

adalah operand yang ukurannya akan dicari.

binary operator

binary operator, operator ini bekerja pada , operator ini bekerja pada dua operand sekaligus. Operator binary antara lain:dua operand sekaligus. Operator binary antara lain:

Operator

Operator

Binary

Binary

Kegunaan

Kegunaan

Operator Matematis Operator Matematis

+

+

Operator ini menjumlahkan nilai operand di sebelah kiri dengan nilai

Operator ini menjumlahkan nilai operand di sebelah kiri dengan nilai

operand di sebeleh kanan

operand di sebeleh kanan

Referensi

Dokumen terkait

Dalam konteks kajian ini, elemen disposisi merujuk kepada enam elemen disposisi iaitu profesionalisme, semangat positif, semangat komunikasi, nilai sejagat, kesediaan belajar

RPP merupakan rencana pelaksanaan pembelajaran untuk setiap pertemuan. RPP berguna sebagai acuan bagi guru dalam melaksanakan kegiatan pembelajaran di

Sumber : Seri Perencanaan Pedoman Teknik Sarana Prasarana Rumah Sakit Kelas B, 2012 Dan Analisa

Mahasiswa mampu memahami, dan menjelaskan konsep dan perlakuan akuntansi untuk penggabungan badan usaha, pembuatan laporan keuangan konsolidasi, baik dengan metode

Penelitian ini dilakukan untuk mengetahui konsentrasi penambahan katalis DBTDL yang tepat atau efektif pada aplikasi cat acrylic berbasis solvent untuk

Selain itu, hasil FTIR menunjukan bahwa membran dengan penambahan kitosan mempunyai ikatan yang hampir sama dengan membran selulosa asetat murni, hal ini bisa diakibatkan

Adapun langkah-langkah yang ditempuh guru dalam pembelajaran kooperatif tipe CIRC adalah sebagai berikut: (1) guru menerangkan kompetensi dasar mendeskripsikan fungsi

Program keagaman di televisi memiliki tingkat popularitas yang berbeda-beda, menggunakan data video program keagamaan dari sample yang kami gunakan dalam penelitian