2 / 1 / 0
Регистрация: 30.05.2009
Сообщений: 22
1

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

02.06.2009, 08:41. Показов 42783. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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]);
};
Пожалуйста, напишите, как в функцию правильно вписать параметр двумерный массив.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2009, 08:41
Ответы с готовыми решениями:

Как передать двухмерный массив в функцию?
Подскажите пожалуйста, как в функцию передать двухмерный массив? Пробовал так: void FuncArr(int**...

Как передать двухмерный массив в функцию по ссылке?
Преподаватель в универе просит написать функцию вида void st3(&amp;array, &amp;n, &amp;m). Бьюсь головой об...

Как передать в функцию указатель на двухмерный массив?
Здравствуйте. Как передать в функцию указатель на двухмерный массив? Код компилируется, но...

Как передать в функцию двухмерный динамический массив по ссылке?
как передать в функцию двухмерный динамический массив по ссылке?

16
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
02.06.2009, 09:03 2
целиком все массивы передавать - тебе стека не хватит.
передавай ссылку.
2
10 / 10 / 2
Регистрация: 25.09.2008
Сообщений: 71
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]);
};
таким образом можно...
3
9 / 9 / 7
Регистрация: 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: И кто такой хороший научил тебя ставить ";" после фигурных скобок?
1
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
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)
размерность массива в функции не указана.
0
10 / 10 / 2
Регистрация: 25.09.2008
Сообщений: 71
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 прав, полечение эл-та массива происходит через смещение указателя
0
9 / 9 / 7
Регистрация: 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];
Тогда все будет работать.
Просто уже привычка работать с динамическими, вот и стал забывать простые вещи.
0
2816 / 1407 / 107
Регистрация: 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++)
1
10 / 10 / 2
Регистрация: 25.09.2008
Сообщений: 71
03.06.2009, 11:23 9
2 Monte-Cristo :
я знаю, этот код я не проверял, а просто скопировал
0
7 / 7 / 1
Регистрация: 04.12.2009
Сообщений: 42
21.03.2010, 19:14 10
Я ох..ший с людей, которые пишут лишь бы писать
так вот напомню старую русскую пословицу
Слово серебро, молчание золото.
Это относиться и к вашей писанине, вы перед тем как писать пример проверьте его, а потом пишите, а то пишите всякую х..ню, которая не работает
1
Эксперт С++
2347 / 1720 / 148
Регистрация: 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;
}
0
257 / 144 / 18
Регистрация: 27.12.2009
Сообщений: 909
21.03.2010, 19:22 12
ты напиши что тебе именно надо как и куда, я тебе прогу напишу, только ес онас цифрами связана, с символами и строками я ешо не оч

Добавлено через 1 минуту
массив..куда....зачем...мля...
0
marksh
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])  ;
}
0 / 0 / 0
Регистрация: 25.12.2010
Сообщений: 23
28.12.2010, 22:00 14
а как в функцию как параметр передать вот такую штуку FILE* InFile
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.12.2010, 22:45 15
Sanek911, советую вам к своим же собственным словам прислушаться и не писать всякую..... Ну дальше вы поняли.
0
Demonig
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;
}
Неудобством его является трудность при работе с массивами огромных размеров. Тут он представлен в виде большой цепочки.
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
02.04.2012, 17:34 17
Demonig, на даты сообщений поглядывайте иногда.
0
02.04.2012, 17:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2012, 17:34
Помогаю со студенческими работами здесь

Передать двухмерный массив в функцию
Допустим, у меня есть двухмерный массив символов char level = { &quot; &quot;, &quot; ...

Передать двухмерный массив структур в функцию
Всем привет. Есть такой код - struct Array { float a; float b; }; void wr() {

Передать в функцию динамический двухмерный массив с динамическими размерами
Как передать динамический двухмерный массив с динамическими размерами? #include &lt;iostream&gt; ...

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


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

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

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