CSE 111, Fall 00, HW #6 ANSWER

CSE 111, Fall 2000

#### HW #6 ANSWER

### Corrected Version

Here are 2 versions of the program: one with no extraneous comments, which is shorter and easier to see at a glance; and one with comments, which is longer, but might be easier to understand:

Short, uncommented version:

    program Nim5;

    {Bill Rapaport, 11 Oct 00                            }
    {CSE 111, Fall 2000                                  }
    {Answer to virtual HW #6                             }
    {http://www.cse.buffalo.edu/~rapaport/111F00/hw6.html}

    var your1stmove,
        your2ndmove  : varying [20] of char;

    begin {Nim5}

      writeln('Your move!');
      readln(your1stmove);
      if your1stmove = 'X'
         then begin {if your1stmove = 'X'}

                writeln('I play O;');
                writeln('your move');
                readln(your2ndmove);
                if your2ndmove = 'X'
                   then begin {if your2ndmove = 'X'}

                          writeln('I play OO;');
                          writeln('  I win!')

                        end   {if your2ndmove = 'X'}

                   else begin {if your2ndmove <> 'X'}

                          writeln('I play O;');
                          writeln('  I win!')

                        end   {if your2ndmove <> 'X'}

              end   {if your1stmove = 'X'}

         else begin {if your1stmove <> 'X'}

                writeln('I play OO;');
                writeln('your move');
                readln(your2ndmove);
                if your2ndmove = 'X'
                   then writeln('You win!')
                   else writeln('That''s illegal!')

              end   {if your1stmove <> 'X'}

    end.  {Nim5}

Long, commented version:

    program Nim5; {Can't be called "5-Nim", because program names are   }
                  {identifiers, and identifiers must begin with letters,}
                  {not numerals, and cannot have "-" in them.           }

    {Bill Rapaport, 11 Oct 00                            }
    {CSE 111, Fall 2000                                  }
    {Answer to virtual HW #6                             }
    {http://www.cse.buffalo.edu/~rapaport/111F00/hw6.html}

    var your1stmove,
        your2ndmove  : varying [20] of char;

    begin {Nim5}

      {this is the code for decision tree "A"}

      writeln('Your move!');
      readln(your1stmove);
      if your1stmove = 'X'
         then begin {if your1stmove = 'X'}

                {this is the code for decision tree "B"}

                writeln('I play O;');
                writeln('your move');
                readln(your2ndmove);
                if your2ndmove = 'X'
                   then begin {if your2ndmove = 'X'}

                          {this is the code for decision tree "D"}

                          writeln('I play OO;');
                          writeln('  I win!')

                        end   {if your2ndmove = 'X'}

                   else begin {if your2ndmove <> 'X'}

                          {this is the code for decision tree "E"}

                          writeln('I play O;');
                          writeln('  I win!')

                        end   {if your2ndmove <> 'X'}

              end   {if your1stmove = 'X'}

         else begin {if your1stmove <> 'X'}

                {this is the code for decision tree "C"}

                writeln('I play OO;');
                writeln('your move');
                readln(your2ndmove);
                if your2ndmove = 'X'
                   then begin {if your2ndmove = 'X'}

                          {this is the code for decision tree "F"}

                          writeln('You win!')

                        end   {if your2ndmove = 'X'}
                        {Note:  Strictly speaking, the begin/end pair }
                        {       surrounding this single "writeln"     }
                        {instruction is not needed.                   }

                   else begin {if your2ndmove <> 'X'}

                          {this is the code for decision tree "G"}

                          writeln('That''s illegal!')

                        end   {if your2ndmove <> 'X'}
                        {Note:  Strictly speaking, the begin/end pair }
                        {       surrounding this single "writeln"     }
                        {instruction is not needed.                   }

                        {Further note:  Look carefully at how Pascal  }
                        {       requires you to print an apostrophe!  }

              end   {if your1stmove <> 'X'}

    end.  {Nim5}