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

Передача двумерного массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
03.01.2012, 22:45     Передача двумерного массива #1
Здравствуйте.
Требуется передать двумерный массив в функцию и там уже его использовать.
Все никак не получалось, полазил по результатам поиска, перепробовал различные способы, например, как тут Основы работ с циклами и функциями
и тут http://www.cyberforum.ru/cpp-beginne...ead365228.html
Итак, есть двумерный массив нулей/единиц определенного размера.
Внутри - нули и единицы. По сути мне нужно "обрезать" его, исключить крайние столбцы/строчки без единиц, допустим.
Есть массив picture1, массив объявлен правильно, перед этим я его много раз печатаю, так что все ок.
Это - переменные новых границ массива.
C++
1
2
3
4
leftk = left(picture1,widthk, heightk);
 rightk = right(picture1,widthk, heightk);
 topk = top(picture1,widthk, heightk);
 bottomk = bottom(picture1,widthk, heightk);
Создаю отдельно 4 функции - для каждой стороны.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int bottom(int *picture1,int row,int column)
  {
  int x=row,y=column;
   for (y = row; y >1 ;y++)
  {
  for (x = column;  x >1; x++)
  {
  if (picture1[x][y]==1)
  {
  return y;
  }
  }
  }
  }
Точно так же и остальные три, смысла особо нет писать.

Вылетает куча ошибок, начиная с какого-то непонятного Invalid Indirection в строке 8 второго кода.
А дальше - в первых четырех строчках сплошные Type mismatch (wanted 'int*', got 'int[*][200]')
Помогите пожалуйста, я что-то не понимаю, видимо.

Да, остальные недостатки кода я знаю, поэтому, прошу не сильно возмущаться массивом из 200 интов и т.д.
)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ProNoooob
71 / 71 / 6
Регистрация: 14.10.2009
Сообщений: 121
03.01.2012, 22:55     Передача двумерного массива #2
Цитата Сообщение от Eugene THE BEST Посмотреть сообщение
Да, остальные недостатки кода я знаю, поэтому, прошу не сильно возмущаться массивом из 200 интов и т.д.

По проблеме. Точнее проблемы то и нет.
Тебе в функцию нужно передать не указатель на int, а указатель на указатель на int.
int **picture1

И уже с ним работать привычным способом.
picture1[x][y]
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
03.01.2012, 23:06  [ТС]     Передача двумерного массива #3
Не могли бы вы написать, что именно нужно добавить в
leftk = left(picture1,widthk, heightk);
Эту строчку(например)
И что - в описание функции.
Спасибо.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
03.01.2012, 23:06     Передача двумерного массива #4
Цитата Сообщение от Eugene THE BEST Посмотреть сообщение
Требуется передать двумерный массив в функцию и там уже его использовать.
Если размеры обоих индексов известны на этапе трансляции. Думаю, что это Ваш случай.
C++
1
2
3
4
5
6
7
8
9
10
#define dimm1 3
#define dimm2 4
...
void print_array( int array[ dimm1 ][ dimm2 ] ) {
    for ( size_t i = 0; i < dimm1; ++i ){
        for ( size_t j = 0; j < dimm2; ++j )
            cout << setw(5) << array[ i ][ j ] ;
    cout << endl;
    }
}
Если речь идет о динамическом двумерном массиве:
C++
1
2
3
4
5
6
7
void print_array( int** array, size_t dimm1, size_t dimm2 ) {
    for ( size_t i = 0; i < dimm1; ++i ){
        for ( size_t j = 0; j < dimm2; ++j )
            cout << setw(5) << array[ i ][ j ] ;
    cout << endl;
    }
}
Это примеры для c++, а для си чуть-чуть только поправить.
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
03.01.2012, 23:08  [ТС]     Передача двумерного массива #5
Roof, Спасибо, сейчас попробую, но мне нужна не воид-функция, мне эти границы возвращать.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
03.01.2012, 23:15     Передача двумерного массива #6
Я не решал задание Ваше, я лишь ответил на вопрос:
Цитата Сообщение от Eugene THE BEST Посмотреть сообщение
Требуется передать двумерный массив в функцию и там уже его использовать.
Т.е. передав свой массив способом, который я указал - с ним можно работать внутри функции.
Дальше думайте самостоятельно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2012, 23:49     Передача двумерного массива
Еще ссылки по теме:

Передача двумерного массива C++
C++ Передача двумерного массива в функцию
C++ Передача двумерного массива

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

Или воспользуйтесь поиском по форуму:
Eugene THE BEST
9 / 9 / 0
Регистрация: 14.02.2010
Сообщений: 126
03.01.2012, 23:49  [ТС]     Передача двумерного массива #7
Roof, Даа, замечательно, но как раз, как передать - то я и не знаю.
То есть - что написать при вызове функции?

Добавлено через 25 минут
Вау, я, кажется, смог, спасибо огромное!)
Yandex
Объявления
03.01.2012, 23:49     Передача двумерного массива
Ответ Создать тему
Опции темы

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