Author Topic: Procedure, Function, Global Variable  (Read 727 times)

0 Members and 1 Guest are viewing this topic.

Offline sapigerond

  • Newbie
  • *
  • Posts: 62
  • Reputasi Poin: 0
  • Gender: Male
    • View Profile
Procedure, Function, Global Variable
« on: October 05, 2008, 10:52:10 AM »
kk Anta jelasin ttg
function
procedure
variable global donk
n gimana cara manggilnya?

tq b4 :D

(dipriiiwiiitin aja kali?) ;D

Offline Z_HeN

  • Newbie
  • *
  • Posts: 24
  • Reputasi Poin: 1
    • View Profile
Procedure, Function, Global Variable
« Reply #1 on: October 06, 2008, 06:28:15 PM »
kk Anta jelasin ttg
function
procedure
variable global donk
n gimana cara manggilnya?

tq b4 :D

(dipriiiwiiitin aja kali?) ;D

umm... klo gak slah...
function tu merupakan block dari kode yg dirancang untuk melaksanakan suatu tugas khusus...n biasa nya function tu cma ada satu nilai keluaran... n jga function tu harus punya tipe(integer, real, string, boolean, ato char)...
beda ma procedur... klo procedure keluarannya(outputnya) bisa lebih dari 1... tergantung inisial parameternya outputnya...
n jg procedure tidak bertipe...
contoh  procedure ma funtion:

procedure hitungX (var a : integer; var b:integer; c:integer);
begin
   a:=c+3;
   b:=c+5;
end;
 

function hitungY (b:integer) : integer;
begin
   hitung:=b+3;
end;

kan kata pak "DHANNY" procedure ma function tu da Pemanggilannya biar bisa di jalanin di program... pemanggilan kek gni :

{program utama}
var hasilfunction, x,y,z,w : integer;
 begin
     x:=5;
     y:=9;
     hasilfunction := hitungY(x); //pemanggilan function dan keluarannya(output) di tampung di variabel lokal 'hasilfunction'
     hitungX(z,w,x); //pemanggilan procedure n keluarannya(output) ada di variabel z dan w...
 end;

nb : yg tulsn warna biru tu parameter outputnya procedure..
      yg warna hijau tu parameter inputnya procedure...
      klo untuk penulisan parameter output di ikuti dgn "var"... klo parameter input tidak dgn "var"..

klo varibel global tu adalah varibel yang di inisial di bagian atas program...yg bisa di pake oleh semua function, procedure dan program utama..
klo varibel lokal tu variabel yg di inisial di bagian dlm function, procedure, atau program utama... dan hnya bisa di pake didlam tempat kamu meng-inisial varibel tersebut... 

keknya cma segini.... klo da tman2 laen yg mau tmbh silahkan...
moga2 membantu ya... ttp semangka/semangat belajr algo.... ;) ;)
 ;D ;D ;D


Offline Anta

  • Developer
  • Advanced
  • *
  • Posts: 710
  • Reputasi Poin: 39
  • Gender: Male
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #2 on: October 10, 2008, 12:49:29 AM »
Function dan Procedure udah terjawab dengan teman kita Z_HeN.

Global Variable vs Local Variable

Misalnya kita disuruh membuat fungsi pangkat danmenampilkan pangkat 2^0 s/d 2^20.
maka programnya adalah:

Dengan menggunakan Global Variable semua (bad bad style)
Code: [Select]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x, hasil,xpangkat, hasilpangkat : integer; // <-- bayangkan suatu keluarga yang tinggal di 1 kamar yang sama

