# Fig. 6.22. The Fishermen's Problem: 'unprogrammed' Mathcad solution (6_21_fisherman.mcd)

This problem can be solved in Mathcad without resorting to programming. Fig. 6.22 shows how this might be done how by successive manual approximations, with Mathcad just automating the division procedure. We set a first guess at 50 fish and see if the division works; if not, we try 49; and so on, decrementing the guess by one if the division produces a non-integer at any stage. Eventually, we guess at 25 fish, and this proves to be a solution. The first fisherman throws away a fish, and takes eight, leaving 16 (eight each for the others, he thinks). The second (not knowing what the first has done) leaves ten; and the third, six.

This solves the task – but by applying 'manual' work in setting the value of the variable Catch and decrementing the value of the variable **Answer**. (Note that duplicating the block of operators fixing the actions of the three fishermen, though done for clarity in Fig 6.22, isn't necessary. It's sufficient to decrement **Answer**

and keep track of **Catch**).

Let's try to automate the search for a solution to this task.

**'1 Initial unstructured BASIC program**

**Input **"Guess"; Answer

label: Catch = Answer

For Fisherman = 1 **To** 3

Catch = Catch – 1

Catch = Catch - Catch / 3

**If** Catch > **Int**(Catch) **Then** Answer = Answer - 1: **Goto** label

**Next**

**Print**

"Answer "; Answer; “fish”

**'2. First stage of structuralization: a start**

**Input**

"Guess"; Answer

Answer = Answer + 1 ‘ step backward

label: Answer = Answer - 1 ‘ step forward

Catch = Answer

**For**

Fisherman = 1 To 3

Catch = Catch – 1

Catch = Catch - Catch / 3

**If** Catch > **Int**(Catch) **Goto** label

**Next**

**Print**

"Answer "; Answer; “fish”

** **

**'3. Second stage of structuralization: addition of an attribute**

**Input**

"Guess"; Answer

Answer = Answer + 1