落書きノート

ふと自分が気になった事を書いてます

C++で問題を解く

ポインタの項目です。なかなか難しいですね。

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

using namespace std;

void print2d(int a[][5], int n){
  int max_width[5];
  for(int i = 0; i < 5; i++){
    max_width[i] = 0;
    for(int j = 0; j < n; j++){
      int value = a[j][i];
      int width = (value < 0) ? 1 : 0;
      do{
        width++;
        value /= 10;
      }while(value != 0);
      if(width > max_width[i])
        max_width[i] = width;
    }
  }

  for(int i = 0; i < n; i++){
    for(int j = 0; j < 5; j++){
      cout << setw(max_width[j]) << left << a[i][j] << ' ';
    }
    cout << endl;
  }
}

int main(void){
  int x[2][5];
  int y[4][5];

  srand(time(NULL));

  for(int i = 0; i < 2; i++){
    for(int j = 0; j < 5; j++){
      x[i][j] = rand() - (RAND_MAX / 2);
    }
  }

  cout << "----- x -----" << endl;

  print2d(&x[0], 2);

  for(int i = 0; i < 4; i++){
    for(int j = 0; j < 5; j++){
      y[i][j] = rand() - (RAND_MAX / 2);
    }
  }

  cout << "----- y -----" << endl;

  print2d(&y[0], 4);

  return 0;
}



#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

using namespace std;

void print2dr(int a[][5], int n){
  int max_width[5];
  for(int i = 0; i < 5; i++){
    max_width[i] = 0;
    for(int j = 0; j < n; j++){
      int value = a[j][i];
      int width = (value < 0) ? 1 : 0;
      do{
        width++;
        value /= 10;
      }while(value != 0);
      if(width > max_width[i])
        max_width[i] = width;
    }
  }

  for(int i = 0; i < n; i++){
    for(int j = 0; j < 5; j++){
      cout << setw(max_width[j]) << right << a[i][j] << ' ';
    }
    cout << endl;
  }
}

int main(void){
  int x[2][5];
  int y[4][5];

  for(int i = 0; i < 2; i++){
    for(int j = 0; j < 5; j++){
      x[i][j] = rand() - (RAND_MAX / 2);
    }
  }

  for(int i = 0; i < 4; i++){
    for(int j = 0; j < 5; j++){
      y[i][j] = rand() - (RAND_MAX / 2);
    }
  }

  cout << "----- x -----" << endl;
  print2dr(&x[0], 2);
  cout << "----- y -----" << endl;
  print2dr(&y[0], 4);

  return 0;
}




#include <iostream>

using namespace std;

void fill(int* p, int n, int v){
  for(int i = 0; i < n; i++)
    *(p + i) = v;
}

int main(void){
  int x[5];
  int v;

  for(int i = 0; i < 5; i++){
    x[i] = i + 1;
    cout << "x[" << i << "] = " << x[i] << endl;
  }

  cout << "全要素に代入する値:";
  cin >> v;

  fill(&x[0], 5, v);

  for(int i = 0; i < 5; i++){
    cout << "x[" << i << "] = " << x[i] << endl;
  }

  return 0;
}




#include <iostream>

using namespace std;

void fill(int* p, int n, int v){
  while(n-- > 0)
    *p++ = v;
}

int main(void){
  int x[5];
  int v;

  for(int i = 0; i < 5; i++){
    x[i] = i + 1;
    cout << "x[" << i << "] = " << x[i] << endl;
  }

  cout << "全要素に代入する値:";
  cin >> v;

  fill(x, 5, v);

  for(int i = 0; i < 5; i++){
    cout << "x[" << i << "] = " << x[i] << endl;
  }

  return 0;
}




#include <iostream>

using namespace std;

void ary_cpy(int* a, const int* b, int n){
  while(n-- > 0)
    *a++ = *b++;
}

int main(void){
  const int n = 5;
  int x[n], y[n];

  for(int i = 0; i < 5; i++){
    y[i] = i + 1;
    cout << "y[" << i << "] = " << y[i] << endl;
  }

  ary_cpy(x, y, n);

  cout << "全要素を配列xにコピーしました。" << endl;

  for(int i = 0; i < 5; i++){
    cout << "x[" << i << "] = " << x[i] << endl;
  }

  return 0;
}