MOD 9 - INDEXES

lookuptable

by SHELDON PASCIAK

HTML

<!--
MODULE 9 - PROGRAM 1 - SHELDON PASCIAK

(additional output information in console window)

    accepts user input 0..6
    interpolates values of rain for hour input
    uses numerical indexed lookup table (provided)
-->

Enter the number of hours between 0..6 (including decimals) <br />
Click the button to find the interpolated amount of rain using <br />

<br />

<input type="text" id="userValue" value=4.5 placeholder="Which Hour ? 0.0 ... 6.0 ?" />
<input type="button" id="interpButton" value="Interpolate the Amount of Rain" />

<br/>

<p id="demo"></p>

<!--

Module 9 - Indexes 
Introduction 

Just like many of the other data structures covered in this class - indexes are also pretty straightforward. They are covered in Topic - Indexing Techniques. For this module you will only have to complete a computer program.
 
Assignment 

An interpolation table is a specific instance of a Lookup Table - which is also a practical application of indexing, in this case numeric indexes. You will create a computer program that uses the following lookup table (interpolation table), allows a user to input a number and calculates the answer by interpolating between 2 numbers - or finds an exact solution.

 
0     0.00
1     0.04
2     0.11
3     0.60
4     0.87
5     0.95
6     1.00

 

The table gives the amount of total rainfall (normalized to 1) that occurred during a rainfall event. 

For example at hour 3, 0.6 or 60% of the total rain had fallen. You will need to create a function that allows me to enter a number between 0 and 6, and it must return the total amount of rainfall that has occurred. I must also be able to enter fractional numbers - for example if I enter 4.5 it should return 0.91 by using interpolation (use standard linear interpolation - https://en.wikipedia.org/wiki/Interpolation )

-->

JavaScript

// module 9 - program 1 - sheldon paciak

/*
notes: LOOKUP TABLE INFO For ordered lists that must be accessed sequentially, such as linked lists or files with variable-length records lacking an index, the average performance can be improved by giving up at the first element which is greater than the unmatched target value, rather than examining the entire list.

NOTES: LINEAR SEARCH In computer science, linear search or sequential search is a method for finding a particular value in a list that checks each element in sequence until the desired element is found or the list is exhausted.[1] The list need not be ordered.

*/

function calculateSlopes(arr,slps) {
    
    // helped with the math explanation of linear interpolation    
    // http://www.calpoly.edu/~gthorncr/ME236/Linear%20Interpolation.pdf
    
    slps[0] = 0;
            
    console.log("i: " + 0 + " --- " + arr[0]);
 
    for (var i=1;i<arr.length;i++) {
        console.log("i: " + i + " --- " + arr[i]);
        slps[i] = arr[i]-arr[i-1] ; // change in value        
    }    
};

$("#interpButton").click( function() { 

    // pseudo
    
    var userValue = parseFloat($('#userValue').val());
    
    var valueFloor = Math.floor($('#userValue').val());
    
    if ((userValue<0) || (userValue>lookupTableValues.length-1)) {
     
        alert("I can only interpolate between 0..6!");
        return;
    }
    
    var valueNext = valueFloor + 1;
    
    var diffValues = parseFloat(userValue - valueFloor);
    
    if (diffValues===0) {
        
          document.getElementById("demo").innerHTML = "Exact match to lookup - Rain for " + valueFloor + " = " + Number(lookupTableValues[valueFloor]).toFixed(2);
        
    } else {
    
    console.log("user value: " + userValue );
	console.log( "low: " + valueFloor + "  --> " +  lookupTableValues[valueFloor] + "  slope between next value and previous in table --> " + slopes[valueNext] );
    console.log("Next value: " + valueNext  + " -->  " +...