SITI NURJANAH

Minggu, 22 Mei 2016

Final Project Program Reservasi Tiket Bus

FINAL PROJECT 
PEMROGRAMAN TERSTRUKTUR
“Program Reservasi Tiket Bus”
SEMESTER 2











Nama Kelompok :
 1. FAJAR JUNIO HARIDARMA     (15.02.9151)
2. INDRA PERMANA                       (15.02.9161)
3. MUHAMMAD MUSTAJIB           (15.02.9160)
4. IQBAL AQABA PUTERA             (15.02.9129)
5. SITI NURJANAH                           (15.02.9156)




KELAS : D3 MI-04 
DOSEN : ACIHMAH SIDAURUK, M.KOM






Sekolah Tinggi Manajemen Informatika AMIKOM Yogyakarta

 Tahun Akademik 2015/2016




#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <string>

using namespace std;
char nama[25],alamat[40],iden[20], no[15],jk;
int menu;

void judul();
void registrasi();
void tujuan();
void jenis();
void keberangkatan();
void tampilan();
void harga();
void akhir();

main(){
int tj,jns,jam;
int harga;
char ulang;
string kode;
int bt;
int admin,total;
string jurusan;
string jns_bus;

//getchar();
int i;
char ch;
cout << "============================\n";
cout << "Selamat Datang di Form Login \n";
cout << "============================\n";
    for (i=1; i<=3; i++) {
       string user = "";
       string pass = "";
       cout << "Username : "; cin >> user;
       cout << "Password : ";
            ch = _getch();
            while(ch != 13){//character 13 is enter
            pass.push_back(ch);
            cout << '*';
            ch = _getch();
            }

       if (user == "admin" && pass == "123")
{
system("cls");
judul(); //fungsi judul
tampilan(); //fungsi menu utama
tujuan(); //fungsi tujuan

pilihan:
cout<<"\n\t\tMasukkan Pilihan : ";cin>>tj;
if (tj==1)
{
jurusan="Jogja-Magelang";
}
else if(tj==2)
{
jurusan="Jogja-Solo";
}
else if(tj==3)
{
jurusan="Jogja-Semarang";
}
else if(tj==4)
{
jurusan="Jogja-Surabaya";
}
else if(tj==5)
{
jurusan="Jogja-Cirebon";
}
else
{
cout<<"\n\t\t Masukkan Salah, ingin ulangi (Y/N) : "; cin>>ulang;
if(ulang=='Y' || ulang=='y')
{
goto pilihan;
}
else
return 0;
}

jns:
system("cls");
jenis();
cout<<"\n\t\tMasukkan Pilihan : ";cin>>jns;
if(jns==1)
{
cout<<"\n\t\tBatas Maksimum Kursi adalah 60\n";
jns_bus="Ekonomi";
}
else if(jns==2)
{
cout<<"\n\t\tBatas Maksimum Kursi adalah 48\n";
jns_bus="Patas";
}
else if(jns==3)
{
cout<<"\n\t\tBatas Maksimum Kursi adalah 32\n";
jns_bus="Eksekutif";
}
else
{
cout<<"\n\t\tSalah memasukkan jenis bus";
cout<<"\n\t\t Masukkan Salah, ingin ulangi (Y/N) : "; cin>>ulang;
if(ulang=='Y' || ulang=='y')
{
goto jns;
}
else
return 0;
}

tiket:
cout<<"\n\t\tJumlah tiket yang dibeli maksimum 5"<<endl;
cout<<"\n\t\tJumlah tiket yang dibeli : "; cin>>bt;
if(jns==1){
if (bt>5){
cout<<"Melebihi jumlah pembelian tiket";}}

else if(jns==2){
if (bt>5){
cout<<"Melebihi jumlah pembelian tiket";}}

else if(jns==3){
if(bt>5){
cout<<"Melebihi jumlah pembelian tiket";}}

else{
cout<<"\n\t\t Masukkan Salah, ingin ulangi (Y/N) : "; cin>>ulang;
if(ulang=='Y' || ulang=='y')
goto tiket;
else
return 0;
}

//perulangan dan array
char nakur[bt][15];
int nokur[bt];
for(int i=1;i<=bt;i++){
cout<<"\n\t\tNama di kursi \t\t: "; cin>>nakur[i];
cekkursi:
cout<<"\n\t\tNomor Kursi ke-"<<i<<" \t\t: "; cin>>nokur[i];
for(int j=1;j<i;j++){
if(nokur[i]==nokur[j]){
cout<<"\n\t\t Maaf kursi telah diisi,";
goto cekkursi;
}
}
cout<<"\n\t\t----------------------------------------";}
system("cls");


keberangkatan();
jam:
cout<<"\n\t\tMasukkan Pilihan : ";cin>>jam;
system("cls");

if(jns==1){
if(tj==1  && jam==1){
harga=30000;
kode="JM-eko1";}
else if(tj==1  && jam==2){
harga=20000;
kode="JM-eko2";}
else if(tj==2 && jam==1){
harga=20000;
kode="JS-eko1";}
else if(tj==2 && jam==2){
harga=15000;
kode="JS-eko2";}
else if(tj==3 &&jam==1){
harga=50000;
kode="JSe-eko1";}
else if(tj==3 && jam==2){
harga=40000;
kode="JSe-eko2";}
else if(tj==4 && jam==1){
harga=80000;
kode="JK-eko1";}
else if(tj==4 && jam==2){
harga=70000;
kode="JK-eko2";}
else if(tj==5 && jam==1){
harga=45000;
kode="JP-eko1";}
else if(tj==5 && jam==2){
harga=35000;
kode="JP-eko2";}
}
else if(jns==2){
if(tj==1  && jam==1){
harga=60000;
kode="JM-pt1";}
else if(tj==1  && jam==2){
harga=50000;
kode="JM-pt2";}
else if(tj==2 && jam==1){
harga=50000;
kode="JS-pt1";}
else if(tj==2 && jam==2){
harga=45000;
kode="JS-pt2";}
else if(tj==3 &&jam==1){
harga=80000;
kode="JSe-pt1";}
else if(tj==3 && jam==2){
harga=70000;
kode="JSe-pt2";}
else if(tj==4 && jam==1){
harga=110000;
kode="JK-pt1";}
else if(tj==4 && jam==2){
harga=100000;
kode="JK-pt2";}
else if(tj==5 && jam==1){
harga=75000;
kode="JP-pt1";}
else if(tj==5 && jam==2){
harga=65000;
kode="JP-pt2";}
}
else if(jns==3){
if(tj==1  && jam==1){
harga=90000;
kode="JM-ex1";}
else if(tj==1  && jam==2){
harga=80000;
kode="JM-ex2";}
else if(tj==2 && jam==1){
harga=80000;
kode="JS-pt1";}
else if(tj==2 && jam==2){
harga=75000;
kode="JS-ex2";}
else if(tj==3 &&jam==1){
harga=110000;
kode="JSe-ex1";}
else if(tj==3 && jam==2){
harga=100000;
kode="JSe-ex2";}
else if(tj==4 && jam==1){
harga=140000;
kode="JK-ex1";}
else if(tj==4 && jam==2){
harga=130000;
kode="JK-ex2";}
else if(tj==5 && jam==1){
harga=105000;
kode="JP-ex1";}
else if(tj==5 && jam==2){
harga=95000;
kode="JP-ex2";}
}
else
{
cout<<"\n\t\t Masukkan Salah, ingin ulangi (Y/N) : "; cin>>ulang;
if(ulang=='Y' || ulang=='y')
goto jam;
else
return 0;
}


admin=5000;
total=bt*harga+admin;
system("cls");

judul();
cout<<"\n\n\n\t\tTiket Informasi";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\t------------------------------------------------";

cout<<"\n\t\tNama Pemesan\t\t  : "<<nama;
cout<<"\n\t\tJenis Bus\t\t  : "<<jns_bus;
cout<<"\n\t\tKode Bus\t\t  : "<<kode;
cout<<"\n\t\tJurusan\t\t\t  : "<<jurusan;
for(int i=1;i<=bt;i++)
{
cout<<"\n\t\tNo. Tempat Duduk ke-"<<i<<"  : "<<nokur[i];
cout<<"\n\t\t Nama Tempat Duduk  : "<<nakur[i];
}
cout<<"\n\t\tHarga Tiket\t\t  : Rp "<<harga;
cout<<"\n\t\tJumlah Tiket\t\t  : "<<bt;
cout<<"\n\t\tBiaya Administrasi\t  : Rp "<<admin;
cout<<"\n\t\tTotal Bayar\t\t  : Rp "<<total;
cout<<"\n\t\t------------------------------------------------";


    return 0;
      } else {
         cout << "\n\nMaaf Username & Password anda masukan salah.\n\n";
      }
   }
   while (i <= 3);

   cout << "Anda telah 3x memasukan Username & Password yang salah.\n";
   cout << "Mohon maaf akun anda kami blokir untuk sementara. \n";
   cout << "Silahkan hubungi kami melalui e-mail support@email.com, Terima Kasih..";
 

 
}

