Algoritma dan Pemrograman 2C Scope Variabel dan Memori Aurelio Rahmadian
Variabel Variabel digunakan dalam program untuk menyimpan suatu nilai, dan nilai yang ada padanya dapat diubah selama eksekusi program berlangsung.
Variabel Umumnya dideklarasikan dengan format: type var_name. type menandakan jenis variabel.
Ciri Variabel Made up of letters, digits and underscore. Must start with a non-digit. Case sensitive.
Scope Variabel Variabel Otomatis Variabel Eksternal Variabel Statis Variabel Dinamis
Variabel Otomatis Variabel yg didefinisikan dalam suatu fungsi berlaku sebagai variabel lokal bagi fungsi dengan sifat: Variabel hanya akan diciptakan pada saat fungsi dipanggil. Saat fungsi berakhir, variabel otomatis akan hilang. Tidak perlu ada inisialisasi pada variabel. Hanya dapat diakses dalam fungsi saja.
#include <iostream. h> #include <math #include <iostream.h> #include <math.h> int jml2bil( int x1, int x2 ) // fungsi standard { // var x1 dan x2 adlh var otomatis int jml; jml = x1 + x2 ; return(jml); } int main(void) { int y,a,b; cout << "Masukkan 2 bilangan \n"; cin >> a >> b; y = jml2bil(a,b); cout << "a is " << a << endl; cout << "b is " << b << endl; cout << "y is " << y << endl; return(0);
Variabel Eksternal Adalah suatu variabel yg didefinisikan di luar fungsi, yg dikenal sebagai variabel global. Catatan: Usahakan menggunakan seminim mungkin suatu variabel global. Variabel ini mudah sekali berubah oleh pernyataan penugasaan yang letaknya bisa dimana saja. Ini bisa menimbulkan efek samping yang sulit untuk melacaknya, terutama untuk program yang besar. Variabel global mempunyai durasi selama program dieksekusi atau, memori yg digunakan untuk variabel ini dipertahankan selama program dieksekusi.
#include <iostream. h> #include <math #include <iostream.h> #include <math.h> Int A=5; // var eksternal int jml2bil( int x1, int x2 ) // fungsi standard { int jml; jml = x1 + x2 + A; return(jml); } int main(void) int y,a,b; cout << "Masukkan 2 bilangan \n"; cin >> a >> b; y = jml2bil(a,b); cout << "a is " << a << endl; cout << "b is " << b << endl; cout << "y is " << y << endl; return(0);
Variabel Statis Variabel ini dapat berupa variabel lokal atau global dengan sifat: Jika berupa variabel lokal maka variabel tetap hanya dapat diakses pada fungsi yg mendefinisikannya. Variabel tidak hilang saat berakhir. Inisialisasi hanya dilakukan sekali. Jika berupa var global dapat diakses dari semua file yg didefinisikan (hati hati dalam menggunakannya). Caranya dengan menambah kata static type-data var-name.
#include <iostream #include <iostream.h> int fncstatis(int); void main( ) { int in,out; in = 1 ; while(in!=0) cout << "Enter input value:"; cin>>in; out=fncstatis(in); cout<<"Result:"<< out; } cout<<" End of Program"<< out; int fncstatis(int x) static int a=0; static int b=0; a++; b=b+x; return(b/a);
Memori Memori dapat menyimpan program dan data. Setiap data merupakan kumpulan dari beberapa bit. Umumnya memori diatur dalam kumpulan 8 bit. Setiap byte memiliki address.
Penggambaran Memori MEMORY 1 2 3 4 5 81345 81346 81347 Address CPU
Program Sederhana # Instruction 1 Set memory[801] to hold 00000001 3 If memory[802] = 10 jump to instruction #8 4 increment memory[802] 5 set memory[803] to 2 times memory[801] 6 put memory[803] in to memory[801] 7 jump to instruction #3 8 print memory[801]
Penggambaran Program MEMORY 1 2 3 4 5 801 802 803 Instruction #1 Address 1 2 3 4 5 801 802 803 Instruction #1 Instruction #2 CPU Instruction #3 Instruction #4 Instruction #5 Instruction #6
Human vs Machine Programs The computer can only understand the bits (the encoded program) Humans don't like to deal with bits, so they developed english-like abbreviations for programs. Machine Language Assembly Language
Assembly & Machine Language Assembly Language Machine Language ST 1,[801] ST 0,[802] TOP: BEQ [802],10,BOT INCR [802] MUL [801],2,[803] ST [803],[801] JMP TOP BOT: LD A,[801] CALL PRINT 00100101 11010011 00100100 11010100 10001010 01001001 11110000 01000100 01010100 01001000 10100111 10100011 11100101 10101011 00000010 00101001 11010101 11010100 10101000 10010001 01000100
} High Level Language x=1; while (i!=10){ i++; x=x*2; } printf("%d",x); set memory[801] to hold 00000001 set memory[802] to hold 00000000 if memory[802] = 10 jump to instruction #8 increment memory[802] set memory[803] to 2 times memory[801] put memory[803] in to memory[801] jump to instruction #3 print memory[801] }
Tata Letak Memori STACK HEAP DATA KODE