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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
#1

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

09.04.2012, 19:40. Просмотров 1456. Ответов 6
Метки нет (Все метки)

Не могу разобраться с передачей многомерных массивов в качестве параметра функции. Объясните пожалуйста на пальцах:
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: массив не может содержать элементы этого типа
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 19:40     Матрица как параметр
Посмотрите здесь:

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

C++ как правильно передавать функцию как параметр? - C++
Всем првет! Я кодю на OpenGL и сделал клас Game у меня в етом класе есть функция DrawGLScene(); как мне передать ее в ...

Функция как параметр - C++
Нужна помощь.... Проблема такая: есть функция которая рисует график математической функции ранее обьявленной, например: float f(float...

Как передать параметр? - C++
Вопрос как сделать так чтобы в методе класса в качестве параметра передавать указатель на этот класс? Например: class A { A() {}; ...

String как параметр функции - C++
Подскажите, пожалуйста, что здесь не так. При компиляции выдаёт &quot;синтаксическая ошибка: идентификатор &quot;string&quot;&quot;. Пробовал убрать &lt;string&gt; и...

лямбда как параметр функции - C++
здравствуйте, есть код: template&lt;typename Container, typename...Args&gt; void fafa(Container&amp;&amp; c, std::function&lt;Args...&gt; f) { ...

Как передать параметр в функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; void test(int); int main() { int n = 1; for (int i = 0; i &lt;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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++
void Delete(Computer *pcomputer) { unsigned int RemoveComputer; int NumberCopy; NumberCopy = NumberOfComputers; cout &lt;&lt;...

Анонимные функции, как параметр - C++
Здравствуйте. Есть проблема - много функций, каждой придумывать имена не хочу, тем более, что они мне не пригодятся. Суть такова: void...

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

Класс как параметр другого класса - C++
Зачем использовать один класс как параметр другого, пример: class A {} class B {private: A Peremennaya;} И в чем разница: ...


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

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

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