Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 45
1

Поле клеток

04.06.2022, 17:04. Показов 865. Ответов 13

Author24 — интернет-сервис помощи студентам
Здравствуйте , подскажите пожалуйста , есть двумерный массив , размер 2 столба по 3 элемента. Заполненный рандомными числами до 10.

Одна цифра - одна клетка (условно).

Нужно сделать проверку : если текущий номер клетки увеличен на 1, есть вокруг нее, то увеличить номер клетки на 1, иначе оставить, каким был.

Пример:
1 5 9
2 6 5

Вокруг 1 есть 2 и 5 , 2 больше 1 на 1 , значит нужно к 1 + 1:
2 5 9
2 6 5

И так сделать проверку для каждой цифры (клетки) , потом вывести результат. Как сделать саму проверку?
Вот код:
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
#include <iostream>
#include <Windows.h>
#include <string>
#include <iomanip>
 
using namespace std;
 
class Cell1
{
private:
    int kol_vo;
public:
    void cell1()
    {
        const int DIM1 = 2;
        const int DIM2 = 3;
 
        int array[DIM1][DIM2];
 
        for (int i = 0; i < DIM1; i++) {
            for (int j = 0; j < DIM2; j++) {
                array[i][j] = rand() % 11;
            }
        }
        for (int i = 0; i < DIM1; i++) {
            for (int j = 0; j < DIM2; j++) {
                cout << array[i][j] << " ";
            }
            cout << endl;
        }
        cout << endl;
 
        int count = 0;
        for (int i = 0; i < DIM1; i++)
        {
            for (int j = 0; j < DIM2; j++)
            {
                if (array[i] == array[i])
                {
                    count++;
                }
            }
        }
        cout << "Один.числа: " << count << " " << endl;
    }
};
 
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    bool w = true;
    while (w)
    {
        int menu;
        cout << "Выберите размер клетки:" << endl << endl
             << "1. Маленькая клетка." << endl
             << "2. Средняя клетка." << endl
             << "3. Большая клетка." << endl
             << "0. Завершить программу." << endl << endl;
        cin >> menu;
        cout << endl;
        switch (menu)
        {
        case 0:
        {
            w = false;
            break;
        }
        case 1:
        {
            Cell1 cell1;
            cell1.cell1();
            break;
        }
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2022, 17:04
Ответы с готовыми решениями:

Друзья, подскажите, как в классе создать константное поле, ссылочное поле и объектное поле?
Препод на защите лабораторной по классам дал задание большое. В общем-то все пункты я знаю как...

Перекраска клеток
Дано клетчатое поле N x M, все клетки поля изначально белые. Автомат умеет: закрасить клетку...

Игра в закрашивание клеток
Двое ребят на клетчатом листе бумаги N × M клеток играют в такую игру: они по очереди закрашивают...

Пересечение клеток на плоскости отрезком
Салют всем тем, кому еще не салютовал :} Есть программа, реализующая подсчет клеток с...

Цвет клеток на шахматной доске
Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в...

13
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
04.06.2022, 17:08 2
Цитата Сообщение от Yan_L Посмотреть сообщение
если текущий номер клетки увеличен на 1, есть вокруг нее, то увеличить номер клетки на 1, иначе оставить, каким был.
...
Миниатюры
Поле клеток  
1
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
04.06.2022, 17:12 3
ХЗ чо там надо, но для начала явно нужен ещё один такой же буферный массив.
0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 45
04.06.2022, 17:54  [ТС] 4
Вот и я о том же, надо сделать эту проверку , а я понятия не имею как
0
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
04.06.2022, 20:21 5
Один вопрос - сначала все клетки проверяем, а потом выводим (если нужно, с увеличением), или для каждой клетки делаем проверку и сразу увеличиваем, а потом снова проверяем (с самого начала)? Думаю, первый вариант, но не на 100%.
Как делать проверку (вроде очевидно) - сравниваешь со значениями слева / справа / сверху / снизу (если они есть).
0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 45
04.06.2022, 20:27  [ТС] 6
Проверяем каждую клетку, справа, слева, снизу, сверху и потом уже выводим результат
0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,658
04.06.2022, 20:51 7
Цитата Сообщение от Yan_L Посмотреть сообщение
Проверяем каждую клетку
в каком порядке ?
Цитата Сообщение от Yan_L Посмотреть сообщение
Проверяем каждую клетку
со старыми значениями или новыми, уже увеличенными ?
Сколько раз делать проверки ?
1 или пока не будет ни одного изменения значения ?

Вот этих всех нюансов в ТЗ нету. То есть - неопределенное поведение (UB)

0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 45
04.06.2022, 21:33  [ТС] 8
Ну проверяем по очереди, если находим клетку в радиусе которой есть больше на 1 увеличиваем её и идём дальше до конца, и все
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
04.06.2022, 22:00 9
gunslinger, SmallEvil,
Вы чо, сурьёзно?
Бессмысленно делать это только на одной "матрице"

Цитата Сообщение от SmallEvil Посмотреть сообщение
этих всех нюансов в ТЗ нету
В ТЗ нет лишь всего остального нормального ТЗ.
Yan_L,
Цитата Сообщение от Yan_L Посмотреть сообщение
Нужно сделать проверку : если текущий номер клетки увеличен на 1, есть вокруг нее, то увеличить номер клетки на 1, иначе оставить, каким был.
Что это, Ъ, означает?
Соберись и выдай максимально развёрнуто и понятно.
1
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
04.06.2022, 22:07 10
Folian, где я явно говорил про одну матрицу? И даже если "меня неправильно поняли и слова вырваны из контекста", то дело (было) вовсе не в реализации ("тысячи их"), а в понимании "сакрального" смысла задачи.
2
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 45
04.06.2022, 22:40  [ТС] 11
Есть поле клеток (размер клеток выбирается: маленькие \средние\большие - 3 варианта с соответствующим размером) и есть набор цветов (количество выбирается пользователем, но ограничено заданным максимальным количеством), где каждому соответствует свой номер, при создании поля цвета выбираются случайно для каждой клетки.
Следующим шагом проверяются клетки: если текущий номер цвета клетки увеличен на 1, есть вокруг нее (или N таких клеток, где N задается сначала), то увеличить номер цвета на 1, иначе оставить, каким был.
Выполнить моделирование с помощью описанной логики.
Вывод на каждом шагу производить с помощью цифр. То есть ячейка отображается как одна или несколько одинаковых цифр (в зависимости от выбранного размера). То есть, например, клетка среднего размера, которой соответствует цвет под номером 1, может отображаться на поле :
1 1
1 1
А большого размера:
1 1 1
1 1 1
1 1 1
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
05.06.2022, 11:19 12
Цитата Сообщение от Yan_L Посмотреть сообщение
проверяются клетки: если текущий номер цвета клетки увеличен на 1, есть вокруг нее (или N таких клеток, где N задается сначала),
(╯ ° □ °) ╯ ┻━┻
0
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,658
05.06.2022, 15:42 13
Yan_L, ладно, могу дать несколько советов.
Все ниже написанное полная отсебятина и допущения, и не рекомендуется использовать НИКОМУ.

Проверка ячеек и их "рост", будет рассчитываться для всех ячеек и один раз.
Исходную матрицу с кубиками разного размера, преобразуем в матрице с 1 элементом (реально или логически, не важно).
Создаем новую матрицу с размерами исходной.
Делаем подсчет и изменяем согласно ПРАВИЛу.
ПРАВИЛО :
- Если значения хоть одного СОСЕДа текущей, больше на 1 - увеличиваем значение текущей ячейки на 1.
СОСЕДИ :
- все доступные прилегающие ячейки массива к текущей, влево, вправо , вверх, вниз.

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
#include <iostream>
 
using namespace std;
 
int main()
{
    const int SHIFTSC = 4;
    const int shifts[SHIFTSC][2]{{0,1},{0,-1},{1,0},{-1,0},};
    const int ROWS = 2, COLS = 3;
    int src[ROWS][COLS] {
        {1, 5, 9,},
        {2, 6, 5,},
    };
    int r, c;
    int res[ROWS][COLS];
    for (int i=0; i<ROWS; ++i){
        for (int j=0; j<COLS; ++j){
            for (int sh=0; sh<SHIFTSC; ++sh){
                r = i + shifts[sh][0];
                c = j + shifts[sh][1];
                res[i][j] = src[i][j];
                if ( (r>=0 && r<ROWS) && (c>=0 && c<COLS) )
                    if ( (src[r][c] - src[i][j]) == 1){
                       ++res[i][j];
                       break;
                }
            }
        }
    }
    for (int i=0; i<ROWS; ++i){
        for (int j=0; j<COLS; ++j)
            cout << res[i][j] << " ";
        cout << "" << endl;
    }
 
    return 0;
}
С разными размерами ячеек, делаем прокси, класс, функцию, кусок кода, который будет проверять не ячейки,
а квадратные области.

С классом, написанным нужными методами и данными на std::vector, было бы легко и не принужденно.

Добавлено через 59 секунд
Цитата Сообщение от Yan_L Посмотреть сообщение
Вокруг 1 есть 2 и 5 , 2 больше 1 на 1 , значит нужно к 1 + 1:
2 5 9
2 6 5
А почему 5-и не заменились на 6, ведь 6 же больше на 1 за 5 ???
0
0 / 0 / 0
Регистрация: 14.10.2021
Сообщений: 45
05.06.2022, 15:46  [ТС] 14
5 поменяется на 6, мы идём по каждой цифре, и каждую цифру изменяем если есть вокруг стоящая на 1 больше, я просто примером показал на одной цифре)
Сейчас буду разбирать код, спасибо
0
05.06.2022, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2022, 15:46
Помогаю со студенческими работами здесь

Нумерация клеток заданной полоски
Помогите пожалуйста с заданием! Дана полоска длиной 2k клеток и шириной в одну клетку. Полоску...

Движение игроков по полю 9 на 9 клеток
Два игрока стартуют в левом верхнем углу поля 9*9 и движутся к центру поля. Победит тот, кто придет...

Координаты двух клеток шахматной доски
Есть координаты двух клеток шахматной доски. Вывести Yes, если фигура может за один ход перейти с...

Сосчитать количество пересеченных отрезком клеток
Здравствуйте! Подскажите, а как будет выглядеть программа, считающая количество пересеченных...

Посчитать количество занятых клеток кроссворда
Помогите,пожалуйста решить задачу. Кроссворд размещен в квадрате. Строки и столбцы квадрата...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru