Isi TAK4.Ppt [Autosaved]

102
1 Hand Out Oleh : YUSUF DEWANTORO HERLAMBANG, ST, MT SATYAWANTJANA ADITYAWARMAN, ST PROGRAM STUDI TEKNIK KONVERSI ENERGI JURUSAN TEKNIK MESIN POLITEKNIK NEGERI SEMARANG 2010

Transcript of Isi TAK4.Ppt [Autosaved]

Hand Out

Oleh : YUSUF DEWANTORO HERLAMBANG, ST, MT SATYAWANTJANA ADITYAWARMAN, ST

PROGRAM STUDI TEKNIK KONVERSI ENERGI JURUSAN TEKNIK MESIN POLITEKNIK NEGERI SEMARANG 2010

1

KATA PENGANTAR

Hand Out Teknik Aplikasi Komputer merupakan materi untuk pelaksanaan Proses Belajar Mengajar (PBM) pada Program Studi Teknik Konversi Energi (TKE) Politeknik Negeri Semarang. Teknik Aplikasi Komputer sebagai mata kuliah teori dan praktek merupakan aplikasi dari teori mata kuliah khususnya di Program Studi Teknik Konversi Energi yang telah diperoleh pada semester sebelumnya. Hand Out ini diharapkan dapat menjadi panduan pemahaman materi kuliah bagi mahasiswa . Tiap pokok bahasan disajikan secara ringkas; sehingga memudahkan mahasiswa untuk mengikuti runtutan pembahasan. Penyusun menyadari bahwa penyajian materi dalam Hand Out ini masih jauh dari sempurna; baik dari segi kualitas, isi, dan tampilannya. Oleh karenanya perlu peninjauan materi secara berkala, demi kesesuaian dengan kompetensi yang telah digariskan. Penyusun berharap adanya masukan-masukan yang konstruktif dari semua pihak. Akhirnya, terselip harapan bermanfaatnya Hand Out ini untuk proses belajar mengajar di ProdiTKE, pada khususnya; serta pengembangan ilmu pengetahuan, pada umumnya. Atas perhatiannya disampaikan banyak terimakasih.

Semarang, Oktober 2010 Penyusun

2

DAFTAR ISI Bab I. Materi Dasar-Dasar Pemrograman1.1. Simbol-Simbol Dasar 1.2. Kata-Kata Cadangan 1.3. Identifier 1.4. Tipe Data 1.5. Karakter Kontrol 1.6. Tanda Operasi 1.7. Komentar Program 1.8. Statemen 1 2 5 5 7 7 10 11 15 16

Pertemua Sli n ke .. de

II.

Proses Masukan dan Keluaran (Input dan Output)2.1. Memasukkan Data (Read/Readln) 2.2. Menampilkan Data (Write/Writeln) 2.3. Tampilan Terformat 2.4. Parameter

3 4 5

20 25 29 30

III.

Statemen Kendali dan Pengulangan3.1. Statemen If (If Then/If Then-else) 3.2. Statemen Case (Case of/Case of-else) 3.3. Rstatemen Perulangan For (For do/For downto) 3.4. Statemen Perulangan While (While do/While downto) 3.5. Statemen Repeat until 6 7 8 9 10 36 50 56 59 60

IV.

EVALUASI Fungsi4.1. Fungsi 4.2. Fungsi Tanpa Parameter 4.3. Parameter Dalam Fungsi 4.4. Fungsi Memanggil Diri Sendiri 4.5. Fungsi Memanggil Fungsi Lain

1112 13 14 62 63 65 3 66 67

Bab V.

Materi Larik (Array)5.1. Larik 5.2. Deklarasi larik 5.3. Deklarasi Tipe Indeks

Perte mua Slide n ke ..15 17 68 68 69

VI.

Rekursi6.1. Rekursi 6.2. Kondisi Pengakhiran Rekursi 6.3. Faktorial 17 71 72 73

EVALUASI

18

4

I. DASAR-DASAR PEMROGRAMAN1.1. Simbol-Simbol Dasar Program Pascal dapat dibentuk dari symbol-simbol yang terdiri dari huruf-huruf, angka-angka dan simbol-simbol khusus. + - * / = ^ () [] {} . , : ; # $

1.2. Kata-Kata Cadangan Kata-kata cadangan ( reserved words ) adalah kata-kata yang sudah didefinisikan oleh Pascal yang mempuyai maksud tertentu. Kata-kata cadangan tidak boleh didefinisikan ulang oleh pemakai, sehingga tidak dapat dipergunakan sebagai pengenal ( identifier ). Table 1.1. kata-kata cadangan *absolute file mod *shr and for nil *string array forward not then begin function of to case goto or type const if packed *unit div *implementation procedure until do in program *uses downto *inline record var else *interface repeat while end *interrupt set with *external label *shl *xor Keterangan: Kata-kata cadangan yang diberi tanda * menunjukkan kata-kata cadangan yang tidak ada di standar Pascal.

5

1.3. Pengenal Didefinisikan Oleh Pemakai (Identifier) Nama yang dipergunakan di dalam program Pascal disebut dengan pengenal ( identifier ) . pemakai dapat mendefinisikan sendiri suatu nama sebagai pengenal untuk pengenal tipe, pengenal konstanta, penenal variable, pengenal prosedur, pengenal fungsi, pengenal unit, pengenel program dan pengenal field di record. Pengenel yang didefinisikan sendiri ini bebas, tetapi dengan ketentuanketentuan sebagai berikut : Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf. Huruf besar dan huruf kecil dianggap sama. Tidak boleh mengandung blank. Tidak boleh mengandung simbol-simbol khusus, kecuali garis bawah. Panjangnya bebas, tetapi hanya 63 karakter pertama yang dianggap signifikan.

1.4. Tipe Data Kalau Anda menggunakan pengenal variable di dalam program, maka variable tersebut harus Anda deklarasikan terlebih dahulu. Pada waktu datanya. Tipe dari data ini menunjukkan suatu nilai yang dapat digunakan oleh variable bersangkutan. Telah dikenal di bab 1, tipe data di dalam bahasa Pascal dapat berupa tipe data standar, tipe data didefinisikan oleh pemakai ( enumerated dan subrange type ), tipe data tersruktur dan tipe data penunjuk ( pointer type ). Dalam bab ini akan dijelaskan penggunaan dari tipe data standar, yaitu dapat berbentuk tipe-tipe data numeric integer, numeric real, karakter, string dan boolean serta tipe data penunjuk. Sedangkan penggunaan tipe data lainnya,yaitu data yang didefinisikan sendiri oleh pemakai dan tipe data tersruktur akan dibahas di bab tersendiri. Data dapta disimpan dalam bentuk konstanta atau di dalam suatu variable. Konstanta akan disimpan di pengenal konstanta dan nilainya tidak berubah di dalam program. Sedang data yang tersimpan dalam variable, nilainya dapat berubah di dalam program. 1.4.1. Tipe data numerik integer Data numerik integer merupakan nilai bilangan bulat baik dalam bentuk decimal maupun hexadecimal. Nilai integer hexadecimal diawali dengan tanda dolar ($ ). Turbo Pascal menyediakan 5 macam tipe data integer yang masing-masing mempuyai jangkauan nilai yang berbeda seperti pada table berikut ini. Table 1.2. Tipe data integer.

Tipe nilai

Ukuran memori ( dalam byte ) 1 1 2 2 4

Jangkauan

Byte Shortint Integer Word Longint 2147483648..2147483647

0..255 -128..127 -32768..32767 0..65535 6

Var Jumlah Begin Jumlah := 25000; WriteLn(Nilai JUMLAH ,jumlah); End. = : integer Bila program ini dijalankan, didapatkan hasil: Nilai JUMLAH = 25000 akan