void judul()
{
cout<<"\n\t            ======================================";
cout<<"\n\t          ==========================================";
cout<<"\n\t        ==============================================";
cout<<"\n\t      ==================================================";
cout<<"\n\t    ======================================================";
cout<<"\n\t\t\t AGEN TIKET BUS 'Mantep Slamet' ";
cout<<"\n\n\t\t       Jl. Masjid No.112, telp. 02772000";
cout<<"\n\t\t    Condong catur, Depok, Sleman, Yogyakarta";
cout<<"\n\t\t =============================================";
cout<<"\n\t\t================================================";
}

void registrasi()
{
//char nama[25],alamat[40],iden[20], no[15];
string mail,nakur,nana;
int nokur;
cin.ignore();
cout<<"\n\n\n\n\t\tForm Registrasi calon penumpang";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\tNama Pemesan\t\t: "; gets(nama);//getline(cin,nana);cin.getline(nama,(sizeof(nama)));
cout<<"\n\t\tAlamat\t\t\t: "; gets(alamat);
cout<<"\n\t\tIdentitas\t\t: "; gets(iden);
jenkel:
cout<<"\n\t\tJenis Kelamin(L/P)\t: "; cin>>jk;
if(jk == 76 or jk ==80 or jk == 108 or jk ==112)
goto lanjut;
else
goto jenkel;
lanjut:
cout<<"\n\t\tNo. HP\t\t\t: "; cin>>no;
cout<<"\n\t\tE-Mail\t\t\t: "; cin>>mail;
cout<<"\n\t\t------------------------------------------------";

system("cls");
}

void tujuan()
{
cout<<"\n\n\n\n\t\tSilahkan Pilih jurusan bus yang anda inginkan";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\t\tNo.|  jurusan |";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\t\t1.|  jogja-magelang   |";
cout<<"\n\t\t\t2.|  jogja-solo       |";
cout<<"\n\t\t\t3.|  jogja-semarang   |";
cout<<"\n\t\t\t4.|  jogja-Surabaya    |";
cout<<"\n\t\t\t5.|  jogja-Cirebon  |";
cout<<"\n\t\t------------------------------------------------";
}

