[an error occurred while processing this directive] File: index.shmtl Creator: George Ferguson Created: Tue Oct 23 14:10:16 2012 Time-stamp: [an error occurred while processing this directive] File: templates/doc-start.shtml Creator: George Ferguson Created: Tue Dec 6 12:31:29 2011 Time-stamp: [an error occurred while processing this directive] File: site-settings.shtml Creator: George Ferguson Created: Tue Dec 6 13:49:49 2011 Time-stamp: Site (or subsite)-wide settings. [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] File: head.shtml Creator: George Ferguson Created: Tue Dec 6 12:34:15 2011 Time-stamp: SSI variables for this template: head_title if given, else ``sitename | title'' [an error occurred while processing this directive] File: head-title.shtml Creator: George Ferguson Created: Tue Dec 6 14:29:52 2011 Time-stamp: SSI variables for this template: head_title: complete content of title element if given site_title trailing part of title (if given) section_title middle part of title (if given) page_title leading part of title (if given) title title shown on page, also used as leading part of title (if given) [an error occurred while processing this directive] (none) [an error occurred while processing this directive] File: head-meta.shtml Creator: George Ferguson Created: Tue Dec 6 14:29:18 2011 Time-stamp: SSI variables for this template: meta_description meta_keywords meta_generator [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] File: head-stylesheets.shtml Creator: George Ferguson Created: Tue Dec 6 14:22:58 2011 Time-stamp: SSI variables for this template: site_stylesheet, page_stylesheet stylesheet0, stylesheet1, ...: URL for stylesheets [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] File: head-scripts.shtml Creator: George Ferguson Created: Tue Dec 6 14:23:19 2011 Time-stamp: SSI variables for this template: site_script, page_script script0, script1, ...: URLs of javascript scripts [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] File: body-start.shtml Creator: George Ferguson Created: Tue Dec 6 13:20:46 2011 Time-stamp: SSI variables for this template: body_class page_class page_id [an error occurred while processing this directive] [an error occurred while processing this directive] File: body-header.shtml Creator: George Ferguson Created: Tue Dec 6 13:46:12 2011 Time-stamp: Content above banner, if any. [an error occurred while processing this directive] File: body-banner.shtml Creator: George Ferguson Created: Tue Dec 6 13:27:12 2011 Time-stamp: Duplicate URCS Drupal banner. hajim urcs
Computer Science @ Rochester
Computer Science Department : Hajim School of Engineering & Applied Sciences Skip to main content [an error occurred while processing this directive] File: body-title.shtml Creator: George Ferguson Created: Tue Dec 6 14:34:49 2011 Time-stamp: SSI variables for this template: section_name First line of title on page (if any) title Title shown on page

[an error occurred while processing this directive] DMS102/CSC170D: Introduction to Web Development
Spring 2013
[an error occurred while processing this directive]
Assignment 7: Arrays and Objects

1. Arrays

  1. [4 pts] Write your own version of the Javascript Array method indexOf. That is, write a function that takes as parameters an array and a value and returns the index of the first element that is equal to the value, or -1 if the value is not one of the elements in the array.

    Demonstrate your function on a page that asks the user for a color name and returns the index of that color in an array containing the 17 predefined CSS color names (in row order top-to-bottom, then left-to-right within a row).

  2. [4 pts] Write a method that returns a copy of given array. That is, your function should take one parameter, an array, and return an array with exactly the same elements in it (but not the same array itself). That is the following is not correct:
            function copyArray(a) {
    	    return a;
            }
        
  3. [4 pts] Write a function that computes and returns the average (mean) of an array of numeric values. Do not use Math or other builtin functions. Demonstrate your function on a page using the following values:
          59 74 76 26 86 89 21 74 39 83
        
  4. [4 pts] Write a function that computes the maximum and minimum values in an array of numbers, and returns both values as an array in that order. Do not use Math or other builtin functions. Demonstrate your function on a page using the following values:
          89 -35 11 -14 -31 -40 73 -40 -29 -81 
        

2. Objects

  1. [5 pts] Javascript has a built-in Date object, but it really doesn't have many useful methods. Let's build our own.
    1. Create a constructor for a kind of object named CalendarDate. It should take three parameters: the day, month, and year of the date it represents and store them in the constructed object instance.
    2. Add a method isChristmas() that tests whether a CalendarDate is Christmas Day (December 25). A test method like this always returns a boolean value (true or false).
    3. Add a method next() that increments a CalendarDate instance to the next day. Note that it is not enough to simply increment the day field. Watch for special cases.
    4. Add a method previous() that decrements a CalendarDate instance.
    5. Add a method increment(n) that increments a CalendarDate by the given number of days. Note that n can be positive, negative (in which case it means decrement), or even zero.
    Demonstrate each of the aspects of your CalendarDate object with reasonable output to the page's document.
  2. [5 pts] We often need to represent people and the relationships between them in our programs. So let's do that.
    1. Create a constructor for a Person object. It should take two parameters: the person's first and last names and store them in the constructed object instance. It should also setup additional properties named bestFriend, and friends. The first of these will hold a reference to a Person object representing the person's best friend. The latter should be an array that will hold references to other Person objects representing all the person's friends. Initialize these appropriately in your constructor.
    2. Add a method setBestFriend(person) that takes as argument a (reference to a) Person object and makes it the bestFriend of the Person object on which the method is invoked.
    3. Add a method addFriend(person) that adds its argument (another Person object) to the array of friends of the Person object on which the method is invoked.
    4. Let's assume that being friends (and of course best friends) is reciprocal (reflexive in mathematical terms). In other words, if I'm your friend then you're my friend, and vice-versa. Adjust your methods to maintain the reciprocal relationships.
    Demonstrate each of the aspects of your Person object with reasonable output to the page's document.

    Note: You may need some methods for printing the contents of the arrays, if the defaults don't look good. Don't forget Array.join in this context.

Things to think about

  • References to elements of an array (e.g., a[i]) can be used in expressions like any other (scalar) variable.
  • Array-valued variables can be passed to functions like any other value. The function parameter has local scope, but the contents of the array (that is, its elements) can be changed within the function.
  • Loops (iteration) and arrays go great together.
  • Many things you do in a program can be bundled up into small functions. Not only do these make it easy to understand your program, they can also be used in other programs.
  • Objects are simply collections of property-value pairs, That is, they are a collection of properties and the corresponding values of those properties for the object instance.
  • Object properties can have values that are simple (string, number, boolean), or complex (array, object). You can have arrays of objects. Objects are just another type of value.
  • Methods define actions that can be performed with or on an object instance. Methods can return any kind of value (including array or object references), or may return nothing (technically, these return undefined).
  • Constructors define the kinds of objects you can create and use. You generally initialize objects in the constructor. Constructors may or may not take parameters, There are ways of handling optional parameters, which will have value undefined if they weren't given in the invocation of the constructor, but Javascript is not as flexible about this as some other programming languages.

[an error occurred while processing this directive] File: doc-finish.shtml Creator: George Ferguson Created: Tue Dec 6 13:46:48 2011 Time-stamp: [an error occurred while processing this directive] File: body-footer.shtml Creator: George Ferguson Created: Tue Dec 6 14:43:56 2011 Time-stamp: Content at bottom of page, if any.

Last update: Monday, 01-Apr-2013 10:21:52 EDT

[an error occurred while processing this directive] File: body-finish.shtml Creator: George Ferguson Created: Tue Dec 6 13:47:36 2011 Time-stamp: [an error occurred while processing this directive]