Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 3
1

Передача двухмерного массива в функцию и изменение элемента массива

24.10.2018, 19:02. Просмотров 627. Ответов 4
Метки нет (Все метки)

Такая проблема!
Нужно передать в функцию двухмерный массив и изменить на елемент который равен 0 и если рядом по матрице находятса нули их также изминить на -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
38
39
40
41
42
43
44
45
#include <iostream>
using namespace std;
 
int N;
int M;
 
void one( int *a, int x, int y) {
    a[x][y] = -1;                                // вот тут компилятор говорит "invalid types 'int[int]' for array subscript" (недопустимые типы 'int [int]' для индекса массива) 
    if (a[x + 1][y] == 0 && x != N - 1) {
        one((int *)a, x, y);
    }
    
    if (a[x - 1][y] == 0 && x != 0) {
        one((int *)a, x, y);;
    }
    
    if (a[x][y + 1] == 0 && *y != M - 1) {
        one((int *)a, x, y);;
    }
 
    if (a[x][y - 1] == 0 && x != 0) {
        one((int *)a, x, y);;
    }
}
int main() {
    
    cin >> N >> M;
    int a[N][M];
    int k = 0;
    for (int i = 0; i < N; i ++) {
        for (int j = 0; j < M; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 0; i < N; i ++) {
        for (int j = 0; j < M; j++) {
            if (a[i][j] == 0) {
                one((int *)a, i, j);
                k++;
            }
        }
    }
    cout << k;
    return 0;
}
пытался передать "j" как указатель программа запускаетса но после введения данных консоль зависает и возвращает Process exited after 23.82 seconds with return value 3221225477
пишу на DEV C++
новичок так что не ругайте сильно)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2018, 19:02
Ответы с готовыми решениями:

Передача двухмерного массива в функцию
Добрый вечер! Возникла задача, в которой необходимо передавать двумерные массивы в функцию. Размер...

Передача двухмерного массива в функцию
Товарищи, помогите, пожалуйста, с таким вопросом: Я хочу сделать функции ввода и вывода...

Передача двухмерного массива в функцию
static field fields; field - моя собственная структура функция принимает параметры в таком виде...

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

4
1528 / 880 / 409
Регистрация: 01.10.2018
Сообщений: 1,834
Записей в блоге: 2
24.10.2018, 19:21 2
Как минимум
C++
1
void one( int **a, int x, int y)
отстальное сильно похоже на бред, учитывая рекурсивные вызовы на ровном месте. Но разбираться не стал. Если оформите код в посте как код, а не как текст, можно продолжить разговор.
0
Модератор
Эксперт С++
9795 / 8357 / 5090
Регистрация: 18.12.2011
Сообщений: 22,347
24.10.2018, 19:39 3
см. Образцы (шаблоны) программ для типовых задач
0
0 / 0 / 0
Регистрация: 24.10.2018
Сообщений: 3
24.10.2018, 23:15  [ТС] 4
какими только способами я не пытался передать массив в функцию но не в этом проблема проблема в том что я не могу передать мои кординаты (по двухмерному массиву) который нужно изменить.
Суть задачи в масиве символов например:
-1 -1 -1 -1 -1 -1 -1 -1
-1 0 -1 0 -1 0 0 -1
-1 -1 0 0 -1 0 0 -1
-1 0 0 0 -1 0 0 -1
-1 0 0 0 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1


"-1" - это отметка пикселя контура
"0" - это отметка белого пикселя

и мне нужно посчитать сколько есть областей образованные белыми пиксилями

образуются эти области соединенными белыми пикселями в которых есть общая граница или верхняя или боковая
на примере есть 3 области
потому я и пользуюсь рекурсией чтоб закрасить всю область
то есть нахожу первый 0 и передаю его в функцию где проверяю или равны "0" элементы рядом с моим "0" если да то "закрашивать" эту область в -1 и теперь проверять ли равны "0" элементы вокруг моего следующего 0 и так дальше пока вся область не "закрасится" в -1
считаю сколько областей я закрасил и вывожу число областей
и единствиное что мне мешает это то что я не могу передать в функцию кординаты "0"
который нужно закрасить и проверить равны ли элементы вокруг "0"
и равны ли "0" элементы вокруг этого (уже закрашеного в -1) "0"

помогите пожалуйста
буду очень благодарен!!
0
1528 / 880 / 409
Регистрация: 01.10.2018
Сообщений: 1,834
Записей в блоге: 2
25.10.2018, 00:30 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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int N;
int M;
 
void one(int **a, int x, int y) {
    a[x][y] = -1;
    if (a[x + 1][y] == 0 && x != N - 1) {
        one(a, x + 1, y);
    }
 
    if (a[x - 1][y] == 0 && x != 0) {
        one(a, x - 1, y);
    }
 
    if (a[x][y + 1] == 0 && y != M - 1) {
        one(a, x, y + 1);
    }
 
    if (a[x][y - 1] == 0 && x != 0) {
        one(a, x, y - 1);
    }
}
int main() {
 
    cin >> N >> M;
 
    int **a;
    a = new int*[N];
    for (int i = 0; i < N; ++i)
        a[i] = new int[M];
 
    int k = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            cin >> a[i][j];
        }
    }
 
    cout << "\ncheck input\n";
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            cout << setw(3) << a[i][j];
        }
        cout << endl;
    }
 
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            if (a[i][j] == 0) {
                one(a, i, j);
                k++;
            }
        }
    }
 
    for (int i = 0; i < N; ++i)
        delete[] a[i];
    delete[] a;
 
    cout << k;
    return 0;
}
И не пользуйтесь автоматическими массивами с переменной длиной. В стандарте C++ такого зверя нет. Это из мира C. А то, что компилятор gcc имеет такое расширение, не означает, что им надо пользоваться. Да и фича эта не очень надёжна в плане работы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2018, 00:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Передача двухмерного массива в функцию
Программа формирует двухмерный массив, на основе введенных данных заполнив его числами натурального...

Передача двухмерного массива в функцию
Хочу посчитать определитель, но возникает проблема, когда передаю двумерный массив в функцию,...

Передача динамического двухмерного массива в функцию
Всем добрый вечер. Я понимаю, что эта тема поднималась не раз, но хочу еще раз спросить т.к....

Передача динамического двухмерного массива в функцию
Как передать этот динамический массив в функцию? int main() { int *a; int m=3, n=3,s=0; a...


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

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

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