Selasa, 14 Maret 2017

Tugas Struktur data : Queue dan infix to postfix

NAMA : Nursamsuriati
NIM     : E1E115038

1. program queue

#include<iostream>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define max 15

using namespace std;

struct queue //Mendefinisikan queue dengan menggunakan struct
{
    int head;
    int tail ;
    int data [15]; // menampung 15 data
};

queue antri;

void queue(int d){   ///pemanggil untuk program queue
    antri.head=0;
    antri.tail++;
    antri.data[antri.tail]=d;
    cout<<"data berhasil dimasukkan"<<endl;
    cout<<endl;
}


void dequeue()      ///pemanggil untuk program dequeue
{
    cout<<"data terambil "<<antri.data[antri.head];
    for (int i=antri.head;i<=antri.tail;i++)
        (antri.data[i]=antri.data[i+1]);
        antri.tail--;
        cout<<endl;
}

int isFull(){
    if (antri.tail==max-1)
        return 1;
    else
        return 0;
}

int isEmpty(){
    if (antri.tail==-1)
    {
        antri.head=-1;
        return 1;
    }
    else
        return 0;
}

void clear(){
    antri.head=antri.tail=-1;
    cout<<"semua data terhapus.";
    cout<<endl;
}


void print_as(){
    int j,i;
    int tampung;
    for(i=0;i<=antri.tail;i++)
    {
    for(j=i+1;j<=antri.tail;j++)
        {
            if(antri.data[i]>antri.data[j])
            {
                tampung=antri.data[i];
                antri.data[i]=antri.data[j];
                antri.data[j]=tampung;
            }
        }
    }
    for (int b=0;b<=antri.tail;b++)
    cout<<antri.data[b]<<endl;
    cout<<endl;
}


int main()
{
    int pilih;
    int input;
    antri.tail=-1;
    do
    {
        system("cls");
        cout<<"MENU\n";
        cout<<"1. ENQUEUE\n";
        cout<<"2. DEQUEUE\n";
        cout<<"3. Hapus semua\n";
        cout<<"4. Tampilkan data\n";
        cout<<"5. keluar\n";
        cout<<endl<<"Masukkan Pilihan Anda = ";cin>>pilih;
        fflush(stdin);
    switch(pilih)
    {
    case 1 :
cout<<endl;
        cout<<"1. ENQUEUE ";
        if(isFull()==1){
            cout<<"Stack Penuh ! "<<endl;
        }

        else
        cout<<endl<<" Masukkan Data = ";cin>>input;
        fflush(stdin);
        queue(input);
        getch();
    break;

    case 2 :
cout<<endl;
            cout<<"2. DEQUEUE";
            if(isEmpty()==1){
                cout<<endl<<"Stack Kosong ! ";
            }

            else
                cout<<endl;
                dequeue();
        getch();

    break;

case 3:
cout<<endl;
            cout<<"3. Hapus Semua";
            clear();
            cout<<endl<<"Stack Kosong"<<endl;
    break;
    case 4 :
cout<<endl;
            cout<<"4. Tampilkan data";
            if(isEmpty()==1){
                cout<<endl<<"Stack Kosong"<<endl;
            }

            else
                cout<<endl<<"Data yang dicetak ";
    cout<<endl;
    print_as();
    getch();
    break;

    case 5:
cout<<endl;
            cout<<endl<<"Keluar dari program"<<endl;
}
} while (pilih!=6);

getch();
    return 0;
}



hasil running nya :











