Anda di halaman 1dari 21

Contoh -Contoh Teknik Pemrograman VBA,

Contoh-Contoh
Pascal, dan FORTRAN
(Epsilon Machine, Interpolasi dan Eliminasi Gauss)

Setijo Bismo
Departemen Teknik Kimia FTUI
06 Oktober 2015
Perlu untuk SELALU DIINGAT!

Cara-Cara Membuka Editor Macros (“VBA”)

Ö Ingat: + , dapat dipakai untuk:

• Run Macro
• Edit Macro
• Delete Macro
• Options Macro

Ö Ingat: + , dapat digunakan untuk:

• Open Macro Editor


• Edit a Macro (VBA)
Pemrograman VBA Macros untuk Epsilon Machine (#1):

Skematis Pemrograman dan “keterkaitan-letak”

Perhatikan POSISI: A1, B1, C1, A3, B3, C3, D3, A4, B4, C4, D4
Pemrograman VBA Macros untuk Epsilon Machine (#2):

Sub-Program: Scripting atau “Listing Out”

Sub CalcMachineEpsMS(ByRef Eps4 As Single, Iter As Integer)


Eps4 = 1#
Iter = 1
Do While (Eps4 + 1#) > 1#
Eps4 = Eps4 / 2
Iter = Iter + 1
Loop
End Sub

Sub CalcMachineEpsMD(ByRef Eps8 As Double, Iter As Integer)


Eps8 = 1#
Iter = 1
Do While (Eps8 + 1#) > 1#
Eps8 = Eps8 / 2
Iter = Iter + 1
Loop
End Sub
Pemrograman VBA Macros untuk Epsilon Machine (#3):

Main-Program: Scripting atau “Listing Out”

Sub EpsMachine()
Dim Iter As Integer
Dim Eps4 As Single
Dim Eps8 As Double

' Komputasi "Machine Epsilon" dalam SINGLE PRECISION


Call CalcMachineEpsMS(Eps4, Iter)
' Hasil komputasi:
Cells(3, 3) = Eps4
Cells(3, 4) = Iter

' Komputasi "Machine Epsilon" dalam DOUBLE PRECISION


Call CalcMachineEpsMD(Eps8, Iter)
' Hasil komputasi:
Cells(4, 3) = Eps8
Cells(4, 4) = Iter

End Sub
Pemrograman PASCAL untuk Epsilon Machine (#1):

Software Dolphin Bay – EZY PASCAL


Pemrograman PASCAL untuk Epsilon Machine (#2):

Varian lain dalam EZY PASCAL


Pemrograman PASCAL untuk Epsilon Machine (#3):

“SINGLE dan DOUBLE Precision” dalam EZY PASCAL


Pemrograman FORTRAN untuk Epsilon Machine (#1):

Menggunakan FORTRAN “Silverfrost” - PLATO


Pemrograman FORTRAN untuk Epsilon Machine (#2):

Menggunakan FORTRAN “Silverfrost” - PLATO


Pemrograman FORTRAN untuk DERET TAYLOR:
Komputasi untuk rutin: “Sin(x)”
C Menghitung harga sin(x) dengan DERET TAYLOR

Program Sinus

Implicit NONE
Real*8 faktor,x,sum,NUM,DEN
Integer N,I,IG,J

Write(*,'(A,$)') 'INPUT harga x sebagai ''nilai argumen'' : '


Read(*,*) x
Write(*,'(A,$)') 'INPUT harga N sebagai ''jumlah suku'' : '
Read(*,*) N
faktor = 1
sum = x

Do I = 1,N
IG = 2*I + 1
NUM = 1.0
DEN = 1.0
faktor = -1*faktor Write(*,*) 'Harga NUMERIS : ',sum
Do J = 1,IG Write(*,*) 'Harga ANALITIS : ',sin(x)
NUM = NUM*x Read(*,*)
DEN = DEN*J
EndDo Stop
sum = sum + faktor*(NUM/DEN) End
EndDo
Pemrograman PASCAL untuk DERET TAYLOR:
Komputasi untuk rutin: “Sin(x)”
{ Menghitung harga sin(x) dengan DERET TAYLOR }
Program Sinus;
Var
faktor,x : Extended;
sum,NUM,DEN : Extended;
N,I,IG,J : Integer;
Begin
Write('INPUT harga x sebagai ''nilai argumen'' : '); Readln(x);
Write('INPUT harga N sebagai ''jumlah suku'' : '); Readln(N);
faktor := 1;
sum := x;
For I := 1 to N do
Begin Writeln('Harga NUMERIS : ',sum);
IG := 2*I + 1; Writeln('Harga ANALITIS : ',sin(x));
NUM := 1.0; Readln;
DEN := 1.0; End.
faktor := -1*faktor;
For J := 1 to IG do
Begin
NUM := NUM*x;
DEN := DEN*J;
End;
sum := sum + faktor*(NUM/DEN);
End;
Pemrograman VBA untuk DERET TAYLOR:
Komputasi untuk rutin: “Sin(x)”
{ Menghitung harga sin(x) dengan DERET TAYLOR }
Program Sinus;
Var
faktor,x : Extended;
sum,NUM,DEN : Extended;
N,I,IG,J : Integer;
Begin
Write('INPUT harga x sebagai ''nilai argumen'' : '); Readln(x);
Write('INPUT harga N sebagai ''jumlah suku'' : '); Readln(N);
faktor := 1;
sum := x;
For I := 1 to N do
Begin Writeln('Harga NUMERIS : ',sum);
IG := 2*I + 1; Writeln('Harga ANALITIS : ',sin(x));
NUM := 1.0; Readln;
DEN := 1.0; End.
faktor := -1*faktor;
For J := 1 to IG do
Begin
NUM := NUM*x;
DEN := DEN*J;
End;
sum := sum + faktor*(NUM/DEN);
End;
Pemrograman PASCAL untuk SPAL (Bab IV) [#1]:
Program untuk Komputasi: “Eliminasi Gauss”
{INPUT A => Masukkan harga komponenen
MATRIKS A}
Program Eliminasi_Gauss; A[1,1] := 6; A[1,2] := 3; A[1,3] := 2;
A[2,1] := 3; A[2,2] := 5; A[2,3] := 7;
Const A[3,1] := 2; A[3,2] := 4; A[3,3] := 3;
NofEqn = 5; {AKHIR dari INPUT A}

Type {INPUT b => Masukkan harga komponenen


RVector = Array[1..NofEqn] of Real; VEKTOR b}
RMatrix = Array[1..NofEqn,1..NofEqn] of Real; b[1] := 26;
b[2] := 26;
{ === PROGRAM UTAMA === } b[3] := 17;
{AKHIR dari INPUT b}
Var
A : RMatrix; { ---> Pembentukan MATRIKS DIAGONAL ATAS <---
b,x : RVector; }
I,J,K,N : Integer; For I:=1 to N-1 do
Diag,FMul,Sum : Real; Begin
Diag := A[I,I];
Begin For J:=I+1 to N do
{ ---> Seksi ELIMINASI GAUSS <--- } Begin
{INPUT N => Masukkan Jumlah Persamaan} FMul := A[J,I]/Diag;
N := 3; For K:=I to N do A[J,K] := A[J,K] - A[I,K]*FMul;
{AKHIR dari INPUT N} b[J] := b[J] - b[I]*FMul;
End;
End;
{ ---> AKHIR dari Pembentukan MATRIKS
Pemrograman PASCAL untuk SPAL (Bab IV) [#2]:
Program untuk Komputasi: “Eliminasi Gauss”
Writeln('Matriks DIAGONAL ATAS dan
VEKTOR RUAS KANAN:');
For I:=1 to N do
Begin
For J:=1 to N do write(A[I,J]:1:4,' ');
writeln(b[I]:1:4);
End;

DIAGONAL ATAS <--- } Writeln;


Writeln('HASIL, berupa VEKTOR JAWAB:');
{ ---> Backsubstitution <--- } For I:=1 to N do Writeln('x[',I,'] = ',x[I]:1:6);
x[N] := b[N]/A[N,N]; End.
For I:=N-1 downto 1 do
Begin { === AKHIR dari Program Utama === }
Sum := 0.0;
For J:=N downto I+1 do Sum := Sum + A[I,J]*x[J];
x[I] := (b[I] - Sum)/A[I,I];
End;
{ ---> AKHIR dari Backsubstitution <--- }

{ ---> AKHIR dari Seksi Eliminasi GAUSS <--- }


Pemrograman FORTRAN untuk “Regresi Linier” [#1]

C Regresi Persamaan POLINOMIAL order 2 menggunakan


C Netode Eliminasi Gauss-Jordan untuk Solusi SPAL
C (Sistem Persamaan Aljabar Linier)
C
C ---------------------------------
C Deklarasi Jenis dan Variabel:
C ---------------------------------
IMPLICIT NONE
CHARACTER*12 NamaFile
INTEGER iarg,NDAT
PARAMETER (iarg = 7)
PARAMETER (NDAT = 25)
INTEGER i,j,ND,neq
REAL*8 A(iarg,iarg)
REAL*8 b(iarg),x(iarg)
REAL*8 Xi(NDAT),Yi(NDAT)
DOUBLE PRECISION SumXX(0:4),SumXY(3)
CALL system('cls')

WRITE(*,7) 'Enter Nama FILE (12 karakter maks.) : '


7 FORMAT(A,$)
READ(*,*) NamaFile
OPEN (9,FILE=NamaFile)
READ(9,*) ND
Pemrograman FORTRAN untuk “Regresi Linier” [#2]
DO I=0,4
SumXX(I) = 0.0
END DO
DO I=1,3
SumXY(I) = 0.0
END DO
SumXX(0) = ND
DO J=1,ND
READ(9,*) Xi(J),Yi(J)
SumXX(1) = SumXX(1) + Xi(J)
SumXX(2) = SumXX(2) + Xi(J)**2
SumXX(3) = SumXX(3) + Xi(J)**3
SumXX(4) = SumXX(4) + Xi(J)**4
SumXY(1) = SumXY(1) + Yi(J)
SumXY(2) = SumXY(2) + Xi(J)*Yi(J)
SumXY(3) = SumXY(3) + Xi(J)**2*Yi(J)
END DO
C Pengolahan DATA menjadi Koefisien MATRIKS:
DO I=1,3
DO J=1,3
A(I,J) = SumXX(6-I-J)
END DO
B(I) = SumXY(4-I)
END DO
Pemrograman FORTRAN untuk “Regresi Linier” [#3]

C Proses Pemasukan JUMLAH PERSAMAAN:


C ----------------------------------
neq = 3

C Proses Pemanggilan Subprogram Eliminasi Gauss-Jordan:


C -----------------------------------------------------
CALL EGAUSS(neq,A,x,b)

C Pemaparan/penyajian Hasil Perhitungan:


C --------------------------------------
DO i = 1,neq
WRITE(*,40) 'x(',i,') = ',x(i)
ENDDO

40 FORMAT (5X,A,I1,A,F12.7)
STOP
END
Pemrograman FORTRAN untuk “Regresi Linier” [#3]

SUBROUTINE EGAUSS(n,A,x,b)
C --------------------------------------------------------
C SUBROUTINE ELIMINASI GAUSS (tanpa "PIVOTING"):
C Solusi SISTEM Persamaan Aljabar Linier (SPAL) dengan
C format pers. matriks: [A].[x] = [b], dengan rincian sbb:
C n = jumlah persamaan aljabar linier (dimensi SPAL)
C A = matriks bjr sangkar nxn yang berisi koef. Pers.,
C x = vektor variabel pers. yang akan dicari harganya
C b = VRK yang berisi harga-harga persamaan tunggal |
C --------------------------------------------------------

C Deklarasi Variabel:
C -------------------
INTEGER n
REAL*8 A(7,7),b(n),x(n)
INTEGER i,j,k
REAL*8 PIVOT,MULT,TOP

C Proses solusi: (a) Substitusi dan Eliminasi


C -------------------------------------------
DO j = 1,n-1
Pemrograman FORTRAN untuk “Regresi Linier” [#3]

PIVOT = A(j,j)
DO i = j+1,n
MULT = A(i,j)/PIVOT
DO k = j+1,n
A(i,k) = A(i,k) - MULT*A(j,k)
ENDDO
b(i) = b(i) - MULT*b(j)
ENDDO
ENDDO

C Proses solusi: (b) Substitusi Balik


C -----------------------------------
x(n) = b(n)/A(n,n)
DO i = n-1,1,-1
TOP = b(i)
DO k = i+1,n
TOP = TOP - A(i,k)*x(k)
ENDDO
x(i) = TOP/A(i,i)
ENDDO

RETURN
END

Anda mungkin juga menyukai