Membuat Array dan Stack C++ ?

LAPORAN PRAKTIKUM
ALGORITMA DAN PEMOGRAMAN II
PERTEMUAN III
NAMA
SITI NUR HALISAH
NIM
A1316115
TEKNIK INFORMATIKA
POLITEKNIK NEGERI TANAH LAUT
2017



A.  Latihan membuat program sederhana menggunakan Array
1.    Buatlah program untuk menampilkan output sebagai berikut.
Diketahui data nilai sebagai berikut.
Elemen ke
0
1
2
3
4
5
6
7
8
9
nilai
45
34
23
34
32
12
65
76
34
23
Dengan output:
Nilai maksimum :76
Nilai minimum   :12
Bilangan yang akan dicari :23
Bilangan ditemukan di elemen :2
Bilangan ditemukan di elemen :9
Bilangan yang akan dicari :30
Bilangan tersebut tidak ditemukan
2.    Membuat program menghitung penjumlahan matriks 3x3.
3.    Membuat program menghitung perkalian matriks 3x3.

B.  Latihan membuat program sederhana menggunakan stack
1.      Buatlah program untuk konversi infix ke postfix
Outputnya sebagai berikut:
2.      Buatlah sebuah program yang melakukan pembalikan terhadap kalimat dengan menggunakan stack.
Contoh :
Kalimat                         : Struktur Data
Hasil setelah dibalik     : ataD rutkurtS

C.  PENYELESAIAN
1.    Program untuk menampilkan output.
#include <iostream>
using namespace std;
int main ()
{
    int data[10]={45,34,23,34,32,12,65,76,34,23};
    int a,b,c;
    int max,min;
    int cari[2];
    int n;
    cout<<"NILAI= 45,34,23,34,32,12,65,76,34,23"<<endl;
    max=data[1];
    min=data[1];
    for (a=0; a<10; a++)
    {
        if (data[a]>=max)
        (max=data[a]);
        else if (data[a]<=min)
        (min=data[a]);
    }
    cout <<" Nilai maksimum : "<<max<<endl;
    cout <<" Nilai minimum  : "<<min<<endl;
    cout <<endl;
    cout <<endl;
    for (b=0; b<2; b++)
    {
        cout <<" Bilangan yang akan dicari \t: ";
        cin>>cari[b];
        n=0;
        for (c=0; c<10; c++)
        {
            if (data[c]==cari[b])
            {
                cout <<" Bilangan ditemukan di elemen   : "<<c<<endl;
                n++;
            }
        }
        if (n==0)
        {
            cout <<" Bilangan tersebut tidak ditemukan"<<endl;
        }
        else
        cout <<" Jumlah data : "<<n<<endl;
        cout <<endl;
    }
}

