You are on page 1of 1

REKURSIF WRITELN('DATA KE-',I); WRITELN('-------------------------'); 

Suatu fungsi atau prosedur dalam bahasa Pascal dapat bersifat rekursif. Artinya, WITH DATA[I] DO BEGIN WRITE('NPM : ');READLN(NPM); 
fungsi atau prosedur tersebut dapat memanggil dirinya sendiri. Berikut ini sebuah WRITE('NAMA : '); READLN(NAMA); 
contoh fungsi dan prosedur yang rekursif. WRITE('UTS : '); READLN(NILAI.UTS);
1. function faktorial (nilai : integer) : integer; WRITE('UAS : '); READLN(NILAI.UAS); 
begin WRITE('TUGAS : '); READLN(NILAI.TGS); 
if nilai <= 0 then faktorial := 1; {PROSES} NILAI.NA := (0.3 * NILAI.UTS) + (0.3 * NILAI.UAS) + (0.4 *
else faktorial := nilai * faktorial (nilai-1) NILAI.TGS); 
end; {SELEKSI} IF (NILAI.NA >= 80) AND (NILAI.NA <= 100) 
THEN BEGIN NILAI.HRF := 'A'; 
Var PRE := 'ISTIMEWA'; END ELSE IF (NILAI.NA >= 70) AND (NILAI.NA
N : integer; < 80) 
Begin THEN BEGIN NILAI.HRF := 'B'; 
Write(‘Berapa faktorial ? ‘); PRE := 'BAIK'; END ELSE IF (NILAI.NA >= 60) AND (NILAI.NA < 70) 
Readln(N); THEN BEGIN NILAI.HRF := 'C';
Writeln(N,’ faktorial = ‘,faktorial(N):9:0); PRE := 'CUKUP'; END ELSE IF (NILAI.NA >= 50) AND (NILAI.NA <
End. 60) THEN
faktorial (4) = 4 * faktorial (3) BEGIN
3 * faktorial (2) NILAI.HRF := 'D';
PRE := 'KURANG';
END
ELSE BEGIN
1 * faktorial (0) NILAI.HRF := 'E';
1 PRE := 'GAGAL';
=4*3*2*1*1 END;
= 24
2. Bilangan Fibonanci: IF (NILAI.HRF = 'D') OR (NILAI.HRF = 'E') THEN
F (0) = 0 KET := 'TIDAK LULUS'
F (1) = 1 ELSE
KET := 'LULUS';
F (n) = F ( n-1 ) + F (n-2); untuk n >1 END; {end with}
Function fibonacci ( n : integer ) : integer; END; {end for}
Begin
If n = 0 then fibonacci := 0 {OUTPUT}
Else CLRSCR;
If n := 1 then fibonacci := 1 WRITELN('===========================================
Else fibonacci := fibonacci (n-1) + fibonacci (n-2); =============================');
End; WRITELN('NO. NPM NAMA MAHASISWA UTS UAS TGS NA HRF
3. Procedure reverse ( num : integer ); PREDIKAT KETERANGAN');
Begin WRITELN('===========================================
If num < 10 then write(num) =============================');
Else begin FOR I := 1 TO N DO
Write(num mod 10); BEGIN
Reverse(num div 10); WRITE(I:3);
End; WITH DATA[I] DO
End; BEGIN
{record} WRITE(NPM:13);
uses wincrt; WRITE(NAMA:30);
WRITE(NILAI.UTS:7:2);
Type mahasiswa = record WRITE(NILAI.UAS:7:2);
Nama: string[15]; WRITE(NILAI.TGS:7:2);
Nim:string[10]; WRITE(NILAI.NA:7:2);
IPK: real; WRITE(NILAI.HRF:3);
WRITE(PRE:10);
end; WRITE(KET:10);
Var Mhs: Mahasiswa; END;
type WRITELN;
tipesiswa=record END;
WRITELN('===========================================
Nama: string[15]; =============================');
end; WRITELN('Press anykey to close...');
begin READKEY;
write('nama : ');readln(mhs.nama); END.
write('nim : ');readln(mhs.nim);
write('IPK : ');readln(mhs.IPK);
writeln;
writeln('Nama anda:',mhs.nama);
writeln('nim anda:',mhs.nim);
writeln('IPK anda:',mhs.IPK:4:2);
end.

{Multi record}

USES WINCRT;
TYPE rNILAI = RECORD
UTS, UAS, TGS, NA : REAL;
HRF : CHAR;
END;

rMAHASISWA = RECORD
NPM : STRING[13];
NAMA : STRING[30];
PRE, KET : STRING;
NILAI : rNILAI;
END;

VAR DATA : ARRAY[1..100] OF rMAHASISWA;


I, N : BYTE;

BEGIN CLRSCR;

{VALIDASI}
REPEAT
WRITELN('Validasi jumlah data 1-100');
WRITELN('==========================');
WRITE ('Jumlah data : ');
READLN (N);
UNTIL (N >= 1) AND (N <= 100);
{INPUT} 
FOR I := 1 TO N DO BEGIN
CLRSCR; 

You might also like