# Lesson #10. Procedures and functions

## Theory: Procedures and Functions

Lection in pdf format

## Procedures

### Parameterless procedure and with parameters

Lab 1, procedures:

To do: Print 60 asterisks (star *), each on a new line. Use parameterless procedure.

✍ Решение:

procedure pr(a:char); {a is a formal parameter} begin loop 60 do begin println(a); end; end; begin writeln('enter character:'); var s:= readchar; pr(s); {s is an actual parameter} end.
{0.3 points} Task 1, procedures:

To do: Create a procedure that sums any two entered integers (two parameters).

Note: the signature or header of the procedure must be as follows:

procedure PrintSum(a, b: integer);

The expected output:

enter two numbers:
>>> 2  >>> 7
result: 2 + 7 = 9


[Program name: task-01-proc.pas]

{0.3 points} Task 2, procedures:

To do: Create a procedure that displays in a column all the integers between N going down to 0 (starting with N).

Note: the signature or header of the procedure must be as follows:

procedure PrintIntegers(n: integer);

The expected output:

please, enter value of N:
>>> 8
8
7
6
5
4
3
2
1
0


[Program name: task-02-proc.pas]

{0.4 points} Task 3, procedures:

To do: Create a procedure PrintSeq(A,B,C) (A<B) that prints the sequence of numbers from A to B with a step C (A, B and C are input parameters).

Note: the signature or header of the procedure must be as follows:

procedure PrintSeq(A,B,C: integer);

The expected output:

please, enter numbers A, B, C:
>>> 2  >>> 9  >>> 2
2 4 6 8


[Program name: task-03-proc.pas]

{0.5 points} Task 4, procedures:

To do: Create a procedure that prints all the divisors of the number passed to it (the numer is entered in the main program and passed in to the procedure as a parameter).

Note: the signature or header of the procedure must be as follows:

procedure PrintDivisors(numb: integer);

The expected output:

please, enter number:
>>>18
1 2 3 6 9 18


[Program name: task-04-proc.pas]

### Input and Output parameters

Lab 2, procedures:

To do: Let’s create a subroutine for calculating the arithmetic mean (average) of two entered integer values.

✍ Algorithm:

procedure CalcAMean(a, b: integer; var Mean: real); // Mean is an output parameter begin Mean := (a + b) / 2; end;   begin var (x, y) := (3, 5); var Mean: real; CalcAMean(x, y, Mean); Print(Mean); CalcAMean(2 * 2, 8, Mean); Print(Mean); end.
Lab 3, procedures:

To do: Create a procedure to swap the values of two variables.

The expected output:

a = 10
b = 12
Result:  a=12,  b=10

✍ Algorithm:

Solution 1:

procedure Swap(var a, b: integer); begin var t := a; a := b; b := t; end;   begin var (x, y) := (3, 5); Swap(x, y); println(x,y); end.

Solution 2:

procedure Swap(var a, b: integer); begin (a, b) := (b, a); end;   begin var (x, y) := (3, 5); Swap(x, y); println(x, y); end.
{0.3 points} Task 5, procedures:

To do: Create a procedure PlusN(N, result) that calculates N + N and passes the result in the result parameter (N is input parameter, result is output parameter).

Note: the signature or header of the procedure must be as follows:

 procedure PlusN(N : integer; var result: integer);

The expected output:

please enter an integer n
>>>5
result: 10


[Program name: task-05-proc.pas]

{0.4 points} Task 6, procedures:

To do: Create a procedure Power2N(N, powerN) that calculates the power of a number (N^powerN) and passes the result in the result parameter (N and powerN are input parameters, result is an output parameter).

Note: the signature or header of the procedure must be as follows:

procedure PowerN(n, powerN: real; var result: real);

The expected output:

please enter number and exponent
>>>3  >>>4
3^4 = 81


[Program name: task-06-proc.pas]

{0.4 points} Task 7, procedures:

To do: Create a procedure FindMin(a,b, min) that finds the minimum of two entered numbers a and b and passes the result in min parameter (a and b are input parameters, min is an output parameter).

The expected output:

enter two integers for a and b:
>>>2 >>>6
min is 2


[Program name: task-07-proc.pas]

{0.4 points} Task 8, procedures:

To do: Create a procedure AddLeftDigit(D, K, res) that appends entered digit K (0<=K<=9) on the left to entered digit D (0<=D<=9) (D and K are input parameters, res is output parameter). Pass the result to the main program in the res parameter.

The expected output:

enter values for D (0<=D<=9) and K(0<=K<=9):
>>>2  >>>4
result: 42


[Program name: task-08-proc.pas]

{0.5 points} Task 9, procedures:

