Saturday, January 24, 2015

BAHASA PEMROGRAMAN C DAN C++

Kali ini saya akan berbagi tentang BAHASA PEMROGRAMAN C DAN C++. berikut informasinya.


Bahasa pemrograman C++ merupakan superset dari bahasa pendahulunya yaitu bahasa pemrograman C. Bahasa pemrograman C dikembangkan oleh Dennis Ritchie pada tahun 1972 di Laboratorium Bell. Bahasa pemrograman C adalah bahasa pemrograman yang dapat dikatakan berada antara bahasa tingkat rendah (berorientase mesin) dan bahasa tingkat tinggi (bahasa berorientase pada manusia). Bahasa pemrograman C berada satu tingkat di atas bahasa yang berorientasi pada mesin, namun tetap satu tingkat dibawah sebagian besar bahasa yang berorientasi persoalan. Bahasa pemrograman C cukup dekat dengan komputer untuk memberikan kendali yang besar terhadap detil implementasi pemakaian, namun cukup jauh untuk mengabaikan detil hardware. Karena itulah bahasa pemrograman C suatu ketika dipandang sebagai bahasa high-level dan pada saat yang lain dilihat sebagai bahasa low-level.
Bahasa pemrograman C merupakan bahasa pemrograman terstruktur, yang membagi program kedalam bentuk sebuah blok. Tujuannya adalah untuk memudahkan dalam pembuatan dan pengembangan program. Program yang ditulis dengan bahasa pemrograman C mudah sekali untuk dipindahkan dari satu jenis mesin ke jenis mesin lainnya. Hal ini berkat adanya standarisasi bahasa pemrograman C yaitu berupa standar ANSI (American National Standards Institute) yang dijadikan acuan oleh para pembuat kompiler C.

ELEMEN DASAR BAHASA PEMROGRAMAN C++

1. Identifier (Pengenal) Bahasa C++

Identifier adalah nama yang digunakan untuk mempresentasikan variabel, konstanta, jenis (type), fungsi, dan nama program. Identifier dalam pendeklarasian variabel, jenis, atau fungsi pada bahasa pemrograman C++ dimulai dengan sebuah huruf atau garis bawah. Karakter-karakter lain dalam sebuah identifier dapat berupa huruf, angka, garis bawah, atau tanda dollar. Compiler C++ membedakan huruf kecil dan besar. Variabel NAMA_PEGAWAI dan nama_pegawai dipandang sebagai dua identifier yang menggambarkan variabel memori yang berbeda. Contoh identifier yang diperkenankan untuk dipakai: a atau akelas atau kelas$ atau _kelas atau _KELAS$, sedangkan identifier yang tidak diperbolehkan untuk dipakai: $KELAS atau 7kelas atau kelas! atau ..kelas.

2. Himpunan Karakter

Himpunan karakter pada C++ terdiri dari huruf, digit maupun simbol-simbol lainnya (termasuk spasi, karakter kontrol)
Huruf: A B C D E F G H I J K L M N O P Q R S T U V W X Z Y a b c d e f g h i j k l m n o p q r s t u v w x y z
Digit: 0 1 2 3 4 5 6 7 8 9
Simbol dan lain-lain: _ - + * dan sebagainya.

3. Kata-kata Kunci

Kata kunci (keyword) adalah pengenal sistem yang mempunyai makna khusus bagi kompiler. Kegunaan dari golongan ini tidak dapat diubah. Karena itu kata kunci tidak dapat digunakan sebagai pengenal yang dibuat oleh pemrogram.
Kata kunci diusulkan ANSI:
auto, double, int, struct, break, else, loop, switch, case, enum, register, typedef, char, extern, return, union, const, float, short, unsigned, continue, for, signed, void, default, goto, sizeof, volatile, do, if, static, while

Sedangkan turbo C memperluasnya dengan menambahkan beberapa kata kunci:
_cs, _ss, far, near, _ds, asm, huge, pascal, _es, cdecl, interrupt

Sementara itu, Microsoft C/C++ menambah beberapa kata kunci:
_asm, _loadds, _cdecl, _huge, _far, _pascal, _export, _interrupt, _fortran, _segname, _near, _saveregs, _segment, _syscall, _self, _stdcall, _fastcall, _based

4. Tipe Data Bahasa C++

Tipe data dasar pada C++, yakni: teks (char), nilai integer (int, short, long), nilai floating-point (float, double, long double), dan enumerated (enum). Jika jenis data yang didefinisikan adalah variabel enumerated, maka ini terkait dengan konstanta integer yang telah diberi nama enumeration set. Dalam bahasa pemrograman C, jenis enum dianggap ekivalen dengan jenis int, sehingga memungkinkan sebuah program untuk memberikan nilai integer langsung pada variabel enumerated. Namun dalam bahasa pemrograman C++, ada mekanisme pemeriksaan jenis data yang ketat, dan tidak memperkenankan operasi campuran seperti ini.
Setiap bahasa memakai seperangkat karakter untuk mengekspresikan pernyataan yang mengandung arti. Bahasa pemrograman C++ ditulis menggunakan sejumlah karakter yang meliputi: 26 huruf kecil (a, b, c, ... dstnya) dan 26 huruf besar (A, B, C, ... dstnya); 10 angka (0, 1, 2, 3, 4, 5, 6, 7, 8, 9); dan lambang-lambang (+ - * = / . , : ; ? ' \ " ! @ # $ % ^ & * ( ) { } [ ]).
Ukuran memori yang diperlukan untuk masing-masing tipe data sangat bergantung pada perangkat keras dari komputer yang digunakan. Karena itu jangkauan bilangan dari masing-masing tipe data juga bisa berlainan antara satu jenis mesin dengan mesin lainnya. Nilai yang tercakup pada tipe data bilangan (bulat maupun pecahan) pada arsitektur PC yang berbasis DOS, adalah sebagai berikut:
Tipe data Ukuran memori Jangkauan nilai
char 1 byte -128 s/d +127
int 2 byte -32768 hingga +32767
short 2 byte -32.768 s/d 32.767
long 4 byte -2.147.438.648 s/d 2.147.438.647
float 4 byte 3,4x10-36 s/d 3,4x10+38
double 8 byte 1,7x10-308 s/d 1,7x10+308
long double 10 byte 3,4x10_4932 s/d 1,1x10+4932
enum 2 byte -32.768 s/d 32.767
pointer 2 byte (near, based)
pointer 4 byte (far, huge)

4.1. Tipe Data Tertentu

Modifier unsigned:
Yang termasuk jenis data modifier unsigned yang dapat diterapkan pada char, int, short, long adalah void dan pointer. Bila salah satu jenis data di atas dimodifikasi menjadi usigned, dapat dipandang range nilai yang bisa dijangkau mempresentasikan bilangan seperti pada angka yang ditunjukkan oleh jumlah kilometer yang telah ditempuh pada mobil atau sepeda motor. Angka tersebut dimulai dari 0000... dan mencapai maksimum 9999..., dan kembali ke 0000... Jadi dalam unsigned, yang ditampilkan hanyalah bilangan positif keseluruhan dalam range nol sampai ke bilangan maksimum yang dapat diprepresentasikannya.
Tipe data Ukuran memori Jangkauan nilai
unsigned char 1 byte 0 s/d 255
unsigned int 2 byte 0 s/d 32767
unsigned short 2 byte 0 s/d 32.767
unsigned long 4 byte 0 s/d 2.147.438.647

Modifier signed:
Digunakan untuk memperluas tanda yang digunakan integer dan karakter. Cara ini memungkinkan untuk menyimpan suatu nilai dalam bentuk bilangan positif atau negatif.

Tipe data Ukuran memori Jangkauan nilaisigned char 1 byte -128 s/d +127
signed int 2 byte -32768 hingga +32767
signed short 2 byte -32.768 s/d 32.767
signed long 4 byte -2.147.438.648 s/d 2.147.438.647
Untuk mengetahui ukuran memori yang diperlukan oleh semua tipe data, bisa dilihat dengan meng-compiler dan mengeksekusi contoh program sederhana, berikut:
//* Menentukan ukuran memori *
#include
#include
void main()
{
clrscr();
cout << "Ukuran char : " << sizeof(char) << '\n';
cout << "Ukuran short : " << sizeof(short) << '\n';
cout << "Ukuran int : " << sizeof(int) << '\n';
cout << "Ukuran long : " << sizeof(long) << '\n';
cout << "Ukuran float : " << sizeof(float) << '\n';
cout << "Ukuran double : " << sizeof(double) << '\n';
cout << "Ukuran long double : " << sizeof(long double) << '\n';
}

Penjelasan program:
Pemrograman C++ tidak terlepas dari fungsi. Sebab fungsi adalah salah satu dasar penyusunan blok pada C++. Sebuah program C++ minimal mengandung sebuah fungsi main(). Fungsi ini menjadi awal dan akhir eksekusi program C++. main adalah nama judul fungsi. Sedangkan yang dimulai dari tanda { hingga tanda } disebut tubuh fungsi. Semua yang terletak di dalam tanda {} disebut blok. Tanda () digunakan untuk mengapit argumen fungsi, yaitu nilai yang akan dilewatkan ke fungsi. Kata void yang mendahului main() dipakai untuk menyetakan bahwa fungsi ini tidak memiliki nilai balik.
Pengenal cout merupakan sebuah obyek di dalam C++. Obyek ini disediakan oleh C++ untuk mengarahkan data ke standard output (normalnya adalah layar), sebagai contoh tambahan misalnya:

cout << "Hallo! Selamat datang di website ideelok \n";
Tanda << merupakan sebuah operator yang disebut operator penyisipan/peletakan. Operator ini akan mengarahkan operand (data) yang terletak di sebelah kanan obyeknya ke obyek yang terletak di sebelah kiri. Pada pernyataan di atas, konstanta string "Hallo! Selamat datang di website ideelok \n" diarahkan ke cout, yang memberikan hasil berupa tampilan string tersebut ke layar. Didalam sebuah string, karakter \ diikuti dengan karakter tertentu menyatakan sebuah karakter tunggal. Pada contoh \n adalah karakter pindah baris (newline).
Pada baris #include , baris ini menginstruksikan kepada kompiler untuk menyiapkan file lain pada saat program dikompolasi. Dalam hal ini file-file yang berakhiran dengan .h disebut file header, yaitu file-file yang berisi berbagai deklarasi, seperti fungsi, variabel dan sebagainya. #include perlu disertakan pada program yang melibatkan obyek cout. Tanpa kehadiran baris tersebut akan terjadi kesalahan program sewaktu program dikompilasi. Sebab file iostream.h berisi deklarasi yang diperlukan oleh cout dan berbagai obyek yang berhubungan dengan operasi masukan-keluaran pada stream.
Pada baris clrscr(); adalah perintah untuk menghapus layar. Apabila pernyataan di atas digunakan, baris #include perlu disertakan dalam program.

5. Variabel dan Konstanta Bahasa C++

Data pada C++ tersusun dari variabel dan konstanta. Variabel merupakan komponen penting pada pemrograman. Variabel digunakan dalam program untuk menyimpan suatu nilai, dengan nilai yang ada padanya dapat diubah selama eksekusi program berlangsung. Adapun konstanta menyatakan nilai yang tetap. Misalnya 234 adalah sebuah konstanta bilangan bulat.

5.1. Mendeklarasikan dan Mendefinisikan Variabel

Variabel yang akan digunakan dalam program haruslah dideklarasikan terlebih dahulu, maksudnya mengenalkan sebuah pengenal ke program dan menentukan jenis data yang bisa disimpan di dalamnya. Apabila suatu pendeklarasian menyebabkan pengalokasian memori, maka pendeklarasian tersebut dinamakan pendefinisian. Yang jelas pendefinisian berarti pula pendeklarasian, tetapi tidak semua pendeklarasian berarti pendefinisian.
bentuk pendefinisian variabel:

tipe daftar_variabel;
Pada pendefinisian variabel, daftar_variabel dapat berupa sebuah variabel atau beberapa variabel yang dipisahkan dengan koma.

5.2. Memberikan Nilai ke Variabel

Bentuk pernyataan yang digunakan untuk memberikan nilai ke variabel adalah:
variabel = nilai;
Contoh:
jumlah = 10;
harga_barang = 1500;

5.3. Variabel dan Konstanta Bertipe char

Bentuk pernyataan variabel bertipe char:

char karakter;

Dalam hal ini variabel karakter bertipe char. Variabel ini dapat menampung data sebuah karakter. Untuk menuliskan sebuah konstanta bertipe char, karakter perlu ditulis di dalam tanda petik tunggal, contoh: 'A' karakter berupa huruf A.

Karakter yang ditulis dengan bentuk \karakter mempunyai arti tersendiri (karakter khusus) dan biasa disebut escape sequence characters.

Karakter-karakter khusus tersebut antara lain:
\0 artinya karakter ber-ASCII nol (karakter nul)
\a artinya karakter bel
\b artinya karakter backspace
\f artinya karakter formfeed (ganti halaman)
\n artinya karakter newline (pindah baris)
\r artinya karakter carriage return (ke awal baris) tanpa linefeed
\t artinya karakter tab horizontal
\v artinya karakter tab vertikal
\\ artinya karakter \
\' artinya karakter '
\" artinya karakter "
\? artinya karakter ?
\ooo artinya karakter yang nilai oktalnya adalah ooo (tiga digit oktal)
\xhh artinya karakter yang nilai heksadesimalnya adalah hh (dua digit heksadesimal)

5.4. Variabel dan Konstanta Bertipe int

Variabel bertipe int didefinisikan dengan bentuk:

int bilangan;
Setelah pendefinisian seperti itu, variabel ini dapat digunakan untuk menampung nilai bertipe int. Sebuah konstanta bertipe int adalah bilangan bulat yang terletak antara minus 32768 hingga plus 32767 (pada PC berbasis DOS) dan tidak mengandung titik desimal.

5.5. Variabel dan Konstanta Bertipe long

Apabila diinginkan untuk memproses bilangan bulat yang nilainya lebih besar daripada tipe int, Anda dapat menggunakan tipe long. Suatu variabel bertipe long didefinisikan dengan cara seperti di bawah ini:

long jumlah_penduduk;

Pada contoh ini, jumlah_penduduk didefinisikan bertipe long. Dengan demikian variabel ini dapat menampung nilai ratusan juta. Adapun konstanta bertipe long biasa ditulis dengan akhiran L. Sebagai contoh: 1543267635435L

5.6. Variabel dan Konstanta Bertipe float, double dan long double

Tipe-tipe data yang telah dibahas di depan (char, int dan long) berhubungan dengan bilangan bulat. Seandainya diinginkan untuk memproses bilangan yang mengandung nilai pecahan, bisa menggunakan tipe float, double atau long double. Ketiga tipe yang berhubungan dengan bilangan pecahan ini mempunyai perbedaan dalam hal: kepresisian data, dan jangkauan nilai yang dicakup.
Contoh pendefinisian variabel untuk menampung bilangan pecahan:
float panjang;
double phi;
long double tetapan;

5.7. Inisialisasi Variabel

Adakalanya dalam penulisan program, variabel langsung diberi nilai awal setelah didefinisikan. Sebagai contoh:
int jumlah;
jumlah = 80;
Dua pernyataan seperti di atas sebenarnya dapat diangkat melalui pendefinisian yang disertai penugasan nilai, seperti berikut:
int jumlah = 80;

OPERATOR BAHASA PEMROGRAMAN C++

Operator merupakan simbol yang biasa dilibatkan dalam program untuk melakukan sesuatu operasi atau manipulasi, misalnya untuk menjumlahkan dua buah nilai, memberikan nilai pada suatu variabel, ataupun membandingkan kesamaan dua buah nilai. Bahasa pemrograman C++ mempunyai banyak operator yang tidak didapat dalam bahasa pemrograman lain, antara lain: operator bitwise, operator inkremen dan dekremen, operator kondisional, operator koma, operator aritmatika dan lain-lain.

a) Operator bitwise

Operator bitwise pada bahasa pemrograman C++ memperlakukan variabel sebagai gabungan dari bit-bit dan bukan sebagai bilangan. Operator ini berguna untuk mengakses bit-bit individual dalam memori, seperti memori screen untuk display grafik, informasi CapsLock (on atau off). Operator bitwise ini hanya dapat beroperasi pada jenis data integral, bukan bilangan floating-point. Tiga operator bitwise berkelakuan seperti operator logika, namun ini terjadi pada setiap bit dalam sebuah integer, yakni: AND (&), OR(I), dan XOR (^), komplemen (~) membalik (menginversi) setiap bit, operator shift kiri (<<), dan operator shift kanan (>>).
ANDSimbol operator: &, dengan bentuk penggunaan : operand1 & operand2
Operasi AND bitwise membandingkan dua bit; jika kedua bit tersebut adalah 1, maka hasilnya 1, selain itu hasilnya 0.
Logika AND:
Bit 0 Bit 1 Hasil
0 0 0
0 1 0
1 0 1
1 1 1

OR
Simbol operator I, dengan bentuk pemakaian : operand1 I opeand2
Operasi OR bitwise membandingkan dua bit dan memberikan hasil 1 jika kedua bit yang dibandingkan itu salah satu atau keduanya 1.
Logika OR:
Bit 0 Bit 1 Hasil
0 0 0
0 1 1
1 0 1
1 1 1