void jenis()
{
cout<<"\n\n\n\n\t\tSilahkan Pilih jenis bus yang anda inginkan";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\tNo. |Kode Bus  | Jenis Bus |";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\t1. |Eko. | Ekonomi |";
cout<<"\n\t\t2. |Pt. | Patas   |";
cout<<"\n\t\t3. |Eks. | Eksekutif |";
cout<<"\n\t\t------------------------------------------------";
}

void keberangkatan()
{
cout<<"\n\n\n\n\t\tSilahkan Pilih jenis bus yang anda inginkan";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\tNo | Waktu Keberangkatan | ";
cout<<"\n\t\t------------------------------------------------";
cout<<"\n\t\t1. | Malam | ";
cout<<"\n\t\t2. | Siang |";
cout<<"\n\t\t------------------------------------------------";
}

void tampilan()
{

cout<<"\n\n\t\t 1.Pemesanan Tiket Bus";
cout<<"\n\t\t 2.Info Harga Tiket ";
cout<<"\n\t\t 3.Keluar ";
cout<<"\n\t\t Masukkan Pilihan : ";
cin>>menu;
if(menu==1)
{
system("cls");
judul();
registrasi();
}
else if(menu==2)
{
system("cls");
judul();
harga();
}
else if(menu==3)
{
system("cls");
akhir();
}
else
{
cout<<"\n\t\tInputan Salah, silahkan kembali ke menu !";
cin.ignore();
system("cls");
tampilan();
}

}

void harga()
{
char a;
cout<<"\n\t 1.Ekonomi";
cout<<"\n\t    - Siang Hari : ";
cout<<"\n\t        - Jogja-Magelang  : Rp 30.000 ";
cout<<"\n\t        - Jogja-Solo      : Rp 20.000 ";
cout<<"\n\t        - Jogja-Semarang  : Rp 50.000";
cout<<"\n\t        - Jogja-Surabaya  : Rp 80.000";
cout<<"\n\t        - Jogja-Cirebon   : Rp 45.000";
cout<<"\n\t    - Malam Hari : ";
cout<<"\n\t        - Jogja-Magelang  : Rp 20.000 ";
cout<<"\n\t        - Jogja-Solo      : Rp 15.000 ";
cout<<"\n\t        - Jogja-Cilacap   : Rp 40.000";
cout<<"\n\t        - Jogja-Surabaya  : Rp 70.000";
cout<<"\n\t        - Jogja-Cirebon   : Rp 35.000";
cout<<"\n\t 2.Patas";
cout<<"\n\t    - Siang Hari : ";
cout<<"\n\t        - Jogja-Magelang  : Rp 60.000 ";
cout<<"\n\t        - Jogja-Solo      : Rp 50.000 ";
cout<<"\n\t        - Jogja-Semarang  : Rp 80.000";
cout<<"\n\t        - Jogja-Surabaya  : Rp 110.000";
cout<<"\n\t        - Jogja-Cirebon   : Rp 75.000";
cout<<"\n\t    - Malam Hari : ";
cout<<"\n\t        - Jogja-Magelang  : Rp 50.000 ";
cout<<"\n\t        - Jogja-Solo      : Rp 45.000 ";
cout<<"\n\t        - Jogja-Cilacap   : Rp 70.000";
cout<<"\n\t        - Jogja-Surabaya  : Rp 100.000";
cout<<"\n\t        - Jogja-Cirebon   : Rp 65.000";
cout<<"\n\t 3.Eksekutif";
cout<<"\n\t    - Siang Hari : ";
cout<<"\n\t        - Jogja-Magelang  : Rp 90.000 ";
cout<<"\n\t        - Jogja-Solo      : Rp 80.000 ";
cout<<"\n\t        - Jogja-Semarang  : Rp 110.000";
cout<<"\n\t        - Jogja-Surabaya  : Rp 140.000";
cout<<"\n\t        - Jogja-Cirebon   : Rp 105.000";
cout<<"\n\t    - Malam Hari : ";
cout<<"\n\t        - Jogja-Magelang  : Rp 80.000 ";
cout<<"\n\t        - Jogja-Solo      : Rp 75.000 ";
cout<<"\n\t        - Jogja-Cilacap   : Rp 100.000";
cout<<"\n\t        - Jogja-Surabaya  : Rp 130.000";
cout<<"\n\t        - Jogja-Cirebon   : Rp 95.000";
cout<<"\n\t kembali ke menu (Y/N) : ";
cin>>a;
if(a=='y' || a=='Y')
{
system("cls");
judul();
tampilan();
}
else
{
system("cls");
akhir();
}

}

void akhir()
{
system("pause");
}



1. compile


2. login admin (username dan password)


3. Tampilan menu 

4. pilihan (1. pemesanan tiket bus)


a. pertama mengisi form registrasi calon penumpang


b. pilih jurusan yang dituju (misalkan jogja-surabaya)


c. pilih jenis Bus yang diinginkan (misal : Eksekutif)



d. kemudian masukkan jumlah tiket yang akan dibeli, disini dibatasi maksimal pembelian 5 tiket . misal jumlah tiket 3. kemudian tuliskan nama di dikursi (siti) nomor kursi yg dipesan = 1. kemudian tulis nama yang ke dua (indra) karena no kursi yg 1 sudah dipesan maka tidak bisa dipesan lagi ,jadi akan muncul pesan "maaf, kursi telah diisi" dan memilih no 2. kemudian nama ke tiga (junio) memesan no 3 karena kursi no 2 telah diisi.



e. memilih jam keberangkatan (misal=siang)













f. kemudian akan ditampilan "tiket informasi"



5. pilihan (2. Info Harga Tiket)





6. jika ingin embali ke menu pilih y .

7. pilihan (3.keluar dari program)




TERIMAKASIH ,SEMOGA BERMANFAAT
:) :) :)





nama kelompok :
1. Fajar Junio Haridarma
2. Indra Permana
3. Muhammad Mustajib
4. Iqbal Aqaba Putera
5. Siti Nurjanah

kelas: D3 MI-04
Mata Kuliah : Pemrograman Terstruktur
Dosen : Acihmah Sidauruk 
STMIK AMKOM YOGYAKARTA 2016

Jumat, 20 Mei 2016

Modul Fungsi Modular Dalam C++

TUGAS PEMROGRAMAN TERSTRUKTUR
MODUL FUNGSI MODULAR














Nama         : Siti Nurjanah
NIM           : 15.02.9156
Kelas           : 15 D3-MI 04






Sekolah Tinggi Manajemen Informatika AMIKOM Yogyakarta
 Tahun Akademik 2015/2016

 









FUNGSI

1. Tujuan Kegiatan Pembelajaran
Setelah mempelajari materi kegiatan pembelajaran ini mahasiswa akan dapat :
1) Memahami konsep fungsi dalam pemrogram C++ secara benar.
2) Mengenal bentuk fungsi dalam pemrograman v secara benar
3) Dapat membuat fungsisendiri dalam aplikasinya pada pembuatan program secara tepat
4) Dapat mengembangkan bentuk-bentuk fungsi dalam pemrograman secara benar

2. Uraian Materi

a. Pengertian Fungsi

Fungsi adalah sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Selanjutnya nama ini dapat dipanggil di beberapa tempat dalam program. Fungsi merupakan suatu bagian dari program yang dimaksudkan untuk mengerjakan suatu tugas tertentu dan letaknya terpisah dari program yang memanggilnya. Fungsi merupakan elemen utama dalam bahasa C++ karena bahasa C++ sendiri terbentuk dari kumpulan fungsi-fungsi. Fungsi adlah satu blok kode yang dapat melakukan tugas tertentu atau satu blok kode instruksi yang dieksekusi ketka dipanggil dari bagian lain dalam suatu program. Sebuah fungsi berisi sejumlah pernyataan yan dikemas dalam sebuah nama. Nama tersebut selanjutnya dapat dipanggil bekali –kali di beberapatempat dalam pogram.

Tujuan pembuatan fungsi adalah memudahkan dalam pengembangan program. Ini merupakan kunci dalam pembuatan program yang terstruktur. Menghemat ukuran program. Dalam setiap program bahasa C++, minimal terdapat satu fungsi yaitu fungsi main(). Fungsi banyak diterapkan dalam programprogram C++ yang terstruktur.
Keuntungan penggunaan fungsi dalam program yaitu program akan memiliki struktur yang jelas (mempunyai readability yang tinggi) dan juga akan menghindari penulisan bagian program yang sama.
Keuntungan fungsi secara umum :
·         Program besar dapt dipisah menjadi program-program kecil
·         Dapa dikerjakan leh beberapa orang sehinga koordinasi mudah
·         Kemudahan dalam mencari kesalahankesalahan karena alur logika jelas dan kesalahan dapt dialokasikan dalam suatu modul tertentu saja.
·         Modifikasi program dapat dilakukan pada  suatu modul tertentu saja tanpa mengganggu program keseluruhan.
Mepermudah dokumentasiDalam bahasa C++ fungsi dapat dibagi menjadi dua, yaitu (1) fungsi pustaka 78 atau fungsi yang telah tersedia dalam Turbo C++ ; dan (2) fungsi yang didefinisikan atau dibuat oleh programmer. Fungsi digunakan agar pemrogram dapat menghindari penulisan bagian program (kode) berulang-ulang, dapat menyusun kode program agar terlihat lebih rapi dan kemudahan dalam debugging program. Parameter adalah nama-nama peubah yang dideklarsikan pada bagian header fungsi. Pemrogram dapat membuat fungsi yang didefinisikan sendiri olehnya.





Berikut ini adalah contoh konsep suatu program yang dibagi menjadi sejumlah modul:



Fungsi main()

Fungsi x()

Fungsi y()

Fungsi z()

Fungsi z1()

Fungsi z2()

Fungsi z3()
              

Format dari function:
                Type name(argment1,argument2, . . ) statement
Dimana :
·         Type adalah tipe dimana dari data yang akan dikembalikan/dihasilkan leh fnunction.
·         Name adalah nama yang memungkinka kitamemangil function.
·         Argument (dispesifikasikansebagai kebutuhan). Setiap argument terdiri dari ipe data diikuti identifier,seperti deklarasi variable (contoh, int h) dan berfunsi dalam function seperti variable lainnya. Jua dapat melakkan passing parameters k function itu ketka dipanggil. Parameter yag berberbda dipisahkan dengan koma.
·         Statement, merupakan bagian badan suatu function. Dapat berupa instruksi tunggal maupun satu blok instruksi yang ditulskan diantara kurung kurawal {}.

Contoh penulisan fungsi:
               
Tipe hasil             nama fungsi       tipe parameter
 


                                                                                                                           Parameter normal
Double kuadrat ( double a )
{
-----------------------
penyataan
-----------------------

}

