• Tidak ada hasil yang ditemukan

LAPORAN PRAKTIKUM III SEARCHING INDONESIA

N/A
N/A
Protected

Academic year: 2018

Membagikan "LAPORAN PRAKTIKUM III SEARCHING INDONESIA"

Copied!
24
0
0

Teks penuh

(1)

LAPORAN PRAKTIKUM IV

STACK

Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data Dibimbing oleh Ibu Triyanna Widiyaningtyas

Oleh:

Nama : Musfiratus Solehah

Nim : 150533602144

S1 PTI OFF-C 2015

UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK

JURUSAN TEKNIK ELEKTRO

(2)

STACK

Tujuan :

1. Memahami terminologi yang terkait dengan struktur data stack. 2. Memahami operasi-operasi yang ada dalam stack.

3. Dapat mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan stack, sekaligus menyelesaikannya.

Latihan Praktikum I Nama Program : Program Single Stack.

Compiler : MinGW Developer Studio

Script program : #include <iostream> #include <stdio.h> #include <conio.h> #include <windows.h> #define maxstack 4

using namespace std;

struct STACK //membuat jenis data abstrak 'STRACK' {

int top; float data [4]; };

float dta;

struct STACK stackbaru;

void inisialisasi() {

stackbaru.top = -1; }

bool isfull() //mengecek apakah stack kondisi penuh? {

if(stackbaru.top == maxstack-1) return true; else return false;

}

bool isempty() //mengecek apakah stack kondisi kosong? {

if(stackbaru.top == -1) return true; else return false;

}

void push(float dta) //mengisi stack(menyimpan data di stack) {

(3)

puts("Maaf, stack penuh");

stackbaru.data[stackbaru.top] = dta; }

}

void pop() //mengambil isi stack {

if(isempty() == true) {

cout<<"Data telah kosong!"; }

else {

cout<<"Data yang terambil adalah data ke : "<<stackbaru.data[stackbaru.top]<<endl;

stackbaru.top--; }

}

void print() //mencetak stack {

cout<<"Data pada stack : "; for(int i=0; i<=stackbaru.top; i++) {

cout<<stackbaru.data[i]<<" "; }

}

void clear() //mengosongkan stack {

stackbaru.top = -1; }

int main() {

inisialisasi(); char menu; char uulang; do

{

system("cls");

(4)

puts("1. Push stack"); puts("2. Pop stack"); puts("3. Cetak");

puts("4. Bersihkan stack"); puts("5. Exit");

cout<<"Menu pilihan Anda: "; cin>>menu;

if(menu == '2') {

pop(); getch(); uulang = 'y'; }

else if(menu == '1') {

cout<<"Data yang akan disimpan di stack : "; cin>>dta;

push(dta); uulang = 'y'; }

else if(menu == '3') {

print();

cout<<"Ulang? (y/t) "; cin>>uulang;

}

else if(menu == '4') {

clear();

cout<<"Ulang? (y/t) "; cin>>uulang;

}

else if(menu == '5') {

exit(0); }

}

(5)

Output Program :

Algoritma : 1. Start.

2. Membaca fungsi header. 3. Membaca fungsi stack.

4. Membaca fungsi-fungsi dan tipe data. 5. Menginputkan pilihan user 1-5.

6. Apabila memilih 1 ditampilkan push stack. 7. Apabila memilih 2 ditampillkan pop stack. 8. Apabila memilih 3 ditampillkan cetak.

(6)

Penjelasan Program :

Program diatas dibuat menggunakan single stuck. Didalam program tersebut terdapat beberapa menu dasar seperti : push, pop, cetak, membersihkan stack, dan exit. Program tersebut juga menggunakan boolen yang nilai dari prosesnya harus true karena apabila false maka program akan terjadi error. Apabila kita memilih 1 push stack, maka user akan diminta untuk menginputkan data stack yang akan disimpan. Ketika user memilih 2, maka program akan menampilkan inputan dari user pada bagian push stack tadi. Apabila user memilih 3, maka program akan mencetak/menampilkan data yang telah diinputkan, sedangkan apabila user memilih 4, maka data stuck sebelumnya akan terhapus seluruhnya. Kemudian pilihan 5 untuk menghentikan program.

Latihan Praktikum II Nama Program : Program Double Stack.

Compiler : MinGW Developer Studio

Script program : #include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAX 10 #define true 1 #define false 0 char stack[MAX]; int top1,top2;

void init(void);

void push(char data, int nomorstack); char pop(int nomorstack);

void clear(int nomorstack); bool full(void);

bool empty(int nomorstack); void baca();

main() {

char data;

int pilih,nomorstack; init();

do {

system("cls");

printf("Contoh program double stack"); printf("\n1. Push");

(7)

printf("\n3. Clear"); printf("\n4. Cetak Data"); printf("\n5. Selesai"); printf("\n\n Pilihan anda :"); scanf("%i",&pilih);

switch(pilih) {

case 1:

printf("\n\tPush");

printf("\nMasukkan datanya : "); scanf("%s",&data);

printf("\nMau dimasukkan ke stack berapa ? 1 atau 2 ? :"); scanf("%i",&nomorstack);

push(data,nomorstack); break;

case 2:

printf("Pop\n");

printf("Masukkan nomor stack : "); scanf("%i",&nomorstack);

data=pop(nomorstack);

printf("\nData yang dikeluarkan adalah %c",data); getch();

break; case 3:

printf("Clear\n");

printf("Nomor Stack yang dikosongkan : "); scanf("%i",&nomorstack);

clear(nomorstack); break;

case 4:

printf("Cetak Data :\n\n"); baca();

printf("Pilihan yang anda masukkan tidak ada"); break;

}

} while(pilih!=5); getch();

}

//init void init(){

(8)

//PUSH

void push(char data, int nomorstack) {

printf("\nNomor Stack Salah"); break;

} }