XOR
Simbul operator: ^, dengan bentuk penggunaan : operand1 ^ operand2
Operasi EXCLUSIVE OR (XOR) bitwise membandingkan dua bit dan memberikan hasil 1 bila kedua bit merupakan komplementer satu sama lain.
Logika XOR:
Bit 0 Bit 1 Hasil
0 0 0
0 1 1
1 0 1
1 1 0

Contoh program operasi I, & dan ^:

//* Efek operator I, & dan ^ *
#include
#include
void main()
{
unsigned char angka1 = 81;
unsigned char angka2 = 99;
unsigned char a, b, c;
clrscr();
a = angka1 I angka2; //operasi OR
b = angka1 & angka2; //operasi AND
c = angka1 ^ angka2; //operasi XOR
cout << "a= " << a << '\n';
cout << "b= " << b << '\n';
cout << "c= " << c << '\n';
}

Hasil eksekusi program di atas, adalah:
a= 115
b= 65
c= 50

Penjelasan hasil program:
Operasi OR pada a:
0000 0000 0101 0001 <- 81="81" br="br">0000 0000 0110 0011 <- 99="99" br="br">-------------------------------
0000 0000 0 1 1 0011 <- 115="115" br="br">
Operasi AND pada b:
0000 0000 0101 0001 <- 81="81" br="br">0000 0000 0110 0011 <- 99="99" br="br">-------------------------------
0000 0000 0100 0001 <- 65="65" br="br">
Operasi XOR pada c:
0000 0000 0101 0001 <- 81="81" br="br">0000 0000 0110 0011 <- 99="99" br="br">-------------------------------
0000 0000 0011 0010 <- 50="50" p="p">

b) Operator Shift


Operator >> dan << pada bahasa pemrograman C++ berguna untuk menggeser bit-bit dalam suatu bilangan bulat ke kiri atau ke kanan. Shift kiri menggerakkan bit-bit ke kiri dan mengatur bit paling kanan (yang tidak signifikan) menjadi nol. Sedangkan bit paling kiri (paling signifikan) yang ter-shift keluar akan dibuang. Sementara itu, operator shift kanan menggerakkan bit-bit ke kanan. Bit-bit dengan orde lebih rendah yang ter-shift keluar akan dibuang. Pergeseran bit ke kiri mempunyai efek seperti perkalian, sedangkan pergeseran ke kanan memberikan efek seperti pembagian.

b.1) Operastor shift kiri
Bentuk umum dipakai: nilai << jumlah bit digeser ke kiri
Setiap pergeseran sebuah bit akan memberikan pengaruh seperti halnya perkalian dengan bilangan dua. Untuk lebih jelasnya perhatikan contoh berikut beserta hasilnya:

//* Operator SHIFT KIRI *
#include
#include
main()
{
unsigned char x = 93;
clrscr();
cout << "Nilai x semula = " << x << '\n';
x = x << 1; // geser ke kiri 1 bit
cout << "Nilai x kini = " << x << '\n';
}

Hasil eksekusi program:
Nilai x semula = 93
Nilai x kini = 186

Penjelasan hasil program:
0000 0000 0101 1101 <- 93="93" br="br">digeser ke kiri 1 bit
0000 0000 1011 1010 <- 186="186" br="br">di bagian kanan selalu disisipi dengan nol sebanyak bit yang digeser.

b.2) Operator shift kanan
Bentuk umum dipakai: nilai >> jumlah bit digeser ke kanan
Setiap pergeseran sebuah bit akan memberikan pengaruh seperti halnya pembagian dengan bilangan dua. Untuk lebih jelasnya perhatikan contoh berikut beserta hasilnya:

//* OPERATOR SHIFT KANAN *
#include
#include
void main()
{
unsigned char x = 93;
clrscr();
cout << "Nilai x semula = " << x << '\n';
x = x >> 1; // geser kekanan 1 bit
cout << "Nilai x kini = " << x << '/n';
}

Hasil eksekusi program:
Nilai x semula = 93
Nilai x kini = 46

Penjelasan hasil program:
0000 0000 0101 1101 <- 93="93" br="br">digeser ke ke kanan 1 bit
0000 0000 0010 1110 <- 186="186" br="br">di bagian kiri selalu disisipi dengan nol sebanyak bit yang digeser.

c) Operator Komplemen
Operator ini mempunyai sifat membalik (menginversi) nilai setiap bit. Jika bit operand bernilai 1 hasilnya 0, dan bila bit operand bernilai 0 hasilnya 1.
Contoh pemakaian operator komplemen:

//* Operator komplemen *
#include
#include
main()
{
unsigned char nilai = 81;
unsigned char a;
clrscr();
a = ~nilai; // komplemen dari nilai
cout << "a = " << a << '\n';
}

Hasil eksekusi program:
a = 65454

Penjelasan hasil program:
0000 0000 0101 0001 <- 81="81" br="br">inversinya menjadi
1111 1111 1010 1110 <- 6554="6554" br="br">
d) Operator Aritmatika
Bahasa C++ melibatkan operator aritmatika standar untuk penjumlahan (+), pengurangan (-), perkalian (*), pembagian (/), dan modulus (%). Operator aritmatika tersebut tergolong sebagai operator binary. Adapun operator yang tergolong sebagai operator unary yaitu tanda minus (-), dan tanda plus (+).

Prioritas operator :
Operator dengan prioritas tinggi akan diutamakan dalam hal pengerjaan dibandingkan dengan operator yang memiliki prioritas lebih rendah.
Prioritas 1: + --
Prioritas 2: - (unary minus)
Prioritas 3: * / %
Prioritas 4: + -

Apabila operastor memiliki prioritas yang sama, operator yang terletak disebelah kiri dalam suatu ungkapan yang akan diutamakan untuk dikerjakan terlebih dahulu.

Tanda kurung biasa digunakan untuk urutan mengerjakan, misalnya x = (2 + 3) * 2;
(2 + 3 akan dikerjakan terlebih dahulu baru dikalikan dengan 2)

Contoh program:
//* Operasi aritmatika dengan menggunakan tanda kurung) *
#include
#include
void main()
{
clrscr();
int x;
x = 2 + 3 * 2;
cout << "x= " << x << '\n';
x = (2 + 3) * 2;
cout << "x= " << x << '\n';
}

Hasil eksekusi program:
x= 8
x= 12

Operator seperti penjumlahan, pengurangan, perkalian dan pembagian merupakan hal yang umum. Adapun operator sisa pembagian (operator modulus) yang berupa % ada baiknya untuk diterangkan lebih lanjut. Operator ini diterapkan pada operan bertipe integer. Untuk lebih jelasnya perhatikan beberapa contoh berikut:
7 % 2 -> 1 sisa pembagian bilangan 7 dengan 2 adalah 1
9 % 5 -> 4 sisa pembagian bilangan 9 dengan 5 adalah 4

Contoh program
//* sisa pembagian (modulus) *
#include
#include
void main()
{
clrscr();
cout << 9 % 5 << '\n';
cout << 13 % 5 << '\n';
}

Hasil eksekusi program:
4
3

e) Operator Assigenment
Operator assigenment dalam bahasa pemrograman C/C++ berbeda dengan statement assigenment dalam bahasa yang lain. Assigenment dilakukan oleh operator assigenment dan bukan oleh staement assigenment. Seperti operator bahasa pemrograman C++ yang lain, hasil operator assigenment merupakan nilai yang diberikan. Misalnya :
nilai = 4 * (bilangan = 3)
Disini bilangan diberikan nilai 3. Nilai 3 ini dikali dengan 4, sehingga nilai mendapatkan hasil akhir 12.

Jangan lupa tinggalkan komentar anda yah.

Tuesday, January 20, 2015

Sistem Masukan, Fungsi Masukan Dan Struktur Masukan


A.  Sistem Masukan

Sistem masukan adalah peralatan hardware yang berfungsi untuk memasukan data ke dalam komputer yang berisi sinyal input dan maintenance input.

Contoh : mouse, keyboard, mic, scanner.



B.  Fungsi Masukan

Fungsi Perangkat Masukkan (Input) Adalah Untuk Memberi Perintah Kepada Perangkat Keluaran (Output)
Contoh Input : Mouse,Joystick,Keyboard
.



C.  Struktur Masukan

Struktur komputer di defenisikan sebagai cara-cara dari tiap komponen saling terkait. fungsi komputer di defenisikan sebagai operasi masing-masing komponen sebagai bagian dari struktur adapun fungsi dari masing-masing komponen dalam struktur diatas sebagai berikut:

·       Input Device (Alat Masukan)

Input device adalah perangkat keras komputer atau alat yang digunakan untuk menerima input dari luar sistem, dan dapat berupa signal input atau maintenance input. Fungsi dari input deviCe adalah sebagai alat untuk memasukan data atau perintah ke dalam komputer.
Contoh input device adalah: keyboard dan mouse.

·       Output Device (Alat Keluaran)

Output device adalah perangkat keras komputer yang berfungsi menampilkan keluaran Sebagai hasil pengolahan data. Hasil keluaran tersebut dapat berupa hard-copy (ke kertas), soft-copy (ke monitor), ataupun berupa suara.
contoh output device adalah: Monitor, Printer, Speaker

·       I/O Ports

Bagian ini digunakan untuk menerima ataupun mengirim data ke luar sistem. I/O Port juga biasa disebut dengan bagian interface (antar muka) karena peralatan input dan output di atas terhubungi melalui port ini. Port I/O yang berarti gerbang konektor Input/Output pada komputer, seperti pada keyboard, mouse ataupun USB.

·       CPU (Central Processing Unit)

CPU adalah otak sistem komputer, CPU memiliki dua bagian fungsi operasional, yaitu: sebagai pusat pengolah data yaitu ALU (Arithmetical Logical Unit), sebagai pengontrol kerja komputer yaitu CU (Control Unit)

·       Memory

Random Access Memory (RAM), Data dan program yang dimasukan melalui alat input akan disimpan terlebih dahulu di memori utama, khususnya RAM, yang dapat diakses secara acak oleh pemrogram. Struktur RAM terdiri dari empat bagian utama, yaitu:

  • Input storage, digunakan untuk menampung input yang dimasukkan melalui alat input
  • Program storage, digunakan untuk menyimpan semua intruksi-intruksi program yang akan diakases.
  • Working storage, digunakaan untuk menyimpan data yang akan diolah dan hasil pengolahan.
  • Output storage, digunakan untuk menampung hasil akhir dari pengolahan data yang akan ditampilkan ke alat outut
Read Only Memory (ROM). ROM hanya dapat dibaca sehingga pemrogram tidak bisa mengisi sesuatu ke dalam ROM. ROM sudah disisi oleh pabrik pembuatnya berupa sistem operasi yang terdiri dari program-program pokok yang diperlukan oleh sistem komputer, misalnya program untuk mengatur penampilan karakter di layar, pengisian tombol kunci papan ketik untuk keperluan control tertentu, dan bootstrap program. Program bootstrap diperlukan pada saat pertama kali sistem komputer diaktifkan. proses mengaktifkan komputer pertama kali ini disebut dengan booting, booting dapat berupa cold booting atau warm booting.

