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; // (※)
}
}
|