Laporan Pratikum 9 algoritma pemograman
LAPORAN PRAKTEK 9 ( PERTEMUAN KE-12)
TUGAS 9
ALGORITMA PEMOGRAMAN
Disusun Oleh : Syafri Wardian
18214046
Mata Kuliah Praktek :
FUNGSI
Dosen Pembimbing :
Sri Nofri Wihandri ,S.Pd,M.Pd.T
Program Studi :
Teknik Elektronika
Akademi Komunitas Negeri Padang
Pariaman
PDDF Universitas Negeri Padang
Tahun 2018
FUNGSI
Terdapat dua
metode atau cara yang digunakan untuk melewatkan parameter ke dalam sebuah
fungsi, yaitu berdasarkan fungsi, yaitu berdasarkan nilai (disebut
pass-by-value) dan berdasarkan referensi atau alamatnya (disebut
pass-by-reference). Pada bagian ini kita akan membahas mengenai perbedaan cara
kerja antara kedua metode tersebut serta cara melakukannya di dalam C++.
1.
Fungsi tanpa
return value
Dalam bahasa lain disebut prosedur.
Prosedurà fungsi
yang mempunyai nilai balik.
Ada 2 jenis:
a.
Tanpa passing parameter
Passing parameterà sesuatu nilai yang mungkin saja berupa tipe data
dasar atau tipe data bentukan. Parameter à sesuatu yang harus ada untuk melakukan suatu
pekerjaan.
Bentuk:
void
namaFungsi()
{
aksi-aksi;
}
Contoh program:
Membuat Program untu mengelola nilai
(mid, uas, tugas, akhir, huruf), maka fungsi-fungsi yang dibutuhkan adalah:
Fungsi yang dibutuhkan:
void judul();
void bacaData();
void hitungNilai();
void hitungAkhir(int i,
double a, double b, double c);
void konversi(int i, double
k);
void info();
–> Pass By Value
Bila parameter dikirim secara value (nilai) ,
parameter formal di prosedur akan berisi nilai yang akan dikirimkan yang
kemudian bersifat lokal di prosedur. Bila nilai parameter formal di prosedur
tersebut berubah, tidak akan mempengaruhi nilai parameter nyata (nilai
parameter nyata tetap, tidak berubah). Pengiriman secara nilai ini merupakan
pengiriman searah, yaitu dari parameter nyata ke parameter formal, yang tidak
dikirim balik dari parameter formal ke parameter nyata. Pengiriman parameter
secara nilai ini juga dapat dikatakan dengan menyalin (copy) nilai variabel dan
nilai itu diberikan ke variabel parameter. Prosedur bekerja pada salinan
variabel, sehingga tidak mengubah parameter aktualnya.
Karakteristik dari Pass by Value:
- Data yang dikirim dari parameter aktual di blok program utama ke parameter formal di prosedur adalah nilai dari datanya bukan alamat memori letak dari datanya.
- Prosedur/Fungsi yang menerima nilai ini akan menyimpan data tersebut di alamat memori yang berbeda dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi/prosedur tersebut di blok program utama.
- Karena terdapat alamat memori yang berbeda, maka perubahan nilai di fungsi tidak akan merubah nilai asli di bagian program yang memanggil prosedur/fungsi tersebut.
Contoh Program Pass By Value:
Listing program
C:
/*
Program Mengelula Nilai Algoritma
*/
#include <stdio.h>
#include <stdlib.h>
#define N 5
//deklarasi fungsi
void judul();
void bacaData();
void hitungNilai();
void hitungAkhir(int i,
double a, double b, double c);
void konversi(int i, double
k);
void info();
//deklarasi array
double mid[N];
double uas[N];
double tugas[N];
double akhir[N];
char huruf[N];
main()
{
judul();
bacaData();
hitungNilai();
info();
}
//definisi fungsi
void judul()
{
printf("Program Mengolah Nilai Algoritma\n");
printf("Programmer: Antu\n");
printf("Nama Pacar: Balau\n");
printf("Created 1-1-2001\n\n");
}
void bacaData()
{
int i;
printf("\nMengentri Nilai\n");
for(i=0;i<N;i++)
{
printf("Mahasiswa ke-%d: \n",(i+1));
printf("Nilai MID
: ", (i+1));
scanf("%lf", &mid[i]); fflush(stdin);
printf("Nilai UAS
: ", (i+1));
scanf("%lf", &uas[i]); fflush(stdin);
printf("Nilai TUGAS : ", (i+1));
scanf("%lf", &tugas[i]); fflush(stdin);
}
}
void hitungNilai()
{
int i;
printf("\nMenghitung Nilai\n");
for(i=0;i<N;i++)
{
hitungAkhir(i, mid[i], uas[i], tugas[i]);
konversi(i, akhir[i]);
}
}
void hitungAkhir(int i,
double a, double b, double c)
{
akhir[i] = a*0.3 + b*0.3 + c*0.4;
}
void konversi(int i, double
k)
{
if((k>=81.0) && (k<=100.0))
huruf[i] = 'A';
else if((k>=66.0) && (k<81.0))
huruf[i] = 'B';
else if((k>=55.0) && (k<66.0))
huruf[i] = 'C';
else if((k>=45.0) && (k<55.0))
huruf[i] = 'D';
else huruf[i] = 'E';
}
void info()
{
int i;
printf("\nMenampilkan Nilai\n");
for(i=0;i<N;i++)
{
printf("Nilai Makasiswa ke-%d: \n", (i+1));
printf("
MID : %0.2lf\n", mid[i]);
printf("
UAS : %0.2lf\n", uas[i]);
printf("
TUGAS : %0.2lf\n",
tugas[i]);
printf(" N
AKHIR: %0.2lf\n", akhir[i]);
printf(" N
HURUF: %c\n", huruf[i]);
}
}
Ini hasilnya setelah dijalanin:
Dapat dilihat pada gambar diatas,
walaupun didalam procedure telah dilaukan perubahan nilai, namun perubahan nilai tidak bisa dipanggil ke program utama, karena pass by value hanya dapat mengcopy nilai sehingga saat di panggil nilainya tetap memakai nilai diprogram utama.
walaupun didalam procedure telah dilaukan perubahan nilai, namun perubahan nilai tidak bisa dipanggil ke program utama, karena pass by value hanya dapat mengcopy nilai sehingga saat di panggil nilainya tetap memakai nilai diprogram utama.
Pass By
Value sebagai parameter masukkan dimana tidak bisa membawa nilai yang telah
diubah didalam menuju keluar prosedure, dia hanya berfungsi untuk memasukkan
nilai dari program utama ke dalam procedure.
Dari hasil
di atas dapat disimpulkan bahwa fungsi tersebut tidak dapat mengubah (dalam hal
ini menukarkan ) bilangan-bilangan yang dimaksud karena nilai yang terdapat di
dalam fungsi tidak mempengaruhi nilai luar. Untuk menangani kasus semacam ini
kita perlu menggunakan metode pass-by reference untuk melewatkan parameter ke
dalam fungsi "TukarBilangan()" .
–> Pass By Reference
Sedangkan bila pengiriman parameter secara reference
(acuan), maka perubahan-perubahan yang terjadi pada nilai parameter formal di
prosedur akan memperngaruhi nilai parameter nyata. Parameter-parameter ini
disebut dengan variabel parameter serta dideklarasikan di deklarasi prosedur
dengan menggunakan kata cadangan Var, Berikut format penulisannya:
Procedure nama_procedure (VAR identifier1,
identifier2, …., identifier3: tipe data)
Identifier konstanta dan literal tidak dapat digunakan
dalam parameter, karena kedua identifier tersebut tidak dapat berubah nilainya.
Karakteristik dari Pass by Reference :
- Pada saat pengiriman nilai, yang dikirim dari parameter aktual di blok program utama ke parameter formal di prosedur adalah alamat letak dari nilai datanya bukan.
- Prosedur/Fungsi yang menerima nilai ini akan menggunakan alamat memori yang sama dengan nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi/prosedur tersebut di blok program utama. Karena menggunakan alamat memori yang sama, maka perubahan nilai di prosedur/fungsi akan merubah nilai asli di bagian program yang memanggil prosedur/fungsi tersebut.
3. akan
upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi. Cara ini
digunakan untuk mengubah isi dari suatu variabel di luar fungsi dengan
pelaksaaan pengubahan dilakukan di dalam fungsi. Sebagai contoh perhatikan
program fungsi tukar() dibawah ini yang telah di modifikasi dari fungsi tukar
sebelumnya untuk melihat perbedaannya :
4.
int
tukarreference(int *px, int *py)
{
int z;
z = *px;
*px = *py;
*py = z;
printf("\nNilai
di akhir fungsi tukar()\n");
printf("x
= %d y = %d\n", *px,*py);
}
5. Adapun
perubahan dalam parameter aktualnya menjadi :
tukarreference(&a,&b);
6. Dalam
deklarasi parameter :
int *px, int *py
Menyatakan
bahwa px dan py adalah suatu variabel pointer. Yang dimaksudkan sebagai
variabel pointer adalah suatu variabel yang menunjuk ke variabel lain. Lebih
jelasnya, variabel pointer berisi alamat dari variabel lain. Pemanggilan fungsi
&a dan &b masing-masing berarti alamat a dan alamat b. Dengan
pemanggilan seperti ini hubungan antara variabel pointer px dan py dengan
variabel a dan b adalah seperti ditunjukan gambar dibawah ini. Dalam hal ini px
dikatakan menunjuk variabel a dan py menunjuk variabel b.
Contoh
Program Pass By Reference:
a.
Menggunakan
passing parameter (argumen)
Contoh:
/*
Program Menghitung Volume benda geometris
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PHI 3.14
//deklarasi fungsi
void judul();
void menu();
void volTabung(double j, double
t);
void volKotak(double r);
void volBalok(double p,
double l, double t);
main()
{
judul();
menu();
}
void judul()
{
printf("Program Menghitung Volume Benda
Geometris\n");
printf("Programmer: Antu\n");
printf("Nama Pacar: Balau\n");
printf("Created 1-1-2001\n\n");
}
void menu()
{
int pilih;
double a, b, c;
printf("MENU\n");
printf("1. Menghitung volume tabung\n");
printf("2. Menghitung volume kotak\n");
printf("3. Menghitung volume balok\n\n");
printf("Pilih nomor yg diinginkan: ");
scanf("%d", &pilih); fflush(stdin);
switch(pilih)
{
case 1:
printf("Menghitung Volume
Tabung\n");
printf("Ketikkan nilai
jari-jari:");
scanf("%lf", &a);
fflush(stdin);
printf("Ketikkan nilai tinggi : ");
scanf("%lf", &b);
fflush(stdin);
volTabung(a,b); break;
case 2:
printf("Menghitung Volume
Kotak\n");
printf("Ketikkan nilai rusuk:");
scanf("%lf", &a);
fflush(stdin);
volKotak(a); break;
case 3:
printf("Menghitung Volume
Balok\n");
printf("Ketikkan nilai panjang:");
scanf("%lf", &a);
fflush(stdin);
printf("Ketikkan nilai lebar:");
scanf("%lf", &b);
fflush(stdin);
printf("Ketikkan nilai tinggi:");
scanf("%lf", &c);
fflush(stdin);
volBalok(a, b, c); break;
default: printf("Nomor pilihan tidak
ada!!!\n");
}
}
void volTabung(double j,
double t)
{
double vol;
vol = PHI * pow(j, 2) * t;
printf("Volume Tabung tersebut = %0.2lf kubik\n",
vol);
}
void volKotak(double r)
{
double vol;
vol = pow(r, 3);
printf("Volume Tabung tersebut = %0.2lf kubik\n",
vol);
}
void volBalok(double p,
double l, double t)
{
double vol;
vol = p * l * t;
printf("Volume Tabung tersebut = %0.2lf kubik\n",
vol);
}
Hasilnya
setelah dijalankan:
Dapat dilihat perbedaannya dengan pass by value, pada
pass by reference, nilai variabel dikirim berdasarkan alamat
sehingga perubahan nilai yang terjadi pada prosecedure dapat berpengaruh
sebagai parameter keluaran, dimana nilai yang berubaha didalam procesure dapat dipanggiil keluar dari perocedure dengan catatan varibel harus dideklarasikan sendiri-sendiri.
sehingga perubahan nilai yang terjadi pada prosecedure dapat berpengaruh
sebagai parameter keluaran, dimana nilai yang berubaha didalam procesure dapat dipanggiil keluar dari perocedure dengan catatan varibel harus dideklarasikan sendiri-sendiri.
Pengertian Parameter
Parameter adalah tempat penyimpanan (variabel) di dalam function, yang
digunakan untuk melakukan pemeberian data dari pemanggil ke dalam function. Parameter
terletak di antara tanda kurung ( dan ) setelah identitas dari function, dan
sebuah function dapat memiliki beberapa parameter yang dipisahkan dengan tanda
koma ,.
Function biasanya membutuhkan data untuk beroperasi, Yang biasa kita
lalukan dalam mendapatkan data adalah dengan memanggil variabel, tapi kita
harus ingat dengan peraturan variabel lokal dalam ruang lingkup. Kita tidak
bisa dengan mudah mendapatkan data dari scope lain.
Hal tersebut merupakan satu alasan kenapa parameter itu ada dalam
Bahasa pemrograman. Jika kita tidak bisa mendapatkan data dari scope lain
secara langsung, kita bisa memberikan data tersebut saat pemanggilan function
dengan perantara yaitu parameter.
Jika kita mempunyai variabel int a dalam function utama dan function
kustom dengan satu parameter int b, ketika kita memberikan nilai dari variabel
int a ke dalam function kustom. Kita dapat menggunakan parameter int b untuk
perantara sekaligus tempat yang akan menjadi variabel local dalam function
kustom. apa yang terjadi adalah Data dari int a akan di salin ke variabel int
b. dengan hal itu function kustom kita akan memiliki data dari scope luar
(scope pemanggil). Dan juga data tersebut akan sampai ke tujuan dengan aman.
Parameter dalam Bahasa pemrograman biasanya memiliki 2 jenis, yaitu :
Function Parameter /
Parameter Formal
Argument / Actual Parameter
Jenis-jenis Parameter
Function
Parameter
Function
Parameter atau juga disebut sebagai Parameter Formal, adalah variabel lokal
yang didirikan di dalam deklarasi function (bukan definisi), Yang merupakan
tempat penyimpanan nilai dari argument yang diberikan saat pemanggilan
function.
Function parameter berada di dalam deklarasi function, di antara tanda
( dan ) setelah identitas dari function. di dalam tanda kurung tersebut anda
bisa membuat banyak parameter, dan masing-masing dipisahkan dengan tanda koma (,).
Argument
Argument
adalah parameter yang menyertai pemanggilan function. merupakan tempat dimana
anda bisa memberikan data untuk digunakan di dalam function yang dipanggil dan
diberikan saat pemanggilan function tersebut.
Pemberian
data ke dalam function kustom dapat berupa data langsung, data dari suatu
variabel, data dari konstanta, data dari pengembalian function atau merupakan
hasil dari operasi. Pemberian data ke dalam function harus mengikuti aturan
yang telah ditetapkan oleh function parameter.
jika lebih dari 1 argument, masing-masing argument akan dipisahkan
dengan tanda koma. Pemberian arguments harus sesuai dengan parameter.
Komentar