<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bryan Simonson &#187; School</title>
	<atom:link href="http://www.bryansimonson.com/tags/school/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bryansimonson.com</link>
	<description>Trust Door AI</description>
	<lastBuildDate>Wed, 01 Sep 2010 07:26:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>C++ Date Class &#8211; Manipulate Dates in C++</title>
		<link>http://www.bryansimonson.com/2009/11/15/c-date-class-manipulate-dates-in-c/</link>
		<comments>http://www.bryansimonson.com/2009/11/15/c-date-class-manipulate-dates-in-c/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 05:35:54 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[School]]></category>
		<category><![CDATA[c++]]></category>

		<guid isPermaLink="false">http://www.bryansimonson.com/?p=270</guid>
		<description><![CDATA[Finally! I did it! Assignment #4 is complete, and I can manipulate dates pretty effing easily now. No doubt there is already some vastly superior date manipulation library already out there&#8230; stupid school. Just kidding. I learned a LOT with this assignment. #include &#60;iostream&#62; using namespace std; class Date { private: /* &#124; \ PRIVATE [...]]]></description>
			<content:encoded><![CDATA[<p>Finally! I did it! Assignment #4 is complete, and I can manipulate dates pretty effing easily now.</p>
<p>No doubt there is already some vastly superior date manipulation library already out there&#8230; stupid school.</p>
<p> <img src='http://www.bryansimonson.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Just kidding. I learned a LOT with this assignment.</p>
<pre class="brush: cpp; ">

#include &lt;iostream&gt;
using namespace std;

class Date {

private:
	 /*
	|
	 \	PRIVATE DATA
	  |
	*/
	static const int EpochYear = 1752;
	static const int EpochMonth = 9;
	static const int EpochDay = 14;
	static const int EpochDoW = 5;		// must define day of week of epoch (5 = Thursday)
	int epochdays;						// this is the number of days since September 14, 1752
	int month,day,year;					// the current value of month/day/year
	bool validdate;

	 /*
	|
	 \	PRIVATE MEMBER FUNCTIONS
	  |
	*/
	bool isLeapYear(int year){
		// check if this year is a leap year, return false if not
		bool leapyear;

		if ((year % 4) == 0){
			if (year % 100 == 0){
				leapyear = false;
				if (year % 400 == 0){
					leapyear = true;
				}
			} else {
				leapyear = true;
			}
		} else {
			leapyear = false;
		}
		return leapyear;
	}

	int daysInMonth(int m, int y){
		// returns the number of days in a given month (1 =  January, etc)
		// invalid month/year combinations return -1
		int days = -1;
		int febdays = 28;

		if (isLeapYear(y))
			febdays = 29;

		switch (m){
			case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break;
			case 2: days = febdays; break;
			case 4: case 6: case 9: case 11: days = 30; break;
			default: days = -1; break;
		}
		return days;
	}

	int dayOfYear(int m, int d, int y){
		// return the day of year (eg, Jan 1 = 1, Dec 1 = 365 (or 366 on leap years))
		int daycount = 0;		// holds number of days elapsed this year

		// leap through every fully elapsed month
		for (int i=1; i&lt;m; i++){
			daycount += daysInMonth(i,y);
		}

		// don&#039;t forget to add the elapsed days of this month
		daycount += d;

		return daycount;
	}

	int getEpochDays(int m, int d, int y){
		// for a given m/d/y, return the number of days since the epoch, 9/14/1752
		int daycount;	// this will be count of epochdays
		int thisDOY = dayOfYear(m,d,y);
		int epochDOY = dayOfYear(EpochMonth,EpochDay,EpochYear);

		// subtract day of year from epoch
		daycount = thisDOY - epochDOY;

		// add days for each fully elapsed year
		while (y &gt; EpochYear){
			y--;	// decrement year now to avoid overcounting leap year
			if (isLeapYear(y)){
				daycount += 366;
			} else {
				daycount += 365;
			}
		}

		return daycount;
	}

	void convertEpochDays(int daysSinceEpoch, int&amp; m, int&amp; d, int&amp; y){
		// SHOULD NOT be using m/d/y variables to calculate!
		int mm = EpochMonth;
		int dd = EpochDay;
		int yyyy = EpochYear;

		while (daysSinceEpoch &gt; 0){
			//cout &lt;&lt; &quot;days left: &quot;&lt;&lt; daysSinceEpoch &lt;&lt; endl;
			if (daysSinceEpoch &gt;= 366){
				// we have at least a year left
				yyyy++;	// increment year now to avoid taking credit for already elapsed leap day
				if (isLeapYear(yyyy)){
					daysSinceEpoch -= 366;
				} else {
					daysSinceEpoch -= 365;
				}
			} else if (daysSinceEpoch &gt;= 31){
				// we have 31 or more days left
				if (mm == 12){
					daysSinceEpoch -= daysInMonth(mm,yyyy);
					mm = 1;
					yyyy++;
				} else {
					daysSinceEpoch -= daysInMonth(mm,yyyy);
					mm++;
				}
			} else {
				// we have up to 30 days left
				if (dd &lt; daysInMonth(mm,yyyy)){
					dd++;
					daysSinceEpoch--;
				} else if (dd == daysInMonth(mm,yyyy)){
					mm++;
					dd = 1;
					daysSinceEpoch--;
				} else {
					cout &lt;&lt; &quot;You didn&#039;t account for something!&quot;&lt;&lt; endl;
				}
			}
		}

		m = mm;
		d = dd;
		y = yyyy;
	}

public:
	// constructors
	Date(){
		// set default date to September 14, 1752
		month = 9;
		day = 14;
		year = 1752;
		epochdays = 0;
		validdate = true;
	}

	Date(int m, int d, int y){
		 /*
		|	Sets date with user input, verifies if proper date is provided
		 \	for any problem with user input: status member function will return false
		  | - do not allow date prior to September 14, 1752
		*/	

		// set defaults, assume the user is wrong about everything
		month = 9;
		day = 14;
		year = 1752;
		epochdays = 0;
		validdate = false;

		// month cannot be less than 1 or greater than 12
		if (m &gt;= 1 &amp;&amp; m &lt;= 12){
			// month is valid. so far, so good
			// what about days? they can less than &lt;1 or greater than that month&#039;s days
			if (d &gt;= 1 &amp;&amp; d &lt;= daysInMonth(m,y)){
				// date format is valid, but is it at least 9/14/1752?
				if (getEpochDays(m,d,y) &gt;= 0){
					month = m;
					day = d;
					year = y;
					epochdays = getEpochDays(m,d,y);
					validdate = true;
				}
			}
		}
	}

	// member functions
	bool status(void){
		// if date setting has any problems, returns false
		return validdate;
	}

	bool setdate(int m, int d, int y){
		 /*
		|	Sets date with user input, verifies if proper date is provided
		 \	for any problem with user input, returns false, no date change made
		  | - do not allow date prior to September 14, 1752
		*/	

		bool validnewdate = false;	// assume invalid new date (guilty until proven innocent)

		// month cannot be less than 1 or greater than 12
		if (m &gt;= 1 &amp;&amp; m &lt;= 12){
			// month is valid. so far, so good
			// what about days? they can less than &lt;1 or greater than that month&#039;s days
			if (d &gt;= 1 &amp;&amp; d &lt;= daysInMonth(m,y)){
				// date format is valid, but is it at least 9/14/1752?
				if (getEpochDays(m,d,y) &gt;= 0){
					month = m;
					day = d;
					year = y;
					epochdays = getEpochDays(m,d,y);
					validdate = true;
					validnewdate = true;
				}
			}
		}
		return validnewdate;
	}

	int getmonth(void) const {
		// returns month if status is true (Jan=1, Feb=2, etc)
		// if status is false, returns -1
		if (validdate)
			return month;
		else
			return -1;
	}

	int getday(void) const {
		// returns day if status is true; if status is false returns -1
		if (validdate)
			return day;
		else
			return -1;
	}

	int getyear(void) const {
		// returns year if status is true (eg: 2009,2010,1976)
		// if status is false returns -1
		if (validdate)
			return year;
		else
			return -1;
	}

	bool advance(int i){
		// adds i days to date, i may be positive or negative
		// returns false if there any problems
		if ((epochdays + i) &gt;= 0){
			// increment epochdays to advance date
			epochdays += i;

			// now that we know the new count of epochdays, set m/d/y
			convertEpochDays(epochdays,month,day,year);

			return true;
		} else {
			cerr &lt;&lt; &quot;Could not set date prior to September 14, 1752.&quot; &lt;&lt; endl;
			return false;
		}
	}

	int dleft(void){
		// returns days left in the year (eg, December 1st would return 30)
		int daysleft;

		if (validdate)
			daysleft = dayOfYear(12,31,year) - dayOfYear(month,day,year);
		else
			daysleft = -1;

		return daysleft;
	}

	int diff(Date d){
		 /*
		|	determine the number of day difference from argument
		 \	positive return value means date in argument is after class date, negative means before
		  | (eg; if object date is 2/3/09 and argument d is 2/6/09, function will return 3
		*/
		int m,dom,y,diffDays;
		m = d.getmonth();
		dom = d.getday();
		y = d.getyear();

		if (d.status())
			diffDays = epochdays - getEpochDays(m,dom,y);
		else
			diffDays = 0;	// return 0 for comparisons to invalid dates

		return diffDays;
	}

	int dofw(void){
		 /*
		|	returns day of week (Sunday=1,Monday=2, etc)
		 \	NOTE: September 14th, 1752 was a Thursday (dofw = 5)
		  | So if (epochdays % 7) == 0 then dofw = 5; 1 then dofw = 6; etc
		*/
		int dayofweek;
		if (validdate)
			dayofweek = ((epochdays % 7) + EpochDoW);
		else
			dayofweek = -1;

		return dayofweek;
	}

};
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bryansimonson.com/2009/11/15/c-date-class-manipulate-dates-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ Change Dispenser (My First C++ Program)</title>
		<link>http://www.bryansimonson.com/2009/10/07/my-first-c-program/</link>
		<comments>http://www.bryansimonson.com/2009/10/07/my-first-c-program/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 06:51:59 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[School]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[change dispenser]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[homework assignement]]></category>

		<guid isPermaLink="false">http://www.bryansimonson.com/?p=140</guid>
		<description><![CDATA[One of these days I&#8217;ll actually know how to program c++ pretty well, and when that happens, I plan to write some kickass software. But when that happens, I figured it would be pretty amusing to look back at my very first c++ program (besides the mandatory &#8220;Hello World!&#8221; app). This was our first assignment [...]]]></description>
			<content:encoded><![CDATA[<p>One of these days I&#8217;ll actually know how to program c++ pretty well, and when that happens, I plan to write some kickass software. But when that happens, I figured it would be pretty amusing to look back at my very first c++ program (besides the mandatory &#8220;Hello World!&#8221; app).</p>
<p>This was our first assignment in Computer Science 210, page 98, #15 in <a rel="nofollow" href="http://www.amazon.com/gp/product/0321450051?ie=UTF8&#038;tag=manticorcom-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0321450051manticorcom-20" >Problem Solving, Abstraction &#038; Design Using C++ (5th Edition)</a><img src="http://www.assoc-amazon.com/e/ir?t=manticorcom-20&#038;l=as2&#038;o=1&#038;a=0321450051" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. To quote:<br/></p>
<blockquote><p>Write a program that dispenses change. The program should read the amount of the purchase and the amount paid and then display the number of dollars, quarters, dimes, nickels, and pennies given in change.</p></blockquote>
<p>Actually if you keep reading, they tell you the wrong way to do it, as a &#8220;hint&#8221;. Jerks.</p>
<p>But notwithstanding, this is what I wrote:<br />
<script type="syntaxhighlighter" class="brush: cpp"><![CDATA[
// Bryan Simonson
// 10/06/09
// CS210 - Assignment #1
//
// NOTE:
// The book is trying to mislead us into using the % operator for this assignment.
// This shall not be forgotten.
// 
#include <iostream>
using namespace std;
int main() {
	int dollars,quarters,dimes,nickels,pennies;
	double due,payment,change;
	// Get the amount due
	cout << "Please enter the price:\n";
	cin >> due;
	// Check the amount due for problems
	while (due <= 0.01) {
		// Somebody entered zero or less, probably trying to get some free money
		cout << "Sorry cheapskate, you must spend at least $0.01\n\n";		
		// Ask again for the real price
		cout << "Please enter the ACTUAL price:\n";
		cin >> due;
		cout << endl;
	}	
	// Get the payment amount
	cout << "Please provide payment amount (using numbers only):\n";
	cin >> payment;
	// Check payment amount for problems
	while (payment < due) {
		// Somebody is trying to pay less than what's due
		// but we're not accepting ANY money unless we get it all at once
		cout << "No, you owe $" << due << ", not $" << payment << ".\n\n";
		cout << endl << "Please provide FULL payment:\n";
		cin >> payment;
	}
	if (payment > due){
		// They paid more than what's due, time to give out change
		change = payment - due;
		cout << "----------------------------------------------\n";
		cout << "Your change is $" << change << endl;
		// dollars
		for (dollars = 0; change >= 1.00; dollars++){
			change -= 1.00;
		}		
		// quarters
		for (quarters = 0; change >= 0.25; quarters++){
			change -= 0.25;
		}
		// dimes
		for (dimes = 0; change >= 0.10; dimes++){
			change -= 0.10;
		}
		// nickels
		for (nickels = 0; change >= 0.05; nickels++){
			change -= 0.05;
		}
		// pennies, just for good measure
		for (pennies = 0; change > 0.00; pennies++){
			change -= 0.01;
		}
		cout << "You get " << dollars << " dollars, " << quarters << " quarters, " << dimes << " dimes, " << nickels << " nickels, and " << pennies << " pennies.\n\n";
	} else {
		// They must have given exact change
		cout << "Thanks for using exact change!\n";
	}
	return 0;
}
</script></p>
<p>I promise, there was lots more whitespace in the actual program. WordPress is just being stupid. Here's the file for download: <a href='http://www.bryansimonson.com/wp-content/uploads/2009/10/ChangeDispenser1.cpp'>ChangeDispenser.cpp</a>.</p>
<p>Warning: Don't cheat off me.</p>
<p>UPDATE 10-19-09: Fixed a bug in how pennies were calculated.<br />
UPDATE 11-01-09: Fixed formatting / lack of whitespace.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryansimonson.com/2009/10/07/my-first-c-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Just finished my homework</title>
		<link>http://www.bryansimonson.com/2008/07/08/just-finished-my-homework/</link>
		<comments>http://www.bryansimonson.com/2008/07/08/just-finished-my-homework/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 07:56:13 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[School]]></category>
		<category><![CDATA[bcc]]></category>
		<category><![CDATA[college]]></category>
		<category><![CDATA[homework]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://www.bryansimonson.com/?p=23</guid>
		<description><![CDATA[Who are you, and why do you care? You&#8217;re me (because I get no other traffic), and you don&#8217;t care for that reason. Just had to clarify that point before going any further. Yeah, I just did a bunch of quadratic equations, and I&#8217;m feeling pretty proud of myself. Sure, it&#8217;s a review of Algebra [...]]]></description>
			<content:encoded><![CDATA[<p>Who are you, and why do you care? You&#8217;re me (because I get no other traffic), and you don&#8217;t care for that reason. Just had to clarify that point before going any further.</p>
<p>Yeah, I just did a bunch of <a href="http://en.wikipedia.org/wiki/Quadratic_equation">quadratic equations</a>, and I&#8217;m feeling pretty proud of myself. Sure, it&#8217;s a review of Algebra 2, Trigonometry, and College Algebra back in high school, but I was foolish and slept through much of the two latter. As for Algebra 2, I was afflicted with memorization of techniques for solving problems, without <em>really</em> understanding.</p>
<p>Luckily, I now have a <a href="http://www.ratemyprofessors.com/ShowRatings.jsp?tid=547900">pretty good professor</a> who has clarified things. The crazy thing is that whenever I start thinking about the real world applications of this type of math, there&#8217;s too many to count.</p>
<p>One thing very applicable to my past life at <a href="http://www.ifloor.com/">iFLOOR</a> was curve fitting&#8211; taking observed data and fitting it to a curve. (Example: price point, units sold, revenue) If you graph the data, it will create a parabola (aka: bell curve). But here&#8217;s the cool part: You can take the equation for that bell curve and use it as a pricing model in order to price for maximum profit.</p>
<p>And I always figured that &#8220;pricing model&#8221; was just a buzzword&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryansimonson.com/2008/07/08/just-finished-my-homework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
