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




Jumat, 23 Februari 2018

Tugas Struktur Data Menggunakan Bahasa Pemrograman C++

1.    Program penghapusan data dengan inputan berupa angka yang ingin dihapus oleh user.
             Ketentuan :
·      Semua data yang sesuai dengan inputan user akan terhapus.
·      Bonus jika terdapat counter  untuk menghitung berapa data yang terhapus.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int d[50]={22,10,5,1,4,9,3};
int n=0,h,i=0,tot=0;
while (n<7){
    cout<<d[n]<<" ";
n++;
}
cout<<endl;
cout<<"Data Yang Akan Anda Hapus : ";cin>>h;
cout<<endl;
    for(i=0;i<=8;i++) {
        if (d[i]==h) {
            d[i]=0;
            tot=tot+1;
        }
    }
cout<<"Data "<<h<<" telah berhasil anda hapus !"<<endl;
cout<<"Jumlah data yang anda hapus : "<<tot<<endl;
cout<<endl;
cout<<"Data Akhir : "<<endl;
    for(i=0;i<8;i++)
    {
        if(d[i]!=0)
        {
        cout<<d[i]<<" ";
        }
    }
    return 0;
}

  •     Gambar :


·      Penjelasan :

     Pada program ini berisi tentang data yang ingin dihapus pada data array yang sudah ditentukan yaitu d[50]={22,10,5,1,4,9,3}, lalu menghitung berapa jumlah data array yang telah diapus. Pada program ini daya menggunakan perulangan while dan for.


2.    Program untuk melakukan update data
             Ketentuan :
·       Terdapat dua inputan, yaitu inputan data yang akan diubah dan data baru (data pengganti)
·       Semua data yang sesuai dengan inputan user akan di update nilainya

#include <iostream>
#include <conio.h>
using namespace std;
int main(){

int d[9]={5,6,4,3,2,1,1,7,7};
int ubah,baru,i=0;

cout<<"Data Awal : "<<endl;

while(i<9){
    cout<<d[i]<<" ";
    i++;
}
cout<<endl;
cout<<endl;
cout<<"Masukkan data yang ingin diubah : ";cin>>ubah;
cout<<endl;
cout<<"Masukkan data baru : ";cin>>baru;

    for (i=0;i<9;i++) {
        if (d[i]==ubah) {
            d[i]=baru;
        }
    }
        cout<<endl;
        cout<<"Data akhir : "<<endl;
        for (i=0;i<9;i++) {
            cout<<d[i]<<" ";
        }
return 0;
}
Gambar :

·    Penjelasan :
           Pada program ini berisi  data array yaitu d[9]={5,6,4,3,2,1,1,7,7}, lalu kita akan memasukan atau                menginput data array yang ingin diubah. Setelah itu kita juga akan memasukan data baru atau data                pengganti pada data array yang ingin diubah. Disini juga saya menggunakan perulanngan while dan for.

3.  Program untuk melakukan penambahan data
            Ketentuan:
·       Penambahan data dapat dilakukan di mana saja
·       Inputan dari user berupa :
o  Nilai yang akan ditambahkan
o  Indeks ke berapa yang dituju
·      Setelah penambahan, maka jumlah data akan bertambah dan posisi data akan bergeser sesuai dengan penambahan yang telah dilakukan

#include <iostream>
#include <conio.h>
using namespace std;
int main(){

int d[100]={10,10,8,9,7,7,0};
int tambah,indeks,i,n=0,h=7,a=0;

cout<<"Data Awal : ";
cout<<endl;

while(n<7){
    cout<<d[n]<<" ";
    n++;
}
cout<<endl;
cout<<endl;
cout<<"Masukan nilai yang ingin ditambahkan : ";cin>>tambah;
cout<<endl;
cout<<"Masukan indeks yang ingin dituju : ";cin>>indeks;
cout<<endl;

for(i=h-1;i>=indeks;i--){
    d[i+1]=d[i];
    }
    h++;
    d[indeks]=tambah;

cout<<"Data Akhir : "<<endl;

while (a<h) {
    cout<<d[a]<<" ";
    a++;
}
return 0;
}
Gambar :

·      Penjelasan :
Pada program ini kita akan menambah data array sesuai dengan indeks yang dituju. Dini saya jug menggunakan perulangan while dan for.