Sifat dari fungsi yang baik :
-          Nilai fan-in tinggi, artinya semakin sering suatu fngsi dipanggil olehpengguna semakin tinggi nilai fan-in.
-          Fan-out rendah, artinya semakin spesifik ungsi suatu modul akan semaki rendah  nilai fan-out.
-          Self-containd tinggi, artinya kemampuan untuk memenuhi kebutuhannya sendiri.

Hal-hal yang perlu diperhatikan dalam penggunaan fungsi :
a. Kalau tipe fungsi tidak disebutkan, maka akan dianggap sebagai fungis dengan nilai keluaran bertipe integer.
b. Untuk fungsi yang memiliki keluaran bertipe bukan integer, maka diperlukan pendefinisian penentu tipe fungsi.
C. Untuk fungsi yang tidak mempunyai nilai keluaran maka dimasukkan ke dalam tipe void
d. Pernyataan yang diberikan untuk memberikan nilai akhir fungsi berupa pernyataan return.
e. Suatu fungsi dapat menghasilkan nilai balik bagi fungsi pemanggilnya

Parameter Formal dan Parameter Aktual
 a. Parameter Formal adalah variabel yang ada pada daftar parameter dalam definisi fungsi.
 b. Parameter Aktual adalah variabel (parameter) yang dipakai dalam pemanggilan fungsi.

Dalam Contoh program pertambahan di atas parameter formal terdapat pada pendefinisian fungsi :

float tambah(float x, float y) //parameter formal
{ return (a+b);
}

Sedangkan parameter aktual terdapat pada pemanggilan fungsi :

void main()
{ ……………
…………..
C = tambah(a, b); //parameter actual
…………..
}




Cara Melewatkan Parameter
Cara melewatkan suatu parameter dalam Bahasa C++ ada dua Cara yaitu :

1. Pemanggilan Secara Nilai (Call by Value)
a. Call by value akan menyalin nilai dari parameter aktual ke parameter formal.
b. Yang dikirimkan ke fungsi adalah nilai dari datanya, bukan alamat memori letak dari datanya.
c. Fungsi yang menerima kiriman nilai akan menyimpannya di alamat terpisah dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi.
d. Perubahan nilai di fungsi (parameter formal) tidak akan merubah nilai asli di bagian program yang memanggilnya.
e. Pengiriman parameter secara nilai adalah pengiriman searah, yaitu dari bagian program yang memanggil fungsi ke fungsi yang dipanggil.
f. Pengiriman suatu nilai dapat dilakukan untuk suatu ungkapan, tidak hanya untuk sebuah variabel, elemen array atau konstanta saja.


2. Pemanggilan SeCara Referensi (Call by Referene)
c) Pemanggilan secara Referensi merupakan upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi.
d) Yang dikirimkan ke fungsi adalah alamat letak dari nilai datanya, bukan nilai datanya.
e) Fungsi yang menerima kiriman alamat ini akan menggunakan alamat yang sama untuk mendapatkan nilai datanya.
f) Perubahan nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi.
g) Pengiriman parameter secara referensi adalah pengiriman dua arah, yaitu dari fungsi pemanggil ke fungsi yang dipanggil dan juga sebaliknya.
h) Pengiriman secara acuan tidak dapat dilakukan untuk suatu ungkapan.

Parameter yang diberikan ke fungsi mash merupakan passed by value. Berarti , ketika memanggil sebuah fungsi, yang diberikan ke funsi adlah nilainya, tidak pernah menspesifikasikan variabelnya. Sebuah contoh, pemanggilan fungsi tambah, menggunakan perintah berikut :

Int x=5, y=3, z;
Z= tambah (x,y);

Yang berarti menggil fungsi tambah dengan meberikan nilai dari x dan y,yaitu 5 dan 3, bukan vaiabelnya.

Teapi dapat jga memaniplasi dari dalam fungis, nilai dari vaiabel eksternak.pass by reference, yaiut nilai parameter actual selalu sam dengan nilai parameter formal baik secara pemanggian maupun pengerjaan fungsi dengan menambah tanda & setelah tipe variable.



Untuk hal itu digunakan argument passed by referece, contoh:
Coding :
//contoh passed b reference
#include <iostream>
#include <conio.h>
using namespace std;
void contohRef(int& a,int& b, int& c)
{
                a*=2;
                b*=2;
                c*=2;
                }
               
int main() {
int x=1, y=3, z=7;
contohRef(x,y,z);
cout<<endl<<endl;
cout<<"x="<<x<<" y="<<y<<" z="<<z<<endl;

return 0;
}


output



Perhatikan deklarasi contohRef, tipe pada setiap argument diakhiri dengan tanda & ampersand yang menandakan bahwa variable tesebut biasanya akan passed by reference dari pada by value.
Ketka mengirimkan variable by reference yang dikirimkanadalah variabelnya da perubahan apapun yang dilakukan dalam fungsi akan berpengruh pada variable diluarnya.



Void contohRef (int& a,int& b, int& c)
 


                                         x          y              z

contohRef (   x           , y           , z            );


atau kata lain , parameter yang telah dietapkan adalah a,b dan c dan parameter yang dgunakn saat pemanggilan adalah x,y, dan z, maka perubahan  pada a akan mempengaruhi nilai x, begitupunpada  mempengaruhi nilai y dan c mempegaruhi nilai z.



itu sebabnya mengapa hasil output dai program diatas adalah nilai variable dalam main dikalikan 2. Jika deklarasi fungsi tidak diakhiri anda ampersand  maka variable tidak akan passed by reference, sehinga hasilnya akan tetap nilai dari x, y, z tanpa mengalami perubahan.
                Passing by reference merupakan cara efektifyang memungkinkan sebuah fungsi mengebalikan lebih dari satu nilai. Contoh, fungsi ini akan mengembalikan nilai seblum dan sesudahnya dari nilai awal parameter :

