310 likes | 576 Vues
STRUKTUR DATA DIMENSIONAL ARRAY. SULIDAR FITRI, M.Sc. C++. ARRAY 1 DIMENSI. #include<iostream.h> #include<conio.h>
E N D
STRUKTUR DATADIMENSIONAL ARRAY SULIDAR FITRI, M.Sc C++
ARRAY 1 DIMENSI #include<iostream.h>#include<conio.h> main() {int a[5]={10,15,20,25,30};int b[5]={10,20};int c[5]={15,0,30};int j;// Menampilkan nilai dari element arraycout<<endl;for(j=0;j<5;j++){cout<<"A ["<<j<<"] = "<<a[j]<<" , B ["<<j<<"] = "<<b[j]<<" , C ["<<j<<"] = "<<c[j]<<endl;}getch();}
Pengertian Array 2 Dimensi • Array 2 dimensi tersusun dalam bentuk baris dan kolom, dimana indeks pertama menunjukkan baris dan indeks kedua menunjukkan kolom. • Bentuk umum deklarasi array 2 dimensi Tipe_data nama_array[jmlh_baris][jmlh_kolom] Int nilai[4][3]
Array 2 dimensi • #include<iostream.h> • #include<conio.h> • main(){ • int matrix[3][3]; • int i,j; • for(i=0;i<=2;i++){ • for(j=0;j<=2;j++){ • cout<<"Masukkan angka pada baris ke "<<i<<" • kolom ke "<<j<<" : "; • cin>>matrix[i][j]; • } cout<<endl;}
for(i=0;i<=2;i++){ • for(j=0;j<=2;j++) • { • cout<<matrix[i][j]<<" "; • } • cout<<endl; • } • getch(); • }
CALCULATOR (menggunakan stack) • Suatu perhitungan aritmatika biasanya berhubungan dengan operand dan operator. • Operand merupakan suatu karakter atau elemen yang nilainya dioperasikan dengan bantuan suatu operator untuik menghasilkan suatu solusi. • Misalkan jika diberikan suatu ekspresi aritmatika 2 * 3, maka elemen ‘dua’ dan elemen ‘tiga’ merupakan operand dari ekspresi tersebut dan elemen ‘*’ merupakan operator perkalian atas dua operand yang menghasilkan suatu solusi.
Notasi Infix, Prefix, Postfix • Infix, Prefix ataupun Postfix adalah bentuk penulisan operasi matematika, bedanya : • Infix - Operator diletakkan di antara Operand • Prefix - Operator diletakkan di depan Operand • Postfix / Sufix - Operator diletakkan di belakang Operand
CONTOH 1) Notasi prefix, jika operator ditempatkan sebelum dua operand Contoh: * + A B C 2) Notasi infix, jika operator ditempatkan di antara dua operand Contoh: (A + B) * C 3) Notasi postfix, jika operator ditempatkan setelah dua operand Contoh: A B + C *
Notasi Infix, Prefix, Postfix • Dalam penggunaannya, dalam kehidupan sehari-hari notasi infix merupakan notasi aritmatika yang paling banyak digunakan untuk mengekspresikan suatu perhitungan artimatik dibanding dengan dua notasi yang lain, • Akan tetapi notasi Postfix merupakan notasi yang digunakan oleh mesin kompilasi pada komputer dengan maksud untuk mempermudah proses pengkodean, sehingga mesin kompilasi membutuhkan stack untuk proses translasi ekspresi tersebut.
Karena infix memiliki beberapa kekurangan, yaitu : • 1. Urutan pengerjaan tidak berdasarkan letak kiri atau kanannya, tetapi berdasarkan precedence-nya • Contoh : 3 + 4 x 2 • 3 + 4 x 2 , maka urutan pengerjaan adalah 4 x 2 dahulu. • 3 + 8 , baru hasilnya ditambah 3 • 11 • Urutan precedence (dari prioritas tertinggi) adalah sebagai berikut : • 1. - Pemangkatan • 2. - Perkalian dan Pembagian • 3. - Penjumlahan dan Pengurangan. • - Kecuali kalau ada tanda kurung.
2. Menggunakan tanda kurung. Infix bisa menggunakan tanda kurung. Tetapi tanda kurung dapat mengacak urutan precedence. • Contoh : Tanpa penggunaan tanda kurung : • 9 – 5 – 3 • 9 – 5 – 3 , maka urutan pengerjaan adalah 9 - 5 dahulu. • 4 – 3 • 1 • Bandingkan dengan penggunaan tanda kurung berikut : • 9 – ( 5 – 3 ) • 9 – ( 5 – 3 ) , maka urutan pengerjaan adalah 5 – 3 dahulu. • 9 – 2 • 7
3. Jika suatu program akan mengevaluasi (mencari hasil) suatu infix, maka komputer perlu men-scan berulang-ulang mencari urutan pengerjaannya dahulu. • Contoh : 7 + 4 x 2 – 6 / 3 • Jika kita diminta untuk menghitung soal seperti itu, maka kita tahu bahwa yang pertama kali harus kita kerjakan adalah 4 x 2. Lalu 6 / 3 dsb, seperti langkah-langkah berikut : • 7 + 4 x 2 – 6 / 3 • 7 + 8 – 6 / 3 • 7 + 8 – 2 • 15 – 2 • 13
Komputer tidak bisa membaca keseluruhan soal sekaligus. Komputer hanya bisa men-scan soal satu per satu operand atau operator. Sehingga untuk mengetahui mana yang harus dikerjakan duluan, komputer harus men-scan keseluruhan soalnya dulu. Jadi langkah-langkah si komputer dalam mengerjakan soal infix seperti berikut: • 1. Cari precedence tertinggi dengan men-scan kiri ke kanan keseluruhan soal. • 2. Hitung nilai operator dengan precedence tertinggi tersebut. • 3. Ulangi lagi dari langkah 1, sampai semua operator selesai dikerjakan. • Jika komputer tidak men-scan keseluruhan soal terlebih dahulu, maka akan terjadi kesalahan pada hasilnya.
Studi Kasus • Pembuatan Kalkulator SCIENTIFIC • Misalkan operasi: 3 + 2 * 5 • Operasi di atas disebut notasi infiks, notasi infiks tersebut harus diubah lebih dahulu menjadi notas postfix • 3 + 2 * 5 notasi postfiksnya adalah 3 2 5 * +
3 + 2 * 5 stack posftix Studi Kasus Stack (2) – Infix to Postfix • Baca soal dari depan ke belakang • Jika berupa operand, maka masukkan ke posftix • Jika berupa operator, maka: • Jika stack masih kosong, push ke stack • Jika derajat operator soal > derajat operator top of stack • Push operator soal ke stack • Selama derajat operator soal <= derajat operator top of stack • Pop top of stack dan masukkan ke dalam posfix • Setelah semua dilakukan, push operator soal ke stack • Jika sudah semua soal dibaca, pop semua isi stack dan push ke postfix sesuai dengan urutannya
Studi Kasus Stack (yg lain) #1 • a+b*c-d • Stack (kosong) dan Postfik (kosong) • Scan a • Postfik: a • Scan + • Stack: + • Scan b • Postfik: ab • Scan *, karena ToS (+) < *, maka add ke Stack • Stack: +*
Studi Kasus Stack (yg lain) #2 • Scan c • Postfik: abc • Scan –, karena - < *, maka pop Stack, dan add ke Postfik • Stack: + • Postfik: abc* • Karena + >= -, maka pop Stack, dan add ke Postfik, karena Stack kosong, maka push – ke stack • Stack: - • Postfik: abc*+ • Scan d • Postfik: abc*+d • Karena sudah habis, push ToS stack ke Posfix • Postfix: abc*+d-
Contoh lain convert Infix, Prefix, Posfix #1 Proses Konversi Infix ke Prefix Misalkan diberikan ekspresi: (A + B) * (C – D) (A + B) * (C – D) = ((A + B) * (C – D)) = ( + (A B) * - (C D)) = * + A B – C D Proses Konversi Infix ke Postfix Misalkan diberikan ekspresi: (A + B) * (C – D) (A + B) * (C – D) = ((A + B) * (C – D)) = ((A B) + * (C D) - ) = A B + C D - *
Contoh lain convert Infix, Prefix, Posfix #2 Proses Konversi Prefix ke Infix Misalkan diberikan ekspresi: * + A B – C D * + A B – C D = (* (+ A B) (– C D) ) = (A + B) * (C – D) Proses Konversi Postfix ke Infix Misalkan diberikan ekspresi: A B + C D - * A B + C D - * = ((A B +) (C D -) *) = (A + B) * (C – D)
Postfix Evaluator / Penyelesaian • Scan Postfix string dari kiri kekanan. • Siapkan sebuah stack kosong. • Jika soal adalah operand, tambahkan ke stack. Jika operator, maka pasti akan ada minimal 2 operand pada stack • Pop dua kali stack, pop pertama disimpan dalam y, dan pop kedua ke dalam x. Lalu evaluasi x <operator> y. Simpan hasilnya dan push ke dalam stack lagi. • Ulangi hingga seluruh soal discan. • Jika sudah semua, elemen terakhir pada stack adalah hasilnya. • Jika lebih dari satu elemen, berarti error!
PROGRAM KALKULATOR SEDERHANA • /* * program calc.c * * • * Bayu Setiaji 2010 * */ • #include <stdio.h> • #include <stdlib.h> • #define MAX 5 • int stack[MAX]; // stack int top; // posisi puncak stack
void push(int i); • int pop(void); • int main(void) { • int a, b; • char s[80]; • top = 0; • system("cls"); • printf("Kalkulator Sederhana\n"); printf("Tekan 'q' untuk keluar\n\n"); • do { • printf(": "); • gets(s);
case '*': b = pop(); a = pop(); printf("= %d\n", a * b); push(b * a); break; case '/': b = pop(); a = pop(); if(b == 0) { printf("! pembagian dengan nol\n"); break; } printf("= %d\n", a / b); push(a / b); break; case '.': a = stack[top - 1]; printf("= nilai akhir [ %d ]\n", a); break; • switch(*s) { • case '+': b = pop(); • a = pop(); • printf("= %d\n", a + b); • push(a + b); • break; • case '-': b = pop(); • a = pop(); • printf("= %d\n", a - b); • push(a - b); • break;
int pop(void) { top--; if(top < 0) { printf("! stack kosong\n"); return 0; } return stack[top]; } • default: • push(atoi(s)); • } } • while(*s != 'q'); • return 0; } • void push(int i) { • if(top >= MAX) { • printf("! stack penuh\n"); return; } • stack[top] = i; top++; }
Any Queries ? • Source : 1. Stack / Struktur Data / Muhammad Riza Hilmi, ST • 2. http://undetected-x-file.blogspot.com/