Kamis, 16 Maret 2017

tugas struktur data STACK dan QUEUE

NAMA : MASRUI NGNGIRI
NIM : E1E115073


                1.Dengan mengembangkan code berikut, buatlah program STACK  dan                   
               QUEUE
                                  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)
                                   e. (opsional) jika user ingin menampilkan data yang diinputkan, maka data 
                            tersebut  telah terurut secara ascending (menggunakan metode sorting )
                 
 kodingan:

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

using namespace std;

struct stack
{
    int top;
    int data [15];
};
stack tumpuk;
void push(int d){
    tumpuk.top++;
    tumpuk.data[tumpuk.top]=d;
    cout<<"Data berhasil dimasukkan";
    cout<<endl<<endl;
}
void pop_des(){
    cout<<endl;
    cout<<"Data terambil "<<tumpuk.data[tumpuk.top];
    cout<<endl;
    tumpuk.top--;
}
int isFull(){
    if(tumpuk.top==max_stack-1)
        return 1;
    else
        return 0;
}

int isEmpty(){
    if(tumpuk.top==-1)
        return 1;
    else
        return 0;
}
void clear(){
    tumpuk.top=-1;
    cout<<endl;
    cout<<"Semua data terhapus";
    cout<<endl;
}
void print_as(){
    int j,i;
    int tampung;
    for(i=0;i<=tumpuk.top;i++)
    {
    for(j=i+1;j<=tumpuk.top;j++)
        {
            if(tumpuk.data[i]>tumpuk.data[j])
            {
                tampung=tumpuk.data[i];
                tumpuk.data[i]=tumpuk.data[j];
                tumpuk.data[j]=tampung;
            }
        }
    }
    for (int c=0;c<=tumpuk.top;c++)
    cout<<tumpuk.data[c]<<endl;
}
int main()
{
    int pil;
    int input;
    tumpuk.top=-1;
    do
    {
        system("cls");
        cout<<endl<<"Menu Stack"<<endl ;
        cout<<"1. Push "<<endl;
        cout<<"2. Pop "<<endl;
        cout<<"3. Hapus Semua Data "<<endl;
        cout<<"4. Tampilkan Data "<<endl;
        cout<<"5. Exit "<<endl;
        cout<<endl<<"Masukkan Pilihan Anda = ";cin>>pil;
        fflush(stdin);
    switch(pil)
    {
    case 1 :
                                cout<<endl;
        cout<<"1.Push ";
        if(isFull()==1){
            cout<<"Stack Penuh ! "<<endl;
        }

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

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

            else
                pop_des();
                                getch();

    break;

                      case 3:
                                                cout<<endl;
            cout<<"3.Clear";
            clear();
            cout<<endl<<"Stack Kosong"<<endl;
    break;
    case 4 :
                                                cout<<endl;
            cout<<"";
            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 (pil!=6);

                      getch();
    return 0;

}

hasil tampilan:






3.Buatlah program untuk mengkonversi inputan infix menjadi postfix, program tersebut
      akan menghasilkan output berupa hasil konversi ke postfix dan hasil perhitungannya.
      (inputan berupa angka). Code program berikut dapat dijadikan sebagai referensi.
      (Code program ini dapat menghitung hasil operasi dari inputan postfix).

 kodingan:

        #include<iostream>
        #include<conio.h>
        #include<string>
        #include<math.h>
        #include<sstream>
        #include<cstdlib>
        using namespace std;
        const int max_stack=40;
        struct type_stack{
         int top;
         string data[max_stack];
        };
        type_stack stack;
        void init(type_stack &namastack){
         namastack.top = -1;
        }
        bool isFull(type_stack namastack, int max_stack){
         if(namastack.top == (max_stack-1))
          return true;
         else
          return false;
        }
        bool isEmpty(type_stack namastack){
         if(namastack.top == -1)
          return true;
         else
          return false;
        }
        void Push(type_stack &namastack, string data){
         namastack.top++;
         namastack.data[namastack.top]=data;
        }
        void Pop(type_stack &namastack){
         namastack.top--;
        }
        void CetakStack_LIFO(type_stack namastack){
         cout << "Data Stack (LIFO) : \n";
         for(int i=namastack.top; i>=0; i--){
          cout<<" "<<namastack.data[i]<<"\n";
         }
        }
        void inputElemen(type_stack &namastack){
         cout<<" Masukkan \n";
         cout<<"tekan enter setelah selesai menginputkan 1 element,  \n"<<
          "sampai menginputkan '=' \n";
         string dataElemen;
         dataElemen="";
         int elm=0;
         while(dataElemen != "=")
         {
          elm++;
          cout<<"elemen ke "<<elm<< " : ";
          cin>>dataElemen;
          if(dataElemen!="=")
          Push(namastack,dataElemen);
         }
        }
        bool isOpr(string opr)
        {
         if((opr=="*") || (opr=="/")||(opr=="%")||(opr=="+") || (opr=="-")||(opr=="^"))
         {
          return true;
         }
         else
          return false;
        }
        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!=")") )
          {
           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);
         }
        }
        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;
        }
        double strToDouble(string strangka)
        {
         std::istringstream stm;
         stm.str(strangka);
         double d;
         stm >>d;
         return (d);
        }
        string doubleToStr(double angka)
        {
         ostringstream ss;
            ss << angka;
            return (ss.str());
        }
        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<< "             Menu Stack" << endl;
          cout<< endl;
          cout<< " 1) Input Infix "<<endl;
          cout<< " 2) Konvert Expresi Infix ke Postfix, Tampilkan "<<endl;
          cout<< " 3) Hasil perhitungan Expresi, Tampilkan "<<endl;
          cout<< " 4) Keluar "<<endl;
          cout<< endl;
          cout<< "Masukkan Pilihan : ";
          cin>>menu;
          switch(menu)
          {
          case 1:
           init(stackInfix);
           if(!isFull(stackInfix,max_stack))
           {
            inputElemen(stackInfix);
            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...!!!";
           cout<<"\n Press Any key to return to menu ";
           _getch();
           system("cls");
           goto Menu;
          }
         }while(1);
        }

hasil tampilan:



Jumat, 17 Februari 2017

belajar koding 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>
  using namespace std;
   int main()
{
    int M[] = {2,12,6,12,12,7,6,12},k,del;
    for(k=0;k<8;k++)
    {
        cout<<M[k]<<" ";
    }
    cout<<endl;
    cout<<"Data yang ingin di hapus : ";cin>>del;
    cout<<"Data "<<del<<" berhasil dihapus!"<<endl;
    cout<<"Data sekarang : "<<endl;
    for(k=0;k<8;k++)
    {
        if(M[k]!=del)
        {
            cout<<M[k]<<" ";
        }
    }
    return 0;
}







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 diupdate nilainya.


#include <iostream>
using namespace std;
int main()
{
    int M[5],a,b,c,d;
    char pilih;
    cout<<"masukkan:"<<endl;
    for(a=0;a<5;a++)
    {
        cout<<"Nilai ke-"<<a+1<<" : ";
        cin>>M[a];
    }
    cout<<"Nilai Anda"<<endl;
    for(b=0;b<5;b++)
    {
        cout<<"Nilai ke-"<<b+1<<" : "<<M[b]<<endl;
    }
    cout<<endl;
    cout<<"Ubah data"<<endl;
    for(c=0;c<5;c++)
    {
        cout<<"Nilai ke-"<<c+1<<" : ";
        cin>>M[c];
    }
    cout<<"Nilai Baru : "<<endl;
    for(d=0;d<5;d++)
    {
        cout<<"Nilai ke-"<<a+1<<" : "<<M[d]<<endl;
    }
    return 0;
}







4. Buatlah struct untuk data lagu yang berisi tentang judul lagu, penyanyi, tahun produksi,
     nomor  track dan kode album.
     Ketentuan :
         program ini akan memiliki dua buah struct, yaitu struct lagu dan struct kodeRBT.
        Jumlah data yang diinputkan dinamis (maks. 20 lagu)


#include <iostream>

using namespace std;

struct lagu{
    char judul[25] ;
    char penyanyi[20];
};
struct kode{
    int tahun;
    int nomortrack;
    int kodealbum;
};
int main()
{
    lagu lagu[25];
    kode kode[25];
    for(int m=0;m<2;m++)
    {
        cout<<"Lagu ke-"<<m+1<<endl;
        cout<<"Judul Lagu : ";
        cin>>lagu[m].judul;
        cout<<"Nama Penyanyi : ";
        cin>>lagu[m].penyanyi;
        cout<<"Tahun Terbit : ";
        cin>>kode[m].tahun;
        cout<<"Nomor Track : ";
        cin>>kode[m].nomortrack;
        cout<<"Kode Album : ";
        cin>>kode[m].kodealbum;

        cout<<endl;
        cout<<"Lagu ke-"<<m+1<<endl;
        cout<<"Judul Lagu : "<<lagu[m].judul<<endl;
        cout<<"Nama Penyanyi : "<<lagu[m].penyanyi<<endl;
        cout<<"Tahun Terbit : "<<kode[m].tahun<<endl;
        cout<<"Nomor Track : "<<kode[m].nomortrack<<endl;
        cout<<"Kode Album : "<<kode[m].kodealbum<<"\n"<<endl;
    }
    return 0;
}




Senin, 13 Februari 2017

menghitung nilai akhir dengan pemrograman c++

Sejarah C++

Tahun 1978, Brian W. Kerninghan & Dennis M. Ritchie dari AT & T Laboratories mengembangkan bahasa B menjadi bahasa C. Bahasa B yang diciptakan oleh Ken Thompson sebenarnya merupakan pengembangan dari bahasa BCPL ( Basic Combined Programming Language ) yang diciptakan oleh Martin Richard.

