CS291 Details of homework assignments HW1..HW6 and Quiz 1

Contents

  • Do your own homework
  • Getting Started
  • Submit your homework
  • HW1 Match key words/ reserved words
  • HW2 A program to make change
  • HW3 Implement a rectangle class
  • HW4 Do multiple virtual inheritance
  • Quiz 1
  • HW5 Make a friend class with operator<<
  • HW6 Write a template class
  • HW7..HW11
  • Other important links
  • Do your own homework!

    You can discuss homework with other class members but DO NOT COPY!

    
    
    

    Getting Started

    VC++ on PC at UMBC

      This section gives step by step instructions for new users.
      (If you know another way, don't complain, just do it your way.)
    
      Visual C++ 6.0 on UMBC PC's
      (Make your own small changes for your personal PC)
    
      1) Find a PC on the ground floor or first floor of the
         Engineering and Computer Science, ECS, building.
         When not being used for classes, there are more PC labs
         on first floor, e.g. ECS104, Third floor, e.g. ECS333.
      2) It should have a Windows NT logo. Press  ctrl alt del  keys
         all at the same time. (click on any stupid boxes that come up)
      3) type your user name (same on gl and PC's) press tab and
         type your password (same on gl and PC's) press enter. (wait!)
      4) press "start", move mouse to  programs  , hold left mouse button
         down and move to MSDOS command prompt, release mouse button.
         You should see a rather plain window with something like  S:\>
         (You might want to create a directory for this class and go there:
             md  cs291
             cd  cs291   )
      5) Type in your first C++ program using notepad,
         type   notepad hello.cpp
         then type the following (proofread it!)
             // hello.cpp
             #include <iostream>
             using namespace std;
             int main()
             {
               cout << "Hello." << endl;
               return 0;
             }
      6) Click on file. Click on exit, Click on YES to save your typing.
      7) type   cl /GX /ML hello.cpp
         If this says 'cl not found' then you need to run a .bat file:
         C:\program files\microsoft visual studio\VC98\BIN\VCVARS32.BAT
         go to 7)  (or use system icon, environment, path - and add to path.)
      8) type   hello
      9) pat yourself on the back if line 8) responded   Hello.
         When you log off, your file is not lost. Your S:\ directory
         is available on any UMBC networked PC, Linux, SGI, SUN, etc. .
         (the full name of your directory is:
          /afs/umbc.edu/users/x/y/xyz/home  where xyz is your last name
          x is first letter of your last name, y is second letter of last name )
     10) Now click on the  Netscape icon to the left of the screen
         Click twice on the text line that says  http://www.umbc.edu
         Edit this line to say  http://www.csee.umbc.edu/~squire  and
         press return. You should see your instructor watching you.
         Click on CMSC 291  to see the course WEB page.
         Click on syllabus, homework, etc. for valuable information.
     11) To get files you read on the WEB into your directory,
         right click on the link, click on  save link as ,
         move up in the directory box to get to where you see  S:  and
         click on S: which is your home directory on the network.
         Click on open. Click on save.
         (Now isn't that easy :-))
     12) compile  .cc  files with  cl /GX /ML /TP  xxx.cc
     13) edit files with   notepad xxx.cc   or whatever file name
     14) Use the "Visual" full screen VC++ if you know how, just don't
         ask the instructor how to do it. (Take the class in VC++) 
         V1) Using Visual C++, use Programs, Visual Studio, Visual C++
         V2) Use  File, New  A new window should appear
         V3) click on "Project" tab if not in front 
         V4) click on WIN32 Console Application and pick a name for project, hw1.
             Click OK.
             You can experiment by clicking on Hello project, Build, rebuild all,
             and Build, execute  to see what a compile and execute looks like.
         V5) You may want to delete  #include "stdafx.h" it should not be needed.
         V6) To keep things simple, you will need a new project for each homework.
    

    g++ on gl and Linux

      0)  Use a Lab machine, SGI - just log in, PC - reboot, down arrow to Linux.
          Log in from home or office:
          telnet  irix.gl.umbc.edu    for SGI Unix
          telnet  linux.gl.umbc.edu   for Linux Unix
      1)  Editors include  emacs and vi and others.
          Use your favorite editor to type in the file  hello.cc  containing
             // hello.cc
             #include <iostream>
             using namespace std;
             int main()
             {
               cout << "Hello." << endl;
               return 0;
             }
      2) type  g++ -o hello  hello.cc
         (ignore warning about some library file)
      3) type   hello
      4) Pat yourself on the back if line 3) responded   Hello.
      5) Use Netscape to get the CMSC 291 WEB page at
         http://www.csee.umbc.edu/~squire/cs291.shtml     (NOT a typo!)
      6) Download files with right click, save link as, open, save.
    

    SGI C++ compiler CC on gl

      1)  Use your favorite editor to type in the file  hello.C  containing
             // hello.C
             #include <iostream>
             using namespace std;
             int main()
             {
               cout << "Hello." << endl;
               return 0;
             }
      2) Don't try to compile yet! You need some include files first.
         Use Netscape to get  include_gl.tar
         to your working directory. type  tar -xvf include_gl.tar
         This has created a subdirectory named  include  with the
         files needed to make SGI look like a ISO Standard C++ compiler.
         Read  chaotic compilers for more info.
      3) type  CC -n32 -Iinclude -o hello  hello.C
      4) type   hello
      5) Pat yourself on the back if line 4) responded   Hello.
      6) Use Netscape to get the CMSC 291 WEB page at
         http://www.csee.umbc.edu/~squire/cs291.shtml     (NOT a typo!)
      7) Download files with right click, save link as, open, save.
    
      2CS) On Retriever or machines on the CS server, there is a different
           version of SGI CC (but being updated to be same) so ...
           Use Netscape to get  include_cs.tar
           to your working directory. type  tar -xvf include_cs.tar
           This has created a subdirectory named  include  with the
           files needed to make SGI look like a ISO Standard C++ compiler.
    
    

    Submit your homework

      The most important item on all homework is YOUR NAME!
      within the first few lines of each file submitted.
    
      use the following command line in a Unix shell window on any  gl  machine
    
         submit  cs291  HW1  <your-file-name>
    
      Note:  "submit  cs" are lower case, "HW" is upper case, fill in homework
      number and use the name of your file for 
    
      Homework must be submitted when due.  You loose 10%, one grade,
      the first day homework is late. Then 10% more per week, each week
      homework is late. Max of 50% off. A ZERO really hurts your final points.
      Do and turn in all homework, even if it is late.
    
      Homework is always due by 11:59 pm on the scheduled day.
      In case of  gl  computer outage on the due day, automatic extension
      of homework due date until one day after  gl  computers are back online.
    
      If "submit" does not work, then EMail your homework to the
      instructor with each file as an attachment. PLAIN TEXT ATTACHMENT!
    
      EMail only plain text! No word processor formats.
      You may use a word processor or other software tools but only submit
      plain text (there should be some "save as" that gives plain text).
    
      Special instructions if your are on a PC in a lab, at home on an ISP
      or anywhere on the Internet:
    
      Get your file ready to submit on your local machine.
    
      In a MSDOS window or Unix shell window (they are the same for this)
    
      type the statements        ftp  gl.umbc.edu
                                 <enter your UMBC user name>
                                 <enter your UMBC password>
                                 put <your-file-name>
                                 quit
    
      Obviously, do not type the greater than or less than symbols,
      they mean you have to fill in something. End every line by pressing
      Enter. Repeat the 'put' line for as many files as you are going to submit.
      Use ASCII mode for text files, binary mode for graphics and binary files.
    
      Now, do the actual 'submit' by typing the statements
    
                                 telnet  gl.umbc.edu
                                 <enter your UMBC user name>
                                 <enter your UMBC password>
                                 submit cs291 HW1 hw1.txt
                                 ^D
    
      You can type the 'submit' line for more files or add more files to
      the end of the 'submit' command. ^D stands for holding down the ctrl
      key and pressing the "d" key. ^D is read control D. This example was for
      homework 1. Homework 2 would use
                                 submit cs291 HW2 change.cpp
    
    

    HW1 Reserved Words 25 points

      
      See the  C++ Compact Summary 
      And pair the reserved words with their short definition.
      Your answer file is just the numbers from 1 to 26 followed
      by the answer letter a to z in the correct order.
    
     1) bool       
     2) catch      
     3) class      
     4) delete     
     5) dynamic_cast
     6) explicit   
     7) export     
     8) false      
     9) friend     
    10) mutable    
    11) namespace  
    12) new        
    13) operator   
    14) private    
    15) protected  
    16) public     
    17) template   
    18) this       
    19) throw      
    20) true       
    21) try        
    22) typeid     
    23) typename   
    24) using      
    25) virtual    
    26) wchar_t    
    
    a) followed by an operator symbol, can define overloaded functions
    b) function for getting the type of a typename, == and != comparison
    c) specifies the following name is a type
    d) free space created by 'new' ( do not use 'free' )
    e) catch block that handles a thrown exception
    f) value of type bool, meaning yes
    g) basic declaration for type wide character (internationalization)
    h) try block that precedes a catch block
    i) cast a pointer type if legal, else return null
    j) override const member functions in classes
    k) the stuff after this is visible outside the class
    l) the stuff after this is not visible outside the class
    m) the stuff after this is for classes that inherit this class
    n) a scope for declarations and function prototypes
    o) basic declaration of type Boolean
    p) throw an exception
    q) start a class definition
    r) defines template class or function
    s) the class object, used in 'return' statements and others
    t) get storage, free storage later with 'delete' ( do not use malloc)
    u) makes an entity in a namespace directly visible
    v) a function that can see internal stuff in a class
    w) restricts constructors to not allow  myclass a = 7;
    x) precedes a template that can be used by other files
    y) value of type bool, meaning no
    z) this type of function is hidden if defined by an inheritor
    
    make the file name be  hw1.txt
    submit the file on a gl machine using  submit cs291 HW1 hw1.txt
    
    

    HW2 Make Change 25 points

     
      Write a Standard C++ program (NOT a C program, NOT old C++)
      that reads an integer and for integers in the range 1 through 99
      prints the (non-zero) number of US coins for this amount of money.
    
      e.g.  Input: 99  Output:  3 quarters  2 dimes  4 pennies
            Input: 25  Output:  1 quarter
            Input: 10  Output:  1 dime
            Input:  5  Output:  1 nickel
            Input:  1  Output:  1 penny
    
      For an input less than one or greater than 99 (or any other garbage)
      print "no change possible".
    
      ABSOLUTELY do not let your program die or go into a infinite loop
      when it reads bad data. This applies to all homework. This is
      standard C++ philosophy, good quality software.
    
      Do NOT print zero(0) for any coin. Output such as  0 pennies  will loose
      points.
    
      You can use the starter file   change.cpp or
      do your own program from scratch. Compile and execute this before changing.
    
      See instructions above  Getting Started for how to compile.
    
      Get the file  change.dat that has the following data
      99
      94
      25
      10
      5
      1
      -5
      100
      ABC
      11any comment
      74 no more
    
      Test and check your program interactively.
      Type   change   followed by pressing the Enter key
      Type   99       followed by pressing the Enter key
      Type   ABC      followed by pressing the Enter key, get no change possible
      Type   11a      followed by pressing the Enter key, get normal output
      Type   ^Z (ctrl and Z) to stop on MS Windows, ^D to stop on Unix
    
      Now, test and check your program using the data file  change.dat
      Type    change < change.dat > change.out
    
      Now look at change.out with your favorite editor and be sure it is correct.
    
      Submit only your file   change.cpp  (for Visual C++)  or
                              change.cc   (for g++)  or
                              change.C    (for SGI CC)
    
      No matter what you called the file during development, rename it to
      one of the three names above. Your program will be automatically graded
      by a script. It will appear you did not submit a program if you do
      not use one of the three standard names. (It really does not matter
      which compiler you used during development, all programs should
      work on all compilers.)
    
      Note The C and C++  "if" statements are identical. See the  C++ Compact Summary 
    
      The operator  %  used in a statement such as  x = x % 25;  (or  x %= 25;)
      computes  x modulo 25  or in other words removes all multiples of 25
      from x.  This is equivalent to   x = x - (x/25)*25;
      Other operators are in  C++ Compact Summary 
    
    

    HW3 Code a class and test it 25 points

      Write a very simple class for a Rectangle that has a constructor
      and Set, Show and Move member functions.
      (To avoid conflicts with other library names, do not use
       the specific names: rectangle, Rectangle, Height, height, Width, width.)
    
      The Rectangle shall have an X, Y, height and width in its data
      structure.
    
      Write a main program to test your class with at least two rectangle
      objects. Use every member function at least twice.
    
      Observe: You should have three files.
      rectangle.h         that has the class definition
      rectangle.cpp       that implements the
      test_rectangle.cpp  the main program to test rectangle.*
    
      Here is an example for a Circle class, all as one file: circle_all.cpp
    
    // circle_all.cpp  has files  circle.h  test_circle.cpp  circle.cpp
    //
    // Demonstrate a very simple class and its test program all in one file
    
    
    // circle.h    should be in a file by itself
    //
    // Define a class that can be used to get objects of type Circle.
    // A class defines a data structure and the member functions
    // that operate on the data structure.
    // The name of the class becomes a type name.
    
    class Circle  // the 'public' part should be first, the user interface
                  // the 'private' part should be last, the safe data
    {
      public:
        Circle(double X, double Y, double R);  // a constructor
        void Show();                           // a member function
      private:
        double Xcenter;
        double Ycenter;
        double radius;
    };
    
    // test_circle.cpp   should be in a file by itself
    #include <iostream>
    // #include "circle.h"   remove  //  when in a file by itself
    using namespace std;
    
    int main() // keep Circle stuff, add Rectangle stuff
    {
      Circle c1(1.0, 2.0, 0.5);  // construct an object named 'c1' of type 'Circle'
      Circle circle2(2.5, 3.0, 0.1);  // another object named 'circle2'
    
      c1.Show();       // tell the object c1 to execute the member function Show
      circle2.Show();  // circle2 runs its member function Show
    
      return 0;
    }
    
    
    // circle.cpp   should be in a file by itself
    // implement the member functions of the class Circle
    #include <iostream>
    // #include "circle.h"   remove  //  when in a file by itself
    using namespace std;
    
    Circle::Circle(double X, double Y, double R)
    {
      Xcenter = X;
      Ycenter = Y;
      radius  = R;
    }
    
    void Circle::Show()
    {
      cout << "X, Y, R " << Xcenter << "  " << Ycenter << "  "
           << radius << endl;
    }
    
    The file above can be saved to your directory and compiled then executed with:
    
      on gl SGI   CC -n32 -Iinclude -o circle_all  circle_all.C
                  circle_all
    
      on Unix     g++ -o circle_all  circle_all.cc
                  circle_all
    
      on PC VC++  cl /GX /ML circle_all.cpp
                  circle_all
    
    
    Having everything in one file makes it convenient to edit but
    is not convenient to be able to reuse classes. A more complete program than
    above is shown again as three files followed by the compilation commands.
    (This can be used as a starter file for your homework.)
    
    // circle.h 
    #ifndef CIRCLE_H   // be sure file only included once per compilation
    #define CIRCLE_H
    
    //
    // Define a class that can be used to get objects of type Circle.
    // A class defines a data structure and the member functions
    // that operate on the data structure.
    // The name of the class becomes a type name.
    
    class Circle  // the 'public' part should be first, the user interface
                  // the 'private' part should be last, the safe data
    {
      public:
        Circle(double X, double Y, double R);  // a constructor
        void Show();                           // a member function
        void Set(double R);                    // change the radius
        void Move(double X, double Y);         // move the circle
      private:
        double Xcenter;
        double Ycenter;
        double radius;
    };
    
    #endif  // CIRCLE_H      nothing should be added after this line
    
    // circle.cpp 
    // implement the member functions of the class Circle
    #include <iostream>
    #include "circle.h" 
    using namespace std;
    
    Circle::Circle(double X, double Y, double R)
    {
      Xcenter = X;
      Ycenter = Y;
      radius  = R;
    }
    
    void Circle::Show()
    {
      cout << "X, Y, R " << Xcenter << "  " << Ycenter << "  "
           << radius << endl;
    }
    
    void Circle::Set(double R)
    {
      radius = R;
    }
    
    void Circle::Move(double X, double Y)
    {
      Xcenter = X;
      Ycenter = Y;
    }
    
    
    // test_circle.cpp  
    #include <iostream>
    #include "circle.h" 
    using namespace std;
    
    int main()
    {
      Circle c1(1.0, 2.0, 0.5);  // construct an object named 'c1' of type 'Circle'
      Circle circle2(2.5, 3.0, 0.1);  // another object named 'circle2'
    
      c1.Show();       // tell the object c1 to execute the member function Show
      circle2.Show();  // circle2 runs its member function Show
    
      c1.Move(1.1, 2.1);  // move center
      c1.Show();
    
      circle2.Set(0.2);   // set a new radius
      circle2.Show();
      return 0;
    }
    
    
    
    The files above can be saved to your directory and compiled then executed with:
    
      on gl SGI   CC -n32 -Iinclude -o test_circle  test_circle.C circle.C
                  test_circle
    
      on Unix     g++ -o test_circle  test_circle.cc circle.cc
                  test_circle
    
      on PC VC++  cl /GX /ML test_circle.cpp circle.cpp
                  test_circle
    
    
    

    HW4 Multiple Virtual Inheritance 25 points

    
    Start with the file  inherit.cpp 
    
    Copy it to a file named  inherit_e.cpp  (or .cc or .C)
    
    Create an additional class with the name "E" that has integers
    e1 in the public section, e2 in the protected section and e3 in
    the private section. Class E is to have a member function test()
    similar to class D but with the correct variables in the
    return statement. (Hint: make a copy of class D and change all
    the D(d)'s to E(e)'s and fix up the inheritance.)
    
    Make class E inherit the existing classes A and D.
    Although class D contains class A, we want class E to contain
    only one copy of class A. (Lots of diagnostics if more than one A!)
    
    Problem: You will have to figure out what classes need to be
    inherited virtual. You will have to figure out what classes need
    to be inherited public, protected and private.
    
    Fix up E::test  to sum the variables visible inside of E.
    
    Problem: Change the D object_d; to E object_e; in the main program. 
    
    Output a number that is the number of int's in object_e.
    (warning: sizeof may not give the correct answer!)
    
    
    Problem: Fix the return statement in the main program to sum
    all the variables in object_e that are visible. (Model after
    the variables in object_d in inherit.cpp.
    
    Submit the file inherit_e.cpp (or .cc  .C)
       submit cs291 HW4 inherit_e.cpp
    
    
    Start from:
    
    // inherit.cpp   public:  protected:  private:
    //
    // define three classes  A, B, C with variables 1, 2, 3 in
    //                       public:  protected: and private: respectively
    // Then class D inherits public A, protected B and private C
    
    class A
    {
      public:
            int a1;
      protected:
            int a2;
      private:
            int a3;
    };
    
    class B
    {
      public:
            int b1;
      protected:
            int b2;
      private:
            int b3;
    };
    
    class C
    {
      public:
            int c1;
      protected:
            int c2;
      private:
            int c3;
    };
    
    
    class D: public A, protected B, private C
    {
      public:
            int d1;  // also here  a1
            int test();
      protected:
            int d2;  // also here  a2  b1  b2
      private:
            int d3;  // also here  a3  b3  c1  c2  c3
    };
    
    int D::test()
    {
      return d1 + a1 + d2 + a2 + b1 + b2 + d3; // all visible inside D
    
             // not visible  a3  b3  c1  c2  c3  inside D
    }
    
    int main()
    {
      D object_d;  // object_d has 12 values of type int in memory
      return object_d.d1 + object_d.a1;  // only these are visible outside D
    
      // not visible  object_d.  a2  a3  b1  b2  b3  c1  c2  c3  d2  d3
    }
    
    

    Quiz 1 Information

      Open book. Open note. Bring copies of the homework you submitted.
      Be organized, the classroom is crowded and desktops are small.
      Multiple choice questions based on:
      lectures, reading assignments and homework.
    
      Exam covers lectures 1-9
      Exam covers book: Reading assignments yet focus on:
        pages   260-265   267-269.5    270.5-274   278.5-280
                490-498
        and class handouts (all came from WEB page.)
      Exam covers homework: HW1-HW4
    
    

    HW5 Friend and static 25 points

     
      Start with the file  friends.cpp  and add
      a class C1 modeled after the class B1.  A1 is to declare C1 to be a friend.
    
      Use the technique in  cout_friend.cpp  to
      have the operator << defined for your class C1.
      The variables to output to stream are  c1pub  and  c1pri
    
      In the main program, test your class by adding statements such as:
    
         C1  c_object(6,7);
    
         c_object.C1_out(a);
    
         cout << "6,7 " << c_object << endl;
    
    

    HW6 Write and check out a template class 25 points

     
      Use  test1_template.cc  and
           template_class.cc  as a guide.
    
      submit cs291 HW6 my_class.h    This just includes your template and class
                                     and implementation. NO main()
    
      You should, of course, check out your header file by compiling and
      executing with the following test program.
    
    
    // test_my_class.cc        test program for HW6
    
    #include "my_class.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
      My_class<double> a_double;
      My_class<int>    a_int(3);
      My_class<float>  a_float(2.5F,3.2F);
    
      a_double.set(3.5,3.6);
      a_int.set(4);
    
      double d_test = a_double.get_sum();
      int    i_test = a_int.get_sum();
      float  f_test = a_float.get_sum();
    
      cout << d_test << "  " << i_test << "  " << f_test << endl;
      cout << "7.1  7  5.7  should be printed above" << endl;
    
      return 0;
    }
    
    Specifications for the file  my_class.h
    
    1) This file will define one template class with the name  My_class
       that takes one type as a parameter, possibly called T.
    
    2) There will be two variables in the private part of type T.
    
    3) there will be three constructors having:
       no parameters
       one parameter of type T that goes into the first variable
       two parameters of type T that go into the two variables
    
    4) There will be a member function named  get_sum()  that has
       no parameters and returns the sum (just use + ) of the two variables
       in the private part. Obviously the return is of type T.
    
    5) There will be member functions named  set  that:
       take one parameter and put the value in the second variable,
       take two parameters and put the two values in the two variables.
    
    You can resolve any details of the specification by studying the
    code above for test_my_class.cc 
    
    Download the test program to check your my_class.h file.
    Compilation can be of the forms:
    
    g++ -o test_my_class  test_my_class.cc
    CC -n32 -Iinclude -o test_my_class  test_my_class.cc
    cl /GX /ML /TP test_my_class.cc
    
    Then type   test_my_class   to check the execution results.
    
    Important note: Never include a header file on the compile command.
    The  #include  brings in the header file.  Some compilers give strange
    diagnostics when putting a  .h  file in the command line.
    
    

    Other Important Links

    Go To Top

    Last updated 1/29/01