1. PENDAHULUAN
1.1. Sejarah Bahasa C
Kemudian Dennis Ritchie bersama dengan Brian Kernighan mempublikasikan buku The C Programming Language yang diterbitkan oleh Prentice Hall, bahkan hingga saat ini telah diterjemahkan dalam berbagai bahasa di dunia. Jadi bisa disimpulkan bahwa buku tersebut menjadi legenda dalam sejarah perkembangan bahasa C sehingga sampai saat ini buku tersebut banyak dijadikan referensi oleh orang sebagai buku panduan di dalam mempelajari bahaa pemrograman komputer, khususnya bahasa C. Teknik dan gaya penulisan bahasa C yang tereferensi dari buku ini kemudian terkenal dengan sebutan K&R C atau kemudian disebut Classic C atau disebut juga Common C.
Seiring dengan pesatnya perkembangan bahasa C, banyak vendor mengembangkan kompiler C dengan versi masing - masing. Hal ini menggerakkan ANSI (American National Standards Institute) untuk membuat suatu komite yang kemudian disebut X3J11 pada tahun 1983, yang betujuan untuk membuat definisi standar bahasa C yang lebih modern dan komprehensif, dengan memperbaiki syntax dan grammar bahasa C. Usaha ini berhasil diselesaikan 5 tahun kemudian, yaitu ditandai dengan lahirnya standard ANSI untuk bahasa C yang kemudian terkenal dengan sebutan ANSI C pada tahun 1988.
2. PEMBAHASAN
Kalian sudah mengenal bahasa pemrograman Pascal kan? Jadi adalah mudah untuk memahami bahasa pemrograman lain. Contohnya adalah bahasa C dan C++ ini. Untuk memulainya, mari kita lihat contoh program (yang sudah me-‘legenda’) Hello World:
2.1. Gambaran Umum Sebuah Program
Inilah Pascal yang selama ini kalian kenal. Sudah tidak asing kan dengan source code di atas? Coba bandingkan dengan source code C dan C++ di bawah ini.
Beberapa hal yang perlu diingat mengenai bahasa C:sss
· Komentar dalam C menggunakan /* … */ dan bisa memuat beberapa baris sekaligus.
· Sebuah program dalam C harus memiliki fungsi bernama main(), fungsi ini adalah fungsi spesial karena di situlah main program kita.
· Dalam C sebenarnya tidak ada procedure, procedure didefinisikan sebagai function yang mengembalikan nilai void (void = sesuatu yang tidak ada).
· Setiap baris perintah harus diakhiri dengan titik koma ‘;’ kecuali yang diawali dengan kres ‘#’.
· Blok program diawali kurung-kurawal-buka ‘{’ dan diakhiri kurung-kurawal-tutup ‘}’.
· Bahasa C adalah bahasa yang case-sensitive, jadi perhatikan dalam penamaan variabel, type, maupun pemanggilan fungsi-fungsi yang sudah ada.
· Perintah terakhir di dalam main ( ) yaitu return 0 digunakan untuk mengindikasikan bahwa program tersebut sukses berjalan. Pada beberapa kontes pemrograman, hal ini merupakan salah satu syarat diterimanya program. (Program yang tidak me-return exit code 0 dianggap mengalami runtime error.)
2.2. Type, Variabel, dan Konstanta
2.2.1. Type
· Tipe data numerik bilangan bulat:
Nilai Min | Nilai Max | Pascal | C | C++ |
-128 | 127 | Shortint | Char | Char |
-32,768 | 32,767 | integer | int | int |
-2,147,483,648 | 2,147,483,647 | longint | long | long |
0 | 255 | Byte | Unsigned char | Unsigned char |
0 | 65.535 | Word | Unsigned int | Unsigned int |
0 | 4,294,967,295 | Longword | Unsigned long | Unsigned long |
· Tipe data numerik bilangan desimal:
Nilai Negatif | Nilai Positif | Pascal | C | C++ |
-3.4 x 10+38 s/d -3.4 x 10-38 | 3.4 x 10-38 s/d 3.4 x 10+38 | real | float | float |
-1.7 x 10+308 s/d -1.7 x 10-308 | 1.7 x 10-308 s/d 1.7 x 10+308 | double | double | double |
Ingat, seringkali terjadi ketidaktepatan pada representasi bilangan desimal. Untuk mengetes kesamaan nilai 2 buah bilangan, selalu gunakan perbandingan dengan epsilon (sebuah nilai yang sangat kecil). Contoh: untuk mengetes apakah bilangan desimal r1 sama dengan r2, gunakan: abs(r2-r1)<epsilon, dengan epsilon (misalnya) 1e-04.
· Type data karakter:
C : char
C++ : char
Pascal char
· Type data boolean:
Pascal | C | C++ |
type kondisi : boolean; | tidak ada | typedef bool kondisi; |
- Pada C++, bool dapat berisi true ataupun false, mirip Pascal.
- Pada C, tidak ada type boolean. Sebagai gantinya type bilangan bulat apapun bias dipakai sebagai ganti boolean dengan aturan false adalah 0 dan true adalah angka selain0.
· Type data array:
Pascal | C | C++ |
Type tabel = array[0..10] of integer; | typedef int tabel[11]; | typedef int tabel[11]; |
type matrix = array[0..20,0..30] of real; | typedef float matrix[21][31]; | typedef float matrix[21][31]; |
- Format deklarasinya : typedef <type-elemen> <nama-type>[<banyaknya elemen + 1>];
- Pada C dan C++ indeks array selalu dimulai dari 0.
- Jadi jika ditulis int tabel[11] artinya ada tabel[0] … tabel[10].
- Contoh cara pengaksesan : tabel[2], matrix[5][29]
· Type data string:
Pascal | C | C++ |
Type name = string (30); | Typedef char name (31); | typedef std::string name; |
- Untuk C, tidak ada type data khusus string, sehingga string didefinisikan sebagai array of char.
- Pada Pascal, name:string[30] artinya karakter diisi dari name[1]..name[30] sedangkan dalam C char name[31] artinya karakter diisi dari name[0]..name[30].
- Untuk C++, untuk menggunakan type string harus ada #include <string> di awal program harus menggunakan std::string.
· Type data struct (record):
Pascal | C | C++ |
type siswa = record nama:string[30]; kelas:integer; end; | typedef struct { char nama[31]; int kelas; } siswa; | typedef struct { std::string nama; int kelas; } siswa; |
- Misal deklarasi variabel : siswa anto;
- Maka akses ke elemennya menggunakan titik ‘.’ contoh : anto.nama, anto.kelas
· Type data enumerasi:
Pascal | C | C++ |
type hari = (senin, selasa, rabu, kamis, jumat, sabtu); | typedef enum { senin, selasa, rabu, kamis, jumat, sabtu; } hari; | typedef enum { senin, selasa, rabu, kamis, jumat, sabtu; } hari; |
- Jadi format : typedef enum {<elemen-elemen>} <nama-type>;
- Untuk contoh di atas, pada C dan C++ senin akan bernilai 0, selasa=1, rabu=2 dst…jika ditulis:
typedef enum
{
senin = 3, selasa = 7, rabu, kamis, jumat, sabtu = 20;
} hari;
maka senin bernilai 3, selasa=7, rabu=8, kamis=9, jumat=10, sabtu=20.
- Jadi jika nilai pada elemen tersebut tidak didefinisikan, akan dianggap +1 dari elemen sebelumnya.
· Type data pointer:
Pascal | C | C++ |
type address : ^integer; | typedef int *address; | typedef int *address; |
type addr : ^siswa; {type siswa ada di atas} | typedef siswa *addr; /*type siswa ada di atas*/ | typedef siswa *addr; //type siswa ada di atas |
- Ketika kita menggunakan Pascal, kita hampir tidak perlu berurusan dengan pointer, tapi di C mau tidak mau kita harus berurusan dengan tipe data satu ini.
- Pointer tidak menyimpan nilai, pointer hanya menyimpan alamat memory dari nilai yang disimpan, jadi bukan nilai itu sendiri.
- Misal address P; maka *P = 10 akan membuat nilai yang ditunjuk oleh P berubah menjadi 10, tapi P itu sendiri tidak berubah, P tetap menunjuk alamat yang sama.
2.2.2. Variabel
Syntax untuk deklarasi dan assigment variabel dalam C & C++ berbeda dengan Pascal.
Pascal | C | C++ |
angka : integer; hasil : real; tabel: array[0..10] of char; nama: string[30]; | int angka; float hasil; char tabel[11]; char nama[31]; | int angka; float hasil; char tabel[11]; std::string nama; |
angka := 10; hasil := 23.98; tabel[7] := ‘S’; nama := ‘alexander’; | angka = 10; hasil = 23.98; tabel[7] = ‘S’; strcpy (nama,”alexander”; | angka = 10; hasil = 23.98; tabel[7] = ‘S’; nama = “alexander”; |
- Jika pada Pascal bagian untuk deklarasi variabel harus diawali dengan var dan berada sebelum main program, hal ini tidak ada dalam C & C++, kita bisa mendeklarasikan variabel di mana pun.
- Aturan penamaan variabel:
ü case-sensitive
ü diawali dengan huruf
ü boleh terdiri dari huruf, angka, atau underscore ‘_’
ü tidak boleh ada variabel ganda, maupun konflik dengan reserved word
- Operator untuk assignment adalah ‘=’ jadi jangan sampai tertukar dengan operator komparasi ‘==’.
- Pada C & C++ kita bisa menyingkat deklarasi dan assignment sekaligus, contoh: int angka = 10; float hasil = 23.98;
- Format deklarasi variabel sangat mirip dengan format deklarasi type. Bedanya hanya tidak adanya kata kunci typedef.
2.2.3. Konstanta
Pascal | C | C++ |
const pi = 3.1415926; | Ada 2 cara: const float pi = 3.1415926; atau: #define pi 3.1415926 | Ada 2 cara: const float pi = 3.1415926; atau: #define pi 3.1415926 |
- Pada C & C++ konstanta biasa harus tetap dideklarasikan type-nya.
- #define adalah makro, di mana fungsinya mirip find&replace pada text editor.
- Formatnya: #define <nama> <nilai>, cara kerjanya adalah mencari <nama> di seluruh code dan mengubahnya menjadi <nilai>.
2.3. Input dan Output
2.3.1. Output
Pascal | C | C++ |
write(‘Apa kabar?’); | printf(“Apa kabar?”); | std::cout << “Apa kabar?”; |
writeln(‘Baik-baik saja’); | printf(“Baik-baik saja\n”); | std::cout << “Baik-baik saja\n” |
var i: integer; ... | int i; ... | int i; ... |
writeln(‘nilai i adalah ’,i); | printf(“nilai i adalah %d\n”,i); | std::cout << “nilai i adalah ” << i << “\n”; |
var c:char; f: real; ... writeln(‘c = ’,c,’ f = ’,f); | char c; float f; ... printf(“c = %c f = %f\n”,c,f); | char c; float f; ... std::cout << “c = ” << c << “f = ” << f << “\n”; |
- Untuk C, perlu #include <stdio.h> di awal program.
- Untuk C, output menggunakan fungsi printf (print formatted).
ü Formatnya:
§ printf(“<string beserta format variabel>”,<variabel>[, <variabel>,...]);
ü Jadi, bentuk dari keluaran dituliskan dulu formatnya sebagai parameter pertama printf dalam bentuk string (diapit oleh petik). Yang membedakan text biasa dengan format variabel adalah tanda %.
- Daftar format yang ada:
- Selain format, ada karakter-karakter khusus, contoh: ‘\n’ untuk akhir baris
- Untuk C++, perlu #include <iostream> di awal program.
- Untuk C++, output menggunakan std::cout
- Karakter-karakter khusus pada C juga berlaku pada C++.
2.3.2. Input
Pascal | C | C++ |
var i: integer; f: real; cc: char; | int i; float f; char cc; | int i; float f; char cc; |
read(i); | scanf(“%d”,&i); | std::cin >> i; |
read(f); | scanf(“%f”,&f); | std::cin >> f; |
read(cc); | scanf(“%c”,&cc); | std::cin >> cc; |
- Untuk C, perlu #include <stdio.h> di awal program.
- Untuk C, input menggunakan scanf (scan formatted).
- Format yang digunakan hampir sama dengan printf, namun setelah string format, yang diisi bukan nama variabel, melainkan pointer dari array tersebut. Makanya untuk memasukkan nilai desimal (%f) kedalam variabel f digunakan pointer f (&f).
- Untuk C++, perlu #include <iostream> di awal program.
- Untuk C++, input menggunakan std::cin.
2.4. Operator
2.4.1. Operasi Bilangan Bulat
Operator yang digunakan pada bilangan bulat dan menghasilkan bilangan bulat juga:
Definisi | Pascal | C | C++ |
Penjumlahan | + | + | + |
Pengurangan | - | - | - |
Perkalian | * | * | * |
Hasil Bagi | div | / | / |
Sisa Bagi | mod | % | % |
Increment | inc(x); | x++; atau ++x; | x++; atau ++x; |
| inc(x,a); | x+=a; | x+=a; |
Decrement | dec(x); | x--; atau –-x; | x--; atau --x; |
| dec(x,a); | x-=a; | x-=a; |
- Ada perbedaan antara x++ dengan ++x dan antara x-- dengan --x meskipun hasil akhirnya sama.
- Jika dijalankan: int x = 1; printf(“%d”, x++); maka yang keluar adalah angka 1.
ü Nilai x setelah itu adalah 2.
ü Tapi jika dijalankan: int x = 1; printf(“%d”, ++x); maka yang keluar adalah 2.
ü Nilai x setelah itu adalah 2.
- Begitu juga dengan x-- dan --x.
2.4.2. Operasi Pecahan
Operator yang digunakan pada bilangan pecahan dan menghasilkan pecahan juga:
Definisi | Pascal | C | C++ |
Penjumlahan | + | + | + |
Pengurangan | - | - | - |
Perkalian | * | * | * |
Hasil Bagi | / | / | / |
- Pada C & C++, operator pembagi ‘/’ menggunakan lambang yang sama. Jika / dioperasikan pada 2 buah bilangan bulat, maka otomatis menjadi operasi div, sedangkan jika salah satu operand-nya pecahan maka otomatis menjadi operasi pembagian biasa.
2.4.3. Operasi Boolean
Operator yang digunakan untuk memanipulasi true dan false:
Definisi | Pascal | C | C++ |
Negasi | not | ! | ! |
Konjungsi | and | && | && |
Disjungsi inklusif | or | | | | | | |
Disjungsi ekslusif | xor | ^ | ^ |
Tidak ada komentar:
Posting Komentar