// Contoh Simpel dari pangkat
// Input Bilangan = Bilangan yang mau dipangkat, Exponen = Pangkat berapa
// Output = hasil pangkat
// misalnya mau 2^10, tinggal manggil Pangkat(2,10)
// kelemahan: pangkat cuma bisa positif dan bilangan bulat
Function Pangkat(Bilangan : Integer; Exponen : Integer) : Integer;
begin
  xpangkat := Exponen-1; // inisialisasi pencacah
  hasil := Bilangan; // siapkan bilangan

  While xpangkat > 0 do
    Begin
       hasil := hasil * Bilangan; // kali hasil dengan bilangan
       Dec(xpangkat);  // sama dengan xpangkat := xpangkat-1
    end;
  If Exponen = 0 then // kalo pangkat 0 set aja hasil = 1
    hasil := 1;

  Pangkat := hasil; // masukan Output pangkat dari local variable hasil
end;

begin
  for x := 0 to 20 do
  begin
     hasil := pangkat(2,x);
     Writeln(Hasil);
  end;
  readln;
end.

didalam Fungsi pangkat variabelnya menggunakan variabel global. sebenernya sah, sah aja tapi kelemahan global variabel antara lain:

* pemborosan memori jika semua variabel di definisikan kedalam variabel main program karena konsep local variabel, jika sebuah fungsi yang memilikin local variabel telah dijalankan memori yang terpakai oleh local variabel fungsi tersebut dapat dipakai oleh variabel lain / fungsi lain.

* ngetracenya pusing karena semua variabel dianggap global.

Anggap kaya begini kamu tinggal bersama nenek, kakek, papa, mama kamu dalam suatu rumah yang hanya memiliki 1 kamar yang besar sekali anggap 10meter x 10meter (pengandaian global variabel). dan semua aksesoris (sisir, dompet, baju berwarna sama dan bermodel sama persis [pengandaian variable didalam suatu global variabel]).

Berarti kamu harus bekerja keras dalam mencari cara gimana supaya membedakan sisir,dompet, barang-barang kamu dengan milik papa, mama, nenek kamu. (kasus ini bisa di pecahkan dengan cara memberi tanda dengan spidol mana yang punya kamu / bukan punya kamu).

Bayangkan kalau mencari sisir yang hilang di kamar 10meter x 10meter udah gitu model dan warnanya sama, tambah juga kamarnya berantakan pula dan belum dikasih tanda dengan spidol pula (pengandaian coding yang berantakan).

nah, bandingkan dengan kamar yang 10meter x 10meter tersebut dipecah menjadi 5 bagian. dan setiap orang di rumah kamu diberi kamar sendiri sendiri, paling enggak nyari sisir yang hilang tersebut lebih mudah karena pasti barang tersebut ada di kamar kita (dengan asumsi setiap keluarga tidak boleh meminjam barang), dan walau pun tidak dikasih tanda tetap meyakinkan bahwa sisir yang dikamar kita yang bertipe sama dengan keluarga yang lain itu tetap milik kita.

maap bahasanya aga amburadul... :D
ok, back to topic...

contoh extremenya gini: (yang salah)


Code: [Select]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x, hasil: integer; <--- global variabel

// Contoh Simpel dari pangkat
// Input Bilangan = Bilangan yang mau dipangkat, Exponen = Pangkat berapa
// Output = hasil pangkat
// misalnya mau 2^10, tinggal manggil Pangkat(2,10)
// kelemahan: pangkat cuma bisa positif dan bilangan bulat
Function Pangkat(Bilangan : Integer; Exponen : Integer) : Integer;
begin
  x := Exponen-1; // inisialisasi pencacah
  hasil := Bilangan; // siapkan bilangan

  While X > 0 do
    Begin
       hasil := hasil * Bilangan; // kali hasil dengan bilangan
       Dec(X);  // sama dengan x := x-1 <-- nah lo x nya di decrement di fungsi pangkat
    end;
  If Exponen = 0 then // kalo pangkat 0 set aja hasil = 1
    hasil := 1;

  Pangkat := hasil; // masukan Output pangkat dari local variable hasil
end;

begin
  for x := 0 to 20 do ;// <-- disini harusnya x bertambah kan??
  begin
     hasil := pangkat(2,x);
     Writeln(Hasil);
  end;
  readln;
