Jangkauan Identifier

Download Report

Transcript Jangkauan Identifier

Jangkauan Identifier
Global Identifier:
• Identifier yang dideklarasikan di luar fungsi dan
ditempatkan di atas semua fungsi dalam suatu program.
• Jangkauan meliputi seluruh program.
• Identifier yang dideklarasikan secara global, dapat dideklarasikan kembali (redeclared) di subprogram.
Local Identifier:
• Identifier yang dideklarasikan di dalam fungsi, termasuk
daftar parameter.
• Jangkauan terbatas pada function itu sendiri.
Kerugian menggunakan Global Identifier :
•
•
•
Jika program semakin besar, maka semakin besar pula
kecenderungan terjadinya error.
Sulit melacak kesalahan.
Data tidak terjaga dengan baik, setiap subprogram
dapat
mengubah isi variabel tanpa sepengetahuan subprogram
lainnya.
Keuntungan menggunakan Global Identifier :
•
Transfer data antar modul sederhana.
Contoh jangkauan identifier baik yang bersifat Global
maupun Local, dapat digambarkan sebagai berikut:
int x;
fungsi1(){
…
…
}
int y;
fungsi2(){
int z;
…
}
main()
{
int z;
int y;
…
}
scope dari variabel x
z hanya dikenal oleh fungsi2()
scope dari variabel y
z dan y hanya dikenal oleh main
z di main berbeda dgn z di fungsi2()
Pointer:
• Pointer adalah variabel yang menyimpan alamat memori
dari variabel yang lainnya.
• Deklarasi pointer :
<type> *ptr_name;
• Pointer bisa berisi alamat dari pointer yang lain dan pointer
ini disebut pointer to pointer.
• Deklarasi pointer to pointer sbb:
<type> **ptr_to_ptr;
Pointer aritmetic :
pointer bisa ditambah atau dikurangi dengan suatu nilai
tertentu.
Contoh :
ptr = ptr – 2;
Pointer comparison :
pointer bisa dibandingkan nilainya dengan pointer lain.
Contoh :
if (ptr1 < ptr2) ……
Dua operator yang sering digunakan pada pointer :
* (content of) dan & (address of).
Contoh :
inisialisasi sebuah integer pointer ke data variable:
int i, *ptr;
ptr = &i;
Untuk merubah isi / nilai yang ditunjuk oleh pointer:
*ptr = 5; /* sama artinya dgn i=5 */
Daftar Parameter:
• Bila modul tidak dapat mencukupi kebutuhan sendiri, data
ditransfer lewat daftar parameter dan nilai yang dihasilkan
juga ditransfer balik melalui daftar parameter.
• Daftar parameter merupakan ‘interface’ suatu modul
dengan modul lain.
Transfer Parameter
• Passing By-Value:
Yang dikirim ke modul lain adalah nilainya (r-value).
• Passing By Location / by reference:
Yang ditransfer ke modul lain adalah alamatnya (ℓ-value).
Contoh transfer parameter ‘Passing by value’
/* Program Menggambar_Garis
*/
#include <stdio.h>
void Garis (char x )
{
int i;
/*x disebut Parameter Formal*/
/*i, x adalah Local Variabel */
for (i = 1; i<=10; i++) printf(“%c”,x);
}
/*Program Utama*/
main()
{
char A = ’-’;
Garis(A);
return 0;
}
/* A=Parameter Aktual */
Contoh transfer parameter ‘Passing by location’
/* Program Passing by location */
#include <stdio.h>
void Hitung (int X, int Y, int *P, int *Q)
{
*P = X + Y;
*Q = X * Y;
}
/*Program Utama*/
void main()
{
int X,Y,P,Q;
/*local variabel*/
printf(“ X=”); scanf(“%d”,&X);
printf(“ Y=”); scanf(“%d”,&Y);
Hitung(X,Y,&P,&Q);
printf(”X + Y = %d\n”, P);
printf(”X * Y = %d\n”, Q);
}
Kekeliruan dapat terjadi karena lupa mendeklarasikan formal
parameter sebagai pointer.
Contoh :
/* Program Lupa */
void Tukar(char A, char B ) {
char C ;
C = A;
A = B,
B = C;
}
void main()
{
char X,Y ;
X = ‘S’;
Y = ‘D’;
Tukar(X,Y);
printf(“X = %c Y= %c”, X,Y);
}
Pada program diatas, pertukaran data yang diharapkan
diantara variabel X dan Y tidak akan terjadi.
Contoh:
Contoh program dibawah ini, adalah program untuk menguji
apakah suatu bilangan N adalah prima.
Algoritma :
1. Bila N = 1, maka N bukan bilangan prima, selesai
2. Bila N = 2, maka N adalah prima, selesai
3. Bila N > 2 maka lakukan langkah-langkah berikut :
3.1 Untuk setiap X yang berada :
1 < X < N, uji apakah N habis dibagi X
3.2 Bila ya, maka N bukan prima, bila tidak maka N
adalah prima.
Untuk menyatakan bahwa N habis dibagi X dapat digunakan
statement sbb: N % X == 0, maka langkah 3 dapat ditafsirkan dengan statemen-statemen berikut :
for (X = 2; X<=N-1;X++)
If ((N % X) == 0) N bukan prima;
Fungsi selengkapnya :
#include <stdio.h>
int Prima(int N)
{
int X, flag;
switch(N){
case 1 : flag=0; break;
case 2 : flag=1; break;
default:
flag = 1;
for (X=2;X<=N-1;X++) {
if ((N%X) == 0){ flag=0; break; }
}
}
return(flag);
}
Teknik ini disebut guilty-until-proven-innocent yaitu uji dgn
seluruh bilangan X hingga terbukti N bukan prima
Contoh 2 : Menghitung faktorial : n!
#include <stdio.h>
int Fact(int N)
{
int X, Y;
if (N <= 1) return (1);
else {
Y = 1;
for(X=2; X<=N;X++) Y = X * Y;
}
return(Y);
}
Tugas / Latihan:
• Buat main program untuk memanggil / menggunakan
function diatas.