Wednesday, October 28, 2009

Algoritma percabangan

1.PERCABANGAN
Penggunaan If Else
Di gunakan untuk menguji sebuah kondisi dimana kondisi, bila kondisi yang di uji terpenuhi maka program akan melakukan pernyataan-pernyataan tertentu & bila kondisi yang di uji salah maka program akan menjalankan pernyataan lain.
Bentuk umumnya adalah :
If kondisi …..
Begin…
Pernyataan – pernyataan yang di jadikan bila kondisi benar
End………
Else…..
Pernyataan –pernyataan yang di jalan kan jika kondisi salah
K = Jika kondisi benar maka kerjakan K + 1? K + i, jika tidak maka kerjakan K + i + 1? K + r
K+1
----- Pernyataan-pernyataan dijalankan jika kondisi benar
K+i

K + i + 1
------ Dijalankan jika kondisi salah
K + r
Flowchart :

Contoh :
Begin
Read(x);
If ( x > 0 ) then
Writeln (‘x bilangan positif’);
Else
Writeln (‘x bukan bilangan positif’);
Writeln (x);
End.
Langkah – langkahnya adalah sebagai berikut :
1.Mulai
2.Masukkan x
3.Jika x > 0 maka kerjakan 4, jika tidak maka kerjakan 5
4.Tulis (‘x bilangan positif’)
5.Tulis (‘x bukan bilangan positif’)
6.Tulis (x)
7.Selesai
Bila ada lebih dari 2 pernyataan ( pernyataan if, else, if )
If kondisi 1 then
Begin
Pernyataan 1;
Else if kondisi 2 then
Begin
Pernyataan 2;
End;
-------------------------
-------------------------
Else if kondisi then
Begin
Pernyataan;
End.
Contoh lebih dari 2 pernyataan :
Read (x);
If (x > 0) then
Writeln (‘x bilangan positif’);
Else if (x < 0) then
Writeln (‘x bilangan negatif’);
Else
Writeln (‘x adalah nol’);
Writeln (x);
End.
Algoritmanya adalah :
1.Mulai
2.Masukkan x
3.Jika x > 0 maka tulis (‘x bilangan positif’)
4.Jika x < 0 maka tulis (‘x bilangan negatif’)
5.Jika x = 0 maka tulis (‘x adalah nol’)
6.Tulis x
7.Selesai
Bentuk flowchartnya :

Latihan soal :
Tulis algoritma yang menampilkan bilangan genap jika suatu bilangan adalah bilangan genap dan bilangan ganjil jika suatu bilangan adalah bilangan ganjil.
Jawab :
Algoritmanya :
1.Mulai
2.Masukkan x
3.Jika x mod 2 = 0 maka tulis (‘bilangan genap’)
4.Jika x mod 2 =1 maka tulis (‘bilangan ganjil’)
5.Tulis x
6.Selesai
Bentuk flowchartnya :