Penjelasan
Baris
Penjelasan
1
#include <iostream> untuk header perintah cout dan cin
3
Agar tidak menambahkan sdt:: sebelum mengetikkan perintah cout dan cin
5
Fungsi utama
7
Deklarasi variable data[10] dan sudah terinisialisasi nilai
8
Deklarasi variable a, b, dan c untuk pernyataan for
9
Deklarasi max dan min bertipe data integer untuk menentukan nilai terbesar dan terkecil
10
Deklarasi variable cari[2] yang bertipe data integer dan sudah terinisialisasi nilai
11
Deklarasi variable n bertipe data integer untuk jumlah data yang ditemukan
14
Deklarasi nilai max samadengan nilai pada elemen ke-1 dari variable data[10]
15
Deklarasi nilai min samadengan nilai pada elemen ke-1 dari variable data[10]
17
Pernyataan for untuk perintah perulangan dari baris 18 – 24 sebayak 10 kali perulangan
19
Pemilihan kondisi jika nilai dari variable data[a] lebih dari atau sama dengan max, maka baris 20 akan berjalan
22
Pemilihan kondisi jika nilai dari variable data[a] kurang dari atau sama dengan min, maka baris 23 akan berjalan
26
Menampilkan nilai terbesar
27
Menampilkan nilai terkecil
31
Pernyataan for untuk perintah perulangan dari baris 32 – 53 sebayak 2 kali perulangan
33
Tampilan bilangan yang dicari
34
Defenisi nilai variable n samadengan 0
36
Pernyataan for untuk perintah perulangan dari baris 37 – 43 sebayak 10 kali perulangan
38
Pemilihan kondisi jika nilai dari variable data[10] sama dengan nilai variable cari[2], maka perintah pada baris 39 – 42 akan berjalan
45
Pemilihan kondisi jika nilai dari variable n sama dengan 0, maka perintah pada baris 46 – 48 akan berjalan
50
Pemilihan kondisi jika kondisi pada baris ke- 45 tidak terpenuhi maka kondisi pada baris ke- 50 akan berjalan
Hasil running program :
2.      Program menghitung penjumlahan matriks 3x3.
#include<iostream>
#include <iomanip>
#include<conio.h>
#include<stdlib.h>//jika di program ada system cld tanpa stdlib maka program error
using namespace std;
float A[10][10];
float B[10][10];
float C[10][10];
int a,b;//menunjukan baris dan kolom
int i,j;
main()
{
    cout << "=================================="<<endl;
    cout << "Operasi Penjumlahan Matrix\n";
    cout << "=================================="<<endl;
    cout<< "Masukan Jumlah Baris:";
    cin>>a;
    cout<< "Masukan Jumlah Kolom:";
    cin>>b;
    system("cls");
    cout << "\nMatrix A" << endl;
    for(i=0; i<a; i++)//i dimulai dari angka 1 dicetak sampai a dimana a adalah inisialialisasi baris  setiap i pertambahan 1
    {
        for(j=0; j<b;j++)//j dimulai dari angka 0 dicetak sampai b dimana b adalah inisialisasi kolom dimana pertambahan 1
        {
            cout<< "A[" << (i + 1) << "," << (j + 1) << "] = ";
            cin>>A[i][j];
        }
    }
    cout << "\nMatrix B" << endl;
    for (i=0; i<a; i++)
    {
         for(j=0; j<b; j++)
        {
            cout<< "B[" << (i+1)<< "," << (j+1) << "] = ";
            cin>>B[i][j];
        }
    }
        for(i=0; i<a; i++)
    {
        for(j=0; j<b; j++)
        C[i][j]=A[i][j] + B[i][j];
    }
        cout<< "Hasilnya...."<<endl;
        cout<< "Matrix A + Matrix B = Matrix C"<<endl;
        for(i=0; i<a; i++)
        {
            {
                cout<<'\n';
                for(j=0; j<b; j++)
                cout << setw(4) << A[i][j];
                cout << "     ";
                {
                    for(j=0; j<b; j++)
                    cout << setw(4) << B[i][j];
                    cout << "    ";
                }
                {
                    for(j=0; j<b; j++)
                    cout << setw(4) << C[i][j];
                    cout << endl;
                }
            }
        }
        getch();
}
Penjelasan :
Program ini merupakan program matrik penjumlahan ordo 3 x 3 menggunakan array 2 dimensi dimana dengan cara menginputkan banyak baris dan kolom dimana for pertama untuk menetukan baris dan for kedua untuk menentukan kolom.
Hasil running program
3.      Program menghitung perkalian matriks ordo 3 x 3
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int i,j,k,hasil;
    int MA[3][3];
    int MB[3][3];
    int MC[3][3];
    cout<<"\t+++++++++++++++++++++++++++++++++++++"<<endl;
    cout<<"\t+ PROGRAM PERKALIAN MATRIK ORDO 3X3 +"<<endl;
    cout<<"\t+++++++++++++++++++++++++++++++++++++"<<endl<<endl;
    //Input Matrik A
    cout<<" Inputkan Matrik A "<<endl;
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
           cout<<" A "<<"["<<i+1<<","<<j+1<<"]"<<" = ";
           cin>>MA[i][j];
        }
    }
    //Input Matrik B
    cout<<endl;
    cout<<" Inputkan Matrik B "<<endl;
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
           cout<<" B "<<"["<<i+1<<","<<j+1<<"]"<<" = ";
           cin>>MB[i][j];
        }
    }
    cout<<endl;
    cout<<" Perkalian Matrik A x Matriks B "<<endl;
    //Output Matriks A
    cout<<"\n Matriks A :";
    for(i=0; i<3; i++)
    {
        cout<<endl;
        for(j=0; j<3; j++)
        {
            cout<<setw(3)<<MA[i][j];
        }
    }
    //Output Matriks B
    cout<<"\n Matriks B :";
    for(i=0; i<3; i++)
    {
        cout<<endl;
        for(j=0; j<3; j++)
        {
            cout<<setw(3)<<MB[i][j];
        }
    }
    //Operasi Perkalian
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            MC[i][j]=0;
            for(k=0;k<3;k++)
            {
                hasil= MA[i][k]*MB [k][j];
                MC[i][j]=MC[i][j]+hasil;
                //MC[i][j]+=MA[i][j]*MB[k][j];
            }
        }
    }
    //Output Perkalian Hasil Matriks C
    cout<<"\n Matriks C :";
    for(i=0; i<3; i++)
        {
        cout<<endl;
        for(j=0; j<3; j++)
        {
            cout<<setw(3)<<MA[i][j];
        }
        for(j=0; j<3; j++)
        {
            cout<<setw(3)<<MB[i][j];
        }
        cout<<" = ";
        for(j=0; j<3; j++)
        {
            cout<<setw(3)<<MC[i][j];
        }
        }
    return 0;
}
Penjelasan
Ini merupakan program perkalian matriks ordo 2 x 2 dimana dalam program perkalian matriks menggunakan array 2 dimensi. Dalam program ini ada beberapa variabel yaitu variabel i,j,k,dan hasil. Dalam perulangan ini variabel i untuk baris sedangkan variabel j untuk penginputan kolom dimana perulangan akan terus mengulang sebanyak jumlah yang kita inputkan.
Hasil running program :
4.      Program konvensi infix ke postfix
#include <iostream>
#include <sstream>
#include <stack>
#include <limits>
#include <string>
using namespace std;
int priority(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 << "Masukan Infix : ";
    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() && priority(opr_stack.top()) <= priority(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 : " << postfix.str() << endl;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    return 0;
}
Penjelasan
-Infix
 Bentuk Infix merupakan bentuk penulisan normal dari ekspresi aritmatika.Suatu infix dapat berupa operand tunggal,atau gabungan dari unary operator dengan infix,ataupun berupa gabungan dari binary operator dengan dua buah infix.
-Postfix
Bentuk Postfix adalah metode penulisan dengan menuliskan operator setelah operand dan tanpa menuliskan tanda kurung,dimana operator berada dibelakang operand.
Hasil running program :
5.      Program pembalikan terhadap kalimat dengan menggunakan stack.
//program yang dapat membalikkan kalimat dengan menggunakan stack
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#define maxstack 200
using namespace std;
struct STACK        //membuat jenis data abstrak stack
{
    int top;
    char data[maxstack]; // pendeklarasian untuk menginputkan suatu kalimat dengan maks 200
};
char dta[maxstack];
struct STACK stackbaru;
bool isfull()        // fungsi untuk mengetahui apakah stack dalam kondisi penuh (menggunakan boolean)
{
    if (stackbaru.top == maxstack-1)
  return true; // jika pengkondisian stack dalam keadaan penuh maka benar
    else
  return false;
}
bool isempty()      // fungsi untuk mengetahui apakah stack dalam kondisi kosong
{
    if (stackbaru.top == -1)
  return true;
    else
  return false;
}
void push(char dta) // fungsi untuk proses push
{
    if (isfull() == false) // jika kondisi stack tidak penuh
    {
        stackbaru.top++;// user menginputkan data dengan menggunakan variabel dta dimana dta tersebut akan disimpan di stackbaru yang paling atas
  stackbaru.data[stackbaru.top]=dta; // increment, yang bermksud jika penginputan dta lagi maka akan tersimpan diatas dta sebelumnnya
    }
    else // jika stack dalam kondisi penuh
    {
        cout << "\nMaaf Stack penuh";
    }
}
void pop()            //mengambil isi stack
{
    while (isempty() == false) // jika kondisi stack tidak kosong
    {
            cout<<stackbaru.data[stackbaru.top]; // akan menampilkan data di stack dimana data tersebut berada yang paling atas
            stackbaru.top--; // decrement, maksudnya jika user memilih menu pop lagi maka rogam akan menampilkan data dibawah data yang telah terambiil sebelumnya
    }
}
void print()        //mencetak stack
{
 system ("cls");
    cout<<"\nKalimat awal : ";
    for (int i=0; i<=stackbaru.top; i++) // diulang sebanyaknya data yang tersimpan didta
    {
        cout<<stackbaru.data[i];
    }
}
void clear()
{
    stackbaru.top = -1;
}
int main()
{
    char kata[200]; //menampung inputan
    cout<< "Masukkan kalimat : ";
 gets(kata);
 cout << endl;
    for(int i=0; kata[i]; i++)
 {
        push(kata[i]);
 }
print();
cout << endl;
cout<<"Dibalik jadi : ";
pop();
cout<<"\n";
}
Penjelasan
Ini merupakan program pembalikan kata menggunakan stack ada beberapa ketentuan yaitu char data[maxstack];untuk pendeklarasian menginputkan suatu kalimat dengan maks 200. bool isfull() berfungsi fungsi untuk mengetahui apakah stack dalam kondisi penuh (menggunakan boolean),  return true berfungsi jika pengkondisian stack dalam keadaan penuh maka benar, bool isempty() berfungsi untuk mengetahui apakah stack dalam kondisi kosong,    if (isfull() == false)berfungsi jika kondisi stack tidak penuh.        stackbaru.top++berfungsi user menginputkan data dengan menggunakan variabel dta dimana dta tersebut akan disimpan di stackbaru yang paling atas stackbaru.data[stackbaru.top]=data berfungsi increment, yang bermksud jika penginputan dta lagi maka akan tersimpan diatas data sebelumnnya cout<<stackbaru.data[stackbaru.top] berfungsi akan menampilkan data di stack dimana data tersebut berada yang paling atas stackbaru.top--; berfungsi decrement, maksudnya jika user memilih menu pop lagi maka rogam akan menampilkan data dibawah data yang telah terambiil sebelumnya.
Hasil running program :

Comments