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
Post a Comment