Program 1.1. Penggunaan tipe data integer. 1.4.2. Tipe data numeric real Nilai konstanta numeric real berkisar dari 1E-38 sampai dengan 1E+38 dengan mantissa yang signitifkan sampai dengan 11digit. E menunjukkan nilai 10 pangkat. Nilai konstanta numeric real menepati memori sebesar 6 byte. 123.45 Salah, titik decimal tidak boleh dibelakang 12345. 12E5 12E+5 -12.34 1.23E-2 salah, titik desimal tidak boleh dimuka .1234 0.1234 Contoh:

Var Nilai 1, Nilai2 : real; Begin Nilai1:= 12345678901.2345; Nilai2 := 12345; WriteLn( ,Nilai1= ,Nilai1 ); WriteLn( Nilai2= ,Nilai2 ); End.

Bila program ini dijalankan,akan di dapatkan hasil:

Nilai1 = 1.2345678901E+10 Nilai2 = 1.2345000000E+04

Program 1.2. Pengguna tipe data real.

7

1.4.3. Tipe data karakter Nilai data karakter berupa sebuah karakter yang ditulis diantara tanda petik tunggal, seperti misalnya A, a, !, %,5 dan sebagainya. Pengguna varibel untuk menyimpan data tipe karakter ini harus dideklarasikan dengan tipe Char, sebagai berikut:

Var SebuahKarakter := char; Begin SebuahKarakter := A; WriteLn( Karakter tersebut = ,SebuahKarakter ); End. Program 1.7. Pengguna tipe karakter.Bila program ini dijalankan: Karaakter tersebut = A 1.4.4. Tipe data string Nilai data string merupakan urut-urutan dari karakter yang terletak diantara tanda petik tunggal. Bila karakter petik merupakan bagian dari konstantaa string, maka dapat ditulis dengan menggunakan 2 buah petik tunggal berurutan. Nilai dta string akan menepati memori sebesar banyaknya karakter stringnya ditambah dengan 1 byte. Bila panjang dari suatau string di dalam deklarasi variable tidak disebutkan, maka dianggap panjanganya Var adalah 255 karakter. Tanggal : string [10]; Contoh: Hari : string [6]; Bila program ini dijalankan, akan didapat hasil: Pasaran : string [4]; 18-02-1987 Jumat Legi Jarak : char; Begin Tanggal := 18-02-1987; Hari := Jum at; Pasaran := Legi; Jarak := ; WriteLn(Tanggal,Jarak,Hari, 8 ,Pasaran); End. Program 1.4. Penggunaan tipe string.

1.4.5. Tipe data Boolean Tipe data boolean mempuyai dua buah nilai, yaitu True dan False. Anda dapat mendeklarasikan suatu variable dengan tipe boolean dan mengisi variable tersebut dengan nilai data Boolean True atau False. Var Contoh: Legi : Boolean; Begin Legi := True; WriteLn(Nilai Legi = ,Legi ); End. Bila program ini dijalankan: Nilai Legi = TRUE

Program Boolean.

1.9.

Pengguna

tipe

1.5. Karakter Kontrol TURBO Pascal memungkinkan karakter-karakter control untuk dilekatkan di dalam suatu string. Dua buah notasi digunakan untuk karakter control, yaitu: Simbol # yang diikuti oleh suatu nilai integer diantara 0 sampai dengan 255, baik berupa nilai desimal maupun hexadesimal untuk menunjukan suatu karakter yang dihubungkan dengan kode ASCII. Contoh: Begin #7 (ASCII 7 adalah bel) Writeln(#83#65#89#65#32#80#65#83#67#65#76) #65 (ASCII 65 adalah karakter A) End. #10 (ASCII 10 adalah line feed) #13 (ASCII 13 adalah carriage return) Program 1.11. Penggunaan karakter control. Contoh: Bila program dijalankan, akan didapat hasil : SAYA PASCAL Contoh : Bila program ini dijalankan, akan didapatkan hasil: Baris pertama Baris ketiga Var GantiBaris : Char; Begin GantiBaris := #10; Writeln(Baris pertama ,GantiBaris,GantiBaris,#13,Baris ketiga); End.

Program 1.7. Penggunaan karakter control untuk Carriage return dan line feed.

9

1.6. Tanda Operasi Tanda operasi (operator) di dalam bahasa Pascal dikelompokkan ke dalam 9 kategori, yaitu: 1. Assignment operator. 2. Binary operator. 3. Unary operator. 4. Bitwise operator. 5. Relational operator. 6. Logical operator. 7. Address operator. 8. Set operator. 9. String operator. 1.6.1 Assignment operator Assignment operator (operator pengerjaan) menggunakan symbol titik dua diikuti oleh tanda sama dengan (:=). Assignment operator A : = B; 1.6.2. Binary operator Disebut dengan binary operator (tanda operasi biner) karena operator ini digunakan untuk mengoperasikan dua buah operand. Operand dapat berbentuk konstanta ataupun variable. Operator ini digunakan untuk operasi aritmetika yang berhubungan denga nilai tipe data integer dan real. Table 1.3. Binary operator.

Ope rato r *

Operasi

Tipe operand real, integer, integer integer integer, integer ieal, integer, integer integer integer, integer real, integer, integer integer real, integer, integer integer real real,

Tipe hasil

Perkalian

real integer real integer

DIV /

Pembagian bulat Pembagian real

real real,

real real real integer

MO D +

Modulus pembagian) Pertambahan

