Rabu, 22 Juni 2011

Sejarah bahasa c,c++,dan pascal


1.      PENDAHULUAN
1.1. Sejarah Bahasa C



Sejarah perkembangan bahasa C dimulai dari pengembangan bahasa BCPL oleh Martin Richards pada tahun 1967. Kemudian berdasarkan pada bahasa BCPL tersebut, Ken Thompson yang bekerja di Bell Telephone Laboratories (Bell Labs) mengembangkan bahasa B pada tahun 1970. Saat itu bahasa B telah berhasil diimplementasikan di komputer DEC PDP-7 dengan operating system (OS) UNIX. Pada tahun 1972, peneliti lain di Bell Labs bernama Dennis Ritchie menyempurnakannya menjadi 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