CPSC S101 Classroom Demonstrations: 18 April 2018

<html><head><title> Stan Eisenstat: isbn-loop.html </title><script>
  // Prompt for first nine digits of ISBN number (without check digit);
  // print full ISBN number, including check digit (which can be X).
  var isbn, digits, check, d, i;

  // Not subtracting 0 keeps ISBN a string
  isbn = prompt ("Enter nine-digit ISBN number:");

  digits = isbn - 0;                    // Convert ISBN to number
  check = 0;                            // Compute sum WITHOUT check digit
  for (i = 2; i <= 10; i++) {
    d = digits % 10;
    digits = (digits - d) / 10;
    check = check + i * d;
  }
  d = 11 - check % 11;
  d = d % 11;                           // Just in case c is 11
  if (d == 10) {
    d = "X";
  }
  document.write (isbn + "-" + d);
</script></head></html>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<html><head><title> Stan Eisenstat: wildlife.html </title><script>
  // Each month the population of rabbits and foxes changes according to the
  // following formulae:
  //
  //     If there are R rabbits and F foxes at the beginning of the month,
  //     then there are
  //                     1.05 * R  -  .005 * F * R
  //     rabbits and
  //                      .95 * F  +  .001 * R * F
  //     foxes at the end of the month.
  //
  // The first term in the formulae represents what would happen to the
  // population in the absence of the other species:  the number of rabbits
  // would increase since there are no foxes to eat them; the number of foxes
  // would decrease since there are no rabbits to eat.  The second term
  // represents the effect of interaction between the species:  the number of
  // rabbits will decrease as foxes eat rabbits; the number of foxes will
  // increase given the increased food supply.
  //
  // Prompt for the initial number of rabbits and foxes, and then simulate
  // population changes for 25 years, printing the population figures at the
  // start of the simulation and at the end of every year.}

  var rabbits, foxes;           // Number of rabbits and foxes
  var month, year;              // Month and year of simulation

  rabbits = prompt ("Enter initial number of rabbits: ") - 0;
  foxes   = prompt ("Enter initial number of foxes: ") - 0;

  document.write ("Start Simulation"
	      + ": &nbsp;  #Rabbits = " + rabbits.toFixed(2)
	      + ", &nbsp;  #Foxes   = " + foxes.toFixed(2)   + "<BR>");

  for (year = 1; year <= 25; year++) {
    for (month = 1; month <= 12; month++) {
      t       = 1.05*rabbits - 0.005*foxes*rabbits;
      foxes   = 0.95*foxes   + 0.001*rabbits*foxes;
      rabbits = t;
    }
    document.write ("End of Year " + year
		  + ": &nbsp; #Rabbits = " + rabbits.toFixed(2)
		  + ", &nbsp; #Foxes   = " + foxes.toFixed(2)   + "<BR>");
  }
</script></head></html>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<html><head><title> Stan Eisenstat: zeno.html </title><script>
  // Simulate Zeno's paradox
  var pAchilles, vAchilles;     // Position and velocity of Achilles
  var pTortoise, vTortoise;     // Position and velocity of Tortoise
  var time;                     // Elapsed time in race
  var dt;                       // Time for A to reach where T is now

  time = 0;
  pAchilles = 0;
  vAchilles = prompt ("Enter speed of Achilles:") - 0;
  pTortoise = prompt ("Enter position of Tortoise:") - 0;
  vTortoise = prompt ("Enter speed of Tortoise:") - 0;
  while  (pAchilles < pTortoise) {
    dt = (pTortoise - pAchilles) / vAchilles;
    time = time + dt;
    pAchilles = pTortoise;
    pTortoise = pTortoise + vTortoise * dt;
    document.write ("Time = " + time.toFixed(8)
		 + ", Achilles = " + pAchilles.toFixed(8)
		 + ", Tortoise = " + pTortoise.toFixed(8) + "<br>");
  }
</script></head></html>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<html><head><title> Stan Eisenstat: 3n+1.html </title><script>
  // Prompt for a number and play the 3n+1 game
  n = prompt ("Enter a positive integer:") - 0;
  while (n != 1) {
    document.write (n + ", ");
    if (n % 2 == 0)
      n = n / 2;
    else
      n = 3*n + 1;
  }
  document.write (n + "<br>");
</script></head></html>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<html><head><title> Stan Eisenstat: guess1.html </title><script>
  // Generate a number and let the user guess it
  lower = 0;  upper = 10;
  number = Math.floor (Math.random() * (upper-lower+1)) + lower;
  alert ("I am thinking of a number between " + lower + " and " + upper);
  turns = 1;
  guess = prompt ("What is your guess?") - 0;
  while (guess != number) {
    if (guess < number)
      guess = prompt ("Too low.  What is your next guess?") - 0;
    else
      guess = prompt ("Too high.  What is your next guess?") - 0;
    turns++;
  }
  document.write ("You found " + guess + " in " + turns + " guesses");
</script></head></html>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<html><head><title> Stan Eisenstat: guess2.html </title><script>
  // Guess the number that the user is thinking of
  lower = 0;  upper = 10;
  alert ("Think of a number between " + lower + " and " + upper);
  while (lower < upper) {
    middle = Math.floor ((lower+upper) / 2);
    guess = prompt ("Is it less than or equal to " + middle + " (Y or N)?");
    if (guess == "Y")
      upper = middle;
    else if (guess == "N")
      lower = middle + 1;
    else
      alert ("You did not answer Y or N.  Please try again.");
    document.write ("lower = " + lower + ", upper = " + upper + "<BR>");
  }
  document.write ("Your number was " + lower);
</script></head></html>