else

printf("\nStack Penuh"); getch();

}

//POP

char pop(int nomorstack){ char data;

if(empty(nomorstack)!=true)

return data; break; case 2:

data=stack[top2]; top2++;

return data; break; default:

printf("Nomor stack salah"); break;

} }

else

(9)

}

//cek full bool full(void) {

if((top1==0) && (top2==MAX+1)) return true;

else

return false; }

//cek empty

bool empty(int nomorstack) {

switch(nomorstack) {

case 1:

if(top1==0) return true; else

return false; break;

case 2:

if(top2==MAX+1) return true; else

return false; break;

default:

printf("Nomor stack salah"); break;

} }

//clearing

void clear(int nomorstack) {

switch(nomorstack) {

case 1:

top1=0; //salah awalnya top1=1 break;

case 2:

top2=MAX; break; default:

printf("Nomor stack salah"); break;

(10)

void baca() {

int i;

printf("Cetak isi stack pertama : \n"); for(i=0;i<=top1;i++) //awalnya salah i=1 {

printf(" %c \n",stack[i]); printf("\n");

}

printf("Cetak isi stack ke dua : \n"); for(i=MAX;i>=top2;i--)

{

printf(" %c \n",stack[i]); printf("\n");

} getch(); }

Output Program :

(11)

Algoritma : 1. Start.

2. Membaca tipe data. 3. Membaca fungsi-fungsi. 4. Tampilan menu.

5. Case 1 : proses menampilkan push. 6. Case 2 : proses menampilkan pop. 7. Case 3 : proses clear stack.

8. Case 4 : proses mencetak data. 9. Case 5 : proses keluar dari program.

10.Jika memilih selain itu maka akan ditampilkan “ pilihan yang anda masukkan tidak ada”.

11.Finish.

Penjelasan Program :

(12)

Latihan Praktikum III

Permasalahan : lengkapi sintaks program berikut ini agar bisa berjalan menjadi program pembalik kata dengan stack.

Bahasa Pemrogramam : C++

Compiler : MinGW Developer Studio

Script program : #include <stdio.h> #include <conio.h> #include <iostream> #include <string.h> #include <stdlib.h> #define MAX 75 #define true 1 #define false 0 char stack [MAX]; int top;

void init (void); int full (void); int empty (void); char pop (void); void clear (void); void push(char info); main ()

{

char pilih; char kal[75]; int k,p;

printf("-*- PROGRAM MEMBALIK KATA DENGAN STACK -*-\n\n"); init();

do {

fflush (stdin); system ("cls");

printf("=========================\n"); printf(" || MENU PILIHAN ||\n");

printf("=========================\n"); printf(" ||[1] Masukkan Kata ||\n");

printf(" ||[2] Balik Kata ||\n"); printf(" ||[3] Selesai ||\n");

printf("=========================\n");

(13)

p=strlen(kal); for(k=0;k<p; k++)

push(kal[k]);

printf("\n Kata yang masuk :"); for(k=0;k<top; k++)

printf("%c \n",stack[k]); getch ();

case '2' : if(empty()!=true) {

printf("\n Kata setelah dibalik:"); for(k=top-1;k>=0; k--)

printf("%c",stack[k]); }

else printf("\n Stack kosong!!\n"); getch ();

break; case '3' : break;

default : printf("Pilihan anda salah !!"); }

printf("\n"); }

while (pilih!='3'); }