end.
* nah dapat dilihat pada program tersebut akan infinite looping, karena global variable x akan diset menjadi 0 lagi oleh fungsi Pangkat.

coba dilihat di program yang benar dibawah ini:
Code: [Select]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

var x, hasil : integer;

// Contoh Simpel dari pangkat
// Input Bilangan = Bilangan yang mau dipangkat, Exponen = Pangkat berapa
// Output = hasil pangkat
// misalnya mau 2^10, tinggal manggil Pangkat(2,10)
// kelemahan: pangkat cuma bisa positif dan bilangan bulat
Function Pangkat(Bilangan : Integer; Exponen : Integer) : Integer;
var x, hasil : integer;
begin
  x := Exponen-1; // inisialisasi pencacah
  hasil := Bilangan; // siapkan bilangan

  While X > 0 do
    Begin
       hasil := hasil * Bilangan; // kali hasil dengan bilangan
       Dec(X);  // sama dengan x := x-1
    end;
  If Exponen = 0 then // kalo pangkat 0 set aja hasil = 1
    hasil := 1;

  Pangkat := hasil; // masukan Output pangkat dari local variable hasil
end;

begin
  for x := 0 to 20 do
  begin
     hasil := pangkat(2,x);
     Writeln(Hasil);
  end;
  readln;
end.
* dapat dilihat di program diatas, walaupun program utama dan fungsi pangkat memakai variabel X, tetapi penggunaanya masih aman, karena X program utama berasal dari Global variabel dan X pada fungsi pangkat berasal dari Local Variabel.

« Last Edit: October 10, 2008, 02:03:34 PM by Anta »

Offline Anta

  • Developer
  • Advanced
  • *
  • Posts: 710
  • Reputasi Poin: 39
  • Gender: Male
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #3 on: October 10, 2008, 01:09:08 AM »
Sebagai tambahan buat procedure dan function...

Procedure dan Function dapat memiliki konstanta juga loh!...

contoh kasusnya misalnya kita disuruh buat fungsi Increment dan Decrement

biasanya pemula buat kaya gini kan:
[B*] Gampang kak kalo Increment / Decrement doank!!
Code: [Select]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x: integer;

Procedure Increment(Var X : Integer);
begin
   X := X +1;
end;

Procedure Decrement(Var X : Integer);
begin
   X := X -1;
end;

begin
  X := 5;
  Writeln(X);
  Writeln('setelah di increment menjadi');
  Increment(X);
  Writeln(X);
  Writeln('setelah di Decrement,Decrement menjadi');
  Decrement(X);
  Decrement(X);
  Writeln(X);
  readln;
end.
* Good job, tapi kok cuma bisa di +1 / -1 yah?

[B*] Weiizzzz, mau Increment / Decrement lebih dari satu?, gampang kak!!!
[B*] saya teh pinter, kakak jangan nyepelein saya, nih programnya!!!
[A*] buset gw dimarahin

Code: [Select]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x: integer;

Procedure Increment(Var X : Integer; Bilangan : Integer);
begin
   X := X + Bilangan;
end;

Procedure Decrement(Var X : Integer; Bilangan : Integer);
begin
   X := X - Bilangan;
end;


begin
  X := 5;
  Writeln(X);
  Writeln('setelah di increment menjadi');
  Increment(X,1);
  Writeln(X);
  Writeln('setelah di Decrement,Decrement menjadi');
  Decrement(X,2);
  Writeln(X);
  readln;
end.
[B*] Tuh kak program saya jadi!! bagus kan???!!!
[A*] Yah bagus cuma kurang 1 hal, tapi kok di Increment 1 harus dikasih parameter ,1 yah? kan kalo Inc biasa bisa dipanggil dengan Inc(X) atau Inc(X,3). Coba kalo di panggil Increment(X) jadinya apa hayooo...
[B*] Jadinya Not enough actual parameters, buset kok jadi gini sih, kenapa yah???
[A*] itu gara gara parameter Bilangan harus di isi.
[B*] caranya gimana daonk supaya bisa sama kaya Inc(X)
[A*] gampang kok, tinggal ubah dan tambahin Parameter bilangan dengan Const Bilangan : Integer = 1