//contoh passed by reference 2
#include <iostream>
#include <conio.h>
using namespace std;
void prevnex(int x, int& prev,int& next)
{
                prev = x-1;
                next = x+1;
                }
int main() {
int x=100, y,z;
prevnex (x,y,z);
cout<<"\n privous ="<< y <<", next = "<<z<<endl;
return 0;
}


Output :




Nilai deault dalam argument

                Ketika mendeklarasikan senuah fungsi, dapt diberikan nilai default untuk setiap parameter. Nilai ini akan digunkanketika parameter pemngil diksongkan. Untuk itu cukup dideklaraskan pada saat deklarasi fungsi. Contoh :

//contoh default nilai
#include <iostream>
#include <conio.h>
using namespace std;
int bagi (int a,int b=2)
{
                int r;
                r=a/b;
                return r;
                }
int main () {
cout<<endl;
cout<<bagi (12)<<endl;
cout<<bagi (20,4);
return 0;
}

Output :





Dapa dilihat dala fungsi bagi .
 instruksi 1 :  bagi (12)

instruksi 2 : bagi (20,4)












Pemanggilan fungsi tanpa pengiriman data/ parameter

                Pemanggilan fungis tanpa pengiriman data/parameter secara tidak langsung telah kita pelajari selama ini dimana nama fungsi dipanggil, dipanggil begitu saja tanpa ada  parameter yang dikirim.
Contoh:

//garis
#include <iostream>
#include <conio.h>
using namespace std;
void garis()
{
                cout<<"--------------------------------"<<endl;
}
main(){
                garis ();
                cout<<"sedang belajar fungsi\n";
                garis();
}



Hasil output:





Variable lokal dan global:

-          Variable local adalah variable yang hanya dikelank di dalam suatu fungsi dan tidak dikenal difungsi lain.
-          Variable local baru ada bila fungsi ini dipanggil
-          Variable global adalah variable yang dikenal diseluruh fungsi yang ada dalam program
-          Bila nama variable local sama dengan variable global , yang akan di akses adalah variable lokalnya.

Contoh1:
Buat suatu fungsi untuk menjumlahkan dua buah bilangan

Algoritma:
1.       Buat fungsi tambah
2.       H=deklarasikan a dan b untuk menampung nilai dan variable r untuk menampung hasil
3.       Hitung  r=a+b
4.       Buat program utama
5.       Deklarasikan variable z untuk menampung hasil penjumlahan dari variable r
6.       Panggil fungsi tambah
7.       Tampilkan hasil penjumlahan

Coding  program:
// tambah
#include <iostream>
#include <conio.h>
using namespace std;
int tambah(int a, int b)
{
                int r;
                r=a+b;
                return r;
}
int main(){
                int z;
                z=tambah(5,3);
                cout<<"\nhasilnya = "<<z<<endl;
                return 0;
}

Output:



Program diatas ketika dieksekusi akan mulai dari fungsi main. Main function memulai dengan deklarasi variable z dengan tipe int. setelah itu instruksi pemanggilan fungsi tambah. Jika diperhatikan ada kesamaan antara struktur pemanggilan dengan deklarasi fungsi itu sendiri, perhatikan contoh dibawah ini:

Int tambah (int a, int b)

Z = tambah (5, 3)

                Instruksi pemanggilan dalam fungsi main untuk fungsi tambah, memberikan 2 nilai : 5 dan 3 mengacu ke parameter int a da int b yang dideklarasikan untuk fungsi tambah.
                Saat suatu fungsi dipanggil dari main, control program beralih dari fungsi main ke fungsi tambah. Nilai dari kedua parameter yang diberikan (5 dan 3) dicopy ke variable local ; int a dan int b.
                Fungsi tambah mendeklarasikan variable baru (int r;), kemudian ekspresi r=a+b;, yang berarti r merupakan hasil jumlah dari a dan b , dimana a dan b bernilai 5 dan 3 sehingga hasil akhirnya 8. Perintah selanjutnya  adalah :
