Pentagonal數列問題——2.2

問題:練習2.2pentagonal數列的求值公式是P(n)=n(3n-1)/2,藉此產生1,5,12,22,35等元素值。試定義一個函數,利用上述公式,將產生的元素放到用戶傳入的vector中,元素個數由用戶指定。請檢查元素個數的有效性。接下來編寫第二個函數,能夠將給定的vector的所有元素一一打印出來。此函數的第二參數接受一個字符串,便是存放在vector內的數列的類型,最後再寫一個main()測試上述兩個函數。

程序:

#include<vector>
#include<iostream>
#include<string>
using namespace std;
bool penta_elem(vector<int>&vec,int pos);
void display_message(vector<int>&,const string&,ostream &os=cout);

bool penta_elem(vector<int>&vec,int pos)//pentagognal sequence calculation formula
{
    if(pos<=0||pos>800)//check the position
    {
        cout<<"the position is invalid"<<endl;
        return false;       
    }

    for(int ix=1;ix<=pos;++ix)
        vec.push_back(ix*(3*ix-1)/2);                   
    return true;

}

void display_message(vector&vec,const string &title,ostream &os)//output and print’ function
{

cout<<title<<endl;
for(int ix=0;ix<vec.size();++ix)
    cout<<vec[ix]<<" ";
cout<<endl;

}

int main()
{
int pos;
bool more=true;//use for inputing the position continuous
char again;//judge user whether or not to continuous

while(more)
{
cout<<"Please enter a  position:"<<endl;
cin>>pos;

vector<int>vec;
string title="pentagonal sequence";
//ostream &os=cout;

penta_elem(vec,pos);
display_message(vec,title);

 cout<<"do you want to continue?'Y/N'"<<endl;
 cin>>again;
 if(again!='Y'&&again!='y')
     more=false;
}

}

筆記:
1.vector聲明可以不寫using std::vector.
2.void display_message(vector&,const string&,ostream &os=cout);在聲明的時候就應該將ostream &os=cout初始化,在之後就可以不用初始化了。
調用這個函數需要在主函數中寫明vectorvec;
string title=”pentagonal sequence”;
3.1>d:\cjj\cjjpractise\cjjpractise\practise2.2_pentagonal_answer.cpp(27): warning C4018: “<”: 有符號/無符號不匹配——————出現這個原因是在容器說明中 被定義爲: unsigned int 類型, 而j是int 類型 所以會出現: 有符號/無符號不匹配 警告 ,錯誤改正 : 定義j爲unsigned 類型後就可以了
4,用戶不斷輸入新的位置,不會每次都需要重新運行的方法是:
bool more=true;//use for inputing the position continuous
char again;//judge user whether or not to continuous

while(more)
{
cout<<"Please enter a  position:"<<endl;
cin>>pos;

//function
 cout<<"do you want to continue?'Y/N'"<<endl;
 cin>>again;
 if(again!='Y'&&again!='y')
     more=false;
}

5.調用計算函數的格式
vectorvec;
string title=”pentagonal sequence”;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章