jadinya seperti ini:
Code: [Select]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x: integer;

Procedure Increment(Var X : Integer;const Bilangan : Integer =1);
begin
   X := X + Bilangan;
end;

Procedure Decrement(Var X : Integer;const Bilangan : Integer =1);
begin
   X := X - Bilangan;
end;


begin
  X := 5;
  Writeln(X);
  Writeln('setelah di increment menjadi');
  Increment(X);
  Writeln(X);
  Writeln('setelah di Decrement,Decrement menjadi');
  Decrement(X,2);
  Writeln(X);
  readln;
end.

KESIMPULANNYA: kalo bilangan kita tidak kasih parameter maka Delphi secara otomatis mengeset dengan nilai default bilangan yaitu 1.


Offline Z_HeN

  • Newbie
  • *
  • Posts: 24
  • Reputasi Poin: 1
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #4 on: October 10, 2008, 12:12:03 PM »
@kk anta...
kog di program yg pangkat tu...
dec(x) diberi ketergan x=x+1, umm dec(x) tu kan x=x-1 :-\ :-\ :-\....
 ;D ;D ;D
 

Offline ProgrammerSakti

  • Newbie
  • *
  • Posts: 29
  • Reputasi Poin: 1
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #5 on: October 10, 2008, 12:49:07 PM »
Mau nimbrung nih. Soal perbedaan procedure dan fungsi sudah dijelaskan bahwa procedure digunakan untuk subprogram yang bisa menghasilkan suatu nilai (bisa 1 atau lebih), bisa juga tidak menghasilkan nilai (berupa potongan program saja).
Fungsi adalah subprogram yang pasti menghasilkan 1 nilai (kalau dipaksain bisa lebih dari 1 nilai, tapi nggak sesuai sama aturan).
Variabel global, variabel yang bisa digunakan oleh semua subprogram maupun main program. Karena bisa dipakai oleh semua program, maka otomatis variabel ini akan makan memori. Jadi harus berhemat dalam pemakaiannya.
Variabel lokal, variabel yang hanya digunakan di 1 subprogram dan otomatis dihilangkan setelah subprogram selesai.
Parameter passing by value / parameter nilai adalah parameter yang nilainya tetap sesudah subprogram selesai.
Parameter passing by address / by reference atau parameter alamat adalah parameter yang nilainya berubah sesudah subprogram selesai.

Offline ProgrammerSakti

  • Newbie
  • *
  • Posts: 29
  • Reputasi Poin: 1
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #6 on: October 10, 2008, 12:58:18 PM »
Begini nih contohnya :
var c:integer; // variabel global
Procedure hitung(a:integer;var b:integer);
var c:integer; // variabel lokal
begin
     a:=5;b:=10;c:=20;
end;

Begin
    a:=1;b:=2;c:=3;writeln(a:5,b:5,c:5); // a=1, b=2 dan c=3
    hitung(a,b);writeln(a:5,b:5,c:5); // a=1, b=10 dan c=3
    readln;
end.

Koq c masih 3? Karena c yang diubah menjadi 20 adalah c lokal bukan yang global. Hati2 kalau ada 2 variabel yang sama, yang didahulukan adalah yang lokal dulu.


Offline Dhanny

  • Administrator
  • Expert
  • *
  • Posts: 1,080
  • Reputasi Poin: 41
  • Gender: Male
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #7 on: October 10, 2008, 02:01:40 PM »
Saya tambahin dikit, yah,
Biar lebih jelas

Begini nih contohnya :
var c:integer; // variabel global
Procedure hitung(a:integer;var b:integer);
var c:integer; // variabel lokal
begin
     a:=5;b:=10;c:=20;
    writeln(a:5,b:5,c:5); //hasilnya 1=5, b=10, c=20
end;

