#include <iostream> using namespace std; struct Point { const int q_, r_; Point(int q, int r) : q_{q}, r_{r} {} inline void print() { cout << "q:" << q_ << ", r:" << r_ << endl; } }; class PointMap { public: const int RADIUS; PointMap(int radius) : RADIUS{radius} { points = new Point**[2 * RADIUS + 1]; for (int q = -RADIUS; q <= RADIUS; ++q) { int r1 = max(-RADIUS, -q - RADIUS); int r2 = min(RADIUS, -q + RADIUS); points[RADIUS + q] = new Point*[2 * RADIUS + 1]; // r2 - r1 + 1]; for (int r = r1; r <= r2; ++r) { points[RADIUS + q][RADIUS + r] = new Point(q, r); points[RADIUS + q][RADIUS + r]->print(); } } cout << "*** Ready constuctor ***\n\n"; } ~PointMap() { cout << "*** Delete Map ***\n\n"; for (int q = -RADIUS; q <= RADIUS; ++q) { int r1 = max(-RADIUS, -q - RADIUS); int r2 = min(RADIUS, -q + RADIUS); for (int r = r1; r <= r2; ++r) { points[RADIUS + q][RADIUS + r]->print(); delete points[RADIUS + q][RADIUS + r]; } delete[] points[RADIUS + q]; } delete[] points; } void print(int row, int col) { points[RADIUS + row][RADIUS + col]->print(); } private: Point*** points; }; // class PointMap { // public: // const int DIMENSION; // PointMap(int d) : DIMENSION{d} { // points = new Point**[DIMENSION]; // for (int i = 0; i < DIMENSION; ++i) { // points[i] = new Point*[i + 1]; // for (int j = 0; j < i + 1; ++j) { // points[i][j] = new Point(i, j); // points[i][j]->print(); // } // } // cout << "*** Ready constuctor ***\n\n"; // } // ~PointMap() { // cout << "*** Delete Map ***\n\n"; // for (int i = 0; i < DIMENSION; ++i) { // for (int j = 0; j < i + 1; ++j) { // delete points[i][j]; // } // delete[] points[i]; // } // delete[] points; // } // void print(int row, int col) { // points[row][col]->print(); // } // private: // Point*** points; // }; int main() { ios::iostate status; while (true) { int DIMENSION; cout << "Radius (STR+D = Ende):"; cin >> DIMENSION; status = cin.rdstate(); if (cin.eof()) break; if (status) { cin.clear(); cin.get(); } else { PointMap* map = new PointMap(DIMENSION); // Hexagonale Map for (int q = -DIMENSION; q <= DIMENSION; ++q) { int r1 = max(-DIMENSION, -q - DIMENSION); int r2 = min(DIMENSION, -q + DIMENSION); for (int r = r1; r <= r2; ++r) map->print(q, r); } // Dreieck Map // for (int i = 0; i < DIMENSION; ++i) { // for (int j = 0; j < i + 1; ++j) map->print(i, j); // } delete map; cout << "*** main function ***\n\n"; } } }
3
Radius (STR+D = Ende):q:-3, r:0 q:-3, r:1 q:-3, r:2 q:-3, r:3 q:-2, r:-1 q:-2, r:0 q:-2, r:1 q:-2, r:2 q:-2, r:3 q:-1, r:-2 q:-1, r:-1 q:-1, r:0 q:-1, r:1 q:-1, r:2 q:-1, r:3 q:0, r:-3 q:0, r:-2 q:0, r:-1 q:0, r:0 q:0, r:1 q:0, r:2 q:0, r:3 q:1, r:-3 q:1, r:-2 q:1, r:-1 q:1, r:0 q:1, r:1 q:1, r:2 q:2, r:-3 q:2, r:-2 q:2, r:-1 q:2, r:0 q:2, r:1 q:3, r:-3 q:3, r:-2 q:3, r:-1 q:3, r:0 *** Ready constuctor *** q:-3, r:0 q:-3, r:1 q:-3, r:2 q:-3, r:3 q:-2, r:-1 q:-2, r:0 q:-2, r:1 q:-2, r:2 q:-2, r:3 q:-1, r:-2 q:-1, r:-1 q:-1, r:0 q:-1, r:1 q:-1, r:2 q:-1, r:3 q:0, r:-3 q:0, r:-2 q:0, r:-1 q:0, r:0 q:0, r:1 q:0, r:2 q:0, r:3 q:1, r:-3 q:1, r:-2 q:1, r:-1 q:1, r:0 q:1, r:1 q:1, r:2 q:2, r:-3 q:2, r:-2 q:2, r:-1 q:2, r:0 q:2, r:1 q:3, r:-3 q:3, r:-2 q:3, r:-1 q:3, r:0 *** Delete Map *** q:-3, r:0 q:-3, r:1 q:-3, r:2 q:-3, r:3 q:-2, r:-1 q:-2, r:0 q:-2, r:1 q:-2, r:2 q:-2, r:3 q:-1, r:-2 q:-1, r:-1 q:-1, r:0 q:-1, r:1 q:-1, r:2 q:-1, r:3 q:0, r:-3 q:0, r:-2 q:0, r:-1 q:0, r:0 q:0, r:1 q:0, r:2 q:0, r:3 q:1, r:-3 q:1, r:-2 q:1, r:-1 q:1, r:0 q:1, r:1 q:1, r:2 q:2, r:-3 q:2, r:-2 q:2, r:-1 q:2, r:0 q:2, r:1 q:3, r:-3 q:3, r:-2 q:3, r:-1 q:3, r:0 *** main function *** Radius (STR+D = Ende):