Rabu, 21 Maret 2018

Stack & Queue


1.     Buatlah program QUEUE dengan ketentuan:
a.   Memiliki fungsi PUSH/ENQUEUE (input data)
b.  Memiliki fungsi POP/DEQUEUE (ambil satu data)
c.   Memiliki fungsi CLEAR (delete all data)
d.  Memiliki fungsi PRINT (cetak data pada layar)

Ø Kodingan
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#define max 10

using namespace std;

struct queue{
int head;
int tail;
int data [max];
int tampung;
   };

queue antri;

void awal(){
 antri.head=-1;
 antri.tail=-1;
   }

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

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


void input(int data){
 if(kosong()==1)
    {antri.head=0;
    antri.tail++;
    antri.data[antri.tail]=data;
    cout<<"data berhasil"; }
   else if(penuh()==0)
    {antri.head=0;
    antri.tail++;
    antri.data[antri.tail]=data;
    cout<<"data berhasil"; }

   else
       cout<<"data penuh";
   }

void ambil(){
   if(kosong()==0){
      cout<<"data terambil ";
        for (int i=antri.head;i<=antri.tail;i++)
        antri.data[i]=antri.data[i+1];
        antri.tail--;
   }
   else
   cout<<"Data kosong";
   }

void tampil(){



 if(kosong()==0)
   {

         for(int i=0;i<=antri.tail;i++)
        {
            cout<<antri.data[i]<<"  ";
        }
   cout<<endl;
   for (int i=0;i<=antri.tail;i++){
       cout<<"\nIndex ke "<<i<<"="<<antri.data[i];
   }

     }
     else
           cout<<"\nData kosong";
   }


void bersih(){
 antri.head=antri.tail=-1;

cout<<"\nData kosong!";
}

int main(){
int pil,data;
awal();
do
{
cout<<"\nMenu :\n1. Input (Enqueue) \n2. Ambil Data (Dequeue) \n3. Tampil\n4. Bersihkan (CLEAR)\n5. Keluar\nMasukkan pilihan :";
cin>>pil;

switch(pil)
 {case 1:cout<<"\nMasukkan data  = ";cin>>data;
      input(data);
           break;
    case 2:ambil();
       break;
    case 3:tampil();
       break;
    case 4:bersih();
       break;
    }
    getch();
system("cls");     }
while(pil!=5);
}

Ø Hasil
a.     Enqueue


b.     Dequeue

c.      Print

d.     Clear

 2.     Buatlah program untuk mengkonversi inputan infix menjadi postfix, program            tersebut akan menghasilkan output berupa hasil konversi ke postfix dan hasil                perhitungannya.
Ø Kodingan
#include <iostream>
#include <sstream>
#include <stack>
#include <limits>
#include <string>
#include <conio.h>


using namespace std;

int o(char a) {
    int temp;
    if (a == '^')
        temp = 1;
    else if (a == '*' || a == '/')
        temp = 2;
    else if (a == '+' || a == '-')
        temp = 3;
    return temp;
}

int main() {
    string infix;
    cout<<"\t\t\tKonversi Infix Ke Postfix\n\n";
    cout<<"Masukkan data yang ingin di ubah dari infix ke postfix\n";
    cout << "Masukan Infix yang ingin di ubah : ";
    getline(cin, infix);

    stack<char> opr_stack;

    stringstream postfix;

    for (unsigned i = 0; i < infix.length(); i++) {
        if (infix[i] == '+' || infix[i] == '-' || infix[i] == '*' || infix[i] == '/' || infix[i] == '^') {
            while (!opr_stack.empty() && o(opr_stack.top()) <= o(infix[i])) {
            postfix << opr_stack.top();
            opr_stack.pop();
            }
        opr_stack.push(infix[i]);
        } else if (infix[i] == '(') {
            opr_stack.push(infix[i]);
        } else if (infix[i] == ')') {
            while (opr_stack.top() != '(') {
            postfix << opr_stack.top();
            opr_stack.pop();
            }
            opr_stack.pop();
        } else {
            postfix << infix[i];
        }
    }

    while (!opr_stack.empty()) {
        postfix << opr_stack.top();
        opr_stack.pop();
    }

    cout << "Postfix adalah : " << postfix.str() << endl;

    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    return 0;
    getch();
}

Ø Hasil






Kamis, 01 Maret 2018

Searching Array


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

A.  Source Code
#include <iostream>
#include <conio.h>

using namespace std;

int main ()
{
    int b,k,cari;
    int flag=0,c=0,counter=0,indeks[100],urutan[100],d=0;

    cout<<"Masukan jumlah baris : ";cin>>b;
    cout<<"Masukan jumlah kolom : ";cin>>k;

    int data[b][k];

    cout<<endl;
    for(int i=0;i<b;i++)
    {
        for(int j=0;j<k;j++)
        {
             cout<<"Input index Data["<<i<<","<<j<<"] : ";cin>>data[i][j];
        }
    }
    cout<<endl;
    cout<<"Data : "<<endl;
    for(int i=0;i<b;i++)
    {
        for(int j=0;j<k ;j++){
            cout<<"\t"<<data[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
    cout<<"Masukan Data yang Dicari : ";cin>>cari;
    for(int i=0;i<b;i++)
        {
        for(int j=0;j<k;j++) {
            if(data[i][j]==cari)
        {
            flag=1;
            indeks[c]=i;
            urutan[d]=j;
            c++;
            d++;
            counter++;
            }
        }
    }
cout<<endl;
if(flag==1)
{
cout<<"Data "<<cari<<" ditemukan pada indeks ke ";
for(int i=0;i<counter;i++)
cout<<"["<<indeks[i]<<"]["<<urutan[i]<<"] ";
}
else
{
cout<<"Data Tidak Ditemukan!";
}
cout<<"\nJumlah Data : "<<counter<<endl;

return 0;
}

B.  Tampilan



2.  Buat program untuk mencari data berupa huruf pada inputan yang berupa kalimat.

A.  Source Code
#include <iostream>
#include <conio.h>
#include <ctype.h>
#include <string.h>

using namespace std;

int main ()
{
    int max=256, flag=0;
    char cari;
    char kata[max];
    char hvokal[max];
    char hkonsonan[max];
    int vokal=0, konsonan=0, x=0, y=0;

    std::cout<<"Masukan kalimat : "; std::cin.getline(kata,256);

    for (int i=0;kata[i];i++)
    {
        if (toupper(kata[i]=='a')||toupper(kata[i]=='i')||toupper(kata[i]=='u')||toupper(kata[i]=='e')||toupper(kata[i]=='o'))
        {
            vokal++;
            hvokal[x]=kata[i];
            x++;
        } else
        if(kata[i]==' ') {
        } else
        {
            konsonan++;
            hkonsonan[y]=kata[i];
            y++;
        }
    }
    std::cout<<"Output:\n";
    std::cout<<"Vokal : "<<vokal<<" : ";

    for(int i=0;i<vokal;i++)
    {
        std::cout<<hvokal[i]<<" ";
    }
    std::cout<<"\n";
    std::cout<<"Konsonan : "<<konsonan<<" : ";

    for (int i=0;i<konsonan;i++)
    {
        std::cout<<hkonsonan[i]<<" ";
    }
     std::cout<<"\n";
    std::cout<<"Masukan data yang anda cari : "; std::cin>>cari;

    for (int i=0;kata[i];i++)
    {
        if (kata[i]==cari)
        {
            flag=1;
        }
    }

    if (flag==1)
    {
        std::cout<<"Data ditemukan!";
    } else {
        std::cout<<"Data tidak ditemukan!";
    }
    getch();
    return 0;
}

B.  Tampilan



3.  Buat program untuk mencari bilangan ganjil dan bilangan genap dari data angka yang diinputkan oleh user .

A.  Source Code
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int data;
    cout<<"Masukkan Jumlah Data : ";cin>>data;

    int A[data], gnp[data][2], gjl[data][2];
    int a=0, b=0;
    string cari;

    for(int i=0; i<data; i++)
    {
        cout<<"Masukkan Data ke-"<<i+1<<" : ";cin>>A[i];
    }
    for(int i=0;i<data;i++)
    {
        if(A[i]%2==0)
        {
            gnp[a][0]=A[i];
            gnp[a][1]=i;
            a++;
        }
        else
        {
            gjl[b][0]=A[i];
            gjl[b][1]=i;
            b++;
        }
    }

    cout<<endl;
    cout<<"Data Genap \n";
    for(int i=0;i<a;i++)
        cout<<i+1<<". Index ke-"<<"["<<gnp[i][1]<<"]"<<" = "<<gnp[i][0]<<endl;
    cout<<"\nData Ganjil \n";
    for(int i=0;i<b;i++)
        cout<<i+1<<". Index ke-"<<"["<<gjl[i][1]<<"]"<<" = "<<gjl[i][0]<<endl;

    return 0;
}

B.  Tampilan