Return r ;
Merupakan akhir dari fungsi addition, dan mengembalikan control pada fungsi main. Statement return diikuti dengan variable r (return (r) , sehingga nilai dari r yaitu 8 akan dikembalikan :


Int tambah (int a, int b)

Z = tambah (5 , 3)

Dengan kata lain pemanggilan fungsi tambah (5,3) adalah menggantikan dengan nilai yang akan dikembalikan (8).

Perlewatan parameter
Parameter dibagi menjadi 2:
1.       Parameter aktual yaitu parameter yang memberikan informasi
2.       Parameter formal yaitu parameter yang menerima informasi

Contoh 2:
Buat suatu fungsi pengurangan dan mengembalikan hasilnya .

//kurang
#include <iostream>
#include <conio.h>
using namespace std;
int kurang(int a, int b)
{
                int r;
                r=a-b;
                return r;
}
int main(){
                int x=5, y=3,z ;
                z= kurang(7,2);
                cout<<"hasil 1 = "<<z<<endl;
                cout<<"hasil 2 = "<< kurang (7,2) <<endl;
                cout<<"hasil 3 = "<< kurang (x,y) <<endl;
                z= 4 + kurang (x,y);
                cout<<"hasil 4 = " << z << endl;
                return 0;
}



Tampilan :



Fungsi di atas melakukan pengurangan dan mengembalikan hasilnya. Jika diperhatikan daam fungsi main, dapat dilihat beberapa cara pemanggilan fungsi yang berbeda.
Contoh 1:
z= kurang(7,2);
cout<<"hasil 1 = "<<z<<endl;
contoh 2:
cout<<"hasil 2 = "<< kurang (7,2) <<endl;
contoh 3:
cout<<"hasil 3 = "<< kurang (x,y) <<endl;

hal lain dari contoh di atas, parameter yang digunakan adalah variable, bukan konstanta. Contoh di atas memberikan nilai dari x dan y yaitu 5 dan 3, hasilnya 2.

Contoh 4:
z= 4 + kurang (x,y);          atau                       z = kurang (x+y) +4;


akan memberikan hasil akhir yang sama .perhatikan, pada setiap akhir ekspresi selalu diberi tanda semicolon ( ; ).



Function Tanpa Tipe (kegunaan void)
Deklarasi fungsi akanselal diawali dengan tipe dari fungsi,yang menatakantipe dta apa yang akan dihaslkan dari fungsi tersebut. Jika tidak ada nilai yang akan dikembalikan, maka dapat menggnakan tipe void,

 contoh:
//void function
#include <iostream>
#include <conio.h>
using namespace std;
void contohfunction(void)
{
cout<<"\n\ncontoh sebuah fungsi void \n\n";
}
int main () {
contohfunction() ;
return 0;
}



Output :






 Contoh program penggajian karyawan menggunaka fungsi modular:



Coding :


#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
#include <windows.h>
//deklarsi fungsi
int hitunggGapok(int pend);
int t_istri(int status,int jk);
int t_anak(int status,int jml_anak);
int trans(int kendaraan,int bln);
int kesehatan(int kes, int h);
int t_perum(int perum,int bln);
int potongan(int utang);
int lembur(int jam);

main(){
using namespace std;
system("color 48");
system("cls");

                int sekolah,gajipokok,tunjangan_istri,status,jk,tunjangan_anak,jml_anak,jam;
                int transport,kendaraan,bln,biaya,kes,hari,tunjangan_perum,perum,potong,utang;
                int upah,gapok,gbersih;
                char ulang,lagi,nama[50],nik[12];
               
                awal:
                system("cls");
                cout<<"\n -------- PROGRAM MENGHITUNG GAJI KARYAWAN -------";
                cout<<endl<<endl;
                cout<<"===========================================================";
                cout<<"\n -- Masukkan Nama                                    =";gets(nama);
                cout<<"\n -- Masukkan NIK                                        =";cin>>nik;
                cout<<endl;
                cout<<"\n||masukkan pendidikan[1.SMA 2.D3 3.S1 4.S2 5.S3]                                   =";cin>>sekolah;
                cout<<"\n||masukkan status [1.menikah 2.single]                                                                          =";cin>>status;
                cout<<"\n||masukkan jenis kelamin[1.laki-laki 2.perempuan]                                   =";cin>>jk;
                cout<<"\n||masukkan jumlah anak                                                                                                        =";cin>>jml_anak;
                cout<<"\n||masukkan jumlah jam kerja                                                                                               =";cin>>jam;
                cout<<"\n||masukkan jenis kendaraan[1.mobil 2.motor 3.kendaran umum]                      =";cin>>kendaraan;
                cout<<"\n||masukkan jenis perumahan[1.kontrakan 2.kos 3.rumah pribadi]                      =";cin>>perum;
                cout<<"\n||masukkan jumlah bulan                                                                                                      =";cin>>bln;
                cout<<"\n||masukkan status kesehatan [1.sehat 2.rawat inap 3.rawat jalan]      =";cin>>kes;
                cout<<"\n||masukkan jumlah hari sakit                                                                                                =";cin>>hari;
                cout<<"\n||masukkan jumlah utang koperasi [jika tidak punya isikan 0]                                =";cin>>utang;
                cout<<"\n======================================================================";
               
                gajipokok= hitunggGapok(sekolah);
                tunjangan_istri=t_istri(status,jk);
                tunjangan_anak=t_anak(status,jml_anak);
                transport=trans(kendaraan,bln);
                biaya=kesehatan(kes,hari);
                tunjangan_perum=t_perum(perum,bln);
                upah=lembur(jam);
                potong=potongan(utang);
                gbersih=(gapok+tunjangan_istri+tunjangan_anak+transport+biaya+tunjangan_perum+upah-potong);
               
//hasil output
                cout<<endl<<"                    Transkip gaji ";
                cout<<"\n======================================================================";
                cout<<"\n======================================================================";
                cout<<"\n           -- Nama Karyawan = "<<nama;
                cout<<"\n           -- NIK                                    ="<<nik;
                cout<<"\n Jumlah gaji pokok anda                                                           = "<<gajipokok;
                cout<<"\n Tunjangan istri                                                                            = "<<tunjangan_istri;
                cout<<"\n Tunjangan anak                                                                          = "<<tunjangan_anak;
                cout<<"\n Tumlah uang transport                                                                            = "<<transport;
                cout<<"\n Tumlah tunjangan perumahan                                                             = "<<tunjangan_perum;
                cout<<"\n Tumlah uang kesehatan                                                                          = "<<biaya;
                cout<<"\n Tumlah gaji lembur                                                                   = "<<upah;
                cout<<"\n Tumlah utang koperasi                                                                            = "<<potong;
                cout<<"\n Total gaji bersih                                                          =  Rp. "<<gbersih;
                cout<<"\n======================================================================";
                cout<<"\nApakah anda ingin menghitung kembali?    [Y/T]           ="; cin>>ulang;
                if((ulang=='y') || (ulang=='Y')){
                                                goto awal;
                                }
                else
                                system("exit"); return 0;
                }
               
                               
int hitunggGapok(int pend){
                int gapok;
                switch (pend){
                                case 1 : gapok=500000;break;
                                case 2 : gapok=750000;break;
                                case 3 : gapok=1000000;break;
                                case 4 : gapok=1500000;break;
                                case 5 : gapok=2000000;break;
                                default : gapok=0;
                }
                return gapok;
                }
               
int t_istri(int status,int jk){
                int tunjangan_istri;
                if (status==1 && jk==1){
                tunjangan_istri=100000;
                }else{
                tunjangan_istri=0;
                }
                return tunjangan_istri;
                }
               
int t_anak(int status, int jml_anak){
                int tunjangan_anak;
                if (status==1 && jml_anak<=2){
                tunjangan_anak=100000*jml_anak;
                }else if(status==1 && jml_anak>2){
                tunjangan_anak=100000*2;
                }else{
                tunjangan_anak=0;
                }
                return tunjangan_anak;
                }
               
int trans(int kendaraan,int bln){
                int transport;
                if (kendaraan==1){
                transport=350000*bln;
                }else if(kendaraan==2){
                transport=250000*bln;
                }else if (kendaraan==3){
                transport=200000*bln;
                }else{
                transport=0;
                }
                return transport;
                }
               
int kesehatan(int kes,int hari){
                int biaya;
                if (kes==2){
                                if(hari<=30){
                                                biaya=100000*hari;
                                }else
                                                biaya=3000000;
                }else if(kes==3){
                                if (hari<=30){
                                                biaya=250000*hari;
                                }else
                                                biaya=7500000;
                }else{
                                                biaya=0;
                }
                return biaya;
                }
               
int t_perum(int perum,int bln){
                int tunjangan_perum;
                if (perum==1){
                                tunjangan_perum=350000*bln;
                }else if(perum==2){
                                tunjangan_perum=200000*bln;
                }else{
                                tunjangan_perum=100000*bln;
                }
                return tunjangan_perum;
                }
               
int potongan(int utang){
                int potong,pajak;
                if(utang>0){
                                pajak=0.05*utang;
                                potong=utang+pajak;
                }else{
                potong=0;
                }
                return potong;
                }
               
int lembur(int jam){
                int upah;
                if (jam>8 && jam<=13){
                                upah=25000*(jam-8);
                }else{
                                upah=0;
                }
                return upah;
                }




Contoh menghitung maximal dan minimal dari dua buah inputan mengunaka fungsi :

Coding :


//menentukan max dan min menggunakan fungsi
#include <iostream>
#include <conio.h>
using namespace std;
int maximal (int a, int b);
int minimal (int x, int y);

int main ()
{
int bil1, bil2;
cout<<"\nmasukkan bil 1 =";
cin>>bil1;
cout<<"\nmasukkan bil 2 =";
cin>>bil2;
cout<<"hasil tertinggi ="<<maximal(bil1, bil2)<<endl;
cout<<"hasil terendah ="<<minimal(bil1, bil2)<<endl;
getch();

}

int maximal(int a, int b)
{
int max;
if (a>b)
                {
   max=a;
   }
   else
   {
   max=b;
   }
   return(max);
}

int minimal(int x, int y)
{
int min;
if (x<y)
                {
   min=x;
   }
   else
   {
   min=y;
   }
   return(min);
}




compile :


Output:




Contoh menghitung maximal dan minimal dari dua buah inputan mengunakan fungsi modular :

Coding :


//menentukan max dan min menggunakan fungsi
#include <iostream>
#include <conio.h>
using namespace std;
int maximal (int a, int b);
int minimal (int x, int y);

int main ()
{
int bil1, bil2;
cout<<"\nmasukkan bil 1 =";
cin>>bil1;
cout<<"\nmasukkan bil 2 =";
cin>>bil2;
cout<<"hasil tertinggi ="<<maximal(bil1, bil2)<<endl;
cout<<"hasil terendah ="<<minimal(bil1, bil2)<<endl;
getch();

}

int maximal(int a, int b)
{
int max;
if (a>b)
                {
   max=a;
   }
   else
   {
   max=b;
   }
   return(max);
}

int minimal(int x, int y)
{
int min;
if (x<y)
                {
   min=x;
   }
   else
   {
   min=y;
   }
   return(min);
}





Output: 



 Rangkuman
Fungsi merupakan elemen utama dalam bahasa C++ karena bahasa C++ sendiri terbentuk dari kumpulan fungsi-fungsi. Tujuan pembuatan fungsi adalah memudahkan dalam pengembangan program. Ini merupakan kunci dalam pembuatan program yang terstruktur. Menghemat ukuran program. Dalam setiap program bahasa C++, minimal terdapat satu fungsi yaitu fungsi main(). Fungsi banyak diterapkan dalam program-program C++ yang terstruktur.
Fungsi digunakan agar pemrogram dapat menghindari penulisan bagian program (kode) berulang-ulang, dapat menyusun kode program agar terlihat lebih rapi dan kemudahan dalam debugging program. Kajian fungsi setidaknya meliputi defenisi fungsi, prototype fungsi , fungsi tanpa nilai balik, variable local dan ekternal. Jenis-jenis fungsi bawaan dari C++, §antara lain fungsi : strcpy(); strlen();strcat();strupr();strlwr(); dan  strcmp().





Referensi :

2.       Flowchart,Algoritma, dan pemrograman mengunakan bahasa c++ builder, Indra Yatini B, Graha Ilmu