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

Матрица как параметр - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
09.04.2012, 19:40     Матрица как параметр #1
Не могу разобраться с передачей многомерных массивов в качестве параметра функции. Объясните пожалуйста на пальцах:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
 
int evenRowsSum(int ar[][], int size)
{
    int sum=0;
    for (int i=1;i<size;i+=2) 
        for (int j=0; j<size;j++)
            sum+=ar[i][j];
    return sum;
}
 
void main()
{
    const int N=10, M=5;
    ifstream myin("input.txt");
    int A[N][N], B[M][M];
    
    for (int i=0;i<N;i++)
        for (int j=0;j<N;j++)
            myin>>A[i][j];
    for (int i=0;i<M;i++)
        for (int j=0;j<M;j++)
            myin>>B[i][j];
    
    int YA, YB;
    YA=evenRowsSum(A,N);
    YB=evenRowsSum(B,M);
 
    if (YB=0) 
        cout<<"Ошибка! Сумма элементов в четных строках матрицы B равна 0.";
    else
    {
        double K=YA/YB;
        cout<<"K = "<<K;
    }
 
    system("pause");
}
Выдает ошибки:
Ошибка 1 error C2087: ar: отсутствует индекс
Ошибка 2 error C2664: evenRowsSum: невозможно преобразовать параметр 1 из "int [10][10]" в "int [][1]"
Ошибка 3 error C2664: evenRowsSum: невозможно преобразовать параметр 1 из "int [5][5]" в "int [][1]"
Ошибка 4 IntelliSense: массив не может содержать элементы этого типа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
09.04.2012, 19:54     Матрица как параметр #2
В объявлении функции надо явно указать количество элементов массива.
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
09.04.2012, 19:59  [ТС]     Матрица как параметр #3
Это понятно. Но что делать, если количество элементов заранее неизвестно? Чтобы эта функция могла обрабатывать матрицы разного размера?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
09.04.2012, 20:07     Матрица как параметр #4
передавай указатель на первый элемент массива указателей
Иными словами, int** ar
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
09.04.2012, 20:09  [ТС]     Матрица как параметр #5
так тоже не работает. Ошибки типа невозможно преобразовать int[10][10] в int**.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
09.04.2012, 20:14     Матрица как параметр #6
Цитата Сообщение от Айгуль Посмотреть сообщение
Это понятно. Но что делать, если количество элементов заранее неизвестно? Чтобы эта функция могла обрабатывать матрицы разного размера?
Я знаю два варианта, либо передавать указатель на первый элемент:
C++
1
2
3
4
5
void ar(int *a); // объявление функции
 
//вызов
int ar1[2][2] = {{1,5},{3,4}};
ar(*ar1);
В это случае массив индексируется как одномерный.

Либо, объявить массив указателей, и в функции принимать соответствующий аргумент:
C++
1
2
3
4
5
6
7
//массив указателей
 int **b = new int *[2];
for (int i; i <2; ++i)
   b[i] = new int [2];
 
//функция 
void ar(int **a, int size)  ;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2012, 20:20     Матрица как параметр
Еще ссылки по теме:

C++ Как передать элемент структуры, как параметр функции
C++ Класс как параметр другого класса
Как передать параметр в функцию? C++

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

Или воспользуйтесь поиском по форуму:
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
09.04.2012, 20:20  [ТС]     Матрица как параметр #7
Т.е. можно только через указатели?
Yandex
Объявления
09.04.2012, 20:20     Матрица как параметр
Ответ Создать тему
Опции темы

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