1. 程式人生 > >C++primer plus第六版課後程式設計練習答案11.1

C++primer plus第六版課後程式設計練習答案11.1

標頭檔案
#ifndef VECTOR_H_//避免標頭檔案的重定義,如果XX沒有被定義
#define VECTOR_H_//就定義XX,刪除可使#ifndef與#endif之間的程式碼不執行

#include<iostream>

namespace VECTOR//用來區分名字相同的變數和函式
{
	class Vector
	{
	public:
		enum Mode{RECT,POL};//Mode列舉名,RECT=0,POL=1
	private:
		double x;
		double y;
		double mag;
		double ang;
		Mode mode;
		void set_mag();
		void set_ang();
		void set_x();
		void set_y();
	public:
		Vector();
		Vector(double n1,double n2,Mode form=RECT);
		void reset(double n1,double n2,Mode form=RECT);
		~Vector();
		double xval() const {return x;}
		double yval() const {return y;}
		double magval() const {return mag;}
		double angval() const {return ang;}
		void polar_mode();
		void rect_mode();

		Vector operator+(const Vector &b)const;
		Vector operator-(const Vector &b)const;
		Vector operator-()const;
		Vector operator*(double n)const;

		friend Vector operator*(double n,const Vector &a);
		friend std::ostream &operator<<(std::ostream &os,const Vector & v);
	};
}





#endif
#include<cmath>
#include "vector.h"

using namespace std;

namespace VECTOR
{
	const double Rad_to_deg=45.0/atan(1.0);//atan(1)=45度,求1弧度等於多少度
	void Vector::set_mag()
	{
		mag=sqrt(x*x+y*y);
	}

	void Vector::set_ang()
	{
		if(0==x&&y==0)
			ang=0;
		else
			ang=atan2(y,x);
	}

	void Vector::set_x()
	{
		x=mag*sin(ang);
	}

	void Vector::set_y()
	{
		y=mag*cos(ang);
	}

	Vector::Vector()
	{
		x=y=mag=ang=0;
	}

	Vector::Vector(double n1,double n2,Mode form)
	{
		mode=form;
		if(mode==RECT)
		{
			x=n1;
			y=n2;
			set_mag();
			set_ang();
		}
		else if(mode==POL)
		{
			mag=n1;
			ang=n2/Rad_to_deg;
			set_x();
			set_y();
		}
		else
		{
			cout<<"Incorrect 3rd arguement to Vector() --";
			cout<<"vector set to 0\n";
			x=y=mag=ang=0;
			mode=RECT;
		}
	}

	void Vector::reset(double n1,double n2,Mode form)
	{
		mode=form;
		if(mode==RECT)
		{
			x=n1;
			y=n2;
			set_mag();
			set_ang();
		}
		else if(mode==POL)
		{
			mag=n1;
			ang=n2/Rad_to_deg;
			set_x();
			set_y();
		}
		else
		{
			cout<<"Incorrect 3rd arguement to Vector() --";
			cout<<"vector set to 0\n";
			x=y=mag=ang=0;
			mode=RECT;
		}
	}

	Vector::~Vector(){}

	void Vector::polar_mode()
	{
		mode=POL;
	}

	void Vector::rect_mode()
	{
		mode=RECT;
	}

	Vector Vector::operator+(const Vector &b)const
	{
		return Vector(x+b.x,y+b.y);
	}

	Vector Vector::operator-(const Vector &b)const
	{
		return Vector(x-b.x,y-b.y);
	}

	Vector Vector::operator-()const
	{
		return Vector(-x,-y);
	}

	Vector Vector::operator*(double n)const
	{
		return Vector(n*x,n*y);
	}

	Vector operator*(double n,const Vector &a)
	{
		return a*n;
	}

	ostream &operator<<(ostream &os,const Vector &v)
	{
		if(v.mode==Vector::RECT)
			os<<"(x,y)=("<<v.x<<","<<v.y<<")";
		else if(v.mode==Vector::POL)
		{
			os<<"(m,a)=("<<v.mag<<","<<v.ang*Rad_to_deg<<")";
		}
		else
			os<<"Vector object mode is invalid";
		return os;
	}



}

#include<iostream>
#include<cstdlib>
#include<ctime>
#include "vector.h"
#include<fstream>
#include<windows.h>

using namespace std;


void main()
{
	using VECTOR::Vector;
	srand(time(0));
	double direction;
	Vector step;
	Vector result(0,0);
	unsigned long steps=0;
	double target;
	double dstep;
	ofstream outfile;
	outfile.open("1.txt");
	cout<<"Enter target distance (q to quit):";
	while(cin>>target)
	{
		cout<<"Enter step length:";
		if(!(cin>>dstep))
			break;

		outfile<<"Target distance:"<<target<<" ,step size: "<<dstep<<endl;

		outfile<<steps<<": "<<result<<endl;
		while(result.magval()<target)
		{
			direction=rand()%360;
			step.reset(dstep,direction,Vector::POL);
			result=result+step;

			steps++;
			outfile<<steps<<": "<<result<<endl;
		}
		outfile<<"After "<<steps<<" steps,the subject has the following location:\n";
		outfile<<result<<endl;
		result.polar_mode();
		outfile<<" or\n"<<result<<endl;
		outfile<<"Average outward distance per step="<<result.magval()/steps<<endl;
		steps=0;
		result.reset(0,0);
		cout<<"Enter target distance (q to quit):";
	}

	cout<<"Bye!\n";
	WinExec( "notepad.exe 1.txt", SW_SHOW );//在c++程式碼中開啟檔案

	cin.clear();
	while(cin.get()!='\n')
		continue;
}


