<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
  <title>pullmonkey.com - Home</title>
  <id>tag:pullmonkey.com,2009:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  
  <link href="http://pullmonkey.com/" rel="alternate" type="text/html" />
  <updated>2009-04-30T16:34:53Z</updated>
  <link rel="self" href="http://feeds.feedburner.com/Pullmonkeycom" type="application/atom+xml" /><entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2009-04-30:53106</id>
    <published>2009-04-30T16:33:00Z</published>
    <updated>2009-04-30T16:34:53Z</updated>
    <category term="development" />
    <category term="Open Flash Chart Graphs" />
    <category term="projects" />
    <category term="rails" />
    <category term="ruby" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2009/4/30/open-flash-chart-ii-fully-automated" rel="alternate" type="text/html" />
    <title>Open Flash Chart II - fully automated</title>
<content type="html">
            Just as an attention grabber - we are going after this example in this article:
&lt;div&gt;&lt;/div&gt;
&lt;h2&gt;Keeping up&lt;/h2&gt;
Ok, seeing that the &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/"&gt;php versions of open flash chart&lt;/a&gt; and open flash chart swf files continually change along with with the API (not saying this is a bad thing), I wanted to come up with an even more abstract solution.   The goal is to not have to worry when the swf file is released with the latest set of graphs or changes its API.  I simply don't want to worry about this method or that method, or this class or that class. &lt;br /&gt;
&lt;h2&gt;Feedback&lt;/h2&gt;
This article will sort of act as a tutorial for those interested in metaprogramming and as a set of instructions for those looking to experiment with the &lt;a href="http://github.com/pullmonkey/open_flash_chart/tree/test"&gt;latest version of the OFC II Rails Plugin that I am currently toying with&lt;/a&gt;.  I would like to hear feedback, but just remember that phase 1 of this release will be very basic, meaning none of the ajaxy stuff.  It will come, just not yet.&lt;br /&gt;
&lt;h2&gt;Let's see what we can get away with&lt;/h2&gt;
I am already using method_missing() for pretty much everything in the &lt;a href="http://github.com/pullmonkey/open_flash_chart/tree/master"&gt;OFC II Rails Plugin that is being used now&lt;/a&gt;.  But every time new classes are added, I have to sit down and basically convert the php class to ruby - just plain tedious, not really what I had planned when I started all this.  Ok, so method_missing() was great, but let me introduce (or possibly reintroduce) you to const_missing(), basically method_missing() but instead of methods, we can create classes or modules or other objects on the fly.  This will definitely help when the php version gets a new class.  Instead of getting hounded to update the rails version to be 100% like the php version, everything will just work, no updates to code required.  Well, we hope !   So check this out:&lt;br /&gt;
&lt;br /&gt;
Here is what we did with method_missing():
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;module&lt;/span&gt; &lt;span class="cl"&gt;OFC&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;method_missing&lt;/span&gt;(method_name, *args, &amp;amp;blk)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;case&lt;/span&gt; method_name.to_s&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;when&lt;/span&gt; &lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;(.*)=&lt;/span&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;/span&gt;   &lt;span class="c"&gt;# i.e., if it is something x_legend=&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="c"&gt;# if the user wants to set an instance variable then let them&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="c"&gt;# the other args (args[0]) are ignored since it is a set method&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="pc"&gt;self&lt;/span&gt;.instance_variable_set(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;@&lt;/span&gt;&lt;span class="il"&gt;&lt;span class="dl"&gt;#{&lt;/span&gt;&lt;span class="gv"&gt;$1&lt;/span&gt;&lt;span class="dl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, args[&lt;span class="i"&gt;0&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;when&lt;/span&gt; &lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;^set_(.*)&lt;/span&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="c"&gt;# backwards compatible ... the user can still use the same set_y_legend methods if they want&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="pc"&gt;self&lt;/span&gt;.instance_variable_set(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;@&lt;/span&gt;&lt;span class="il"&gt;&lt;span class="dl"&gt;#{&lt;/span&gt;&lt;span class="gv"&gt;$1&lt;/span&gt;&lt;span class="dl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, args[&lt;span class="i"&gt;0&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          &lt;span class="r"&gt;if&lt;/span&gt; inst = &lt;span class="pc"&gt;self&lt;/span&gt;.instance_variable_get(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;@&lt;/span&gt;&lt;span class="il"&gt;&lt;span class="dl"&gt;#{&lt;/span&gt;method_name&lt;span class="dl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;            inst&lt;tt&gt;
&lt;/tt&gt;          &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class="c"&gt;# if the method/attribute is missing and it is not a set method then hmmmm better let the user know&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            &lt;span class="r"&gt;super&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

This just basically allows me to do this:&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Foo&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;OFC&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  foo = &lt;span class="co"&gt;Foo&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  foo.some_random_attribute = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class="c"&gt;#=&amp;gt; &amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  foo.some_random_attribute  &lt;span class="c"&gt;#=&amp;gt; &amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  foo.some_random_undefined_attribute  &lt;span class="c"&gt;#=&amp;gt; Method Missing error (calls super)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="c"&gt;# too be like php, for easier conversion&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  foo.set_some_random_attribute(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Good Bye&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)  &lt;span class="c"&gt;#=&amp;gt; &amp;quot;Good Bye&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  foo.some_random_attribute  &lt;span class="c"&gt;#=&amp;gt; &amp;quot;Good Bye&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Along the same lines, I have created an initialize method that takes any argument hash of variable/value pairs and calls variable=() which is handled by method missing as we saw above:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Foo&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;OFC&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  foo = &lt;span class="co"&gt;Foo&lt;/span&gt;.new(&lt;span class="sy"&gt;:x_axis&lt;/span&gt; =&amp;gt; &lt;span class="i"&gt;5&lt;/span&gt;, &lt;span class="sy"&gt;:min&lt;/span&gt; =&amp;gt; &lt;span class="i"&gt;10&lt;/span&gt;, &lt;span class="sy"&gt;:max&lt;/span&gt; =&amp;gt; &lt;span class="i"&gt;90&lt;/span&gt;, &lt;span class="sy"&gt;:steps&lt;/span&gt; =&amp;gt; &lt;span class="i"&gt;5&lt;/span&gt;, &lt;span class="sy"&gt;:elements&lt;/span&gt; =&amp;gt; [&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;one&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;two&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;  &lt;tt&gt;
&lt;/tt&gt;  foo.x_axis &lt;span class="c"&gt;#=&amp;gt; 5&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  foo.min &lt;span class="c"&gt;#=&amp;gt; 10&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Ok, so on to const_missing() and what we can do with that:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="co"&gt;OFC&lt;/span&gt;.const_missing(const)&lt;tt&gt;
&lt;/tt&gt;    klass = &lt;span class="co"&gt;Class&lt;/span&gt;.new &lt;span class="co"&gt;OFC&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="co"&gt;Object&lt;/span&gt;.const_set const, klass&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; klass&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

This says that any undefined (missing) constant of OFC should be defined as a new class that inherits from OFC::Base.&lt;br /&gt;
So when we say OFC::Foo, that has not been defined, so we will get back class OFC::Foo &amp;lt; OFC::Base;end; which will give us the initialize() method and method_missing() method from above.  Let's see how this works:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;  line = &lt;span class="co"&gt;OFC&lt;/span&gt;::&lt;span class="co"&gt;Line&lt;/span&gt;.new(&lt;span class="sy"&gt;:values&lt;/span&gt; =&amp;gt; [&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="pc"&gt;nil&lt;/span&gt;,&lt;span class="pc"&gt;nil&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;,&lt;span class="i"&gt;7&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;  line.values &lt;span class="c"&gt;#=&amp;gt; [1,2,3,nil,nil,5,6,7]&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  line.some_random_variable = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="c"&gt;#=&amp;gt; &amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  line.some_random_variable &lt;span class="c"&gt;#=&amp;gt; &amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  stacked_bar_chart = &lt;span class="co"&gt;OFC&lt;/span&gt;::&lt;span class="co"&gt;BarStack&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;  stacked_bar_chart.values = []&lt;tt&gt;
&lt;/tt&gt;  stacked_bar_chart.values &amp;lt;&amp;lt; [&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;  stacked_bar_chart.values &amp;lt;&amp;lt; [&lt;span class="i"&gt;5&lt;/span&gt;, {&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;val&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="i"&gt;5&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;colour&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;#ff0000&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;}]&lt;tt&gt;
&lt;/tt&gt;  stacked_bar_chart.keys = [{ &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;colour&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;#C4D318&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Kiting&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;font-size&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="i"&gt;13&lt;/span&gt; } ...]&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

So it all sort of came together right there.  I've shown you all the code that comes with the Rails Open Flash Chart plugin now.   No more definining idividual classes, no more trying to keep up with the never ending php version, and no more late nights converting php to ruby (!).  About dang time.&lt;br /&gt;
&lt;br /&gt;
Ok, but this is just the beginning, nothing has been set in stone, so like I said, give me your feedback, what works for you and what does not.  And, hopefully, I will have solutions for you or you for me.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Example with new version (test version)&lt;/h2&gt;
I am using rails 2.3.2, but I don't think it will matter what version you are using.&lt;br /&gt;
&lt;h3&gt;Create your new rails project&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# create a new rails project &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; rails testing_it&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;#&amp;lt;Bunch of stuff is created ....&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; cd testing_it/&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Install the plugin from the test branch&lt;/h3&gt;
Note the -r test in this next step.  The new version (test version) I am playing with is under the test branch and -r says what branch to pull from.&lt;br /&gt;
Also, you can use git:// instead of http:// below, but depending on your firewall restrictions http:// will probably work out best for you.
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ./script/plugin install http&lt;span class="sy"&gt;:/&lt;/span&gt;/github.com/pullmonkey/open_flash_chart.git -r test&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# &amp;lt;Bunch more stuff ...&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Create a controller to play in&lt;/h3&gt; 
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ./script/generate controller test_it&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# &amp;lt;And more stuff &amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Get our assets&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# first we will get swfobject.js&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; cp vendor/plugins/open_flash_chart/assets/javascripts/swfobject.js public/javascripts/&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# next the open flash chart swf (GET whatever is the latest version), right now that is here: http://teethgrinder.co.uk/open-flash-chart-2/open-flash-chart.swf&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; cd public/&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; wget http&lt;span class="sy"&gt;:/&lt;/span&gt;/teethgrinder.co.uk/open-flash-chart&lt;span class="i"&gt;-2&lt;/span&gt;/open-flash-chart.swf&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; cd ..&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Edit our controller&lt;/h3&gt;
Notice here that I just include one of the many examples from the &lt;a href="http://github.com/pullmonkey/open_flash_chart/tree/7ca9f9dbea795431aafdcc3a20dd4b73900f6fba/lib/ofc/examples"&gt;plugin's examples directory&lt;/a&gt;.  Definitely more to follow.&lt;br /&gt;
One thing you will notice about the examples, is that the php code is in the comments, so you can see how I would convert from the php examples to ruby.  Please feel free to add your own examples, just fork the project.
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; vi app/controllers/test_it_controller.rb&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# mine looks like this:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;TestItController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  include &lt;span class="co"&gt;OFC&lt;/span&gt;::&lt;span class="co"&gt;Examples&lt;/span&gt;::&lt;span class="co"&gt;AreaHollow&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@graph&lt;/span&gt; = open_flash_chart_object(&lt;span class="i"&gt;600&lt;/span&gt;,&lt;span class="i"&gt;300&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;/test_it/area_hollow&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Edit our view&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; vi app/views/test_it/index.html.erb&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# mine looks like this:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;%= javascript_include_tag &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;swfobject&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;%= @graph %&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Start 'er up&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt; pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ./script/server&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# browse to the test_it index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;http&lt;span class="sy"&gt;:/&lt;/span&gt;/localhost:&lt;span class="i"&gt;3000&lt;/span&gt;/test_it&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h2&gt;Our example&lt;/h2&gt;
&lt;div&gt;&lt;/div&gt;

          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2009-04-30:53634</id>
    <published>2009-04-30T14:48:00Z</published>
    <updated>2009-04-30T14:49:27Z</updated>
    <category term="rails" />
    <category term="ruby" />
    <link href="http://pullmonkey.com/2009/4/30/spreadsheet-gem-data-may-have-been-lost" rel="alternate" type="text/html" />
    <title>Spreadsheet Gem - data may have been lost</title>
<content type="html">
            I've been using the &lt;a href="http://spreadsheet.rubyforge.org/"&gt;spreadsheet gem&lt;/a&gt; lately for a couple projects I am working on to modify existing spreadsheets.  I have quite often stumbled upon this error when opening modified spreadsheets in excel:&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;File error: data may have been lost&lt;/h2&gt;
Like most microsoft errors, it was useless and the spreadsheet came up just fine.  But that error was just so annoying, other spreadsheet applications (open office, excel on mac) opened without any problems.  So after quite a bit of hacking and digging around, I finally tried setting the encoding, which defaults to UTF-8.  Well it just so happens that the spreadsheet being modified was encoded with UTF-16LE.  &lt;br /&gt;
&lt;br /&gt;
So part one of my solution became this:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;Spreadsheet&lt;/span&gt;.client_encoding = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;UTF-16LE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Then doing a little more digging I decided that this would be a better long-term solution:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;book = &lt;span class="co"&gt;Spreadsheet&lt;/span&gt;.open spreadsheet_file&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;Spreadsheet&lt;/span&gt;.client_encoding = book.encoding&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Well, hopefully it wasn't just me and someone will be able to save a bit of time with this.&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2009-04-17:53158</id>
    <published>2009-04-17T01:41:00Z</published>
    <updated>2009-04-17T01:46:47Z</updated>
    <category term="projects" />
    <category term="rails" />
    <category term="ruby" />
    <link href="http://pullmonkey.com/2009/4/17/can-you-read-this" rel="alternate" type="text/html" />
    <title>Can you read this?</title>
<content type="html">
            Got an email today, I have seen it before and I am sure it has been going around for years.  This time, I thought that I would do an exercise and create a plugin that duplicates what I found in this email.  See for yourself.&lt;br /&gt;
&lt;br /&gt;
Here is the email I got:&lt;br /&gt;
&amp;lt;center&gt;&lt;img src="/assets/2009/4/17/can_you_read_this.png" /&gt;&amp;lt;/center&gt;
&lt;br /&gt;
&lt;br /&gt;
What I gathered was that the only important letters are the first and last letter of each word, those have to be in the right order.  So the rest of the letters can be in any random order.  That is what I did - I created &lt;a href="http://github.com/pullmonkey/can_you_read_this/tree/master"&gt;a plugin and put it out on github&lt;/a&gt;.  You can install it like this:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
./script/plugin install http://github.com/pullmonkey/can_you_read_this.git

&lt;/code&gt;&lt;/pre&gt;
And use it like this:
&lt;pre&gt;&lt;code&gt;
#in your views
&amp;lt;%= can_you_read_this("hello, can you read this?") %&gt;

&lt;/code&gt;&lt;/pre&gt;
Have fun.
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>slaive</name>
    </author>
    <id>tag:pullmonkey.com,2009-04-14:52831</id>
    <published>2009-04-14T00:02:00Z</published>
    <updated>2009-04-14T00:02:33Z</updated>
    <category term="C / C++" />
    <category term="development" />
    <category term="projects" />
    <category term="tutorials" />
    <category term="c++" />
    <category term="ece231" />
    <category term="prog" />
    <link href="http://pullmonkey.com/2009/4/14/ece231-spring-2009-programming-assignment-4" rel="alternate" type="text/html" />
    <title>ECE231 - Spring 2009 - Programming Assignment 4</title>
<content type="html">
            &lt;p&gt;This is a step-by-step tutorial for this assignment and an explanation of the basics of how it works for those that are having a difficult time understanding or just are stuck somewhere. To &lt;a href="http://www.unm.edu/~speralta/progs/ece231assn4.htm"&gt;view the assignment click here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So for this assignment we are only going to be doing input and output. So the only header file we need is the &lt;b&gt;iostream&lt;/b&gt; library.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;using namespace std;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Defining the Node Class&lt;/h2&gt;
&lt;p&gt;For the &lt;b&gt;node&lt;/b&gt; class we need 5 private variables: &lt;b&gt;&lt;i&gt;type&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;value&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;node1&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;node2&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;next&lt;/i&gt;&lt;/b&gt;, a &lt;b&gt;constructor&lt;/b&gt;, 5 &lt;b&gt;member functions&lt;/b&gt;, and a &lt;b&gt;friend class&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Because most of the functions only return a single variable it would be a waste to have the functions outside the class so I put them all inside the class.&lt;/p&gt;
&lt;p&gt;So here is what your class should look like:&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;class node&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;protected:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;int&lt;/span&gt; type;     &lt;span class="c"&gt;// type of component&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; value; &lt;span class="c"&gt;// value of the component&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;int&lt;/span&gt; node1;    &lt;span class="c"&gt;// first node of the component&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;int&lt;/span&gt; node2;    &lt;span class="c"&gt;// second node of the component&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    node *next;   &lt;span class="c"&gt;// pointer to the next node in list&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;public:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    node(&lt;span class="pt"&gt;int&lt;/span&gt; a, &lt;span class="pt"&gt;double&lt;/span&gt; b, &lt;span class="pt"&gt;int&lt;/span&gt; c, &lt;span class="pt"&gt;int&lt;/span&gt; d)&lt;tt&gt;
&lt;/tt&gt;    {&lt;tt&gt;
&lt;/tt&gt;      type  = a;&lt;tt&gt;
&lt;/tt&gt;      value = b;&lt;tt&gt;
&lt;/tt&gt;      node1 = c;&lt;tt&gt;
&lt;/tt&gt;      node2 = d;&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;int&lt;/span&gt; getType() { &lt;span class="r"&gt;return&lt;/span&gt; type; }&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; getValue() { &lt;span class="r"&gt;return&lt;/span&gt; value; }&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;int&lt;/span&gt; getNode1() { &lt;span class="r"&gt;return&lt;/span&gt; node1; }&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;int&lt;/span&gt; getNode2() { &lt;span class="r"&gt;return&lt;/span&gt; node2; }&lt;tt&gt;
&lt;/tt&gt;    node *getNext() { &lt;span class="r"&gt;return&lt;/span&gt; next; }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    friend class circuit;&lt;tt&gt;
&lt;/tt&gt;};&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Defining the Circuit Class&lt;/h2&gt;
&lt;p&gt;For the &lt;b&gt;circuit&lt;/b&gt; class we need 2 private variables: &lt;b&gt;&lt;i&gt;first&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;last&lt;/i&gt;&lt;/b&gt;, a &lt;b&gt;constructor&lt;/b&gt;, a &lt;b&gt;copy constructor&lt;/b&gt;, 6 &lt;b&gt;member functions&lt;/b&gt;, and a &lt;b&gt;friend function&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;For these I will put most of the functions on the outside of the class.&lt;/p&gt;
&lt;p&gt;So here is what your class should look like:&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;class circuit&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;protected:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    node *first; &lt;span class="c"&gt;// pointer to first node in list&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    node *last;  &lt;span class="c"&gt;// pointer to last node in list&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    node *getNode(&lt;span class="pt"&gt;int&lt;/span&gt; &amp;amp; , &lt;span class="pt"&gt;double&lt;/span&gt; &amp;amp; , &lt;span class="pt"&gt;int&lt;/span&gt; &amp;amp; , &lt;span class="pt"&gt;int&lt;/span&gt; &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;public:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    circuit();&lt;tt&gt;
&lt;/tt&gt;    circuit(&lt;span class="r"&gt;const&lt;/span&gt; circuit &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;    ~circuit();&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; insert(&lt;span class="pt"&gt;int&lt;/span&gt; , &lt;span class="pt"&gt;double&lt;/span&gt; , &lt;span class="pt"&gt;int&lt;/span&gt; , &lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; insertInFront(node * );&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; insertInBack(node * , node * );&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; insertInMiddle(node * , node * , node * );&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;bool&lt;/span&gt; remove(&lt;span class="pt"&gt;int&lt;/span&gt; , &lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;bool&lt;/span&gt; isEmpty();&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    friend ostream &amp;amp; operator &amp;lt;&amp;lt; (ostream &amp;amp; , circuit );&lt;tt&gt;
&lt;/tt&gt;};&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Writing the Actual Functions for the Circuit Class&lt;/h2&gt;
&lt;p&gt;First, we have the private function &lt;b&gt;getNode&lt;/b&gt;. This function creates a new member of the &lt;b&gt;node&lt;/b&gt; class and returns the address to it.&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;node* circuit::getNode(&lt;span class="pt"&gt;int&lt;/span&gt; &amp;amp;t, &lt;span class="pt"&gt;double&lt;/span&gt; &amp;amp;v, &lt;span class="pt"&gt;int&lt;/span&gt; &amp;amp;n1, &lt;span class="pt"&gt;int&lt;/span&gt; &amp;amp;n2)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  node *temp = new node(t, v, n1, n2);&lt;tt&gt;
&lt;/tt&gt;  assert( temp != &lt;span class="i"&gt;0&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; temp;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Second, we have the a &lt;b&gt;constructor&lt;/b&gt;, a &lt;b&gt;copy constructor&lt;/b&gt;, and a &lt;b&gt;class destructor&lt;/b&gt;:&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;circuit::circuit()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  first = last = &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;circuit::circuit(&lt;span class="r"&gt;const&lt;/span&gt; circuit &amp;amp;c)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  first = last = &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  node *nc = c.first;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;while&lt;/span&gt;(nc != &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    insert(nc-&amp;gt;type, nc-&amp;gt;value, nc-&amp;gt;node1, nc-&amp;gt;node2);&lt;tt&gt;
&lt;/tt&gt;    nc = nc-&amp;gt;next;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;circuit::~circuit()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;( !isEmpty() )&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    node *nc = first;&lt;tt&gt;
&lt;/tt&gt;    node *temp;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;while&lt;/span&gt;(nc != &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    {&lt;tt&gt;
&lt;/tt&gt;      temp = nc;&lt;tt&gt;
&lt;/tt&gt;      nc = nc-&amp;gt;next;&lt;tt&gt;
&lt;/tt&gt;      delete temp;&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we have the 6 &lt;b&gt;member functions&lt;/b&gt;:&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;45&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;47&lt;tt&gt;
&lt;/tt&gt;48&lt;tt&gt;
&lt;/tt&gt;49&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;50&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;51&lt;tt&gt;
&lt;/tt&gt;52&lt;tt&gt;
&lt;/tt&gt;53&lt;tt&gt;
&lt;/tt&gt;54&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;55&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;56&lt;tt&gt;
&lt;/tt&gt;57&lt;tt&gt;
&lt;/tt&gt;58&lt;tt&gt;
&lt;/tt&gt;59&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;60&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;61&lt;tt&gt;
&lt;/tt&gt;62&lt;tt&gt;
&lt;/tt&gt;63&lt;tt&gt;
&lt;/tt&gt;64&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;65&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;66&lt;tt&gt;
&lt;/tt&gt;67&lt;tt&gt;
&lt;/tt&gt;68&lt;tt&gt;
&lt;/tt&gt;69&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;70&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;71&lt;tt&gt;
&lt;/tt&gt;72&lt;tt&gt;
&lt;/tt&gt;73&lt;tt&gt;
&lt;/tt&gt;74&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;75&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;76&lt;tt&gt;
&lt;/tt&gt;77&lt;tt&gt;
&lt;/tt&gt;78&lt;tt&gt;
&lt;/tt&gt;79&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;80&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;81&lt;tt&gt;
&lt;/tt&gt;82&lt;tt&gt;
&lt;/tt&gt;83&lt;tt&gt;
&lt;/tt&gt;84&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;85&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;86&lt;tt&gt;
&lt;/tt&gt;87&lt;tt&gt;
&lt;/tt&gt;88&lt;tt&gt;
&lt;/tt&gt;89&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;90&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;91&lt;tt&gt;
&lt;/tt&gt;92&lt;tt&gt;
&lt;/tt&gt;93&lt;tt&gt;
&lt;/tt&gt;94&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;95&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;96&lt;tt&gt;
&lt;/tt&gt;97&lt;tt&gt;
&lt;/tt&gt;98&lt;tt&gt;
&lt;/tt&gt;99&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;101&lt;tt&gt;
&lt;/tt&gt;102&lt;tt&gt;
&lt;/tt&gt;103&lt;tt&gt;
&lt;/tt&gt;104&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;105&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; circuit::insert(&lt;span class="pt"&gt;int&lt;/span&gt; t, &lt;span class="pt"&gt;double&lt;/span&gt; v, &lt;span class="pt"&gt;int&lt;/span&gt; n1, &lt;span class="pt"&gt;int&lt;/span&gt; n2)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  node *newNode = getNode(t, v, n1, n2);&lt;tt&gt;
&lt;/tt&gt;  node *nc = first;&lt;tt&gt;
&lt;/tt&gt;  node *nc_next = first;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(isEmpty())&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    first = last = newNode;&lt;tt&gt;
&lt;/tt&gt;    newNode-&amp;gt;next = &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;else&lt;/span&gt; &lt;span class="r"&gt;if&lt;/span&gt;(first == last)&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(newNode-&amp;gt;node1 &amp;lt; first-&amp;gt;node1)&lt;tt&gt;
&lt;/tt&gt;      insertInFront(newNode);&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;else&lt;/span&gt; &lt;span class="r"&gt;if&lt;/span&gt;(newNode-&amp;gt;node1 &amp;gt; first-&amp;gt;node1)&lt;tt&gt;
&lt;/tt&gt;      insertInBack(newNode, first);&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;else&lt;/span&gt; &lt;span class="c"&gt;// if newNode-&amp;gt;node1 == first-&amp;gt;node1&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    {&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;if&lt;/span&gt;(newNode-&amp;gt;node2 &amp;lt; first-&amp;gt;node2)&lt;tt&gt;
&lt;/tt&gt;        insertInFront(newNode);&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        insertInBack(newNode, first);&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;while&lt;/span&gt;(nc-&amp;gt;next != &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    {&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;if&lt;/span&gt;(newNode-&amp;gt;node1 &amp;lt; nc_next-&amp;gt;node1)&lt;tt&gt;
&lt;/tt&gt;      {&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="r"&gt;if&lt;/span&gt;(nc_next == first)&lt;tt&gt;
&lt;/tt&gt;          insertInFront(newNode);&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;          insertInMiddle(newNode, nc, nc_next);&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="r"&gt;break&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;      }&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;if&lt;/span&gt;(newNode-&amp;gt;node1 == nc_next-&amp;gt;node1)&lt;tt&gt;
&lt;/tt&gt;      {&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="r"&gt;if&lt;/span&gt;(newNode-&amp;gt;node2 &amp;lt;= nc_next-&amp;gt;node2)&lt;tt&gt;
&lt;/tt&gt;        {&lt;tt&gt;
&lt;/tt&gt;          &lt;span class="r"&gt;if&lt;/span&gt;(nc_next == first)&lt;tt&gt;
&lt;/tt&gt;            insertInFront(newNode);&lt;tt&gt;
&lt;/tt&gt;          &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;            insertInMiddle(newNode, nc, nc_next);&lt;tt&gt;
&lt;/tt&gt;          &lt;span class="r"&gt;break&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;        }&lt;tt&gt;
&lt;/tt&gt;      }&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;if&lt;/span&gt;(newNode-&amp;gt;node1 &amp;gt;= nc_next-&amp;gt;node1 and nc_next == last)&lt;tt&gt;
&lt;/tt&gt;      {&lt;tt&gt;
&lt;/tt&gt;        insertInBack(newNode, nc_next);&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="r"&gt;break&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;      }&lt;tt&gt;
&lt;/tt&gt;      nc = nc_next;&lt;tt&gt;
&lt;/tt&gt;      nc_next = nc-&amp;gt;next;&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; circuit::insertInFront(node *n)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  n-&amp;gt;next = first;&lt;tt&gt;
&lt;/tt&gt;  first = n;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; circuit::insertInBack(node *n, node *p)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  p-&amp;gt;next = last = n;&lt;tt&gt;
&lt;/tt&gt;  n-&amp;gt;next = &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; circuit::insertInMiddle(node *cn, node *p , node *n)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  p-&amp;gt;next = cn;&lt;tt&gt;
&lt;/tt&gt;  cn-&amp;gt;next = n;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;bool&lt;/span&gt; circuit::remove(&lt;span class="pt"&gt;int&lt;/span&gt; n1, &lt;span class="pt"&gt;int&lt;/span&gt; n2)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  node *nc = first;&lt;tt&gt;
&lt;/tt&gt;  node *nc_next = first;&lt;tt&gt;
&lt;/tt&gt;  node *temp;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;( isEmpty() )&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pc"&gt;false&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;while&lt;/span&gt; (nc_next != &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(nc_next != &lt;span class="i"&gt;0&lt;/span&gt; and nc_next-&amp;gt;node1 == n1 and nc_next-&amp;gt;node2 == n2)&lt;tt&gt;
&lt;/tt&gt;    {&lt;tt&gt;
&lt;/tt&gt;      temp = nc_next;&lt;tt&gt;
&lt;/tt&gt;      nc-&amp;gt;next = nc_next-&amp;gt;next;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;if&lt;/span&gt;(first == last)&lt;tt&gt;
&lt;/tt&gt;        first = last = &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;if&lt;/span&gt;(nc_next == first)&lt;tt&gt;
&lt;/tt&gt;        first = temp-&amp;gt;next;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;if&lt;/span&gt; (nc_next == last)&lt;tt&gt;
&lt;/tt&gt;        last = nc;&lt;tt&gt;
&lt;/tt&gt;      delete nc_next;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pc"&gt;true&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;    nc = nc_next;&lt;tt&gt;
&lt;/tt&gt;    nc_next = nc-&amp;gt;next;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pc"&gt;false&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;bool&lt;/span&gt; circuit::isEmpty()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; ( first == &lt;span class="i"&gt;0&lt;/span&gt; and last == &lt;span class="i"&gt;0&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Last, we have a &lt;b&gt;friend function&lt;/b&gt;:&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;ostream &amp;amp; operator &amp;lt;&amp;lt; (ostream &amp;amp;os, circuit c)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  node *nc = c.first; &lt;span class="c"&gt;// node count variable used for looping through list&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; lcv = &lt;span class="i"&gt;1&lt;/span&gt;; &lt;span class="c"&gt;// loop control variable&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;First: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c.first &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  Last: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c.last &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;while&lt;/span&gt; (nc != &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    os &amp;lt;&amp;lt; lcv &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;. &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;       &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;node1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;   &amp;lt;&amp;lt; nc-&amp;gt;getNode1() &lt;tt&gt;
&lt;/tt&gt;       &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  node2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; nc-&amp;gt;getNode2()&lt;tt&gt;
&lt;/tt&gt;       &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  type: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &amp;lt;&amp;lt; nc-&amp;gt;getType() &lt;tt&gt;
&lt;/tt&gt;       &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  value: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; nc-&amp;gt;getValue() &lt;tt&gt;
&lt;/tt&gt;       &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  next: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &amp;lt;&amp;lt; nc-&amp;gt;getNext() &lt;tt&gt;
&lt;/tt&gt;       &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    nc = nc-&amp;gt;getNext();&lt;tt&gt;
&lt;/tt&gt;    lcv++;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(c.first == &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    os &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;List is empty&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; os;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Testing your program&lt;/h2&gt;
&lt;p&gt;Our teacher gave us a test program, however I expanded it a little bit to test a bit more fully.&lt;/p&gt;
&lt;p&gt;So here is my test program:&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;45&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;47&lt;tt&gt;
&lt;/tt&gt;48&lt;tt&gt;
&lt;/tt&gt;49&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;50&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;51&lt;tt&gt;
&lt;/tt&gt;52&lt;tt&gt;
&lt;/tt&gt;53&lt;tt&gt;
&lt;/tt&gt;54&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;55&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;56&lt;tt&gt;
&lt;/tt&gt;57&lt;tt&gt;
&lt;/tt&gt;58&lt;tt&gt;
&lt;/tt&gt;59&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;60&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;61&lt;tt&gt;
&lt;/tt&gt;62&lt;tt&gt;
&lt;/tt&gt;63&lt;tt&gt;
&lt;/tt&gt;64&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;65&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;66&lt;tt&gt;
&lt;/tt&gt;67&lt;tt&gt;
&lt;/tt&gt;68&lt;tt&gt;
&lt;/tt&gt;69&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;70&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;71&lt;tt&gt;
&lt;/tt&gt;72&lt;tt&gt;
&lt;/tt&gt;73&lt;tt&gt;
&lt;/tt&gt;74&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;75&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;76&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;quot;yourprogramname.h&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;using namespace std;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;int&lt;/span&gt; M=&lt;span class="i"&gt;7&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;int&lt;/span&gt; R=&lt;span class="i"&gt;2&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;int&lt;/span&gt; main()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  circuit c, c2, c3;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; d[M*&lt;span class="i"&gt;3&lt;/span&gt;] = {&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;};&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; v[M] = {&lt;span class="i"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.5&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.7&lt;/span&gt;, &lt;span class="i"&gt;10&lt;/span&gt;&lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.4&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.6&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.5&lt;/span&gt;, &lt;span class="i"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.9&lt;/span&gt;, &lt;span class="i"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.8&lt;/span&gt;};&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; d1[R*&lt;span class="i"&gt;8&lt;/span&gt;] = {&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;, &lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;};&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; i, j;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;( i=&lt;span class="i"&gt;0&lt;/span&gt;,j=&lt;span class="i"&gt;0&lt;/span&gt;; i&amp;lt;M; i++,j=j+&lt;span class="i"&gt;3&lt;/span&gt; )&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; i+&lt;span class="i"&gt;1&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Inserting new node into list with:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;node1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;   &amp;lt;&amp;lt; d[j+&lt;span class="i"&gt;1&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  node2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; d[j+&lt;span class="i"&gt;2&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  type: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &amp;lt;&amp;lt; d[j]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  value: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; v[i]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    c.insert( d[j], v[i], d[j+&lt;span class="i"&gt;1&lt;/span&gt;], d[j+&lt;span class="i"&gt;2&lt;/span&gt;] );&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;List: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; c &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;( i=&lt;span class="i"&gt;0&lt;/span&gt;; i&amp;lt;R*&lt;span class="i"&gt;8&lt;/span&gt;; i=i+&lt;span class="i"&gt;2&lt;/span&gt; )&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Removing node with:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;node1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;   &amp;lt;&amp;lt; d1[i]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  node2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; d1[i+&lt;span class="i"&gt;1&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;( c.remove( d1[i], d1[i+&lt;span class="i"&gt;1&lt;/span&gt;] ) == &lt;span class="pc"&gt;false&lt;/span&gt; )&lt;tt&gt;
&lt;/tt&gt;      cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Node not found&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;List: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; c &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Making List #2:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; d2[M*&lt;span class="i"&gt;3&lt;/span&gt;] = {&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;};&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;( i=&lt;span class="i"&gt;0&lt;/span&gt;,j=&lt;span class="i"&gt;0&lt;/span&gt;; i&amp;lt;M; i++,j=j+&lt;span class="i"&gt;3&lt;/span&gt; )&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; i+&lt;span class="i"&gt;1&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Inserting new node into list with:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;node1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;   &amp;lt;&amp;lt; d2[j+&lt;span class="i"&gt;1&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  node2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; d2[j+&lt;span class="i"&gt;2&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  type: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &amp;lt;&amp;lt; d2[j]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  value: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; v[i]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    c2.insert( d2[j], v[i], d2[j+&lt;span class="i"&gt;1&lt;/span&gt;], d2[j+&lt;span class="i"&gt;2&lt;/span&gt;] );&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;List: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Making List #3:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; d3[M*&lt;span class="i"&gt;3&lt;/span&gt;] = {&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;};&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;( i=&lt;span class="i"&gt;0&lt;/span&gt;,j=&lt;span class="i"&gt;0&lt;/span&gt;; i&amp;lt;M; i++,j=j+&lt;span class="i"&gt;3&lt;/span&gt; )&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; i+&lt;span class="i"&gt;1&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Inserting new node into list with:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;node1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;   &amp;lt;&amp;lt; d3[j+&lt;span class="i"&gt;1&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  node2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; d3[j+&lt;span class="i"&gt;2&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  type: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &amp;lt;&amp;lt; d3[j]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  value: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; v[i]&lt;tt&gt;
&lt;/tt&gt;         &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    c3.insert( d3[j], v[i], d3[j+&lt;span class="i"&gt;1&lt;/span&gt;], d3[j+&lt;span class="i"&gt;2&lt;/span&gt;] );&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;List: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>slaive</name>
    </author>
    <id>tag:pullmonkey.com,2009-03-26:52258</id>
    <published>2009-03-26T18:05:00Z</published>
    <updated>2009-03-26T18:19:24Z</updated>
    <category term="C / C++" />
    <category term="development" />
    <category term="projects" />
    <category term="tutorials" />
    <category term="c++" />
    <category term="ece231" />
    <category term="prog" />
    <link href="http://pullmonkey.com/2009/3/26/ece231-spring-2009-programming-assignment-3" rel="alternate" type="text/html" />
    <title>ECE231 - Spring 2009 - Programming Assignment 3</title>
<content type="html">
            &lt;p&gt;This is a step-by-step tutorial for this assignment and an explanation of the basics of how it works for those that are having a difficult time understanding or just are stuck somewhere. To &lt;a href="http://www.unm.edu/~speralta/progs/ece231assn3.htm"&gt;view the assignment click here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So for this assignment we are going to be doing a lot of math calculations so we are going to need the include the both the &lt;b&gt;iostream&lt;/b&gt; and the &lt;b&gt;cmath&lt;/b&gt; libraries. We will also need the value of &lt;b&gt;pi&lt;/b&gt;.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;using namespace std;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#define&lt;/span&gt; PI &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.141592654&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;or&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;double&lt;/span&gt; PI = &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.141592654&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Defining the Complexn Class&lt;/h2&gt;
&lt;p&gt;For the &lt;b&gt;complexn&lt;/b&gt; class we need 2 private variables &lt;b&gt;&lt;i&gt;r&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;i&lt;/i&gt;&lt;/b&gt;, 3 &lt;b&gt;constructors&lt;/b&gt;, a &lt;b&gt;copy constructor&lt;/b&gt;, 4 &lt;b&gt;member functions&lt;/b&gt;, 9 &lt;b&gt;overloaded opperators&lt;/b&gt;, and 2 &lt;b&gt;friend functions&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Like the previous program we will define everything with in the class and have the actual functions at the bottom.&lt;/p&gt;
&lt;p&gt;So here is what your class should look like (keep in mind that this all goes at the top &lt;b&gt;before the main function&lt;/b&gt;):&lt;/p&gt;

&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;class complexn&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;private:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; r; &lt;span class="c"&gt;// real part of the complex number&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; i; &lt;span class="c"&gt;// imaginary part of the complex number&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;public:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    complexn();&lt;tt&gt;
&lt;/tt&gt;    complexn(&lt;span class="pt"&gt;double&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;    complexn(&lt;span class="pt"&gt;double&lt;/span&gt; , &lt;span class="pt"&gt;double&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;    complexn(&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; complexabs();&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; complexangle();&lt;tt&gt;
&lt;/tt&gt;    complexn complexconj();&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; distance(&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    complexn operator + (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;    complexn operator - (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;    complexn operator * (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;    complexn operator / (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;    complexn operator = (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    complexn operator ++ ();&lt;tt&gt;
&lt;/tt&gt;    complexn operator ++ (&lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;    complexn operator -- ();&lt;tt&gt;
&lt;/tt&gt;    complexn operator -- (&lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    friend ostream &amp;amp; operator &amp;lt;&amp;lt; (ostream &amp;amp; , &lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;    friend istream &amp;amp; operator &amp;gt;&amp;gt; (istream &amp;amp; , complexn &amp;amp; );&lt;tt&gt;
&lt;/tt&gt;};&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Writing the Actual Functions for the Complexn Class&lt;/h2&gt;
&lt;p&gt;First we have the 3 &lt;b&gt;constructors&lt;/b&gt; and the &lt;b&gt;copy constructor&lt;/b&gt;:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and sets r and i to 0.0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;complexn::complexn()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  r = i = &lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes 1 argument and sets r to the argument and i to 0.0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;complexn::complexn(&lt;span class="pt"&gt;double&lt;/span&gt; real)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  r = real;&lt;tt&gt;
&lt;/tt&gt;  i = &lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes 2 arguments and sets r to the first and i to the second&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;complexn::complexn(&lt;span class="pt"&gt;double&lt;/span&gt; real, &lt;span class="pt"&gt;double&lt;/span&gt; imag)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  r = real;&lt;tt&gt;
&lt;/tt&gt;  i = imag;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// this is a copy constructor that dereferences the complexn variable if it is referenced&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;complexn::complexn(&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;c)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  r = c.r;&lt;tt&gt;
&lt;/tt&gt;  i = c.i;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we have the 3 &lt;b&gt;member functions&lt;/b&gt;:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and returns the distance from the 0 as a double&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; complexn::complexabs()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; sqrt(pow(r,&lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;) + pow(i,&lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;));&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and returns the angle of the complex point as a double in radians&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; complexn::complexangle()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; angle; &lt;span class="c"&gt;// angle of coordinate from positive x axis&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  angle = atan(r / i);&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(r &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt; and i &amp;gt;= &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; PI - abs(angle);&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(r &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt; and i &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; -(PI - abs(angle));&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; angle;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and returns the conjugate of the complex number as a complexn class&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;complexn complexn::complexconj()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn temp = *this; &lt;span class="c"&gt;// complex number used for calculations&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  temp.i *= -&lt;span class="i"&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; temp;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes one complexn type argument and returns the distance between the argument and the current instance&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; complexn::distance(&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; sqrt(pow(temp.r -r, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;) + pow(temp.i - i, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;));&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we have the 9 &lt;b&gt;overloaded operators&lt;/b&gt;:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;45&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;47&lt;tt&gt;
&lt;/tt&gt;48&lt;tt&gt;
&lt;/tt&gt;49&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;50&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;51&lt;tt&gt;
&lt;/tt&gt;52&lt;tt&gt;
&lt;/tt&gt;53&lt;tt&gt;
&lt;/tt&gt;54&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;55&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;56&lt;tt&gt;
&lt;/tt&gt;57&lt;tt&gt;
&lt;/tt&gt;58&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator + (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn cn; &lt;span class="c"&gt;// complex number used for calculations&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  cn.r = r + temp.r;&lt;tt&gt;
&lt;/tt&gt;  cn.i = i + temp.i;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; cn;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator - (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn cn; &lt;span class="c"&gt;// complex number used for calculations&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  cn.r = r - temp.r;&lt;tt&gt;
&lt;/tt&gt;  cn.i = i - temp.i;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; cn;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator * (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn cn; &lt;span class="c"&gt;// complex number used for calculations&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  cn.r = r * temp.r - i * temp.i;&lt;tt&gt;
&lt;/tt&gt;  cn.i = r * temp.i + i * temp.r;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; cn;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator / (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn cn; &lt;span class="c"&gt;// complex number used for calculations&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  cn.r = (r * temp.r + i * temp.i) / (pow(temp.r, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;) + pow(temp.i, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;));&lt;tt&gt;
&lt;/tt&gt;  cn.i = (i * temp.r - r * temp.i) / (pow(temp.r, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;) + pow(temp.i, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;));&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; cn;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator = (&lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  r = temp.r;&lt;tt&gt;
&lt;/tt&gt;  i = temp.i;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; *this;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator ++ ()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  r += &lt;span class="i"&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; *this;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator ++ (&lt;span class="pt"&gt;int&lt;/span&gt; x)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn temp = *this;&lt;tt&gt;
&lt;/tt&gt;  r += &lt;span class="i"&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; temp;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator -- ()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  r -= &lt;span class="i"&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; *this;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;complexn complexn::operator -- (&lt;span class="pt"&gt;int&lt;/span&gt; x)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn temp = *this;&lt;tt&gt;
&lt;/tt&gt;  r -= &lt;span class="i"&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; temp;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Last, we have the 2 &lt;b&gt;friend functions&lt;/b&gt;:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;ostream &amp;amp; operator &amp;lt;&amp;lt; (ostream &amp;amp;os, &lt;span class="r"&gt;const&lt;/span&gt; complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  os &amp;lt;&amp;lt; temp.r &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt; + &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; temp.i &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;i&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; os;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;istream &amp;amp; operator &amp;gt;&amp;gt; (istream &amp;amp;is, complexn &amp;amp;temp)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  is &amp;gt;&amp;gt; temp.r &amp;gt;&amp;gt; temp.i;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; is;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Testing Your program&lt;/h2&gt;
&lt;p&gt;I wrote a fairly good program for testing this &lt;b&gt;complexn&lt;/b&gt; class.&lt;/p&gt;
&lt;p&gt;To test your program copy your program to &lt;b&gt;[name].h&lt;/b&gt; file and in the &lt;b&gt;main.cpp&lt;/b&gt;  file change the header file at the top to match your file.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;45&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;47&lt;tt&gt;
&lt;/tt&gt;48&lt;tt&gt;
&lt;/tt&gt;49&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;50&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;51&lt;tt&gt;
&lt;/tt&gt;52&lt;tt&gt;
&lt;/tt&gt;53&lt;tt&gt;
&lt;/tt&gt;54&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;55&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;56&lt;tt&gt;
&lt;/tt&gt;57&lt;tt&gt;
&lt;/tt&gt;58&lt;tt&gt;
&lt;/tt&gt;59&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;60&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;61&lt;tt&gt;
&lt;/tt&gt;62&lt;tt&gt;
&lt;/tt&gt;63&lt;tt&gt;
&lt;/tt&gt;64&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;65&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;66&lt;tt&gt;
&lt;/tt&gt;67&lt;tt&gt;
&lt;/tt&gt;68&lt;tt&gt;
&lt;/tt&gt;69&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;70&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;71&lt;tt&gt;
&lt;/tt&gt;72&lt;tt&gt;
&lt;/tt&gt;73&lt;tt&gt;
&lt;/tt&gt;74&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;75&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;76&lt;tt&gt;
&lt;/tt&gt;77&lt;tt&gt;
&lt;/tt&gt;78&lt;tt&gt;
&lt;/tt&gt;79&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;80&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;81&lt;tt&gt;
&lt;/tt&gt;82&lt;tt&gt;
&lt;/tt&gt;83&lt;tt&gt;
&lt;/tt&gt;84&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;85&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;86&lt;tt&gt;
&lt;/tt&gt;87&lt;tt&gt;
&lt;/tt&gt;88&lt;tt&gt;
&lt;/tt&gt;89&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;90&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;91&lt;tt&gt;
&lt;/tt&gt;92&lt;tt&gt;
&lt;/tt&gt;93&lt;tt&gt;
&lt;/tt&gt;94&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;95&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;96&lt;tt&gt;
&lt;/tt&gt;97&lt;tt&gt;
&lt;/tt&gt;98&lt;tt&gt;
&lt;/tt&gt;99&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;101&lt;tt&gt;
&lt;/tt&gt;102&lt;tt&gt;
&lt;/tt&gt;103&lt;tt&gt;
&lt;/tt&gt;104&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;105&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;106&lt;tt&gt;
&lt;/tt&gt;107&lt;tt&gt;
&lt;/tt&gt;108&lt;tt&gt;
&lt;/tt&gt;109&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;110&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;111&lt;tt&gt;
&lt;/tt&gt;112&lt;tt&gt;
&lt;/tt&gt;113&lt;tt&gt;
&lt;/tt&gt;114&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;115&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;116&lt;tt&gt;
&lt;/tt&gt;117&lt;tt&gt;
&lt;/tt&gt;118&lt;tt&gt;
&lt;/tt&gt;119&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;120&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;121&lt;tt&gt;
&lt;/tt&gt;122&lt;tt&gt;
&lt;/tt&gt;123&lt;tt&gt;
&lt;/tt&gt;124&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;125&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;126&lt;tt&gt;
&lt;/tt&gt;127&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;quot;yourprogram.h&amp;quot;&lt;/span&gt; &lt;span class="c"&gt;// the name of your comlexn header file goes here&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;using namespace std;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;int&lt;/span&gt; main()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  complexn c1;&lt;tt&gt;
&lt;/tt&gt;  complexn c2(&lt;span class="i"&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  complexn c3(&lt;span class="i"&gt;3&lt;/span&gt;, -&lt;span class="i"&gt;5&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  complexn c4, c5, c6;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Complex Numbers: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Enter values for C1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  cin &amp;gt;&amp;gt; c1;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  You enetered: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Enter values for C2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  cin &amp;gt;&amp;gt; c2;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  You enetered: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Enter values for C3: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  cin &amp;gt;&amp;gt; c3;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  You enetered: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Distances from origin: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1.complexabs() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2.complexabs() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3.complexabs() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Conjugates:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1.complexconj() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2.complexconj() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3.complexconj() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Distances between:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) and C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1.distance(c2) &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) and C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1.distance(c3) &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) and C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2.distance(c3) &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Addition:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) + C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 + c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) + C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 + c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) + C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 + c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Subtraction:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) - C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 - c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) - C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 - c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) - C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 - c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Multiplication:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) * C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 * c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) * C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 * c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) * C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 * c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Division:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) / C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 / c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) / C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 / c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;) / C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 / c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Incrementing:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1++: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1++ &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  ++C1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; ++c1 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2++: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2++ &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  ++C2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; ++c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3++: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3++ &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  ++C3: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; ++c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Decrementing:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1--: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1-- &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  --C1: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; --c1 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2--: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2-- &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  --C2: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; --c2 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3--: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3-- &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  --C3: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; --c3 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3 =  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3   &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  c4 = c1;&lt;tt&gt;
&lt;/tt&gt;  c5 = c2;&lt;tt&gt;
&lt;/tt&gt;  c6 = c3;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Equals:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C4 = C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c4 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C5 = C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c5 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C6 = C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c6 &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  c1 = complexn ( &lt;span class="i"&gt;1&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  c2 = complexn (-&lt;span class="i"&gt;1&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  c3 = complexn (-&lt;span class="i"&gt;1&lt;/span&gt;,-&lt;span class="i"&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  c4 = complexn ( &lt;span class="i"&gt;1&lt;/span&gt;,-&lt;span class="i"&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  c5 = complexn ( &lt;span class="i"&gt;0&lt;/span&gt;, &lt;span class="i"&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  c6 = complexn (-&lt;span class="i"&gt;1&lt;/span&gt;, &lt;span class="i"&gt;0&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Angles:&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C1(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c1.complexangle() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C2(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c2.complexangle() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C3(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c3.complexangle() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C4(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c4 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c4.complexangle() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C5(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c5 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c5.complexangle() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  C6(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c6 &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;): &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; c6.complexangle() &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2009-03-10:52139</id>
    <published>2009-03-10T06:26:00Z</published>
    <updated>2009-03-10T06:29:01Z</updated>
    <category term="development" />
    <category term="php" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2009/3/10/compilation-failed-this-version-of-pcre-is-not-compiled-with-pcre_utf8-support" rel="alternate" type="text/html" />
    <title>Compilation failed: this version of PCRE is not compiled with PCRE_UTF8 support</title>
<content type="html">
            I don't do too much with php these days, and really haven't since I found rails many years ago.  But I figured I would give &lt;a href="http://www.magentocommerce.com/"&gt;magento&lt;/a&gt; a try, just for fun.  Most of it worked, but I continually came across this PCRE error - the full error that I go was:&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;Warning: preg_match_all() [function.preg-match-all]: Compilation failed: this version of PCRE is not compiled with PCRE_UTF8 support at offset 0  ...&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
Ok, loads and loads of research led no where, or at least no where that I was willing to go.  I tried so hard to find a solution that didn't require me recompiling apache ... well no such luck.  I am using slicehost's ubuntu 8.04, so I took the dpkg approach to help make things simple. &lt;br /&gt;&lt;br /&gt;
Well, I am sure you have found out by now that apache comes with its own version of pcre built in (version 5).  This version does not come with UTF-8 support.  The trick is to tell apache to use an external system package of pcre.   This requires the slightest bit of reconfiguring of apache.   &lt;br /&gt;
Initially, my pcre looked like this (notice the version of 5.0...):&lt;br /&gt;
&lt;img src="/assets/2009/3/10/default_apache_pcre.png" /&gt;&lt;br /&gt;
As mentioned earlier this is a pretty good indicator that your pcre is the built-in apache version.  This is not good.&lt;br /&gt;
&lt;br /&gt;
Ok, the solution is not too bad.  Compared to &lt;a href="https://help.ubuntu.com/community/UpgradeApacheHTTPServer"&gt;this article&lt;/a&gt;, which I learned a few things from, it is much simpler.  One thing, you will note in the article is the use of &lt;tt&gt;--with-pcre=/usr&lt;/tt&gt; - this is quite different than the &lt;tt&gt;--with-pcre=yes&lt;/tt&gt; that apache2 comes configured with from gusty.  &lt;br /&gt;
So the solution is to make that change by doing this:&lt;br /&gt;
1) Get the source code:&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;mkdir apache_src&lt;tt&gt;
&lt;/tt&gt;cd apache_src/&lt;tt&gt;
&lt;/tt&gt;apt-get source apache2&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

2) Modify the configuration (specifically the AP2_COMMON_CONFARGS in debian/rules)
Once the source is downloaded you should have several files and a directory.  Edit the debian/rules files from within the apache directory.  The only change that is needed is to find the line that says --with-pcre=yes and change it to say --with-pcre=/usr.&lt;br /&gt;
This, of course, assumes that you installed pcre and it lives in /usr/(bin,lib ...):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;vi apache2-2.2.4/debian/rules # make those changes&lt;tt&gt;
&lt;/tt&gt;./apache2-2.2.4/debian/rules&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

3) Install build dependencies for apache:&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;sudo apt-get build-dep apache2&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

4) Now build the package:&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;cd apache2-2.2.4/&lt;tt&gt;
&lt;/tt&gt;# you may need to install fakeroot for this:&lt;tt&gt;
&lt;/tt&gt;sudo apt-get install fakeroot &lt;tt&gt;
&lt;/tt&gt;dpkg-buildpackage -rfakeroot -uc -b&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

5) Install the new apache package:&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;cd ..&lt;tt&gt;
&lt;/tt&gt;sudo dpkg -i apache2_2.2.4-3ubuntu0.1_all.deb&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;br /&gt;
Voila, now look what I have:&lt;br /&gt;
&lt;img src="/assets/2009/3/10/reconfigured_apache_pcre.png" /&gt;&lt;br /&gt;
That should be it. &lt;br /&gt;
&lt;br /&gt;
Good luck.
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>slaive</name>
    </author>
    <id>tag:pullmonkey.com,2009-02-23:51930</id>
    <published>2009-02-23T04:13:00Z</published>
    <updated>2009-03-01T19:04:03Z</updated>
    <category term="C / C++" />
    <category term="development" />
    <category term="projects" />
    <category term="tutorials" />
    <category term="c++" />
    <category term="ece231" />
    <category term="prog" />
    <link href="http://pullmonkey.com/2009/2/23/ece231-spring-2009-programming-assignment-2" rel="alternate" type="text/html" />
    <title>ECE231 - Spring 2009 - Programming Assignment 2</title>
<content type="html">
            &lt;p&gt;This is a step-by-step tutorial for this assignment and an explanation of the basics of how it works for those that are having a difficult time understanding or just are stuck somewhere. To &lt;a href="http://www.unm.edu/~speralta/progs/ece231assn2.htm"&gt;view the assignment click here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So for this assignment we are going to be doing a lot of math calculations so we are going to need the include the both the &lt;b&gt;iostream&lt;/b&gt; and the &lt;b&gt;cmath&lt;/b&gt; libraries. We will also need the value of &lt;b&gt;pi&lt;/b&gt;.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#define&lt;/span&gt; PI &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.14159&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;or&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;double&lt;/span&gt; PI = &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.14159&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Defining the Coordinate Class&lt;/h2&gt;
&lt;p&gt;For the &lt;b&gt;coordinate&lt;/b&gt; class we need 2 private variables &lt;b&gt;&lt;i&gt;x&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt;, 3 &lt;b&gt;constructors&lt;/b&gt;, and 11 &lt;b&gt;member functions&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;The way you do the constructors and member functions can be done 2 different ways. You can either do them inside the class, or you can define them inside the class, like you do prototypes, and then have the actual functions at the bottom of your code. I like to define them and then put the functions at the bottom, making the code a little bit easier to read so that is the way that I'll show you, but if you want to do it the other way then just do it how you normally would with a regular function.&lt;/p&gt;
&lt;p&gt;So here is what your class should look like (keep in mind that this all goes at the top &lt;b&gt;before the main function&lt;/b&gt;):&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;class coordinate&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;private:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; x;  &lt;span class="c"&gt;// x value of the coordinate point&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; y;  &lt;span class="c"&gt;// y value of the coordinate point&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="la"&gt;public:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    coordinate(); &lt;span class="c"&gt;// 1st constructor requiring that no arguments are passed&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    coordinate(&lt;span class="pt"&gt;double&lt;/span&gt; ); &lt;span class="c"&gt;// 2nd constructor requiring that only 1 argument is passed&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    coordinate(&lt;span class="pt"&gt;double&lt;/span&gt; , &lt;span class="pt"&gt;double&lt;/span&gt; ); &lt;span class="c"&gt;// 3rd constructor requiring that 2 arguments are passed&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; set(&lt;span class="pt"&gt;double&lt;/span&gt; , &lt;span class="pt"&gt;double&lt;/span&gt; ); &lt;span class="c"&gt;// sets both values and requires 2 arguments to be passed&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; setx(&lt;span class="pt"&gt;double&lt;/span&gt; ); &lt;span class="c"&gt;// sets x value and requires 1 argument to be passed&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; sety(&lt;span class="pt"&gt;double&lt;/span&gt; ); &lt;span class="c"&gt;// sets y value and requires 1 argument to be passed&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; read(); &lt;span class="c"&gt;// allows user to input both x and y values &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; print(); &lt;span class="c"&gt;// prints out the coordinate point in &amp;quot;(x, y)&amp;quot; form&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; distancezero(); &lt;span class="c"&gt;// calculates distance of point from zero and returns the value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; distancetwo(coordinate ); &lt;span class="c"&gt;// calculates distance between 2 points (current instance and coordinate value passed) and returns the value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; ranglezero(); &lt;span class="c"&gt;// calculates the angle of the coordinate in radians and returns the value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;double&lt;/span&gt; danglezero(); &lt;span class="c"&gt;// calculates the angle of the coordinate in degrees and returns the value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;int&lt;/span&gt; quadrant(); &lt;span class="c"&gt;// find what quadrant the coordinate is in and returns the value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="pt"&gt;void&lt;/span&gt; midpoint(coordinate ); &lt;span class="c"&gt;// calculates the midpoint between 2 points (current instance and coordinate value passed) and prints the value as a coordinate&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;};&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;h2&gt;Writing the Actual Functions for the Coordinate Class&lt;/h2&gt;
&lt;p&gt;Since we are not actually writing the functions in the same place we are doing the class we will write them at the bottom &lt;b&gt;after the main function&lt;/b&gt;. However, to do this we will need a little more than what we would with regular functions. For &lt;b&gt;member functions&lt;/b&gt; we have to define what class the function is actually a member of. To do this we have to do &lt;b&gt;coordinate::[function]()&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;For example, here are the 3 constructors for the &lt;b&gt;&lt;i&gt;coordinate&lt;/i&gt;&lt;/b&gt; class:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and sets x and y to 0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;coordinate::coordinate()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  x = y = &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;} &lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes 1 argument and sets x and y to that value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;coordinate::coordinate(&lt;span class="pt"&gt;double&lt;/span&gt; a)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  x = y = a;&lt;tt&gt;
&lt;/tt&gt;} &lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes 2 arguments and sets the corresponding x and y to those values&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;coordinate::coordinate(&lt;span class="pt"&gt;double&lt;/span&gt; a, &lt;span class="pt"&gt;double&lt;/span&gt; b)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  x = a;&lt;tt&gt;
&lt;/tt&gt;  y = b;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we have the &lt;b&gt;member functions&lt;/b&gt;. The first 3 are the set functions. These allow the user to set the values of either the &lt;b&gt;&lt;i&gt;x&lt;/i&gt;&lt;/b&gt; or the &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; or both together.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// take 2 arguments and sets the corresponding x and y to those values&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; coordinate::set(&lt;span class="pt"&gt;double&lt;/span&gt; a, &lt;span class="pt"&gt;double&lt;/span&gt; b)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  x = a;&lt;tt&gt;
&lt;/tt&gt;  y = b;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes 1 argument and sets the x to that value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; coordinate::setx(&lt;span class="pt"&gt;double&lt;/span&gt; a)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  x = a;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes 1 argument and sets the y to that value&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; coordinate::sety(&lt;span class="pt"&gt;double&lt;/span&gt; b)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  y = b;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, is the &lt;b&gt;read&lt;/b&gt; and &lt;b&gt;print&lt;/b&gt; functions. All we want the read to do is to do a &lt;b&gt;cin&lt;/b&gt; of the 2 values (&lt;b&gt;&lt;i&gt;x&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt;). The &lt;b&gt;print&lt;/b&gt; is just the opposite. All it does is do a &lt;b&gt;cout&lt;/b&gt; of the &lt;b&gt;&lt;i&gt;x&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; values in the &lt;b&gt;(&lt;i&gt;x&lt;/i&gt;, &lt;i&gt;y&lt;/i&gt;)&lt;/b&gt; format.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and reads in the x and y values from the screen&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; coordinate::read()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  cin &amp;gt;&amp;gt; x &amp;gt;&amp;gt; y;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and prints the x and y values in (x, y) format&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; coordinate::print()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;, &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; y &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we have the distance functions. &lt;b&gt;distanczero&lt;/b&gt; calculates the distance of the &lt;b&gt;current instance&lt;/b&gt; coordinate from 0. &lt;b&gt;distancetwo&lt;/b&gt; calculates the distance between 2 points (the &lt;b&gt;current instance&lt;/b&gt; and the coordinate passed in).&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and returns the distance of the current instance from zero&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; coordinate::distancezero()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; sqrt(x * x + y * y);&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// take 1 argument and calculates the distance between them&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; coordinate::distancetwo(coordinate pt)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; sqrt(pow(x - pt.x, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;) + pow(y - pt.y, &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;));&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we have the angle functions. &lt;b&gt;ranglezero&lt;/b&gt; uses the function in the math library &lt;b&gt;atan()&lt;/b&gt;(arc tangent) to find the angle in radians from the positive x axis. &lt;b&gt;danglezero&lt;/b&gt; does the same thing but converts the value from radians to degrees. To convert from radians to degrees you multiply the value by 180 / pi&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and returns the angle of the coordinate from the positive x axis in radians&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; coordinate::ranglezero()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; angle; &lt;span class="c"&gt;// angle of coordinate from positive x axis&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x == &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="c"&gt;// if x == 0 then you will get a domain error so compute angle manually&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(y &amp;gt; &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="r"&gt;return&lt;/span&gt; PI / &lt;span class="i"&gt;2&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(y &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="r"&gt;return&lt;/span&gt; -PI / &lt;span class="i"&gt;2&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(y == &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  angle = atan(y / x);&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt; and y &amp;gt;= &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; PI - abs(angle);&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt; and y &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; -(PI - abs(angle));&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; angle;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;// takes no arguments and returns the angle of the coordinate from the positive x axis in degrees&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; coordinate::danglezero()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; angle; &lt;span class="c"&gt;// angle of coordinate from positive x axis&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x == &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="c"&gt;// if x == 0 then you will get a domain error so compute angle manually&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(y &amp;gt; &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;90&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(y &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="r"&gt;return&lt;/span&gt; -&lt;span class="i"&gt;90&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(y == &lt;span class="i"&gt;0&lt;/span&gt;) &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  angle = atan(y / x) * &lt;span class="i"&gt;180&lt;/span&gt; / PI;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt; and y &amp;gt;= &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;180&lt;/span&gt; - abs(angle);&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt; and y &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; -(&lt;span class="i"&gt;180&lt;/span&gt; - abs(angle));&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; angle;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we have the &lt;b&gt;quadrant&lt;/b&gt; function. This looks at whether the &lt;b&gt;&lt;i&gt;x&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; values are positive or negative to determine which quadrant the coordinate is in. It will return the number of the quadrant as an integer 1-4 and 0 if the coordinate is (0, 0)&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;int&lt;/span&gt; coordinate::quadrant()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;gt; &lt;span class="i"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; y &amp;gt;= &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;1&lt;/span&gt;; &lt;span class="c"&gt;// return quadrant 1&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;lt;= &lt;span class="i"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; y &amp;gt; &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;2&lt;/span&gt;; &lt;span class="c"&gt;// return quadrant 2&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; y &amp;lt;= &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;3&lt;/span&gt;; &lt;span class="c"&gt;// return quadrant 3&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(x &amp;gt;= &lt;span class="i"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; y &amp;lt; &lt;span class="i"&gt;0&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;4&lt;/span&gt;; &lt;span class="c"&gt;// return quadrant 4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;0&lt;/span&gt;;   &lt;span class="c"&gt;// return 0 if point is (0, 0)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Last, we have the &lt;b&gt;midpoint&lt;/b&gt; function. you will need to pass this function a coordinate instance and it will calculate the midpoint between the &lt;b&gt;current instance&lt;/b&gt; and the &lt;b&gt;passed instance&lt;/b&gt; and print the coordinate instance.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;void&lt;/span&gt; coordinate::midpoint(coordinate pt)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  coordinate np; &lt;span class="c"&gt;// new coordinate point&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  np.x = (x + pt.x) / &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  np.y = (y + pt.y) / &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;  np.print();&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Now all you have to do is test each constructor and member function to make sure that everything is working properly.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2009-02-11:51808</id>
    <published>2009-02-11T20:27:00Z</published>
    <updated>2009-04-02T19:17:55Z</updated>
    <category term="development" />
    <category term="rails" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2009/2/11/blog-plugin-tutorial-for-ruby-on-rails" rel="alternate" type="text/html" />
    <title>Blog plugin tutorial for Ruby on Rails</title>
<content type="html">
            &lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Added the plugin to github - &lt;a href="http://github.com/pullmonkey/simple_blog/tree/master"&gt;simple_blog&lt;/a&gt;.  It is not production ready or really all the usable quite yet.&lt;br /&gt;
&lt;br /&gt;
Ok, so this a rant and I am sorry for that - but as simple as it is, I have been looking for a blog plugin lately.  The problem with the plugins I find is that I don't want to have to deal with the engines plugin or have the controllers, models, views, etc ... all extracted into my applications code.  I want it all external (hence a plugin) but let it be minimally configurable.&lt;br /&gt;
&lt;br /&gt;
So in my recent search for a blog plugin for rails, I came across two that look very useful, but each with their flaws:&lt;br /&gt;
1) &lt;a href="http://github.com/vigetlabs/bloget/tree/master"&gt;bloget&lt;/a&gt; - Everything is extracted to my code space.  Why?  Yes, I realize that it is most likely because I will want to override things, but get out of my space and keep to yourself!  :) &lt;br /&gt;
Provide me a way to override things that I would need to (there really shouldn't be too many), after all it is ruby.&lt;br /&gt;
2) &lt;a href="http://www.williambharding.com/blog/rails/bloggity-an-evolving-rails-blog-plugin/"&gt;bloggity&lt;/a&gt; - Uses the engines plugin! I have nothing against the engines plugin (I think it is well written and documented) but for a freaking blog plugin?!?  Why? &lt;br /&gt;
&lt;br /&gt;
Is there a third option?&lt;br /&gt;
Glad you asked - yes, there is a third option - I hate to say it, but do it right!  There's your third option.&lt;br /&gt;
Ok, but really, if there is a third option (a third plugin), I would love to hear about it.&lt;br /&gt;
&lt;br /&gt;
Ok, so all that to lead up to a little plugin tutorial?  Well, it got your attention didn't it?&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Starting from scratch&lt;/h1&gt;
Ok, I guess I will start from scratch.  So let's get started.&lt;br /&gt;
&lt;h2&gt;Creating a plugin&lt;/h2&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ./script/generate plugin simple_blog&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/lib&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/tasks&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/test&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/&lt;span class="co"&gt;README&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/&lt;span class="co"&gt;MIT&lt;/span&gt;-&lt;span class="co"&gt;LICENSE&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/&lt;span class="co"&gt;Rakefile&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/init.rb&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/install.rb&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/uninstall.rb&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/lib/simple_blog.rb&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/tasks/simple_blog_tasks.rake&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/test/simple_blog_test.rb&lt;tt&gt;
&lt;/tt&gt;      create  vendor/plugins/simple_blog/test/test_helper.rb&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h2&gt;Create the app directories for your plugin&lt;/h2&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; cd vendor/plugins/simple_blog/  &lt;span class="c"&gt;# pretty important&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ls&lt;tt&gt;
&lt;/tt&gt;init.rb  install.rb  lib  &lt;span class="co"&gt;MIT&lt;/span&gt;-&lt;span class="co"&gt;LICENSE&lt;/span&gt;  &lt;span class="co"&gt;Rakefile&lt;/span&gt;  &lt;span class="co"&gt;README&lt;/span&gt;  tasks  test  uninstall.rb&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; mkdir app&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; mkdir -p app/models&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; mkdir -p app/controllers&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; mkdir -p app/views&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; mkdir -p app/helpers&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ls app/&lt;tt&gt;
&lt;/tt&gt;controllers  helpers  models  views&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Well that was easy, so let's move on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Models, Views, Controllers and Helpers - Living as one in my plugin&lt;/h1&gt;
&lt;h2&gt;Models&lt;/h2&gt;
Ok, so we have a clear path for where our models, controllers, views, and helpers should live, right?&lt;br /&gt;
For simplicity, let's just have a post and comment model - you have all seen this a billion times.&lt;br /&gt;
&lt;h3&gt;Models: vendor/plugins/simple_blog/app/models/post.rb&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Post&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ActiveRecord&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  has_many &lt;span class="sy"&gt;:comments&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Models: vendor/plugins/simple_blog/app/models/comment.rb&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Comment&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ActiveRecord&lt;/span&gt;::&lt;span class="co"&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  belongs_to &lt;span class="sy"&gt;:post&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

And there you have it.&lt;br /&gt;
So what do you do to tell your rails application about your models?&lt;br /&gt;
Simple - inside vendor/plugins/simple_blog/init.rb - add these lines
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;model_path = &lt;span class="co"&gt;File&lt;/span&gt;.join(directory, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;models&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class="gv"&gt;$LOAD_PATH&lt;/span&gt; &amp;lt;&amp;lt; model_path&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;ActiveSupport&lt;/span&gt;::&lt;span class="co"&gt;Dependencies&lt;/span&gt;.load_paths &amp;lt;&amp;lt; model_path&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Ok, so let's test it out.&lt;/h3&gt;
Step 1 - we will need some default migrations for the model to use.&lt;br /&gt;
Post migration:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ./script/generate migration post&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# This is what mine looks like&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;Post&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ActiveRecord&lt;/span&gt;::&lt;span class="co"&gt;Migration&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="pc"&gt;self&lt;/span&gt;.up&lt;tt&gt;
&lt;/tt&gt;    create_table &lt;span class="sy"&gt;:posts&lt;/span&gt; &lt;span class="r"&gt;do&lt;/span&gt; |t|&lt;tt&gt;
&lt;/tt&gt;      t.string &lt;span class="sy"&gt;:subject&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      t.text   &lt;span class="sy"&gt;:body&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      t.timestamps&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="pc"&gt;self&lt;/span&gt;.down&lt;tt&gt;
&lt;/tt&gt;    drop_table &lt;span class="sy"&gt;:posts&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

And then the comment migration:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ./script/generate migration comment&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# This is what mine looks like&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="pc"&gt;self&lt;/span&gt;.up&lt;tt&gt;
&lt;/tt&gt;    create_table &lt;span class="sy"&gt;:comments&lt;/span&gt; &lt;span class="r"&gt;do&lt;/span&gt; |t|&lt;tt&gt;
&lt;/tt&gt;      t.string &lt;span class="sy"&gt;:username&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      t.text   &lt;span class="sy"&gt;:body&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      t.references &lt;span class="sy"&gt;:post&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      t.timestamps&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="pc"&gt;self&lt;/span&gt;.down&lt;tt&gt;
&lt;/tt&gt;    drop_table &lt;span class="sy"&gt;:comments&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Run the migrations:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; rake db&lt;span class="sy"&gt;:migrate&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

That was all just setup - now for the actual testing:&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ./script/console&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;Loading&lt;/span&gt; development environment (&lt;span class="co"&gt;Rails&lt;/span&gt; &lt;span class="fl"&gt;2.2&lt;/span&gt;.&lt;span class="i"&gt;2&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; &lt;span class="co"&gt;Comment&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class="c"&gt;#&amp;lt;Comment id: nil, username: nil, body: nil, post_id: nil, created_at: nil, updated_at: nil&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; &lt;span class="co"&gt;Post&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class="c"&gt;#&amp;lt;Post id: nil, subject: nil, body: nil, created_at: nil, updated_at: nil&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; p = &lt;span class="co"&gt;Post&lt;/span&gt;.create(&lt;span class="sy"&gt;:subject&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Test 1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:body&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;My Body&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class="c"&gt;#&amp;lt;Post id: 1, subject: &amp;quot;Test 1&amp;quot;, body: &amp;quot;My Body&amp;quot;, created_at: &amp;quot;2009-02-11 19:09:25&amp;quot;, updated_at: &amp;quot;2009-02-11 19:09:25&amp;quot;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; p.body&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;My Body&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; p.subject&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Test 1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; p.new_record?&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class="pc"&gt;false&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; p.comments&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; []&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; c = &lt;span class="co"&gt;Comment&lt;/span&gt;.create(&lt;span class="sy"&gt;:username&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;pullmonkey&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:body&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;this is simple&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; &lt;span class="c"&gt;#&amp;lt;Comment id: 1, username: &amp;quot;pullmonkey&amp;quot;, body: &amp;quot;this is simple&amp;quot;, post_id: nil, created_at: &amp;quot;2009-02-11 19:10:01&amp;quot;, updated_at: &amp;quot;2009-02-11 19:10:01&amp;quot;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; p.comments &amp;lt;&amp;lt; c&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; [&lt;span class="c"&gt;#&amp;lt;Comment id: 1, username: &amp;quot;pullmonkey&amp;quot;, body: &amp;quot;this is simple&amp;quot;, post_id: 1, created_at: &amp;quot;2009-02-11 19:10:01&amp;quot;, updated_at: &amp;quot;2009-02-11 19:10:06&amp;quot;&amp;gt;]&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; p.comments&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; [&lt;span class="c"&gt;#&amp;lt;Comment id: 1, username: &amp;quot;pullmonkey&amp;quot;, body: &amp;quot;this is simple&amp;quot;, post_id: 1, created_at: &amp;quot;2009-02-11 19:10:01&amp;quot;, updated_at: &amp;quot;2009-02-11 19:10:06&amp;quot;&amp;gt;]&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;gt;&amp;gt; &lt;span class="co"&gt;Post&lt;/span&gt;.first.comments&lt;tt&gt;
&lt;/tt&gt;=&amp;gt; [&lt;span class="c"&gt;#&amp;lt;Comment id: 1, username: &amp;quot;pullmonkey&amp;quot;, body: &amp;quot;this is simple&amp;quot;, post_id: 1, created_at: &amp;quot;2009-02-11 19:10:01&amp;quot;, updated_at: &amp;quot;2009-02-11 19:10:06&amp;quot;&amp;gt;]&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

That's probably good enough.  We have a working model and relationships.  The best part is that all the code is still in the plugin.&lt;br /&gt;
What does my code space contain?&lt;br /&gt;  
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; ls -l app/**&lt;tt&gt;
&lt;/tt&gt;app/controllers:&lt;tt&gt;
&lt;/tt&gt;total &lt;span class="i"&gt;4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;-rw-rw-r--  &lt;span class="i"&gt;1&lt;/span&gt; pullmonkey pullmonkey &lt;span class="i"&gt;720&lt;/span&gt; &lt;span class="co"&gt;Feb&lt;/span&gt; &lt;span class="i"&gt;11&lt;/span&gt; &lt;span class="i"&gt;11&lt;/span&gt;:&lt;span class="i"&gt;00&lt;/span&gt; application.rb&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;app/helpers:&lt;tt&gt;
&lt;/tt&gt;total &lt;span class="i"&gt;4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;-rw-rw-r--  &lt;span class="i"&gt;1&lt;/span&gt; pullmonkey pullmonkey &lt;span class="i"&gt;115&lt;/span&gt; &lt;span class="co"&gt;Feb&lt;/span&gt; &lt;span class="i"&gt;11&lt;/span&gt; &lt;span class="i"&gt;11&lt;/span&gt;:&lt;span class="i"&gt;00&lt;/span&gt; application_helper.rb&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;app/models:&lt;tt&gt;
&lt;/tt&gt;total &lt;span class="i"&gt;0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;app/views:&lt;tt&gt;
&lt;/tt&gt;total &lt;span class="i"&gt;4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;drwxrwxr-x  &lt;span class="i"&gt;2&lt;/span&gt; pullmonkey pullmonkey &lt;span class="i"&gt;4096&lt;/span&gt; &lt;span class="co"&gt;Feb&lt;/span&gt; &lt;span class="i"&gt;11&lt;/span&gt; &lt;span class="i"&gt;11&lt;/span&gt;:&lt;span class="i"&gt;00&lt;/span&gt; layouts&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;br /&gt;
Just the defaults - neat :)&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Controllers&lt;/h2&gt;
In much the same way as models, we can easily use controllers from our plugin.  No extracting, no engines plugin.&lt;br /&gt;
&lt;h3&gt;Controllers: vendor/plugins/simple_blog/app/controllers/posts_controller.rb&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;PostsController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@posts&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.all&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;show&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@post&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.find(params[&lt;span class="sy"&gt;:id&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;new&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@post&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;create&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt; &lt;span class="iv"&gt;@post&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.create(params[&lt;span class="sy"&gt;:post&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;      flash[&lt;span class="sy"&gt;:notice&lt;/span&gt;] = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Post Created&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      redirect_to &lt;span class="sy"&gt;:action&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      flash[&lt;span class="sy"&gt;:error&lt;/span&gt;] = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Post Not Created&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      render &lt;span class="sy"&gt;:action&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="c"&gt;#.... more code&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Controllers: vendor/plugins/simple_blog/app/controllers/comments_controller.rb&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;CommentsController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@comments&lt;/span&gt; = &lt;span class="co"&gt;Comment&lt;/span&gt;.find_all_by_post_id(params[&lt;span class="sy"&gt;:post_id&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="c"&gt;#.... more code&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Now, to register the controllers, add the following to vendor/plugins/simple_blog/init.rb:&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;controller_path = &lt;span class="co"&gt;File&lt;/span&gt;.join(directory, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;controllers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class="gv"&gt;$LOAD_PATH&lt;/span&gt; &amp;lt;&amp;lt; controller_path&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;ActiveSupport&lt;/span&gt;::&lt;span class="co"&gt;Dependencies&lt;/span&gt;.load_paths &amp;lt;&amp;lt; controller_path&lt;tt&gt;
&lt;/tt&gt;config.controller_paths &amp;lt;&amp;lt; controller_path&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Ok, before we can really test this we will need to do the views, so keep going.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;h2&gt;Views&lt;/h2&gt;
Create your view directories:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; mkdir -p app/views/posts&lt;tt&gt;
&lt;/tt&gt;pullmonkey&lt;span class="er"&gt;$&lt;/span&gt; mkdir -p app/views/comments&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Create your views:
For this example, I will just create one, then we will test it.
&lt;h3&gt;Views: vendor/plugins/simple_blog/app/views/posts/index.html.erb&lt;/h3&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&amp;lt;h1&amp;gt;&lt;span class="co"&gt;Posts&lt;/span&gt;&amp;lt;&lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;h1&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;% @posts.each do |post| -%&amp;gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;h2&amp;gt;&amp;lt;%= h post.subject %&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;/span&gt;h2&amp;gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;%= post.body &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;h3&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="co"&gt;Comments&lt;/span&gt;&amp;lt;&lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;h3&amp;gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;% post.comments.each do |comment| -%&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;b&amp;gt;by &amp;lt;%= comment.username %&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;/span&gt;b&amp;gt;&amp;lt;br/&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= comment.body &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&amp;lt;br/&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;br/&amp;gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;% &lt;span class="r"&gt;end&lt;/span&gt; -&lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;% end -%&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Append your view paths:&lt;/h3&gt;
If you don't do this next step, you will very likely see an error message like this:&lt;br /&gt;
Missing template posts/index.erb in view path /home/pullmonkey/rails_projects/simple_blog/app/views:&lt;br /&gt;&lt;br /&gt;
So let's add it. &lt;br /&gt;
There are at least two ways to do this.  1) Added to your controllers individually or 2) Add to application controller globally.&lt;br /&gt;
I prefer the less obtrusive, so let's go with number 1.&lt;br /&gt;
For this test, we will just work with the posts controller, so open it up again and add this line:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="pc"&gt;self&lt;/span&gt;.append_view_path(&lt;span class="co"&gt;File&lt;/span&gt;.join(&lt;span class="co"&gt;File&lt;/span&gt;.dirname(&lt;span class="pc"&gt;__FILE__&lt;/span&gt;), &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;..&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;views&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;))&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

So your file should look like this now:
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;PostsController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pc"&gt;self&lt;/span&gt;.append_view_path(&lt;span class="co"&gt;File&lt;/span&gt;.join(&lt;span class="co"&gt;File&lt;/span&gt;.dirname(&lt;span class="pc"&gt;__FILE__&lt;/span&gt;), &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;..&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;views&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;))&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@posts&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.all&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;show&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@post&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.find(params[&lt;span class="sy"&gt;:id&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;new&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@post&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;create&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt; &lt;span class="iv"&gt;@post&lt;/span&gt; = &lt;span class="co"&gt;Post&lt;/span&gt;.create(params[&lt;span class="sy"&gt;:post&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;      flash[&lt;span class="sy"&gt;:notice&lt;/span&gt;] = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Post Created&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      redirect_to &lt;span class="sy"&gt;:action&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      flash[&lt;span class="sy"&gt;:error&lt;/span&gt;] = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Post Not Created&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      render &lt;span class="sy"&gt;:action&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;h3&gt;Time to test&lt;/h3&gt;
Start your web server - ./script/server&lt;br /&gt;
Browse to http://localhost:3000/posts&lt;br /&gt;
You should see the post we created up above via Post.create(...) and its associated comment that we also created above.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note:&lt;/b&gt;Feel free to overwrite any of the views.  This can be done simply for the posts index view by creating the same file under RAILS_ROOT/app/views/posts/index.html.erb and doing what you'd like.
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;That's it for part 1&lt;/h1&gt;
Ok, so that's part 1.  The goal was to keep everything external and I think we succeeded (aside from migrations).&lt;br /&gt;
No offense to those that use engines or extract files into one's application's space, we all have our ways - the above is what I prefer.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
Part 2 will consist mainly of filling this out a bit more and further discussion on adding helpers, routes and migrations to your plugin without interfering in the application's code space.&lt;br /&gt;
&lt;br /&gt;
As always, have fun and good luck!&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>slaive</name>
    </author>
    <id>tag:pullmonkey.com,2009-02-05:51727</id>
    <published>2009-02-05T19:45:00Z</published>
    <updated>2009-02-23T04:46:12Z</updated>
    <category term="C / C++" />
    <category term="development" />
    <category term="projects" />
    <category term="tutorials" />
    <category term="c++" />
    <category term="ece231" />
    <link href="http://pullmonkey.com/2009/2/5/ece231-spring-2009-programming-assignment-1" rel="alternate" type="text/html" />
    <title>ECE231 - Spring 2009 - Programming Assignment 1</title>
<content type="html">
            This is a step-by-step tutorial for this assignment and an explanation of the basics of how it works for those that are having a difficult time understanding or just are stuck somewhere. To &lt;a href="http://www.unm.edu/~speralta/progs/ece231assn1.htm"&gt;view the assignment click here.&lt;/a&gt;

&lt;h1&gt;Part A&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;1. Create a structure (called point) that includes a time and y value (both doubles).&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This is very simple using the &lt;b&gt;typedef struct&lt;/b&gt; and listing your variables.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;typedef&lt;/span&gt; &lt;span class="r"&gt;struct&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; time;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; y;&lt;tt&gt;
&lt;/tt&gt;} point;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;&lt;b&gt;2. Create a main program that has an array of 40 points (or structures), keeps track of the number of values in the array and has variables for each of the values needed to calculate above.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;In the main program we will need an array of points &lt;b&gt;&lt;i&gt;p&lt;/i&gt;&lt;/b&gt;, an integer with the total number of points &lt;b&gt;&lt;i&gt;values&lt;/i&gt;&lt;/b&gt;, and 4 double variables, one for each of the functions (I used &lt;b&gt;&lt;i&gt;vert_shift&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;amp&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;freq&lt;/i&gt;&lt;/b&gt;, and &lt;b&gt;&lt;i&gt;phase_shift&lt;/i&gt;&lt;/b&gt;).&lt;/p&gt;
&lt;p&gt;Then you will need to call each function and for testing I printed each value out to make sure everything was coming in right. It is short, simple, and to the point like all programming should be. Your main should look something like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;int&lt;/span&gt; main()&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  point p[&lt;span class="i"&gt;40&lt;/span&gt;];          &lt;span class="c"&gt;// array of points&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; values = &lt;span class="i"&gt;0&lt;/span&gt;;       &lt;span class="c"&gt;// total number of values in the points array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; vert_shift=&lt;span class="i"&gt;0&lt;/span&gt;;  &lt;span class="c"&gt;// vertical shift&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; amp=&lt;span class="i"&gt;0&lt;/span&gt;;         &lt;span class="c"&gt;// amplitude&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; freq=&lt;span class="i"&gt;0&lt;/span&gt;;        &lt;span class="c"&gt;// frequency&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; phase_shift=&lt;span class="i"&gt;0&lt;/span&gt;; &lt;span class="c"&gt;// phase shift&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  values = read_data(p);&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Values: &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;(lcv=&lt;span class="i"&gt;0&lt;/span&gt;; lcv &amp;lt; values; lcv++)&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt;  p[lcv].time &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; p[lcv].y &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Total Number of values = &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; values &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  vert_shift = vertical(p, values);&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Vertical shift = &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; vert_shift &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  amp = amplitude(p, values);&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Amplitude = &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; amp &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  freq = frequency(p, values);&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Frequency = &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; freq &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  phase_shift = pshift(p, values);&lt;tt&gt;
&lt;/tt&gt;  cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;Phase Shift = &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; phase_shift &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="i"&gt;0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;&lt;b&gt;3. The main program should then call the read_data function.  This function will have one argument (the array of points - or structures - which will be passed as a pointer to the function) and will return the number of values in the array.  It should read the data from the data file using a pointer and the arrow (-&gt;) operator.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;First, we are going to be reading from a file in this function so we are going to need to include the &lt;b&gt;fstream&lt;/b&gt; library.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#inlcude&lt;/span&gt; &amp;lt;fstream&amp;gt; &lt;span class="c"&gt;// reading from file&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next, we need to create the prototype for this function called &lt;b&gt;read_data&lt;/b&gt;. This will go above the main. The &lt;b&gt;read_data&lt;/b&gt; function will need the array of points and will return the total number of points as an integer. So it should look like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;int&lt;/span&gt; read_data(point *);&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Now below the main we can create our function and lets call the array of points &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt;. In this function we will need 2 more variables, an integer (&lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt;) for counting the number of points that we read from the file and an ifstream variable (&lt;b&gt;&lt;i&gt;f&lt;/i&gt;&lt;/b&gt;) for opening and closing the file.&lt;/p&gt;
&lt;p&gt;First, we need to try to open the file using &lt;b&gt;f.open("sp09prog1.txt")&lt;/b&gt;. Next, we need to test to make sure the file was opened and that we can read from it and if not then print out error message and exit. If the file was opened then we need to read in the values into the point array and count the number of points using the &lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt; integer variable. We do this until we read the end of the file and we find out if we are at the end of the file with &lt;b&gt;f.eof()&lt;/b&gt;. Finally, we will want to return the &lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt;. It should look like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;int&lt;/span&gt; read_data(point *a)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  ifstream f;  &lt;span class="c"&gt;// file streaming variable&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; total=&lt;span class="i"&gt;0&lt;/span&gt;; &lt;span class="c"&gt;// counts the total number of points in file&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  f.open(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;sp09prog1.txt&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;if&lt;/span&gt;(f.fail())&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    cout &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;ERROR: File could not be opened&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &amp;lt;&amp;lt; endl;&lt;tt&gt;
&lt;/tt&gt;    exit(&lt;span class="i"&gt;1&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;while&lt;/span&gt;(!f.eof())&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    f &amp;gt;&amp;gt; a-&amp;gt;time &amp;gt;&amp;gt; a-&amp;gt;y;&lt;tt&gt;
&lt;/tt&gt;    total++;&lt;tt&gt;
&lt;/tt&gt;    a++;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; total - &lt;span class="i"&gt;1&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Notice that we return &lt;b&gt;total - 1&lt;/b&gt;. This is because we increment &lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt; and then we find out it is the end of the file. So we incremented one too many times so we need to subtract 1 before returning it.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;4. Main should then call the vertical function to calculate the vertical shift.  This function has two arguments (the array of points - passed as a pointer - and the number of values in the array).  It will calculate the vertical shift by finding the average of the maximum and minimum y-values.  You will need to search through the array of points to find these max and min values.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;5. Next, main will call the amplitude function to calculate the amplitude.  This function has two arguments (the array of points - passed as a pointer - and the number of values in the array; you must also use the arrow operator in this function) and will return the amplitude.  To find the amplitude, you need to calculate half the difference between the maximum and minimum values of the y-values (you will need to search through the array for the maximum and minimum values again).&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The functions are both almost identical. The only difference is the equation at the end so we will do them at the same time.&lt;/p&gt;
&lt;p&gt;First, we will create the prototypes. Both functions take the array of points and the integer total number of points and they both return a double. So the prototypes should look like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; vertical(point *, &lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; amplitude(point *, &lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;So lets call the point array &lt;b&gt;&lt;i&gt;p&lt;/i&gt;&lt;/b&gt; and the integer &lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;To find the max and min values we need to create 2 double variables (&lt;b&gt;&lt;i&gt;max&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;min&lt;/i&gt;&lt;/b&gt;) and an integer (&lt;b&gt;&lt;i&gt;lcv&lt;/i&gt;&lt;/b&gt;) that we will use for the loop.&lt;/p&gt;
&lt;p&gt;Next we will need to set both &lt;b&gt;&lt;i&gt;max&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;min&lt;/i&gt;&lt;/b&gt; to the first &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; element in the array of points. Then we will have a loop and start from 0 to &lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt;. Each time we run through this loop we need to do 3 things:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;1. Test if &lt;b&gt;&lt;i&gt;max&lt;/i&gt;&lt;/b&gt; is less than the current &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; value? If yes then set &lt;b&gt;&lt;i&gt;max&lt;/i&gt;&lt;/b&gt; to the current &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
  &lt;li&gt;2. Test if &lt;b&gt;&lt;i&gt;min&lt;/i&gt;&lt;/b&gt; is greater than the current &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; value? If yes then set &lt;b&gt;&lt;i&gt;min&lt;/i&gt;&lt;/b&gt; to the current &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
  &lt;li&gt;3. Increment &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt; to the next position in the array. Because we are using a pointer to the array we can do this easily by doing &lt;b&gt;a++&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next we will just return the result of the equation as a double. So your functions should look something like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; vertical(point *a, &lt;span class="pt"&gt;int&lt;/span&gt; total)&lt;tt&gt;
&lt;/tt&gt;{   &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; min; &lt;span class="c"&gt;// minimum y value found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; max; &lt;span class="c"&gt;// maximum y value found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; lcv;    &lt;span class="c"&gt;// loop control variable&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  max = min = a-&amp;gt;y;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;(lcv=&lt;span class="i"&gt;0&lt;/span&gt;; lcv &amp;lt; total; lcv++) &lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(max &amp;lt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      max = a-&amp;gt;y;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(min &amp;gt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      min = a-&amp;gt;y;&lt;tt&gt;
&lt;/tt&gt;    a++;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; (max + min) / &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; amplitude(point *a, &lt;span class="pt"&gt;int&lt;/span&gt; total)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; min; &lt;span class="c"&gt;// minimum y value found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;double&lt;/span&gt; max; &lt;span class="c"&gt;// maximum y value found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; lcv;    &lt;span class="c"&gt;// loop control variable&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  max = min = a-&amp;gt;y;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;(lcv=&lt;span class="i"&gt;0&lt;/span&gt;; lcv &amp;lt; total; lcv++)&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(max &amp;lt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      max = a-&amp;gt;y;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(min &amp;gt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      min = a-&amp;gt;y;&lt;tt&gt;
&lt;/tt&gt;    a++;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; (max - min) / &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;&lt;b&gt;6. The next function called by main is the frequency function that has two arguments (the array of points - passed as a pointer - and the number of values in the array; again using the arrow operator to access values) and will return the frequency.  To calculate the frequency, find the period which is time difference between the maximum and minimum y-values and multiply by 2.  Then, divide to calculate the frequency.  Please note that you are using the difference between time values, not the y values, to perform the overall computation.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;7. Finally, main will call the pshift function that contains two arguments (the array of points - passed as a pointer - and the number of values in the array; again using the arrow operator to access values) and will return the phase shift or horizontal shift.  This shift can be found by finding the average of the time values where the maximum and minimum y-values occur; then subtracting it from half the period (see step 6 to find the period).&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The functions for steps 6 and 7 are both almost identical expect for the equation at the end so we will do these both at the same time.&lt;/p&gt;
&lt;p&gt;For the frequency function we will need to use the absolute value function in the cmath library. To include this you will need to do this at the top of your file.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#include&lt;/span&gt; &lt;span class="ic"&gt;&amp;lt;cmath&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Like the functions in step 4 and 5 they need to have the array of points and the integer total number of points and they both return a double. So the prototypes should look like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; frequency(point *, &lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; pshift(point *, &lt;span class="pt"&gt;int&lt;/span&gt; );&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;So lets call the point array &lt;b&gt;&lt;i&gt;p&lt;/i&gt;&lt;/b&gt; and the integer &lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;To find the max and min values we need to create 2 pointers to point variables (&lt;b&gt;&lt;i&gt;max&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;min&lt;/i&gt;&lt;/b&gt;) and an integer (&lt;b&gt;&lt;i&gt;lcv&lt;/i&gt;&lt;/b&gt;) that we will use for the loop.&lt;/p&gt;
&lt;p&gt;Next we will need to set both &lt;b&gt;&lt;i&gt;max&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;min&lt;/i&gt;&lt;/b&gt; pointers to the same address as &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt; points which is the first position in the array of points. Then we will have a loop and start from 0 to &lt;b&gt;&lt;i&gt;total&lt;/i&gt;&lt;/b&gt;. Each time we run through this loop we need to do 3 things:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;1. Test if &lt;b&gt;&lt;i&gt;max-&gt;y&lt;/i&gt;&lt;/b&gt; is less than the current &lt;b&gt;&lt;i&gt;a-&gt;y&lt;/i&gt;&lt;/b&gt; value? If yes then set &lt;b&gt;&lt;i&gt;max&lt;/i&gt;&lt;/b&gt; to the current &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt; address.&lt;/li&gt;
  &lt;li&gt;2. Test if &lt;b&gt;&lt;i&gt;min-&gt;y&lt;/i&gt;&lt;/b&gt; is greater than the current &lt;b&gt;&lt;i&gt;a-&gt;y&lt;/i&gt;&lt;/b&gt; value? If yes then set &lt;b&gt;&lt;i&gt;min&lt;/i&gt;&lt;/b&gt; to the current &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt; address.&lt;/li&gt;
  &lt;li&gt;3. Increment &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt; to the next position in the array. Because we are using a pointer to the array we can do this easily by doing &lt;b&gt;a++&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next we will just return the result of the equation as a double. So your functions should look something like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; frequency(point *a, &lt;span class="pt"&gt;int&lt;/span&gt; total)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  point *min; &lt;span class="c"&gt;// minimum y value location found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  point *max; &lt;span class="c"&gt;// maximum y value location found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; lcv;    &lt;span class="c"&gt;// loop control variable&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  max = min = a;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;(lcv=&lt;span class="i"&gt;0&lt;/span&gt;; lcv &amp;lt; total; lcv++)&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(max-&amp;gt;y &amp;lt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      max = a;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(min-&amp;gt;y &amp;gt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      min = a;&lt;tt&gt;
&lt;/tt&gt;    a++;&lt;tt&gt;
&lt;/tt&gt;  } &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; abs(PI / (max-&amp;gt;time - min-&amp;gt;time));&lt;tt&gt;
&lt;/tt&gt;} &lt;tt&gt;
&lt;/tt&gt;&lt;span class="pt"&gt;double&lt;/span&gt; pshift(point *a, &lt;span class="pt"&gt;int&lt;/span&gt; total)&lt;tt&gt;
&lt;/tt&gt;{&lt;tt&gt;
&lt;/tt&gt;  point *min; &lt;span class="c"&gt;// minimum y value location found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  point *max; &lt;span class="c"&gt;// maximum y value location found in array&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="pt"&gt;int&lt;/span&gt; lcv;    &lt;span class="c"&gt;// loop control variable&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  max = min = a;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;for&lt;/span&gt;(lcv=&lt;span class="i"&gt;0&lt;/span&gt;; lcv &amp;lt; total; lcv++)&lt;tt&gt;
&lt;/tt&gt;  {&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(max-&amp;gt;y &amp;lt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      max = a;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;if&lt;/span&gt;(min-&amp;gt;y &amp;gt; a-&amp;gt;y)&lt;tt&gt;
&lt;/tt&gt;      min = a;&lt;tt&gt;
&lt;/tt&gt;    a++;&lt;tt&gt;
&lt;/tt&gt;  }&lt;tt&gt;
&lt;/tt&gt;  a -= total;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;return&lt;/span&gt; (&lt;span class="i"&gt;2&lt;/span&gt; * PI / frequency(a, total)) / &lt;span class="i"&gt;2&lt;/span&gt; - (max-&amp;gt;time + min-&amp;gt;time) / &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Notice how in the pshift function after the loop we do &lt;b&gt;a -= total&lt;/b&gt;. This is because &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt; is currently pointing the last element in the array and if we want to call frequency and pass the address of the first element in the array of points then we need to set &lt;b&gt;&lt;i&gt;a&lt;/i&gt;&lt;/b&gt; back to the first element.&lt;/p&gt;
&lt;p&gt;Also notice that the frequency function uses a variable called &lt;b&gt;&lt;i&gt;PI&lt;/i&gt;&lt;/b&gt;. This is the value of pi so at the top above the main you will need to define it as a constant. You can do this one of 2 ways: &lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="pp"&gt;#define&lt;/span&gt; PI &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.14159&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;or &lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;const&lt;/span&gt; &lt;span class="pt"&gt;double&lt;/span&gt; PI=&lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.14159&lt;/span&gt;;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Either way will work but I prefer to use the &lt;b&gt;#define&lt;/b&gt; since it uses less memory and only takes more processing when you compile the program not in running it.&lt;/p&gt;

&lt;h2&gt;Outcome&lt;/h2&gt;
&lt;p&gt;Using the text file provided this is what I got when I ran the program:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;45&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;[scnaegle&lt;span class="er"&gt;@&lt;/span&gt;egor ece231]&lt;span class="er"&gt;$&lt;/span&gt; ./a.out &lt;tt&gt;
&lt;/tt&gt;&lt;span class="la"&gt;Values:&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.5708&lt;/span&gt;  -&lt;span class="i"&gt;4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.6791&lt;/span&gt;  -&lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.3551&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.7875&lt;/span&gt;  -&lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.7403&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.8958&lt;/span&gt;  -&lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.1845&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.0041&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.7135&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.1125&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.3495&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.2208&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.1094&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.3291&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.0044&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.4374&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.0395&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.5458&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.2131&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.6541&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.5169&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.7624&lt;/span&gt;  -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.9369&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.8708&lt;/span&gt;  -&lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.4533&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.9791&lt;/span&gt;  -&lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.0421&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.0874&lt;/span&gt;  -&lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.6756&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.1958&lt;/span&gt;  -&lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.3244&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.3041&lt;/span&gt;  -&lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.9579&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.4124&lt;/span&gt;  -&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.5467&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.5208&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.0631&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.6291&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.4831&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.7374&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.7869&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.8457&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.9605&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;3&lt;/span&gt;&lt;span class="fl"&gt;.9541&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.9956&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.0624&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.8906&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.1707&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.6505&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.2791&lt;/span&gt;  -&lt;span class="fl"&gt;6&lt;/span&gt;&lt;span class="fl"&gt;.2865&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.3874&lt;/span&gt;  -&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.8155&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.4957&lt;/span&gt;  -&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.2597&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.6041&lt;/span&gt;  -&lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.6449&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="fl"&gt;4&lt;/span&gt;&lt;span class="fl"&gt;.7124&lt;/span&gt;  -&lt;span class="i"&gt;4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Total Number of values = &lt;span class="i"&gt;30&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Vertical shift = -&lt;span class="i"&gt;4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Amplitude = &lt;span class="fl"&gt;2&lt;/span&gt;&lt;span class="fl"&gt;.9956&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Frequency = &lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.93329&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Phase Shift = -&lt;span class="fl"&gt;1&lt;/span&gt;&lt;span class="fl"&gt;.5166&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;br /&gt;

&lt;h1&gt;Part B&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;Using MATLAB, you need to plot the original data using the data file sp09prog1.txt.  To do this, load the file into MATLAB, then assign the first column to be the x values and the second column to be the y values.  You can then use the plot command to plot these (you should only plot the points - not any connecting lines).&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This is easy. Use the &lt;b&gt;load()&lt;/b&gt; function to read in data from the file into a matrix.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;table = load('sp09prog1.txt')&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Then we need to get the data into arrays of &lt;b&gt;&lt;i&gt;time&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt;. To do this use &lt;b&gt;&lt;i&gt;matrixvairable&lt;/i&gt;(&lt;i&gt;row&lt;/i&gt;,&lt;i&gt;column&lt;/i&gt;)&lt;/b&gt;. Use a colon (&lt;b&gt;:&lt;/b&gt;) to get everything in either the row or column. In this case we will want all rows in the first column for &lt;b&gt;&lt;i&gt;time&lt;/i&gt;&lt;/b&gt; and all rows and second column for &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;time = table(: , 1)&lt;tt&gt;
&lt;/tt&gt;y = table(: , 2)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Then plot the data using the &lt;b&gt;plot()&lt;/b&gt; function. For this you will need to pass 3 things (x values, y values, and symbol). Our x values is the array &lt;b&gt;&lt;i&gt;time&lt;/i&gt;&lt;/b&gt; and our y values is array &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;plot(time, y, 'o')&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;&lt;b&gt;Then, using the values you found in the C++ program for each of the four variables, create a cosine curve that can be plotted over the data.  You will need to create a matrix of x-values that run from 1 to 2π with an increment of π/100.  Then, create a matrix of y values using the cosine equation:  where vs is the vertical shift, ps is the phase shift, amp is the amplitude and freq is the frequency.  Plot these x and y values using a red line.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This is just the same as the first part only we need to find the &lt;b&gt;&lt;i&gt;x&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; values using equations. But first lets set all the values we will need for our calculations which we can get from &lt;b&gt;Part A&lt;/b&gt; of the program.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;vs = -4&lt;tt&gt;
&lt;/tt&gt;amp = 2.9956&lt;tt&gt;
&lt;/tt&gt;freq = 1.93329&lt;tt&gt;
&lt;/tt&gt;ps = -1.5166&lt;tt&gt;
&lt;/tt&gt;PI = 3.14159&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Next we will have to create the array &lt;b&gt;&lt;i&gt;x&lt;/i&gt;&lt;/b&gt; with all the x values. In this case we are going to go from 0 to 2pi and step by pi/100. To do this we have a colon (&lt;b&gt;:&lt;/b&gt;) between each argument like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;x = 0 : PI / 100 : 2 * PI&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Now, to create the array &lt;b&gt;&lt;i&gt;y&lt;/i&gt;&lt;/b&gt; with all the y values we use the equation we were given.&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;y = vs + amp * (cos(freq * x - ps))&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Now, all we need to do is plot it on the graph. However, we want to plot the new equation on the same plot as the last one. To do this we need to use the command &lt;b&gt;hold on&lt;/b&gt;. We also want the new graph to look different so lets make it a full line 4px wide and the color be dark red. Like this:&lt;/p&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;hold on&lt;tt&gt;
&lt;/tt&gt;plot(x, y, '', 'LineWidth', 4, 'Color', [.6 0 0])&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


&lt;p&gt;Now run it and see if your two line match up at all.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2009-01-12:51580</id>
    <published>2009-01-12T17:50:00Z</published>
    <updated>2009-01-12T17:55:57Z</updated>
    <category term="development" />
    <category term="Open Flash Chart Graphs" />
    <category term="projects" />
    <category term="rails" />
    <category term="ruby" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2009/1/12/open-flash-chart-ii-ofc-object-creators" rel="alternate" type="text/html" />
    <title>Open Flash Chart II - OFC Object Creators</title>
<content type="html">
            Thought I would try and make things a little more flexible.  In doing so, two new OFC Object creators came to life.  You all may recall the very basic: &lt;b&gt;&lt;pre&gt;open_flash_chart_object(600,300,'/test_it/graph_test')&lt;/pre&gt;&lt;/b&gt;
And maybe not, well either way, I am going to describe its functionality here plus the functionality of the two new object creators.&lt;br /&gt;
&lt;h2&gt;open_flash_chart_object()&lt;/h2&gt;
&lt;h3&gt;Usage:&lt;/h3&gt;
This method returns only the graph html:&lt;br /&gt;
&lt;pre&gt;@graph = open_flash_chart_object(....)&lt;/pre&gt;
&lt;h3&gt;Arguments&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;width (&lt;b&gt;required&lt;/b&gt;)&lt;/li&gt;
  &lt;li&gt;height (&lt;b&gt;required&lt;/b&gt;)&lt;/li&gt;
  &lt;li&gt;url (&lt;b&gt;required&lt;/b&gt;)&lt;/li&gt;
  &lt;li&gt;use_swfobject (optional and defaults to true)&lt;/li&gt;
  &lt;li&gt;base (optional and defaults to "/")&lt;/li&gt;
  &lt;li&gt;swf_file_name (optional and defaults to "open-flash-chart.swf")&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;open_flash_chart_object_and_div_name()&lt;/h2&gt;
&lt;h3&gt;Usage:&lt;/h3&gt;
This method will return, not only the html for the graph but also the div_name for use with javascript manipulation:&lt;br /&gt;
&lt;pre&gt;@graph, @div_name = open_flash_chart_object_and_div_name(...)&lt;/pre&gt;
&lt;h3&gt;Arguments&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;width (&lt;b&gt;required&lt;/b&gt;)&lt;/li&gt;
  &lt;li&gt;height (&lt;b&gt;required&lt;/b&gt;)&lt;/li&gt;
  &lt;li&gt;url (&lt;b&gt;required&lt;/b&gt;)&lt;/li&gt;
  &lt;li&gt;use_swfobject (optional and defaults to true)&lt;/li&gt;
  &lt;li&gt;base (optional and defaults to "/")&lt;/li&gt;
  &lt;li&gt;swf_file_name (optional and defaults to "open-flash-chart.swf")&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;open_flash_chart_object_from_hash()&lt;/h2&gt;
&lt;h3&gt;Usage:&lt;/h3&gt;
This method will return the graph html, but gives you absolute control over quite a few things, most importantly div_name.&lt;br /&gt;
&lt;pre&gt;@graph = open_flash_chart_object_from_hash(...)&lt;/pre&gt;
&lt;h3&gt;Additional Usage:&lt;/h3&gt;
&lt;pre&gt;@graph = open_flash_chart_object_from_hash("/test_it/graph_code", :div_name =&gt; 'my_div_name', :width =&gt; 600)&lt;/pre&gt;
&lt;pre&gt;@graph = open_flash_chart_object_from_hash("/test_it/graph_code", :base =&gt; '/projects', :height =&gt; 600)&lt;/pre&gt;
&lt;h3&gt;Arguments&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;url (&lt;b&gt;required&lt;/b&gt;)&lt;/li&gt;
  &lt;li&gt;options (optional)
    &lt;ul&gt;
      &lt;li&gt;div_name (defaults to "flash_content_[random string]")&lt;/li&gt;
      &lt;li&gt;base (defaults to "/")&lt;/li&gt;
      &lt;li&gt;swf_file_name (defaults to "open-flash-chart.swf")&lt;/li&gt;
      &lt;li&gt;width (defaults to 550)&lt;/li&gt;
      &lt;li&gt;height (defaults to 300)&lt;/li&gt;
      &lt;li&gt;protocol (defaults to "http")&lt;/li&gt;
      &lt;li&gt;obj_id (defaults to "chart_[random string]")&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Well, there it is, good luck and have fun.&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2009-01-08:51540</id>
    <published>2009-01-08T20:58:00Z</published>
    <updated>2009-01-08T21:28:50Z</updated>
    <category term="development" />
    <category term="Open Flash Chart Graphs" />
    <category term="projects" />
    <category term="rails" />
    <category term="ruby" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2009/1/8/open-flash-chart-ii-bar-graphs-with-on-click" rel="alternate" type="text/html" />
    <title>Open Flash Chart II - Bar Graphs with on-click</title>
<content type="html">
            Building on &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/line-on-click.php"&gt;line graph clicking&lt;/a&gt;, thanks to the support of a few other people (mentioned throughout the article) we now have bar graph clicking as well.  The only down side (if you want to call it that) is that it is experimental in the sense that the open flash chart swf object had to be updated, and the update is not part of the official OFC release (at least not at the time of this writing).  No big deal though, just be aware.  It is however part of the &lt;a href="http://github.com/pullmonkey/open_flash_chart/tree/master"&gt;OFC rails plugin release&lt;/a&gt;.&lt;br /&gt;
Big thanks goes to &lt;a href="http://pullmonkey.com/2008/7/23/open-flash-chart-ii-plugin-for-ruby-on-rails-ofc2#comment-51524"&gt;Eric&lt;/a&gt; for his work on the action script for the bar clicking open-flash-chart swf file - see &lt;a href="http://forums.openflashchart.com/viewtopic.php?f=5&amp;amp;t=305&amp;amp;p=1922#p1922"&gt;this forum entry&lt;/a&gt; for more details.&lt;br /&gt;
Obvious thanks also goes to &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/"&gt;monk.e.boy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
Ok, so two things to note for this to work:&lt;br /&gt;
&lt;ol&gt;
  &lt;li&gt;Pull the latest from github and make sure to get Eric's swf file (under the assets directory - &lt;a href="http://github.com/pullmonkey/open_flash_chart/tree/master/assets/open-flash-chart-bar-clicking.swf"&gt;open-flash-chart-bar-clicking.swf&lt;/a&gt; ) and place it under RAILS_ROOT/public&lt;/li&gt;
  &lt;li&gt;The call to open_flash_chart_object() has changed to accept an optional parameter for the swf file name. I am leaving the original for use as open-flash-chart.swf (which is the default for the swf_file_name param) and added Eric's as open-flash-chart-bar-clicking.swf.  See the example below for usage.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
The changes that were made can be found &lt;a href="http://github.com/pullmonkey/open_flash_chart/commit/57776d00e70020b50e6b1a6e2204a5718414b1c0"&gt;here&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
Here is the graph we are after in this example (click the bars to see what happens):&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;
    &amp;lt;noscript&gt;
      &amp;lt;object height="300" width="600"&gt;
        &amp;lt;param /&gt;
        &amp;lt;param /&gt;
        &amp;lt;param /&gt;
        &amp;lt;param /&gt;
        &amp;lt;embed src="/projects/open-flash-chart-bar-clicking.swf?data=%2Fprojects%2Fopen_flash_chart2%2Fbar_clicking" height="300" width="600" /&gt;
      &amp;lt;/object&gt;
    &amp;lt;/noscript&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://pullmonkey.com/projects/open_flash_chart2"&gt;More Open Flash Chart II examples.&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
And here is the code (the controller):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;TestItController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@graph&lt;/span&gt; = open_flash_chart_object(&lt;span class="i"&gt;600&lt;/span&gt;,&lt;span class="i"&gt;300&lt;/span&gt;,&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;/test_it/graph_code&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="pc"&gt;true&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;open-flash-chart-bar-clicking.swf&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;graph_code&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    title = &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Bar on-click Example&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    bar = &lt;span class="co"&gt;BarGlass&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="c"&gt;# NOTE ... the next two lines are if you want each bar to have a different response when clicked&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    bar_values = (&lt;span class="i"&gt;1&lt;/span&gt;..&lt;span class="i"&gt;9&lt;/span&gt;).to_a.map{|x| bv = &lt;span class="co"&gt;BarValue&lt;/span&gt;.new(x); bv.on_click = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;alert('hello, my value is &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="dl"&gt;#{&lt;/span&gt;x&lt;span class="dl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;')&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;; bv}&lt;tt&gt;
&lt;/tt&gt;    bar.set_values(bar_values)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="c"&gt;# if you want a more generic response across all bars, then the following lines would do:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="c"&gt;# bar.on_click = &amp;quot;alert('hello there')&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="c"&gt;# bar.set_values((1..9).to_a)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    chart = &lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    chart.set_title(title)&lt;tt&gt;
&lt;/tt&gt;    chart.add_element(bar)&lt;tt&gt;
&lt;/tt&gt;    render &lt;span class="sy"&gt;:text&lt;/span&gt; =&amp;gt; chart.to_s&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
And in your view (index.html.erb):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;script type=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;text/javascript&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; src=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;/javascripts/swfobject.js&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;script&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;%= @graph %&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Good Luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2008-10-25:50497</id>
    <published>2008-10-25T05:53:00Z</published>
    <updated>2008-10-28T00:58:56Z</updated>
    <category term="Open Flash Chart Graphs" />
    <category term="projects" />
    <category term="rails" />
    <category term="ruby" />
    <link href="http://pullmonkey.com/2008/10/25/open-flash-chart-ii-updates-radar-charts-and-scatter-lines" rel="alternate" type="text/html" />
    <title>Open Flash Chart II - Updates, Radar Charts and Scatter Lines</title>
<content type="html">
            Recently, some good work has gone into the Open Flash Chart plugin.  First, it is now up to date with &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2"&gt;the official php version of OFC&lt;/a&gt;.  That means we have &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/radar-charts-menu.php"&gt;Radar Charts&lt;/a&gt; and &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/scatter-line-chart.php"&gt;Scatter Line&lt;/a&gt; capabilities now.&lt;br /&gt;&lt;br /&gt;
Also, some nice people have helped this plugin along to maturity.  I would like to thank &lt;a href="http://github.com/dfl"&gt;David&lt;/a&gt; and &lt;a href="http://harryseldon.thinkosphere.com/"&gt;Harry&lt;/a&gt; for their work.  &lt;br /&gt;
&lt;br /&gt;
David made some very much needed improvements and brought Open Flash Chart II plugin up to speed with Rails 2.x. 
So take note, this is the &amp;quot;modern&amp;quot; way to work with the charts:&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;TestItController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="c"&gt;## EDIT dont need this line with the latest plugin.&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="c"&gt;#include OpenFlashChart&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    respond_to &lt;span class="r"&gt;do&lt;/span&gt; |wants|&lt;tt&gt;
&lt;/tt&gt;      wants.html {&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="iv"&gt;@graph&lt;/span&gt; = open_flash_chart_object( &lt;span class="i"&gt;600&lt;/span&gt;, &lt;span class="i"&gt;300&lt;/span&gt;, url_for( &lt;span class="sy"&gt;:action&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:format&lt;/span&gt; =&amp;gt; &lt;span class="sy"&gt;:json&lt;/span&gt; ) )&lt;tt&gt;
&lt;/tt&gt;      }&lt;tt&gt;
&lt;/tt&gt;      wants.json { &lt;tt&gt;
&lt;/tt&gt;        &lt;span class="c"&gt;# Edit:: don't do the OpenFlashChart::Base stuff anymore&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="c"&gt;#chart = OpenFlashChart::Base.new( :title =&amp;gt; Title.new(&amp;quot;MY TITLE&amp;quot;) ) do |c|&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        chart = &lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new( &lt;span class="sy"&gt;:title&lt;/span&gt; =&amp;gt; &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY TITLE&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) ) &lt;span class="r"&gt;do&lt;/span&gt; |c|&lt;tt&gt;
&lt;/tt&gt;          c &amp;lt;&amp;lt; &lt;span class="co"&gt;BarGlass&lt;/span&gt;.new( &lt;span class="sy"&gt;:values&lt;/span&gt; =&amp;gt; (&lt;span class="i"&gt;1&lt;/span&gt;..&lt;span class="i"&gt;10&lt;/span&gt;).sort_by{rand} )&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        render &lt;span class="sy"&gt;:text&lt;/span&gt; =&amp;gt; chart, &lt;span class="sy"&gt;:layout&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;false&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      }&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

Open Flash Chart was put in to the appropriate OpenFlashChart namespace/module, to ensure we don't run into any conflicts.  It also now takes blocks which will be helpful.  The example above is courtesy of David.
&lt;br /&gt;
&lt;br /&gt;
Harry, has done a great job of providing examples for the latest features of Open Flash Chart.&lt;br /&gt;
Check out his &lt;a href="http://harryseldon.thinkosphere.com/2008/10/23/radar-chart-example-with-ofc2"&gt;Radar Chart Example&lt;/a&gt;. &lt;br /&gt;
Also, check out his &lt;a href="http://harryseldon.thinkosphere.com/2008/10/22/scatter-line-chart-example-with-ofc2"&gt;Scatter Line Chart Example&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thank you for the great work guys.
&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2008-09-23:49033</id>
    <published>2008-09-23T14:13:00Z</published>
    <updated>2008-09-25T16:29:52Z</updated>
    <category term="Javascript" />
    <category term="Open Flash Chart Graphs" />
    <category term="projects" />
    <category term="rails" />
    <category term="ruby" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2008/9/23/open-flash-chart-ii-javascript-part-3" rel="alternate" type="text/html" />
    <title>Open Flash Chart II - Javascript (Part 3)</title>
<content type="html">
            This article is a follow on to &lt;a href="http://pullmonkey.com/2008/9/21/open-flash-chart-ii-javascript-part-1"&gt;Part 1&lt;/a&gt; and &lt;a href="http://pullmonkey.com/2008/9/22/open-flash-chart-ii-javascript-part-2"&gt;Part 2&lt;/a&gt;.  In this article, I will discuss how we can change between various charts on the fly - meaning, changing the SWFObject without rerendering the page but this time we can do it without storing everything in javascript variables initially.  We will use an Ajax request to grab our data off the server.&lt;br /&gt;&lt;br /&gt;
As promised there are still more topics to come on OFC and Javascript:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-5.php"&gt;Basics of OFC and Javascript&lt;/a&gt;. - &lt;b&gt;&lt;a href="http://pullmonkey.com/2008/9/21/open-flash-chart-ii-javascript-part-1"&gt;Discussed in Part 1&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-6.php"&gt;Change data on the fly with links&lt;/a&gt;. - &lt;b&gt;&lt;a href="http://pullmonkey.com/2008/9/22/open-flash-chart-ii-javascript-part-2"&gt;Discussed in Part 2&lt;/a&gt;&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-js.php"&gt;Update and Save data&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart/gallery-js-ajax-2.php"&gt;Ajax calls to server&lt;/a&gt; - &lt;b&gt;This article&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart/gallery-js-2.php"&gt;Manipulate the data through an interface&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ext-ux-ofcgxt.googlecode.com/svn/demo/Test.html"&gt;Some really cool interfaces&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Here is the graph and interface we are after in this example:&lt;br /&gt;&lt;br /&gt;
    &lt;div&gt;&lt;/div&gt;
    
    &lt;br /&gt;&lt;br /&gt;
    
      &lt;a href="#"&gt;Load Original Chart (Bar Graph)&lt;/a&gt;

     || 
    
      &lt;a href="#"&gt;Load Chart from server data (Line Graph)&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://pullmonkey.com/projects/open_flash_chart2"&gt;More Open Flash Chart II examples.&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
And here is the code (the controller):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;35&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;45&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;47&lt;tt&gt;
&lt;/tt&gt;48&lt;tt&gt;
&lt;/tt&gt;49&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;50&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;51&lt;tt&gt;
&lt;/tt&gt;52&lt;tt&gt;
&lt;/tt&gt;53&lt;tt&gt;
&lt;/tt&gt;54&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;55&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;56&lt;tt&gt;
&lt;/tt&gt;57&lt;tt&gt;
&lt;/tt&gt;58&lt;tt&gt;
&lt;/tt&gt;59&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;60&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;61&lt;tt&gt;
&lt;/tt&gt;62&lt;tt&gt;
&lt;/tt&gt;63&lt;tt&gt;
&lt;/tt&gt;64&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;65&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;66&lt;tt&gt;
&lt;/tt&gt;67&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;TestItController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    title = &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY TITLE - original&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    bar = &lt;span class="co"&gt;BarGlass&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    bar.set_values([&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;,&lt;span class="i"&gt;7&lt;/span&gt;,&lt;span class="i"&gt;8&lt;/span&gt;,&lt;span class="i"&gt;9&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@chart&lt;/span&gt; = &lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@chart&lt;/span&gt;.set_title(title)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@chart&lt;/span&gt;.add_element(bar)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;some_server_data&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;     title = &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Multiple Lines&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    data1 = []&lt;tt&gt;
&lt;/tt&gt;    data2 = []&lt;tt&gt;
&lt;/tt&gt;    data3 = []&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="i"&gt;10&lt;/span&gt;.times &lt;span class="r"&gt;do&lt;/span&gt; |x|&lt;tt&gt;
&lt;/tt&gt;      data1 &amp;lt;&amp;lt; rand(&lt;span class="i"&gt;5&lt;/span&gt;) + &lt;span class="i"&gt;1&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      data2 &amp;lt;&amp;lt; rand(&lt;span class="i"&gt;6&lt;/span&gt;) + &lt;span class="i"&gt;7&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      data3 &amp;lt;&amp;lt; rand(&lt;span class="i"&gt;5&lt;/span&gt;) + &lt;span class="i"&gt;14&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    line_dot = &lt;span class="co"&gt;LineDot&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    line_dot.text = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Line Dot&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_dot.width = &lt;span class="i"&gt;4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_dot.colour = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;#DFC329&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_dot.dot_size = &lt;span class="i"&gt;5&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_dot.values = data1&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    line_hollow = &lt;span class="co"&gt;LineHollow&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    line_hollow.text = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Line Hollow&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_hollow.width = &lt;span class="i"&gt;1&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_hollow.colour = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;#6363AC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_hollow.dot_size = &lt;span class="i"&gt;5&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line_hollow.values = data2&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    line = &lt;span class="co"&gt;Line&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    line.text = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Line&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line.width = &lt;span class="i"&gt;1&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line.colour = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;#5E4725&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line.dot_size = &lt;span class="i"&gt;5&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    line.values = data3&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    y = &lt;span class="co"&gt;YAxis&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    y.set_range(&lt;span class="i"&gt;0&lt;/span&gt;,&lt;span class="i"&gt;20&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    x_legend = &lt;span class="co"&gt;XLegend&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY X Legend&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    x_legend.set_style(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;{font-size: 20px; color: #778877}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    y_legend = &lt;span class="co"&gt;YLegend&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY Y Legend&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    y_legend.set_style(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;{font-size: 20px; color: #770077}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    chart =&lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    chart.set_title(title)&lt;tt&gt;
&lt;/tt&gt;    chart.set_x_legend(x_legend)&lt;tt&gt;
&lt;/tt&gt;    chart.set_y_legend(y_legend)&lt;tt&gt;
&lt;/tt&gt;    chart.y_axis = y&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    chart.add_element(line_dot)&lt;tt&gt;
&lt;/tt&gt;    chart.add_element(line_hollow)&lt;tt&gt;
&lt;/tt&gt;    chart.add_element(line)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    render &lt;span class="sy"&gt;:text&lt;/span&gt; =&amp;gt; chart.to_s&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
And in your view (index.html.erb):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;html&amp;gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;head&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= javascript_include_tag &lt;span class="sy"&gt;:defaults&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;swfobject&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;/head&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;body&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= &lt;span class="iv"&gt;@chart&lt;/span&gt;.js_open_flash_chart_object(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;my_chart_js_1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="i"&gt;550&lt;/span&gt;,&lt;span class="i"&gt;300&lt;/span&gt;) &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;br/&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;br/&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= &lt;span class="iv"&gt;@chart&lt;/span&gt;.link_to_ofc_load(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Load Original Chart&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;my_chart_js_1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt; ||&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= @chart.link_to_remote_ofc_load(&amp;quot;Load Chart from server data&amp;quot;, &amp;quot;my_chart_js_1&amp;quot;, &amp;quot;/test_it/some_server_data&amp;quot;) %&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;&lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;body&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;/span&gt;html&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example, we make use of the &lt;b&gt;link_to_remote_ofc_load&lt;/b&gt; method that basically creates a &lt;i&gt;link_to_remote&lt;/i&gt; along with the function that we call to load the chart data into the swfobject chart from the server.  It takes three arguments, the link text, the id of the div whose swf we will load new data into and the url from which to fetch the data.
&lt;br /&gt;
For more information on the javascript callbacks that I setup here, you will want to view the page source and read about it further over at &lt;a href="http://teethgrinder.co.uk/open-flash-chart/gallery-js-ajax-2.php"&gt;teethgrinder's tutorial&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
Good Luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2008-09-22:49032</id>
    <published>2008-09-22T15:17:00Z</published>
    <updated>2008-09-23T14:18:41Z</updated>
    <category term="development" />
    <category term="Javascript" />
    <category term="Open Flash Chart Graphs" />
    <category term="projects" />
    <category term="rails" />
    <category term="ruby" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2008/9/22/open-flash-chart-ii-javascript-part-2" rel="alternate" type="text/html" />
    <title>Open Flash Chart II - Javascript (Part 2)</title>
<content type="html">
            This article is a follow on to &lt;a href="http://pullmonkey.com/2008/9/21/open-flash-chart-ii-javascript-part-1"&gt;Part 1&lt;/a&gt;.  In this article, I will discuss how we can change between various charts on the fly - meaning, changing the SWFObject without sending a request or rerendering the page.&lt;br /&gt;&lt;br /&gt;
As promised there are still more topics to come on OFC and Javascript:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-5.php"&gt;Basics of OFC and Javascript&lt;/a&gt;. - &lt;b&gt;&lt;a href="http://pullmonkey.com/2008/9/21/open-flash-chart-ii-javascript-part-1"&gt;Last article (part 1)&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-6.php"&gt;Change data on the fly with links&lt;/a&gt;. - &lt;b&gt;This article&lt;/b&gt;, see links under the graph.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-js.php"&gt;Update and Save data&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart/gallery-js-ajax-2.php"&gt;Ajax calls to server&lt;/a&gt; - &lt;b&gt;&lt;a href="http://pullmonkey.com/2008/9/23/open-flash-chart-ii-javascript-part-3"&gt;Discussed in Part 3&lt;/a&gt;&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart/gallery-js-2.php"&gt;Manipulate the data through an interface&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ext-ux-ofcgxt.googlecode.com/svn/demo/Test.html"&gt;Some really cool interfaces&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Here is the graph and interface we are after in this example:&lt;br /&gt;&lt;br /&gt;
    &lt;div&gt;&lt;/div&gt;
    
    &lt;br /&gt;&lt;br /&gt;
    
      
      &lt;a href="#"&gt;Load Chart 1&lt;/a&gt;

     
       || 
    
      
      &lt;a href="#"&gt;Load Chart 2&lt;/a&gt;
     
       || 
    
      
      &lt;a href="#"&gt;Load Chart 3&lt;/a&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://pullmonkey.com/projects/open_flash_chart2"&gt;More Open Flash Chart II examples.&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
And here is the code (the controller):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;15&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;25&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;TestItController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    title = &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY TITLE&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    bar = &lt;span class="co"&gt;BarGlass&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    bar.set_values([&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;,&lt;span class="i"&gt;7&lt;/span&gt;,&lt;span class="i"&gt;8&lt;/span&gt;,&lt;span class="i"&gt;9&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;    chart1 = &lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    chart1.set_title(title)&lt;tt&gt;
&lt;/tt&gt;    chart1.add_element(bar)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    title = &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY TITLE 2&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    bar = &lt;span class="co"&gt;BarGlass&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    bar.set_values([&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;,&lt;span class="i"&gt;7&lt;/span&gt;,&lt;span class="i"&gt;8&lt;/span&gt;,&lt;span class="i"&gt;9&lt;/span&gt;].reverse)&lt;tt&gt;
&lt;/tt&gt;    chart2 = &lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    chart2.set_title(title)&lt;tt&gt;
&lt;/tt&gt;    chart2.add_element(bar)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    title = &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY TITLE - some new data&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    bar = &lt;span class="co"&gt;BarGlass&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    bar.set_values([&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;,&lt;span class="i"&gt;7&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;,&lt;span class="i"&gt;9&lt;/span&gt;,&lt;span class="i"&gt;8&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;    chart3 = &lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    chart3.set_title(title)&lt;tt&gt;
&lt;/tt&gt;    chart3.add_element(bar)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@charts&lt;/span&gt; = [chart1, chart2, chart3]&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
And in your view (index.html.erb):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;html&amp;gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;head&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= javascript_include_tag &lt;span class="sy"&gt;:defaults&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;swfobject&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;/head&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;body&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= &lt;span class="iv"&gt;@charts&lt;/span&gt;.first.js_open_flash_chart_object(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;my_chart_js_2&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="i"&gt;550&lt;/span&gt;,&lt;span class="i"&gt;300&lt;/span&gt;) &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;br/&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;br/&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;% &lt;span class="iv"&gt;@charts&lt;/span&gt;.each_with_index &lt;span class="r"&gt;do&lt;/span&gt; |chart, i| &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;      &amp;lt;%= chart.link_to_ofc_load(&amp;quot;Load Chart &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="dl"&gt;#{&lt;/span&gt;i + &lt;span class="i"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;&amp;quot;, &amp;quot;my_chart_js_2&amp;quot;) %&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &amp;lt;%= &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt; || &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="r"&gt;if&lt;/span&gt; i &amp;lt; &lt;span class="iv"&gt;@charts&lt;/span&gt;.size - &lt;span class="i"&gt;1&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;% end %&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;&lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;body&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;/span&gt;html&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example, we make use of the &lt;b&gt;link_to_ofc_load&lt;/b&gt; method that basically creates a &lt;i&gt;link_to_function&lt;/i&gt; along with the function that we call to load the chart data into the swfobject chart.  It takes two arguments, the link text and the id of the div whose swf we will load new data into.
&lt;br /&gt;
For more information on the javascript callbacks that I setup here, you will want to view the page source and read about it further over at &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-6.php"&gt;teethgrinder's tutorial&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
Good Luck!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
  <entry xml:base="http://pullmonkey.com/">
    <author>
      <name>charlie</name>
    </author>
    <id>tag:pullmonkey.com,2008-09-21:49027</id>
    <published>2008-09-21T19:15:00Z</published>
    <updated>2008-09-23T14:17:34Z</updated>
    <category term="development" />
    <category term="Javascript" />
    <category term="Open Flash Chart Graphs" />
    <category term="projects" />
    <category term="rails" />
    <category term="tutorials" />
    <link href="http://pullmonkey.com/2008/9/21/open-flash-chart-ii-javascript-part-1" rel="alternate" type="text/html" />
    <title>Open Flash Chart II - Javascript (Part 1)</title>
<content type="html">
            This article (and the work behind it -- meaning &lt;b&gt;get the latest from &lt;a href="http://github.com/pullmonkey/open_flash_chart/tree/master"&gt;github&lt;/a&gt;&lt;/b&gt;) is generously sponsored by &lt;a href="http://harryseldon.thinkosphere.com/"&gt;Harry Seldon&lt;/a&gt; who wants to be able to pass data around using javascript.  There are quite a few benefits to this, learn more from &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-5.php"&gt;teethgrinder's tutorial on the same topic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
This example opens up a lot of possibilities and I thank Harry for pointing me to it.  So more to come on OFC and Javascript. For a taste of what is to come, check these out:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-5.php"&gt;The one I will go over in this article&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-6.php"&gt;Change data on the fly with links&lt;/a&gt; - &lt;b&gt;&lt;a href="http://pullmonkey.com/2008/9/22/open-flash-chart-ii-javascript-part-2"&gt;Discussed in Part2&lt;/a&gt;&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-js.php"&gt;Update and Save data&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart/gallery-js-ajax-2.php"&gt;Ajax calls to server&lt;/a&gt; - &lt;b&gt;&lt;a href="http://pullmonkey.com/2008/9/23/open-flash-chart-ii-javascript-part-3"&gt;Discussed in Part 3&lt;/a&gt;&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart/gallery-js-2.php"&gt;Manipulate the data through an interface&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ext-ux-ofcgxt.googlecode.com/svn/demo/Test.html"&gt;Some really cool interfaces&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Here is the graph we are after in this example:&lt;br /&gt;&lt;br /&gt;
    &lt;div&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://pullmonkey.com/projects/open_flash_chart2"&gt;More Open Flash Chart II examples.&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
And here is the code (the controller):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;TestItController&lt;/span&gt; &amp;lt; &lt;span class="co"&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;def&lt;/span&gt; &lt;span class="fu"&gt;index&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    title = &lt;span class="co"&gt;Title&lt;/span&gt;.new(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;MY TITLE&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;    bar = &lt;span class="co"&gt;BarGlass&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    bar.set_values([&lt;span class="i"&gt;1&lt;/span&gt;,&lt;span class="i"&gt;2&lt;/span&gt;,&lt;span class="i"&gt;3&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;,&lt;span class="i"&gt;5&lt;/span&gt;,&lt;span class="i"&gt;6&lt;/span&gt;,&lt;span class="i"&gt;7&lt;/span&gt;,&lt;span class="i"&gt;8&lt;/span&gt;,&lt;span class="i"&gt;9&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@chart&lt;/span&gt; = &lt;span class="co"&gt;OpenFlashChart&lt;/span&gt;.new&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@chart&lt;/span&gt;.set_title(title)&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="iv"&gt;@chart&lt;/span&gt;.add_element(bar)&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
Notice that I do not render the chart object, however I turn it into an instance variable for use in our javascript rendering of our chart.&lt;br /&gt;&lt;br /&gt;
And in your view (index.html.erb):&lt;br /&gt;
&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td title="click to toggle" class="line_numbers"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;html&amp;gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;head&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= javascript_include_tag &lt;span class="sy"&gt;:defaults&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;swfobject&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;/head&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;body&amp;gt;&lt;tt&gt;
&lt;/tt&gt;    &amp;lt;%= &lt;span class="iv"&gt;@chart&lt;/span&gt;.js_open_flash_chart_object(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;my_chart_js_1&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="i"&gt;550&lt;/span&gt;,&lt;span class="i"&gt;300&lt;/span&gt;) &lt;span class="s"&gt;&lt;span class="dl"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;&lt;tt&gt;
&lt;/tt&gt;  &amp;lt;/body&lt;/span&gt;&lt;span class="dl"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&amp;lt;&lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;html&amp;gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;br /&gt;
I do a lot behind the scenes but if you look, you will see a few new things here.&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;The data comes from the @chart.js_open_flash_chart_object(...) call which sets up a few javascript callback methods to send the data to the SWF object.  It  takes 3 required arguments div_name (the id of the div that houses the chart), width and height and one optional argument base_url which defaults to "/".&lt;/li&gt;
&lt;li&gt;If you look at the HTML source, it is quite a bit different, we simply embed the SWF object.  We do not need to point to the data method since there actually isn't one.&lt;/li&gt;
&lt;li&gt;One difference between this Rails example and php example (from teethgrinder) is that prototype which comes standard with rails, has a JSON implementation for javascript, so we do not need the json2.js file, but make sure to include prototype.js in your apps.&lt;/li&gt;
&lt;/ol&gt;
For more information on the javascript callbacks that I setup here, you will want to view the page source and read about it further over at &lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/tutorial-5.php"&gt;teethgrinder's tutorial&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
Good Luck! and Harry, I hope this helps, otherwise please drop me a line.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
</feed>
