[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-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
[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).
[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;
}
[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 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
[5 pts]
Javascript has a built-in Date object, but it really
doesn't have many useful methods. Let's build our own.
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.
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).
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.
Add a method previous() that decrements
a CalendarDate instance.
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.
[5 pts]
We often need to represent people and the relationships between
them in our programs. So let's do that.
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.
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.
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.
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]