相關推薦

C++primer plus課後程式設計練習答案11.1

標頭檔案 #ifndef VECTOR_H_//避免標頭檔案的重定義,如果XX沒有被定義 #define VECTOR_H_//就定義XX,刪除可使#ifndef與#endif之間的程式碼不執行 #include<iostream> namespace VE

C++primer plus課後程式設計練習答案11.5和11.6

這兩道題是第6題包含第5題,所以第5題我就沒寫了,下面是第6題的答案 標頭檔案 #ifndef STONEWt_H_ #define STONEWt_H_ #include<iostream> class Stonewt { private: enum{L

C++primer plus課後程式設計練習答案12.5與12.6

bank是第五題的實現,bank1是第六題的實現#ifndef QUEUE_H_ #define QUEUE_H_ class Customer { private: int arrive; int processtime; public: Customer(){a

C++primer plus課後程式設計練習答案13.3

#ifndef DMA_H_ #define DMA_H_ #include <iostream> class DMA { private: char *label; int rating; protected: void setlab(const ch

C++primer plus課後程式設計練習答案10.7

標頭檔案 #ifndef PLORG_H_ #define PLORG_H_ const int limit=19; class plorg { private: char name[limit

C++PRIMER PLUS課後程式設計答案 5.6-510

5.6#include <iostream> #include <string> void main56() { using std::cout; using std::c

C++ Primer Plus編程練習---3章 處理數據(未完待續)

foo ons enter ++ har HA CI return include 1. #include <iostream> const int CONVER_FACTOR = 12; int main(int argc, char* argv[]){ in

C++ Primer Plus編程練習---5章 循環和關系表達式

AI ++ str eas prim OS ase AS stream 1、 #include <iostream> int main() { int startNum = 0; int endNum = 0; std::cout &

C++ Primer Plus編程練習---6章 分支語句和邏輯運算符

character value ati ostream wing style ces col code 1、 1 #include <iostream> 2 #include <string> 3 #include <cctype>

C Primer Plus6_原始碼+練習答案

下載地址:網盤下載C Primer Plus(第6版)中文版詳細講解了C語言的基本概念和程式設計技巧。《C Primer Plus(第6版)中文版》共17章。第1、2章介紹了C語言程式設計的預備知識。第3~15章詳細講解了C語言的相關知識,包括資料型別、格式化輸入/輸出、運算子、表示式、語句、迴圈、字元輸入和

C Primer Plus 九章課後程式設計練習答案

      1. #include<stdio.h> double n_min(double x, double y); int main(void) {     double num1, num2;  &

C Primer Plus 七章課後程式設計練習答案

1.   #include<stdio.h> int main(void) {     char ch=0;     int sap=0;//空格      int b

C++ Primer Plus程式設計練習答案

6.1 #include<stdafx.h> #include<iostream> #include<cctype> int main() { using namespace std; char ch; cout << "enter ch

c++ primer plus 程式設計練習答案五章

該章節第二題程式沒問題,但不懂為什麼 5.1 #include<stdafx.h> #include <iostream> using namespace std; int main() { int max, min; long long sum=0; co

c++ primer plus 程式設計練習答案四章

4.1 #include<stdafx.h> #include <iostream> #include<string> using namespace std; int main() { char f_name[10], l_name[10]; int

c++ Primer Plus 程式設計練習答案三章

3.1 #include<stdafx.h> #include <iostream> using namespace std; const int inch_per_feet = 12;//一英尺(inch)等於12英寸(feet) int main() { int

c++ primer plus 程式設計練習答案第二章

2.1 #include "stdafx.h" #include <iostream> using namespace std; int main() { char name[5],address[15]; cout << "enter your name\n"

C Primer Plus程式設計練習

/* 編寫一個程式,建立一個包含26個元素的陣列,並在其中儲存26個小寫字母。 然後列印陣列的所有內容 */ #include <stdio.h> #define SIZE 26 int main(void) { char alphabet[26

C++ Primer Plus程式設計練習答案 12章 類和動態記憶體分配

本章所有程式設計練習的工程原始碼可在此處下載(點選此連結下載),供大家參考交流! 1. 對於下面的類宣告: class Cow {          char name[20];          char *hobby;          double wei

C primer plus 十題 程式設計練習答案

#include<stdio.h> int main(void) { int lower = 0; // Save input value. int uper = 0; //