Begin
    a:=1;b:=2;c:=3;writeln(a:5,b:5,c:5); // a=1, b=2 dan c=3
    hitung(a,b);
    writeln(a:5,b:5,c:5); // a=1, b=10 dan c=3
    readln;
end.

Koq c masih 3? Karena c yang diubah menjadi 20 adalah c lokal bukan yang global. Hati2 kalau ada 2 variabel yang sama, yang didahulukan adalah yang lokal dulu.


Penjelasannya :
- pada saat program dipanggil, maka program akan
  men-set a=1, b=2 dan c=3
- Kemudian dengan perintah writeln berarti tampilkan nilai a,b,dan c
   (a:5) artinya beri tempat sebanyak 5 spasi untuk menampilkan nilai a
- Kemudian perintah hitung(a,b) berarti panggilah procedure hitung
   dengan melewatkan parameter a dan b
- Di dalam procedure hitung, maka nilai a=5, b=10, dan c = 20
   Kemudian ditampilkan berdasarkan perintah writeln
- Setelah itu, maka program akan kembali ke program utama
   Hati-hati :
   1. nilai a di program utama tidak berubah karena parameter a adalah
       parameter nilai (artinya nilai a dari program utama dilewatkan ke dalam procedure
       tapi nilai a dari procedure tidak dikembalikan ke program utama)
   2. nilai b di program utama berubah karena parameter b adalah
       parameter variabel (artinya nilai b dari program utama dilewatkan ke dalam procedure
       kemudian nilai b dari procedure dikembalikan ke program utama)
   3. nilai c di program utama tidak berubah karena di walaupun di awal program
       dideklarasikan variabel global c, tetapi karena di dalam procedure sendiri terdapat
       deklarasi variabel lokal c, maka nilai untuk c di program utama akan masuk ke variabel
       c yang global, sedangkan nilai untuk c di dalam procedure akan masuk ke variabel c
       yang lokal. (penjelasan lengkapnya di kelas aja, yah) ^ ^.
- Kemudian program akan menampilkan kembali nilai a,b,dan c berdasarkan perintah writeln

Offline Anta

  • Developer
  • Advanced
  • *
  • Posts: 710
  • Reputasi Poin: 39
  • Gender: Male
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #8 on: October 10, 2008, 02:04:37 PM »
@kk anta...
kog di program yg pangkat tu...
dec(x) diberi ketergan x=x+1, umm dec(x) tu kan x=x-1 :-\ :-\ :-\....
 ;D ;D ;D
 
maaf, maaf itu keteledoran... udah dibenerin tuh.

Offline Z_HeN

  • Newbie
  • *
  • Posts: 24
  • Reputasi Poin: 1
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #9 on: October 21, 2008, 11:41:08 PM »
bg anta... yg inc dan dec tu kan bisa diakalin dengan const pd parameter inputnya...
n bil nya bertipe integer.... klo yg seandaianya bil(variabel) bertipe string bisa di akalin gak...
klo variabel string input nya kosong maka pas pemangilan gak perlu nyertain parameternya...
n gak bkalan keluar error : "not enough actual parameter"
gmana ya cra nya.... :-\ :-\ :-\ ..
tlong di bantuin ya ;D ;D ;D ;D..


Offline Anta

  • Developer
  • Advanced
  • *
  • Posts: 710
  • Reputasi Poin: 39
  • Gender: Male
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #10 on: October 22, 2008, 08:27:25 AM »
bg anta... yg inc dan dec tu kan bisa diakalin dengan const pd parameter inputnya...
n bil nya bertipe integer.... klo yg seandaianya bil(variabel) bertipe string bisa di akalin gak...
klo variabel string input nya kosong maka pas pemangilan gak perlu nyertain parameternya...
n gak bkalan keluar error : "not enough actual parameter"
gmana ya cra nya.... :-\ :-\ :-\ ..
tlong di bantuin ya ;D ;D ;D ;D..


