MODUL PRAKTIKUM
ALGORITMA DAN PEMROGRAMAN II
Tim Penyusun:
Dosen Teknik Informatika
JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS PALANGKARAYA
2015
1
MODUL I
DASAR PEMROGRAMAN BERORIENTASI OBJEK
I. TUJUAN
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu:
memahami dasar-dasar pemrograman berorientasi obyek
Memahami enkapsulasi
membuat kelas dan objek
II. DASAR TEORI
Perbedaan pemrograman tradisional dan berorientasi objek adalah pada
cara menelesaikan suatu permasalahan. Pada pemrograman tradisional dalam
memecahkan suatu masalah, masalah akan dibagi menjadi fungsi-fungsi yang
lebih kecil, sedangkan pada pemrograman berorientasi objek (PBO) setiap
masalah diselesaikan dengan cara dibagi ke dalam objek–objek.
Pada PBO dilakukan pembungkusan data (attributes) dan fungsi (behavior)
ke paket yang disebut kelas. Attributes merupakan data yang menggambarkan
status internal sebuah objek dan biasanya merupakan “member variables” pada
C++, tidak dapat diakses dari luar (enkapsulasi), dan juga sebagai “state”.
Methods merupakan fungsi yang mengakses status internal sebuah objek dan
biasanya merupakan “member functions” pada C++, dapat diakses dari luar,
memanipulasi atribut, dan disebut juga “behavior”. Berikut ini merupakan
gambaran mengenai objek.
Kelas (Class) terdiri dari model objek yang memiliki atribut (data
members) dan Behaviors (member functions), dan Member functions yaitu
Methods yang dipanggil sebagai response terhadap pesan. Kelas didefinisikan
dengan keyword class.
Mode Akses akses yang ada pada kelas ada tiga yaitu private yang
merupakan default mode akses dan dapat diakses oleh member functions, public
2
yang dapat diakses oleh setiap Accessible fungsi dalam program, dan protected
yang biasanya digunakan untuk pewarisan .
Fungsi Constructor merupakan member function khusus yang
menginisialisasi data members dan memiliki nama yang sama dengan nama kelas.
Fungsi Constructor dipanggil saat membuat objek dari kelas dan tidak memiliki
tipe balikan.
Member functions yang didefinisikan di luar kelas dilakukan dengan
menggunakan binary scope resolution operator (::) yang berfungsi untuk
“mengikat” nama fungsi ke nama kelas dan mengindentifikasi fungsi dari suatu
kelas tertentu.
Berikut ini merupakan format dari member functions. NilaiBalikan NamaKelas::NamaFungsi( ){
…
}
Member functions yang didefinisikan di dalam kelas tidak membutuhkan scope
resolution operator dan nama kelas
III. LANGKAH KERJA
1. Buatlah program seperti di bawah ini!
#include<iostream.h>
#include<conio.h>
class Sepeda {
public:
Sepeda(int, int, int);
void mengubahPutaran(int);
void mengubahGir(int);
void mengerem();
void tampilInfo();
private:
int kecepatan;
int putaran;
int gir;
};
Sepeda::Sepeda(int k, int p, int g)
{
kecepatan = k;
putaran = p;
gir = g;
}
void Sepeda::mengubahPutaran(int p)
{
putaran = p;
}
void Sepeda::mengubahGir(int g)
{
gir = g;
}
void Sepeda::mengerem()
3
{
cout<< "Kecepatan dan putaran berkurang ..." ;
}
void Sepeda::tampilInfo()
{
cout<< "Gir : " << gir << endl << "Kecepatan : "
<<kecepatan<< endl << "Putaran : " << putaran << endl;
}
int main()
{
Sepeda sepeda1(10,60,3),
sepeda2(4,12,1),
sepeda3(35,80,5);
sepeda1.tampilInfo();
sepeda2.tampilInfo();
sepeda3.tampilInfo();
getch();
return 0;
}
2. Buatlah program seperti di bawah ini!
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
class Time {
public:
Time();
void setTime( int, int, int );
void printUniversal();
void printStandard();
private:
int hour;
int minute;
int second;
};
Time::Time()
{
hour = minute = second = 0;
}
void Time::setTime( int h, int m, int s )
{
hour = ( h >= 0 && h < 24 ) ? h : 0;
minute = ( m >= 0 && m < 60 ) ? m : 0;
second = ( s >= 0 && s < 60 ) ? s : 0;
}
void Time::printUniversal()
{
cout<< setfill( '0' ) << setw( 2 ) << hour << ":"
<<setw( 2 ) << minute << ":"
<<setw( 2 ) << second;
}
void Time::printStandard()
{
cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
4
<< ":" <<setfill( '0' ) << setw( 2 ) << minute
<< ":" <<setw( 2 ) << second
<<( hour< 12 ? " AM" : " PM" );
}
int main()
{
Time t;
cout<< "The initial universal time is ";
t.printUniversal();
cout<< "\nThe initial standard time is ";
t.printStandard();
t.setTime( 13, 27, 6 );
cout<< "\n\nUniversal time after setTime is ";
t.printUniversal();
cout<< "\nStandard time after setTime is ";
t.printStandard();
t.setTime( 99, 99, 99 );
cout<< "\n\nAfter attempting invalid settings:"
<< "\nUniversal time: ";
t.printUniversal();
cout<< "\nStandard time: ";
t.printStandard();
cout<< endl;
getch();
return 0;
}
3. Buatlah sebuah program untuk menghitung volume dan keliling sebuah kotak,
dengan rumus V = panjang x lebar x tinggi, dan K = (2 x panjang) + (2 x
lebar) + (2 x tinggi). Program tersebut harus memiliki setidaknya 1 (satu) buah
Class dan 1 (satu) buah Constructor.
5
MODUL II
PEWARISAN
I. TUJUAN
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampumembuat
kelas baru dari kelas yang sudah ada dengan pewarisan
II. DASAR TEORI
Dalam PBO, kita mengambil realita kehidupan sehari-hari. Kita melakukan
pengamatan bahwa manusia secara alami sering melakukan pengelompokan atas objek
atau benda.Sejauh ini kita mengetahui cara untuk melakukan pengelompokan –
pengelompokan atas objek-objek yang serupa (menjadi kelas objek).
Selain melakukan katagorisasi terhadap objek yang memiliki sekumpulan atribut
dan perilaku yang sama, manusia sering melakukan pengelompokan terhadap objek yang
memiliki kesamaan atas beberapa (tidak semua) atribut/perilaku. Contoh:
Pengelompokan atas kendaraan bermotor, kemudian menggrupkannya berdasarkan suatu
tipe atau jenis (mobil, truk, sepeda motor, dll.). Setiap subkatagori ini merupakan kelas
atas objek-objek yang serupa.
Ada beberapa karakteristik yang di-share oleh semua kelompok. Relasi antar
kelas-kelas ini disebut dengan relasi “is-a”. Dalam setiap kasus, objek yang
dikelompokkan bersama dalam satu sub-katagori merupakan anggota dari kategori yang
lebih umum.Contohnya adalah seperti di bawah ini.
Mobil adalah (“is-a”) kendaraan bermotor.
Truk adalah (“is-a”) kendaraan bermotor
Sepeda Motor adalah (“is-a”) kendaraan bermotor
Objek yang dikelompokkan dalam satu kelas men-share sekumpulan atribut dan
perilaku. Jadi, seluruh objek kendaraan bermotor memiliki sekumpulan atribut dan
perilaku yang juga dimiliki oleh objek dari mobil. Keterkaitan antar kelas dalam relasi
“is-a” berasal dari kenyataan bahwa sub kelas memiliki atribut dan perilaku yang dimiliki
kelas induk, ditambah atribut dan perilaku yang dimiliki oleh sub kelas tersebut.
Superclass (“kelas dasar” atau “kelas induk”) merupakan kelas yang lebih general
dalam relasi “is-a”. Subclass ( “kelas turunan” atau “kelas anak”) merupakan kelas yang
lebih spesifik dalam relasi “is-a”. Objek yang dikelompokkan dalam sub kelas memiliki
atribut dan perilaku kelas induk, dan juga atribut dan perilaku tambahan. (Jadi, kumpulan
atribut dan perilaku sub kelas lebih besar dari super kelas-nya). Relasi “is-a” antar
superclass dan subclasses-nya disebut dengan pewarisan atau inheritance.
Subclass “mewarisi” suatu superclass (atau juga bisa dikatakan sebuah subclass
“turunan dari” suatu superclass) karena reusabilitas Perangkat Lunak, membuat kelas
baru (kelas turunan) dari kelas yang sudah ada (kelas dasar), kelas turunan mewarisi kelas
induk yang mendapatkan data dan perilaku, merupakan bentuk spesial dari kelas induk,
dan diperluas dengan perilaku tambahan,
Pewarisan ada dua jenis yaitu pewarisan tunggal dan pewarisan jamak. Pada
protected access, protected members dapat diakses oleh member kelas dasar, friend kelas
6
dasar, member kelas turunan, dan friend kelas turunan. Kelas turunan dapat
merujuk/mengakses langsung public dan protected data member kelas induk dengan
menggunakan nama atribut yang yang diakses.
III. LANGKAH KERJA
1. Buatlah program seperti di bawah ini!
#include<iostream.h>
#include<conio.h>
class Point {
public:
Point(float = 0.0, float = 0.0);
void cetakPoint();
protected:
float x,y;
};
Point::Point(float a, float b)
{
cout<< "Konstruktor Point dijalankan "<<endl;
x = a;
y = b;
}
void Point::cetakPoint()
{
cout<< "Point : "<<'['<<x<<", "<<y<<']'<<endl;
}
class Circle : public Point {
public:
Circle(float r = 0.0, float a = 0.0, float b =
0.0);//konstruktor
float area();
void cetakPoint();
protected:
float radius,l;
};
Circle::Circle(float r, float a, float b)
: Point(a, b){
cout<< "Konstruktor Circle dijalankan"<<endl;
radius = r;
}
float Circle::area()
{
l=3.14*radius*radius;
return l;
}
void Circle::cetakPoint()
{
Point::cetakPoint();
cout<< "Circle dgn r : "<<radius<<" Center : ["<<x<<",
"<<y<<"]"<<endl;
cout<< "Luas circle : "<<l<<endl;
}
class Cylinder:public Circle {
public:
7
Cylinder(float h = 0.0, float r = 0.0, float a = 0.0, float b
= 0.0);//konstruktor
float area();
float vol();
void cetakPoint();
protected:
float height,l,v;
};
Cylinder::Cylinder(float h, float r, float a, float b)
: Circle(r, a, b)
{
cout<< "Konstruktor Cylinder dijalankan"<<endl;
height = h;
}
float Cylinder::area()
{
l= (2*Circle::area() + 2*3.14*radius*height);
return l;
}
float Cylinder::vol()
{
v= (Circle::area()*height);
return v;
}
void Cylinder::cetakPoint()
{
Circle::cetakPoint();
cout<< "Tinggi tabung (h) : "<<height<<endl;
cout<< "Luas tabung : "<<l<<endl;
cout<< "Volume tabung : "<<v<<endl;
}
int main()
{
Point p(1.1, 2.2);
cout<<endl;
Circle lingkaran(10, 5, 5);
lingkaran.area();
lingkaran.cetakPoint();
cout<<endl;
Cylinder tabung(20, 30, 3, 4);
tabung.area();
tabung.vol();
tabung.cetakPoint();
getch();
return 0;
}
2. Buatlah program untuk menghitung luas dan keliling persegi panjang serta
volume dan keliling kotak. Program tersebut harus menerapkan prinsip
pewarisan!
8
MODUL III
POLIMORFISME
I. TUJUAN
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu membuat
polimorfisme.
II. DASAR TEORI
PolimorfismeMemiliki arti “banyak bentuk”, melakukan hal yang sama untuk
berbagai data yang berbeda, mengirimkan pesan yang sama ke berbagai objek yang
berbeda karena tiap objek memberi respons dengan cara yang berbeda. Berikut ini
merupakan contoh polimorfisme.
Polimorfisme memiliki syarat-syarat sebagai berikut:
Ada hirarki pewarisan
Kelas dalam hirarki pewarisan harus memiliki fungsi virtual (virtual method) dengan
signature yang sama
Menggunakan pointer atau rujukan ke kelas induk. Pointer digunakan untuk
memanggil fungsi virtual
Polimorfisme dapat diimplementasikan dengan menggunakan dasar function
overriding (melakukan redefinisi suatu fungsi di kelas anak, fungsi yang di-override
memiliki signature sama, signature sama : tipe balik, nama fungsi, parameter sama) dan
pewarisan.
Suatu kelas disebut abstrak apabila memiliki minimal satu fungsi abstrak.Fungsi
abstrak merupakan fungsi yang tidak memiliki definisi (hanya deklarasi
fungsi)/menggunakan fungsi virtual (pure virtual).
virtual balikan namaFungsi (parameter) = 0
III. LANGKAH KERJA
1. Buatlah program seperti di bawah ini!
#ifndef MANUSIA_H
9
#define MANUSIA_H
class Manusia {
public:
virtual void Hello();
};
class Pelajar : public Manusia {
public:
void Hello();
};
class Pegawai : public Manusia {
public:
void Hello();
};
#endif
Manusia.cpp
#include "Manusia.h"
#include <iostream.h>
void Manusia::Hello() {
cout<<"Hallo ..."<< endl;
}
void Pelajar::Hello() {
cout<<"Hallo, Saya Pelajar ..."<< endl;
}
void Pegawai::Hello() {
cout<<"Hallo, Saya Pegawai ...."<<endl;
}
MPoli.cpp
#include "Manusia.h"
#include <iostream.h>
#include <stdlib.h>
int main() {
Manusia* m;
int pilihan;
do {
cout<<"1: Manusia, 2: Pelajar, 3: Pegawai >> ";
cin >> pilihan;
} while ( pilihan < 1 || pilihan > 3 );
switch ( pilihan ) {
case 1: m = new Manusia; break;
case 2: m = new Pelajar; break;
case 3: m = new Pegawai; break;
}
m->Hello();
delete m;
return 0;
}
2. Buatlah program seperti di bawah ini!
Bentuk2D.h
#ifndef BENTUK2D_H
#define BENTUK2D_H
class Bentuk2D {
10
public:
virtual float cariLuas()=0;
};
class Segiempat : public Bentuk2D {
protected:
float panjang, lebar;
public:
Segiempat(float, float);
float cariLuas();
};
class Lingkaran : public Bentuk2D {
private:
float jejari;
public:
Lingkaran (float);
float cariLuas();
};
class Segitiga : public Bentuk2D {
private:
float alas, tinggi;
public:
Segitiga(float, float);
float cariLuas();
};
#endif
Bentuk2D.cpp
#include <iostream.h>
#include "Bentuk2D.h"
Segiempat::Segiempat(float p, float l)
{
panjang = p;
lebar = l;
}
float Segiempat:: cariLuas()
{
cout<< "Luas segiempat : " << panjang * lebar << endl;
}
Lingkaran::Lingkaran (float r)
{
jejari = r;
}
float Lingkaran:: cariLuas()
{
cout << "Luas lingkaran : " << 3.4 * jejari * jejari << endl;
}
Segitiga::Segitiga(float a, float t)
{
alas = a;
tinggi = t;
}
11
float Segitiga:: cariLuas()
{
cout << "Luas Segitiga : " << 0.5 * alas * tinggi << endl;
}
MAbstrak.cpp
#include "Bentuk2D.h"
#include <iostream.h>
#include <stdlib.h>
int main() {
Bentuk2D* b2d;
bool loop = true;
int pilihan;
do {
cout <<"1: Segiempat, 2: Lingkaran, 3: Segitiga >> ";
cin >> pilihan;
} while ( pilihan < 1 || pilihan > 3 );
switch ( pilihan ) {
case 1: b2d = new Segiempat(4.0, 5.0); break;
case 2: b2d = new Lingkaran (7.0); break;
case 3: b2d = new Segitiga (2.0, 10.0); break;
case 4: loop = false;
}
b2d->cariLuas();
delete b2d;
return 0;
}
3. Buatlah program seperti di bawah ini!
shape.h
#ifndef SHAPE_H
#define SHAPE_H
class Shape {
public:
virtual double area() const { return 0.0; }
virtual double volume() const { return 0.0; }
virtual void printShapeName() const = 0;
virtual void print() const = 0;
};
#endif
point1.h
#ifndef POINT1_H
#define POINT1_H
#include <iostream>
#include "shape.h"
class Point : public Shape {
public:
Point( int = 0, int = 0 );
void setPoint( int, int );
12
int getX() const { return x; }
int getY() const { return y; }
virtual void printShapeName() const { cout << "Point: "; }
virtual void print() const;
private:
int x, y;
};
#endif
point1.cpp
#include "point1.h"
Point::Point( int a, int b ) { setPoint( a, b ); }
void Point::setPoint( int a, int b )
{
x = a;
y = b;
}
void Point::print() const
{ cout<< '[' << x << ", " << y << ']'; }
circle1.h
#ifndef CIRCLE1_H
#define CIRCLE1_H
#include "point1.h"
class Circle : public Point {
public:
Circle( double r = 0.0, int x = 0, int y = 0 );
void setRadius( double );
double getRadius() const;
virtual double area() const;
virtual void printShapeName() const { cout << "Circle: "; }
virtual void print() const;
private:
double radius;
};
#endif
circle1.cpp
#include <iostream>
#include "circle1.h"
Circle::Circle( double r, int a, int b )
: Point( a, b )
{ setRadius( r ); }
void Circle::setRadius( double r ) { radius = r > 0 ? r : 0; }
double Circle::getRadius() const { return radius; }
double Circle::area() const
{ return 3.14159 * radius * radius; }
13
void Circle::print() const
{
Point::print();
cout<< "; Radius = " << radius;
}
main.cpp
#include <iostream>
#include <stdlib.h>
#include "shape.h"
#include "point1.h"
#include "circle1.h"
#include "cylindr1.h"
void virtualViaPointer( const Shape * );
int main()
{
Point point( 7, 11 ); // create a Point
Circle circle( 3.5, 22, 8 ); // create a Circle
point.printShapeName(); // static binding
point.print(); // static binding
cout<< '\n';
circle.printShapeName(); // static binding
circle.print(); // static binding
cout<< '\n';
Shape *arrayOfShapes[ 2 ]; // array of base-class pointers
arrayOfShapes[ 0 ] = &point;
arrayOfShapes[ 1 ] = &circle;
cout<< "Virtual function calls made off "
<< "base-class pointers\n";
for ( int i = 0; i < 2; i++ )
virtualViaPointer( arrayOfShapes[ i ] );
return 0;
}
void virtualViaPointer( const Shape *baseClassPtr )
{
baseClassPtr->printShapeName();
baseClassPtr->print();
cout<< "\nArea = " << baseClassPtr->area()
<< "\nVolume = " << baseClassPtr->volume() << "\n\n";
}
14
MODUL IV
RELASI KELAS
I. TUJUAN
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu membuat
berbagai jenis relasi antara kelas.
II. DASAR TEORI
Jenis Relasi antar kelas terdiri dari pewarisan, agregasi, asosiasi. Pewarisan
merupakan hubungan antar satu kelas dengan kelas lain dalam suatu hirarki kelas induk
dan kelas turunan. Superclass (“kelas dasar” atau “kelas induk”) merupakan kelas yang
lebih general dalam relasi “is-a”. Subclass ( “kelas turunan” atau “kelas anak”)
merupakan kelas yang lebih spesifik dalam relasi “is-a”. Objek yang dikelompokkan
dalam sub kelas memiliki atribut dan perilaku kelas induk, dan juga atribut dan perilaku
tambahan. Kita mengatakan subclass “mewarisi” suatu superclass (atau juga bisa
dikatakan sebuah subclass “turunan dari” suatu superclass).
Agregasi merupakan hubungan antar kelas yang menyatakan suatu kelas
merupakan bagian dari kelas yang lain atau hubungan antar kelas yang menyatakan suatu
kelas memiliki kelas lain [sebagai atribut]. Agregasi merupakan relasi “has a”. Contoh:
Mobil memiliki mesin
Fakultas terdiri atas jurusan
Rumah memiliki dapur
Mobil, Fakultas dan Rumah dinyatakan sebagai kelas agregat.Mesin, Jurusan dan Dapur
merupakan kelas penyusun.
Kardinalitas menyatakan jumlah objek penyusun yang terlibat dalam
pembentukan relasi agregasi.Suatu KelasAgregat dibentuk dari beberapa (disimbolkan
dengan *) objek Kelas Penyusun.
Asosiasi menggambarkan hubungan struktural antar kelas.Setiap kelas memiliki
kedudukan yang sama (tidak merupakan bagian dari kelas lain).Pada saat merancang
relasi antar kelas, ada dua hal yang perlu diperhatikan yaitu berapa objek yang terlibat
dari masing-masing kelas yang ber-relasi dan apakah relasi tersebut bersifat wajib
(mandatory) atau opsional.
III. LANGKAH KERJA
1. Buatlah program seperti di bawah ini!
agregasi.cpp
#include <iostream.h>
#include <stdlib.h>
class Titik
{
private:
float sbX, sbY;
15
public:
Titik()
{
sbX = sbY = 0.0f;
}
Titik(float x, float y)
{
sbX = x; sbY = y;
}
void posisiTitik()
{
cout<< "[" << sbX << ", " << sbY << "]" << endl;
}
};
class Lingkaran
{
private:
float jejari;
Titik titikPusat;
public:
Lingkaran(float j)
{
jejari = j;
}
Lingkaran(float x, float y, float j):titikPusat(x,y)
{
jejari = j;
}
void cetakLingkaran()
{
cout<< "Titik pusat : " ; titikPusat.posisiTitik();
cout<< "Jari-jari : " << jejari << endl;
}
};
int main()
{
Lingkaran L1(3.0);
Lingkaran L2(3.0, 4.0, 5.0);
L1.cetakLingkaran();
L2.cetakLingkaran();
}
2. Buatlah program seperti di bawah ini!
asosiasi.cpp
#include <iostream.h>
#include <stdlib.h>
class MataKuliah
{
private:
char* kodeMK;
char* namaMK;
int sksMK;
16
public:
MataKuliah(char* kode, char* nm, int sks)
{
kodeMK = kode;
namaMK = nm;
sksMK = sks;
}
void cetakMK()
{
cout<< kodeMK << " : " << namaMK << " : " << sksMK
<<endl;
}
};
class Dosen
{
private:
char* NPP;
char* Nama;
MataKuliah* mk;
int indeks;
public:
Dosen(char* noPeg, char* nm)
{
NPP = noPeg;
Nama = nm;
indeks = 0;
}
void tambahMK (MataKuliah matakuliah)
{
mk[indeks] = matakuliah;
indeks++;
}
void cetakInformasi()
{
cout<< Nama << " Mengajar : " << endl;
for (int i=0; i<5; i++)
mk[i].cetakMK();
}
};
int main()
{
Dosen dsn("P001", "Steve Owen");
MataKuliah mk1("MK001", "PBO", 3);
MataKuliah mk2("MK002", "Struktur Data", 3);
MataKuliah mk3("MK003", "R Perangkat Lunak", 3);
MataKuliah mk4("MK004", "Analisis Algoritma", 2);
MataKuliah mk5("MK005", "Sistem Operasi", 3);
dsn.tambahMK(mk1);
dsn.tambahMK(mk2);
dsn.tambahMK(mk3);
dsn.tambahMK(mk4);
dsn.tambahMK(mk5);
dsn.cetakInformasi();
}
17
MODUL V
OPERATOR OVERLOADING DAN EXCEPTION HANDLING
I. TUJUAN
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu:
mengimplementasikan Exception Handling
mengimplementasikan operator overloading
II. DASAR TEORI
Jarang sekali sebuah program dibuat dapat berjalan dengan sukses pada saat
pertama sekali dijalankan. Kesalahan sering terjadi pada saat perancangan atau
pemrograman.Kesalahan tersebut dikatagorikan menjadi tiga bagian, yaitu:
syntax errors – mengakibatkan kesalahan kompilasi.
semantic errors– program menghasilkan keluaran yang tidak sesuai dengan harapan.
runtime errors – kebanyakan mengakibatkan terminasi program secara tidak normal
atau bahkan sistem crash
Berikut ini merupakan contoh runtime error.
Pembagian bilangan dengan nol.
Akses elemen yang berada di luar indeks array
Menggunakan nilai negatif untuk ukuran array
Setiap program dalam berada dapat suatu kondisi yang tidak normal – Error
Conditions.Program yang ‘baik’ harus dapat menangani kondisi ini.Exception merupakan
suatu keadaan yang disebabkan oleh runtime error dalam program. Memungkinkan
kesalahan ditangani tanpa harus ‘mengotori’ program (dengan rutin yang menangani
kesalahan). Memungkinkan pemisahan penanganan kesalahan dengan program utama
(main business logic).
Suatu fungsi dapat memberi tanda suatu kesalahan dengan melempar suatu
exception – throws. Fungsi pemanggil dapat menyerahkan kendali ke exception handler
dengan menangkap (catching) exception - try, catch. Berikut ini merupakan blok try-
catch.
try{
instruksi yang berpotensi menghasilkan exception
}
catch(tipe_exception e){
instruksi untuk menangani exception
}
Seperti bahasa tingkat tinggi yang lain, C++ memiliki beberapa operator +, -, \, *,
<<, >>, &, [], =, dll. Operator ini telah didefinisikan (pre-defined) dan digunakan untuk
tipe tertentu. Misal: operator ‘+’ hanya dapat digunakan untuk tipe dasar seperti integer,
float, dll. Kadang-kadang diperlukan untuk meredefinisi operator ini untuk digunakan
untuk tipe bentukan. Misalnya Kelas Complex a dan b, apakah bisa dilakukan a+b?
18
Manipulasi bilangan kompleks lebih mudah apabila dapat memperlakukannya seperti
pada tipe dasar. Sehingga dapat dilakukan, hal-hal seperti
Complex a(2,4);
Complex b(4,5);
. . .
Complex c = a + b;
Bukannya
Complex a(2,4);
Complex b(4,5);
. . .
Complex c = a.tambah(b);
Operator yang digunakan pada kelas dalam C++ dinyatakan dalam pemanggilan
fungsi. Jenis operator ada dua yaitu operator uner dan operator biner.Operator uner hanya
membutuhkan satu argument,misalnya ++, --, ~. Operator biner membutuhkan dua
argument, misalnya +, -, /, *.
Operator dalam C++ diimplementasikan dengan pemanggilan fungsi. User dapat
meredefinisikan arti suatu operator pada suatu kelas dengan melakukan redefinisi method
yang berkaitan dengan operator tersebut. Tidak semua operator bisa di-overload. Ada
batasan-batasan yang bisa dilakukan dalam operator overloading.
Berikut ini merupakan daftar operator yang dapat di-overload dan yang tidak
dapat di-overload.
III. LANGKAH KERJA
1. Buatlah program seperti di bawah ini!
Complex.cpp #include <iostream>
#include <stdlib.h>
class complex
{
double real;
double imaginer;
Operator yang tidak dapat di-overload
. .* :: ?: sizeof
Operator yang dapat di-overload
+ - * / % ^ & |
~ ! = < > += -= *=
/= %= ^= &= |= << >> >>=
<<= == != <= >= && || ++
-- ->* , -> [] () new delete
new[] delete[]
19
public:
complex(double re=0, double im=0)
{
real = re;
imaginer = im;
}
complex operator-()
{
complex result;
result.real = -real;
result.imaginer = -imaginer;
return result;
}
complex operator+(complex c)
{
complex result;
result.real = real + c.real;
result.imaginer = imaginer + c.imaginer;
return result;
}
complex operator-(complex c)
{
complex result;
result.real = real - c.real;
result.imaginer = imaginer - c.imaginer;
return result;
}
void display()
{
cout << '(' << real << ',' << imaginer << ')' << endl;
}
};
int main()
{
complex z(1,2), w(3,4), b;
complex a = z + w;
a.display();
a = z - w;
a.display();
b=-a;
b.display();
}
2. Buatlah sebuah program kalkulator sederhana dengan dua operand dan
operator yang digunakan adalah: +, -, *, /, >, dan <
20
MODUL VI
TEMPLATE CLASS
I. TUJUAN
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu
mengimplementasikannya template fungsi dan kelas.
II. DASAR TEORI
Template merupakan cara untuk mendefinisikan fungsionalitas generik pada
parameter tanpa perlu mendeklarasikan tipenya. Abstraksi definisi fungsi dalam bentuk
pseudo code sehingga tipe yang digunakan dapat diganti merupakan konsep dari
template. Penerapan template pada fungsi akan menghasilkan definisi fungsi. Berikut ini
merupakan langkah-langkah untuk mendefinisikan fungsi, yaitu:
1. Mulai dengan keyword template
2. Nyatakan dalam kurung segitiga, nama placeholder untuk tipe yang akan digunakan.
3. Ikuti dengan nama fungsi
4. Ikuti nama fungsi dengan daftar parameter.
III. LANGKAH KERJA
1. Buatlah program seperti di bawah ini! #include<iostream.h>
template<class T>
void CetakArray(T *array, const int count)
{
for (int i=0; i<count; i++)
cout<< array[i] << " ";
cout<< endl;
}
main()
{
const int aCount=5, bCount=4,
cCount=6;
int a[aCount] = {1, 2, 3, 4, 5};
float b[bCount] = {1.1, 2.2, 3.3, 4.4};
char c[cCount] = "hello";
cout<< "Array a berisi : " << endl;
CetakArray(a, aCount);
cout<< "Array b berisi : " << endl;
CetakArray(b, bCount);
cout<< "Array c berisi : " << endl;
CetakArray(c, cCount);
return 0;
}
21
2. Buatlah template untuk melakukan insertion sort sehingga dapat digunakan
untuk masukan dengan tipe data integer, float, dan double!
Algoritma insertion sort adalah sebagai berikut:
DEKLARASI
Var
I, J, N : integer
X : integer
DESKRIPSI
For I 2 to N Do
X Larik[I]
Larik[0] X
J I – 1
While X <Larik[J] Do
Larik[J+1] Larik[J]
J J-1
EndWhile
Larik[J+1] X
EndFor
22
TATA TERTIB DAN TATA LAKSANA PRAKTIKUM
TATA TERTIB
1. Praktikan WAJIB mengikuti semua modul praktikum.
2. Praktikan hanya boleh tidak mengikuti praktikum 1 (satu) kali DENGAN
ATAU TANPA SURAT IZIN dari jumlah pertemuan praktikum.
3. Praktikan yang berhalangan mengikuti praktikum, diwajibkan melaporkan
ke dosen praktikum untuk menentukan jadwal praktikum sebagai
pengganti jadwal yang berhalangan.
4. Praktikan yang lebih dari 1 (satu) kali tidak mengikuti praktikum, tidak
diperbolehkan untuk mengikuti praktikum untuk modul-modul praktikum
selanjutnya dan NILAI AKHIR PRAKTIKUM adalah NOL.
5. Praktikan diberikan toleransi waktu keterlambatan selama 15 menit dan
tidak ada penambahan waktu praktikum.
6. Tidak diperbolehkan saling bekerja sama.
7. Dilarang menggunakan kaos oblong dan sendal selama praktikum. Bagi
yang melanggar poin ini, tidak diperbolehkan mengikuti praktikum.
TATA LAKSANA :
1. Sebelum praktikum di mulai, setiap praktikum wajib mengumpulkan
LAPORAN HASIL PRAKTIKUM modul sebelumnya.
2. Jika praktikan tidak melaksanakan Tata Laksana poin 1, maka tidak
diperbolehkan mengikuti praktikum.
3. Setiap modul praktikum, akan dilakukan Pre-Test.
4. Format laporan meliputi :
Laporan Hasil Praktikum :
Halaman Depan
BAB I. Tujuan dan Landasan Teori
BAB II. Langkah Kerja
BAB III. Pembahasan
BAB IV. Kesimpulan
BAB V. Daftar Pustaka
BAB VI. Lampiran (disertai laporan rencana praktikum modul
sebelumnya)
5. Format Penulisan
Spasi : 1,5
Font : Times New Roman
Font Size : 12
Margins : Top 3, Left 4, Right 3, Bottom 3
Kertas : A4
23
6. Penilaian Laporan Hasil Praktikum
BAB I. Tujuan dan Landasan Teori Nilai 20
BAB II. Langkah Kerja Nilai 10
BAB III. Pembahasan Nilai 40
BAB IV. Kesimpulan Nilai 15
BAB V. Daftar Pustaka Nilai 5
BAB VI. Lampiran Nilai 10
Total 100
7. Praktikan yang mengabaikan format penulisan poin 5, akan dikurangi 5
setiap kesalahan.
8. Penilaian Akhir Praktikum :
Pre-Test : 15 %
Praktikum : 30 %
Laporan Praktikum : 20 %
Responsi : 35 %
Total 100 %
9. Penilaian Akhir Mata Kuliah Algoritma dan Pemrograman II :
Tugas : 20 %
UTS : 30 % 50 %
Praktikum : 50 %
UAS : 50 %
Nilai Akhir : 100 %