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

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

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

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

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

Как сделать функцию, которая тип данных использует как параметр? - C++
Хочу сделать функцию function(&quot;переменные&quot;, &quot;тип данных&quot;). Можно ли это реализовать? А именно, более подробно что-то в этом роде: ...

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

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

дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не сим - C++
помогите пожалуйста. условие: дана квадратичная матрица z. составить программу, которая если матрица симметричная(транспонированная...

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

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

6
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
09.04.2012, 19:54 #2
В объявлении функции надо явно указать количество элементов массива.
0
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
09.04.2012, 19:59  [ТС] #3
Это понятно. Но что делать, если количество элементов заранее неизвестно? Чтобы эта функция могла обрабатывать матрицы разного размера?
0
Kuzia domovenok
2030 / 1874 / 168
Регистрация: 25.03.2012
Сообщений: 6,451
Записей в блоге: 1
09.04.2012, 20:07 #4
передавай указатель на первый элемент массива указателей
Иными словами, int** ar
0
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
09.04.2012, 20:09  [ТС] #5
так тоже не работает. Ошибки типа невозможно преобразовать int[10][10] в int**.
0
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)  ;
1
Айгуль
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 8
09.04.2012, 20:20  [ТС] #7
Т.е. можно только через указатели?
0
09.04.2012, 20:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2012, 20:20
Привет! Вот еще темы с ответами:

Literal как параметр конструктора - C++
Доброго времени суток. Описываю клас который в себе содержит некое текстовое поле. Хотелось бы сделать его инициализацию при создании...

Как передать параметр в функцию? - 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;...

Как передать параметр в функцию? - C++
void Delete(Computer *pcomputer) { unsigned int RemoveComputer; int NumberCopy; NumberCopy = NumberOfComputers; cout &lt;&lt;...

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


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

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

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