int n; double x[n]; |
#include <iostream> using namespace std; double average(double *x, int n); int main(){ double *x; // (※) int n; cout << "配列のサイズ?"; cin >> n; x = new double[n]; // (※) for(int i=0 ; i<n ; i++){ cout << i << "番目の要素?"; cin >> x[i]; } cout << "平均は" << average(x,n) << "です。\n"; delete[] x; // (※) return 0; } double average(double *x, int n){ double sum=0; for(int i=0 ; i<n ; i++){ sum = sum + x[i]; } sum = sum/n; return sum; } |
#include <iostream> using namespace std; class samp{ private: double *x; int n; public: samp(int i){ n=i; x = new double[n]; } ~samp(){ delete[] x;} void set_x(int i, double d){ x[i] = d;} double average(){ double sum=0; for(int i=0 ; i<n ; i++){ sum = sum + x[i]; } sum = sum/n; return sum; } }; int main(){ int n; double d; cout << "配列のサイズ?"; cin >> n; samp ob(n); for(int i=0 ; i<n ; i++){ cout << i << "番目の要素?"; cin >> d; ob.set_x(i,d); } cout << "平均は" << ob.average() << "です。\n"; return 0; } |
#include <iostream> using namespace std; double average(); double *x; int n; int main(){ (以下略) |
#include <iostream> #include <cstdlib> // for exit(1) using namespace std; class array{ // クラス宣言 char *p; // 配列の先頭を指すポインタ int size; public: array(); // デフォルトコンストラクタ array(int sz); // 要素数を指定するコンストラクタ array(const array &a); // コピーコンストラクタ ~array(){ delete[] p;} // デストラクタ array &operator=(const array &a); char &operator[](int i); // [] 演算子の多重定義 int getsize(){ return size; } // 配列のサイズ取得 }; array::array(){ // デフォルトコンストラクタ p = new char[10]; if(!p) exit(1); size = 10; cout << "デフォルトコンストラクタ\n"; } array::array(int sz){ // 要素数を指定するコンストラクタ p = new char[sz]; if(!p) exit(1); size = sz; cout << "要素数を指定するコンストラクタ\n"; } array::array(const array &a){ // コピーコンストラクタ size = a.size; p = new char[size]; if(!p) exit(1); for(int i=0 ; i<a.size ; i++) p[i] = a.p[i]; // 内容をコピー cout << "コピーコンストラクタ\n"; } array &array::operator=(const array &a){ delete[] p; size = a.size; p = new char[size]; if(!p) exit(1); for(int i=0 ; i<a.size ; i++) p[i] = a.p[i]; // 内容をコピー cout << "代入演算子\n"; return(*this); } char &array::operator[](int i){ // [] 演算子の多重定義 if(i<0){ cout << "配列の範囲から外れています!"; return p[0]; }else if(i>=size){ cout << "配列の範囲から外れています!"; return p[size-1]; }else{ return p[i]; } } |
class queue{ array p; int tos; int tos2; int size; public: queue(); // デフォルトコンストラクタ queue(int n); // 配列のサイズを指定するコンストラクタ void push(char ch); // queue に文字をプッシュ char pop(); // queue から文字をポップ }; // デフォルトコンストラクタ queue::queue():p(){ tos = tos2 = 0; size = p.getsize(); } // 配列のサイズを指定するコンストラクタ queue::queue(int n):p(n){ tos = tos2 = 0; size = p.getsize(); } // queue に文字をプッシュ void queue::push(char ch){ if(tos==size){ cout << "queue はいっぱいです。\n"; }else{ p[tos] = ch; tos++; } } // queue から文字をポップ char queue::pop(){ if(tos2==tos){ cout << "queue は空です。\n"; return '\0'; }else{ tos2++; return p[tos2-1]; } } |
一度値をポップすると、その領域は二度と使われないから。 |
class queue{ array p; int tos; int tos2; int size; bool isFull; // (※) public: queue(); // デフォルトコンストラクタ queue(int n); // 配列のサイズを指定するコンストラクタ void push(char ch); // queue に文字をプッシュ char pop(); // queue から文字をポップ }; // デフォルトコンストラクタ queue::queue():p(){ tos = tos2 = 0; size = p.getsize(); isFull = false; // (※) } // 配列のサイズを指定するコンストラクタ queue::queue(int n):p(n){ tos = tos2 = 0; size = p.getsize(); isFull = false; // (※) } // queue に文字をプッシュ void queue::push(char ch){ if(tos==tos2 && isFull){ // (※) cout << "queue はいっぱいです\n"; }else{ p[tos] = ch; tos++; if(tos==size){ // (※) tos=0; // (※) } // (※) if(tos==tos2){ // (※) isFull = true; // (※) } // (※) } } // queue から文字をポップ char queue::pop(){ if(tos2==tos && !isFull){ // (※) !isFull は isFull==false と同じ cout << "queue は空です。\n"; return '\0'; }else{ char returnvalue = p[tos2]; // (※) tos2++; // (※) if(tos2==size){ // (※) tos2=0; // (※) } // (※) if(tos2==tos){ // (※) isFull = false; // (※) } // (※) return returnvalue; // (※) } } |