void init(void) {

top=0; }

void push(char info) {

if (full()!=true) {

top++;

stack[top]=info; }

else

printf("\n Stack oberlow...\n"); }

char pop(void) {

char info;

if(empty()!=true) {

info=stack[top]; top--;

return info; }

else

printf("\n Stack underlow...\n"); }

(14)

{

if(top==MAX) return true; else

return false; }

int empty(void) {

if(top==0)

return true; else

return false; }

Output Program :

(15)

Algoritma : 1. Start.

2. Membaca tipe data. 3. Membaca fungsi-fungsi. 4. Tampilan menu utama. 5. Case 1  memasukkan kata.

6. Case 2  menampilkan hasil dari membalik kata. 7. Case 3  menghentikan program (selesai).

8. Jika memilih selain 1,2,3 maka akan ditampilkan “pilihan anda salah” 9. Finish.

Penjelasan Program :

Program diatas dibuat untuk membalik kata menggunakan stack. Pertama akan ditampilkan menu utama. Apabila user memilih menu 1 maka user diminta untuk menginputkan kata yang ingin dibalik. Ketika user memilih menu 2 maka program akan menampilkan hasil membalik kata dari kata yang telah user input sebelumnya. Apabila user memilih menu 3makan program akan berhenti.

Tugas Rumah Permasalah :

Bahasa Pemrogramam : C++

Compiler : MinGW Developer Studio

Script program : #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <iostream.h> #define MAX 10 #define true 1 #define false 0 struct dtm{

char nim[13]; char nama[40]; int nilai; }mhs[MAX];

(16)

void init();

void SortByNim(); void SortByNama(); void SortByNilai();

void push(struct dtm mhsin); bool check_nim(char nim[13]); void clear();

bool full(int pus); bool empty(int popp); void pop();

void baca();

int main(){ int pilih;

struct dtm mhsin; bool flag=0;

init(); do{

system("cls");

printf("\n\n Pilihan Operasi : "); printf("\n\n\t 1. Push");

printf("\n\n\t 2. Pop"); printf("\n\n\t 3. MultiPush"); printf("\n\n\t 4. MultiPop"); printf("\n\n\t 5. Clear");

printf("\n\n\t 6. Pengurutan Data"); printf("\n\n\t 7. Cetak Data"); printf("\n\n\t 8. Selesai"); printf("\n\n Pilihan anda : "); scanf("%i",&pilih);

switch(pilih){ case 1:

printf("\n\t\tPush");

if(full(1)){

printf("\n\n Penyimpanan Tidak Mencukupi !!!"); break;

}

fflush(stdin);

printf("\n\n Data Mahasiswa yang Ditambahkan : ");

do{

printf("\n\n Nim : "); gets(mhsin.nim);

if(check_nim(mhsin.nim)){

(17)

flag=1; }

} while(flag);

printf("\n\n Nama : "); gets(mhsin.nama); printf("\n\n Nilai : "); scanf("%d",&mhsin.nilai);

push(mhsin);

printf("\n\n\t Data berhasil ditambahkan\n"); system("pause");

break; case 2:

printf("\n\t\tPop");

if(empty(1)){

printf("\n\n Penyimpanan Tidak Mencukupi !!!"); system("pause");

break; }

printf("\n\n Data Mahasiswa yang Dihapus : "); pop();

system("pause"); break;

case 3:

printf("\n\t\tMultiPush"); int puss;

printf("\n\n Banyak Data yang ditambahkan : "); scanf("%d",&puss);

if(full(puss)){

printf("\n\n Penyimpanan Tidak Mencukupi !!!"); break;

}

for(int a=0;a<puss;a++){ fflush(stdin);

printf("\n\n Data Mahasiswa ke - %d yang Ditambahkan : ",a+1);

do{

printf("\n\n Nim : "); gets(mhsin.nim);

if(check_nim(mhsin.nim)){

printf("\n\n\t NIM sudah terdaftar\n\n"); flag=1;

(18)

} while(flag);

printf("\n\n Nama : "); gets(mhsin.nama); printf("\n\n Nilai : "); scanf("%d",&mhsin.nilai);

push(mhsin);

printf("\n\n\t Data berhasil ditambahkan\n"); system("pause");

} break; case 4:

int popp;

printf("\n\t\tMultiPop");

printf("\n\n Banyak Data yang dihapus : "); scanf("%d",&popp);

if(empty(popp)){

printf("\n\n Penyimpanan Tidak Mencukupi !!!"); break;

}

for(int a=0;a<popp;a++){

printf("\n\n Data Mahasiswa ke - %d yang Dihapus : ",a+1);

int urut;

printf("\n\t\tPengurutan data");

printf("\n\n 1. Urut Berdasarkan NIM"); printf("\n\n 2. Urut Berdasarkan Nama"); printf("\n\n 3. Urut Berdasarkan Nilai"); printf("\n\n Pilihan anda : ");

(19)

}

printf("\n\n Data Berhasil Diurutkan\n\n "); system("pause");

printf("\n\n\t\t finish\n\n\n"); system("pause");

break; default:

printf("\n\n\n Pilihan yang anda masukkan tidak ada\n\n "); system("pause");

break; }

} while(pilih!=8); return 0;

}

void push(struct dtm mhsin){ mhs[top]=mhsin; top++;

}

void init(){ top=0; }

void SortByNim(){ int i,j,small; struct dtm temp; for(i=0;i<top;i++){ mhs[i] = mhs[small]; mhs[small] = temp; }

}

void SortByNama(){ int i,j,small; struct dtm temp; for(i=0;i<top;i++){

small=i;

for(j=i+1;j<top;j++)

(20)

temp = mhs[i]; mhs[i] = mhs[small]; mhs[small] = temp; }

}

void SortByNilai(){ int i,j,small; struct dtm temp; for(i=0;i<top;i++){ mhs[i] = mhs[small]; mhs[small] = temp; }

}

bool full(int pus){

if(top>=MAX-pus+1) return 1; else

return 0; }

bool empty(int popp){ if(top<popp)

return 1; else

return 0; }

bool check_nim(char nim[13]){ if(top==0)

return 0; for(int a=0;a<top;a++)

if(strcmp(mhs[a].nim,nim)==0){ return 1;

} return 0; }

void clear(){ top=0;

printf("\n\t\tClear");

printf("\n\n\t Data berhasil dibersihkan\n"); system("pause");

}

void pop(){ top--;

(21)

printf("\n\n Nilai : %d\n\n",mhs[top].nilai); }

void baca(){

printf("\n\t\tData Mahasiswa"); for(int a=0;a<top; a++){

printf("\n\n NIM : %s",mhs[a].nim); printf("\n\n Nama : %s",mhs[a].nama); printf("\n\n Nilai : %d\n\n",mhs[a].nilai); }

}

(22)
(23)

Algoritma : 1. Start.

2. Membaca struct.

3. Membaca fungsi-fungsi. 4. Deklarasi variable. 5. Tampilan menu utama.

6. Case 1  proses menampilkan push. 7. Case 2  proses menampilkan pop. 8. Case 3  proses menampilkan multipush. 9. Case 4  proses mnampilkan multipop. 10. Case 5  proses membersihkan stack. 11. Case 6  proses pengurutan data. 12. Case 7  proses mencetak data. 13. Case 8  keluar dari program. 14. Finish.

Penjelasan Program :

(24)

KESIMPULAN

1. Stack merupakan sebuah kumpula data yang diletakkan di atas data lainnya, seperti sebuah tumpukan.

2. Stack merupakan salah satu struktur data yang menerapkan prinsip LIFO (Last In First Out).

3. Operasi dasar pada stack terdiri atas : Create, IsEmpty, IsFull, Push, Pop, Clear, dan Retrieve.

4. Create merupakan operator yang berfungsi untuk membuat sebuah stack kosong.

5. IsEmpty merupakan operator yang berfungsi untuk menentukan apakah suatu stack merupkan stack kosong.

6. IsFull merupakan operator yang digunakan untuk mmeriksa apakah stack yang ada sudah penuh.

7. Push merupakan operator yang berfungsi untuk menambahkan satu elemen ke dalam stack dan tidak dapat dilakukan jika stack dalam keaadaan penuh.

8. Pop merupakan operator yang befungsi untuk mengeluarkan satu lemen teratas dari dalam stack dengan syarat stack tidak dalam kondisi kosong.

9. Clear, fungsi yang digunakan untuk mengosongkan stack dengan cara mengeset Top. 10. Retrieve, fungsi yang digunakan untuk melihat nilai yang berada pada posisi tumpukan

teratas.

11. Selain menggunakan indeks, untuk menunjukkan sebuah Top atau posisi teratas dari stack, dapat juga digunakan pointer.

12. Double Stack atau Stack Ganda adalah dua stack yang berada dalam satu array.

13. Operasi dasar pada Double Stack adalah sebagai berikut : Inisialisasi, IsEmpty, IsFull, Push (Stack 1 dan Stack 2), Pop (Stack 1 dan Stack 2).

DAFTAR RUJUKAN

1. Tim Asisten Dosen. 2016. Modul 1 array, pointer, dan struct. Algoritma dan struktur komputer. Malang: Universitas Negeri Malang.

2. Tim Asisten Dosen. 2016. Modul 2 sorting. Algoritma dan struktur komputer. Malang: Universitas Negeri Malang.

3. Tim Asisten Dosen. 2016. Modul 3 searching. Algoritma dan struktur komputer. Malang: Universitas Negeri Malang.

Referensi

Dokumen terkait

729/K/Pdt.Sus/2008 melihat Pasal 70 UU Arbitrase bersifat limitatif, Berbeda dengan Putusan MARI No.03/Arb.BTU 2005 yang menafsirkan Pasal 70 bersifat enunciatif.Kedua Hakim Agung

Meningkatkan kualitas hidup pasien kanker selama terapi akan meningkatkan kepatuhan mereka akan berbagai keluhan yang dialami ini bertujuan untuk mengidentifikasi

1. Hal ini terlihat dari hasil wawancara dengan Kepala sekolah, informan secara jelas mengungkapkan sebagai berikut. Setiap kegiatan Kepala Sekolah di SD Negeri 28 Rambatan,

Dengan mencermati apa yang telah diungkapkan tersebut, maka penulis mencoba menuangkan gagasan tersebut dengan merancang dan mengimplementasikan sebuah aplikasi yang

Dengan meningkatkan keamanan data menggunakan kombinasi algoritma, dapat menjaga keamanan data lebih terjamin dari serangan-serangan yang dapat membahayakan isi dari

Penelitian ini dilakukakan untuk mengetahui unjuk kerja dari motor diesel Multi Swirl Combustion System (MSCS) Piston Chamber saat menggunakan bahan bakar solar dari daur ulang

Berdasarkan hasil penelitian guru SY dan guru HR selalu mengkondisikan siswa sebelum memulai pelajaran dengan berdoa, presensi, hafalan surat pendek, bernyanyi, nasihat dan