SUBPROGRAM IN PASCAL

advertisement
SUBPROGRAM IN PASCAL
Function
1
Pascal Functions
In Pascal, a procedure takes inputs (parameters) but does not
return a value (except by using reference parameters).
A Pascal function takes inputs (parameters) and returns a
single value to the calling program.
The function name is used to indicate the value returned by
the function.
2
Pascal Function Cont’d
Second type o subprogram supported by Turbo Pascal .
We have already seen and used some of Pascal’s own functions e.g.
Upcase, Length, Sqr, Sqrt.
A Function may be viewed as a special type of procedure that returns exactly one
result.
Functions are declared , called and can be used with variable and value
parameters.
3
Pascal Function Cont’d
Functions differ from procedures in that :
• The return type of a function is included in the function heading,
Return type can be any simple data type i.e. REAL, INTEGER,
CHAR, BOOLEAN, STRING, an Enumerated type or a subrange
type.
• Within the function body, some value must be assigned to the function
name I.e. the return value.
• Unlike procedure calls, function calls do not appear as separate
statements. They are treated as though they were values and so are
used in assignment statement, input/output statements and general
expressions.
4
Template
FUNCTION function_name ( parameter list) : Data_
Type;
e.g. Function Cube (num :integer) :integer;
Begin
Cube := num * num * num;
end;
5
Example
program calcCube;
function Cube( n : integer) : integer;
begin
Cube := n * n * n;
end;
var
number, answer : integer;
begin
writeln('Enter a number: ');
readln(number);
answer := Cube(number);
writeln('The cube of ', number, ' is ',
answer);
end.
6
Recall Mathematical Functions
A function takes one or more inputs and produces a single output for each
input or set of inputs.
Examples:
A function to double the value of the input:
d(x) = 2x
d(2) = 4
d(17) = 34
A function to cube the value of the input:
c(x) = x3
c(2) = 8
c(5) = 125
A function to compute the volume of a cylinder from the radius and
height:
v(r, h) = p r2h
7
If X, Y, A and B are global variables of type integer, some
typical calls might be :
1. X := cube(5);
2. Y := 3* Cube(2) - 10 ;
3. A:= 3, Writeln(cube(A));
4. If Cube(A) > B then….
8
NOTE:
1. When declaring a function, you must always give the function a data
type which indicates the type of the single result.
E.g. FUNCTION Sample : INTEGER;
or FUNCTION Sample (a:integer;b,c :real) : BOOLEAN;
2. The function code must include a statement that assigns the result to
the function name. In this way the function acts as a ‘variable’ in the
main program.
3 Use functions when you wish to calculate a single value that will be
used in the main program otherwise use procedures.
9
Example
Write a function that sums integer elements in an array and returns the
value of sum.Incorporate this function into a main program that sums
the contents of two arrays. (assume the arrays contain values in the
elements and are of equal length)
Given the global variables
Type
array_num = array [1..50] of integer;
VAR
array1, array2, : array_num;
Total : integer;
10
Example (Cont’d)
FUNCTION SumArray( A : Array_num): integer;
Var
index, sum : integer;
Begin
sum:= 0;
for index := 1 to 50 do
sum:= sum + A[index];
SumArray := sum;
End;
Begin
{ Main}
Total: = SumArray(array1)
+
SumArray( array2)
11
Example (Cont’d)
Write a function that indicates if a Name parameter is valid . A name is valid if it contains
uppercase characters.
Global variable , PersonName type string
FUNCTION ValidName ( Name : String) : BOOLEAN;
Var
index : integer;
begin
ValidName : = true;
For index := 1 to length(Name) do
If (Name[index] < ‘A’) OR (Name[index] > ‘Z’)
then
ValidName := False;
end;{ function}
12
Example (cont’d)
Begin
writeln(‘Enter name’);
Readln( PersonName);
If ValidName (PersonName) then
writeln(‘Ok’);
End.
13
Standard Pascal does not provide a standard power or
factorial function.
1. Power
the function should receive two integers X and N , (where
N>= 0) and compute
N
X
Use the approach of multiplying repeatedly by X as we
know the number of iterations. The loop will count down
to zero fron an initial value of N.
For each iteration of the loop X is multiplied by the
product.
14
FUNCTION Power ( X, N :integer) : Integer;
Var
Result :integer;
Begin
Result :=1;
while N > 0 do
Begin
result := result * X;
N := N-1;
End;
power : result;
end;
15
2. Function to calculate the Factorial
e.g. 5 factorial 5x4x3x2x1
FUNCTION
Factorial (X : integer) : integer;
Var
Result : integer;
Begin
Result := 1;
While X > 0
do
Begin
Result : Result * x;
X:= X -1;
end;
Factorial : result;
End;
16
Boolean Function
Boolean function can be useful when a branch or loop depends on
some complex condition.
Rather than code the condition directly into the IF or WHILE
statements, can call a Boolean function to form the controlling
expression.
E.g. If we had a program that works with triangles, the program reads 3
angles . Before performing any calculations on these angles we want to
check if they form a triangle ( sum the angles and confirm that they
add up to 180).
17
FUNCION Triangle ( Angle1, Angle2, Angle3 : Real)
:Boolean;
Begin
If Angle1 + Angle2 + Angle3 -180 = 0
then
triangle := true;
end;
Begin
Readln( AngleA, angleB, angleC);
If Triangle(( AngleA, angleB, angleC) then
writeln (‘the 3 angles form a triangle’);
else
writeln (‘ the 3 angles do not form a
triangle);
End.
18
When to use a function
There aren’t any formal rules determining when to use a PROCEDURE
and when to use a FUNCTION but here are some guidelines
1. If the subprogram must return more than one value or modify the
actual parameters, don’t use a FUNCTION
2. If the subprogram must perform input/output, do not use a
FUNCTION.
3. If there is only one value returned from the subprogram and it is
boolean use a function
4. If there is only one value returned and that value is used immediately
in an expression(statement) use a function.
5. When in doubt use a procedure.
19
Multiple Subprogram
• When a program contains more than one subprogram, they
can be called from the main program in any order.
• One subprogram may call another as long as the
subprogram being called appears before the subprogram
that calls it.
• The same identifier names can be used within different
subprograms- as they are contained in separate blocks.
20
Exercises
• Tuliskan fungsi untuk mengkonversikan harga karakter angka (0..9)
menjadi harga numerik sesuai dengan karakter yang tertulis. Contoh:
‘8’8, ‘4’4
• Tuliskan fungsi IsAnA yang mentest apakah sebuah karakter yang
diberikan kepadanya adalah sebuah huruf ‘A’. Harga yang dihasilkan
adalah benar jika huruf itu ‘A’,salah jika huruf itu bukan ‘A’. Contoh:
– IsAnA(‘A’) true
– IsAnA(‘X’) false
• Tuliskanlah fungsi, yang jika diberikan sebuah angka Cm yang
menyatakan panjang dalam cm, akan menghasilkan pasangan harga
<x1,x2> sesuai dengan rumus ukuran metris (1 m = 100 cm) sehingga
x1*100+x2 = cm. Contoh:
– F(100) = <1,0>
– F(355) = <3,55>
21
Exercises
• Tuliskan fungsi IsPrima(), yang mentest apakah sebuah
bilangan integer yang diberikan merupakan bilangan prima
atau bukan. Contoh: IsPrima(2)true, IsPrima(15)false.
• Tuliskan fungsi IsEven(), yang mentest apakah sebuah
bilangan integer yang diberikan merupakan bilangan genap
atau bukan. Contoh: IsEven(43)false, IsEven(32)true.
• Tuliskan fungsi IsOdd(), yang mentest apakah sebuah
bilangan integer yang diberikan merupakan bilangan ganjil
atau bukan. Contoh: IsOdd(24)false, IsOdd(43)true.
22
Exercises
• Tuliskanlah sebuah fungsi MAX2, yang menerima
masukan dua buah bilangan integer dan menghasilkan
sebuah bilangan integer yaitu salah satu diantara nilai dua
buah bilangan tersebut yang terbesar.
• Kemudian, dengan memakai fungsi MAX2, tuliskan
sebuah fungsi lain MAX3 yang menghasilkan nilai
terbesar dari tiga buah bilangan integer. Contoh:
– MAX2(1,2)2
– MAX2(10,2)10
– MAX3(1,2,3) adalah MAX2(MAX2(1,2),3)3
– MAX3(10,2,3) adalah MAX3(MAX2(10,2),3)10
23
Exercises
Didefinisikan tipe terstruktur untuk mewakili hari seperti dalam kalender
yang kita pakai sehari-hari:
type nama: DATE<tanggal,bulan,tahun>
Tuliskan algoritma untuk:
• Membaca sebuah tanggal dan sebuah kode bahasa penulisan
(1=Inggris, 2=Indonesia, 3=Perancis),
• Menuliskan tanggal keesokan harinya sesuai dengan kode bahasa.
– Inggris, DATE ditulis dalam: bulan,’/’,tanggal,’/’,tahun
– Indonesia, DATE ditulis dalam: tanggal,’-’,bulan,’-’,tahun
– Perancis, DATE ditulis dalam: tanggal,’/’,bulan,’/’,tahun
• Proses menghitung hari esok dilakukan oleh sebuah fungsi NextDay
yang menerima masukan sebuah tanggal dan menghasilkan tanggal
keesokan harinya. Contoh:
– NextDay(<13,4,1990>,1)4/14/1990
– NextDay(<30,1,1990>,2)31-1-1990
– NextDay(<31,12,1990>,1)1/1/1991
24
Referensi
• Liem Inggriani, Diktat kuliah IF223
Algoritma dan Pemrograman, Jurusan
Teknik Informatika ITB, 1999
• DT/266/1, Programming Language,
Departement of Computer Science.
25
Download