(sisa

real real, real real,

real integer real real integer real

-

pengurangan

10

Contoh:

Begin WriteLn (15*5); WriteLn (20/3); WriteLn (20 div 3); WriteLn (20 mod 3); End. Program 1.14. Pengguna operator biner.Bila program ini dijalankan, akan didapat hasil: 75 6.6666666667E+00 6 2 Operator Div digunakn untuk pembagian dengan hasil yang dibulatkan kebawah atau dengan kata lain semua pecahan dibuang. Jadi hasil pembagian 20 dengan 3 menggunakan operator Div akan dihasilkan nilai 6. Operator Mod digunakan untuk menghasilkan sisa pembagian. Sisa pembagian 20 dengan 3 adalah 2.

1.6.3. Unary operator Disebut dengan unary operator karena operator ini hanya menggunakan sebuah operand saja. Unary operator dapat berupa unary minus dan unary plus. Unary minus adalah operator yang bertanda minus yang hanya digunakan pada sebuah numeric operand saja untuk menunjukkan nilai negatip, baik pada numeric real, maupun numeric integer. Unary plus adalah operator untuk member tanda plus. -5 -7 a+ (-b) -2.5 +2.5 a+ (+b)

Unary operator

11

1.6.4.1. OPERATOR NOT Operator Not digunakan untuk pembalikan bitwise, yaitu yaitu nilai bit 1 menjadi 0 dan sebaliknya nilai bit 0 menjadi bit 1. Contoh:

Begin WriteLn (not 0); WriteLn (not 5); WriteLn (not 18); WriteLn (not -17) End. Program Penggunaan Not. 1.15. operator

Bila program ini dijalankan, akan didapat hasil. -1 -6 -19 16 Nilai dari Not 0 adalah -1. Bagaimana ini bias terjadi ? Nilai 0 tersebut akan tersimpan di memori dalam bentuk bilangan binary: 0000000000000000 Operator Not akan membalik nilai-nilai bit (bit wise), yang bernilai 1 menjadi 0 dan sebaliknya yang bernilai 0 menjadi 1, sehingga Not 0 adalah: 1111111111111111 Sign bit, menunjukkan tanda plus atau minus Bit yang paling kanan adalah sign bit, bit yang menunjukkan tanda positip (bila 0 adalah positip) atau negatip (bila 1 adalah negatip). Pada contoh sign bit bernilai 1, berarti menunjukkan nilai negatip. Turbo Pascal menggunakan cara komplementer dua (two complement), yaitu bila nilainya negatip diartikan sebagai berikut: -Nilai tersebut dikurangi dengan nilai bit 1 1111111111111111 1 1111111111111110 -Kemudian nilai bit dibalik, sehingga didapat nilai: 0000000000000001Yaitu bernilai 1, dan sign bit sebelumnya menunjukkan nilai negatip, berarti 1111111111111111 bernilai -1.

12

1.6.5. Relational operator Relational operator (operasi hubungan) digunakkan untuk membandingkan hubungan antara dua buah operand dan akan didapatkan hasil tipe Boolean, yaitu True atau False. Tabel 1.4. Operator hubungan.

Operasi Opera tor = > >= < b); WriteLn (a>b); WriteLn (a.=b); WriteLn (a 60 Then ket :=lulus; Writeln(ket); End Program 3.1. Statemen if then Bila program ini ijalankan : Nilai lulus didapt? 70 LulusBegi n

AKet:=tidak lulus;

Write(Nilai yang dapat ?; Readln(Nilaiujian)

Writeln(ket):

Nilai ujian >60 Ket:=lulu s;

End

A

Gambar 3.3. Bagan aliran proses 31 program menyeleksi nilai ujian

Label 10; Var R, T, Isi Jawab Begin 10: Readln(R);

: real; : Char;

Writeln; Write(jari-jari lingkaran ? );Write(Tinggi Silinder

?);Readln(T) Isi :=Pi * R*R * T; Writeln; Writeln(Isi silinder = ,Isi :9:2; Writeln; Write(akan menghitung lagi (Y/T)?);Readln(jawab); Program 3.2 Penggunaan statemen if Then yang diikuti oleh statemen loncatan Go to.

Bila program ini di jalankan : Jari jari lingkaran ? 10 Tinggi silinder ?15 Isi silinder = 4712.39 Akan menghitung lagi (Y/T) ? TBila digambar dalam bentuk bagan alir, proses program adalah sebagai berikut :

32

Begin B

Writeln: Write(jari-jari lingkaran?); Readln(R);

Write(Tingg i silinder ?); Readln(T);

Isi :=Pi*R*R*T;

Writeln; Writeln(isi silinder=,isi:9:2);

A

Bila program ini di jalankan, akan di tampilkan : > Menghitung Luas Lingkaran. Menghitung Luas Segitiga. Menghitung Luas Bujur Sangkar. S e l e s a i Pilih Nomer ( 0 3 ) ? 2 Bila Anda akan menghitung luas lingkaran , maka dapat memilih nomor 1, menghitung luas bujur sangkar dengan memilih nomor 3 dan selesai tidak menghitung luas bujur sangkar dengan memilih nomor 3 dan selesai tidak menghitung dapat memilih nomor 0. Pada contoh ini di pilih nomor 2,yaitu menghitung luas segitiga, maka proses selanjutnya adalah :

33

Panjang sisi alas ? 50 Tinggi segitiga ? 40 Luas segitiga = 1000.00 Pilihan Anda akan diseleksi, sebagai berikut : Bila pilihan adalah nomer 1, maka akan dip roses suatu blok statemen yang berisi proses mengitung luas lingkaran, sebagai berikut : If pilihan = 1 Then Begin Write (Jari jari lingkaran ?); ReadLn(R); Luas : = Pi * R * R; WriteLn(Luas Lingkaran =,Luas : 9 : 2); End; Bila pilihan adalah nomer 2, maka akan dip roses suatu blok statemen yang berisi proses mengitung luas segitiga, sebagai berikut : If pilihan = 2 Then Begin Write (panjang sisi alas ?); ReadLn(L) Write (Tinggi segitiga ?); ReadLn(T); Luas : = 0.5* L * T; WriteLn; WriteLn(Luas segitiga = ,Luas:9:2); End; Bila pilihan adalah nomer 3, maka akan dip roses suatu blok statemen yang berisi proses mengitung luas Bujur sangkar, sebagai berikut : If pilihan = 3 Then Begin Write (panjang bujur sangkar?); ReadLn(T) Write (Tinggi segitiga ?); ReadLn(L); Luas : = T * L; WriteLn; WriteLn(Luas bujur sangkar = ,Luas:9:2); End;

34

3.1.2. Struktur If-Then..Else Struktur if-Then.Else merupakan pengembangan dari struktur ifThen dengan struktur sebagai berikut : If kondisi Then Statemen1 Else Statement2; Statemen1 atau dapat berupa blok statemen akan dip roses bilamana kondisi yang di seleksi benar (terpenuhi) sedang statemen2 atau dapat berupa blok statemen akan dip roses bilamana kondisi yang di seleksi tidak terpenuhi. Bila struktur ini digambarkan dalam bentuk bagan alir akan tampak sebagai berikut:

Tidak

If kon disi ?

Ya

Els e

Then

Statemen2;

Statemen1;

Gambar 3.4. Bagan alir struktur if-Then-Else.

35

Bila program ini di jalankan : Nilai yang didapat ? 70 Lulus Bila proses program digambarkan dalam bentuk bagan alir akan berupa :

Var Nilaiujian : real; Begin Write(nilai yang di dapat ?); ReadLn(NilaiUjian); (*Seleksi nilai yang didapat, Lulus atau tidak*) If Nilai Ujian > 60 Then WriteLn(Lulus) Else WriteLn(tidak Lulus); End. Program 3.3. Penggunaan struktur ifThen-ElseBegin Niali Ujian 60 ? Write(Nilai yang didapat ?); ReadLn(NilaiUJian);

tid akWriteLn(Tida k Lulus);

ya WriteLn(Tida k Lulus);

A

Gambar 3.5. Bagan alir program yang menggunakan struktur If-Then-Else

36End

3.1.3. Struktur If tersarang Struktur if tersarang (nested IF) merupakan bentuk dari suatu statemen If berada di dalam lingkungan statemen If yang lainnya. Misalnya bentuk statemen If tersarang sebagai berikut : atau: IF kondisi1 THEN IF kondisi2 THEN statemen1 ELSE Statemen2; IF kondisi1 THEN BEGIN END; IF kondisi2 THEN statemen1 ELSE Statemen2;

Bentuk statemen If tersarang tersebut bila digambarkan dlam bentuk bagan alir akan berupa :

tida k

IF kondisi1

ben ar

tida k

IF kondisi 2

ben ar

statemen2

statemen1

Gambar 3.6. Bagan alir struktur If tersarang

37

38

End;

Write(Nilai B ? ); ReadLn(b); Write(Nilai C ? ); ReadLn(c); WriteLn; (* Hitung nilai diskriminan *) D := B*B 4*A*C; (* Seleksi nilai diskriminan *) If D=0 Then (* Akar kembar *) Begin X1 := -B / (2*A); WriteLn(Ada 2 akar kembar, yaitu :); WriteLn(X1 = X2 =,x!:9:2); End Elsa Begin If D > 0 Then (* Dua akar real berlainan *) Begin X1 := (-B + Sqrt(D))/(2*A); X2 := (-B - Sqrt(D))/(2*A); WriteLn(Ada 2 akar real berlainan, yaitu :); WriteLn(X1 =,X1:9:2); WriteLn(X2 =,X2:9:2); End Else (* Dua akar imaginair berlainan *) Begin Z1 := -B / (2*A); Z2 := Sqrt(-D)/(2*A); WriteLn(Ada 2 akar imaginair berlainan, yaitu :); WriteLn(X1 =,Z1:9:2, +,Z2:9:2,i); WriteLn(X2 =,Z1:9:2, +,Z2:9:2,i); End (D>0) (D>0) WriteLn; Write(Menghitung Lagi (Y/T) ? ); ReadLn(Lagi);

End; (Lagi=Y) or (Lagi=y) } End. Program 3.4. Penggunaan struktur IF tersarang untuk menyelesaikan persamaan kudrat

39

Bila program ini dijalankan Nilai A ? 1 Nilai B ? 2 Nilai C ? 3 Ada 2 akar imaginair berlainan, yaitu : X1 = -1.00 + 1.41i X2 = -1.00 1.41i Menghitung lagi (Y/T) ? Y Nilai A ? 5 Nilai B ? -15 Nilai C ? 5 Ada 2 akar real berlainan, yaitu : X1 = 2.62 X2 = 0.38 Menghitung lagi (Y/T) ? Y Nilai A ? 2 Nilai B ? 4 Nilai C ? 2 Ada 2 akar kembar, yaitu : X1 = X2 = -1.00 Menghitung lagi (Y/T) ? Y

Penjelasan program : Nilai dari A yang dimasukkan tidak boleh sama dengan nol dan ini diselesaikan dengan menggunakan statemen While-Do yang akan terus menanyakan nilai A bila bernilai nol. A := 0; While A=0 Do Begin WriteLn; Write(Nilai A ? ); ReadLn(A); End; (A=0) Setelah nilai A yang dimasukkan sudah tidak sama dengan nol, maka nilai-nilai yang lain, yaitu nilai B dan C dimasukkan sebagai berikut : Write(Nilai B ? ); ReadLn(b); Write(Nilai C ? ); ReadLn(c); WriteLn;

40

Nilai dari diskriminan dihitung sebesar : (* Hitung nilai diskriminan *) D := B*B 4*A*C; Nilai dari diskriminan diseleksi. Bila sama dengan nol, berarti ada dua akar kembali, sebagai berikut : (* Seleksi nilai diskriminan *) If D=0 Then (* Akar kembar *) Begin X1 := -B / (2*A); WriteLn(Ada 2 akar kembar, yaitu :); WriteLn(X1 = X2 =,x!:9:2); End Sebaliknya bila tidak sama dengan nol, diseleksi apakah lebih besar dari nol dan bila lebih besar sama dengan nol berarti ada dua akar real berlainan : Else Begin If D > 0 Then (* Dua akar real berlainan *) Begin X1 := (-B + Sqrt(D))/(2*A); X2 := (-B - Sqrt(D))/(2*A); WriteLn(Ada 2 akar real berlainan, yaitu :); WriteLn(X1 =,X1:9:2); WriteLn(X2 =,X2:9:2); End Bila nilai diskriminan tidak sama dengan nol, dan tidak lebih besar dari nol, berarti nilai determinan adalah lebih kecil dari nol dan akan ada dua akar imaginair berlainan, sebagai berikut : Else (* Dua akar imaginair berlainan *) Begin Z1 := -B / (2*A); Z2 := Sqrt(-D)/(2*A); WriteLn(Ada 2 akar imaginair berlainan, yaitu :); WriteLn(X1 =,Z1:9:2, +,Z2:9:2,i); WriteLn(X2 =,Z1:9:2, +,Z2:9:2,i);

41

End

(D>0)

End; Setelah didapatkan akar-akar persamaan kuadrat ini, dinyatakan apakah akan menghitung yang lainnya lagi atau tidak, sebagi berikut : WriteLn; Write(Menghitung Lagi (Y/T) ? ); ReadLn(Lagi); End; (Lagi=Y) or (Lagi=y) } End.

3.2. Statemen Case Statemen casedapat berbentuk stuktur Case-Of atau Case OfElse. Sintak ari statemen case dalam bentuk diagram sebagai berikut;

42

3.2.1. Struktur Case-Of Struktur Case-Of memiliki suatu ungkapan logika yang disebut selector dan jumlah statemen yang diawali dengan suatu label permasalahan (case label) yan mempunyai tipe sama dengan selector. Statemen yan memiliki case label bernilai sama dengan selector akan diproses sedang statemen yan lainnya tidak. Perbedaan dengan srtuktur If adlah bila statemen If menyeleksi suatu kondisi dan terpenuhi, setelah mempross statemen tersebu, proses penyleksian masih dilakukan terhadap statemen If berikutnya yang lain. Sedang pada struktur Case-Of bila salah satu konisi terpenuhi (nilai case label sama dengan nilai selector) dan statemen tesebut telah dipross, selanjutnya statemen yang lain dalam linkungan case tidak akan diseleksi lagi. Bentuk dai struktur Case-of sebagaiberikut:

CASE unkapan OF Daftar case label 1 : statemen 1; Daftar case label 2 : statemen 2; Daftar case label 3 : statemen 3; . . . Daftar case label n : statemen n; END; Daftar case label dapat berupa sebuah konstanta, atu rane dari kontanta yang bukan bertipe real.

Contoh: 1; (nilai integer 1) 1,2,3,4; (nilai integer 1,2,3,4) A; (nilai karakter A) A,B; (nilai karakter A dan B Contoh: Nilai ujian yang diberikan dalam bentuk huruf A, B, dan C memiliki arti berikut: Nilai A berarti sangat baik Nilai B berarti baik Nilai C berarti cukup

43

Var Nilai : char; Begin Write(Nilai huruf yang didapat ? ); ReadLn(nilai); Case Nilai Of A : writeLn(sangat Baik); B : WriteLn(Baik); C : WriteLn(Cukup); End; End.

Bila program ini ijalankan : Nilai huruf yang didapat ? B Baik

Program 3.5. penggunaan struktur Case-Of untuk menyeleksi nilai ujian

Uses CRT; VAr Pilihan : byte; R, L, T, Luas : real; Begin ClrScr; Gotoxy(10,2); WriteLn( >); Gotoxy(10,4); WriteLn(1.Menghitung Luas Lingkaran); Gotoxy(10,6); WriteLn(2. Menghitung Luas segitiga); Gotoxy(10,8); WriteLn(3. Menghitung Luas Bujur Sankar); Gotoxy(10,10);WritLn(0.S e l e s a i.); Pilihan :=9; While (Pilihan < 0 ) or (Pilihan > 3) Do Begin Gotoxy(10,20); Write(Pilih Nomer (0-3) ?);Ead(Pilihan); Ena; ClrScr;

44

Case Pilihan O 1:BeginWrite (Jari-jari lingkaran ? );ReadLn; Luas := Pi * R*R; WrtieLn(Luas Lingkaran=,Luas:2); End; 2:Begin Write (Panjang sisi alas ? ); ReadLn; Write Itinggi segitia ? ); Radln; Luas := 0.5 * L * T; WriteLn; WriteLn(Luas Segitiga =,Luas :9:2); End; 3: Begin Write (Panjang bujursangkar ? ); ReadLn(T); Write (Lebar bujursangkar ?); ReadLn (L); Luas := T * L; WriteLn; WritLn (Luas bujursangkar = ,Luas:9:2); End.

Bila program ini dijalankan: > 1.Menghitung Luas Linkaran. 2.Menghitung LUas Segitiga 3.Menghitung Luas Bujur Sangkar Selesai. Pilih Nomor (0-3) ? 1 Jari-jari lingkaran ? 15 Luas Lingkaran = 706.86

45

3.2.2. Struktur Case of.Else Struktur Case Of.Else merupakan pengembangan dari sruktur Case Of dan pengmbangan dari standar Pascal. Pada struktur Case Of bila ada kondisi yang tidak terpenuhi berarti tidak ada statemen di dalam lingkunan Case Of yang diproses. Dengan struktur Case Of Else, bila ada kondisi yan tidak terpenuhi , maka statemen yang akan dipross di dalam lingkungan Case Of adalah statemen yang ada di Else. Contoh: Uses CRT; VAr Pilihan : byte; R, L, T, Luas : real; Begin ClrScr; Gotoxy(10,2); WriteLn( >); Gotoxy(10,4); WriteLn(1.Menghitung Luas Lingkaran); Gotoxy(10,6); WriteLn(2. Menghitung Luas segitiga); Gotoxy(10,8); WriteLn(3. Menghitung Luas Bujur Sankar); Gotoxy(10,20);Write(Pilih Nomer (1-3) ? ); Read(Pilihan); ClrScr; Case Pilihan Of 1:Begin Write (Jari-jari lingkaran ? );ReadLn; Luas := Pi * R*R; WrtieLn(Luas Lingkaran=,Luas:9:2); End; 2:Begin Write (Panjang sisi alas ? ); ReadLn; Write (Tinggi segitia ? ); Readln; Luas := 0.5 * L * T; WriteLn; WriteLn(Luas Segitiga =,Luas :9:2); End;

46

3: Begin Write (Panjang bujursangkar ? ); ReadLn(T); Write (Lebar bujursangkar ?); ReadLn (L); Luas := T * L; WriteLn; WriteLn (Luas bujursangkar = ,Luas:9:2); End;

ElseBegin WriteLn(Pilihannya hanya 1,2 atau 3); WriteLn(Anda tadi pilih nomer berapa ?............ Ngawur!!!!); End; End; End. Program 6.10. Penggunaan struktur Case-OfElse untuk menyeleksi pilihan menu. Bila program ini dijalankan: > Menghitung Luas Linkaran. Menghitung LUas Segitiga Menghitung Luas Bujur Sangkar Pilih nomr (1-3) ? 5 Pilihannya hanya 1, 2 atau 3 Anda tadi pilih nomr berapa ? ......... Ngawur !!!!!

47

3.3. Struktur perulangan For Perulangan statemen For digunakan untuk mengulang statemen atau satu blok statemen berulang kali sejumlah yang ditentukan. Perulangan dengan statemen For dapat berbentuk perulangan tersarang. Sintak dari statemen For dalam bentuk diagram adalah sebagai berikut:

3.3.1. Perulangan positip Perulangan positip adalah perulangan dengan penghitung (counter) dari kecil ke besar atau dengan kata lain pertambahannya positip. Perulangan positip dapat dibentuk dengan menggunakan statemen For-To-Do, dengan bentuk umum: For variable-kontrol := nilai-awal To nilai-akhir Do statemen Variable-kontrol, nilai awal, nilai-akhir harus mempunyai tipe yang sama, yaitu bertipe integer.

Contoh : Penulisan statemen yang akan diproses berulang-kali tersebut dapat juga ditulis dalam bentuk biok statemen (diawali dengan Begin dan diakhiri dengan End), walaupun hanya berisi sebuah statemen saja, sebagai berikut:

VarI : integer; Begin For I:= 1 to 5 Do Begin WriteLn(Pascal); blok statemen End; End. Program 5.2. PenggunaanBila program ini dijalankan, akan didapatkan hasil: Pascal Pascal Pascal Pascal Pascal

perulangan positip sederhana dalam blok statemen.48

3.3.2. Perulangan negatip Perulangan negatip adalah perulangan dengan penghitung (counter) dari besar ke kecil atau dengan kata lain pertambahannya negatip. Perulangan negatip dapat dibentuk dengan menggunakan statemen For-DownTo-Do, dengan bentuk umum : For variable-kontrol : = nilai-awal DownTo nilai-akhir Do statemen Contoh :

Var Celcius : integer; Fahrenheit : real; Begin WriteLn( .); WriteLn( celcius Fahrenheit); WriteLn(. ); Celcius : = 0; For celcius : = 15 DownTo 0 Do Begin Fahrenheit : = 1.8*celcius + 32; WriteLn(Celcius:8, Fahrenheit:14:2); End; WriteLn( ); End. Program 5.8. Cara membuat perulangan negatif49

Bila program ini dijalankan :

Celcius Fahrenheit 15 59.00 14 57.20 13 55.40 12 53.60 11 51.80 10 50.00 9 48.20 8 46.40 7 44.60 6 42.80 5 41.00 4 39.20 3 37.40 2 35.60 1 33.80 0 32.00

3.3.3. Pengulangan tersarang Perulangan tersarang (nested loop) adalah perulangan yang berada didalam perulangan yang lainnya. Prulangan yang lebih dalam akan diproses terlebih dahulu sampai habis, kemudian perulangan yang lebih luar baru akan bertambah, mengerjakan perulangan yang lebih dalam lagi mulai dari nilai awalnya dan seterusnya. Contoh :

Var I,J : integer; Begin

For I : = 1 to 5 DoBegin For J : = 1 to 3 Do WriteLn(I:8,J:3); WriteLn; End; End. Program tersarang.Bila program ini dijalankan, akan didapatkan hasil : 11 12 13 21 22 23 31 32 33 41 42 43 51 52 53

5.9.

Penggunaan

perulangan

50

3.4. Struktur Perulangan WHILE-DO Perulangan ini menggunakan statemen While-Do yang mempunyai struktur dalam bentuk diagram sebagai berikut:

Gambar 5.2. Diagram sintak statemen While. Statemen While-Do digunakan untuk melakukan proses perulangan suatu statemen atau blok statemen terus-menerus selama kondisi ungkapan logika pada While masih bernilai logika benar.

Contoh:

Var I : integer; Begin I := 0; While I < 5 Do Begin I := I + 1; WriteLn(1); End; End. Program 5.10. Penggunaan perulangan While-Do yang sederhanaBila program ini dijalankan, akan didapatkan hasil: 0 1 2 3 4 Penjelasan: Perulangan dari While akan terns dikerjakan bila kondisinya masih benar. Dalam hal ini kondisinya adalah I dan bila nilai I masih kurang dari 5, berarti kondisi di dalam While masih terpenuhi dan perulangan akan selesai setelah nilai I lebih besar atau sama dengan 5.

51

3.4.1. Struktur perulangan While-Do tersarang Perulangan While-Do tersarang (nested While- Do) merupakan perulangan While-Doyang satu di dalam perulangan While-Do yang lainnya.

3.5. STRUKTUR REPEAT...UNTIL Struktur Ropeat...Until digunakan untuk mengulang (Repeat) statemen-statemen atau blok statemen sampai (Until) kondisi yang diseleksi di Until tidak terpenuhi. Sintak dari statemen ini bila digambarkan dalam bentuk diagram akan berbentuk:

Gambar 5.3. Diagram sintak statemen Repeat...Until. Contoh:

Var I : integer; Begin I :=0; Repeat I := I + 1; WriteLn(I); Until I = 5; End.Program 5.15. Penggunaan dari perulangan Repeat UntilBila program ini dijalankan, akan didapat hasil: 1 2 3 4 5

52

3.5.1. Struktur perulangan Repeat...Until tersarang Struktur perulangan Repeat...Until tersarang adalah suatu perulangan Repeat...Untilyang satu berada di dalam perulangan Repeat...Until yang lainnya. Contoh: Program berikut dimaksudkan untuk menampilkan tabel hubungan antara nilai-nilai sisi dari suatu segitiga siku-siku: C = A2 + B2 Tabel yang akan dihasilkan berupa nilai-nilai panjang sisi miring C untuk nilai-nilai sisi A dari 1 sampai dengan 3 dengan kelipatan 1 dan untuk sisi B dari 0 sampai dengan 25 dengan kelipatan 5. Perulangan yang terluar adalah perulangan untuk sisi A dan perulangan yang lebih dalam adalah perulangan untuk sisi B. Var A,B,C Begin WriteLn('====================== ); WriteLn('Sisi A C'); WriteLn('---------------------'); Sisi B Sisi : real; Bila program ini dijalankan, akan didapatkan hasil :

Sisi A 1.00 1.00 1.00 1.00 1.00 1.00 2.00 2.00B:9:2,

Sisi B 0.00 5.00 10.00 15.00 20.00 25.00 0.00 5.00 10.00 15.00 20.00 25.00 0.00 5.00 10.00 15.00 20.00 25.00

Sisi C 1.00 5.10 10.05 15.03 20.02 25.02 2.00 5.39 10.20 15.13 20.10 25.08 3.00 5.83 10.44 15.30 20.22 53 25.18

A := 1;Repeat B := 0; Repeat C := Sqrt(A*A + B*8); WriteLn(A:6:2, C:9:2); B := B+5; Until B > 25; A := A + 1; Until A > 3; WriteLn('====================== ); End. Program 5.20. Perutangan Repeat...Until tersarang untuk membuat tabel.

2.00 2.00 2.00 2.00 3.00 3.00 3.00 3.00 3.00 3.00

IV. FUNGSI4.1. Fungsi Blok fungsi hampir sama dengan blok prosedur, hanya fungsi harus dideklrasikan dengan tipenya. Tipe deklarasi ini harus menunjukan tipe hasil dari fungsi. Tipe tersebut harus di tulis pada akhir deklarasi fungsi yang di dahului dengan titik koma, sebagai berikut : FUNCTION indentifier (daftar-parameterr) : type; Contoh : Funtion Factorial (var fak, hasil : integer ) : integer; Function pangkat(x,y : real) : Real; Blok fungsi sama dengan blok prosedur yang diawali dengan kata cadangan Begin dan diakhiri dengan kata cadangan End dan titik koma. Contoh :

Funtion Hitung (Var A,B : Integer ) : integer; Begin Hitung :=A+B; Var X,Y : integer; Begin Write(nilai X?); Readln(X); Write(nilai Y?); Readln(Y); Writeln;

Writeln(X,+,Y,=hitung(X,Y)); End.

Program 4.1 Penggunaan suatu fungsi.Bila program dijalankan : Nilai X ? 2 Nilai Y ? 3 2+3=5

54

Perbadaan fungsi dengan prosedur adalah : 1.Pada fungsi, nilai yang dikirimkan balik terdapat pada nilai fungsinya ( kalau pada prosedur pada parameter yang dikirimkan secara acuan). Pada contoh, nama fungsi tersebut adalah hitung dan nilai yang dikirim balik berada pada nama fungsi tersebut. Sehingga nama fungsi ini harus digunakan untuk menampung hasil yang akan dikirimkan dari fungsi, sebagai berikut : Hituung : =A + B; Nama Nama fungsi yang berisi nilai yang akan di kirimkan Karena nilai balik berada dinama fungsi tersebut, maka fungsi tersebut dapat langsung digunakan untuk dicetak hasilnya, sebagai berikut : Wruteln(X,+,Y, = ,hitung(X,Y)); Nama fungsi yang lansung digunakan untuk

di tampilkan hasilnya Atau nilai fungsi tersebut dapat juga langsung dipindah ke pengenal variable lyang ainya, sebagai berikut : Hasil :=Hitung (X,Y); Writeln(X,+,Y,=;,Hasil); Sedang pada prosedur, nama prosedur tersebut tidak dapat di gunakan langsung, yang dapat langsung di gunakan adalah parameternya yang mengandung nilai balik.

4.2. Fungsi Tanpa Parameter Suatu fungsi yang tanpa menggunakan parameter berarti nilai balik yang akan dihasilkanya merupakan nilai yang sudah pasti. Parameter di gunakan untuk memberikan input pada fungsi dan fungsi akan memberikan hasil balik sesuai dengan parameter yang di berikanya. Sedang fungsi yang tidak mempunyai parameter, maka hasil fungsi tersebut tidak dapat diatur dari modul yang menggunakanya, karena tidak ada parameter yang dikirimkan. Dengan demikian fungsi yang tanpa menggunakan parameter yang jarang di pergunakan. Contoh:

55

Contoh:

Funtion deteksi : Boolean; Begin Deteksi : =true; End; Begin Writeln(Deteksi); End. Program 4.2. Fungsi tanpa parameter.Bila program ini dijalankan : TRUE Nilai balik yang akan diberikan oleh fungsi deteksi selalu merupakan nilai BOLEEAN TRUE, karena tidak dapat diatur dari program utama. Biasanya fungsi seperti ini jarang digunakan , karena nilai tersebut dapat langsung ditentukan dimodul yang menggunakanya, sebagai berikut: Begin Writeln(TRUE) Type huruf = String[6]; End.

Funtion Garis : Huruf; Begin Garis :=: Begin Writeln(garis); Writeln(pascal); Writeln(garis); End.

Bila progrm ini dijalankan:

Pascal

Program 4.3. Fungsi tanpa parameter 56 untuk membuat garis.

4.3. Parameter Dalam Fungsi Sama dengan prosedur, parameter dalam fungsi dapat dikirimkan secara nilai (by value) atau secra acuan (by reference). Penulisan judul fungsi yang menggunakan parameter dengan pengiriman secara nilai adalah tampak sebagai berikut : Function hitung (A,B : integer ) : integer; Contoh :

Funtion Terbesar (X,Y :real): Real; Begin If X>Y Then Terbesar :=X Else Terbesar :=Y; End. Var Nilai1, nilai2:real; Begin Writeln(nilai pertama?);readln(Nilai1); Writeln(nilai kedua?);readln(Nilai2); Writeln(nilai terbesar adalah , terbesar (nilai1,nilai2)9:3); End. Program 4.6. Fungsiuntuk menghasilkan nilai terbesar.berikut ini akan di buat suatu fungsi yang akan menghasilakan nilai terbesar dari 2 buah nilai real. Bila program dijalankan: Nilai pertama? 12.356 Nilai kedua? 55.182 Nilai terbesar adalah 55.182

57

4.4. Fungsi Memanggil Dirinya Sendiri Seperti halnya prosedur, fungsi juga dapat memanggil dirinya sendiri. Proses fungsi memanggl dirinya sendiri juga merupakan proses recursion. Contoh:

Function factorial (Nilai : integer) : real; Begin If nilai = 0 then Factorial ;=1 Else Factorial :=nilai * factorial(nilai-1); End. Var N : integer; Begin Write (berapa factorial ?); Readln(N); Writeln(N,facrorial = ,factorial(N):9:0); End. Program 4.11. fungsi factorial secara rekursi.Bila program ini dijalankan: Berapa factorial ? 5 5 factorial = 120 Proses dari recursion tampak sebagai beerikut ini . missal akan dihitung nilai dari 5 factortorial sebagai berikut: Factorial :=nilai*factorial (nilai-1); Factorial := 5 * factorial (5-1);

58

4.5. Fungsi Memanggil Fungsi Yang Lain Suatu fungsi dapat juga memanggil fungsi yang lainya. Fungsi yang dipanggil letaknya harus berbeda diatas fungsi yang memanggil. Contoh:

Function fungsi2(Y: integer ) : integer; Begin Fungsi2 : Y*2; End. Function fungsi1(X : integer) : integer; Begin Fungsi1 := fungsi2(X) + 5; End. Begin Writeln(fungsi1(3)); End. Program 4.12. fungsi yang memanggil fungsi yang lain.Bila program ini dijalankan: 11 Hasil yang didapat adalah 11, didapat dari: Fungsi 1 := fungsi 2(X) + 5; Fungsi := Y * 2+5; Maka untuk nilai fungsi(3) adalah 3*2+5 = 11

59

V. LARIK5.1. Larik Suatu larik (array) adalah tipe terstruktur yang terdiri dan sejumlah komponen-komponen yang mempunyai tipe yang sama. Komponen-komponen ini disebut dengan tipe komponen (component type) atau tipe basis (base type). Suatu larik mempunyai jumlah komponen yang banyaknya tetap. Banyaknya komponen dalam suatu larik ditunjukkan oleh suatu indeks yang disebut dengan tipe indeks (index type). Tipe indeks ini berbentuk ungkapan tipe ordinal. Tiap-tiap komponen di larik dapat diakses dengan menunjukkan nilai indeksnya (index value) atau disebut juga dengan istilah subscript. Sintak dari suatu larik bila digambarkan dalam bentuk diagram akan berupa:Tipe larik Arr ay [ Tipe indeks ] of tip e

Tipe indeks Tipe ordinal

5.2. Deklarasi Larik Suatu larik yang akan dipergunakan di dalam program Pascal harus didekiarasikan teclebih dahulu. Dekiarasi dan lank didahului dengan kata cadcngan Anaydiikuti oleh tipe indeks yang diletakkan diantara tanda [], diikuti lagi oleh kata cadangan of dan tipe lariknya. Larik dapat bertipe data sederhana byte, word, imteger, real, boolean, char atau string dan tipe data skalar atau subrange. Tipe larik ini artnya isi dan larik atau komponen-komponennya atau elemen-elemennya mempunyai nilai dengan tipe data tersebut. Tipe dan larik ditunjukkan pada waktu nendeklarasikannya. Larik setalah dideklarasikan sebagai larik tipe integer dengan jumlah elemennya maksimum sebanyak 100 elemen. Nilai-nilai elemen larik ini brus berisi nilai-nilai integer. Misalnya elemenelemen dan larik X adalah : X[1] : 25; X[2] : 75; X[3] : 8;

X[4] : 2;

60

Berikut ini akan dibenikan contoh meadekia-asikan lank dengan tipe yang bermacammacam. Var Nilai : array [1..100] of byte; Var Urutan : array [1..200] of word; Var Gaji : array [1..100] of real; Var Lulus : array [1. .25] of boolean; Var Nilai Huruf : array [1..5] of char; Contoh : Program berikut akan menampilkan bibngan prima sampai dengan nilai 1000. Bilangan prima adalah bilangan yang tidak habis dibagi oleh bilangan lain atau yang habis dibagi oleh dirinya sendiri scbagai berikut : Var Batas : real; I,J Jumlah : word; Prima array[1 . .1000] of char; Begin Bates := sqrt(1000); Jumlah := 0; Writeln(Bilangan prima sampai 1000:); Writel.n(---------------------------------); For 1:=2 to 1000 Do Begin If Primat [I] : = Then Begin Write(I:5); Jumlah := Jumlah +1; If I < Batas then Begin J := I; While J < 10000 do Begin J := J + 1 Prima[J] := *; end; end; end; end; Writeln; Writeln(Ada sejumlah, jumlah,bilangan prima); End.

61

5.3. Deklarasi Tipe Indeks Indeks dan larik menunjukkan maksimum banyaknya elemen-demen dar lath. Indeks larik ini dapat berupa tipe subrange atau tipe skalar apapun kecuali tipe real. 5.3.1. Deklarasi tipe indk subrange integer Pada deklarasi tipe lank sebelumnya semuanya menggunakan tipe indeks subiange integer sebagai berikut: Var NilaiHuruf : array[1..5] of char;

Pada tipe indeks lank liii menunjukkan bahwa larik X mempunyai elemen maksimumsthanyak 5 buah komponen yang ditunjukkan oleh indeks terbawah berupa nilai integer! daia indeks tenatas ditunjakican cleb nilai integer 5. Indeks dafi lank mi dipat.didek1arasikan terlebih di bagian dekiarasi Lipe scbagai berikut: type Jangkauan = 1..5; (tip. sthrenge integer) Var NilaiHuruf : array[jangkauan] of char;

5.3.2. Deklarasi tipe indek subrange byte Kalau indeks dan lath idak sampai dengan 255, maka ndeks dati larik ini dapat dideklara!ikan dengan tipe byte. Contoh: Var X ; array[0..255] of real; Contoh : Var X : array[array ] of real;

62

VI. REKURSI

6.1. Rekursi Rekursi (recursion) adalah proses dari suatu subprogram (dapat berupa fungsi atau prosedur) yang memanggil dirinya sendiri. Banyak bahasa tingkat tinggi yang tidak menyediakan kemampuan untuk melakukan rekursi. Bahasa tingkat tinggi yang menyediakan kemampuan ini diantaranya adalah Algol, PL/1 dan Pascal. Contoh: 10 GOSUB 100 99 END 100 REM * SUBROUTINE * 110 PRINT "BASIC "; 120 GOSUB 100 130 return Program 6.1. Rekursi dalam program BASIC yang akan menghabiskan memori. Tarnpak pada program BASIC ini dicoba untuk melakukan rckursi, yaitu subroutine mulai nomer baris 100 mencoba memanggil dirinya sendiri. Karcna sebcnarnya BASIC tidak menyediakan fasilitas ini, maka bila program ini dijalankan memori yang digunakan BASIC akan habis dalam waktu singkat sebagai berikut: RUN BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC . BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC BASIC Out of memory in 110 Ok

Proses rekursi untuk beberapa kasus merupakan algoritma (algorithm) yang baik dan dapat membuat pemecahan masalah lebih mudah. Akan tetapi sebagai imbalannya, proses rekursi ini harus dibayar mahal dengan memori yang banyak digunakan, dikarenakan setiap kali suatu subprogram di panggil, maka diperlukan sejumlah tambahan memori.

63

6.2. Kondisi Pengakhiran Rekursi Jika Anda menulis suatu fungsi atau prosedur rekursi, yang perlu diperhatikan adalah fungsi atau prosedur tersebut harus mengandung suatu kondisi akhir dari proses rekursi. Kondisi ini diperlukan untuk mencegah terjadinya proses rekursi yang tidak berujung (indefinite), yaitu proses rekursi akan terus dilakukan. tanpa berhenti. Contoh: Berikut ini merupakan proses rekursi yang tidak pernah berakhir, karena tidak mengandung kondisi pengakhiran rekursi tersebut. Untuk mengakhiri proses rekursi ini, harus ditekan tombol Ctrl-C atau Ctrl-Break. Procedure Rekursi; Begin Write(Tascal '); Rekursi; end; Begin Rekursi; end.

Contoh: Proses rekursi ini akan dilakukan sebanyak 5 kali, yaitu dengan menyeleksi kondisi dari variabel Akhir sampai dengan bernilai 5 sebagai berikut: Var Akhir : word; Procedure Rekursi; Begin If Akhir < 5 Then Begin Write('Pascal 1); Bila program ini dijalankan: Pascal Pascal Pascal Pascal Pascal Akhir := Akhir + 1; Rekursi; end; end; Begin Akhir := 0; Rekursi; end. Program 6.3. Rekursi dengan kondisi terminasi.

64

Contoh: Prosedur Deret ini digunakan untuk menampilkan suatu deret bilangan bulat N dari 0 sampai dengan 10 sebagai berikut: Procedure Deret (N : word); Begin Write(N:3); If N < 10 Then Deret (N+1); end; Var N : word; Begin N := 0; Deret (N); end. Program 6.4. Rekursi deret dalam bentuk prosedur. Pada prosedur tampak terjadi proses rekursi, yaitu bila nilai Nmasih Iebih kecil dari 10, maka prosedur kembali dipanggil oleh prosedur itu sendiri dengan mengirimkan parameter nilai N sebelumnya ditambah dengan 1. Bila program ini dijalanIcan akan didapatkan hasil: 0 1 2 3 4 5 6 7 8 9 10

6.3. Faktorial N faktorial adalah lx2x3x...xN (dengan asumsi N lebih besar dari 3) dan dapat dirumuskan dengan: N! = N * (N-1) * (N-2) * * 1 Perumusan ini dapat didefinisikan secara rekursi sebagai berikut: N! = N * (N-1)! Misalnya akan dihitung sebesar 5!, maka dapat dilakukan secara rekursi dengan Cara: 5! = 5 * 4! Secara rekursi nilai 4! dapat dihitung kembali sebesar 4 * sehingga 5! menjadi: 5! = 5 * 4 * 3! Secara rekursi nilai 3! adalah 3 * 2!, sehingga nilai 5! menjadi: 5! = 5 * 4 * 3 * 2! Secara rekursi nilai dari 2! adalah 2 * 1, sehingga akhirnya nilai 5! adalah sebesar: 5! = 5 * 4 * 3 * 2 * 1 = 120

65

Dari uraian ini, maka dapat dibuat suatu prosedur untuk menghitung nilai N! secara rekursi sebagai berikut: (* Program Faktorial menghitung N! dengan prosedur secara rekursi Jogiyanto H.M *) Procedure Faktorial(N : byte; Var Hasil : LongInt); Begin If N =

Lebih dari atau sama dengan

== Relasi Deskripsi ~=

Sama dengan Tidak sama dengan

&| ~

AND (dan)OR (atau) NOT (negasi)83

Command Window

line

ctrl-p Recall previous ctrl-n Recall next line Move back one Move forward Move right one Move left one Move to Move to end of Clear line Delete Delete Delete to end of84

ctrl-b character ctrl-f one character ctrl - ctrl-r word ctrl - ctrl-l word home ctrl-a beginning of line end ctrl-e line esc ctrl-u del ctrl-d character at cursor backspace ctrl-h character before cursor ctrl-k line

MATLAB Graphics(1) - Creating a Plot

t = 0:pi/100:2*pi; y = sin(t); plot(t,y) grid axis([0 2*pi -1 1]) xlabel('0 \leq \itangle \leq \pi') ylabel('sin(t)') title('Graph of the sine function') text(1,-1/3,'\it{Demonstration of plotting}')85

Matlab Graphics

x = 0:pi/100:2*pi; y = sin(x); plot(x,y) xlabel('x = 0:2\pi') ylabel('Sine of x') title('Plot of the Sine Function')

86

Multiple Graphst = 0:pi/100:2*pi; y1=sin(t); y2=sin(t+pi/2); plot(t,y1,t,y2) grid on

87

Multiple Plots

t = 0:pi/100:2*pi; y1=sin(t); y2=sin(t+pi/2); subplot(2,2,1) plot(t,y1) subplot(2,2,2) plot(t,y2)

88

MATLAB Graphics(2) - Mesh & surface plots [X,Y] = meshgrid(8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z = sin(R)./R; mesh(X,Y,Z) text(15,10,'sin(r)/r') title('Demo of 2-D plot');

89

MATLAB Graphics(3) - Subplots t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subplot(2,2,1); mesh(X) subplot(2,2,2); mesh(Y) subplot(2,2,3); mesh(Z) subplot(2,2,4); mesh(X,Y,Z)

90

Graph Functions (summary) Plot Stem Grid Xlabel Ylabel title Subplot Figure Pause : linear plot : discrete plot : add grid lines : add X-axis label : add Y-axis label : add graph title : divide figure window : create new figure window : wait for user response

91

Flow Control ifstatement switch statement

for while

loops loops

if A > B 'greater' elseif A < B 'less' else 'equal' end

continue statement break statement

for x = 1:10 r(x) = x; end

92

Create a Matlab m-file with the lines shown:close all; clear; clc; format compact; alpha = [0 45 90 135 180 225 270 315 360]; x = alpha * pi/180; y = sin(x); disp('x = '); disp(x); disp('y = '); disp(y); plot(x, y); xlabel('x axis label'); ylabel('y axis label'); title('plot title'); grid on;

initialization (close all previously open plot windows, clear workspace, clear command console, use compact output formatting) create the row vector alpha containing a sequence of angles from 0 to 360 degrees on increments of 45 degrees create a second row vector x with the angles converted from degrees to radians (note: this is a scalar multiplication of each element in the alpha vector to create the x vector) calculate the sine of each angle and store the result in a third vector , y (note: the sin() function is applied to each element of the x vector to create the y vector) display the values stored in x and y plot y vs. x add labels for the x and y axes add a title for the plot add grid lines

93

plot title 1 0.8 0.6 0.4y axis label

Save the m-file in your current directory as plot1.m Execute the m-file by typing prog1 in the command console You should see a new plot window open with the x-y plot shown at left Note the presence of the axis labels, plot title, and grid lines The command console should contain the output shown Note that since we divided the total 360 degree range of angles into 8 intervals of 45 degrees, there are a total of 8+1 or 9 values of alpha, x, and y With only 9 plot points and straight line segments connecting the points, the sine function plot has a jagged appearance more plot points would help

0.2 0 -0.2 -0.4 -0.6 -0.8 -1

0

1

2

3 4 x axis label

5

6

7

x = Columns 1 through 5 0 0.7854 2.3562 3.1416 Columns 6 through 9 3.9270 4.7124 6.2832 y = Columns 1 through 5 0 0.7071 0.7071 0.0000 Columns 6 through 9 -0.7071 -1.0000 0.0000

1.5708

5.4978

1.0000

-0.7071

-

94

close all; clear; clc; format compact; alpha = [0:2:360]; x = alpha * pi/180; y = sin(x); disp('x = '); disp(x); disp('y = '); disp(y); plot(x, y); xlabel('x axis label'); ylabel('y axis label'); title('plot title'); grid on;

Modify plot1.m as shown and save the new version as plot2.m The vector alpha is created using the colon operator to specify the sequence of angle values

The syntax for a sequence specified by the colon operator is alpha = [first:increment:last] In this case, the sequence starts with 0, ends at 360, and each value is separated by 2 Note: The sequence of values is generated by the colon operator. Placing square braces [] around the operator causes the creation of a vector to store the values. The equal sign assigns the new vector to the variable alpha. The equal sign is an assignment operator, not a statement of equality.

95

plot title 1 0.8 0.6 0.4y axis label

Execute plot2.m from the console window and verify that you can get the results shown

0.2 0 -0.2 -0.4 -0.6 -0.8 -1

0

1

2

3 4 x axis label

5

6

7

x = Columns 1 through 6 0 0.0349 0.0698 0.1047 0.1396 0.1745 Columns 7 through 12 0.2094 0.2443 0.2793 0.3142 0.3491 0.3840

96

Bagaimana Melihat Perilaku Dinamik Proses?

FUNGSI ALIH

Pemodelan PROSES (Dinamik)

Teorema TL Persamaan Differensial Linearisasi

Fungsi Transformasi LAPLACE F(s)

Ekspansi dan TLB

Input: Sinyal uji (step, ramp, dll)

MATLAB

Solusi NUMERIK

FUNGSI WAKTU f(t)

RESPON DINAMIK97

Sumber MATLAB di Internet Website MathWorks http://www.mathworks.com Newsgroup MATLAB news://salukinews.siu.edu/comp.softsys.MATLAB/ Link untuk MATLAB http://www.cse.uiuc.edu/cse301/matla b.html Mastering MATLAB Website http://www.eece.maine.edu/mm

98

Matlab homepage (news & more): http://www.mathworks.com/online tutorials: http://www.engin.umich.edu/group/c tm/ http://www.math.mtu.edu/~msgocke n/intro/intro.html you can find all this at: http://www.soton.ac.uk/~jowa/teachi ng.html

99

SOAL-SOAL dan PENGAYAAN

100

1.

Buatlah program untuk menghitung keliling lingkran. Data input dibaca dari keyboard, output dituliskan pada layar. Objektif : Menghitung keliling lingkaran Input : Jari-jari lingkaran (R) Output : Keliling lingkaran Rumus : Keliling = 2*phi*R dimana phi = 3,14 Contoh : Jika R = 10 satuan, maka Keliling = 62,83 satuan Buatlah program untuk mengkonversi nilai suhu dari satuan Celcius ke satuan Fahrenheit. Data input dibaca dari keyboard, hasilnya dituliskan di layar. Objektif : Konversi nilai suhu Input : : Suhu dalam satuan Celcius (C) Output : Suhu dalam satuan Fahrenheit (F) Rumus : F = 9/5 C + 32 dimana phi = 3,14 Contoh : Jika C = 10 derajat Celcius, maka maka F = 50 derajat Fahrenheit Buatlah program untuk mengkonversi jumlah Jam, Menit, dan Detik yang diberikan menjadi Detik. Data input dibaca dari keyboard, output dituliskan di layar. Objektif : Konversi jumlah waktu Input : : Durasi waktu dalam Jam, Menit, Detik Output : Durasi waktu dalam detik Rumus : Contoh : Jika diberikan 1 jam, 1 menit, 8 detik, maka maka nilainya sama dengan 3668 detik.101

2.

3.

DAFTAR PUSTAKA Arhami M dan Anita Desiani. 2005. Pemrograman MATLAB. Penerbit Andi Yogyakarta Joghiyanto. 1997. Turbo Pascal 5. Edisi 4. Penerbit Andi Yogyakarta

102