inc ama dec di kasih const? maksudnya gimana yah? kan inc ama dec pasti mempengaruhi parameter atasnya.
jadi harus memakai Var, enggak bisa pake const.

gini aja gw kasih contoh procedurenya:

procedure tuliskelayar(const msg: string = '');
begin
   writeln(msg);
end;

begin
   readln(tulisan);
   if tulisan <> '' then tuliskelayar(tulisan)
   else tuliskelayar;
end.

Offline Dhanny

  • Administrator
  • Expert
  • *
  • Posts: 1,080
  • Reputasi Poin: 41
  • Gender: Male
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #11 on: October 22, 2008, 11:34:58 AM »
klo yg seandaianya bil(variabel) bertipe string bisa di akalin gak...

maksudnya suatu bilangan tapi bertipe string?
tapi mau diproses?

bisa aja sih
menggunakan fungsi VAL

fungsi untuk merubah string menjadi bilangan (integer)
untuk kemudian diproses
tapi kalo di dalamnya bukan angka maka dia akan mereturn error code

Offline Z_HeN

  • Newbie
  • *
  • Posts: 24
  • Reputasi Poin: 1
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #12 on: October 22, 2008, 03:26:08 PM »
ni program yg di bkn kk anta di atas g post ulang di sini ya ;D ;D ;D
Code: [Select]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x: integer;

Procedure Increment(Var X : Integer;const Bilangan : Integer =1);
begin
   X := X + Bilangan;
end;

Procedure Decrement(Var X : Integer;[color=red]const Bilangan : Integer =1[/color]);
begin
   X := X - Bilangan;
end;


begin
  X := 5;
  Writeln(X);
  Writeln('setelah di increment menjadi');
  Increment(X);
  Writeln(X);
  Writeln('setelah di Decrement,Decrement menjadi');
  Decrement(X,2);
  Writeln(X);
  readln;
end.

waduh sory pak n kk anta... yg itu bkn bil.. tp variabel.. yg bertipe string... n jga maksud g bkan inc n dec nya kasih const... maksud g yg ini kk : (const bilangan :integer=1)...
procedure inc dan dec di atas yg di post kk anta... tu parameter input nya pake const (yg "const bilangan :integer=1")...
klo pas pemanggilan procedure(inc ato dec) jika kita sertakan nilainya mka nilai yg kt sertakan akan masuk ke dlm procedure.. klo tidak di sertakan nilai untuk parameter input(yg pake const) kan otomatis nilai yg masuk itu 1...

yg mau g nanyain adlh : seandainya ada suatu variabel/parameter x yg bertipe string n mau dibknin kyk gtu bs gak ya...
misal : pas pemanggilan procedure kt gak sertain data string nya... maka otomatis data string nya kosong (' ')...
n klo kta sertain data string nya maka data string tersebut yg akan masuk ke procedure....

Offline Z_HeN

  • Newbie
  • *
  • Posts: 24
  • Reputasi Poin: 1
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #13 on: October 22, 2008, 03:40:32 PM »
heheh.. yuppp.... kayk nya uda kejawb ama kk anta... tank kiu.. tank kiu... ;D ;D ;D
 ;) ;) ;)....
n skalian mau nanya lge nie.. klo yg boolean, char, n real gmana cara nya ya...? :-\ :-\

Offline Anta

  • Developer
  • Advanced
  • *
  • Posts: 710
  • Reputasi Poin: 39
  • Gender: Male
    • View Profile
Re: Procedure, Function, Global Variable
« Reply #14 on: October 23, 2008, 08:00:50 AM »
heheh.. yuppp.... kayk nya uda kejawb ama kk anta... tank kiu.. tank kiu... ;D ;D ;D
 ;) ;) ;)....
n skalian mau nanya lge nie.. klo yg boolean, char, n real gmana cara nya ya...? :-\ :-\
sama aja x..

kalo char:
const c : char =' ';

kalo boolean:
const b : boolean = false;

kalo real:
const r : real = 0.1;

ganti, huruf yang di tebelin sesuai keperluan.