Test Your Knowledge: Exercises

Exercise 9-1. You’ll use the following program for this exercise. Either type it into Visual Studio, or copy it from this book’s website. Note that this is spaghetti code—you’d never write method calls like this, but that’s why this is the debugging chapter.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercise_9_1
{
     class Tester
    {
        public void Run( )
        {
            int myInt = 42;
            float myFloat = 9.685f;
            Console.WriteLine("Before starting: 
 value of myInt: 
                    {0} 
 value of myFloat: {1}", myInt, myFloat);
            // pass the variables by reference
            Multiply( ref myInt, ref myFloat );
            Console.WriteLine("After finishing: 
 value of myInt: 
                    {0} 
 value of myFloat: {1}", myInt, myFloat);
         }
         private static void Multiply (ref int theInt, 
                                       ref float theFloat)
         {
            theInt = theInt * 2;
            theFloat = theFloat *2;
            Divide( ref theInt, ref theFloat);
         }
         private static void Divide (ref int theInt, 
                                     ref float theFloat)
         {
            theInt = theInt / 3;
            theFloat = theFloat / 3;
            Add(ref theInt, ref theFloat);
         }
         public static void Add(ref int theInt, 
                                ref float theFloat)
         {
            theInt = theInt + theInt;
            theFloat = theFloat + theFloat;
         }
         static void Main( )
         {
            Tester t = new Tester( );
            t.Run( );
         }
    }
}
  1. Place a breakpoint in Run( ) on the following line, and then run the program:

    Console.WriteLine("Before starting: 
     value of myInt:
                 {0} 
     value of myFloat: {1}", myInt, myFloat);

    What are the values of myInt and myFloat at the breakpoint?

  2. Step into the Multiply( ) method, up to the call to Divide( ). What are the values of theInt and theFloat at this point?

  3. Stop debugging, run the program again, and when it reaches the breakpoint in Run( ), set a watch on myInt. Step through the methods. When does the value of myInt change?

  4. Set another breakpoint in Add( ) at this line:

    theInt = theInt + theInt;

    Run the program. How many calls are in the call stack when the program reaches this breakpoint?

Exercise 9-2. The program in this exercise is similar to the first, but it has a logic error. Type this program into Visual Studio, or download it from this book’s website:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercise_9_2
{
    class Tester
    {
        public void Run( )
        {
            int myInt = 42;
            float myFloat = 9.685f;
            Console.WriteLine("Before starting: 
 value of myInt:
                     {0} 
 value of myFloat: {1}", myInt, myFloat);
            // pass the variables by reference
            Multiply( ref myInt, ref myFloat );
            Console.WriteLine("After finishing: 
 value of myInt:
                     {0} 
 value of myFloat: {1}", myInt, myFloat);
         }
         private static void Multiply (ref int theInt, 
                                       ref float theFloat)
         {
            theInt = theInt * 2;
            theFloat = theFloat *2;
            Divide( ref theInt, ref theFloat);
         }
         private static void Divide (ref int theInt, 
                                     ref float theFloat)
         {
            theInt = theInt * 3;
            theFloat = theFloat * 3;
            Add(ref theInt, ref theFloat);
         }
         public static void Add(ref int theInt, 
                                ref float theFloat)
         {
            theInt = theInt - theInt;
            theFloat = theFloat - theFloat;
         }
         static void Main( )
         {
            Tester t = new Tester( );
            t.Run( );
         }
    }
}

If you run this program, you will not get the same results as you did in the preceding exercise. Use the debugging tools you just learned about to find the error. Correct the error, and then run the program again to see whether the results are correct.

Exercise 9-3. Type the following program into Visual Studio, or download it from the book’s website:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercise_9_3
{
    class Program
    {
        public static int Factorial(int myInt)
        {
            int result = 1;
            for (int i = 1; i < myInt; i++)
            {
                result = result * i;
            }
            return result;
        }

        static void Main( )
        {
            int input = 5;
            Console.WriteLine("{0} factorial is {1}", 
                               input, Factorial(input) );
        }
    }
}

This program is supposed to take the factorial of the value of input, except it’s not working properly. (The factorial of n is the product of all the positive integers less than or equal to n. So, the factorial of 5 is 5 x 4 x 3 x 2 x 1=120.) Find the error and resolve it.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset