<HTML> 
<HEAD> 
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> 
<TITLE></TITLE> 
<Script language="JavaScript"> 
////////////////////////////////////////////////////// 
// File: vector.js 
// 
// Author: Jason Geissler 
//  
// Date: Sept 3, 2003 
// 
// Purpose: To have a dynamic collection instead 
//          of using arrays when the total quantity 
//          is unknown 
////////////////////////////////////////////////////// 
 
// Vector Constructor -- constructs the object 
function Vector(inc) { 
  if (inc == 0) { 
    inc = 100; 
  } 
   
  /* Properties */ 
  this.data = new Array(inc); 
  this.increment = inc; 
  this.size = 0; 
   
  /* Methods */ 
  this.getCapacity = getCapacity; 
  this.getSize = getSize; 
  this.isEmpty = isEmpty; 
  this.getLastElement = getLastElement; 
  this.getFirstElement = getFirstElement; 
  this.getElementAt = getElementAt; 
  this.addElement = addElement; 
  this.insertElementAt = insertElementAt; 
  this.removeElementAt = removeElementAt; 
  this.removeAllElements = removeAllElements; 
  this.indexOf = indexOf; 
  this.contains = contains 
  this.resize = resize; 
  this.toString = toString; 
  this.sort = sort; 
  this.trimToSize = trimToSize; 
  this.clone = clone; 
  this.overwriteElementAt; 
} 
 
// getCapacity() -- returns the number of elements the vector can hold 
function getCapacity() { 
  return this.data.length; 
} 
 
// getSize() -- returns the current size of the vector 
function getSize() { 
  return this.size; 
} 
 
// isEmpty() -- checks to see if the Vector has any elements 
function isEmpty() { 
  return this.getSize() == 0; 
} 
 
// getLastElement() -- returns the last element 
function getLastElement() { 
  if (this.data[this.getSize() - 1] != null) { 
    return this.data[this.getSize() - 1]; 
  } 
} 
 
// getFirstElement() -- returns the first element 
function getFirstElement() { 
  if (this.data[0] != null) { 
    return this.data[0]; 
  } 
} 
 
// getElementAt() -- returns an element at a specified index 
function getElementAt(i) { 
  try { 
    return this.data[i]; 
  }  
  catch (e) { 
    return "Exception " + e + " occured when accessing " + i;   
  }   
} 
 
// addElement() -- adds a element at the end of the Vector 
function addElement(obj) { 
  if(this.getSize() == this.data.length) { 
    this.resize(); 
  } 
  this.data[this.size++] = obj; 
} 
 
// insertElementAt() -- inserts an element at a given position 
function insertElementAt(obj, index) { 
  try { 
    if (this.size == this.capacity) { 
      this.resize(); 
    } 
     
    for (var i=this.getSize(); i > index; i--) { 
      this.data[i] = this.data[i-1]; 
    } 
    this.data[index] = obj; 
    this.size++; 
  } 
  catch (e) { 
    return "Invalid index " + i; 
  } 
} 
 
// removeElementAt() -- removes an element at a specific index 
function removeElementAt(index) { 
  try { 
    var element = this.data[index]; 
     
    for(var i=index; i<(this.getSize()-1); i++) { 
      this.data[i] = this.data[i+1]; 
    } 
     
    this.data[getSize()-1] = null; 
    this.size--; 
    return element; 
  } 
  catch(e) { 
    return "Invalid index " + index; 
  } 
}  
 
// removeAllElements() -- removes all elements in the Vector 
function removeAllElements() { 
  this.size = 0; 
   
  for (var i=0; i<this.data.length; i++) { 
    this.data[i] = null; 
  } 
} 
 
// indexOf() -- returns the index of a searched element 
function indexOf(obj) { 
  for (var i=0; i<this.getSize(); i++) { 
    if (this.data[i] == obj) { 
      return i; 
    } 
  } 
  return -1; 
} 
 
// contains() -- returns true if the element is in the Vector, otherwise false 
function contains(obj) { 
  for (var i=0; i<this.getSize(); i++) { 
    if (this.data[i] == obj) { 
      return true; 
    } 
  } 
  return false; 
} 
 
