laporan praktikum asd 4 stack

Upload: loarki-as-sunny

Post on 07-Jul-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    1/26

    LAPORAN PRAKTIKUM IV 

    STACK  

    Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data

    Dibimbing oleh Ibu Triyanna Widyaningtyas

    Oleh:MUHAMMAD BAKHRUR RIZKI

    150533604505

    S1 PTI-C /2015

    UNIVERSITAS NEGERI MALANG

    FAKULTAS TEKNIK

    JURUSAN TEKNIK ELEKTRO

    PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA

    Maret 2016

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    2/26

    A.  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

    Pemrograman C++

    Nama Program : Single Stack  

    Bahasa Pemrogramam : C++ 

    Compiler : MinGW Developer Studio

    Script program :

    #include

    #include

    #include

    #include

    #define maxstack 4 //maxstack terdefinisi 5

    using namespace std; //untuk pembacaan karakter spasi

    struct STACK //membuat jenis data abstrak 'STRACK'

    {int top;

    float data [4];

    };

    float dta;

    struct STACK stackbaru;

    void inisialisasi() //menginisialisasi top = -1

    {

    stackbaru.top = -1;

    }

     bool isfull() //menanyakan : penuhkah?

    {

    if(stackbaru.top == maxstack)

    return true;

    else

    return false;

    }

     bool isempty() //menanyakan : kosongkah?

    {

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

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    3/26

      else return false;

    }

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

    {

    if(isfull() == true) //jika stack belum penuh

    {

     puts("Maaf, stack penuh");

    getch();

    }

    else

    {

    stackbaru.top++;

    stackbaru.data[stackbaru.top] = dta;

    }

    }

    void pop() //mengambil isi stack

    {

    if(isempty() == true)

    {

    cout

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    4/26

      char menu;

    char uulang;

    do

    {

    system("cls");

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

     printf("\t| Stack |\n");

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

     printf("Menu stack:\n\n");

     puts("1. Push stack");

     puts("2. Pop stack");

     puts("3. Cetak");

     puts("4. Bersihkan stack");

     puts("5. Exit");

    coutmenu;

    if(menu == '2')

    {

     pop();

    uulang = 'y';

    }

    else if(menu == '1')

    {

    coutdta; push(dta);

    uulang = 'y';

    }

    else if(menu == '3')

    {

     print();

    coutuulang;

    }

    else if(menu == '4')

    {

    clear();

    coutuulang;

    }

    else if(menu == '5')

    {

    exit(0);

    }

    }

    while(uulang == 'Y' || uulang == 'y');

    }

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    5/26

    Output Program :

    Algoritma :

    1.  Mulai 

    2. 

    Deklarasi Stack  

    3.  Deklarasi Fungsi dta 

    4.  Deklarasi Fungsi inisialisasi 

    5.  Deklarasi Fungsi isfull 

    6.  Deklarasi Fungsi isempty 

    7.  Deklarasi Fungsi push 

    8.  Deklarasi Fungsi pop 

    9. 

    Deklarasi Fungsi print 

    10.  Deklarasi Fungsi clear  

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    6/26

    11.  Masuk menu utama

    12.  Masuk menu Do While

    Masuk menu kondisi

    13.  selesai

    Penjelasan Program :

    Program di atas digunakan untuk membuat suatu program Single Stack dimana pada

    dimana pada program tersebut terdapat operasi penambahan data (push), pengeluaran data

    (pop), pencetakan isi dari stack, pembersihan isi stack dan keluar.

    Pada program ini menggunakan program boolean yang diharuskan pada program tersebut

    harus benar apabila salah maka pada progam strack tersebut erorr atau berjalan tetapi tidak

    sesuai dengan kriteria program yang di inginkan. Pada push pop berguna untuk menyimpan

    data yang ingin di masukkan. Seperti contoh kita memasukkan angka 6 maka data tersebut

    menyimpan angka 6 tersebut. Pop stack yaitu berguna untuk menampilkan data yang

    dimasukkan pada data yang telah dideklarasikan sebelumnya, maka pada pop stack akan

    menampilkan angka 6 tersebut. Cetak berguna untuk mencetak dari hasil masukkan pada

     program pertama. Bersikan stack adalah untuk menghilangkan data yang dimasukkan

    sebelumnya dengan maksud menghapusnya. Dan menu terakhir yaitu exit yaitu digunakan

    untuk keluar dari proram.

    Latihan Praktikum II

    Pemrograman C++

    Nama Program : Double Stack  

    Bahasa Pemrogramam : C++ 

    Compiler : MinGW Developer Studio

    Script program :

    #include

    #include

    #include

    #define max 10

    #define true 1

    #define fale 0

    char stack[max];

    int top1,top2;

    void init(void);

    void push(char data, int nomorstack);

    char pop(int nomorstack);

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

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    7/26

    int empty(int nomorstack);

    void baca();

    main()

    {

    char data;

    int pilih, nomorstack;

    init();

    do

    {

    system("cls");

     printf("Contoh program double stack");

     printf("\n1. push");

     printf("\n2. pop");

     printf("\n3. clear");

     printf("\n4. cetak data"); printf("\n5. selesai");

     printf("\npilihan anda : ");scanf("%i",&pilih);

    switch(pilih)

    {

    case 1:

     printf("push\n");

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

     printf("mau 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 %s",&data);

     break;

    case 3:

     printf("clear\n");

     printf("nomor stack yang akan dikosongkan : ");

    scanf("%i",&nomorstack);

    clear(nomorstack);

     break;

    case 4:

     printf("cetak data : \n\n");

     baca();

     break;

    case 5:

     printf("exit");

     break;

    default:

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    8/26

      printf("pilihan yang anda masukkan tidak ada");

     break;

    }

    }while(pilih!=5);

    getch();

    }

    //init

    void init()

    {

    top1=0;

    top2=max+1;

    }

    //push

    void push(char data, int nomorstack)

    {

    if(full()!=true){

    switch(nomorstack)

    {

    case 1:

    top1++;

    stack[top1]=data;

     break;

    case 2:

    top2--;

    stack[top2]=data; break;

    default:

     printf("\nnomor stack salah");

     break;

    }

    }

    else

     printf("\nstack penuh");

    getch();

    }

    char pop(int nomorstack)

    {

    char data;

    if(empty(nomorstack)!=true)

    {

    switch(nomorstack)

    {

    case 1:

    data=stack[top1];

    top1--;

    return data;

     break;

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    9/26

      case 2:

    data=stack[top2];

    top2++;

    return data;

     break;

    default :

     printf("\nnomor stack salah");

     break;

    }

    }

    else

     printf("\stack masih kosong");

    getch();

    return 0;

    }

    //cek fullint full(void)

    {

    if(top1+1>=top2)

    {

    return true;

    }

    else

    return false;

    }

    //cek emptyint 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\n");

     break;

    }

    }

    //clearning

    void clear(int nomorstack)

    {

    switch(nomorstack)

    {

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    10/26

      case 1:

    top1=0;

     break;

    case 2:

    top2=max+1;

     break;

    default:

     printf("nomor stack salah");

     break;

    }

    }

    //baca

    void baca()

    {

    int i;

     printf("cetak isi stack pertama : \n");for(i=0;i=top2;i--)

    {

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

     printf("\n");}

    getch();

    }

    Output Program :

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    11/26

     

    Algoritma :

    1.  Mulai 

    2.  Deklarasi Stack dengan jumlah data max 

    3. 

    Deklarasi variabel global 

    4. 

    Deklarasi fungsi init 

    5.  Deklarasi fungsi push 

    6. 

    Deklarasi fungsi pop 

    7.  Deklarasi fungsi full 

    8.  Deklarasi fungsi empty 

    9. 

    Deklarasi fungsi baca 

    10.  Deklarasi fungsi clear  

    11. 

    Masuk menu utama

    12.  Deklarasi variabel

    13.  Pemanggilan fungsi init

    14.  Masuk operasi do while

    15.  Masuk operasi switch case

      Jika pilihan 1 maka jalankan fungsi Push

      Jika pilihan 2 maka jalankan fungsi Pop

     

    Jika pilihan 3 maka jalankan fungsi Clear

      Jika pilihan 4 maka jalankan fungsi Cetak data

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    12/26

      Jika pilihan 5 maka jalankan fungsi Exit

    16.  Selesai

    Penjelasan Program :

    Program di atas digunakan untuk membuat suatu program Double Stack dimana pada

    dimana pada program tersebut terdapat operasi penambahan data (push), pengeluaran data

    (pop), pembersihan isi stack, pencetakan isi dari stack, dan keluar.

    Pada awal program kita menggunakan 3 file header yang meliputi stdio.h, conio.h dan

    stdlib.h. dan program ini menjelaskan penggunaan dari data stack. Menu pertama yaitu push

     pada double stack, kita memasukkan data dahulu kemudian kita disajikan pilihan baru yaitu

    ditelakkan pada stack 1 atau stack 2. Kita harus memasukkan data tersebut. Pada menu yang

    kedua yaitu pop itu berguna untuk menampilkan data sesudah memasukkan data masukkan

    seperti contoh kita memasukkan angka 1 maka data keluaran yaitu angka 4. Pada menu ke 3

    yaitu Clear fungsinya hanya membersikan dari data sebelumnya (bekas data), yang ke 4 cetak

    data mencetak isi stack yang dimasukkan pertama dan kedua. Dan terakhir yaitu selesai,

    fungsinya yaitu hampir sama dengan exit. Digunakan untuk mengakhiri program.

    Latihan Praktikum III

    Pemrograman C++

    Nama Program : Sequential Search Bahasa Pemrogramam : C++ 

    Compiler : MinGW Developer Studio

    Script program :

    #include

    #include

    #include

    #include

    #include

    #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(){

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    13/26

      char pilih;

    char kal[75];

    int k,p;

     printf("\n ~*~ PROGRAM PEMBALIK 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");

     printf(" Pilihan : ");scanf("%c",&pilih);

    system("cls");

    switch(pilih){

    case '1':

     printf("\n Masukkan kata : ");

    scanf("%s",&kal);

     p=strlen(kal);

    for(k=0;k

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    14/26

     

    }while(pilih!=3);

    }

    void init(void){

    top=0;

    }

    void push(char info){

    if(full()!=true){

    stack[top]=info;

    top++;

    }

    else

     printf("\n Stack Overflow . . .\n");

    }

    char pop(void){

    char info;

    if(empty()!=true){

    top--;

    info=stack[top];

    return info;

    }

    else

     printf("\n Stack Underflow . . .\n");

    }

    int full(void){

    if(top==MAX)

    return true;

    else

    return false;

    }

    int empty(void){

    if(top==0)

    return true;

    else

    return false;

    }

    Output Program :

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    15/26

     

    Algoritma :

    1.  Mulai 

    2. 

    Deklarasi stack

    3.  Deklarasi variable global

    4.  Deklarasi fungsi init

    5. 

    Deklarasi fungsi full

    6.  Deklarasi fungsi empty

    7.  Deklarasi fungsi pop

    8. 

    Deklarasi fungsi clear

    9.  Deklarasi fungsi push

    10. 

    Masuk menu utama

    11.  Deklarasi variable

    12.  Masuk operasi do while

    13.  Masuk operasi switch case

      Jika pilihan 1 maka jalankan proses masukkan kata

      Jika pilihan 2 maka jalankan proses balik kata

      Jika pilihan 3 maka jalankan proses selesai

    14. 

    selesai

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    16/26

    Penjelasan Program :

    Program di atas digunakan untuk membuat suatu program Pembalik Kata dengan

    menggunakan Stack dimana pada program tersebut terdapat operasi memasukkan kata (push),

     pembalikan kata (pop), dan seleai. Pada program ini kata yang dimasukkan kedalam stack maka

    secara otomatis apabila isi stack dikeluarkan maka kata akan langsung terbalik, karena data

    yang pertama dimasukkan pada stack maka akan keluar terakhir.

    Tugas Rumah I

    Pemrograman C++

    Nama Program : Program Implementasi Stack  

    Bahasa Pemrogramam : C++ 

    Compiler : MinGW Developer Studio

    Script program :

    #include

    #include

    #include

    #include

    #define MAX 10

    #define true 1

    #define false 0

    struct dtm{

    char nim[13];

    char nama[40];

    int nilai;

    }mhs[MAX];

    int top;

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

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    17/26

     bool empty(int popp);

    void pop();

    void baca();

    int main(){

    int pilih;

    struct dtm mhsin;

     bool flag=0;

    init();

    do{

    system("cls");

     printf("Pilihan Operasi : ");

     printf("\n1. Push");

     printf("\n2. Pop");

     printf("\n3. MultiPush");

     printf("\n4. MultiPop");

     printf("\n5. Clear");

     printf("\n6. Pengurutan Data");

     printf("\n7. Cetak Data");

     printf("\n8. Selesai");

     printf("\n\n Pilihan anda : ");

    scanf("%i",&pilih);

    switch(pilih){

    case 1:

     printf("\nPush");

    if(full(1)){ printf("\nPenyimpanan Tidak Mencukupi !!!");

     break;

    }

    fflush(stdin);

     printf("\nData Mahasiswa yang Ditambahkan : ");

    do{

     printf("\nNim : ");

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    18/26

      gets(mhsin.nim);

    if(check_nim(mhsin.nim)){

     printf("\nNIM sudah terdaftar\n\n");

    flag=1;

    }

    } while(flag);

     printf("\nNama : ");

    gets(mhsin.nama);

     printf("\nNilai : ");

    scanf("%d",&mhsin.nilai);

     push(mhsin);

     printf("\nData berhasil ditambahkan\n");

    system("pause");

     break;

    case 2:

     printf("\nPop");

    if(empty(1)){

     printf("\nPenyimpanan Tidak Mencukupi !!!");

    system("pause");

     break;

    }

     printf("\nData Mahasiswa yang Dihapus : ");

     pop();system("pause");

     break;

    case 3:

     printf("\nMultiPush");

    int puss;

     printf("\nBanyak Data yang ditambahkan : ");

    scanf("%d",&puss);

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    19/26

      if(full(puss)){

     printf("\nPenyimpanan Tidak Mencukupi !!!");

     break;

    }

    for(int a=0;a

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    20/26

      break;

    }

    for(int a=0;a

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    21/26

      case 8:

     printf("\nDatang Kembali ya\n\n\n");

    system("pause");

     break;

    default:

     printf("\nPilihan 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

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    22/26

      small=i;

    for(j=i+1;j

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    23/26

      if(top==0)

    return 0;

    for(int a=0;a

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    24/26

     

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    25/26

    Algoritma :

    1.  Mulai 

    2. 

    Deklarasi struck

    3.  Deklarasi variable global

    4.  Deklarasi fungi init

    5. 

    Deklarasi fungi SortByNim

    6.  Deklarasi fungi SortBYNilai

    7.  Deklarasi fungi push

    8.  Deklarasi fungi check_nim

    9.  Deklarasi fungi clear

    10.  Deklarasi fungi full

    11. 

    Deklarasi fungi empty

    12.  Deklarasi fungi pop

    13.  Deklarasi fungi baca

    14. 

    Masuk menu utama

    15.  Deklarasi variable

    16.  Masuk operasi do while

    17. 

    Masuk operasi switch case

    18. 

    selesai

    Penjelasan Program :

    Program di atas digunakan untuk membuat suatu program pengimpelmentasian dari

    Stack yang berfungsi untuk menyimpan data nilai mahasiswa. Dari beberapa program tersebut

    terdiri dari 8 kategori atau menu yang pertama yaitu push,pop, multipush, multipop, clear,

     pengurutan data, cetak data dan yang terakhir yaitu selesai. Dari program tersebut hanya

     bertambah beberapa program saja seperti contoh terdapat Multipush ini berfungsi untuk

    memasukkan dengan menambahkkan data yang lebih, dengan maksud kita bisa memasukkan

    data dengan beberapa data yang kita mau, seperti contoh kita bisa memasukkan data dari

    mahasiswa lebih dari 5 sekaligus, apabila kita menggunakan push maka data tersebut akan

    mengaksesnya dengan bertahap, yaitu satu demi satu. Dan Multipop yaitu berfungsi untuk

    menghapus dari data yang diinginkan secara langsung, fungsinya hampir sama dengan mutlti

     push hanya saja multipop berguna untuk menghapus data. Yang terakhir yaitu pengurutan data

    , berfungsi untuk mengurutkan data secara urut dengan mengutamakan dari kategori. Seperti

     NIM, nama dan nilai.

  • 8/18/2019 Laporan Praktikum ASD 4 Stack

    26/26

     KESIMPULAN

    Stack merupakan sebuah kumpulan data yang diletakkan di atas data lainya, seperti

    sebuah tumpukan. Dengan demikian, stack merupakan salah satu struktur data yang

    menerapkan prinsip LIFO (Last In First Out). Dimana elemen yang terakhir disimpan dalam

    stack, menjadi elemen yang pertama diambil. Untuk meletakkan sebuah elemen pada bagian

    atas dari stack, maka dilakukan operasi push. Sedangkan untuk memindahkan sebuah elemen

    dari tempat atas tersebut dalam sebuah stack, maka dilakukan operasi pop.

    Terdapat operasi-operasi dasar Stack yaitu :

    1.  Create

    2.  IsEmpty

    3. 

    Isfull

    4.  Push

    5.  Pop

    6. 

    Clear

    7.  Retrieve

    DAFTAR RUJUKAN

    1. 

    Tim Asisten Dosen. 2016. Modul 1 Struct, Array, Pointer. Malang: Universitas Negeri

    Malang.

    2.  Tim Asisten Dosen. 2016. Modul 2 Sorting (pengurutan). Malang: Universitas Negeri

    Malang.

    3.  Tim Asisten Dosen. 2016. Modul 3 Searching. Malang: Universitas Negeri Malang.

    4.  Tim Asisten Dosen. 2016. Modul 4 Strack (Tumpukan). Malang: Unversitas Negeri

    Malang.