Tugas :
Tulis algoritma untuk menghitung akar-akar persamaan kuadrat ax2 + bx + c = 0 x1,2 = -b +
Jawab :
Algoritmanya :
1.Mulai
2.Masukkan A
3.Masukkan B
4.Masukkan C
5.Hitung D ( sqr (b) – ( 4 * A + B )
6.Jika D > 0 maka kerjakan sub program 7
7.Mulai
Hitung X1 = ((-b) + sqrt (D) / phi * A )
Hitung X2 = ((-b) - sqrt (D) / phi * A )
Tulis X1
Tulis X2
Selesai
8.Jika D < 0 tulis “Persamaan tidak memiliki akar nyata”
9.Tulis ‘ax2 + ‘b’x +’c’ = 0’
10.Selesai
Bentuk flowchart

b

s

Program latihan;
Uses crt;
Var
Real : a, b, a, D, X1, X2;
Begin
Writeln (‘masukkan nilai a !’);
Readln (a);
Writeln (‘masukkan nilai b !’);
Readln (b);
Writeln (‘masukkan nilai c !’);
Readln (c);
D := ( sqr (b) – ( 4*a*c );
If D > 0 then
Begin
X1 := ((-b) + sqrt (D) / 2 * A );
X­2 := ((-b) – sqrt (D) / 2 * A );
Writeln (‘X1 = ‘,X1);
Writeln (‘X2 = ‘,X2);
End;
Else
Writeln (‘Persamaan tidak memiliki akar nyata’);
Writeln (‘ax2 + ‘b’x +’c’ = 0’);
End.

2.Pengulangan
Pernyataan For
For pencacah := nilai awal to nilai akhir do
Begin
Pernyataan-pernyataan yang akan diulang
End.
Bentuk umumnya
K – pencacah = nilai awal
K+1 selama pencacah < = nilai akhir kerjakan K+2 – K+i
K+2
------- Pernyataan-pernyataan yang akan diulang
K+ -1
K+i pencacah = pencacah + 1

Bentuk flowchart

Contoh :
Program pascal :
Begin
Read (X);
For I := 1 to 10 do
X = X + 1;
Writeln (X);
End.
Algoritmanya :
1.Mulai
2.Masukkan x
3.I = 1
4.Selama I < = 10 kerjakan 5 – 6
5.X = X + 1
6.I = I + 1
7.Tulis (x)
8.Selesai
Flowchartnya :

Benar

Salah

Pernyataan for bersarang
For pencacah1 = nilai awal1 to nilai akhir1 do
Begin
For pencacah2­ = nilai awal2 to nilai akhir2 do
Begin
Pernyataan-pernyataan yang akan diulang
End;
End.
Bentuk umum
K – pencacah1 = nilai awal1
K + 1 selama pencacah1 = < = nilai akhir1 kerjakan K + 2 – K + I + 1
K + 2 selama pencacah2
K + 3 selama pencacah2 <= nilai akhir2 kerjakan K + 4 – K + I
K + 4
------- Pernyataan2 yang akan diulang
K + I – 1
K + 1 pencacah2 = pencacah2 + 1
K + I + 1 pencacah1 = pencacah1 + 1
Bentuk umum flowchart / diagram alir :

S B

Contoh :
Buat algoritma untuk menampilkan semua bilangan genap yang lebih kecil 1 = 100.
Jawab :
1.Mulai
2.I = 1
3.Selama I <= 100 kerjakan 4
4.Jika 1 mod 2 = 0 maka kerjakan 5
Jika tidak maka kerjakan 6
5.Tulis (I)
6.I = I + 1
7.Selesai
Bentuk flowchartnya :

Pernyataan While
Bentuk program pascal dari pernyataan while :
While condition do
Begin
Pernyataan2 yang akan diulang jika kondisi benar
End.
Bentuk umum :
-------
K = selama kondisi kerjakan K + 1 – K + I
K + 1
------- pernyataan2 yang akan diulang jika kondisi benar
K + I
Bentuk flowchartnya :

Pernyataan Repeat … Until
Bentuk program dalam pascal :
Repeat
Pernyataan-pernyataan yang akan diulang bila pernyataan masih salah
Until
Kondisi
Bentuk umum :
-------
K = ulangi langkah2 K + 1 – K + I sampai kondisi
K + 1
------- Pernyataan2 yang diulang bila kondisi masih salah
K + I
Bentuk flowchartnya :

Pernyataan Break
Digunakan untuk menyatakan sejumlah pengulangan di tengah jalan
Pernyataan Continue
Digunakan untuk memindahkan program dari loop ke – K ke loop K + I
Latihan soal :
Tulis algoritma dari :
Rata2

Jawab :
1.Mulai 12. Rata2 = Y/n
2.Masukkan n 13. Z = 0
3.I = 1 14. I = 1
4.Selama I <= n kerjakan 5 – 6 15. Selama I <= n kerjakan 16 – 21
5.Masukkan X ( I ) 16. Z = 2 + sqr ( X ( I ) – rata2 )
6.I = I + 1 17. I = I + 1
7.Y = 0 18. S = sqr ( z/(n-1) )
8.I = 1 19. Tulis rata2
9.Selama I <= n kerjakan 20. Tulis Y
10.Y = Y + X ( I ) 21. Selesai
11.I = I + 1
3.Pangkat
X2 = sqr ( X )
= sqrt ( X )
Fungsi ex tan Fungsi ln x
ex

Sifat-sifat :
1.e0 = 1 6. ln (xy) = ln x + ln y
2.ex+y = ex . ey 7. ln x/y = ln x . ln y
3.exy = ex/ey 8. ln xn = n . ln x
4.(ex)n = en.x 9. eln x = x
5.ln 1 = 0 10. ln ex = x

ln x

Latihan soal :
F (x) = x3 + 4x2 – 7x + z
3x2 + 8x – 7
x1 = x0
x2 = x1

Algoritmanya :
1.Mulai
2.Masukkan X0
3.f ( X0 = exp ( 3 * ln (x) ) + 4 * exp ( 2 * ln (x) ) – 7 * X + 2
4.f1 x0 = 3 * exp ( 2 * ln (x) ) + 8 * X – 7
5.X1 = X0 – fX0 / f1X­0
6.X0 = X1
7.Jika jarak < 0,01 maka kerjakan 9 jika tidak maka kembali ke 3
8.Tulis ( X1 memenuhi persamaan )
9.Selesai
Program pascalnya
Begin
Read (X0);
Repeat
f ( X0 = exp ( 3 * ln (x) ) + 4 * exp ( 2 * ln (x) ) – 7 * X + 2;
f1 x0 = 3 * exp ( 2 * ln (x) ) + 8 * X – 7;
X1 = X0 – fX0 / f1X­0;
Jarak = abs (X1 – X0);
X0 = X1;
Until (jarak < 0,01)
Writeln ( X1 memenuhi persamaan )

4.Subrutin
Procedure
Digunakan untuk melakukan proses terhadap variabel2
Bentuk umum :
Procedure nama procedure ( parameter 1, parameter 2, … )
Begin
Pernyataan-pernyataan
End.
Contoh :
Diket : c = a
a = b
b = c
Hitunglah dengan menggunakan Procedure.
Jawab :
Procedure tukar (a,b : real);
Var
c : real;
Begin
c := a;
a := b;
b := c;
End.

Function
Digunakan untuk menghitung dari variabel2
Bentuk umum :
Function nama fungsi ( parameter 1, parameter 2, … ) : type kembalian


Begin
Pernyataan-pernyataan
End.
Contoh :
Menghitung pangkat.
Jawab :
Function pangkat (n,x : real) : real
Begin
Pangkat := exp (n*ln (x));
End.
Program utamanya
Var
x,y : real
Begin
Read (y);
Z := pangkat (5,y)
Writeln (Z);
End.

Soal latihan :
1.Tulislah program yang meminta masukan dari pengguna dua matrik yang berukuran n x n kemudian menjumlah 2 matrik tersebut
2.tulislah 3 procedure masing-masing untuk meminta masukan matrik dari pengguna, menjumlahkan matrik, menampilkan matrik ke layar
jawab :
program masukkan 2 buah matrik
begin
read (m,n);
for I := 1 to m do
begin
for j := 1 to n do
begin
read (A[i,j]);
read (B[I,j]);
end;
end.
For i := 1 to m do
Begin
For j := 1 to n do
C [I,j] := A [i,j] + B [i,j];
For i := 1 to m do

Begin
For j := 1 to n do
Writeln (‘C[i,j]);
End;
End.

Procedure masukkan matriks
Bentuk umum :
Procedure masukkan matriks ( a : matrix ; n,m : integer );
Var
i, j : integer;
Begin
For I := 1 to m do
Begin
For j := 1 to n do
Read ( a [i, j] );
End;
End.
Procedure jumlah matriks
Bentuk umum :
Procedure jumlah matriks ( A, B : matrix ; var C : matrix; n, m : integer );
Var
I,J : integer;
Begin
For I := 1 to m do
Begin
For J := 1 to n do
C [I,J] := A [I,J] + B [I,J];
End;
End.

Procedure tulis matriks
Bentuk umum :
Procedure tulis matriks ( A : matrix; n,m : integer );
Var
I, J : integer;
Begin
For I := 1 to m do
Begin
For J := 1 to n do
Writeln ( A [I,J] )
End;
End.
Begin
Read (m,n);
Masukkan matrix (A, n, m);
Masukkan matrix (B, n, m);
Jumlahkan matrix (A, B, C, n, m);
Tulis matrix (C, n, m);
End.

Penyelesaian sistem persamaan linear dengan metode Gauss Eliminasi
Begin
Read (n);
For i := 1 to n do
Begin
For j := 1 to n + 1 do
Read (A[i,j]);
End;
For k := 1 to n – 1 do
Begin
For i := 1 to n do

Begin
C := A [i,k] / A [i,k];
For j := 1 to n + 1 do
A [i,j] = A [i,j] – A [i,j] * C;
End;
End;
For i := n downto 1 do
Begin
Z := 0;
For r := i + 1 to n do
Begin
Z := Z (A[i,r] * x [r];
End;
X [i] := (A[i,n+1) – Z) / A [i ,i];
Writeln (‘x[‘i’] =’[i]);
End;
End.

ELIMINASI GAUSS
Const
Max : 25;
Type
Matrik = record
Row, col : byte;
Element : array [1..max, 1..max] of real;
End;
Vektor = record
Row : byte;
Element : array [1..max] of real;
End;

Var x, b : vektor;
A : matrik;
n : integer;
Error : boolean;

Procedure masukkandata;
Var i,j : byte;
Begin
Write (‘jumlah persamaan’);
Readln (n);
A.row := n;
A.col := n ;
b. row := n;
for i := 1 to n do
begin
writeln (‘persamaan ke ‘,i );
for j := 1 to n do
begin
write (‘A[‘, i, ‘, ‘, j, ‘]= ‘);
readln (A.element [i,j]);
end;
end;

procedure eliminasigauss;
var I,j,k : integer;
temp, S : real;
Begin
Error := false;
For i := 1 to A.row – 1 do
For k := i + 1 to A.row do
Begin
If (A.element[i,i] = 0.0 ) then
Begin
Error := true;
Exit;
End;
Temp := A.element [k,i] / A.element[i,i];
For j := i + 1 to A.row do
A.element [k,j] := A.element [k,j] - * temp A.element [i,j];
b.element [k] := b.element [k] – temp * b.element [i];
A.element [k,j] := 0.0 ;
End;
x.row := A.row;
for i := A.row downto 1 do
begin
S := b.element [i];
For j:= i + 1 to A.row do
S := S –A.element [i,j] * x.element [j];

If (A.element [i,i] = 0.0 ) then
Begin
Error := true;
Exit;
End;
x.element [i] := S / A.element [i,i];
end;
end;

Procedure tulishasil;
Var i : byte;
Begin
If (error) then
Begin
Writeln (‘persamaan simultan linear tidak dapat diselesaikan’);
End;
Else
Begin
Writeln;
Writeln (‘penyelesaian persamaan linear simultan : ‘);
For i := 1 to x.row do
Writeln (x.row [i] : 6 : 2 );
End;
End.

Begin
Masukkandata;
Eliminasigauss;
Tulishasil;
End.

5.Rekursi
Adalah kemampuan suatu loding untuk memanggil dirinya sendiri
Contoh :
Function factorial (n : integer) : integer;
Begin
If (n = 0) or (n = 1) then
Factorial := 1
Else
Factorial := n * factorial (n-1);
End;

Factorial (4)
Factorial = 4 * factorial (3)
Factorial = 3 * factorial (2)
Factorial = 2 * factorial (1)
Factorial = 1

Fungsi FTP (m,j,n : integer) : integer;
Begin
If (m = 0) then
FTP := n
Else if (m < n) then
FTP := FTP (n,m)
Else
FTP := (m mod n,n);
End;
Function fungsi (n : integer) : integer;
Begin
If (n = 0) then
Fungsi := 0;
Else if (n = 1) then
Fungsi := 1;
Else
Fungsi := fungsi (n-1) + fungsi (n-2);
End;

BUJURSANGKAR AJAIB

16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1

Algoritma penyusunan bujur sangkar 4m x 4m
1.Isi bujur sangkar dengan nilai 1 s/d 42m secara berurutan
2.Bagi bujur sangkar menjadi berukuran 4m/2 x 4m/2
3.Beri nama elemen2 bujur sangkar dengan kode X11, X12, X13, … , X44
4.Lakukan pertukaran berikut
X11 ? X44, X14 ? X41, X22 ? X33, dan X23 ? X32
5.Apabila setiap elemen bujur sangkar masih terdiri dari bujur sangkar lagi, artinya m > 1, kerjakan lagi baris 2

Const
Max = 128;
Valid : set of byte = [4, 8, 16, 32, 64, 128];
Var i, j, n : byte;
A : array [1..max, 1..max0 of word);

Procedure tukarkotak (dimensi, ofsx, ofsy : byte);
Var i, j : byte;
Center2 : byte;
Center4 : byte;
Begin
Center2 := dimensi div 2;
Center4 := dimensi div 4;
For i := 1 to center4 do
For j := 1 to center4 do

Begin
Tukar (A [ofsy + j, ofsx + i], A [dimensi + ofsy – center4 + j, dimensi + ofsx – center4 + i]);
Tukar (A [ofsy + center4 = j, ofsx + center4 + i], A [ofsy + center2 + j, ofsx + center2 + i]);
Tukar(A [ofsy + center2 + j, ofsx + center4 + i], A [ofsy + center4 + j, ofsx + center2 + i]);
Tukar (A [ofsy + j, dimensi + ofsx – center4 + i], A [dimensi + ofsy – center4 + j, ofsx + i]);

If (center2 > 2) then
Begin
Tukarkotak (center2, ofsx, ofsy);
Tukarkotak (center2, ofsx + center2, ofsy);
Tukarkotak (center2, ofsx, ofsy + center2);
Tukarkotak (center2, ofsx + center2, ofsy + center2);
End;
End;

Begin
Write (‘masukkan dimensi bujur sangkar : ‘);
Readln (n);
If (not (n in valid)) then
Begin
Writeln (‘dimensi bujur sangkar tidak valid ‘);
Halt;
End;

Fillchar (a, sizeof (a), 0);
For i := 1 to n do
For j := 1 to n do
A [i, j] := (i – 1) * n + j;

Tukarkotak (n, 0, 0);
For i := 1 to n do
Begin
For j := 1 to n do
Write (A [i, j] : 3, ‘ ‘ );
Writeln ;
End;
End.

Resensi :
one.indoskripsi.com

No comments:

Post a Comment