To do: Create a procedure FindSum(N, sum) that calculates the addition (sum) of N generated numbers. Result is passed to the main program in sum parameter (N is an input parameter, sum is an output parameter).

The expected output:

Please, input how many numbers to add:
>>>5
generated numbers:
7 3 2 8 12
sum is 32


[Program name: task-09-proc.pas]

{1.5 points} * ExtraTask 10, procedures:

To do: Create a procedure AddLeftDigits(D, K1,K2, res1, res2) that first appends entered digit K1 (0<=K1<=9) to entered positive integer D and passes the result in res1 parameter, and, afterwards, appends digit K2 to it and passes the result in res2.

The expected output:

Please, input  D,  K1 and K2 (0<=K<=9):
20   4   5
>>> 204   2045
---
342  7  1
>>> 3427   34271


[Program name: task-10-proc.pas]

## Functions

Lab 1, functions:
To do: Find the maximum among two numbers using the function.

The expected output:

✍ Algorithm:

function max(a, b: integer): integer; begin if a > b then Result := a else Result := b; end;   begin var (x, y) := readinteger2; println('maximum = ', max(x, y)) end.
{0.3 points} Task 1, functions:

To do: Create a function to find a minimum among three numbers (three parameters of the function).

The expected output:

please, input three numbers
>>>2  >>>5  >>>9
minimum = 2


[Program name: task-01-func.pas]

{0.3 points} Task 2, functions:

To do: Create a function to find an average value (the arithmetic mean) of three entered numbers (three parameters).

The expected output:

please, input three numbers
>>>2  >>>5  >>>2
average = 3


[Program name: task-02-func.pas]

{0.3 points} Task 3, functions:

To do: Create an IsDigit(D) function, which returns true if entered integer D is a digit (that is D is in the range [0,9]). In the main program output the results of this function for 3 entered numbers.

The expected output:

please, input number #1
42
false
---
please, input number #2
4
true
---
please, input number #3
-5
true


[Program name: task-03-func.pas]

Lab 2, functions:
To do: Create a function to calculate a factorial of entered number.

The expected output:

Enter number:
>>>5
5! = 120

✍ Algorithm:

function Fact(n: integer): integer; begin Result := 1; for var i := 1 to n do Result *= i end;   begin var x:=readinteger('enter number:'); println(\$'{x}! = {Fact(5)}' ) end.
{0.4 points} Task 4, functions:

To do: Create a function that calculates the sum of all numbers from 1 to N. N is a function parameter.

The expected output:

Enter the number N:
100
the sum = 5050


[Program name: task-04-func.pas]

Lab 3, short function definition:
To do: Create a function to calculate a hypotenuse of triangle (the sides of triangles are entered). Use this function to calculate the hypotenuse of 5 triangles.

✍ Algorithm:

function Hypot(a, b: real) := Sqrt(a * a + b * b);   begin loop 5 do begin var (a, b) := ReadlnReal2('Enter sides a,b:'); Println(Hypot(a, b)) end; end.
{0.4 points} Task 5, functions:

To do: Create a CircleS(R) function of real type that returns the area of a circle with radius R (R is entered real). Use this function to find the area of three circles with these radii. The area of a circle of radius R is calculated by the formula S=π*R2. As the value of PI (π), use 3.14. Use short function definition.

The expected output:

Enter radius
>>>5
S =
---
Enter radius
>>>7.8
S =


[Program name: task-05-func.pas]

{0.4 points} Task 6, functions:

To do: Create a function that calculates a power of a number. A base number and exponent are the parameters of the function. Use short function definition.

Note: To use the power() function, remember that parameters of this function are reals.

The expected output:

Enter number and exponent:
>>>5  >>>2
5 ^ 2 = 25


[Program name: task-06-func.pas]

{0.5 points} Task 7, functions:

To do: Create a the Triangle(a, h) function that calculates a perimeter of an isosceles triangle by its base a and height h drawn to the base (a and h are entered integers). By calling this function output the perimeters of the three triangles (perimeter = sum of the lengths of all the sides). To find the side b of a triangle, use the Pythagorean theorem: b2=(a/2)2+h2.

The expected output:

Enter a and h
>>>5  >>>2
perimeter = 11.40


[Program name: task-07-func.pas]

{0.3 points} Task 8, functions:

To do: Complete the previous task (# 7) by adding an overloading function to calculate a perimeter of an isosceles triangle for real values of a and h. Call this function twice — for integer arguments and real arguments.

The expected output:

Enter a and h
>>>5  >>>2
perimeter = 11.40
---
Enter a and h
>>>2.5  >>>6.8
perimeter = 16.33
---
Enter a and h
>>>15.2  >>>18.3
perimeter = 54.83


[Program name: task-08-func.pas]