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

Как в функцию передать параметр - двухмерный массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 221, средняя оценка - 4.84
ghgfh
2 / 2 / 0
Регистрация: 30.05.2009
Сообщений: 22
02.06.2009, 08:41     Как в функцию передать параметр - двухмерный массив #1
C++
1
2
3
4
5
6
7
8
9
10
11
void max_el[B]()
{
 int i,j,max;
 for ( i=1 ; i<=n; i++)
 for ( j=1; j<=m; j++)                          //nahodim maksimalnii element
 if (max<a[i][j]) { max=a[i][j]; max_str=i; };
 
 printf("Max element = %3d in Str %2d \n \n",max,max_str);
 
 for ( j=1 ; j<=m; j++) printf("%3d ",a[max_str][j]);
};
Пожалуйста, напишите, как в функцию правильно вписать параметр двумерный массив.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
02.06.2009, 09:03     Как в функцию передать параметр - двухмерный массив #2
целиком все массивы передавать - тебе стека не хватит.
передавай ссылку.
AltPeople
 Аватар для AltPeople
10 / 10 / 1
Регистрация: 25.09.2008
Сообщений: 73
02.06.2009, 10:28     Как в функцию передать параметр - двухмерный массив #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
const int i=10;
const int j=10;
int array[j][i]={0};
...
max_el(array);
...
 
void max_el(int a[j][i])//к примеру матрица 10х10, 
{
int i,j,max=0;//лучше max присвоить начальное значение 0!
for ( i=1 ; i<=n; i++)
for ( j=1; j<=m; j++) //nahodim maksimalnii element
if (max<a[i][j]) { max=a[i][j]; max_str=i; };
 
printf("Max element = %3d in Str %2d \n \n",max,max_str);
 
for ( j=1 ; j<=m; j++) printf("%3d ",a[max_str][j]);
};
таким образом можно...
Marinich
9 / 9 / 4
Регистрация: 22.05.2009
Сообщений: 54
02.06.2009, 10:53     Как в функцию передать параметр - двухмерный массив #4
Так не получится.

Все проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void max_el(int *a) {
   int i, j, max = 0;
   for (i = 1; i <= n; i++)
      for (j = 1; j <= m; j ++) //nahodim maksimalnii element
         if (max < a[i][j]) {
            max = a[i][j];
            max_str = i;
         }
   printf("Max element = %3d in Str %2d \n \n",max,max_str);
   for ( j = 1 ; j <= m; j ++) 
      printf("%3d ", a[max_str][j]);
}
В main() пишем следущее:
C++
1
2
3
4
5
int main() {
   int a[10][10];
   max_el(a);
   return 0;
}
PS: И кто такой хороший научил тебя ставить ";" после фигурных скобок?
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
02.06.2009, 11:05     Как в функцию передать параметр - двухмерный массив #5
так получится ???
Цитата Сообщение от Marinich Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
void max_el(int *a) {
   int i, j, max = 0;
   for (i = 1; i <= n; i++)
      for (j = 1; j <= m; j ++) //nahodim maksimalnii element
         if (max < a[i][j]) {
            max = a[i][j];
            max_str = i;
         }
   printf("Max element = %3d in Str %2d \n \n",max,max_str);
   for ( j = 1 ; j <= m; j ++) 
      printf("%3d ", a[max_str][j]);
}
может я чего не знаю, но обращение a[i][j] работать не может. ты-же ссылку передал.
void max_el(int *a)
размерность массива в функции не указана.
AltPeople
 Аватар для AltPeople
10 / 10 / 1
Регистрация: 25.09.2008
Сообщений: 73
02.06.2009, 12:41     Как в функцию передать параметр - двухмерный массив #6
2 Marinich :
и с чего ты взял что так void max_el(int a[10][10]), или void max_el(int a[][10], int i), где i передается в функцию и i=10 - не получится?????
объясни...
подобные задачи я решал таким образом, а с указателями Patch прав, полечение эл-та массива происходит через смещение указателя
Marinich
9 / 9 / 4
Регистрация: 22.05.2009
Сообщений: 54
03.06.2009, 10:06     Как в функцию передать параметр - двухмерный массив #7
Да, ступил. Бывает.

В своем коде сделал 2 ошибки:
1) В первой строке
C++
1
void max_el(int **a) {
2) В main() вместо int a[10][10] надо написать
C++
1
2
3
4
    int **a;
    a = new int *[10];
    for (int i =0; i<10; i ++)
        a[i] = new int [10];
Тогда все будет работать.
Просто уже привычка работать с динамическими, вот и стал забывать простые вещи.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
03.06.2009, 10:31     Как в функцию передать параметр - двухмерный массив #8
Цитата Сообщение от Marinich Посмотреть сообщение
int **a; a = new int *[10]; for (int i =0; i<10; i ++) a[i] = new int [10];
ну дык... это ж другое дело... это создание динамического двумерного массива (через массив указателей).. а если есть статический двумерный массив, то тут есть вариант следующий:

C++
1
2
3
4
5
6
7
8
9
int A[5][7];
 
int **M = new int*[5];
for (int i=0; i<5; i++) M[i] = A[i];
   
void func(int **A, int m, int n)
{
   // работа с массивом A[i][j]
}
только необходимо не забывать удалять потом массив указателей...


Цитата Сообщение от AltPeople Посмотреть сообщение
for ( i=1 ; i<=n; i++)
в массивах индексация начинается с 0 ... т.е. необходимо писать так:

C++
1
for ( i=0 ; i<n; i++)
AltPeople
 Аватар для AltPeople
10 / 10 / 1
Регистрация: 25.09.2008
Сообщений: 73
03.06.2009, 11:23     Как в функцию передать параметр - двухмерный массив #9
2 Monte-Cristo :
я знаю, этот код я не проверял, а просто скопировал
Sanek911
4 / 4 / 0
Регистрация: 04.12.2009
Сообщений: 42
21.03.2010, 19:14     Как в функцию передать параметр - двухмерный массив #10
Я ох..ший с людей, которые пишут лишь бы писать
так вот напомню старую русскую пословицу
Слово серебро, молчание золото.
Это относиться и к вашей писанине, вы перед тем как писать пример проверьте его, а потом пишите, а то пишите всякую х..ню, которая не работает
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.03.2010, 19:20     Как в функцию передать параметр - двухмерный массив #11
Можно и так поизвращаться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <limits>
 
template <class T>
int Max(T matrix, int n, int m)
{
  int max = -std::numeric_limits<int>::max();
 
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
      if (matrix[i][j] > max)
        max = matrix[i][j];
 
  return max;
}
cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
21.03.2010, 19:22     Как в функцию передать параметр - двухмерный массив #12
ты напиши что тебе именно надо как и куда, я тебе прогу напишу, только ес онас цифрами связана, с символами и строками я ешо не оч

Добавлено через 1 минуту
массив..куда....зачем...мля...
marksh
Сообщений: n/a
06.12.2010, 15:22     Как в функцию передать параметр - двухмерный массив #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef struct pixx
{
     unsigned char pix[100][100];
}a;
 
void xxx(pixx* aaas)
{
   aaas->pix[0][1]=2;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    pixx sss;
    sss.pix[0][0]=1;
    xxx(&sss);
    Edit1->Text=IntToStr(sss.pix[0][0])+" "+IntToStr(sss.pix[0][1])  ;
}
Anarchy
 Аватар для Anarchy
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 22:00     Как в функцию передать параметр - двухмерный массив #14
а как в функцию как параметр передать вот такую штуку FILE* InFile
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.12.2010, 22:45     Как в функцию передать параметр - двухмерный массив #15
Sanek911, советую вам к своим же собственным словам прислушаться и не писать всякую..... Ну дальше вы поняли.
Demonig
Сообщений: n/a
02.04.2012, 17:30     Как в функцию передать параметр - двухмерный массив #16
Sanek911, cibertronic, своими словами вы показываете не ум, а глупость. И да, marksh - тут взрослые дядьки пишут код под консольный визуал, а не борланд. Поэтому хотя бы для приличия убрали бы Button1Click, чтобы народ не смешить. А теперь к коду:
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
void arc(char arra[][10])
{
    int i, j;
    for (i = 0; i < 2; i++)
        for (j = 0; j < 10; j++)
            arra[i][j] = '1';    //Заполнить массив можно и по другому - кэп(с)
}
void main()
{
    int i, j;
    char arra[2][10];
    arc(arra);
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 10; j++)    //Для далёких - вывод, можно не использовать
        {
            printf("%c", arra[i][j]);
            printf(" ");    //Зачем? А чтобы пробел был виден между символами
        }
        printf("\n");     //Зачем? Переход на новую строку
    }
    getch();
 
}
Как видно из моего кода, при вызове статики необходимо обязательно указать размерность второй оси. Ах да, первую трогать не стоит. И попробуйте не вылезти за пределы цифровой сетки.
Также есть код одного моего хорошего друга:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void arc(int*);
void main()
{   int mt[3][4];
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
            mt[i][j]=0;
    arc(mt[0]);
    for(i=0;i<3;i++)
    {   printf("\n");
        for(j=0;j<4;j++)
            printf("%3d",mt[i][j]);
    }
    getch();
 
}
void arc(int *mt)
{   *(mt+4*2+1)=1;//матрица представляет собой "длинный массив"
    *(mt+4*1+3)=8;
    mt[1]=7;
}
Неудобством его является трудность при работе с массивами огромных размеров. Тут он представлен в виде большой цепочки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2012, 17:34     Как в функцию передать параметр - двухмерный массив
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
02.04.2012, 17:34     Как в функцию передать параметр - двухмерный массив #17
Demonig, на даты сообщений поглядывайте иногда.
Yandex
Объявления
02.04.2012, 17:34     Как в функцию передать параметр - двухмерный массив
Ответ Создать тему
Опции темы

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