<html>

<head><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- MyFirstUnitAd -->
<ins class="adsbygoogle"
     style="display:inline-block;width:970px;height:250px"
     data-ad-client="ca-pub-5778386704669218"
     data-ad-slot="1503492166"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Callback</title>
</head>

<body>



<p align="left"><span lang="en-ca"><font size="6" color="#FF0000"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Simple Vector</b></font></span></p>

<div align="left">
  <pre><b><font color="#ff0000" size="5">A. First Edition</font></b></pre>
</div>
<div align="left">
  <pre><b>This is<span lang="en-ca"> really a trivial practice for Vector which I find so difficult to memorize. So, I decide to write a simple</span></b></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>code to help myself to memorize them. </b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">B</span>.<span lang="en-ca"><a name="problem"></a>The problem</span></font></b></pre>
</div>
<p ALIGN="LEFT"><span lang="en-ca"><font size="2"><b>What is the basic operation 
of Vector?</b></font></span></p>
<div align="left">
  <b><font color="#ff0000" size="5"><span lang="en-ca"><a name="explain"></a>C</span>.<span lang="en-ca">The
  </span></font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>idea of 
  program</b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  　</div>
<div align="left">
  <span lang="en-ca"><font size="2"><b>There is only one point worth mentioning: 
  The undetermined argument: .... I wonder if there are many people who</b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  <span lang="en-ca"><font size="2"><b>are familiar of this kind of argument 
  such that you may input arbitrary number of arguments.</b></font></span></div>
<div align="left">
  　</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5">D.<span lang="en-ca"><a name="Method"></a>The </span>major functions</font></b></pre>
</div>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">E</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>Further improvement</b></font></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">F</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>File listing</b></font></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><font size="4" color="#FF0000"><b>project client:</b></font></span></pre>
</div>
<div align="left">
  <pre><font size="3"><b>1<span lang="en-ca">. vector</span></b></font><span lang="en-ca"><font size="3"><b>.h</b></font></span></pre>
  <pre><span lang="en-ca"><font size="3"><b>2</b></font></span><font size="3"><b><span lang="en-ca">. vector</span></b></font><span lang="en-ca"><font size="3"><b>.cpp</b></font></span></pre>
  <pre><span lang="en-ca"><font size="3"><b>3</b></font></span><font size="3"><b><span lang="en-ca">. main</span></b></font><span lang="en-ca"><font size="3"><b>.cpp</b></font></span></pre>
  <pre>　</pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: vector.h</b></font></span></pre>
</div>
<pre>#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;


class Vector
{
	friend Vector operator *(double scalar, const Vector&amp; v);
private:
	int degree;
	double* tuples;	
	//this is stupid way for passing result in operator +
	//static Vector result;
public:
	void set(double num1,...);
	//Vector(int defaultDegree=3, ...);
	Vector(int defaultDegree=3);
	~Vector();
	void display();
	double norm() const;
	Vector unit();
	bool orthogonal(const Vector&amp; other);
	double cos(const Vector&amp; other);
	Vector project(const Vector&amp; other);
	double distance(const Vector&amp; other);
	Vector operator+(const Vector&amp; other);
	Vector operator-(const Vector&amp; other);
	const Vector&amp; operator=(const Vector&amp; other);
	const Vector&amp; operator*(double scalar);
	double operator*(const Vector&amp; other);
};

</pre>
<pre>
</pre>
<pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: vector.cpp</b></font></span></pre>
<pre>#include &quot;vector.h&quot;
#include &lt;stdarg.h&gt;
#include &lt;math.h&gt;


Vector operator *(double scalar, const Vector&amp; v)
{
	Vector result(v.degree);
	for (int i=0; i&lt;result.degree; i++)
	{
		result.tuples[i]=v.tuples[i]*scalar;
	}
	return result;
}


//Vector Vector::result;

Vector::~Vector()
{
	//delete []tuples;
	//tuples=NULL;
}

Vector::Vector(int defaultDegree):degree(defaultDegree)
{
	tuples=new double[degree];
}


double Vector::norm() const
{
	double result=0;
	for (int i=0; i&lt;degree; i++)
	{
		result+=tuples[i]*tuples[i];
	}
	return sqrt(result);
}

Vector Vector::operator -(const Vector&amp; other)
{
	if (degree!=other.degree)
	{
		printf(&quot;degree not same\n&quot;);
		exit(1);
	}
	Vector result(degree);
	for (int i=0; i&lt;degree; i++)
	{
		result.tuples[i]=tuples[i]-other.tuples[i];
	}
	return result;
}

Vector Vector::project(const Vector&amp; other)
{
	return cos(other) * other;
}

double Vector::distance(const Vector&amp; other)
{
	return (this-&gt;operator -(other)).norm();
}

double Vector::cos(const Vector&amp; other)
{
	return (this-&gt;operator *(other))/(norm()*other.norm());
}


bool Vector::orthogonal(const Vector&amp; other)
{
	return this-&gt;operator *(other)==0;
}

Vector Vector::unit() 
{
	return this-&gt;operator *(1/this-&gt;norm());
}

void Vector::set(double num1, ...)
{
	double* ptr=&amp;num1;
	
	for (int i=0; i&lt;degree; i++)
	{
		tuples[i]=*ptr;
		ptr++;
	}
	
}

void Vector::display()
{
	printf(&quot;(&quot;);
	for (int i=0; i&lt;degree-1; i++)
	{
		printf(&quot;%.3f,&quot;, tuples[i]);
	}
	printf(&quot;%.3f)\n&quot;, tuples[degree-1]);
}



/*
Vector::Vector(int defaultDegree, ...):degree(defaultDegree)
{
	char* ptr=(char*)&amp;defaultDegree;
	tuples=new double[degree];
	//double d=num1;
	//va_list marker;

	//va_start( marker, num1 );  
	ptr+=sizeof(int);
	for (int i=0; i&lt;degree; i++)
	{
		//printf(&quot;num %d: %e\n&quot;, i, *(double*)(ptr));
		tuples[i]=*(double*)(ptr);
		ptr+=sizeof(double);
	}
}
*/

Vector Vector::operator +(const Vector&amp; other)
{
	if (degree!=other.degree)
	{
		printf(&quot;degree not same\n&quot;);
		exit(1);
	}
	Vector result(degree);
	for (int i=0; i&lt;degree; i++)
	{
		result.tuples[i]=tuples[i]+other.tuples[i];
	}
	return result;
}

const Vector&amp; Vector::operator =(const Vector&amp; other)
{
	degree=other.degree;
	for (int i=0; i&lt;degree; i++)
	{
		tuples[i]=other.tuples[i];
	}
	return *this;
}

const Vector&amp; Vector::operator *(double scalar)
{
	for (int i=0; i&lt;degree; i++)
	{
		tuples[i]*=scalar;
	}
	return *this;
}

double Vector::operator *(const Vector&amp; other)
{
	if (degree!=other.degree)
	{
		printf(&quot;degree not same!\n&quot;);
		exit(1);
	}
	double result=0;
	for (int i=0; i&lt;degree; i++)
	{
		result+=tuples[i]*other.tuples[i];
	}
	return result;
}
		
</pre>
<pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: main.cpp</b></font></span></pre>
<pre>#include &quot;vector.h&quot;

int main()
{
	Vector v;
	v.set(3.4, 5.6, 8.0);
	v.display();
	Vector u;
	u=v;


	u.display();
	u=u+v;
	u.display();
	printf(&quot;result of scalar 5.3: %.3f\n&quot;, u*v);
	printf(&quot;u.cos(v)=%.3f\n&quot;, u.cos(v));
	return 0;
}</pre>
<pre><span lang="en-ca"><font color="#0000FF"><b>What is the result?</b></font></span></pre>
<p>(3.400,5.600,8.000)<br>
(3.400,5.600,8.000)<br>
(6.800,11.200,16.000)<br>
result of scalar 5.3: 213.840<br>
u.cos(v)=1.000<br>
Press any key to continue</p>
<pre>
</pre>
<pre>　</pre>

<pre></pre>

<pre></pre>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                   
&nbsp;&nbsp;&nbsp; <a href="game24.htm">                  







                       <img src="picture/back.gif" style="border: medium none" alt="back.gif (341 bytes)" width="32" height="35"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<a href="index.htm">
<img src="picture/up.gif" style="border: medium none" alt="up.gif (335 bytes)" width="35" height="32"></a>       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                         
<img src="picture/next.gif" style="border: medium none" alt="next.gif (337 bytes)" width="32" height="35">          


</p>

</body>

</html>