Sejak tahun 1980, bahasa C banyak digunakan pemrogram di Eropa yang sebelumnya menggunakan bahasa B dan BCPL. Dalam perkembangannya, bahasa C menjadi bahasa paling populer diantara bahasa lainnya, seperti PASCAL, BASIC, FORTRAN.

Tahun 1989, dunia pemrograman C mengalami peristiwa penting dengan dikeluarkannya standar bahasa C oleh American National Standards Institute (ANSI). Bahasa C yang diciptakan Kerninghan & Ritchie kemudian dikenal dengan nama ANSI C.

Mulai awal tahun 1980, Bjarne Stroustrup dari AT & T Bell Laboratories mulai mengembangkan bahasa C. Pada tahun 1985, lahirlah secara resmi bahasa baru hasil pengembangan C yang dikenal dengan nama C++. Symbol ++ merupakan operator C untuk operasi penaikan, muncul untuk menunjukkan bahwa bahasa baru ini merupakan versi yang lebih canggih dari C.

Sebenarnya bahasa C++ mengalami dua tahap evolusi. C++ yang pertama, dirilis oleh AT&T Laboratories, dinamakan cfront. C++ versi kuno ini hanya berupa kompiler yang menterjemahkan C++ menjadi bahasa C.

Borland International merilis compiler Borland C++ dan Turbo C++.
Kedua compiler ini sama-sama dapat digunakan untuk mengkompilasi kode
C++. Bedanya, Borland C++ selain dapat digunakan dibawah lingkungan
DOS, juga dapat digunakan untuk pemrograman Windows.

Pada evolusi selanjutnya, Borland International Inc. mengembangkan kompiler C++ menjadi sebuah kompiler yang mampu mengubah C++ langsung menjadi bahasa mesin (assembly). Sejak evolusi ini, mulai tahun 1990 C++ menjadi bahasa berorientasi obyek yang digunakan oleh sebagian besar pemrogram professional.

Selain Borland International, terdapat beberapa perusahaan lain yang juga merilis
compiler C++, seperti Topspeed C++ dan Zortech C++.

Pengertian C++

C++ adalah sebuah bahasa pemrograman yang memiliki banyak dialek, seperti bahasa orang yang banyak memiliki dialek. Dalam C++, dialek bukan disebabkan oleh karena si pembicara berasal dari Jepang atau Indonesia, melainkan karena bahasa ini memiliki beberapa kompiler yang berbeda. Ada empat kompiler umum yaitu : C++ Borland, C++ Microsoft Visual, C/386 Watcom, dan DJGPP. Anda dapat mendownload DJGPP atau mungkin saja anda telah memiliki kompiler lain.

Setiap kompiler ini agak berbeda. Setiap kompiler akan dapat menjalankan fungsi fungsi standar C++ ANSI/ISO, tetapi masing masing kompiler juga akan dapat menjalankan fungsi fungsi nonstandard (fungsi fungsi ini, agak mirip dengan ucapan yang tidak standar yang diucapkan orang diberbagai pelosok negeri. Sebagai contoh, di New Orleans kata median disebut neutral ground). Kadang kadang pemakaian fungsi nonstandard akan menimbulkan masalah pada saat anda hendak mengkompilasi kode sumber data (source code) (yaitu program berbahasa C++ yang ditulis oleh seorang programer) mempergunakan kompiler yang berbeda. Tutorial ini tidak terlepas dari masalah seperti itu.

Bila anda belum mempunyai sebuah kompiler, disarankan agar anda segera memiliki sebuah kompiler. Sebuah kompiler sederhana sudah cukup untuk dipergunakan oleh anda dalam mengikuti tutorial ini.

Bahasa pemrograman C++ adalah bahasa yang amat berbeda. Untuk kompiler C++ berbasis DOS, akan memerlukan beberapa kata kunci (keywords); keyword sendiri tidak cukup untuk difungsikan sebagai input dan output. Walau hampir semua fungsi dalam file library tampaknya bias diakses oleh header filenya.


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

using namespace std;

int main()
{
    string moral;
    float tgs,uts,uas,Na;

    cout << "Masukkan nilai tugas : ";cin>>tgs;
    cout << "Masukkan nilai uts : ";cin>>uts;
    cout << "Masukkan nilai uas : ";cin>>uas;
    cout << "Masukkan nilai moral baik atau buruk : ";cin>>moral;

    if (moral=="baik" || moral=="Baik" )
    {
        Na=1*(0.2*tgs + 0.3*uts + 0.5*uas);
        cout<<"Nilai Anda : "<<Na;
    }
    else if(moral=="buruk" || moral=="Buruk")
    {
        Na=0*(0.2*tgs + 0.3*uts + 0.5*uas);
        cout<<"Nilai Anda : "<<Na;
    }

    getch();
    return 0;
}