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

Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева - C++

Восстановить пароль Регистрация
 
drychok
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 11
26.06.2012, 18:53     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #1
Поле размером NxM заполнено прозрачными и непрозрачными кубиками. Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева.

Вот код программы, но он не рабочий посмотрите пожалуйста в чем дело
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
#include <algorithm> 
#include <iterator> 
#include <iostream> 
#include <iomanip> 
#include <cstdlib> 
#include <ctime> 
 
using namespace std; 
 
int main() { 
    srand(time(0)); 
 
    int n, m; 
    cout << "размеры поля (n m)? "; 
    cin >> n >> m; 
 
    cout << "\nслучайная расстановка ящиков\n" 
            "(0 - прозрачный, 1 - непрозрачный):\n\n"; 
    for (int c = 1; c <= m; ++c) cout << setw(3) << c; 
    cout << endl << setw(3 * m) << setfill('-') << "" << setfill(' ') << endl; 
 
    bool **field = new bool *[n]; 
    for (int r = 0; r < n; ++r) { 
        field[r] = new bool[m]; 
        generate_n(field[r], m, [](){ return rand() % 5 == 0; }); 
        cout << "  "; 
        copy(field[r], field[r] + m, ostream_iterator< bool >(cout, "    ")); 
        cout << endl; 
    } 
 
    int *first_opaque = new int[n]; 
    for (int r = 0; r < n; ++r) { 
        first_opaque[r] = find(field[r], field[r] + m, true) - field[r]; 
    } 
 
    cout << "\nискомые столбцы:"; 
    for (int c = 1; c < m; ++c) { 
        bool have_opaque = false; 
        bool all_invisible = true; 
        for (int r = 0; r < n; ++r) { 
            if (field[r][c]) { 
                have_opaque = true; 
                if (c <= first_opaque[r]) { 
                    all_invisible = false; 
                    break; 
                } 
            } 
        } 
        if (have_opaque && all_invisible) cout << " " << c + 1; 
    } 
    
    return 0; 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 18:53     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева
Посмотрите здесь:

В двумерном массиве удалить все столбцы в которых первый элемент больше последнего C++
C++ Удалить из матрицы все столбцы, в которых нет отрицательных элементов (Проверить)
C++ Удалить все столбцы матрицы, в которых первый элемент больше последнего
Массивы. Удалить все столбцы, в которых четное количество нечетных элементов C++
Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] C++
C++ Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон
Найти все тройки натуральных чисел, для которых x^3+y^3=z^3 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
26.06.2012, 20:32     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #2
drychok, Просматриваем нулевой столбец. Если там есть прозрачные кубики, просматриваем строки с ними пока не найдем непрозрачные. Остальные невидимы. В чем проблема?)
З.Ы. не люблю читать чужой код, люблю давать решения.
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
26.06.2012, 21:49     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #3
вы уверены, что в 25й строке у вас все верно? Лично меня смущают квадратные скобки на месте которых, вроде как, должно быть имя функции.
generate_n(field[r], m, [](){ return rand() % 5 == 0; });
darkknight2008
 Аватар для darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
26.06.2012, 21:55     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #4
Alt_Shift, это нормальная запись. ИМХО, читай про C++11.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
26.06.2012, 22:25     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #5
Цитата Сообщение от Alt_Shift Посмотреть сообщение
[](){ return rand() % 5 == 0; }
лямбда-выражения
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
26.06.2012, 22:36     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #6
Цитата Сообщение от drychok Посмотреть сообщение
код программы, но он не рабочий посмотрите пожалуйста в чем дело
вроде же все верно работает?
drychok
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 11
27.06.2012, 00:11  [ТС]     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #7
Дело в том что C++Builder 6 версии ругается вот на эту строку--- generate_n(field[r], m, [](){ return rand() % 5 == 0; })
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
27.06.2012, 00:14     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #8
Цитата Сообщение от drychok Посмотреть сообщение
generate_n(field[r], m, [](){ return rand() % 5 == 0; })
C++Builder 6 не поддерживает стандарт С++11
drychok
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 11
27.06.2012, 00:18  [ТС]     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #9
Вы не поможите заменить ее на более альтернативную?
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
27.06.2012, 06:58     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #10
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
#include <iostream> 
#include <iomanip> 
#include <iterator>
#include <algorithm> 
#include <locale>
#include <cstdlib> 
#include <ctime>  
using namespace std; 
 
bool st() {
    return rand() % 5 == 0; 
}
 
int main() { 
    setlocale(LC_ALL,"Russian");
    srand(unsigned(time(0))); 
 
    int n, m; 
    cout << "размеры поля (n m)? "; 
    cin >> n >> m; 
 
    cout << "\nслучайная расстановка ящиков\n" 
        "(0 - прозрачный, 1 - непрозрачный):\n\n"; 
    for (int c = 1; c <= m; ++c) cout << setw(3) << c; 
    cout << endl << setw(3 * m) << setfill('-') << "" << setfill(' ') << endl; 
 
    bool **field = new bool *[n]; 
    for (int r = 0; r < n; ++r) { 
        field[r] = new bool[m]; 
        generate_n(field[r], m, st); 
        cout << "  "; 
        copy(field[r], field[r] + m, ostream_iterator< bool >(cout, "    ")); 
        cout << endl; 
    } 
 
    int *first_opaque = new int[n]; 
    for (int r = 0; r < n; ++r) { 
        first_opaque[r] = find(field[r], field[r] + m, true) - field[r]; 
    } 
 
    cout << "\nискомые столбцы:"; 
    for (int c = 1; c < m; ++c) { 
        bool have_opaque = false; 
        bool all_invisible = true; 
        for (int r = 0; r < n; ++r) { 
            if (field[r][c]) { 
                have_opaque = true; 
                if (c <= first_opaque[r]) { 
                    all_invisible = false; 
                    break; 
                } 
            } 
        } 
        if (have_opaque && all_invisible) cout << " " << c + 1; 
    } 
 
    return 0; 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 12:57     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева
Еще ссылки по теме:

C++ Удалить все столбцы, в которых первый элемент больше последнего
C++ Найти все четырехзначные числа, у которых все цифры различны
Найти все тройки натуральных чисел, для которых x^2+y^2=z^2 C++
C++ Найти все четырехзначные числа, у которых все цифры различны
Удалить все столбцы в которых нет нулевого элемента массива С++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
drychok
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 11
27.06.2012, 12:57  [ТС]     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева #11
Всем спасибо
Yandex
Объявления
27.06.2012, 12:57     Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева
Ответ Создать тему
Опции темы

Текущее время: 11:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru