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

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

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

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

15.05.2009, 12:16. Просмотров 1263. Ответов 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 // а дальше незнаю что возвращать да и правильно ли написал ыункцию
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2009, 12:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос про функции и 2х мерный массив (C++):

3-х мерный массив+Строки+функции - C++
Задача: Обработать n1 матриц размером n*m. Элемент строка. В каждой из матриц есть одно слово состоящее только из цифр. Найти его,...

m - мерный массив - C++
Дано n точек m мерного пространства, каждая точка имеет массу. Найти координаты точки наиболее удаленной от точки центра масс. Помогите...

n-мерный массив - C++
Вопрос заключается в следующем: Как задать n-мерный массив в описании класса, если на начальной стадии неизвестна его размерность? Или...

2-х мерный массив. - C++
Дана целочисленная прямоугольная матрица. Определить: 1) количество столбцов, содержащих хотя бы один нулевой элемент; 2) номера строк,...

5-ти мерный массив - C++
написал функцию Проблема в том, что содержимое массива создается локально, а мне надо глобально То есть в строке 64 выводит все...

1 мерный массив - C++
В одномерном массиве, состоящем из n целых элементов, вычислить: 1) произведение элементов массива с четными номерами; 2) сумму...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
15.05.2009, 12:39 #2
Тип у такой функции void должен быть и возвращать ничего не надо.
0
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
15.05.2009, 17:11  [ТС] #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];
   }
такая функция?
0
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
15.05.2009, 20:15 #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];
   }
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
15.05.2009, 20:21 #5
если необходимы функции, то лучше работать с динамическеой памятью - масивом указателей (в изреченениях некоторых преподов - динамической матрицей)
0
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
16.05.2009, 03:17  [ТС] #6
да я книгу Прата читаю вот дошел там до функций,но там нет примера как ввод в 2-х мерный массив в функции делать
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
16.05.2009, 12:21 #7
Чтобы просто заполнить используй такой прототип void FunctionName(<TypeOfArray> array[][columnSize], int rowSize);
0
Evg
Эксперт CАвтор FAQ
17823 / 6033 / 388
Регистрация: 30.03.2009
Сообщений: 16,563
Записей в блоге: 26
16.05.2009, 12:41 #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);
}
1
Мегатрон
нубик программист)
96 / 10 / 0
Регистрация: 04.06.2008
Сообщений: 355
16.05.2009, 16:32  [ТС] #9
а в чем разница
C++
1
void mac(int ar [] [3],int n);
и
C++
1
void mas(int arr [2] [3];
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
16.05.2009, 16:51 #10
C++
1
void mas(int arr [2] [3]);
тоже самое что и
C++
1
void mas(int arr [] [3]);
размерность строк будет игнорироваться.
0
Evg
Эксперт CАвтор FAQ
17823 / 6033 / 388
Регистрация: 30.03.2009
Сообщений: 16,563
Записей в блоге: 26
16.05.2009, 16:53 #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);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2009, 16:53
Привет! Вот еще темы с ответами:

Двух мерный массив. - C++
Дана прямоугольная матрица. Найти строку с наибольшей и меньшей суммой элементов вывести на экран найденные строки и суммы их элементов.

динамический 2-х мерный массив - C++
помогите плиз вот код , нужно составить динамический 2-х мерный массив double **a int n,m,l; scanf(&quot;%d%d&quot;,&amp;n,&amp;m); a=(double **)...

N-мерный массив в векторе - C++
Здравствуйте. Можно ли в векторе хранить n-мерный массив. т.е. я с клавиатуры ввожу размерность n массива и потом заполняю сам массив.

Пяти мерный динамический массив - C++
Ребят помогите сделать пяти мерный динамический массив, я просто не в курсе как это делать.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.05.2009, 16:53
Ответ Создать тему
Опции темы

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