Here are the programs we wrote and discussed during tutorial #2 on October 17th.

greatest.pas

```// compute the greatest of three integers

uses math;

var
x, y, z: integer;
greatest: integer;

begin

// solution 1
if (x > y) and (x > z) then
greatest := x
else if y > z then
greatest := y
else greatest := z;

// solution 2
greatest := x;
if y > greatest then greatest := y;
if z > greatest then greatest := z;

// solution 3
greatest := max(max(x, y), z);

writeln(greatest);
end.```

leap.pas

```// Is a given year a leap year?

var
year: integer;
leap: boolean;

begin

// solution 1: a series of ifs

if year mod 400 = 0 then
leap := true
else if year mod 100 = 0 then
leap := false
else if year mod 4 = 0 then
leap := true
else leap := false;

// solution 2: a single line

leap := (year mod 400 = 0) or ((year mod 4 = 0) and (year mod 100 <> 0));

writeln(leap);
end.```

day_of_year.pas

```// Given a month and day, compute the day number within the calendar year.

var
days: array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

month, day: integer;
leap: string;

i, sum: integer;

begin
write('month and day? ');
write('leap year (yes/no)? ');

if leap = 'yes' then days[2] := 29;
sum := 0;
for i := 1 to month - 1 do
sum := sum + days[i];

writeln(sum + day);
end.```

tic_tac_toe.pas

```// Allow two players to play Tic Tac Toe.
// This implementation is incomplete: it doesn't check for wins/draws.

uses crt;

var
board: array[1..3, 1..3] of integer;  // 0 = empty, 1 = X, 2 = O
player: integer = 1;

symbols: array[0..2] of char = ('.', 'X', 'O');
// or, alternatively:
//    symbols: string = '.XO';

row, column: integer;

begin
for row := 1 to 3 do
for column := 1 to 3 do
board[row, column] := 0;

repeat
clrScr;

// draw the board
for row := 1 to 3 do
begin
for column := 1 to 3 do
write(symbols[board[row, column]], ' ');
writeln;
writeln;
end;

repeat
write('player ', symbols[player], ' enter row/column: ');