C/C++

Задачи по динамической памяти. C++

Дайте задачу пожалуйста
да любая настоящая задача.
Пусть есть Объект - набор треугольников.
Далее, тебе дают список Объектов и настройки камеры.
Задача: собрать такой список объектов, что
1) В нем есть только те объекты, что видны в камере
2) Они отсортированы по важности: сначала идут самые большие и расположенные по центру камеры, а мелкие и по краям - в конце.

Дополнительно:
Далее, каждый раз задаем новые настройки камеры (оригинальный список не меняем). Для каждого вызова после первого надо сгенерить еще и список тех объектов, что были в предыдущем, но отсутствуют в этом.
РС
Расим Солтанов
38 458
Лучший ответ
Вот задача математической физики на установившееся распределение температур ограниченного тела простой конфигурации с постоянной неоднородной температурой на его границе. Вводятся количество узлов, длина, ширина, высота и температуры на шести гранях тела, а выводится единственный параметр - температура в центре тела вместе с количеством итераций:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std; double h; int m(double x)
{ int n = floor(x / h); return (n & 1) ? n : n + 1; }
int main()
{
double a, b, c, d1, d2, s, hx, hy, hz, u1, u2, u3,
u4, u5, u6, v; int i, j, k, l, nx, nxx, ny, nyy, nz, nzz, N;
cout << "N a b c u1 u2 u3 u4 u5 u6:" << endl;
cin >> N >> a >> b >> c >> u1 >> u2 >> u3 >> u4
>> u5 >> u6; h = cbrt((a * b * c) / N); cout <<
"h = " << setprecision(12) << fixed << setw(13)
<< h << endl; v = (u1 + u2 + u3 + u4 + u5 + u6) / 6.;
nx = m(a); ny = m(b); nz = m(c);
double ***u = new double **[nx];
for (i = 0; i < nx; i++) { u[i] = new double *[ny];
for (j = 0; j < ny; j++) u[i][j] = new double [nz]; }
hx = a / (nx - 1.); hy = b / (ny - 1.); hz = c / (nz - 1.);
nxx = nx - 1; nyy = ny - 1; nzz = nz - 1;
d1 = pow(hx / hy, 2); d2 = pow(hx / hz, 2);
s = 0.5 / (1. + d1 + d2); for (j = 0; j < ny; j++)
for (k = 0; k < nz; k++)
{ u[0][j][k] = u1; u[nxx][j][k] = u2; }
for (i = 1; i < nxx; i++) for (k = 0; k < nz; k++ )
{ u[i][0][k] = u3; u[i][nyy][k] = u4; }
for (i = 1; i < nxx; i++) for (j = 1; j < nyy; j++)
{ u[i][j][0] = u5; u[i][j][nzz] = u6; }
for (i = 1; i < nxx; i++) for (j = 1; j < nyy; j++)
for (k = 1; k < nzz; k++) u[i][j][k] = v;
for (l = 1; l < 100000; l++) { for (i = 1; i < nxx; i++)
for (j = 1; j < nyy; j++) for (k = 1; k < nzz; k++)
u[i][j][k] = (u[i - 1][j][k] +u[i + 1][j][k] + d1 *
(u[i][j - 1][k] + u[i][j + 1][k]) + d2 *
(u[i][j][k - 1] + u[i][j][k + 1])) * s; if (l % 1000 == 0)
cout << setw(6) << l << setw(20) <<
u[nx / 2][ny / 2][nz / 2] << endl; }
}
Как видно, тут используется трёхмерный динамический массив, а вот некоторые результаты: