Algoritma untuk Penjumlahan, Pengurangan, dan Perkalian Matriks

program jum_matriks

kamus

matriks1,matriks2,matriks3 : array [1..2,1..2] of integer

A,B,C,D,X,Y : integer

Algoritma

{input matriks1}

A transversal [1..2]

begin

B transversal [1..2]

input ( matriks1[A,B] )

end

{input matriks2}

C transversal [1..2]

begin

D transversal [1..2]

input ( matriks2[C,D] )

end

{jumlahkan kedua matriks}

Y transversal [1..2]

begin

X transversal [1..2]

matriks3[Y,X] (matriks1[Y,X] + matriks2[Y,X])

output( matriks3[Y,X] )

end

===================================================

program pengurangan_matriks

kamus

matriks1,matriks2,matriks3 : array [1..2,1..2] of integer

A,B,C,D,X,Y : integer

Algoritma

{input matriks1}

A transversal [1..2]

begin

B transversal [1..2]

input ( matriks1[A,B] )

end

{input matriks2}

C transversal [1..2]

begin

D transversal [1..2]

input ( matriks2[C,D] )

end

{kurangi kedua matriks}

Y transversal [1..2]

begin

X transversal [1..2]

matriks3[Y,X] (matriks1[Y,X] - matriks2[Y,X])

output( matriks3[Y,X] )

end

===================================================

program perkalian_matriks

kamus

matriks1,matriks2,matriks3 : array [1..2,1..2] of integer

A,B,C,D,X,Y : integer

Algoritma

{input matriks1}

A transversal [1..2]

begin

B transversal [1..2]

input ( matriks1[A,B] )

end

{input matriks2}

C transversal [1..2]

begin

D transversal [1..2]

input ( matriks2[C,D] )

end

{perkalian kedua matriks}

Y transversal [1..2]

begin

X transversal [1..2]

if X = 1 then

begin

matriks3[Y,X] ( (matriks1[Y,X] * matriks2[Y,X]) + ( matriks1[Y,2] * matriks2[2,X] ) )

output( matriks3[Y,X] )

end

else

begin

matriks3[Y,X] ( (matriks1[Y,X] * matriks2[Y,2]) + ( matriks1[Y,2] * matriks2[2,2] ) )

output( matriks3[Y,X] )

end

Mesin Abstrak: Studi Mesin Karakter

Minggu ini, saya mempelajari mesin abstrak, salah satu studi penting dalam algoritma. Menurut Inggriani Liem, Mesin abstrak adalah mesin yang dianggap ada, dan diasumsikan mampu melakukan mekanisme yang didefinisikan untuk mesin tersebut. (Kenapa bahasanya susah banget dimengerti sih?).

Kalau saya analogikan begini. Komputer adalah benda mati yang paling bodoh sedunia. Dia hanya mampu memproses instruksi primitif paling dasar (seperti kalkulator), seperti:
"ambil nomor pertama dari memori"
"ambil nomor kedua dari memori"
"Jumlahkan Kedua nomor"
"Simpan hasilnya di memori"

Jelas, kan bahwa komputer itu bodoh? Nah agar si komputer ini bisa menyelesaikan masalah lain yang lebih kompleks, maka si pemrogram harus mendefinisikan suatu mekanisme yang disebut juga mesin abstrak. Mesin ini akan menuntun komputer untuk menyelsaikan masalah lain, seperti menghitung jumlah kata (contoh: word count dalam MS Word), mengitung jumlah huruf, atau seperti program untuk membalik kalimat, seperti contoh sederhana di bawah ini.



Program Balik_Kalimat
{Program untuk membalik kalimat}

Kamus
pita_karakter:string {input kalimat user}
kata_balik:string {variabel untuk menampung kata yang sudah dibalik}
procedure balik
{I.S: kata_balik}
{F.S: CC + kata_balik}

Algoritma
input(pita_karakter)
Start
while (CC ≠ '.') do
begin
balik
ADV
end
output(kata_balik)



procedure balik

Kamus

Algoritma:
kata_balik ← CC + katabalik

Algoritma Deret Bil.Prima dan Deret Fibonacci

Utuk bisa membuat deret bilangan prima dan Deret Fibonacci, kita harus mengetahui definisinya dulu.

Bilangan Prima adalah bilangan yang hanya memiliki dua faktor yaitu angka 1 dan bilangan itu sendiri atau bilangan yang hanya bisa dibagi dengan angka 1 dan bilangan itu sendiri. Artinya, dalam algoritma, bilangan itu hanya bernilai 0 bila di mod oleh 1 dan bilangan itu sendiri.
Kunci penyelesaian:
1. Menggunakan pengulangan dan sekuensial
2. Analisa kasus dengan if

Sedangkan Deret Fibonacci adalah suatu deret matematika yang berasal dari penjumlahan dua bilangan sebelumnya. Artinya suku ke-3, merupakan penjumlahan dari suku ke-2 dan suku pertama. Contoh:
1, 1, 2, 3, 5, 7, 12, 19, …
kunci penyelesaian:
1. Menggunakan pengulangan dan sekuensial
2. Analisa kasus dengan if

Tampak bahwa antara Deret bil.prima dan deret fibonacci berada dalam topik yang sama dalam Algoritma. Saya membuatnya dalam 2 cara; Algoritma pseudo-code (untuk konsep) dan dalam bahasa pascal (pengujian).

Algoritma Pseudo Code
a. Deret Bil.Prima
program Deret_bil_prima
{Dibaca n input, kemudian menuliskan sejumlah n bil.prima}

Kamus:
n,c,j,i:integer

Algoritma:
input (n)
j traversal [1..N]
begin
c ← 0
i traversal [1..J]
begin
if j mod i = o then
c ← c+1
end
if c=2 then
output(j) {output bilangan prima}
end

b. Deret Fibonacci
program deret_fibonacci
{Dibaca a input, kemudian menuliskan sejumlah a Deret Fibonaci}

Kamus:
a,b,c,d,e:integer

Algoritma:
input (a)
c ← 1;
d ← 1;
b traversal [1..a]
begin
if (b=1) or (b=2) then
output(c) {dua deret fibonacci awal selalu bernilai 1}
else
begin
e ← c+d {hasil penjumlahan 2 deret sebelumnya}
c ← d
d ← e {tukar posisi)
output (e)
end
end

Pengujian Algoritma dalam Bahasa Pascal

Pascal tidak mengenal traversal untuk peningkatan bilangan + 1 (mengurutkan 1,2,3,4,...). Yang ada adalah for-to-do

a. Deret Bil.Prima

program deret_bil_prima;
var
a,c,j,i:integer;
begin
write('Masukan angka :');readln(a);
for j:=1 to a do
begin
c:=0;
for i:=1 to j do
begin
if j mod i = 0 then
c:=c+1;
end;
if c=2 then
write(j,' ')
end;
readln;
end.

b. Deret Fibonacci

program fibonacci;
var
a,b,c,d,e:integer;
begin
writeln('masukan bilangan : ');readln(a);
c:=1;
d:=1;
for b:=1 to a do
begin
if (b=1)or(b=2) then
write(c,' ')
else
begin

e:=c+d;
c:=d;
d:=e;
write(e,' ');
end;

end;
readln;
end.

Sekuensial dan Looping berguna bila kita menemui masalah yang berulang-ulang dan memiliki pola tertentu.