// resize() -- increases the size of the Vector 
function resize() { 
  newData = new Array(this.data.length + this.increment); 
   
  for  (var i=0; i< this.data.length; i++) { 
    newData[i] = this.data[i]; 
  } 
   
  this.data = newData; 
} 
 
 
// trimToSize() -- trims the vector down to it's size 
function trimToSize() { 
  var temp = new Array(this.getSize()); 
   
  for (var i = 0; i < this.getSize(); i++) { 
    temp[i] = this.data[i]; 
  } 
  this.size = temp.length - 1; 
  this.data = temp; 
}  
 
// sort() - sorts the collection based on a field name - f 
function sort(f) { 
  var i, j; 
  var currentValue; 
  var currentObj; 
  var compareObj; 
  var compareValue; 
   
  for(i=1; i<this.getSize();i++) { 
    currentObj = this.data[i]; 
    currentValue = currentObj[f]; 
     
    j= i-1; 
    compareObj = this.data[j]; 
    compareValue = compareObj[f]; 
     
    while(j >=0 && compareValue > currentValue) { 
      this.data[j+1] = this.data[j]; 
      j--; 
      if (j >=0) { 
        compareObj = this.data[j]; 
        compareValue = compareObj[f]; 
      }         
    }   
    this.data[j+1] = currentObj; 
  } 
} 
 
// clone() -- copies the contents of a Vector to another Vector returning the new Vector. 
function clone() { 
  var newVector = new Vector(this.size); 
   
  for (var i=0; i<this.size; i++) { 
    newVector.addElement(this.data[i]); 
  } 
   
  return newVector; 
} 
 
// toString() -- returns a string rep. of the Vector 
function toString() { 
  var str = "Vector Object properties:\n" + 
            "Increment: " + this.increment + "\n" + 
            "Size: " + this.size + "\n" + 
            "Elements:\n"; 
   
  for (var i=0; i<getSize(); i++) { 
    for (var prop in this.data[i]) { 
      var obj = this.data[i]; 
      str += "\tObject." + prop + " = " + obj[prop] + "\n"; 
    } 
  } 
  return str;   
} 
 
// overwriteElementAt() - overwrites the element with an object at the specific index. 
function overwriteElementAt(obj, index) { 
  this.data[index] = obj; 
} 
 
 
 
////////////////////////////////////////////////////// 
// File: Matrix.js 
// 
// Author: Jason Geissler 
//  
// Date: March 9, 2004 
// 
// Purpose: To have a multidimensional dynamic collection instead 
//          of using arrays when the total quantity 
//          is unknown 
////////////////////////////////////////////////////// 
 
// Matrix() - object constructor 
function Matrix(h, w) { 
  /*Properties */ 
  this.height = h; 
  this.width = w; 
  this.rows = new Vector(w); 
   
  // set up this.rows.  
  for (var r = 0; r < this.height; r++) { 
    var theRow = new Vector(w); 
 
    for (var c = 0; c < this.width; c++) { 
      theRow.addElement(null); 
    } 
    this.rows.addElement(theRow); 
  } 
   
  /*Methods*/ 
  this.elementAt = elementAt; 
  this.setElementAt = setElementAt; 
  this.insertRow = insertRow; 
  this.insertColumn = insertColumn; 
  this.removeRowAt = removeRowAt; 
  this.removeColumnAt = removeColumnAt; 
  this.getWidth = getWidth; 
  this.getHeight = getHeight; 
  this.toString = toString; 
} 
 
// getElementAt() - returns a value from the given row/column. 
function elementAt(row, col) { 
  try { 
    var theRow = this.rows.getElementAt(row); 
    return theRow.getElementAt(col); 
  } 
  catch(e) { 
    return "Invalid index"; 
  } 
} 
 
// setElementAt() - sets a value at a given row/column 
function setElementAt(value, row, col) { 
  if (row < 0 || row >= this.height || col < 0 || col >= this.width) { 
    return "Matrix object out of Bounds"; 
  } 
  var theRow = this.rows.getElementAt(row); 
  theRow.insertElementAt(value, col); 
} 
 
// insertRowAt() - Inserts a blank row at the end. 
function insertRow() { 
  try { 
    this.height++; 
    var theRow = new Vector(this.width); 
    for (var r = 0; r < this.width; r++) { 
      theRow.addElement(null); 
    } 
    this.rows.insertElementAt(theRow, this.height-1); 
  } 
  catch (e) { 
    return "Excecption occured " + e; 
  } 
} 
 
// insertColumnAt() -- Inserts a column at the end. 
function insertColumn() { 
  try { 
    this.width++; 
     
    for (var c=0; c < this.height; c++) { 
      this.rows.getElementAt(c).insertElementAt(null, this.width-1); 
    }     
  } 
  catch (e) { 
    return "Invalid column number"; 
  } 
} 
 
// removeRowAt() - removes a row at a given index. 
function removeRowAt(row) { 
  try { 
    var result = this.rows.getElementAt(row); 
    this.height--; 
     
    for (var r=row + 1; r <= this.height; r++) { 
      var theRow = this.rows.getElementAt(r); 
      this.rows.insertElementAt(theRow, r-1); 
      this.rows.removeElementAt(r); 
    } 
 
    return result; 
  } 
  catch (e) { 
    return "Invalid row number"; 
  } 
} 
 
// removeColumnAt() - removes a given column 
function removeColumnAt(col) { 
  try { 
    var result = new Vector(this.height); 
    this.width--; 
     
    for(var r = 0; r < this.height; r++) { 
      var element = this.rows.getElementAt(r).removeElementAt(col); 
      result.addElement(element); 
    } 
       
    return result; 
  } 
  catch (e) { 
    return "Invalid column number"; 
  } 
} 
 
// getWidth() - returns the Matrix width 
function getWidth() { 
  return this.width; 
} 
 
// getHeight() - returns the Matrix height 
function getHeight() { 
  return this.height; 
} 
 
// toString() - returns String data about the Matrix object 
function toString() { 
  var s = "Height: " + this.height + " Width: " + this.width + " Rows: " + this.rows; 
  return s; 
} 
   
       
 
</Script> 
<Script language="JavaScript"> 
/* 
  elementAt; 
  setElementAt; 
  insertRow; 
  insertColumn; 
  removeRowAt; 
  removeColumnAt; 
  getWidth; 
  getHeight; 
  toString; 
*/ 
   
  var theMatrix = new Matrix(8,8); 
  var counter = 1; 
   
  for (var i = 0; i < theMatrix.getHeight(); i++) { 
    for (var j = 0; j < theMatrix.getWidth(); j++) { 
       
      if (counter % 2 == 0) { 
        theMatrix.setElementAt("red", i, j); 
      } 
      else { 
        theMatrix.setElementAt("black", i, j); 
      } 
       
      counter++; 
    } 
    counter++; 
  } 
   
       
</Script> 
</HEAD> 
<BODY> 
  <Table align="center"> 
  <TR><TD align=center colspan=8><B>Element At</TD></TR>     
  <Script language="JavaScript"> 
     
    for (var x = 0; x < theMatrix.getHeight(); x++) { 
      document.write("<TR>"); 
       
      for (var y = 0; y < theMatrix.getWidth(); y++) { 
        var color = theMatrix.elementAt(x, y); 
        document.write("<TD bgcolor='" + color + "'>   </TD>"); 
      } 
       
      document.write("</TR>"); 
    } 
     
    document.writeln(""); 
    document.writeln(""); 
    document.writeln("<B>Width: </B>" + theMatrix.getWidth()); 
    document.writeln("<B>Height: </B>" + theMatrix.getHeight()); 
    document.writeln("<B>ToString: </B>" + theMatrix.toString()); 
     
  </Script>   
  </Table> 
  <Table align="center"> 
  <TR><TD align=center colspan=8><B>Remove Row At</TD></TR>     
  <Script language="JavaScript"> 
   
    var removedRow = theMatrix.removeRowAt(2); 
     
    for (var x = 0; x < theMatrix.getHeight(); x++) { 
      document.write("<TR>"); 
       
      for (var y = 0; y < theMatrix.getWidth(); y++) { 
        var color = theMatrix.elementAt(x, y) 
        document.write("<TD bgcolor='" + color + "'>   </TD>"); 
      } 
       
      document.write("</TR>"); 
    } 
     
         
  </Script>   
  </Table> 
  </Table> 
  <Table align="center"> 
  <TR><TD align=center colspan=8><B>Remove Column At</TD></TR>     
  <Script language="JavaScript"> 
   
    var removedRow = theMatrix.removeColumnAt(2); 
     
    for (var x = 0; x < theMatrix.getHeight(); x++) { 
      document.write("<TR>"); 
       
      for (var y = 0; y < theMatrix.getWidth(); y++) { 
        var color = theMatrix.elementAt(x, y) 
        document.write("<TD bgcolor='" + color + "'>   </TD>"); 
      } 
       
      document.write("</TR>"); 
    } 
  </Script>   
  </Table>   
</BODY> 
</HTML> 
 
 
            
          
     
  
  |