Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Куб состоит из n[SUP]3[/SUP] прозрачных и не прозрачных элементарных кубиков. Имеется ли хотя бы один просвет по каждому из трех измерений? Если это т - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Объединение матриц с чередованием строк http://www.cyberforum.ru/cpp-beginners/thread743412.html
Помогите, пожалуйста, с задачкой. Ввести с клавиатуры матрицы А и В 3*3 каждая. Вывести матрицу С вида: а00 а01 а02 0 0 0 б00 б01 б02 0 0 0 а10 а11 а12 0 0 0 б10 б11 б12 0 0 0 а20 а21 а22 0 0 0...
C++ Каждый из элементов x[SUB]i[/SUB] массива X(n) заменить средним значением первых i элементов этого массива Задание: Каждый из элементов xi массива X(n) заменить средним значением первых i элементов этого массива. Ребят, помогите решить вот такую задачку, пожалуйста. Она простая, но я ещё не въехал в... http://www.cyberforum.ru/cpp-beginners/thread743410.html
C++ Применение открывающих и закрывающих тегов в С++
Здравствуйте! Подскажите, пожалуйста, для чего при описании класса применяются слова, заключенные в теги, например, ///<summary> ///</summary> и что это означает. Пробовал найти в имеющейся...
Удаление из динамического массива C++
Сделать динамическую строку(массив).Удалить из нее все восклицательные знаки кроме первого. Например: Privet mir!!!!Kak dela!!!!! Privet mir!Kak dela! т.е. удалить восклицательные знаки и сдвинуть...
C++ Все ненулевые элементы матрицы D(k,l) расположить в начале массива E(k∙l) и подсчитать из количество http://www.cyberforum.ru/cpp-beginners/thread743401.html
Задание: Все ненулевые элементы матрицы D(k,l) расположить в начале массива E(k∙l) и подсчитать из количество. Ребят, помогите решить вот такую задачку, пожалуйста. Она ...
C++ Две одинаковые функции Всем привет! Я решил создать программу с OpenGL, подключив библиотеку glut. Затем мне понадобилась библиотека cstdlib для rand. Я подключил и ее, но при компиляции выдает ошибку, что есть одинаковая... подробнее

Показать сообщение отдельно
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
06.02.2013, 19:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <vector>
#include <ctime>
 
#define N 5             // задаём размер куба
using std::cout; using std::cin; using std::endl; using std::vector;
 
struct point
{
    int x, y;
    point (int X, int Y) 
    {
        x = X;
        y = Y;
    }
};
 
void showCube(const bool cube[N][N][N])
{
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            for (int k = 0; k < N; ++k) {
                cout << cube[i][j][k] << " ";
            }
            cout << endl;
        }
        cout << endl;
        cout << endl;
    }
}
 
void rift(const bool cube[N][N][N], vector<point>& vecX, vector<point>& vecY, vector<point>& vecZ)
{
    bool flatX[N][N], flatY[N][N], flatZ[N][N]; // объявляем три плоскости при рассмотрении куба
    for (int a = 0; a < N; ++a) {               // и инициализируем их прозрачными кубиками (false)
        for (int b = 0; b < N; ++b) {
            flatX[a][b] = false;      // false - прозрачный квадрат
            flatY[a][b] = false;      // true - непрозрачный квадрат
            flatZ[a][b] = false;
        }
    }
 
    for (int i = 0; i < N; ++i) { // рассматриваем куб с 3-х сторон направлений координатных осей
        for (int j = 0; j < N; ++j) {
            for (int k = 0; k < N; ++k) {
                if (cube[i][j][k] == true)
                {
                    flatX[j][k] = true;  // заполняем плоскости при нахождении 
                    flatY[i][k] = true;  // каждого непрозрачного квадрата
                    flatZ[i][j] = true;
                }
            }
        }
    }
 
    for (int a = 0; a < N; ++a) {
        for (int b = 0; b < N; ++b) {  // проходимся по каждой обработанной плоскости ещё раз и ищём в них просветы
            if (flatX[a][b] == false)  // если находим,
                vecX.push_back(point(a, b));  // то добавляем точку с нашими координатами в вектор, соответствующий нашей плоскости
            if (flatY[a][b] == false)
                vecY.push_back(point(a, b));
            if (flatZ[a][b] == false)
                vecZ.push_back(point(a, b));
        }
    }
 
}
 
void showVector(const vector<point>& vec) {
    if (vec.size() == 0) {
        cout << "Нет просветов" << endl;
        return;
    }
    for (vector<point>::size_type i = 0; i != vec.size(); ++i) {
        cout << "(" << vec[i].x << ", " << vec[i].y << "). ";
    }
    cout << endl;
}
 
int main()
{
    setlocale(0, "");
    srand((unsigned)time(NULL));
 
    bool cube[N][N][N];    // X -> i, Y -> j, Z -> k
    vector<point> vecX, vecY, vecZ;
 
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            for (int k = 0; k < N; ++k) {
                cube[i][j][k] = (rand()%2 != 0);
            }
        }
    }
 
    showCube(cube);
    rift(cube, vecX, vecY, vecZ);
    cout << "Для плоскости со стороны оси X" << endl;
    showVector(vecX);
    cout << "Для плоскости со стороны оси Y" << endl;
    showVector(vecY);
    cout << "Для плоскости со стороны оси Z" << endl;
    showVector(vecZ);
 
    system("PAUSE");
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru