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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
#1

про функции и 2х мерный массив - C++

15.05.2009, 12:16. Просмотров 1137. Ответов 10
Метки нет (Все метки)

привет)
вот тут кое что немагу понять
пример

C++
1
2
3
4
5
 
int mass [2] [3];
for (int i =0; i<2; i++)
            for (int j = 0; j< 0; j++)
                      cin >> mass [i] [j];
вот так просто записывают в 2х мерный массив

а вот как написать или можно написать функцию которая запрашивает на заполнения массива

C++
1
2
3
4
5
6
7
8
 
int mac (int [] [3] , int n)
{
              for (int i = 0; i< n; i++)
                      for (int j = 0; j<3; j++)
                                   cin >> mass [i] [j];
                     return // а дальше незнаю что возвращать да и правильно ли написал ыункцию
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.05.2009, 12:39     про функции и 2х мерный массив #2
Тип у такой функции void должен быть и возвращать ничего не надо.
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
15.05.2009, 17:11  [ТС]     про функции и 2х мерный массив #3
Цитата Сообщение от kazak Посмотреть сообщение
Тип у такой функции void должен быть и возвращать ничего не надо.
тоесть вводит числа в 2-х мерный массив нужно невозвращающей функцией



Код C++123456789 int mass [2] [3];*void mac ( int ar [] [3] , int n ){ for ( int i = 0; i < n ; i++)for ( int j = 0; j < 3; j++)std : : cin >> ar [ i ] [ j ] ;
}
такая чтоли будет функция?

Добавлено через 4 минуты 46 секунд
C++
1
2
3
4
5
6
7
 
void mac (int ar [] [3] , int n)
{
              for ( int i = 0; i < n; i++)
                      for ( int j = 0; j < 3; j++)
                                  std : : cin >> mass [i] [j];
   }
такая функция?
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
15.05.2009, 20:15     про функции и 2х мерный массив #4
Код не скомпилируется,скорее всего,так как первая размерность массива должна иметь тип const int.У тебя получается,что на момент компиляции размер массива неизвестен.
C++
1
2
3
4
5
6
void mac (int ar [2] [3] )
{
              for ( int i = 0; i < 2; ++i)
                      for ( int j = 0; j < 3; ++j)
                                  std : : cin >> mass [i] [j];
   }
Monte-Cristo
2786 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
15.05.2009, 20:21     про функции и 2х мерный массив #5
если необходимы функции, то лучше работать с динамическеой памятью - масивом указателей (в изреченениях некоторых преподов - динамической матрицей)
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
16.05.2009, 03:17  [ТС]     про функции и 2х мерный массив #6
да я книгу Прата читаю вот дошел там до функций,но там нет примера как ввод в 2-х мерный массив в функции делать
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.05.2009, 12:21     про функции и 2х мерный массив #7
Чтобы просто заполнить используй такой прототип void FunctionName(<TypeOfArray> array[][columnSize], int rowSize);
Evg
Эксперт CАвтор FAQ
17259 / 5513 / 342
Регистрация: 30.03.2009
Сообщений: 15,010
Записей в блоге: 26
16.05.2009, 12:41     про функции и 2х мерный массив #8
Цитата Сообщение от #pragma Посмотреть сообщение
Код не скомпилируется,скорее всего,так как первая размерность массива должна иметь тип const int.У тебя получается,что на момент компиляции размер массива неизвестен.
В процедуре параметр, описанный как массив, передаётся по косвенности. В этом случае первая размерность не нужна, т.к. при вычислении адреса элемента она в расчёт не входит. Если нужно написать процедуру для массива с заранее известными размерами, то можно просто написать

C
1
2
3
4
5
6
7
8
9
10
11
12
void mac (int mas[2][3])
{
  for (int i = 0; i<2; i++)
    for (int j = 0; j<3; j++)
      cin >> mas [i][j];
}
 
main()
{
  int a[2][3];
  mac (a);
}
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
16.05.2009, 16:32  [ТС]     про функции и 2х мерный массив #9
а в чем разница
C++
1
void mac(int ar [] [3],int n);
и
C++
1
void mas(int arr [2] [3];
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
16.05.2009, 16:51     про функции и 2х мерный массив #10
C++
1
void mas(int arr [2] [3]);
тоже самое что и
C++
1
void mas(int arr [] [3]);
размерность строк будет игнорироваться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2009, 16:53     про функции и 2х мерный массив
Еще ссылки по теме:

C++ Пяти мерный динамический массив
C++ m - мерный массив
C++ 5-ти мерный массив
C++ N-мерный массив в векторе
Вывести 2-мерный массив в виде матрицы C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17259 / 5513 / 342
Регистрация: 30.03.2009
Сообщений: 15,010
Записей в блоге: 26
16.05.2009, 16:53     про функции и 2х мерный массив #11
Ни в чём. При вычислении адреса элемента ar[x][y] используется только вторая размерность массива (3), первая нужна только для вычисления размера массива. Поскольку мы его передаём по указателю, то оно нужно только для красоты. Всё равно все варианты хреновые, т.к. в твоём случае одно измерение подаём параметром, а другое зашито внутри процедуры. В моём случае оба значения зашиты (т.е. черезжопность равномерная).

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

C
1
2
3
4
5
6
7
8
9
10
11
12
void mac (int *ar, int x, int y)
{
  for (i = 0; i < x; i++)
    for j = 0; j < y; j++)
      *(ar + i*y + j) = <инициализируем>
}
 
main ()
{
  int a[2][3];
  mac ((int*)a, 2, 3);
}
Yandex
Объявления
16.05.2009, 16:53     про функции и 2х мерный массив
Ответ Создать тему
Опции темы

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