STRUKTUR DATA DIMENSIONAL ARRAY

Post on 31-Dec-2015

81 views 0 download

description

STRUKTUR DATA DIMENSIONAL ARRAY. SULIDAR FITRI, M.Sc. C++. ARRAY 1 DIMENSI. #include #include - PowerPoint PPT Presentation

Transcript of STRUKTUR DATA DIMENSIONAL ARRAY

STRUKTUR DATA

DIMENSIONAL ARRAY

SULIDAR FITRI, M.Sc

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();}

OUTPUT:

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();• }

OUT PUT

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.

• 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

Notasi Infix, Prefix, Postfix

CONTOH

1) Notasi prefix, jika operator ditempatkan sebelum dua operand Contoh: * + A B C2) Notasi infix, jika operator ditempatkan di antara dua operand Contoh: (A + B) * C3) 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.

Mengapa harus menggunakan Prefix dan Postfix?

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 * +

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

3 + 2 * 5stack

posftix

Studi Kasus Stack (3)

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 PrefixMisalkan 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 PostfixMisalkan 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 #2Contoh lain convert Infix, Prefix, Posfix #2

Proses Konversi Prefix ke InfixMisalkan diberikan ekspresi: * + A B – C D* + A B – C D = (* (+ A B) (– C D) )

= (A + B) * (C – D) Proses Konversi Postfix ke InfixMisalkan 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!

Contoh : 325*+

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);

• 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;

• 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;

• 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++; }

• int pop(void) { • top--; • if(top < 0) { • printf("! stack kosong\n"); • return 0; • }

• return stack[top]; • }

• Source : 1. Stack / Struktur Data / Muhammad Riza Hilmi, ST

• 2. http://undetected-x-file.blogspot.com/