Manajemen I/O (Input Output)



Sering disebut device manager. Menyediakan “device driver” yang umum sehingga operasi I/O dapat seragam (membuka, membaca, menulis, menutup). Contoh: pengguna menggunakan operasi yang sama untuk membaca file pada hard -disk, CD-ROM dan floppy disk.
Komponen Sistem Operasi untuk sistem I/O :
Buffer : menampung sementara data dari/ke perangkat I/O.
  • Spooling : melakukan penjadwalan pemakaian I/O sistem supaya lebih efisien (antrian dsb.).
  • Menyediakan “driver” untuk dapat melakukan operasi “rinci” untuk perangkat keras I/O tertentu.
  • Manajemen perangkat masukan/keluaran merupakan aspek perancangan sistem
    operasi terluas dan kompleks karena sangat beragamnya perangkat dan
    aplikasinya.
    Beberapa fungsi manajemen input/ouput (I/O) :
1.    Mengirim perintah ke perangkat I/O agar menyediakan layanan.
2.    Menangani interupsi perangkat I/O.
3.    Menangani kesalahan perangkat I/O.
4.    Menyediakan interface ke pemakai.



Klasifikasi perangkat I/O
Perangkat I/O dapat dikelompokkan berdasarkan :
aSifat aliran datanya, yang terbagi atas :
1.    Perangkat berorientasi blok.
Yaitu menyimpan, menerima, dan mengirim informasi sebagai blok-blok berukuran tetap yang berukuran 128 sampai 1024 byte dan memiliki alamat tersendiri, sehingga memungkinkan membaca atau menulis blok-blok secara independen, yaitu dapat membaca atau menulis sembarang blok tanpa harus melewati blok-blok lain. Contoh : disk,tape,CD ROM, optical disk.
2.    Perangkat berorientasi aliran karakter.
Yaitu perangkat yang menerima, dan mengirimkan aliran karakter tanpa membentuk suatu struktur blok. Contoh : terminal, line printer, pita kertas, kartu-kartu berlubang, interface jaringan, mouse.
b. Sasaran komunikasi, yang terbagi atas :
1. Perangkat yang terbaca oleh manusia.
Perangkat yang digunakan untuk berkomunikasi dengan manusia.Contoh : VDT (video display terminal) : monitor, keyboard, mouse.
2.  Perangkat yang terbaca oleh mesin.
Perangkat yang digunakan untuk berkomunikasi dengan perangkat elektronik.Contoh : Disk dan tape, sensor, controller.
3.  Perangkat komunikasi.
Perangkat yang digunakan untuk komunikasi dengan perangkat jarak jauh.Contoh : Modem.
Faktor-faktor yang membedakan antar perangkat :
·         Kecepatan transmisi data (data rate).
·         Jenis aplikasi yang digunakan.
·         Tingkat kerumitan dalam pengendalian.
·         Besarnya unit yang ditransfer.
·         Representasi atau perwujudan data.
·         Kondisi-kondisi kesalahan.Teknik pemograman perangkat I/O
1.    c. Terdapat 3 teknik pemrograman, yaitu :
2.    I/O terprogram atau polling system.
Ketika perangkat I/O menangani permintaan, perangkat men-set bit status di register status perangkat. Perangkat tidak memberitahu ke pemroses saat tugas telah selesai dilakukan sehingga pemroses harus selalu memeriksa register tersebut secara periodik dan melakukan tindakan berdasar status yang dibaca. Software pengendali perangkat (driver) dipemroses harus mentransfer data ke/dari pengendali. Driver mengeksekusi perintah yang berkomunikasi dengan pengendali (adapter) di perangkat dan menunggui sampai operasi yang dilakukan perangkat selesai.Driver berisi kumpulan instruksi :
1. Pengendalian.
Berfungsi mengaktifkan perangkat eksternal dan memberitahu yang perlu dilakukan. Contoh : unit tape magnetik diinstruksikan untuk kembali ke posisi awal, bergerak ke record berikut, dan sebagainya.
2. Pengujian.
Berfungsi memeriksa status perangkat keras berkaitan dengan perangkat I/O.
3. Pembacaan/penulisan
Berfungsi membaca/menulis untuk transfer data antara register pemroses dan perangkat eksternal.Masalah utama I/O terprogram adalah pemroses diboroskan untuk menunggu dan menjagai operasi I/O. Diperlukan teknik lain untuk meningkatkan efisiensi pemroses.
b. I/O dikendalikan interupsi.
Teknik I/O dituntun interupsi mempunyai mekanisme kerja sebagai berikut :
·         Pemroses memberi instruksi ke perangkat I/O kemudian melanjutkan melakukan pekerjaan lainnya.
·         Perangkat I/O akan menginterupsi meminta layanan saat perangkat telah siap bertukar data dengan pemroses.
·         Saat menerima interupsi perangkat keras (yang memberitahukan bahwa perangkat siap melakukan transfer), pemroses segera mengeksekusi transfer data.
·         Keunggulan :
·         Pemroses tidak disibukkan menunggui dan menjaga perangkat I/O untuk memeriksa status perangkat.
·         Kelemahan :
·         Rate transfer I/O dibatasi kecepatan menguji dan melayani operasi perangkat.
o Pemroses terikat ketat dalam mengelola transfer I/O. Sejumlah intruksi harus dieksekusi untuk tiap transfer I/O.
c. Dengan DMA (direct memory access).
DMA berfungsi membebaskan pemroses menunggui transfer data yang dilakukan perangkat I/O. Saat pemroses ingin membaca atau menulis data, pemroses memerintahkan DMA controller dengan mengirim informasi berikut :

·         Perintah penulisan/pembacaan.
·         Alamat perangkat I/O.
·         Awal lokasi memori yang ditulis/dibaca.
·         Jumlah word (byte) yang ditulis/dibaca.
Setelah mengirim informasi-informasi itu ke DMA controller, pemroses dapat melanjutkan kerja lain. Pemroses mendelegasikan operasi I/O ke DMA. DMA mentransfer seluruh data yang diminta ke/dari memori secara langsung tanpa melewati pemroses. Ketika transfer data selesai, DMA mengirim sinyal interupsi ke pemroses. Sehingga pemroses hanya dilibatkan pada awal dan akhir transfer data. Operasi transfer antara perangkat dan memori utama dilakukan sepenuhnya oleh DMA lepas dari pemroses dan hanya melakukan interupsi bila operasi telah selesai.
Keunggulan :

·         Penghematan waktu pemroses.
·         Peningkatan kinerja I/O.
Evolusi fungsi perangkat I/O
Sistem komputer mengalami peningkatan kompleksitas dan kecanggihan komponen-komponennya, yang sangat tampak pada fungsi-fungsi I/O sebagai berikut :
a.  Pemroses mengendalikan perangkat I/O secara langsung.
Masih digunakan sampai saat ini untuk perangkat sederhana yang dikendalikan mikroprosessor sehingga menjadi perangkat berintelijen (intelligent device).
b.  Pemroses dilengkapi pengendali I/O (I/O controller).
Pemroses menggunakan I/O terpogram tanpa interupsi, sehingga tak perlu memperhatikan rincian-rincian spesifik antarmuka perangkat.
c. Perangkat dilengkapi fasilitas interupsi.
Pemroses tidak perlu menghabiskan waktu menunggu selesainya operasi I/O, sehingga meningkatkan efisiensi pemroses.
d. I/O controller mengendalikan memori secara langsung lewat DMA.
Pengendali dapat memindahkan blok data ke/dari memori tanpa melibatkan pemroses kecuali diawal dan akhir transfer.
e.  Pengendali I/O menjadi pemroses terpisah.
Pemroses pusat mengendalikan.memerintahkan pemroses khusus I/O untuk mengeksekusi program I/O di memori utama. Pemroses I/O mengambil dan mengeksekusi intruksi-intruksi ini tanpa intervensi pemroses pusat. Dimungkinkan pemroses pusat menspesifikasikan barisan aktivitas I/O dan hanya diinterupsi ketika seluruh barisan intruksi diselesaikan.
f. Pengendali I/O mempunyai memori lokal sendiri.
Perangkat I/O dapat dikendalikan dengan keterlibatan pemroses pusat yang minimum.
Arsitektur ini untuk pengendalian komunikasi dengan terminal-terminal interaktif. Pemroses I/O mengambil alih kebanyakan tugas yang melibatkan pengendalian terminal.
Evolusi bertujuan meminimalkan keterlibatan pemroses pusat, sehingga pemroses tidak disibukkan dengan tugas I/O dan dapat meningkatkan kinerja sistem.
Prinsip manajemen perangkat I/O
Terdapat dua sasaran perancangan I/O, yaitu :

a. Efisiensi.
Aspek penting karena operasi I/O sering menimbulkan bottleneck.
b. Generalitas (device independence).
Manajemen perangkat I/O selain berkaitan dengan simplisitas dan bebas kesalahan, juga menangani perangkat secara seragam baik dari cara proses memandang maupun cara sistem operasi mengelola perangkat dan operasi I/O.
Software diorganisasikan berlapis. Lapisan bawah berurusan menyembunyikan kerumitanperangkat keras untuk lapisan-lapisan lebih atas. Lapisan lebih atas berurusanmemberi antar muka yang bagus, bersih, nyaman dan seragam ke pemakai. Masalah-masalah manajemen I/O adalah :
a. Penamaan yang seragam (uniform naming).
Nama berkas atau perangkat adalah string atau integer, tidak bergantung pada perangkat sama sekali.
b. Penanganan kesalahan (error handling).
Umumnya penanganan kesalahan ditangani sedekat mungkin dengan perangkat keras.
c. Transfer sinkron vs asinkron.

Kebanyakan I/O adalah asinkron. Pemroses mulai transfer dan mengabaikan untuk melakukan kerja lain sampai interupsi tiba. Program pemakai sangat lebih mudah ditulis jika operasi I/O berorientasi blok. Setelah perintah read, program kemudian ditunda secara otomatis sampai data tersedia di buffer.
d.  Sharable vs dedicated.
Beberapa perangk dapat dipakai bersama seperti disk, tapi ada juga perangkat yang hanya satu pemakai yang dibolehkan memakai pada satu saat. Contoh : printer.
Hirarki manajemen perangkat I/O
Hirarki manajemen perangkat I/O :

a.  Interrupt handler.
Interupsi harus disembunyikan agar tidak terlihat rutin berikutnya. Device driver di blocked saat perintah I/O diberikan dan menunggu interupsi. Ketika interupsi terjadi, prosedur penanganan interupsi bekerja agar device driver keluar dari state blocked.
b. Device drivers.
Semua kode bergantung perangkat ditempatkan di device driver. Tiap device driver menangani satu tipe (kelas) perangkat dan bertugas menerima permintaan abstrak perangkat lunak device independent diatasnya dan melakukan layanan permintaan.
Mekanisme kerja device driver :
·         Menerjemahkan perintah abstrak menjadi perintah konkret.
·         Setelah ditentukan perintah yang harus diberikan ke pengendali, device driver mulai menulis ke register-register pengendali perangkat.
·         Setelah operasi selesai dilakukan perangkat, device driver memeriksa status kesalahan yang terjadi.
·         Jika berjalan baik, device driver melewatkan data ke perangkat lunak device independent.
·         Kemudian device driver melaporkan status operasinya ke pemanggil.
c.  Perangkat lunak device independent.
Bertujuan membentuk fungsi-fungsi I/O yang berlaku untuk semua perangkat dan memberi antarmuka seragam ke perangkat lunak tingkat pemakai. Fungsi-fungsi lain yang dilakukan :
·         Sebagai interface seragam untuk seluruh device driver.
·         Penamaan perangkat.
·         Proteksi perangkat.
·         Memberi ukuran blok perangkat agar bersifat device independent.
·         Melakukan buffering.
·         Alokasi penyimpanan pada block devices.
·         Alokasi dan pelepasan dedicated devices.
·         Pelaporan kesalahan.
d. Perangkat lunak level pemakai.
Kebanyakan perangkat lunak I/O terdapat di sistem operasi. Satu bagian kecil berisi pustaka-pustaka yang dikaitkan pada program pemakai dan berjalan diluar kernel. System calls I/O umumnya dibuat sebagai prosedur-prosedur pustaka. Kumpulan prosedur pustaka I/O merupakan bagian sistem I/O. Tidak semua perangkat lunak I/O level pemakai berupa prosedur- prosedur pustaka. Kategori penting adalah sistem spooling. Spooling adalah cara khusus berurusan dengan perangkat I/O yang harus didedikasikan pada sistem multiprogramming.
Buffering I/O
Buffering adalah melembutkan lonjakan-lonjakan kebutuhan pengaksesan I/O, sehingga meningkatkan efisiensi dan kinerja sistem operasi.Terdapat beragam cara buffering, antar lain :
a. Single buffering.

Merupakan teknik paling sederhana. Ketika proses memberi perintah untuk perangkat I/O, sistem operasi menyediakan buffer memori utama sistem untuk operasi.Untuk perangkat berorientasi blok.Transfer masukan dibuat ke buffer sistem. Ketika transfer selesai, proses memindahkan blok ke ruang pemakai dan segera meminta blok lain. Teknik ini disebut reading ahead atau anticipated input. Teknik ini dilakukan dengan harapan blok akan segera diperlukan. Untuk banyak tipe komputasi, asumsi ini berlaku. Hanya di akhir pemrosesan maka blok yang dibaca tidak diperlukan.
Keunggulan :
Pendekatan in umumnya meningkatkan kecepatan dibanding tanpa buffering. Proses pemakai dapat memproses blok data sementara blok berikutnya sedang dibaca. Sistem operasi dapat menswap keluar proses karena operasi masukan berada di memori sistem bukan memori proses pemakai.
Kelemahan :
·         Merumitkan sistem operasi karena harus mencatat pemberian buffer-buffer sistem ke proses pemakai.
·         Logika swapping juga dipengaruhi. Jika operasi I/O melibatkan disk
untuk swapping, maka membuat antrian penulisan ke disk yang sama yang digunakan untuk swap out proses. Untuk menswap proses dan melepas memori utama tidak dapat dimulai sampai operasi I/O selesai, dimana waktu swapping ke disk tidak bagus untuk dilaksanaka Buffering keluaran serupa buffering masukan. Ketika data transmisi, data lebih dulu dikopi dari ruang pemakai ke buffer sistem. Proses pengirim menjadi bebas untuk melanjutkan eksekusi berikutnya atau di swap ke disk jika perlu.Untuk perangkat berorientasi aliran karakter.
Single buffering dapat diterapkan dengan dua mode, yaitu :
·         Mode line at a time.
Cocok untuk terminal mode gulung (scroll terminal atau dumb terminal). Masukan pemakai adalah satu baris per waktu dengan enter menandai akhir baris. Keluaran terminal juga serupa, yaitu satu baris per waktu.
Contoh mode ini adalah printer.Buffer digunakan untuk menyimpan satu baris tunggal. Proses pemakai ditunda selama masukan, menunggu kedatangan satu baris seluruhnya. Untuk keluaran, proses pemakai menempatkan satu baris keluaran pada buffer dan melanjutkan pemrosesan. Proses tidak perlu suspend kecuali bila baris kedua dikirim sebelum buffer dikosongkan.
·         Mode byte at a time.
Operasi ini cocok untuk terminal mode form, dimana tiap ketikan adalah penting dan untuk peripheral lain seperti sensor dan pengendali.
b. Double buffering.
Peningkatan dapat dibuat dengan dua buffer sistem.Proses dapat ditransfer ke/dari satu buffer sementara sistem operasi mengosongkan (atau mengisi) buffer lain. Teknik ini disebut double buffering atau buffer swapping. Double buffering menjamin proses tidak menunggu operasi I/O. Peningkatan ini harus dibayar dengan peningkatan kompleksitas. Untuk berorientasi aliran karakter, double buffering mempunyai 2 mode alternatif, yaitu :

·         line at a time.
Proses pemakai tidak perlu ditunda untuk I/O kecuali proses secepatnya mengosongkan buffer ganda.
·         Mode byte at a time.
Buffer ganda tidak memberi keunggulan berarti atas buffer tunggal. Double buffering mengikuti model producer-consumer.
1.    Circular buffering.
Seharusnya melembutkan aliran data antara perangkat I/O dan proses. Jika kinerja proses tertentu menjadi fokus kita, maka kita ingin agar operasi I/O mengikuti proses. Double buffering tidak mencukupi jika proses melakukan operasi I/O yang berturutan dengan cepat. Masalah sering dapat dihindari dengan menggunakan lebih dari dua buffer. Ketika lebih dari dua buffer yang digunakan, kumpulan buffer itu sendiri diacu sebagai circulat buffer. Tiap bufferindividu adalah satu unit di circular buffer.