**Problem #1.**
Given the interface of the following ADT, as shown below, write a
procedure ` almost_draw: boolean;` used in the ADT that determines
if all the rows but the last one for each column are occupied by a
checker. The values of ` number_of_rows` and `
number_of_cols` are given in the ` number_unit `

unit TestADT; interface uses number_unit type column_type = 1..number_of_cols; {index for columns} row_type = 1..number_of_rows; {index for columns} square_type = {index for squares} record column : column_type; row : column_type end; color_type = (red,blue); value_type = {what a square contains} record empty : boolean; {is square empty?} color : color_type {if not empty, what color it is} end; array_type = array[column_type,row_type] of value_type; board_type = object procedure Initialize; procedure Make_Move(column : column_type); procedure Get_Value(square : square_type; Val : value_type); function Get_Current_Color : color_type; function Is_Full(column : column_type) : boolean; function Win : boolean; function almost_draw : boolean; private Value : array_type; {the board configuration} current_color : color_type; {whose turn it is} end; {object board_type}

Write a recursive function ` function nocci(n : integer) :
integer` that Gives the nth number in the following sequence where the
first three numbers are 0,1,1 and the rest are the sum of the
preceding three numbers in the sequence, e.g., 0, 1, 1, 2, 4, 7, 13,
24, etc

**Problem #3**

Given a singly linked list that has the pointer ` head` to the
first node. The list has at least one node. Write a procedure called
` double` that has ` head` as its only parameter. The
procedure copies the list into one that is doubly linked. Use the
following type definitions for the singly and doubly linked list
respectively:

pointer = ^ node; node = record info : char; next : pointer end; d_pointer = ^ d_node; d_node = record info : char; left, right : d_pointer end;