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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
drychok
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 11
#1

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

26.06.2012, 18:53. Просмотров 792. Ответов 10
Метки нет (Все метки)

Поле размером 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; 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 18:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева (C++):

Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон - C++
Помогите, пожалуйста, отредактировать эту программу. Нужно переписать код, чтобы использовались функции. Текст задания: Поле...

Найти все четырехзначные числа, у которых все цифры различны - C++
Найти все четырехзначные числа, у которых все цифры различны.

Найти все трехзначные числа, в которых все цифры различны. - C++
Помогите, пожалуйста, решить задачу в С++. Найти все трехзначные числа, удовлетворяющие условию: все цифры различны.

Найти все четырехзначные числа, у которых все цифры различны - C++
4)Найти все четырехзначные числа, у которых все цифры различны.

Удалить все столбцы в которых нет нулевого элемента массива С++ - C++
Удалить все столбцы в которых нет нулевого элемента массива С++. #define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt; #include...

Удалить все столбцы, в которых первый элемент больше последнего - C++
Пишу на codeblocks. Раньше в других программах. Не могу поставить брейкпоинт и понять в чем ошибка. просто напросто нет печати измененного...

10
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
26.06.2012, 20:32 #2
drychok, Просматриваем нулевой столбец. Если там есть прозрачные кубики, просматриваем строки с ними пока не найдем непрозрачные. Остальные невидимы. В чем проблема?)
З.Ы. не люблю читать чужой код, люблю давать решения.
1
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; });
1
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
26.06.2012, 21:55 #4
Alt_Shift, это нормальная запись. ИМХО, читай про C++11.
1
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
26.06.2012, 22:25 #5
Цитата Сообщение от Alt_Shift Посмотреть сообщение
[](){ return rand() % 5 == 0; }
лямбда-выражения
1
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
26.06.2012, 22:36 #6
Цитата Сообщение от drychok Посмотреть сообщение
код программы, но он не рабочий посмотрите пожалуйста в чем дело
вроде же все верно работает?
1
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; })
0
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
1
drychok
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 11
27.06.2012, 00:18  [ТС] #9
Вы не поможите заменить ее на более альтернативную?
0
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; 
}
1
drychok
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 11
27.06.2012, 12:57  [ТС] #11
Всем спасибо
0
27.06.2012, 12:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 12:57
Привет! Вот еще темы с ответами:

Удалить из матрицы все столбцы, в которых нет отрицательных элементов (Проверить) - C++
Удалить из матрицы все столбцы, в которых нет отрицательных элементов int otr=0; j=0; while(j&lt;m) { { ...

Массивы. Удалить все столбцы, в которых четное количество нечетных элементов - C++
2)в двумерном массиве, элементы которого-целые числа, произвести следующие действия:удалить все столбцы, в которых четное количество...

Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] - C++
удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку . но в этом коде строчки по идеи не удаляются, а в...

Удалить все столбцы матрицы, в которых первый элемент больше последнего - C++
Спасите помогите запуталась в задаче,не получается,хотя вроде всё понятно(( Удалить все столбцы, в которых первый элемент больше...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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