2. program stack infix to postfix

        #include<iostream>
        #include<conio.h>
        #include<string>
        #include<math.h>
        #include<sstream>
        #include<cstdlib>
        using namespace std;
        const int max_stack=35;
        struct type_stack{
         int top;
 
         string data[max_stack];
        };
        type_stack stack; // mendeklarasikan variable stack dengan tipe data bentukan (struct type_stack)
        //inisiasi stack awal sebagai stack kosong dengan nilai top= -1
        void init(type_stack &namastack){
         namastack.top = -1;
        }
        //membuat fungsu isFull untuk mengecek apakah stack sudah penuh atau belum
        bool isFull(type_stack namastack, int max_stack){
         if(namastack.top == (max_stack-1))
          return true;
         else
          return false;
        }
        //membuat fungsi isEmpty untuk mengecek apakah stack masih kosong atau sudah terisi
        bool isEmpty(type_stack namastack){
         if(namastack.top == -1)
          return true;
         else
          return false;
        }
        //membuat fungsi Push untuk menambah elemen data pada stack
        void Push(type_stack &namastack, string data){
         namastack.top++;
         namastack.data[namastack.top]=data;
        }
        //membuat fungsi Pop u ntuk menghapus elemen data pada stack yang paling atas
        void Pop(type_stack &namastack){
         //cout<<"data "<<namastack.data[namastack.top]<<" telah terambil...";
         namastack.top--;
        }
        //membuat fungsi Cetak Stack
        void CetakStack_LIFO(type_stack namastack){
         cout << "Data Stack (LIFO) : \n";
         for(int i=namastack.top; i>=0; i--){
          cout<<" "<<namastack.data[i]<<"\n";
         }
        }
        //fungsi memasukkan elemen-elemen string ke stack
        void inputElemen(type_stack &namastack){
         //menginputkan expresi infix
         cout<<" Masukkan \n";
         string dataElemen;
         //setiap kali memilih menu 1, maka string dataelemen diberinilai kosong("")
         dataElemen="";
         int elm=0; //untuk menampilkan angka elemen ke pada saat menginputkan elemen
         while(dataElemen != "=") //melakukan perulangan untuk menginput per elemen ekspresi sampai selesai
         {
          elm++;
          cout<<"elemen ke "<<elm<< " : ";
          cin>>dataElemen; //menginput dari keyboard 1 elemen
          if(dataElemen!="=") //mengecek jika string dataInfix tidak samadengan "="
          Push(namastack,dataElemen);  //push masing elemen ke stackInfix
         }
        }
        //fungsi untuk mengetahui operator atau bukan (operator)
        bool isOpr(string opr)
        {
         if((opr=="*") || (opr=="/")||(opr=="%")||(opr=="+") || (opr=="-")||(opr=="^"))
         {
          return true;
         }
         else
          return false;
        }
        //fungsi untuk menyimpan derajat presedence
        int presedence(string opr)
        {
         if((opr=="^")||(opr=="!"))
          return 4;
         else if((opr=="*") || (opr=="/")||(opr=="%"))
          return 3;
         else if((opr=="+") || (opr=="-"))
          return 2;
         else
          return 1;
        }
        //fungsi convert infix to postfix
        void infixToPostfix(type_stack &infix, type_stack &postfix){
         string symbol;
         string topSymbolOpr;
         type_stack stackOperator;
         init(stackOperator);
         for(int k=0; k<=infix.top; k++)
         {
          symbol=infix.data[k];
          if((!isOpr(symbol)) && (symbol!="(") && (symbol!=")") ) //jika bukan operator, berarti symbol atau angka
          {
           Push(postfix,symbol);
          }
          else if(isOpr(symbol))
          {
           while((!isEmpty(stackOperator)) && (stackOperator.data[stackOperator.top]!="("))
           {
            topSymbolOpr=stackOperator.data[stackOperator.top];
            if(presedence(topSymbolOpr)>=presedence(symbol))
            {
             Pop(stackOperator);
             Push(postfix,topSymbolOpr);
            }
            else
             break;
           }
           Push(stackOperator,symbol);
          }
          else if(symbol=="(")
          {
           Push(stackOperator,symbol);
          }
          else if(symbol==")")
          {
           while((!isEmpty(stackOperator)) && (stackOperator.data[stackOperator.top]!="("))
           {
            topSymbolOpr=stackOperator.data[stackOperator.top];
            if(presedence(topSymbolOpr)>=presedence(symbol))
            {
             Pop(stackOperator);
             Push(postfix,topSymbolOpr);
            }
            else
             Push(stackOperator,symbol);
           }
           if(stackOperator.data[stackOperator.top]=="(")
            Pop(stackOperator);
           else
            cout<<"kurung '(' tidak ditemukan";
          }
         }
         while(!isEmpty(stackOperator))
         {
          topSymbolOpr=stackOperator.data[stackOperator.top];
          Pop(stackOperator);
          Push(postfix,topSymbolOpr);
         }
        }
        //fungsi untuk menghitung 2 bilangan
        double hitungMat(double operand1, string opr, double operand2)
        {
         if(opr=="+")
          return (operand1 + operand2);
         else if(opr=="-")
          return (operand1 - operand2);
         else if(opr=="*")
          return (operand1 * operand2);
         else if(opr=="/")
          return (operand1 / operand2);
         else if(opr=="")
          return (double)((int)operand1 % (int)operand2);
         else if(opr=="^")
          return (pow(operand1,operand2));
         else
          return 0;
        }
        //fungsi konvert string to double
        double strToDouble(string strangka)
        {
         std::istringstream stm;
         stm.str(strangka);
         double d;
         stm >>d;
         return (d);
        }
        //fungsi konvert double to string
        string doubleToStr(double angka)
        {
         ostringstream ss;
            ss << angka;
            return (ss.str());
        }
        //fungsi eksekusi ekspresi postfix
        string ekskusiPostfix(type_stack &namastackPostfix)
        {
         type_stack stackHasil;
         init(stackHasil);
         string symbol;
         double operand1, operand2;
         for(int i=0; i<=namastackPostfix.top; i++)
         {
          symbol=namastackPostfix.data[i];
          if(!isOpr(symbol))
          {
           Push(stackHasil,symbol);
          }
          else if(isOpr(symbol))
          {
           operand2=strToDouble(stackHasil.data[stackHasil.top]);
           Pop(stackHasil);
           operand1=strToDouble(stackHasil.data[stackHasil.top]);
           Pop(stackHasil);
           double hasilHitungan;
           hasilHitungan=hitungMat(operand1,symbol,operand2);
           Push(stackHasil,doubleToStr(hasilHitungan));
          }
         }
         return stackHasil.data[stackHasil.top];
        }
        int main(){
         type_stack stackInfix;
         type_stack stackPostfix;
         do
         {
         Menu :
          int menu;
          cout<< "         Stack" << endl;
          cout<< endl;
          cout<< "(1) Masukkan Infix "<<endl;
          cout<< "(2) Konversi Infix Menjadi Postfix "<<endl;
          cout<< "(3) Hasil Perhitungan"<<endl;
          cout<< "(4) Keluar "<<endl;
          cout<< endl;
          cout<< "Pilihan : ";
          cin>>menu;
          switch(menu)
          {
          case 1:
           init(stackInfix); //inisiasi stackInfix untuk membuat stack kosong
           if(!isFull(stackInfix,max_stack))
           {
            inputElemen(stackInfix);  //memanggil fungsi inputElemen
            cout<<endl;
            cout<<"Expresi infix yang anda masukkan : ";
            cout<<"    "; for(int i=0; i <=stackInfix.top; i++){cout<<stackInfix.data[i];  }
            cout<<endl;
            cout<<endl;
           }
           else
           {
            cout<<"Maaf, Stack Telah Penuh..!";
           }
           cout<<endl;
           break;
          case 2:
           init(stackPostfix);
           infixToPostfix(stackInfix,stackPostfix);
           cout<<endl;
           cout<<"Expresi Postfix  : ";
           cout<<"    "; for(int i=0; i <=stackPostfix.top; i++){cout<<stackPostfix.data[i];  }
           cout<<endl;
           cout<<endl;
           break;
          case 3:
           cout<<endl;
           cout<<"Hasil Perhitungan expresi "; for(int i=0; i <=stackPostfix.top; i++){cout<<stackPostfix.data[i];  }
           cout<<"\nadalah :     "<<ekskusiPostfix(stackPostfix)<< endl<<endl;
           break;
          case 4:
           exit(0);
           break;
          default:
           cout <<"\n Input Menu Salah...!!!";
           _getch();
           system("cls");
           goto Menu;
          }
         }while(1);
        }

hasil running nya : 



Senin, 27 Februari 2017

Tugas 2 Struktur Data

Assalamualaikum.Wr.Wb.

1. Buatlah program untuk mencari data pada array 2 dimensi (opsional: tambahkan kode program untuk memberi inputan data dan ukuran array.

codingannya sbb :

#include <iostream>
#include <conio.h>
#include <stdlib.h>

using namespace std;

int main()
{
    int data[100][100];
    int bts_baris, bts_kolom, b, k, cari, flag=0;
    cout<<"Ukuran array"<<endl;
    cout<<"Masukkan Baris = "; cin>>bts_baris;
    cout<<"Masukkan Kolom = "; cin>>bts_kolom;

    for(b=0;b<bts_baris;b++){   //looping untuk baris
        for(k=0;k<bts_kolom;k++){   //looping untuk kolom, dan dselesaikan hingga for nya bernilai salah
            cout<<"Data Array, baris("<<b<<") kolom("<<k<<")  : ";cin>>data[b][k]; // menginputkan data pada array
        }
    }

    for(b=0;b<bts_baris;b++){
        for(k=0;k<bts_kolom;k++){
            cout<<data[b][k]<<"     "; // menampilkan data yang telah diinputkan 
        }
        cout<<endl;
    }

    cout<<"Masukkan data yang ingin dicari = "; cin>>cari;

    for(b=0;b<bts_baris;b++){
        for(k=0;k<bts_kolom;k++){
            if(cari==data[b][k]) { // kondisi dimana data yang dicari sama dengan data array
                cout<<"data "<<cari<<" berada pada posisi ["<<b<<"]["<<k<<"]"<<endl; // posisi data yang dicari pada index
                flag=1; // variable jika data ditemukan
            }
        }
    }


    if (flag==1){
        cout<<"data ditemukan!!!"<<endl; 
    }
    else {
        cout<<"data tidak ditemukan!!!"<<endl;
    }
    getch();
    return 0 ;
}

outputnya yaitu : 


















2. Buat program untuk mencari data berupa huruf pada inputan yang berupa kalimat. (Opsional: hitung jumlah konsonan, dan vokal). 

codingannya sbb  :

#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

using namespace std;

int main()
{
    int v=0,k=0,s=0; //variable untuk konsonan dan spasi
    int flag=0, x, i;
    char kalimat[100],cari;

    cout <<"masukkan kalimat = "; cin.getline(kalimat,100);

    x=strlen(kalimat);
    cout<<endl;
    cout<<"Hasil : "<<endl;
    for(i=0;i<x;i++){  //looping untuk menghitung jumlah huruf vokal,konsonan dan spasi
            if(kalimat[i]=='a'||kalimat[i]=='i'||kalimat[i]=='u'||kalimat[i]=='e'||kalimat[i]=='o') {
                v++;   //mengitung jumlah huruf vokal
            }
            else if(kalimat[i]==' '){
                s++;   // menghitung jumlah huruf spasi
            }
            else
                k++; //menghitung jumlah huruf konsonan
        }
    cout<<"Huruf Vocal = "<<v<<" = ";   //menampilkan jumlah huruf vokal

    for(i=0;i<x;i++){
    if(kalimat[i]=='a'||kalimat[i]=='i'||kalimat[i]=='u'||kalimat[i]=='e'||kalimat[i]=='o') {
                cout<<kalimat[i]<<" ";
            }
        }
    cout<<endl;
    cout<<"Huruf konsonan = "<<k<<" = ";   //menampilkan jumlah huruf konsonan

    for(i=0;i<x;i++){
            if(kalimat[i]=='a'||kalimat[i]=='i'||kalimat[i]=='u'||kalimat[i]=='e'||kalimat[i]=='o'){
                cout<<"";
            }
            else if(kalimat[i]==' '){
                cout<<"";
            }
            else
                cout<<kalimat[i]<<" ";
        }
    cout<<endl;
    cout<<"jumlah spasi = "<<s;
    cout<<endl;
    cout<<"Masukkan data yang ingin dicari : "; cin>>cari;
    for(i=0;i<x;i++){
            if(kalimat[i]==cari)   //kondisi untuk mencari huruf
            flag=1;    //jika ditemukkan
        }

        if(flag==1){
                cout<<"Data ditemukan.."<<endl;
            }
            else{
                cout<<"Data tidak ditemukan..";
            }
    getch();
    return 0;
}


outputnya yaitu :













3. Buat program untuk mencari bilangan ganjil dan bilangan genap dari data angka yang diinputkan oleh user (opsional: berikan indeks untuk setiap data yang ditemukan)

codingannya sbb :

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

    int main()
{
    int data[100], batas, i;   //membuat variable
    string kata;   //variable menginputkan huruf
    cout<<"Masukkan batas = "; cin>>batas;
    for (i=0; i<batas; i++){   //looping untuk menginput data
        cout<<"Masukkan data ke-"<<i<<" = "; cin>>data[i];
    }
    cout<<endl;
    cout<<"Data Anda = "<<endl;
    for (i=0; i<batas; i++){
        cout<<"Masukkan data ke-"<<i<<" = "<<data[i]<<endl;   //menampilkan data yang di inputkan
    }
    cout<<"tampilkan ganjil atau genap = "; cin>>kata;  //menginpukan kata

    if (kata=="ganjil"){    //jika diinputkan data yang ganjil
        cout<<"data ganjil : "<<endl<<endl;
        for(i=0; i<batas; i++){
        if(data[i]%2!=0){   //rumus mencari nilai ganjil
            cout<<data[i]<<" Berada Pada Indeks Ke-"<<i<<endl;   //menampilkan data ganjil
        }

    }
    }
    else if (kata=="genap"){   //jika diinputkan data genap
         cout<<"data genap : "<<endl<<endl;
        for (i=0; i<batas; i++){
            if(data[i]%2==0){   //rumus mencari nilai genap
                cout<<data[i]<<" Berada Pada Indeks Ke-"<<i+1<<endl;   //menampilkan data genap
            }

        }
    }
    else {
        cout<<"EROR! "<<endl;
    }
    getch();
    return 0;

}


output pertamanya :














output keduannya :

















TUGAS TAMBAHAN 

 Buka Modul PRAKTIKUM 3 SEARCHING ARRAY 
 
1. Kerjakan contoh 3, tambahkan code program untuk menampilkan indeks data yang dicari, jika data tersebut ditemukan SERTA tambahkan inputan untuk jumlah data awal dan nilai inputan yang dimasukkan.  
 

codingannya sbb :

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
   int data[100], batas, flag=0, i, cari, awal, tengah, akhir;
   awal=0;
   cout<<"Masukkan banyaknya data yang di inginkan : "; cin>>batas;
   for (i=0; i<batas; i++){
    cout<<"Masukkan data "<<i+1<<" : "; cin>>data[i];
   }
   cout<<endl;
   cout<<"data "<<endl;
   for (i=0; i<batas; i++){
    cout<<data[i]<<" ";
   }
   akhir=batas;
    cout<<endl;
   cout<<"data yang dicari "; cin>>cari;
    while (awal<=akhir && flag==0){
        tengah=(awal+akhir)/2;
        cout<<"data tengah --> "<<tengah<<" data ke-"<<data[tengah]<<endl;
        if (data[tengah]==cari){
            flag=1;
            break;
        }
        else if (data[tengah]<cari){
            awal=tengah;
            cout<<"cari di bagian kanan"<<endl<<endl;
        }
        else {
            akhir=tengah-1;
            cout<<"cari di bagian kiri"<<endl<<endl;
        }
    }
    cout<<endl;
     if (flag==1) {
        cout<<"DATA DITEMUKAN !"<<endl;
        for (i=0; i<10; i++){
            if (data[i]==cari)
            cout<<"Data berada pada index ke-"<<i+1<<endl;
        }

     }
    else
        cout<<"NOT FOUND !";
}


outputnya yaitu :


















2. Kerjakan contoh 4, tambahkan code program untuk menampilkan indeks data yang dicari, jika data tersebut ditemukan SERTA tambahkan inputan untuk banyak data awal dan nilai inputan yang dimasukkan. 


codingannya sbb :

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
   int data[100], batas, flag=0, i, cari;

   cout<<"Masukkan banyaknya data : "; cin>>batas;
   for (i=0; i<batas; i++){
    cout<<"Data "<<i+1<<" : "; cin>>data[i];
   }
   cout<<endl;
   cout<<"data "<<endl;
   for (i=0; i<batas; i++){
    cout<<data[i]<<" ";
   }
    cout<<endl;
   cout<<"data yang dicari "; cin>>cari;
    for (i=0; i<batas; i++){
    if (data[i]==cari){
        cout<<"data ditemukan, pada index ke-"<<i+1<<endl;
    }
   }
}


outputnya yaitu :



Minggu, 19 Februari 2017

Tugas Struktur Data-Array


Assalamualakum.wr.wb
ini adalah beberapa contoh pemrograman Array dan struck menggunakan bahasa C++ beserta outputnya dan compiler yang di gunakan dalam membuat ini yaitu Codeblocks.



1. Program penghapusan data dengan inputan berupa angka yang ingin dihapus oleh user.

#include <iostream>
#include <conio.h>

using namespace std;

int main() {
    int A [8] = {2,12,6,12,12,7,6,12},a,hps,tot=0;
    cout<<"Data saat ini \n";
    for(a=0; a<8; a++)
    {
        cout<<A[a]<<" ";
    }
    cout<<endl<<"Data yang akan dihapus : "<<endl;
    cin>>hps;  
    cout<<"Data "<<hps<< " berhasil di hapus !"<<endl;
    cout<<"\nData sekarang : ";
    cout<<endl;
    for(a=0;a<8;a++)
    {
        if(A[a] == hps)
            tot=tot+1;
        else
            cout<<A[a]<<" ";
    }
    cout<<endl;
    cout<<endl<<"Dan jumlah data yang telah dihapus yaitu : "<<tot;
    getch();
    return 0;

}



Outputnya sebagai berikut :





output pertama




 






output kedua









2. Program untuk melakukan update data.


#include <iostream>
#include <conio.h>

using namespace std;

int main() {
    int A[8] = {98, 97, 96, 95, 94, 93, 92, 91},lama,baru,e;
    cout<<"Data saat ini\n";
    for(baru=0;baru<8;baru++)
    {
    cout<<A[baru]<<" "<<endl;
    }
    cout<<"Masukkan data lama : ";cin>>lama;
    e=0;
    for(baru=0;
    baru<8;
    baru++)
    if(A[baru]==lama)
    {e=1 ;

    cout<<"Masukkan data baru: ";cin>>A[baru];
    cout<<endl;
    cout<<"Data yang telah diubah  : "<<endl;
    for(baru=0;baru<8;baru++)
    {
        cout<<A[baru]<<" "<<endl;
    }
    }
    if(e==0)
    {
        cout<<endl;
        cout<<"Data yang anda masukkan salah";}
    getch();
    return 0;

}


Outputnya sebagai berikut :






output pertama











output kedua








3. Program untuk melakukan penambahan data.

#include<iostream>
#include<conio.h>


using namespace std;

int main()
{
int tambah,indeks,y=0;
int data[]={1,2,3,4,5,6,7,8,9};
for(int i=0;i<9;i++)
    {
        cout<<data[i]<< " ";
    }

cout<<"\nMasukkan data yang akan ditambahkan : ";
cin>>tambah;
cout<<"\nMasukkan Indeks data yang dituju : ";
cin>>indeks;
for(int i=0;i<9;i++)
    {
    if(i>=indeks)
        {
        y=data[i];
        data[i]=tambah;
        tambah=y;
        }
    }
cout<<"\nData telah berhasil ditambahkan : \n";
for(int i=0;i<9;i++)
    {
    cout<<data[i]<<" ";
    }

getch();
return 0;
}


Outputnya sebagai berikut :






output pertama












output kedua